From 08412b72bcb4f426c39cfca948fc0229a17c558e Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 26 Jan 2022 09:51:50 +0200 Subject: [PATCH 001/818] Run the CLI as non-root Run the Flux CLI inside the container under the nobody user and group. Signed-off-by: Stefan Prodan --- Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/Dockerfile b/Dockerfile index ffc5c945..4d72c9fb 100644 --- a/Dockerfile +++ b/Dockerfile @@ -20,4 +20,5 @@ RUN apk add --no-cache ca-certificates COPY --from=builder /usr/local/bin/kubectl /usr/local/bin/ COPY --chmod=755 flux /usr/local/bin/ +USER 65534:65534 ENTRYPOINT [ "flux" ] From f154326391ce82d19cace39eea59d44b79e75e7f Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 26 Jan 2022 10:41:17 +0200 Subject: [PATCH 002/818] Set minimum supported version to Kubernetes 1.20.6 Signed-off-by: Stefan Prodan --- .github/workflows/e2e.yaml | 2 +- CONTRIBUTING.md | 6 +++--- cmd/flux/check.go | 5 +---- cmd/flux/testdata/check/check_pre.golden | 2 +- 4 files changed, 6 insertions(+), 9 deletions(-) diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index 866af2c6..7a4f6165 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -27,7 +27,7 @@ jobs: uses: engineerd/setup-kind@v0.5.0 with: version: v0.11.1 - image: kindest/node:v1.19.11@sha256:07db187ae84b4b7de440a73886f008cf903fcf5764ba8106a9fd5243d6f32729 + image: kindest/node:v1.20.7 config: .github/kind/config.yaml # disable KIND-net - name: Setup Calico for network policy run: | diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c492f631..e60c9469 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -67,9 +67,9 @@ for source changes. Prerequisites: -* go >= 1.16 -* kubectl >= 1.19 -* kustomize >= 4.0 +* go >= 1.17 +* kubectl >= 1.20 +* kustomize >= 4.4 Install the [controller-runtime/envtest](https://github.com/kubernetes-sigs/controller-runtime/tree/master/tools/setup-envtest) binaries with: diff --git a/cmd/flux/check.go b/cmd/flux/check.go index a36159d0..d530f553 100644 --- a/cmd/flux/check.go +++ b/cmd/flux/check.go @@ -56,10 +56,7 @@ type checkFlags struct { } var kubernetesConstraints = []string{ - ">=1.19.0-0", - ">=1.16.11-0 <=1.16.15-0", - ">=1.17.7-0 <=1.17.17-0", - ">=1.18.4-0 <=1.18.20-0", + ">=1.20.6-0", } var checkArgs checkFlags diff --git a/cmd/flux/testdata/check/check_pre.golden b/cmd/flux/testdata/check/check_pre.golden index 02ba7892..ebb6294d 100644 --- a/cmd/flux/testdata/check/check_pre.golden +++ b/cmd/flux/testdata/check/check_pre.golden @@ -1,3 +1,3 @@ ► checking prerequisites -✔ Kubernetes {{ .serverVersion }} >=1.19.0-0 +✔ Kubernetes {{ .serverVersion }} >=1.20.6-0 ✔ prerequisites checks passed From 57962347f2c67134373b954751348c17271ff310 Mon Sep 17 00:00:00 2001 From: leigh capili Date: Wed, 26 Jan 2022 16:03:22 -0700 Subject: [PATCH 003/818] Output Usage for `flux get ` Signed-off-by: leigh capili --- cmd/flux/get_image.go | 3 --- cmd/flux/get_source.go | 4 ---- 2 files changed, 7 deletions(-) diff --git a/cmd/flux/get_image.go b/cmd/flux/get_image.go index 5cde4c24..41181189 100644 --- a/cmd/flux/get_image.go +++ b/cmd/flux/get_image.go @@ -25,9 +25,6 @@ var getImageCmd = &cobra.Command{ Aliases: []string{"image"}, Short: "Get image automation object status", Long: "The get image sub-commands print the status of image automation objects.", - RunE: func(cmd *cobra.Command, args []string) error { - return validateWatchOption(cmd, "images") - }, } func init() { diff --git a/cmd/flux/get_source.go b/cmd/flux/get_source.go index 0e3cd5e5..0be7acf0 100644 --- a/cmd/flux/get_source.go +++ b/cmd/flux/get_source.go @@ -25,10 +25,6 @@ var getSourceCmd = &cobra.Command{ Aliases: []string{"source"}, Short: "Get source statuses", Long: "The get source sub-commands print the statuses of the sources.", - RunE: func(cmd *cobra.Command, args []string) error { - - return validateWatchOption(cmd, "sources") - }, } func init() { From 9e7018383a8fa21d86e77f686cbce54f0a9335c1 Mon Sep 17 00:00:00 2001 From: Paulo Gomes Date: Thu, 27 Jan 2022 13:28:34 +0000 Subject: [PATCH 004/818] Add pkg-config to arm runners Signed-off-by: Paulo Gomes --- .github/runners/prereq.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/runners/prereq.sh b/.github/runners/prereq.sh index 013ced4a..bcec3428 100755 --- a/.github/runners/prereq.sh +++ b/.github/runners/prereq.sh @@ -23,7 +23,7 @@ KUBECTL_VERSION=1.21.2 KUSTOMIZE_VERSION=4.1.3 HELM_VERSION=3.7.2 GITHUB_RUNNER_VERSION=2.285.1 -PACKAGES="apt-transport-https ca-certificates software-properties-common build-essential libssl-dev gnupg lsb-release jq" +PACKAGES="apt-transport-https ca-certificates software-properties-common build-essential libssl-dev gnupg lsb-release jq pkg-config" # install prerequisites apt-get update \ From 246af923866469d4c78a698ab54e5b9566e48e03 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Fri, 28 Jan 2022 20:36:18 +0200 Subject: [PATCH 005/818] Adapt diff test to match Kubernetes 1.23.3 API response Signed-off-by: Stefan Prodan --- .../diff-kustomization/diff-with-drifted-service.golden | 5 ----- 1 file changed, 5 deletions(-) diff --git a/cmd/flux/testdata/diff-kustomization/diff-with-drifted-service.golden b/cmd/flux/testdata/diff-kustomization/diff-with-drifted-service.golden index d65e5968..6ddd3933 100644 --- a/cmd/flux/testdata/diff-kustomization/diff-with-drifted-service.golden +++ b/cmd/flux/testdata/diff-kustomization/diff-with-drifted-service.golden @@ -2,11 +2,6 @@ ► HorizontalPodAutoscaler/default/podinfo created ► Service/default/podinfo drifted -spec.ports - ⇆ order changed - - http, grpc - + grpc, http - spec.ports.http.port ± value change - 9899 From e9d6f271b5f5463ce821650cb0d8996ade9f6b39 Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Tue, 1 Feb 2022 09:48:15 +0000 Subject: [PATCH 006/818] Update toolkit components - helm-controller to v0.16.0 https://github.com/fluxcd/helm-controller/blob/v0.16.0/CHANGELOG.md - kustomize-controller to v0.20.0 https://github.com/fluxcd/kustomize-controller/blob/v0.20.0/CHANGELOG.md - source-controller to v0.21.1 https://github.com/fluxcd/source-controller/blob/v0.21.1/CHANGELOG.md - notification-controller to v0.21.0 https://github.com/fluxcd/notification-controller/blob/v0.21.0/CHANGELOG.md - image-reflector-controller to v0.16.0 https://github.com/fluxcd/image-reflector-controller/blob/v0.16.0/CHANGELOG.md - image-automation-controller to v0.20.0 https://github.com/fluxcd/image-automation-controller/blob/v0.20.0/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 14 +++++----- go.sum | 28 ++++++++++--------- .../bases/helm-controller/kustomization.yaml | 4 +-- .../kustomization.yaml | 4 +-- .../kustomization.yaml | 4 +-- .../kustomize-controller/kustomization.yaml | 4 +-- .../kustomization.yaml | 4 +-- .../source-controller/kustomization.yaml | 4 +-- manifests/crds/kustomization.yaml | 12 ++++---- 9 files changed, 40 insertions(+), 38 deletions(-) diff --git a/go.mod b/go.mod index ed41fed9..b70da37d 100644 --- a/go.mod +++ b/go.mod @@ -7,19 +7,19 @@ require ( github.com/ProtonMail/go-crypto v0.0.0-20211221144345-a4f6767435ab github.com/cyphar/filepath-securejoin v0.2.2 github.com/fluxcd/go-git-providers v0.5.3 - github.com/fluxcd/helm-controller/api v0.15.0 - github.com/fluxcd/image-automation-controller/api v0.19.0 - github.com/fluxcd/image-reflector-controller/api v0.15.0 - github.com/fluxcd/kustomize-controller/api v0.19.1 - github.com/fluxcd/notification-controller/api v0.20.1 + github.com/fluxcd/helm-controller/api v0.16.0 + github.com/fluxcd/image-automation-controller/api v0.20.0 + github.com/fluxcd/image-reflector-controller/api v0.16.0 + github.com/fluxcd/kustomize-controller/api v0.20.0 + github.com/fluxcd/notification-controller/api v0.21.0 github.com/fluxcd/pkg/apis/kustomize v0.3.1 // indirect github.com/fluxcd/pkg/apis/meta v0.10.2 - github.com/fluxcd/pkg/runtime v0.12.3 + github.com/fluxcd/pkg/runtime v0.12.4 github.com/fluxcd/pkg/ssa v0.11.0 github.com/fluxcd/pkg/ssh v0.3.1 github.com/fluxcd/pkg/untar v0.0.5 github.com/fluxcd/pkg/version v0.0.1 - github.com/fluxcd/source-controller/api v0.20.1 + github.com/fluxcd/source-controller/api v0.21.1 github.com/go-git/go-git/v5 v5.4.2 github.com/gonvenience/bunt v1.3.2 github.com/gonvenience/ytbx v1.4.2 diff --git a/go.sum b/go.sum index 600c5da3..d082dbf4 100644 --- a/go.sum +++ b/go.sum @@ -224,16 +224,16 @@ github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5Kwzbycv github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fluxcd/go-git-providers v0.5.3 h1:Sg5XH+aXb6mYwITtdE4yc4yLoyFW3aVZx33qWuQb9/Q= github.com/fluxcd/go-git-providers v0.5.3/go.mod h1:4jTHTmSx3rFGnG78KUVgFYeG6vWFnKwUSr2mi31tvp8= -github.com/fluxcd/helm-controller/api v0.15.0 h1:1uei4JWf5cOEbixj8d5mZ3EMruuarR8yCSiPIsaotKo= -github.com/fluxcd/helm-controller/api v0.15.0/go.mod h1:/OeNzk18BVa7UmhGphENJdD/2GerKpMeDSxY8QYlO0o= -github.com/fluxcd/image-automation-controller/api v0.19.0 h1:XR2yBR3RxB6i1mS6ZpqgbEnuV23s9q4JfkyKLyOTViU= -github.com/fluxcd/image-automation-controller/api v0.19.0/go.mod h1:e9hAvFZT5y1X6NaSNUHXkabpMkPA3Z1bDr3yea8gMzE= -github.com/fluxcd/image-reflector-controller/api v0.15.0 h1:2XUKXLhWjbS7X8k1Ur/LJaIv2C8kbpErB46yw4Xmf4U= -github.com/fluxcd/image-reflector-controller/api v0.15.0/go.mod h1:SPUqO4kodOglDFpZ+GhW/XBhKo71mWIqFRc+oT0jCfc= -github.com/fluxcd/kustomize-controller/api v0.19.1 h1:71E9/7WNQN7aNVhTvfweyOEPwOLVnohAhcR0qMnA67g= -github.com/fluxcd/kustomize-controller/api v0.19.1/go.mod h1:q0AA6fxVlm8fvXZEaqSMMw8ANPharpywBve7dlcARhk= -github.com/fluxcd/notification-controller/api v0.20.1 h1:iK1+icG0ESuSUki6O9tL/4uxPx6eymYwaFxGprlKSQA= -github.com/fluxcd/notification-controller/api v0.20.1/go.mod h1:YFW/YQ6kScEzpnuKgvOJWak+9zGyF3FJ73kKsSQ4LDk= +github.com/fluxcd/helm-controller/api v0.16.0 h1:VXlt0EZVHgz2ZX1kUuKQAaQWNj1cC3PIKMRR/0aq07g= +github.com/fluxcd/helm-controller/api v0.16.0/go.mod h1:/OeNzk18BVa7UmhGphENJdD/2GerKpMeDSxY8QYlO0o= +github.com/fluxcd/image-automation-controller/api v0.20.0 h1:Z+lxqif0KwccsuNOBZq5M96RXCPxtm4Xt8siC1kR6H8= +github.com/fluxcd/image-automation-controller/api v0.20.0/go.mod h1:XhLYccGUbmJvTTpJ1jAFKZHr2e1GNXy0T85ZBO50mik= +github.com/fluxcd/image-reflector-controller/api v0.16.0 h1:1O1YdoK7LsJgWLyvfZTSbvQcUQCBcgJ573HA0arlQQY= +github.com/fluxcd/image-reflector-controller/api v0.16.0/go.mod h1:OIe3mSXc3OwQiNbiQ9vNXWYtNif31hc7WAbZWlFUUnc= +github.com/fluxcd/kustomize-controller/api v0.20.0 h1:Vw+2qCxeHMv0y1mfiBgVrMfcfFevBMrRfLEdfPTrb40= +github.com/fluxcd/kustomize-controller/api v0.20.0/go.mod h1:5MdpzJVx8+KiDIRv37zLme992BAOCgE0v1n+NOgs1lo= +github.com/fluxcd/notification-controller/api v0.21.0 h1:D5B3TH5YtSww0SyvW1Ru5xWsh0MgHQanC/a1t3CvXq0= +github.com/fluxcd/notification-controller/api v0.21.0/go.mod h1:gA9/j0kjh7VDuUC2Cubr9twxOdzb/0+ojcE9Lzsc9ug= github.com/fluxcd/pkg/apis/acl v0.0.3 h1:Lw0ZHdpnO4G7Zy9KjrzwwBmDZQuy4qEjaU/RvA6k1lc= github.com/fluxcd/pkg/apis/acl v0.0.3/go.mod h1:XPts6lRJ9C9fIF9xVWofmQwftvhY25n1ps7W9xw0XLU= github.com/fluxcd/pkg/apis/kustomize v0.3.1 h1:wmb5D9e1+Rr3/5O3235ERuj+h2VKUArVfYYk68QKP+w= @@ -242,8 +242,9 @@ github.com/fluxcd/pkg/apis/meta v0.10.2 h1:pnDBBEvfs4HaKiVAYgz+e/AQ8dLvcgmVfSeBr github.com/fluxcd/pkg/apis/meta v0.10.2/go.mod h1:KQ2er9xa6koy7uoPMZjIjNudB5p4tXs+w0GO6fRcy7I= github.com/fluxcd/pkg/kustomize v0.0.2 h1:ipvQrxSeuGZDsPZrVUL6tYMlTR5xqYTZp6G0Tdy2hVs= github.com/fluxcd/pkg/kustomize v0.0.2/go.mod h1:AFwnf3OqQmpTCuwCARTGpPRMBf0ZFJNGCvW63KbgK04= -github.com/fluxcd/pkg/runtime v0.12.3 h1:h21AZ3YG5MAP7DxFF9hfKrP+vFzys2L7CkUbPFjbP/0= github.com/fluxcd/pkg/runtime v0.12.3/go.mod h1:imJ2xYy/d4PbSinX2IefmZk+iS2c1P5fY0js8mCE4SM= +github.com/fluxcd/pkg/runtime v0.12.4 h1:gA27RG/+adN2/7Qe03PB46Iwmye/MusPCpuS4zQ2fW0= +github.com/fluxcd/pkg/runtime v0.12.4/go.mod h1:gspNvhAqodZgSmK1ZhMtvARBf/NGAlxmaZaIOHkJYsc= github.com/fluxcd/pkg/ssa v0.11.0 h1:ejEMlHPsbXMP8BJQx3+0PwoBgJur0mHiPcMNKcFwoOE= github.com/fluxcd/pkg/ssa v0.11.0/go.mod h1:S+qig7BTOxop0c134y8Yv8/iQST4Kt7S2xXiFkP4VMA= github.com/fluxcd/pkg/ssh v0.3.1 h1:iQw07bkX2rScactX8WYv+uMDsufFOlg8M3fV2TNs244= @@ -252,8 +253,9 @@ github.com/fluxcd/pkg/untar v0.0.5 h1:UGI3Ch1UIEIaqQvMicmImL1s9npQa64DJ/ozqHKB7g github.com/fluxcd/pkg/untar v0.0.5/go.mod h1:O6V9+rtl8c1mHBafgqFlJN6zkF1HS5SSYn7RpQJ/nfw= github.com/fluxcd/pkg/version v0.0.1 h1:/8asQoDXSThz3csiwi4Qo8Zb6blAxLXbtxNgeMJ9bCg= github.com/fluxcd/pkg/version v0.0.1/go.mod h1:WAF4FEEA9xyhngF8TDxg3UPu5fA1qhEYV8Pmi2Il01Q= -github.com/fluxcd/source-controller/api v0.20.1 h1:BfYw1gNHykiCVFNtDz3atcf3Vph+arfuveKmouI98wE= -github.com/fluxcd/source-controller/api v0.20.1/go.mod h1:Ab2qDmAUz6ZCp8UaHYLYzxyFrC1FQqEqjxiROb/Rdiw= +github.com/fluxcd/source-controller/api v0.21.0/go.mod h1:Ab2qDmAUz6ZCp8UaHYLYzxyFrC1FQqEqjxiROb/Rdiw= +github.com/fluxcd/source-controller/api v0.21.1 h1:7X39YQHmB1vmIBrHxU+YAqxwtdC9Zh+tdtMKREW3xiQ= +github.com/fluxcd/source-controller/api v0.21.1/go.mod h1:Ab2qDmAUz6ZCp8UaHYLYzxyFrC1FQqEqjxiROb/Rdiw= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/form3tech-oss/jwt-go v3.2.3+incompatible h1:7ZaBxOI7TMoYBfyA3cQHErNNyAWIKUMIwqxEtgHOs5c= diff --git a/manifests/bases/helm-controller/kustomization.yaml b/manifests/bases/helm-controller/kustomization.yaml index 99911dcf..6d6c395e 100644 --- a/manifests/bases/helm-controller/kustomization.yaml +++ b/manifests/bases/helm-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/helm-controller/releases/download/v0.15.0/helm-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.15.0/helm-controller.deployment.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.16.0/helm-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.16.0/helm-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/image-automation-controller/kustomization.yaml b/manifests/bases/image-automation-controller/kustomization.yaml index c0eaf567..d6b10f10 100644 --- a/manifests/bases/image-automation-controller/kustomization.yaml +++ b/manifests/bases/image-automation-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.19.0/image-automation-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.19.0/image-automation-controller.deployment.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.20.0/image-automation-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.20.0/image-automation-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/image-reflector-controller/kustomization.yaml b/manifests/bases/image-reflector-controller/kustomization.yaml index eb6b1fe9..44bfb7fb 100644 --- a/manifests/bases/image-reflector-controller/kustomization.yaml +++ b/manifests/bases/image-reflector-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.15.0/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.15.0/image-reflector-controller.deployment.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.16.0/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.16.0/image-reflector-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/kustomize-controller/kustomization.yaml b/manifests/bases/kustomize-controller/kustomization.yaml index 65244f60..b153ca99 100644 --- a/manifests/bases/kustomize-controller/kustomization.yaml +++ b/manifests/bases/kustomize-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.19.1/kustomize-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.19.1/kustomize-controller.deployment.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.20.0/kustomize-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.20.0/kustomize-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/notification-controller/kustomization.yaml b/manifests/bases/notification-controller/kustomization.yaml index 9c01b456..97edf000 100644 --- a/manifests/bases/notification-controller/kustomization.yaml +++ b/manifests/bases/notification-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/notification-controller/releases/download/v0.20.1/notification-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v0.20.1/notification-controller.deployment.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.21.0/notification-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.21.0/notification-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index 9998c78b..98135c00 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.20.1/source-controller.crds.yaml -- https://github.com/fluxcd/source-controller/releases/download/v0.20.1/source-controller.deployment.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.21.1/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.21.1/source-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index 7c6dfde4..f4781239 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -1,9 +1,9 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.20.1/source-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.19.1/kustomize-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.15.0/helm-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v0.20.1/notification-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.15.0/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.19.0/image-automation-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.21.1/source-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.20.0/kustomize-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.16.0/helm-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.21.0/notification-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.16.0/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.20.0/image-automation-controller.crds.yaml From 141d71c39df5ae6ac8a925f88a1ba04cb64b08e1 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Tue, 1 Feb 2022 12:12:59 +0200 Subject: [PATCH 007/818] Use CrossNamespaceSourceReference for image automations Signed-off-by: Stefan Prodan --- cmd/flux/create_image_update.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/flux/create_image_update.go b/cmd/flux/create_image_update.go index 2adb562c..44c2f730 100644 --- a/cmd/flux/create_image_update.go +++ b/cmd/flux/create_image_update.go @@ -112,7 +112,7 @@ func createImageUpdateRun(cmd *cobra.Command, args []string) error { Labels: labels, }, Spec: autov1.ImageUpdateAutomationSpec{ - SourceRef: autov1.SourceReference{ + SourceRef: autov1.CrossNamespaceSourceReference{ Kind: sourcev1.GitRepositoryKind, Name: imageUpdateArgs.gitRepoRef, }, From 74878a9aefc0c404aa33e92cae0768c5e5e0bddd Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 2 Feb 2022 11:49:23 +0200 Subject: [PATCH 008/818] Update dependencies Use Azure e2e dependencies and bump fluxcd/pkg/ssa to v0.12.0 Signed-off-by: Stefan Prodan --- go.mod | 9 +++------ go.sum | 4 ++-- tests/azure/go.mod | 14 +++++++------- tests/azure/go.sum | 28 +++++++++++++++------------- 4 files changed, 27 insertions(+), 28 deletions(-) diff --git a/go.mod b/go.mod index b70da37d..f0bed90c 100644 --- a/go.mod +++ b/go.mod @@ -14,8 +14,9 @@ require ( github.com/fluxcd/notification-controller/api v0.21.0 github.com/fluxcd/pkg/apis/kustomize v0.3.1 // indirect github.com/fluxcd/pkg/apis/meta v0.10.2 + github.com/fluxcd/pkg/kustomize v0.0.2 github.com/fluxcd/pkg/runtime v0.12.4 - github.com/fluxcd/pkg/ssa v0.11.0 + github.com/fluxcd/pkg/ssa v0.12.0 github.com/fluxcd/pkg/ssh v0.3.1 github.com/fluxcd/pkg/untar v0.0.5 github.com/fluxcd/pkg/version v0.0.1 @@ -45,12 +46,8 @@ require ( sigs.k8s.io/cli-utils v0.27.0 sigs.k8s.io/controller-runtime v0.11.0 sigs.k8s.io/kustomize/api v0.10.1 - sigs.k8s.io/yaml v1.3.0 -) - -require ( - github.com/fluxcd/pkg/kustomize v0.0.2 sigs.k8s.io/kustomize/kyaml v0.13.0 + sigs.k8s.io/yaml v1.3.0 ) require ( diff --git a/go.sum b/go.sum index d082dbf4..606923d7 100644 --- a/go.sum +++ b/go.sum @@ -245,8 +245,8 @@ github.com/fluxcd/pkg/kustomize v0.0.2/go.mod h1:AFwnf3OqQmpTCuwCARTGpPRMBf0ZFJN github.com/fluxcd/pkg/runtime v0.12.3/go.mod h1:imJ2xYy/d4PbSinX2IefmZk+iS2c1P5fY0js8mCE4SM= github.com/fluxcd/pkg/runtime v0.12.4 h1:gA27RG/+adN2/7Qe03PB46Iwmye/MusPCpuS4zQ2fW0= github.com/fluxcd/pkg/runtime v0.12.4/go.mod h1:gspNvhAqodZgSmK1ZhMtvARBf/NGAlxmaZaIOHkJYsc= -github.com/fluxcd/pkg/ssa v0.11.0 h1:ejEMlHPsbXMP8BJQx3+0PwoBgJur0mHiPcMNKcFwoOE= -github.com/fluxcd/pkg/ssa v0.11.0/go.mod h1:S+qig7BTOxop0c134y8Yv8/iQST4Kt7S2xXiFkP4VMA= +github.com/fluxcd/pkg/ssa v0.12.0 h1:7nF4UigU9Zk/9P/nbzUP3ah8IRC+BpB64O9iu5VnvEo= +github.com/fluxcd/pkg/ssa v0.12.0/go.mod h1:S+qig7BTOxop0c134y8Yv8/iQST4Kt7S2xXiFkP4VMA= github.com/fluxcd/pkg/ssh v0.3.1 h1:iQw07bkX2rScactX8WYv+uMDsufFOlg8M3fV2TNs244= github.com/fluxcd/pkg/ssh v0.3.1/go.mod h1:Sebfv4Um51PvomuYdMvKRncQW5dtKhZ5J5TA+wiHNSQ= github.com/fluxcd/pkg/untar v0.0.5 h1:UGI3Ch1UIEIaqQvMicmImL1s9npQa64DJ/ozqHKB7gk= diff --git a/tests/azure/go.mod b/tests/azure/go.mod index 19f5a349..f8b51960 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -4,14 +4,14 @@ go 1.17 require ( github.com/Azure/azure-event-hubs-go/v3 v3.3.13 - github.com/fluxcd/helm-controller/api v0.15.0 - github.com/fluxcd/image-automation-controller/api v0.19.0 - github.com/fluxcd/image-reflector-controller/api v0.15.0 - github.com/fluxcd/kustomize-controller/api v0.19.1 - github.com/fluxcd/notification-controller/api v0.20.1 + github.com/fluxcd/helm-controller/api v0.16.0 + github.com/fluxcd/image-automation-controller/api v0.20.0 + github.com/fluxcd/image-reflector-controller/api v0.16.0 + github.com/fluxcd/kustomize-controller/api v0.20.0 + github.com/fluxcd/notification-controller/api v0.21.0 github.com/fluxcd/pkg/apis/meta v0.10.2 - github.com/fluxcd/pkg/runtime v0.12.3 - github.com/fluxcd/source-controller/api v0.20.1 + github.com/fluxcd/pkg/runtime v0.12.4 + github.com/fluxcd/source-controller/api v0.21.1 github.com/hashicorp/terraform-exec v0.14.0 github.com/libgit2/git2go/v31 v31.6.1 github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 diff --git a/tests/azure/go.sum b/tests/azure/go.sum index b5ff98ea..62de61c6 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -198,26 +198,28 @@ github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/fluxcd/helm-controller/api v0.15.0 h1:1uei4JWf5cOEbixj8d5mZ3EMruuarR8yCSiPIsaotKo= -github.com/fluxcd/helm-controller/api v0.15.0/go.mod h1:/OeNzk18BVa7UmhGphENJdD/2GerKpMeDSxY8QYlO0o= -github.com/fluxcd/image-automation-controller/api v0.19.0 h1:XR2yBR3RxB6i1mS6ZpqgbEnuV23s9q4JfkyKLyOTViU= -github.com/fluxcd/image-automation-controller/api v0.19.0/go.mod h1:e9hAvFZT5y1X6NaSNUHXkabpMkPA3Z1bDr3yea8gMzE= -github.com/fluxcd/image-reflector-controller/api v0.15.0 h1:2XUKXLhWjbS7X8k1Ur/LJaIv2C8kbpErB46yw4Xmf4U= -github.com/fluxcd/image-reflector-controller/api v0.15.0/go.mod h1:SPUqO4kodOglDFpZ+GhW/XBhKo71mWIqFRc+oT0jCfc= -github.com/fluxcd/kustomize-controller/api v0.19.1 h1:71E9/7WNQN7aNVhTvfweyOEPwOLVnohAhcR0qMnA67g= -github.com/fluxcd/kustomize-controller/api v0.19.1/go.mod h1:q0AA6fxVlm8fvXZEaqSMMw8ANPharpywBve7dlcARhk= -github.com/fluxcd/notification-controller/api v0.20.1 h1:iK1+icG0ESuSUki6O9tL/4uxPx6eymYwaFxGprlKSQA= -github.com/fluxcd/notification-controller/api v0.20.1/go.mod h1:YFW/YQ6kScEzpnuKgvOJWak+9zGyF3FJ73kKsSQ4LDk= +github.com/fluxcd/helm-controller/api v0.16.0 h1:VXlt0EZVHgz2ZX1kUuKQAaQWNj1cC3PIKMRR/0aq07g= +github.com/fluxcd/helm-controller/api v0.16.0/go.mod h1:/OeNzk18BVa7UmhGphENJdD/2GerKpMeDSxY8QYlO0o= +github.com/fluxcd/image-automation-controller/api v0.20.0 h1:Z+lxqif0KwccsuNOBZq5M96RXCPxtm4Xt8siC1kR6H8= +github.com/fluxcd/image-automation-controller/api v0.20.0/go.mod h1:XhLYccGUbmJvTTpJ1jAFKZHr2e1GNXy0T85ZBO50mik= +github.com/fluxcd/image-reflector-controller/api v0.16.0 h1:1O1YdoK7LsJgWLyvfZTSbvQcUQCBcgJ573HA0arlQQY= +github.com/fluxcd/image-reflector-controller/api v0.16.0/go.mod h1:OIe3mSXc3OwQiNbiQ9vNXWYtNif31hc7WAbZWlFUUnc= +github.com/fluxcd/kustomize-controller/api v0.20.0 h1:Vw+2qCxeHMv0y1mfiBgVrMfcfFevBMrRfLEdfPTrb40= +github.com/fluxcd/kustomize-controller/api v0.20.0/go.mod h1:5MdpzJVx8+KiDIRv37zLme992BAOCgE0v1n+NOgs1lo= +github.com/fluxcd/notification-controller/api v0.21.0 h1:D5B3TH5YtSww0SyvW1Ru5xWsh0MgHQanC/a1t3CvXq0= +github.com/fluxcd/notification-controller/api v0.21.0/go.mod h1:gA9/j0kjh7VDuUC2Cubr9twxOdzb/0+ojcE9Lzsc9ug= github.com/fluxcd/pkg/apis/acl v0.0.3 h1:Lw0ZHdpnO4G7Zy9KjrzwwBmDZQuy4qEjaU/RvA6k1lc= github.com/fluxcd/pkg/apis/acl v0.0.3/go.mod h1:XPts6lRJ9C9fIF9xVWofmQwftvhY25n1ps7W9xw0XLU= github.com/fluxcd/pkg/apis/kustomize v0.3.1 h1:wmb5D9e1+Rr3/5O3235ERuj+h2VKUArVfYYk68QKP+w= github.com/fluxcd/pkg/apis/kustomize v0.3.1/go.mod h1:k2HSRd68UwgNmOYBPOd6WbX6a2MH2X/Jeh7e3s3PFPc= github.com/fluxcd/pkg/apis/meta v0.10.2 h1:pnDBBEvfs4HaKiVAYgz+e/AQ8dLvcgmVfSeBroZ/KKI= github.com/fluxcd/pkg/apis/meta v0.10.2/go.mod h1:KQ2er9xa6koy7uoPMZjIjNudB5p4tXs+w0GO6fRcy7I= -github.com/fluxcd/pkg/runtime v0.12.3 h1:h21AZ3YG5MAP7DxFF9hfKrP+vFzys2L7CkUbPFjbP/0= github.com/fluxcd/pkg/runtime v0.12.3/go.mod h1:imJ2xYy/d4PbSinX2IefmZk+iS2c1P5fY0js8mCE4SM= -github.com/fluxcd/source-controller/api v0.20.1 h1:BfYw1gNHykiCVFNtDz3atcf3Vph+arfuveKmouI98wE= -github.com/fluxcd/source-controller/api v0.20.1/go.mod h1:Ab2qDmAUz6ZCp8UaHYLYzxyFrC1FQqEqjxiROb/Rdiw= +github.com/fluxcd/pkg/runtime v0.12.4 h1:gA27RG/+adN2/7Qe03PB46Iwmye/MusPCpuS4zQ2fW0= +github.com/fluxcd/pkg/runtime v0.12.4/go.mod h1:gspNvhAqodZgSmK1ZhMtvARBf/NGAlxmaZaIOHkJYsc= +github.com/fluxcd/source-controller/api v0.21.0/go.mod h1:Ab2qDmAUz6ZCp8UaHYLYzxyFrC1FQqEqjxiROb/Rdiw= +github.com/fluxcd/source-controller/api v0.21.1 h1:7X39YQHmB1vmIBrHxU+YAqxwtdC9Zh+tdtMKREW3xiQ= +github.com/fluxcd/source-controller/api v0.21.1/go.mod h1:Ab2qDmAUz6ZCp8UaHYLYzxyFrC1FQqEqjxiROb/Rdiw= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/form3tech-oss/jwt-go v3.2.3+incompatible h1:7ZaBxOI7TMoYBfyA3cQHErNNyAWIKUMIwqxEtgHOs5c= From b86b195450f93f570644b244e52b65852892625a Mon Sep 17 00:00:00 2001 From: Soule BA Date: Thu, 3 Feb 2022 10:23:19 +0100 Subject: [PATCH 009/818] Add contextual error code for flux diff kustomization If implemented, calling the diff command on kustomization will return 0, 1(if changes are identified), >1 for errors. Signed-off-by: Soule BA --- cmd/flux/diff.go | 2 +- cmd/flux/diff_kustomization.go | 22 ++++++++++++++-------- cmd/flux/main.go | 15 +++++++++++++++ cmd/flux/main_test.go | 15 +++++++++++++++ internal/build/diff.go | 22 +++++++++++++--------- 5 files changed, 58 insertions(+), 18 deletions(-) diff --git a/cmd/flux/diff.go b/cmd/flux/diff.go index d4ee4804..55ebf4bb 100644 --- a/cmd/flux/diff.go +++ b/cmd/flux/diff.go @@ -23,7 +23,7 @@ import ( var diffCmd = &cobra.Command{ Use: "diff", Short: "Diff a flux resource", - Long: "The diff command is used to do a server-side dry-run on flux resources, then output the diff.", + Long: "The diff command is used to do a server-side dry-run on flux resources, then prints the diff.", } func init() { diff --git a/cmd/flux/diff_kustomization.go b/cmd/flux/diff_kustomization.go index e40f72c9..e23c6643 100644 --- a/cmd/flux/diff_kustomization.go +++ b/cmd/flux/diff_kustomization.go @@ -31,8 +31,9 @@ var diffKsCmd = &cobra.Command{ Use: "kustomization", Aliases: []string{"ks"}, Short: "Diff Kustomization", - Long: `The diff command does a build, then it performs a server-side dry-run and output the diff.`, - Example: `# Preview changes local changes as they were applied on the cluster + Long: `The diff command does a build, then it performs a server-side dry-run and prints the diff. +Exit status: 0 No differences were found. 1 Differences were found. >1 diff failed with an error.`, + Example: `# Preview local changes as they were applied on the cluster flux diff kustomization my-app --path ./path/to/local/manifests`, ValidArgsFunction: resourceNamesCompletionFunc(kustomizev1.GroupVersion.WithKind(kustomizev1.KustomizationKind)), RunE: diffKsCmdRun, @@ -56,16 +57,16 @@ func diffKsCmdRun(cmd *cobra.Command, args []string) error { name := args[0] if diffKsArgs.path == "" { - return fmt.Errorf("invalid resource path %q", diffKsArgs.path) + return &RequestError{StatusCode: 2, Err: fmt.Errorf("invalid resource path %q", diffKsArgs.path)} } if fs, err := os.Stat(diffKsArgs.path); err != nil || !fs.IsDir() { - return fmt.Errorf("invalid resource path %q", diffKsArgs.path) + return &RequestError{StatusCode: 2, Err: fmt.Errorf("invalid resource path %q", diffKsArgs.path)} } builder, err := build.NewBuilder(kubeconfigArgs, name, diffKsArgs.path, build.WithTimeout(rootArgs.timeout)) if err != nil { - return err + return &RequestError{StatusCode: 2, Err: err} } // create a signal channel @@ -74,13 +75,18 @@ func diffKsCmdRun(cmd *cobra.Command, args []string) error { errChan := make(chan error) go func() { - output, err := builder.Diff() + output, hasChanged, err := builder.Diff() if err != nil { - errChan <- err + errChan <- &RequestError{StatusCode: 2, Err: err} } cmd.Print(output) - errChan <- nil + + if hasChanged { + errChan <- &RequestError{StatusCode: 1, Err: fmt.Errorf("identified at least one change, exiting with non-zero exit code")} + } else { + errChan <- nil + } }() select { diff --git a/cmd/flux/main.go b/cmd/flux/main.go index d61bcda9..5fb1a163 100644 --- a/cmd/flux/main.go +++ b/cmd/flux/main.go @@ -105,6 +105,16 @@ type rootFlags struct { defaults install.Options } +// RequestError is a custom error type that wraps an error returned by the flux api. +type RequestError struct { + StatusCode int + Err error +} + +func (r *RequestError) Error() string { + return r.Err.Error() +} + var rootArgs = NewRootFlags() var kubeconfigArgs = genericclioptions.NewConfigFlags(false) @@ -144,6 +154,11 @@ func main() { log.SetFlags(0) if err := rootCmd.Execute(); err != nil { logger.Failuref("%v", err) + + if err, ok := err.(*RequestError); ok { + os.Exit(err.StatusCode) + } + os.Exit(1) } } diff --git a/cmd/flux/main_test.go b/cmd/flux/main_test.go index 26b4e99e..c41eb3e6 100644 --- a/cmd/flux/main_test.go +++ b/cmd/flux/main_test.go @@ -325,6 +325,12 @@ type cmdTestCase struct { func (cmd *cmdTestCase) runTestCmd(t *testing.T) { actual, testErr := executeCommand(cmd.args) + + // If the cmd error is a change, discard it + if isChangeError(testErr) { + testErr = nil + } + if assertErr := cmd.assert(actual, testErr); assertErr != nil { t.Error(assertErr) } @@ -366,3 +372,12 @@ func resetCmdArgs() { getArgs = GetFlags{} secretGitArgs = NewSecretGitFlags() } + +func isChangeError(err error) bool { + if reqErr, ok := err.(*RequestError); ok { + if strings.Contains(err.Error(), "identified at least one change, exiting with non-zero exit code") && reqErr.StatusCode == 1 { + return true + } + } + return false +} diff --git a/internal/build/diff.go b/internal/build/diff.go index 43b85aae..13a8270a 100644 --- a/internal/build/diff.go +++ b/internal/build/diff.go @@ -51,28 +51,29 @@ func (b *Builder) Manager() (*ssa.ResourceManager, error) { return ssa.NewResourceManager(b.client, statusPoller, owner), nil } -func (b *Builder) Diff() (string, error) { +func (b *Builder) Diff() (string, bool, error) { output := strings.Builder{} + createdOrDrifted := false res, err := b.Build() if err != nil { - return "", err + return "", createdOrDrifted, err } // convert the build result into Kubernetes unstructured objects objects, err := ssa.ReadObjects(bytes.NewReader(res)) if err != nil { - return "", err + return "", createdOrDrifted, err } resourceManager, err := b.Manager() if err != nil { - return "", err + return "", createdOrDrifted, err } ctx, cancel := context.WithTimeout(context.Background(), b.timeout) defer cancel() if err := ssa.SetNativeKindsDefaults(objects); err != nil { - return "", err + return "", createdOrDrifted, err } // create an inventory of objects to be reconciled @@ -101,20 +102,23 @@ func (b *Builder) Diff() (string, error) { if change.Action == string(ssa.CreatedAction) { output.WriteString(writeString(fmt.Sprintf("► %s created\n", change.Subject), bunt.Green)) + createdOrDrifted = true } if change.Action == string(ssa.ConfiguredAction) { output.WriteString(writeString(fmt.Sprintf("► %s drifted\n", change.Subject), bunt.WhiteSmoke)) liveFile, mergedFile, tmpDir, err := writeYamls(liveObject, mergedObject) if err != nil { - return "", err + return "", createdOrDrifted, err } defer cleanupDir(tmpDir) err = diff(liveFile, mergedFile, &output) if err != nil { - return "", err + return "", createdOrDrifted, err } + + createdOrDrifted = true } addObjectsToInventory(newInventory, change) @@ -125,7 +129,7 @@ func (b *Builder) Diff() (string, error) { if oldStatus.Inventory != nil { diffObjects, err := diffInventory(oldStatus.Inventory, newInventory) if err != nil { - return "", err + return "", createdOrDrifted, err } for _, object := range diffObjects { output.WriteString(writeString(fmt.Sprintf("► %s deleted\n", ssa.FmtUnstructured(object)), bunt.OrangeRed)) @@ -133,7 +137,7 @@ func (b *Builder) Diff() (string, error) { } } - return output.String(), nil + return output.String(), createdOrDrifted, nil } func writeYamls(liveObject, mergedObject *unstructured.Unstructured) (string, string, string, error) { From 70c8c0445cdb2b4a0e0554e6064fa412d22a1627 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Thu, 3 Feb 2022 16:38:25 +0200 Subject: [PATCH 010/818] e2e: Fix Azure image update automation test Signed-off-by: Stefan Prodan --- tests/azure/azure_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/azure/azure_test.go b/tests/azure/azure_test.go index 04542659..ce4c2937 100644 --- a/tests/azure/azure_test.go +++ b/tests/azure/azure_test.go @@ -483,7 +483,7 @@ func TestImageRepositoryACR(t *testing.T) { Interval: metav1.Duration{ Duration: 1 * time.Minute, }, - SourceRef: automationv1beta1.SourceReference{ + SourceRef: automationv1beta1.CrossNamespaceSourceReference{ Kind: "GitRepository", Name: name, }, From f8b58f8be938be618b4f083b54584d77198ccc0b Mon Sep 17 00:00:00 2001 From: Robert Wittman Date: Tue, 1 Feb 2022 11:55:50 -0500 Subject: [PATCH 011/818] Add GPG signing to Github bootstrap Signed-off-by: Robert Wittman --- cmd/flux/bootstrap_github.go | 1 + 1 file changed, 1 insertion(+) diff --git a/cmd/flux/bootstrap_github.go b/cmd/flux/bootstrap_github.go index fd04ac6f..904f6890 100644 --- a/cmd/flux/bootstrap_github.go +++ b/cmd/flux/bootstrap_github.go @@ -243,6 +243,7 @@ func bootstrapGitHubCmdRun(cmd *cobra.Command, args []string) error { bootstrap.WithKubeconfig(kubeconfigArgs), bootstrap.WithLogger(logger), bootstrap.WithCABundle(caBundle), + bootstrap.WithGitCommitSigning(bootstrapArgs.gpgKeyRingPath, bootstrapArgs.gpgPassphrase, bootstrapArgs.gpgKeyID), } if bootstrapArgs.sshHostname != "" { bootstrapOpts = append(bootstrapOpts, bootstrap.WithSSHHostname(bootstrapArgs.sshHostname)) From e3f5a8fee308f18a599bacc88457d9efd057a1df Mon Sep 17 00:00:00 2001 From: Robert Wittman Date: Thu, 3 Feb 2022 11:07:55 -0500 Subject: [PATCH 012/818] Add GPG options to Gitlab and BitBucket bootstraps Signed-off-by: Robert Wittman --- cmd/flux/bootstrap_bitbucket_server.go | 1 + cmd/flux/bootstrap_github.go | 1 - cmd/flux/bootstrap_gitlab.go | 1 + 3 files changed, 2 insertions(+), 1 deletion(-) diff --git a/cmd/flux/bootstrap_bitbucket_server.go b/cmd/flux/bootstrap_bitbucket_server.go index 56e1a906..d71754e4 100644 --- a/cmd/flux/bootstrap_bitbucket_server.go +++ b/cmd/flux/bootstrap_bitbucket_server.go @@ -254,6 +254,7 @@ func bootstrapBServerCmdRun(cmd *cobra.Command, args []string) error { bootstrap.WithKubeconfig(kubeconfigArgs), bootstrap.WithLogger(logger), bootstrap.WithCABundle(caBundle), + bootstrap.WithGitCommitSigning(bootstrapArgs.gpgKeyRingPath, bootstrapArgs.gpgPassphrase, bootstrapArgs.gpgKeyID), } if bootstrapArgs.sshHostname != "" { bootstrapOpts = append(bootstrapOpts, bootstrap.WithSSHHostname(bootstrapArgs.sshHostname)) diff --git a/cmd/flux/bootstrap_github.go b/cmd/flux/bootstrap_github.go index 904f6890..fd04ac6f 100644 --- a/cmd/flux/bootstrap_github.go +++ b/cmd/flux/bootstrap_github.go @@ -243,7 +243,6 @@ func bootstrapGitHubCmdRun(cmd *cobra.Command, args []string) error { bootstrap.WithKubeconfig(kubeconfigArgs), bootstrap.WithLogger(logger), bootstrap.WithCABundle(caBundle), - bootstrap.WithGitCommitSigning(bootstrapArgs.gpgKeyRingPath, bootstrapArgs.gpgPassphrase, bootstrapArgs.gpgKeyID), } if bootstrapArgs.sshHostname != "" { bootstrapOpts = append(bootstrapOpts, bootstrap.WithSSHHostname(bootstrapArgs.sshHostname)) diff --git a/cmd/flux/bootstrap_gitlab.go b/cmd/flux/bootstrap_gitlab.go index 6906a2a7..1e58834d 100644 --- a/cmd/flux/bootstrap_gitlab.go +++ b/cmd/flux/bootstrap_gitlab.go @@ -257,6 +257,7 @@ func bootstrapGitLabCmdRun(cmd *cobra.Command, args []string) error { bootstrap.WithKubeconfig(kubeconfigArgs), bootstrap.WithLogger(logger), bootstrap.WithCABundle(caBundle), + bootstrap.WithGitCommitSigning(bootstrapArgs.gpgKeyRingPath, bootstrapArgs.gpgPassphrase, bootstrapArgs.gpgKeyID), } if bootstrapArgs.sshHostname != "" { bootstrapOpts = append(bootstrapOpts, bootstrap.WithSSHHostname(bootstrapArgs.sshHostname)) From e33198e7500c24f6b611d6050cf28456c992f56e Mon Sep 17 00:00:00 2001 From: Robert Wittman Date: Thu, 3 Feb 2022 11:09:10 -0500 Subject: [PATCH 013/818] Replace github boostrap GPG options Signed-off-by: Robert Wittman --- cmd/flux/bootstrap_github.go | 1 + 1 file changed, 1 insertion(+) diff --git a/cmd/flux/bootstrap_github.go b/cmd/flux/bootstrap_github.go index fd04ac6f..904f6890 100644 --- a/cmd/flux/bootstrap_github.go +++ b/cmd/flux/bootstrap_github.go @@ -243,6 +243,7 @@ func bootstrapGitHubCmdRun(cmd *cobra.Command, args []string) error { bootstrap.WithKubeconfig(kubeconfigArgs), bootstrap.WithLogger(logger), bootstrap.WithCABundle(caBundle), + bootstrap.WithGitCommitSigning(bootstrapArgs.gpgKeyRingPath, bootstrapArgs.gpgPassphrase, bootstrapArgs.gpgKeyID), } if bootstrapArgs.sshHostname != "" { bootstrapOpts = append(bootstrapOpts, bootstrap.WithSSHHostname(bootstrapArgs.sshHostname)) From 997e6be3a2b5b9e6bd78d181f53e07a6389ea0a6 Mon Sep 17 00:00:00 2001 From: Soule BA Date: Thu, 3 Feb 2022 18:02:06 +0100 Subject: [PATCH 014/818] Make sure to trim all sops data If implemented this fixes #2363 and make sure we can build with sops encrypted data Signed-off-by: Soule BA --- internal/build/build.go | 31 ++++++++++++++++++++-------- internal/build/build_test.go | 39 ++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+), 8 deletions(-) diff --git a/internal/build/build.go b/internal/build/build.go index 416c2b0b..923852d5 100644 --- a/internal/build/build.go +++ b/internal/build/build.go @@ -36,6 +36,7 @@ import ( "sigs.k8s.io/kustomize/api/resmap" "sigs.k8s.io/kustomize/api/resource" "sigs.k8s.io/kustomize/kyaml/filesys" + "sigs.k8s.io/kustomize/kyaml/yaml" ) const ( @@ -262,17 +263,31 @@ func trimSopsData(res *resource.Resource) error { if res.GetKind() == "Secret" { dataMap := res.GetDataMap() - for k, v := range dataMap { - data, err := base64.StdEncoding.DecodeString(v) - if err != nil { - if _, ok := err.(base64.CorruptInputError); ok { - return fmt.Errorf("failed to decode secret data: %w", err) - } - } + asYaml, err := res.AsYAML() + if err != nil { + return fmt.Errorf("failed to decode secret %s data: %w", res.GetName(), err) + } - if bytes.Contains(data, []byte("sops")) && bytes.Contains(data, []byte("ENC[")) { + //delete any sops data as we don't want to expose it + if bytes.Contains(asYaml, []byte("sops:")) && bytes.Contains(asYaml, []byte("mac: ENC[")) { + res.PipeE(yaml.FieldClearer{Name: "sops"}) + for k := range dataMap { dataMap[k] = sopsMess } + + } else { + for k, v := range dataMap { + data, err := base64.StdEncoding.DecodeString(v) + if err != nil { + if _, ok := err.(base64.CorruptInputError); ok { + return fmt.Errorf("failed to decode secret %s data: %w", res.GetName(), err) + } + } + + if bytes.Contains(data, []byte("sops")) && bytes.Contains(data, []byte("ENC[")) { + dataMap[k] = sopsMess + } + } } res.SetDataMap(dataMap) diff --git a/internal/build/build_test.go b/internal/build/build_test.go index ffda319e..17b2cf39 100644 --- a/internal/build/build_test.go +++ b/internal/build/build_test.go @@ -91,6 +91,45 @@ kind: Secret metadata: name: secret-basic-auth type: kubernetes.io/basic-auth +`, + }, + { + name: "secret sops secret", + yamlStr: `apiVersion: v1 +data: + .dockercfg: ENC[AES256_GCM,data:KHCFH3hNnc+PMfWLFEPjebf3W4z4WXbGFAANRZyZC+07z7wlrTALJM6rn8YslW4tMAWCoAYxblC5WRCszTy0h9rw0U/RGOv5H0qCgnNg/FILFUqhwo9pNfrUH+MEP4M9qxxbLKZwObpHUE7DUsKx1JYAxsI=,iv:q48lqUbUQD+0cbYcjNMZMJLRdGHi78ZmDhNAT2th9tg=,tag:QRI2SZZXQrAcdql3R5AH2g==,type:str] +kind: Secret +metadata: + name: secret +type: kubernetes.io/dockerconfigjson +sops: + kms: [] + gcp_kms: [] + azure_kv: [] + hc_vault: [] + age: + - recipient: age10la2ge0wtvx3qr7datqf7rs4yngxszdal927fs9rukamr8u2pshsvtz7ce + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA3eU1CTEJhVXZ4eEVYYkVV + OU90TEcrR2pYckttN0pBanJoSUZWSW1RQXlRCkUydFJ3V1NZUTBuVFF0aC9GUEcw + bUdhNjJWTkoyL1FUVi9Dc1dxUDBkM0UKLS0tIE1sQXkwcWdGaEFuY0RHQTVXM0J6 + dWpJcThEbW15V3dXYXpPZklBdW1Hd1kKoIAdmGNPrEctV8h1w8KuvQ5S+BGmgqN9 + MgpNmUhJjWhgcQpb5BRYpQesBOgU5TBGK7j58A6DMDKlSiYZsdQchQ== + -----END AGE ENCRYPTED FILE----- + lastmodified: "2022-02-03T16:03:17Z" + mac: ENC[AES256_GCM,data:AHdYSawajwgAFwlmDN1IPNmT9vWaYKzyVIra2d6sPcjTbZ8/p+VRSRpVm4XZFFsaNnW5AUJaouwXnKYDTmJDXKlr/rQcu9kXqsssQgdzcXaA6l5uJlgsnml8ba7J3OK+iEKMax23mwQEx2EUskCd9ENOwFDkunP02sxqDNOz20k=,iv:8F5OamHt3fAVorf6p+SoIrWoqkcATSGWVoM0EK87S4M=,tag:E1mxXnc7wWkEX5BxhpLtng==,type:str] + pgp: [] + encrypted_regex: ^(data|stringData)$ + version: 3.7.1 +`, + expected: `apiVersion: v1 +data: + .dockercfg: KipTT1BTKio= +kind: Secret +metadata: + name: secret +type: kubernetes.io/dockerconfigjson `, }, } From 959ea6875aaae3ade5e442319e91fbc14123b0f2 Mon Sep 17 00:00:00 2001 From: Soule BA Date: Fri, 4 Feb 2022 09:06:41 +0100 Subject: [PATCH 015/818] Fix panic on bootstrap when orgRef is not retrieved If implemented, not retrieving an orgRef will always return an error Signed-off-by: Soule BA --- internal/bootstrap/bootstrap_provider.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/bootstrap/bootstrap_provider.go b/internal/bootstrap/bootstrap_provider.go index dd23f75f..5d57d4e9 100644 --- a/internal/bootstrap/bootstrap_provider.go +++ b/internal/bootstrap/bootstrap_provider.go @@ -275,7 +275,7 @@ func (b *GitProviderBootstrapper) reconcileOrgRepository(ctx context.Context) (g subOrgs, repoName := splitSubOrganizationsFromRepositoryName(b.repositoryName) orgRef, err := b.getOrganization(ctx, subOrgs) if err != nil { - return nil, fmt.Errorf("failed to create new Git repository for the organization %q: %w", orgRef.String(), err) + return nil, fmt.Errorf("failed to create new Git repository %q: %w", b.repositoryName, err) } repoRef := newOrgRepositoryRef(*orgRef, repoName) repoInfo := newRepositoryInfo(b.description, b.defaultBranch, b.visibility) From d3d271defe2926e67fa04c0c31303f839c803d16 Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Fri, 4 Feb 2022 12:05:02 +0100 Subject: [PATCH 016/818] use client.Patch for suspend/resume operations Signed-off-by: Somtochi Onyekwere --- cmd/flux/resume.go | 8 ++++++-- cmd/flux/suspend.go | 8 ++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/cmd/flux/resume.go b/cmd/flux/resume.go index 163fbb90..9b570978 100644 --- a/cmd/flux/resume.go +++ b/cmd/flux/resume.go @@ -48,6 +48,7 @@ func init() { type resumable interface { adapter + copyable statusable setUnsuspended() successMessage() string @@ -97,10 +98,13 @@ func (resume resumeCommand) run(cmd *cobra.Command, args []string) error { for i := 0; i < resume.list.len(); i++ { logger.Actionf("resuming %s %s in %s namespace", resume.humanKind, resume.list.resumeItem(i).asClientObject().GetName(), *kubeconfigArgs.Namespace) - resume.list.resumeItem(i).setUnsuspended() - if err := kubeClient.Update(ctx, resume.list.resumeItem(i).asClientObject()); err != nil { + obj := resume.list.resumeItem(i) + patch := client.MergeFrom(obj.deepCopyClientObject()) + obj.setUnsuspended() + if err := kubeClient.Patch(ctx, obj.asClientObject(), patch); err != nil { return err } + logger.Successf("%s resumed", resume.humanKind) namespacedName := types.NamespacedName{ diff --git a/cmd/flux/suspend.go b/cmd/flux/suspend.go index 02a44bd1..6b31f5c0 100644 --- a/cmd/flux/suspend.go +++ b/cmd/flux/suspend.go @@ -46,6 +46,7 @@ func init() { type suspendable interface { adapter + copyable isSuspended() bool setSuspended() } @@ -94,8 +95,11 @@ func (suspend suspendCommand) run(cmd *cobra.Command, args []string) error { for i := 0; i < suspend.list.len(); i++ { logger.Actionf("suspending %s %s in %s namespace", suspend.humanKind, suspend.list.item(i).asClientObject().GetName(), *kubeconfigArgs.Namespace) - suspend.list.item(i).setSuspended() - if err := kubeClient.Update(ctx, suspend.list.item(i).asClientObject()); err != nil { + + obj := suspend.list.item(i) + patch := client.MergeFrom(obj.deepCopyClientObject()) + obj.setSuspended() + if err := kubeClient.Patch(ctx, obj.asClientObject(), patch); err != nil { return err } logger.Successf("%s suspended", suspend.humanKind) From 8b444283e68452e1ec4cc503a788219fa52e3c16 Mon Sep 17 00:00:00 2001 From: Soule BA Date: Fri, 4 Feb 2022 16:45:25 +0100 Subject: [PATCH 017/818] Fix wrong deletion message on flux diff If implemented, when an error happens when dry-running an object, we return early. This match pkg ssa implementation Signed-off-by: Soule BA --- go.mod | 2 +- internal/build/diff.go | 13 ++++++------- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/go.mod b/go.mod index f0bed90c..103f54d2 100644 --- a/go.mod +++ b/go.mod @@ -26,7 +26,7 @@ require ( github.com/gonvenience/ytbx v1.4.2 github.com/google/go-cmp v0.5.6 github.com/google/go-containerregistry v0.2.0 - github.com/hashicorp/go-multierror v1.1.1 // indirect + github.com/hashicorp/go-multierror v1.1.1 github.com/hashicorp/go-retryablehttp v0.7.0 // indirect github.com/homeport/dyff v1.4.6 github.com/lucasb-eyer/go-colorful v1.2.0 diff --git a/internal/build/diff.go b/internal/build/diff.go index 13a8270a..4e67e10b 100644 --- a/internal/build/diff.go +++ b/internal/build/diff.go @@ -32,6 +32,7 @@ import ( "github.com/gonvenience/bunt" "github.com/gonvenience/ytbx" "github.com/google/go-cmp/cmp" + "github.com/hashicorp/go-multierror" "github.com/homeport/dyff/pkg/dyff" "github.com/lucasb-eyer/go-colorful" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" @@ -76,6 +77,7 @@ func (b *Builder) Diff() (string, bool, error) { return "", createdOrDrifted, err } + var diffErrs error // create an inventory of objects to be reconciled newInventory := newInventory() for _, obj := range objects { @@ -86,11 +88,8 @@ func (b *Builder) Diff() (string, bool, error) { } change, liveObject, mergedObject, err := resourceManager.Diff(ctx, obj, diffOptions) if err != nil { - if b.kustomization.Spec.Force && ssa.IsImmutableError(err) { - output.WriteString(writeString(fmt.Sprintf("► %s created\n", obj.GetName()), bunt.Green)) - } else { - output.WriteString(writeString(fmt.Sprintf("✗ %v\n", err), bunt.Red)) - } + // gather errors and continue, as we want to see all the diffs + diffErrs = multierror.Append(diffErrs, err) continue } @@ -124,7 +123,7 @@ func (b *Builder) Diff() (string, bool, error) { addObjectsToInventory(newInventory, change) } - if b.kustomization.Spec.Prune { + if b.kustomization.Spec.Prune && diffErrs == nil { oldStatus := b.kustomization.Status.DeepCopy() if oldStatus.Inventory != nil { diffObjects, err := diffInventory(oldStatus.Inventory, newInventory) @@ -137,7 +136,7 @@ func (b *Builder) Diff() (string, bool, error) { } } - return output.String(), createdOrDrifted, nil + return output.String(), createdOrDrifted, diffErrs } func writeYamls(liveObject, mergedObject *unstructured.Unstructured) (string, string, string, error) { From 2e9fd33ce562f78753ac28804c3c9702632733ad Mon Sep 17 00:00:00 2001 From: Soule BA Date: Sun, 6 Feb 2022 00:28:37 +0100 Subject: [PATCH 018/818] Mask dockerconfigjson secret types and support StringData secrets If implemented, flux diff kustomization will managed correctly sops managed dockerconfigjson secrets. Sops encrypted secret with stringData maps are supported too. Signed-off-by: Soule BA --- cmd/flux/diff_kustomization_test.go | 12 ++ cmd/flux/main.go | 8 +- .../build-kustomization/podinfo-result.yaml | 25 ++++ .../podinfo/dockerconfigjson-sops-secret.yaml | 27 ++++ .../podinfo/kustomization.yaml | 2 + .../podinfo/stringdata-secret.yaml | 28 ++++ .../diff-with-deployment.golden | 2 + ...f-with-dockerconfigjson-sops-secret.golden | 6 + .../diff-with-drifted-key-sops-secret.golden | 2 + .../diff-with-drifted-secret.golden | 2 + .../diff-with-drifted-service.golden | 2 + ...diff-with-drifted-value-sops-secret.golden | 2 + .../diff-with-stringdata-sops-secret.golden | 6 + .../dockerconfigjson-sops-secret.yaml | 11 ++ .../nothing-is-deployed.golden | 2 + .../stringdata-sops-secret.yaml | 12 ++ internal/build/build.go | 128 +++++++++++++++--- internal/build/build_test.go | 6 +- internal/build/diff.go | 22 ++- 19 files changed, 281 insertions(+), 24 deletions(-) create mode 100644 cmd/flux/testdata/build-kustomization/podinfo/dockerconfigjson-sops-secret.yaml create mode 100644 cmd/flux/testdata/build-kustomization/podinfo/stringdata-secret.yaml create mode 100644 cmd/flux/testdata/diff-kustomization/diff-with-dockerconfigjson-sops-secret.golden create mode 100644 cmd/flux/testdata/diff-kustomization/diff-with-stringdata-sops-secret.golden create mode 100644 cmd/flux/testdata/diff-kustomization/dockerconfigjson-sops-secret.yaml create mode 100644 cmd/flux/testdata/diff-kustomization/stringdata-sops-secret.yaml diff --git a/cmd/flux/diff_kustomization_test.go b/cmd/flux/diff_kustomization_test.go index e2f62e75..eec3d650 100644 --- a/cmd/flux/diff_kustomization_test.go +++ b/cmd/flux/diff_kustomization_test.go @@ -79,6 +79,18 @@ func TestDiffKustomization(t *testing.T) { objectFile: "./testdata/diff-kustomization/value-sops-secret.yaml", assert: assertGoldenFile("./testdata/diff-kustomization/diff-with-drifted-value-sops-secret.golden"), }, + { + name: "diff with a sops dockerconfigjson secret object", + args: "diff kustomization podinfo --path ./testdata/build-kustomization/podinfo", + objectFile: "./testdata/diff-kustomization/dockerconfigjson-sops-secret.yaml", + assert: assertGoldenFile("./testdata/diff-kustomization/diff-with-dockerconfigjson-sops-secret.golden"), + }, + { + name: "diff with a sops stringdata secret object", + args: "diff kustomization podinfo --path ./testdata/build-kustomization/podinfo", + objectFile: "./testdata/diff-kustomization/stringdata-sops-secret.yaml", + assert: assertGoldenFile("./testdata/diff-kustomization/diff-with-stringdata-sops-secret.golden"), + }, } tmpl := map[string]string{ diff --git a/cmd/flux/main.go b/cmd/flux/main.go index 5fb1a163..cf803e5d 100644 --- a/cmd/flux/main.go +++ b/cmd/flux/main.go @@ -153,12 +153,18 @@ func NewRootFlags() rootFlags { func main() { log.SetFlags(0) if err := rootCmd.Execute(); err != nil { - logger.Failuref("%v", err) if err, ok := err.(*RequestError); ok { + if err.StatusCode == 1 { + logger.Warningf("%v", err) + } else { + logger.Failuref("%v", err) + } + os.Exit(err.StatusCode) } + logger.Failuref("%v", err) os.Exit(1) } } diff --git a/cmd/flux/testdata/build-kustomization/podinfo-result.yaml b/cmd/flux/testdata/build-kustomization/podinfo-result.yaml index ce66ff0f..1fe225fd 100644 --- a/cmd/flux/testdata/build-kustomization/podinfo-result.yaml +++ b/cmd/flux/testdata/build-kustomization/podinfo-result.yaml @@ -123,6 +123,31 @@ spec: type: ClusterIP --- apiVersion: v1 +data: + .dockerconfigjson: eyJtYXNrIjoiKipTT1BTKioifQ== +kind: Secret +metadata: + labels: + kustomize.toolkit.fluxcd.io/name: podinfo + kustomize.toolkit.fluxcd.io/namespace: {{ .fluxns }} + name: docker-secret + namespace: default +type: kubernetes.io/dockerconfigjson +--- +apiVersion: v1 +kind: Secret +metadata: + labels: + kustomize.toolkit.fluxcd.io/name: podinfo + kustomize.toolkit.fluxcd.io/namespace: {{ .fluxns }} + name: secret-basic-auth-stringdata + namespace: default +stringData: + password: KipTT1BTKio= + username: KipTT1BTKio= +type: kubernetes.io/basic-auth +--- +apiVersion: v1 data: token: KipTT1BTKio= kind: Secret diff --git a/cmd/flux/testdata/build-kustomization/podinfo/dockerconfigjson-sops-secret.yaml b/cmd/flux/testdata/build-kustomization/podinfo/dockerconfigjson-sops-secret.yaml new file mode 100644 index 00000000..c05731bc --- /dev/null +++ b/cmd/flux/testdata/build-kustomization/podinfo/dockerconfigjson-sops-secret.yaml @@ -0,0 +1,27 @@ +apiVersion: v1 +data: + .dockerconfigjson: ENC[AES256_GCM,data:KHCFH3hNnc+PMfWLFEPjebf3W4z4WXbGFAANRZyZC+07z7wlrTALJM6rn8YslW4tMAWCoAYxblC5WRCszTy0h9rw0U/RGOv5H0qCgnNg/FILFUqhwo9pNfrUH+MEP4M9qxxbLKZwObpHUE7DUsKx1JYAxsI=,iv:q48lqUbUQD+0cbYcjNMZMJLRdGHi78ZmDhNAT2th9tg=,tag:QRI2SZZXQrAcdql3R5AH2g==,type:str] +kind: Secret +metadata: + name: docker-secret +type: kubernetes.io/dockerconfigjson +sops: + kms: [] + gcp_kms: [] + azure_kv: [] + hc_vault: [] + age: + - recipient: age10la2ge0wtvx3qr7datqf7rs4yngxszdal927fs9rukamr8u2pshsvtz7ce + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA3eU1CTEJhVXZ4eEVYYkVV + OU90TEcrR2pYckttN0pBanJoSUZWSW1RQXlRCkUydFJ3V1NZUTBuVFF0aC9GUEcw + bUdhNjJWTkoyL1FUVi9Dc1dxUDBkM0UKLS0tIE1sQXkwcWdGaEFuY0RHQTVXM0J6 + dWpJcThEbW15V3dXYXpPZklBdW1Hd1kKoIAdmGNPrEctV8h1w8KuvQ5S+BGmgqN9 + MgpNmUhJjWhgcQpb5BRYpQesBOgU5TBGK7j58A6DMDKlSiYZsdQchQ== + -----END AGE ENCRYPTED FILE----- + lastmodified: "2022-02-03T16:03:17Z" + mac: ENC[AES256_GCM,data:AHdYSawajwgAFwlmDN1IPNmT9vWaYKzyVIra2d6sPcjTbZ8/p+VRSRpVm4XZFFsaNnW5AUJaouwXnKYDTmJDXKlr/rQcu9kXqsssQgdzcXaA6l5uJlgsnml8ba7J3OK+iEKMax23mwQEx2EUskCd9ENOwFDkunP02sxqDNOz20k=,iv:8F5OamHt3fAVorf6p+SoIrWoqkcATSGWVoM0EK87S4M=,tag:E1mxXnc7wWkEX5BxhpLtng==,type:str] + pgp: [] + encrypted_regex: ^(data|stringData)$ + version: 3.7.1 diff --git a/cmd/flux/testdata/build-kustomization/podinfo/kustomization.yaml b/cmd/flux/testdata/build-kustomization/podinfo/kustomization.yaml index 0ba07668..435c23c6 100644 --- a/cmd/flux/testdata/build-kustomization/podinfo/kustomization.yaml +++ b/cmd/flux/testdata/build-kustomization/podinfo/kustomization.yaml @@ -4,6 +4,8 @@ resources: - ./deployment.yaml - ./hpa.yaml - ./service.yaml +- ./dockerconfigjson-sops-secret.yaml +- ./stringdata-secret.yaml secretGenerator: - files: - token=token.encrypted diff --git a/cmd/flux/testdata/build-kustomization/podinfo/stringdata-secret.yaml b/cmd/flux/testdata/build-kustomization/podinfo/stringdata-secret.yaml new file mode 100644 index 00000000..c9bb980d --- /dev/null +++ b/cmd/flux/testdata/build-kustomization/podinfo/stringdata-secret.yaml @@ -0,0 +1,28 @@ +apiVersion: v1 +kind: Secret +metadata: + name: secret-basic-auth-stringdata +type: kubernetes.io/basic-auth +stringData: + username: ENC[AES256_GCM,data:uKiQR48=,iv:jh2lgyAVu7igJAgoJsnOGhjxFyvUAa9lvT21u3hhqpU=,tag:zXM2JEpk3ZEH7WfkcWXXkw==,type:str] + password: ENC[AES256_GCM,data:PyhZmNhy929JGQ==,iv:PBqPaJmSw21+kn4gIlg5VdjLNZyf613z5RUTCesBoVw=,tag:Hjc7DsuUrtsz7PYPdNkL3g==,type:str] +sops: + kms: [] + gcp_kms: [] + azure_kv: [] + hc_vault: [] + age: + - recipient: age10la2ge0wtvx3qr7datqf7rs4yngxszdal927fs9rukamr8u2pshsvtz7ce + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBJd0xxbDZhYjVoZzY4YWhK + d2NvMVgrSGRVUGhHRGg3R1FpVURnbmh1TDBzCjcwby85M3JaK09QVk0yZFNMb2NL + c2NQZW5hS1FhYlBHU0VoUzBVYzZYUUUKLS0tIEdaNEw2Y0VjVHpZc3pyYUtLVmJk + NmN3K2VLU0NiZ1d0VHBYbGlCM1lrNmMKeWz3yfFbMNE+ly21oLfc1XnDSPRmnlPP + wIs8lk/qrzVZ45C9GdWnnPeGZZiia46Yop9TxseUS8gCjJ6KCxJCAg== + -----END AGE ENCRYPTED FILE----- + lastmodified: "2022-02-06T12:51:07Z" + mac: ENC[AES256_GCM,data:jtdzwj19uxdxvnmXg1HkAkDA6XlKMJOYFy7uLI5t/t11LwGop5Yeo7a4nQEEELehRx9J7B6U6NiySxAxBxWx5uW5vI5c8+069VV6dkiCIefnYSzuoIhQafjlFl1/KvH7VEjIWfHYuXF09v9PEKXkxEHUYDpS3QqQ3ymHRRI08pU=, iv:xX3E7F+AM29Pm8G5oqxRfYu9E7tEBGIaHeCJYgrtFmc=,tag:MJPGusNvu05z939jg8PAwQ==,type:str] + pgp: [] + encrypted_regex: ^(data|stringData)$ + version: 3.7.1 diff --git a/cmd/flux/testdata/diff-kustomization/diff-with-deployment.golden b/cmd/flux/testdata/diff-kustomization/diff-with-deployment.golden index 098497fc..7856dd58 100644 --- a/cmd/flux/testdata/diff-kustomization/diff-with-deployment.golden +++ b/cmd/flux/testdata/diff-kustomization/diff-with-deployment.golden @@ -1,4 +1,6 @@ ► HorizontalPodAutoscaler/default/podinfo created ► Service/default/podinfo created +► Secret/default/docker-secret created +► Secret/default/secret-basic-auth-stringdata created ► Secret/default/podinfo-token-77t89m9b67 created ► Secret/default/db-user-pass-bkbd782d2c created diff --git a/cmd/flux/testdata/diff-kustomization/diff-with-dockerconfigjson-sops-secret.golden b/cmd/flux/testdata/diff-kustomization/diff-with-dockerconfigjson-sops-secret.golden new file mode 100644 index 00000000..17972fff --- /dev/null +++ b/cmd/flux/testdata/diff-kustomization/diff-with-dockerconfigjson-sops-secret.golden @@ -0,0 +1,6 @@ +► Deployment/default/podinfo created +► HorizontalPodAutoscaler/default/podinfo created +► Service/default/podinfo created +► Secret/default/secret-basic-auth-stringdata created +► Secret/default/podinfo-token-77t89m9b67 created +► Secret/default/db-user-pass-bkbd782d2c created diff --git a/cmd/flux/testdata/diff-kustomization/diff-with-drifted-key-sops-secret.golden b/cmd/flux/testdata/diff-kustomization/diff-with-drifted-key-sops-secret.golden index 38269544..5608c24e 100644 --- a/cmd/flux/testdata/diff-kustomization/diff-with-drifted-key-sops-secret.golden +++ b/cmd/flux/testdata/diff-kustomization/diff-with-drifted-key-sops-secret.golden @@ -1,6 +1,8 @@ ► Deployment/default/podinfo created ► HorizontalPodAutoscaler/default/podinfo created ► Service/default/podinfo created +► Secret/default/docker-secret created +► Secret/default/secret-basic-auth-stringdata created ► Secret/default/podinfo-token-77t89m9b67 drifted data diff --git a/cmd/flux/testdata/diff-kustomization/diff-with-drifted-secret.golden b/cmd/flux/testdata/diff-kustomization/diff-with-drifted-secret.golden index ac76978f..41a65058 100644 --- a/cmd/flux/testdata/diff-kustomization/diff-with-drifted-secret.golden +++ b/cmd/flux/testdata/diff-kustomization/diff-with-drifted-secret.golden @@ -1,6 +1,8 @@ ► Deployment/default/podinfo created ► HorizontalPodAutoscaler/default/podinfo created ► Service/default/podinfo created +► Secret/default/docker-secret created +► Secret/default/secret-basic-auth-stringdata created ► Secret/default/podinfo-token-77t89m9b67 created ► Secret/default/db-user-pass-bkbd782d2c drifted diff --git a/cmd/flux/testdata/diff-kustomization/diff-with-drifted-service.golden b/cmd/flux/testdata/diff-kustomization/diff-with-drifted-service.golden index 6ddd3933..a9fe09f2 100644 --- a/cmd/flux/testdata/diff-kustomization/diff-with-drifted-service.golden +++ b/cmd/flux/testdata/diff-kustomization/diff-with-drifted-service.golden @@ -7,5 +7,7 @@ spec.ports.http.port - 9899 + 9898 +► Secret/default/docker-secret created +► Secret/default/secret-basic-auth-stringdata created ► Secret/default/podinfo-token-77t89m9b67 created ► Secret/default/db-user-pass-bkbd782d2c created diff --git a/cmd/flux/testdata/diff-kustomization/diff-with-drifted-value-sops-secret.golden b/cmd/flux/testdata/diff-kustomization/diff-with-drifted-value-sops-secret.golden index 033db67e..6c502226 100644 --- a/cmd/flux/testdata/diff-kustomization/diff-with-drifted-value-sops-secret.golden +++ b/cmd/flux/testdata/diff-kustomization/diff-with-drifted-value-sops-secret.golden @@ -1,4 +1,6 @@ ► Deployment/default/podinfo created ► HorizontalPodAutoscaler/default/podinfo created ► Service/default/podinfo created +► Secret/default/docker-secret created +► Secret/default/secret-basic-auth-stringdata created ► Secret/default/db-user-pass-bkbd782d2c created diff --git a/cmd/flux/testdata/diff-kustomization/diff-with-stringdata-sops-secret.golden b/cmd/flux/testdata/diff-kustomization/diff-with-stringdata-sops-secret.golden new file mode 100644 index 00000000..cf7183c8 --- /dev/null +++ b/cmd/flux/testdata/diff-kustomization/diff-with-stringdata-sops-secret.golden @@ -0,0 +1,6 @@ +► Deployment/default/podinfo created +► HorizontalPodAutoscaler/default/podinfo created +► Service/default/podinfo created +► Secret/default/docker-secret created +► Secret/default/podinfo-token-77t89m9b67 created +► Secret/default/db-user-pass-bkbd782d2c created diff --git a/cmd/flux/testdata/diff-kustomization/dockerconfigjson-sops-secret.yaml b/cmd/flux/testdata/diff-kustomization/dockerconfigjson-sops-secret.yaml new file mode 100644 index 00000000..1a689e92 --- /dev/null +++ b/cmd/flux/testdata/diff-kustomization/dockerconfigjson-sops-secret.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +data: + .dockerconfigjson: eyJtYXNrIjoiKipTT1BTKioifQ== +kind: Secret +metadata: + labels: + kustomize.toolkit.fluxcd.io/name: podinfo + kustomize.toolkit.fluxcd.io/namespace: {{ .fluxns }} + name: docker-secret + namespace: default +type: kubernetes.io/dockerconfigjson diff --git a/cmd/flux/testdata/diff-kustomization/nothing-is-deployed.golden b/cmd/flux/testdata/diff-kustomization/nothing-is-deployed.golden index da1c23da..5c320a1b 100644 --- a/cmd/flux/testdata/diff-kustomization/nothing-is-deployed.golden +++ b/cmd/flux/testdata/diff-kustomization/nothing-is-deployed.golden @@ -1,5 +1,7 @@ ► Deployment/default/podinfo created ► HorizontalPodAutoscaler/default/podinfo created ► Service/default/podinfo created +► Secret/default/docker-secret created +► Secret/default/secret-basic-auth-stringdata created ► Secret/default/podinfo-token-77t89m9b67 created ► Secret/default/db-user-pass-bkbd782d2c created diff --git a/cmd/flux/testdata/diff-kustomization/stringdata-sops-secret.yaml b/cmd/flux/testdata/diff-kustomization/stringdata-sops-secret.yaml new file mode 100644 index 00000000..c088dd75 --- /dev/null +++ b/cmd/flux/testdata/diff-kustomization/stringdata-sops-secret.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: Secret +metadata: + labels: + kustomize.toolkit.fluxcd.io/name: podinfo + kustomize.toolkit.fluxcd.io/namespace: {{ .fluxns }} + name: secret-basic-auth-stringdata + namespace: default +stringData: + password: KipTT1BTKio= + username: KipTT1BTKio= +type: kubernetes.io/basic-auth diff --git a/internal/build/build.go b/internal/build/build.go index 923852d5..6796bdbb 100644 --- a/internal/build/build.go +++ b/internal/build/build.go @@ -20,6 +20,7 @@ import ( "bytes" "context" "encoding/base64" + "encoding/json" "fmt" "sync" "time" @@ -40,9 +41,13 @@ import ( ) const ( - controllerName = "kustomize-controller" - controllerGroup = "kustomize.toolkit.fluxcd.io" - mask = "**SOPS**" + controllerName = "kustomize-controller" + controllerGroup = "kustomize.toolkit.fluxcd.io" + mask = "**SOPS**" + dockercfgSecretType = "kubernetes.io/dockerconfigjson" + typeField = "type" + dataField = "data" + stringDataField = "stringData" ) var defaultTimeout = 80 * time.Second @@ -183,7 +188,7 @@ func (b *Builder) build() (m resmap.ResMap, err error) { } // make sure secrets are masked - err = trimSopsData(res) + err = maskSopsData(res) if err != nil { return } @@ -257,40 +262,131 @@ func (b *Builder) setOwnerLabels(res *resource.Resource) error { return nil } -func trimSopsData(res *resource.Resource) error { +func maskSopsData(res *resource.Resource) error { // sopsMess is the base64 encoded mask sopsMess := base64.StdEncoding.EncodeToString([]byte(mask)) if res.GetKind() == "Secret" { + // get both data and stringdata maps as a secret can have both dataMap := res.GetDataMap() + stringDataMap := getStringDataMap(res) asYaml, err := res.AsYAML() if err != nil { - return fmt.Errorf("failed to decode secret %s data: %w", res.GetName(), err) + return fmt.Errorf("failed to mask secret %s sops data: %w", res.GetName(), err) } - //delete any sops data as we don't want to expose it + // delete any sops data as we don't want to expose it + // assume that both data and stringdata are encrypted if bytes.Contains(asYaml, []byte("sops:")) && bytes.Contains(asYaml, []byte("mac: ENC[")) { + // delete the sops object res.PipeE(yaml.FieldClearer{Name: "sops"}) - for k := range dataMap { - dataMap[k] = sopsMess + + secretType, err := res.GetFieldValue(typeField) + if err != nil { + return fmt.Errorf("failed to mask secret %s sops data: %w", res.GetName(), err) } - } else { - for k, v := range dataMap { - data, err := base64.StdEncoding.DecodeString(v) + if v, ok := secretType.(string); ok && v == dockercfgSecretType { + // if the secret is a json docker config secret, we need to mask the data with a json object + err := maskDockerconfigjsonSopsData(dataMap) if err != nil { - if _, ok := err.(base64.CorruptInputError); ok { - return fmt.Errorf("failed to decode secret %s data: %w", res.GetName(), err) - } + return fmt.Errorf("failed to mask secret %s sops data: %w", res.GetName(), err) } - if bytes.Contains(data, []byte("sops")) && bytes.Contains(data, []byte("ENC[")) { + err = maskDockerconfigjsonSopsData(stringDataMap) + if err != nil { + return fmt.Errorf("failed to mask secret %s sops data: %w", res.GetName(), err) + } + + } else { + for k := range dataMap { dataMap[k] = sopsMess } + + for k := range stringDataMap { + stringDataMap[k] = sopsMess + } + } + } else { + err := maskBase64EncryptedSopsData(dataMap, sopsMess) + if err != nil { + return fmt.Errorf("failed to mask secret %s sops data: %w", res.GetName(), err) + } + + err = maskSopsDataInStringDataSecret(stringDataMap, sopsMess) + if err != nil { + return fmt.Errorf("failed to mask secret %s sops data: %w", res.GetName(), err) } } + // set the data and stringdata maps res.SetDataMap(dataMap) + + if len(stringDataMap) > 0 { + err = res.SetMapField(yaml.NewMapRNode(&stringDataMap), stringDataField) + if err != nil { + return fmt.Errorf("failed to mask secret %s sops data: %w", res.GetName(), err) + } + } + } + + return nil +} + +func getStringDataMap(rn *resource.Resource) map[string]string { + n, err := rn.Pipe(yaml.Lookup(stringDataField)) + if err != nil { + return nil + } + result := map[string]string{} + _ = n.VisitFields(func(node *yaml.MapNode) error { + result[yaml.GetValue(node.Key)] = yaml.GetValue(node.Value) + return nil + }) + return result +} + +func maskDockerconfigjsonSopsData(dataMap map[string]string) error { + sopsMess := struct { + Mask string `json:"mask"` + }{ + Mask: mask, + } + + maskJson, err := json.Marshal(sopsMess) + if err != nil { + return err + } + + for k := range dataMap { + dataMap[k] = base64.StdEncoding.EncodeToString(maskJson) + } + + return nil +} + +func maskBase64EncryptedSopsData(dataMap map[string]string, mask string) error { + for k, v := range dataMap { + data, err := base64.StdEncoding.DecodeString(v) + if err != nil { + if _, ok := err.(base64.CorruptInputError); ok { + return err + } + } + + if bytes.Contains(data, []byte("sops")) && bytes.Contains(data, []byte("ENC[")) { + dataMap[k] = mask + } + } + + return nil +} + +func maskSopsDataInStringDataSecret(stringDataMap map[string]string, mask string) error { + for k, v := range stringDataMap { + if bytes.Contains([]byte(v), []byte("sops")) && bytes.Contains([]byte(v), []byte("ENC[")) { + stringDataMap[k] = mask + } } return nil diff --git a/internal/build/build_test.go b/internal/build/build_test.go index 17b2cf39..5e1cfffd 100644 --- a/internal/build/build_test.go +++ b/internal/build/build_test.go @@ -97,7 +97,7 @@ type: kubernetes.io/basic-auth name: "secret sops secret", yamlStr: `apiVersion: v1 data: - .dockercfg: ENC[AES256_GCM,data:KHCFH3hNnc+PMfWLFEPjebf3W4z4WXbGFAANRZyZC+07z7wlrTALJM6rn8YslW4tMAWCoAYxblC5WRCszTy0h9rw0U/RGOv5H0qCgnNg/FILFUqhwo9pNfrUH+MEP4M9qxxbLKZwObpHUE7DUsKx1JYAxsI=,iv:q48lqUbUQD+0cbYcjNMZMJLRdGHi78ZmDhNAT2th9tg=,tag:QRI2SZZXQrAcdql3R5AH2g==,type:str] + .dockerconfigjson: ENC[AES256_GCM,data:KHCFH3hNnc+PMfWLFEPjebf3W4z4WXbGFAANRZyZC+07z7wlrTALJM6rn8YslW4tMAWCoAYxblC5WRCszTy0h9rw0U/RGOv5H0qCgnNg/FILFUqhwo9pNfrUH+MEP4M9qxxbLKZwObpHUE7DUsKx1JYAxsI=,iv:q48lqUbUQD+0cbYcjNMZMJLRdGHi78ZmDhNAT2th9tg=,tag:QRI2SZZXQrAcdql3R5AH2g==,type:str] kind: Secret metadata: name: secret @@ -125,7 +125,7 @@ sops: `, expected: `apiVersion: v1 data: - .dockercfg: KipTT1BTKio= + .dockerconfigjson: eyJtYXNrIjoiKipTT1BTKioifQ== kind: Secret metadata: name: secret @@ -142,7 +142,7 @@ type: kubernetes.io/dockerconfigjson } resource := &resource.Resource{RNode: *r} - err = trimSopsData(resource) + err = maskSopsData(resource) if err != nil { t.Fatalf("unable to trim sops data: %v", err) } diff --git a/internal/build/diff.go b/internal/build/diff.go index 4e67e10b..9d9a7b3d 100644 --- a/internal/build/diff.go +++ b/internal/build/diff.go @@ -199,17 +199,31 @@ func diff(liveFile, mergedFile string, output io.Writer) error { } func diffSopsSecret(obj, liveObject, mergedObject *unstructured.Unstructured, change *ssa.ChangeSetEntry) { - data := obj.Object["data"] - for _, v := range data.(map[string]interface{}) { + // get both data and stringdata maps + data := obj.Object[dataField] + stringData := obj.Object[stringDataField] + + if m, ok := data.(map[string]interface{}); ok && m != nil { + applySopsDiff(m, liveObject, mergedObject, change) + } + + if m, ok := stringData.(map[string]interface{}); ok && m != nil { + applySopsDiff(m, liveObject, mergedObject, change) + } +} + +func applySopsDiff(data map[string]interface{}, liveObject, mergedObject *unstructured.Unstructured, change *ssa.ChangeSetEntry) { + for _, v := range data { v, err := base64.StdEncoding.DecodeString(v.(string)) if err != nil { fmt.Println(err) } + if bytes.Contains(v, []byte(mask)) { if liveObject != nil && mergedObject != nil { change.Action = string(ssa.UnchangedAction) - dataLive := liveObject.Object["data"].(map[string]interface{}) - dataMerged := mergedObject.Object["data"].(map[string]interface{}) + dataLive := liveObject.Object[dataField].(map[string]interface{}) + dataMerged := mergedObject.Object[dataField].(map[string]interface{}) if cmp.Diff(keys(dataLive), keys(dataMerged)) != "" { change.Action = string(ssa.ConfiguredAction) } From 41df03f6009553a2620c87a417bb5e536e194623 Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Mon, 7 Feb 2022 11:45:14 +0000 Subject: [PATCH 019/818] Update toolkit components - kustomize-controller to v0.20.1 https://github.com/fluxcd/kustomize-controller/blob/v0.20.1/CHANGELOG.md - source-controller to v0.21.2 https://github.com/fluxcd/source-controller/blob/v0.21.2/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 4 ++-- go.sum | 8 ++++---- manifests/bases/kustomize-controller/kustomization.yaml | 4 ++-- manifests/bases/source-controller/kustomization.yaml | 4 ++-- manifests/crds/kustomization.yaml | 4 ++-- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/go.mod b/go.mod index 103f54d2..e7cc7f22 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/fluxcd/helm-controller/api v0.16.0 github.com/fluxcd/image-automation-controller/api v0.20.0 github.com/fluxcd/image-reflector-controller/api v0.16.0 - github.com/fluxcd/kustomize-controller/api v0.20.0 + github.com/fluxcd/kustomize-controller/api v0.20.1 github.com/fluxcd/notification-controller/api v0.21.0 github.com/fluxcd/pkg/apis/kustomize v0.3.1 // indirect github.com/fluxcd/pkg/apis/meta v0.10.2 @@ -20,7 +20,7 @@ require ( github.com/fluxcd/pkg/ssh v0.3.1 github.com/fluxcd/pkg/untar v0.0.5 github.com/fluxcd/pkg/version v0.0.1 - github.com/fluxcd/source-controller/api v0.21.1 + github.com/fluxcd/source-controller/api v0.21.2 github.com/go-git/go-git/v5 v5.4.2 github.com/gonvenience/bunt v1.3.2 github.com/gonvenience/ytbx v1.4.2 diff --git a/go.sum b/go.sum index 606923d7..10e77dab 100644 --- a/go.sum +++ b/go.sum @@ -230,8 +230,8 @@ github.com/fluxcd/image-automation-controller/api v0.20.0 h1:Z+lxqif0KwccsuNOBZq github.com/fluxcd/image-automation-controller/api v0.20.0/go.mod h1:XhLYccGUbmJvTTpJ1jAFKZHr2e1GNXy0T85ZBO50mik= github.com/fluxcd/image-reflector-controller/api v0.16.0 h1:1O1YdoK7LsJgWLyvfZTSbvQcUQCBcgJ573HA0arlQQY= github.com/fluxcd/image-reflector-controller/api v0.16.0/go.mod h1:OIe3mSXc3OwQiNbiQ9vNXWYtNif31hc7WAbZWlFUUnc= -github.com/fluxcd/kustomize-controller/api v0.20.0 h1:Vw+2qCxeHMv0y1mfiBgVrMfcfFevBMrRfLEdfPTrb40= -github.com/fluxcd/kustomize-controller/api v0.20.0/go.mod h1:5MdpzJVx8+KiDIRv37zLme992BAOCgE0v1n+NOgs1lo= +github.com/fluxcd/kustomize-controller/api v0.20.1 h1:BMOUdKCb6bZ6kepcxU8vz9VcDbl4q6SH9j/mRPl2O1A= +github.com/fluxcd/kustomize-controller/api v0.20.1/go.mod h1:5MdpzJVx8+KiDIRv37zLme992BAOCgE0v1n+NOgs1lo= github.com/fluxcd/notification-controller/api v0.21.0 h1:D5B3TH5YtSww0SyvW1Ru5xWsh0MgHQanC/a1t3CvXq0= github.com/fluxcd/notification-controller/api v0.21.0/go.mod h1:gA9/j0kjh7VDuUC2Cubr9twxOdzb/0+ojcE9Lzsc9ug= github.com/fluxcd/pkg/apis/acl v0.0.3 h1:Lw0ZHdpnO4G7Zy9KjrzwwBmDZQuy4qEjaU/RvA6k1lc= @@ -254,8 +254,8 @@ github.com/fluxcd/pkg/untar v0.0.5/go.mod h1:O6V9+rtl8c1mHBafgqFlJN6zkF1HS5SSYn7 github.com/fluxcd/pkg/version v0.0.1 h1:/8asQoDXSThz3csiwi4Qo8Zb6blAxLXbtxNgeMJ9bCg= github.com/fluxcd/pkg/version v0.0.1/go.mod h1:WAF4FEEA9xyhngF8TDxg3UPu5fA1qhEYV8Pmi2Il01Q= github.com/fluxcd/source-controller/api v0.21.0/go.mod h1:Ab2qDmAUz6ZCp8UaHYLYzxyFrC1FQqEqjxiROb/Rdiw= -github.com/fluxcd/source-controller/api v0.21.1 h1:7X39YQHmB1vmIBrHxU+YAqxwtdC9Zh+tdtMKREW3xiQ= -github.com/fluxcd/source-controller/api v0.21.1/go.mod h1:Ab2qDmAUz6ZCp8UaHYLYzxyFrC1FQqEqjxiROb/Rdiw= +github.com/fluxcd/source-controller/api v0.21.2 h1:J0S5NN4V8FPLrkSMXIUoUvj1X/RuTpVJSjIRF414wmc= +github.com/fluxcd/source-controller/api v0.21.2/go.mod h1:Ab2qDmAUz6ZCp8UaHYLYzxyFrC1FQqEqjxiROb/Rdiw= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/form3tech-oss/jwt-go v3.2.3+incompatible h1:7ZaBxOI7TMoYBfyA3cQHErNNyAWIKUMIwqxEtgHOs5c= diff --git a/manifests/bases/kustomize-controller/kustomization.yaml b/manifests/bases/kustomize-controller/kustomization.yaml index b153ca99..8c6f84f8 100644 --- a/manifests/bases/kustomize-controller/kustomization.yaml +++ b/manifests/bases/kustomize-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.20.0/kustomize-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.20.0/kustomize-controller.deployment.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.20.1/kustomize-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.20.1/kustomize-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index 98135c00..fde7a5c0 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.21.1/source-controller.crds.yaml -- https://github.com/fluxcd/source-controller/releases/download/v0.21.1/source-controller.deployment.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.21.2/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.21.2/source-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index f4781239..80e82049 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.21.1/source-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.20.0/kustomize-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.21.2/source-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.20.1/kustomize-controller.crds.yaml - https://github.com/fluxcd/helm-controller/releases/download/v0.16.0/helm-controller.crds.yaml - https://github.com/fluxcd/notification-controller/releases/download/v0.21.0/notification-controller.crds.yaml - https://github.com/fluxcd/image-reflector-controller/releases/download/v0.16.0/image-reflector-controller.crds.yaml From 9d6a0379359f64e4ea5976625f99b13446f1fbf9 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Mon, 7 Feb 2022 14:09:23 +0200 Subject: [PATCH 020/818] Update dependencies Signed-off-by: Stefan Prodan --- cmd/flux/testdata/export/git-repo.yaml | 2 +- tests/azure/go.mod | 4 ++-- tests/azure/go.sum | 8 ++++---- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/cmd/flux/testdata/export/git-repo.yaml b/cmd/flux/testdata/export/git-repo.yaml index ba7c3b6c..ed590afd 100644 --- a/cmd/flux/testdata/export/git-repo.yaml +++ b/cmd/flux/testdata/export/git-repo.yaml @@ -11,6 +11,6 @@ spec: branch: main secretRef: name: flux-system - timeout: 20s + timeout: 1m0s url: ssh://git@github.com/example/repo diff --git a/tests/azure/go.mod b/tests/azure/go.mod index f8b51960..034c17e9 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -7,11 +7,11 @@ require ( github.com/fluxcd/helm-controller/api v0.16.0 github.com/fluxcd/image-automation-controller/api v0.20.0 github.com/fluxcd/image-reflector-controller/api v0.16.0 - github.com/fluxcd/kustomize-controller/api v0.20.0 + github.com/fluxcd/kustomize-controller/api v0.20.1 github.com/fluxcd/notification-controller/api v0.21.0 github.com/fluxcd/pkg/apis/meta v0.10.2 github.com/fluxcd/pkg/runtime v0.12.4 - github.com/fluxcd/source-controller/api v0.21.1 + github.com/fluxcd/source-controller/api v0.21.2 github.com/hashicorp/terraform-exec v0.14.0 github.com/libgit2/git2go/v31 v31.6.1 github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 diff --git a/tests/azure/go.sum b/tests/azure/go.sum index 62de61c6..68646695 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -204,8 +204,8 @@ github.com/fluxcd/image-automation-controller/api v0.20.0 h1:Z+lxqif0KwccsuNOBZq github.com/fluxcd/image-automation-controller/api v0.20.0/go.mod h1:XhLYccGUbmJvTTpJ1jAFKZHr2e1GNXy0T85ZBO50mik= github.com/fluxcd/image-reflector-controller/api v0.16.0 h1:1O1YdoK7LsJgWLyvfZTSbvQcUQCBcgJ573HA0arlQQY= github.com/fluxcd/image-reflector-controller/api v0.16.0/go.mod h1:OIe3mSXc3OwQiNbiQ9vNXWYtNif31hc7WAbZWlFUUnc= -github.com/fluxcd/kustomize-controller/api v0.20.0 h1:Vw+2qCxeHMv0y1mfiBgVrMfcfFevBMrRfLEdfPTrb40= -github.com/fluxcd/kustomize-controller/api v0.20.0/go.mod h1:5MdpzJVx8+KiDIRv37zLme992BAOCgE0v1n+NOgs1lo= +github.com/fluxcd/kustomize-controller/api v0.20.1 h1:BMOUdKCb6bZ6kepcxU8vz9VcDbl4q6SH9j/mRPl2O1A= +github.com/fluxcd/kustomize-controller/api v0.20.1/go.mod h1:5MdpzJVx8+KiDIRv37zLme992BAOCgE0v1n+NOgs1lo= github.com/fluxcd/notification-controller/api v0.21.0 h1:D5B3TH5YtSww0SyvW1Ru5xWsh0MgHQanC/a1t3CvXq0= github.com/fluxcd/notification-controller/api v0.21.0/go.mod h1:gA9/j0kjh7VDuUC2Cubr9twxOdzb/0+ojcE9Lzsc9ug= github.com/fluxcd/pkg/apis/acl v0.0.3 h1:Lw0ZHdpnO4G7Zy9KjrzwwBmDZQuy4qEjaU/RvA6k1lc= @@ -218,8 +218,8 @@ github.com/fluxcd/pkg/runtime v0.12.3/go.mod h1:imJ2xYy/d4PbSinX2IefmZk+iS2c1P5f github.com/fluxcd/pkg/runtime v0.12.4 h1:gA27RG/+adN2/7Qe03PB46Iwmye/MusPCpuS4zQ2fW0= github.com/fluxcd/pkg/runtime v0.12.4/go.mod h1:gspNvhAqodZgSmK1ZhMtvARBf/NGAlxmaZaIOHkJYsc= github.com/fluxcd/source-controller/api v0.21.0/go.mod h1:Ab2qDmAUz6ZCp8UaHYLYzxyFrC1FQqEqjxiROb/Rdiw= -github.com/fluxcd/source-controller/api v0.21.1 h1:7X39YQHmB1vmIBrHxU+YAqxwtdC9Zh+tdtMKREW3xiQ= -github.com/fluxcd/source-controller/api v0.21.1/go.mod h1:Ab2qDmAUz6ZCp8UaHYLYzxyFrC1FQqEqjxiROb/Rdiw= +github.com/fluxcd/source-controller/api v0.21.2 h1:J0S5NN4V8FPLrkSMXIUoUvj1X/RuTpVJSjIRF414wmc= +github.com/fluxcd/source-controller/api v0.21.2/go.mod h1:Ab2qDmAUz6ZCp8UaHYLYzxyFrC1FQqEqjxiROb/Rdiw= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/form3tech-oss/jwt-go v3.2.3+incompatible h1:7ZaBxOI7TMoYBfyA3cQHErNNyAWIKUMIwqxEtgHOs5c= From 4602b72778d149ad36c4b3d986997593565ae19b Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Mon, 7 Feb 2022 11:21:16 +0200 Subject: [PATCH 021/818] Fix bootstrap CRD wait race condition Signed-off-by: Stefan Prodan --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index e7cc7f22..55fc9066 100644 --- a/go.mod +++ b/go.mod @@ -16,7 +16,7 @@ require ( github.com/fluxcd/pkg/apis/meta v0.10.2 github.com/fluxcd/pkg/kustomize v0.0.2 github.com/fluxcd/pkg/runtime v0.12.4 - github.com/fluxcd/pkg/ssa v0.12.0 + github.com/fluxcd/pkg/ssa v0.13.0 github.com/fluxcd/pkg/ssh v0.3.1 github.com/fluxcd/pkg/untar v0.0.5 github.com/fluxcd/pkg/version v0.0.1 diff --git a/go.sum b/go.sum index 10e77dab..625331cb 100644 --- a/go.sum +++ b/go.sum @@ -245,8 +245,8 @@ github.com/fluxcd/pkg/kustomize v0.0.2/go.mod h1:AFwnf3OqQmpTCuwCARTGpPRMBf0ZFJN github.com/fluxcd/pkg/runtime v0.12.3/go.mod h1:imJ2xYy/d4PbSinX2IefmZk+iS2c1P5fY0js8mCE4SM= github.com/fluxcd/pkg/runtime v0.12.4 h1:gA27RG/+adN2/7Qe03PB46Iwmye/MusPCpuS4zQ2fW0= github.com/fluxcd/pkg/runtime v0.12.4/go.mod h1:gspNvhAqodZgSmK1ZhMtvARBf/NGAlxmaZaIOHkJYsc= -github.com/fluxcd/pkg/ssa v0.12.0 h1:7nF4UigU9Zk/9P/nbzUP3ah8IRC+BpB64O9iu5VnvEo= -github.com/fluxcd/pkg/ssa v0.12.0/go.mod h1:S+qig7BTOxop0c134y8Yv8/iQST4Kt7S2xXiFkP4VMA= +github.com/fluxcd/pkg/ssa v0.13.0 h1:LU4wf7dB9ksYdda0BEWNTBSTd68E5YwWxuPiPLAtw4Y= +github.com/fluxcd/pkg/ssa v0.13.0/go.mod h1:XGVGjUaG152HGN6sSUj+VFK/Th5i5rj2XsXSDdlIMNU= github.com/fluxcd/pkg/ssh v0.3.1 h1:iQw07bkX2rScactX8WYv+uMDsufFOlg8M3fV2TNs244= github.com/fluxcd/pkg/ssh v0.3.1/go.mod h1:Sebfv4Um51PvomuYdMvKRncQW5dtKhZ5J5TA+wiHNSQ= github.com/fluxcd/pkg/untar v0.0.5 h1:UGI3Ch1UIEIaqQvMicmImL1s9npQa64DJ/ozqHKB7gk= From cbca583f4b6d0c4302a6dcc8ab9700d3be73838b Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Thu, 10 Feb 2022 10:52:51 +0200 Subject: [PATCH 022/818] Add GitRepository namespace arg to `flux create image update` Signed-off-by: Stefan Prodan --- cmd/flux/create_image_update.go | 40 +++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 12 deletions(-) diff --git a/cmd/flux/create_image_update.go b/cmd/flux/create_image_update.go index 44c2f730..f1b7e2ca 100644 --- a/cmd/flux/create_image_update.go +++ b/cmd/flux/create_image_update.go @@ -49,25 +49,40 @@ mentioned in YAMLs in a git repository.`, --push-branch=image-updates \ --author-name=flux \ --author-email=flux@example.com \ - --commit-template="{{range .Updated.Images}}{{println .}}{{end}}"`, + --commit-template="{{range .Updated.Images}}{{println .}}{{end}}" + + # Configure image updates for a Git repository in a different namespace + flux create image update apps \ + --namespace=apps \ + --git-repo-ref=flux-system \ + --git-repo-namespace=flux-system \ + --git-repo-path="./clusters/my-cluster" \ + --checkout-branch=main \ + --push-branch=image-updates \ + --author-name=flux \ + --author-email=flux@example.com \ + --commit-template="{{range .Updated.Images}}{{println .}}{{end}}" +`, RunE: createImageUpdateRun, } type imageUpdateFlags struct { - gitRepoRef string - gitRepoPath string - checkoutBranch string - pushBranch string - commitTemplate string - authorName string - authorEmail string + gitRepoName string + gitRepoNamespace string + gitRepoPath string + checkoutBranch string + pushBranch string + commitTemplate string + authorName string + authorEmail string } var imageUpdateArgs = imageUpdateFlags{} func init() { flags := createImageUpdateCmd.Flags() - flags.StringVar(&imageUpdateArgs.gitRepoRef, "git-repo-ref", "", "the name of a GitRepository resource with details of the upstream Git repository") + flags.StringVar(&imageUpdateArgs.gitRepoName, "git-repo-ref", "", "the name of a GitRepository resource with details of the upstream Git repository") + flags.StringVar(&imageUpdateArgs.gitRepoNamespace, "git-repo-namespace", "", "the namespace of the GitRepository resource, defaults to the ImageUpdateAutomation namespace") flags.StringVar(&imageUpdateArgs.gitRepoPath, "git-repo-path", "", "path to the directory containing the manifests to be updated, defaults to the repository root") flags.StringVar(&imageUpdateArgs.checkoutBranch, "checkout-branch", "", "the branch to checkout") flags.StringVar(&imageUpdateArgs.pushBranch, "push-branch", "", "the branch to push commits to, defaults to the checkout branch if not specified") @@ -84,7 +99,7 @@ func createImageUpdateRun(cmd *cobra.Command, args []string) error { } objectName := args[0] - if imageUpdateArgs.gitRepoRef == "" { + if imageUpdateArgs.gitRepoName == "" { return fmt.Errorf("a reference to a GitRepository is required (--git-repo-ref)") } @@ -113,8 +128,9 @@ func createImageUpdateRun(cmd *cobra.Command, args []string) error { }, Spec: autov1.ImageUpdateAutomationSpec{ SourceRef: autov1.CrossNamespaceSourceReference{ - Kind: sourcev1.GitRepositoryKind, - Name: imageUpdateArgs.gitRepoRef, + Kind: sourcev1.GitRepositoryKind, + Name: imageUpdateArgs.gitRepoName, + Namespace: imageUpdateArgs.gitRepoNamespace, }, GitSpec: &autov1.GitSpec{ From 3b1d706b05d95e23b3966f7af4e70ec45e06f2b3 Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Thu, 10 Feb 2022 10:45:36 +0000 Subject: [PATCH 023/818] Update toolkit components - kustomize-controller to v0.20.2 https://github.com/fluxcd/kustomize-controller/blob/v0.20.2/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 2 +- go.sum | 4 ++-- manifests/bases/kustomize-controller/kustomization.yaml | 4 ++-- manifests/crds/kustomization.yaml | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index 55fc9066..42436eb0 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/fluxcd/helm-controller/api v0.16.0 github.com/fluxcd/image-automation-controller/api v0.20.0 github.com/fluxcd/image-reflector-controller/api v0.16.0 - github.com/fluxcd/kustomize-controller/api v0.20.1 + github.com/fluxcd/kustomize-controller/api v0.20.2 github.com/fluxcd/notification-controller/api v0.21.0 github.com/fluxcd/pkg/apis/kustomize v0.3.1 // indirect github.com/fluxcd/pkg/apis/meta v0.10.2 diff --git a/go.sum b/go.sum index 625331cb..7714d83f 100644 --- a/go.sum +++ b/go.sum @@ -230,8 +230,8 @@ github.com/fluxcd/image-automation-controller/api v0.20.0 h1:Z+lxqif0KwccsuNOBZq github.com/fluxcd/image-automation-controller/api v0.20.0/go.mod h1:XhLYccGUbmJvTTpJ1jAFKZHr2e1GNXy0T85ZBO50mik= github.com/fluxcd/image-reflector-controller/api v0.16.0 h1:1O1YdoK7LsJgWLyvfZTSbvQcUQCBcgJ573HA0arlQQY= github.com/fluxcd/image-reflector-controller/api v0.16.0/go.mod h1:OIe3mSXc3OwQiNbiQ9vNXWYtNif31hc7WAbZWlFUUnc= -github.com/fluxcd/kustomize-controller/api v0.20.1 h1:BMOUdKCb6bZ6kepcxU8vz9VcDbl4q6SH9j/mRPl2O1A= -github.com/fluxcd/kustomize-controller/api v0.20.1/go.mod h1:5MdpzJVx8+KiDIRv37zLme992BAOCgE0v1n+NOgs1lo= +github.com/fluxcd/kustomize-controller/api v0.20.2 h1:zqCvKGsNCL10WMfmjk2Sd526J6gv8ml027DwesFoZsc= +github.com/fluxcd/kustomize-controller/api v0.20.2/go.mod h1:5MdpzJVx8+KiDIRv37zLme992BAOCgE0v1n+NOgs1lo= github.com/fluxcd/notification-controller/api v0.21.0 h1:D5B3TH5YtSww0SyvW1Ru5xWsh0MgHQanC/a1t3CvXq0= github.com/fluxcd/notification-controller/api v0.21.0/go.mod h1:gA9/j0kjh7VDuUC2Cubr9twxOdzb/0+ojcE9Lzsc9ug= github.com/fluxcd/pkg/apis/acl v0.0.3 h1:Lw0ZHdpnO4G7Zy9KjrzwwBmDZQuy4qEjaU/RvA6k1lc= diff --git a/manifests/bases/kustomize-controller/kustomization.yaml b/manifests/bases/kustomize-controller/kustomization.yaml index 8c6f84f8..9805977c 100644 --- a/manifests/bases/kustomize-controller/kustomization.yaml +++ b/manifests/bases/kustomize-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.20.1/kustomize-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.20.1/kustomize-controller.deployment.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.20.2/kustomize-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.20.2/kustomize-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index 80e82049..ac97574a 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -2,7 +2,7 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - https://github.com/fluxcd/source-controller/releases/download/v0.21.2/source-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.20.1/kustomize-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.20.2/kustomize-controller.crds.yaml - https://github.com/fluxcd/helm-controller/releases/download/v0.16.0/helm-controller.crds.yaml - https://github.com/fluxcd/notification-controller/releases/download/v0.21.0/notification-controller.crds.yaml - https://github.com/fluxcd/image-reflector-controller/releases/download/v0.16.0/image-reflector-controller.crds.yaml From 877729aca39abaa77a1b53ce0ee367ffdd3c42da Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Thu, 10 Feb 2022 16:34:01 +0200 Subject: [PATCH 024/818] Fix bootstrap: Reset schema cache after applying CRDs Signed-off-by: Stefan Prodan --- go.mod | 4 +- go.sum | 6 ++- internal/utils/apply.go | 92 ++++++++++++++++++++++++++++++++--------- tests/azure/go.mod | 2 +- tests/azure/go.sum | 4 +- 5 files changed, 81 insertions(+), 27 deletions(-) diff --git a/go.mod b/go.mod index 42436eb0..dc1ee27a 100644 --- a/go.mod +++ b/go.mod @@ -45,8 +45,8 @@ require ( k8s.io/kubectl v0.23.1 sigs.k8s.io/cli-utils v0.27.0 sigs.k8s.io/controller-runtime v0.11.0 - sigs.k8s.io/kustomize/api v0.10.1 - sigs.k8s.io/kustomize/kyaml v0.13.0 + sigs.k8s.io/kustomize/api v0.11.2 + sigs.k8s.io/kustomize/kyaml v0.13.3 sigs.k8s.io/yaml v1.3.0 ) diff --git a/go.sum b/go.sum index 7714d83f..2443dff7 100644 --- a/go.sum +++ b/go.sum @@ -1411,16 +1411,18 @@ sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6/go.mod h1:p4QtZmO4uMYipTQNza sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2 h1:kDi4JBNAsJWfz1aEXhO8Jg87JJaPNLh5tIzYHgStQ9Y= sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2/go.mod h1:B+TnT182UBxE84DiCz4CVE26eOSDAeYCpfDnC2kdKMY= sigs.k8s.io/kustomize/api v0.8.11/go.mod h1:a77Ls36JdfCWojpUqR6m60pdGY1AYFix4AH83nJtY1g= -sigs.k8s.io/kustomize/api v0.10.1 h1:KgU7hfYoscuqag84kxtzKdEC3mKMb99DPI3a0eaV1d0= sigs.k8s.io/kustomize/api v0.10.1/go.mod h1:2FigT1QN6xKdcnGS2Ppp1uIWrtWN28Ms8A3OZUZhwr8= +sigs.k8s.io/kustomize/api v0.11.2 h1:6YvCJHFDwsLwAX7zNHBxMZi3k7dGIXI8G9l0saYQI0E= +sigs.k8s.io/kustomize/api v0.11.2/go.mod h1:GZuhith5YcqxIDe0GnRJNx5xxPTjlwaLTt/e+ChUtJA= sigs.k8s.io/kustomize/cmd/config v0.9.13/go.mod h1:7547FLF8W/lTaDf0BDqFTbZxM9zqwEJqCKN9sSR0xSs= sigs.k8s.io/kustomize/cmd/config v0.10.2/go.mod h1:K2aW7nXJ0AaT+VA/eO0/dzFLxmpFcTzudmAgDwPY1HQ= sigs.k8s.io/kustomize/kustomize/v4 v4.2.0/go.mod h1:MOkR6fmhwG7hEDRXBYELTi5GSFcLwfqwzTRHW3kv5go= sigs.k8s.io/kustomize/kustomize/v4 v4.4.1/go.mod h1:qOKJMMz2mBP+vcS7vK+mNz4HBLjaQSWRY22EF6Tb7Io= sigs.k8s.io/kustomize/kyaml v0.11.0/go.mod h1:GNMwjim4Ypgp/MueD3zXHLRJEjz7RvtPae0AwlvEMFM= sigs.k8s.io/kustomize/kyaml v0.12.0/go.mod h1:FTJxEZ86ScK184NpGSAQcfEqee0nul8oLCK30D47m4E= -sigs.k8s.io/kustomize/kyaml v0.13.0 h1:9c+ETyNfSrVhxvphs+K2dzT3dh5oVPPEqPOE/cUpScY= sigs.k8s.io/kustomize/kyaml v0.13.0/go.mod h1:FTJxEZ86ScK184NpGSAQcfEqee0nul8oLCK30D47m4E= +sigs.k8s.io/kustomize/kyaml v0.13.3 h1:tNNQIC+8cc+aXFTVg+RtQAOsjwUdYBZRAgYOVI3RBc4= +sigs.k8s.io/kustomize/kyaml v0.13.3/go.mod h1:/ya3Gk4diiQzlE4mBh7wykyLRFZNvqlbh+JnwQ9Vhrc= sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e h1:4Z09Hglb792X0kfOBBJUPFEyvVfQWrYT/l8h5EKA6JQ= sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= sigs.k8s.io/structured-merge-diff/v3 v3.0.0-20200116222232-67a7b8c61874/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw= diff --git a/internal/utils/apply.go b/internal/utils/apply.go index e2360adb..bfebb03d 100644 --- a/internal/utils/apply.go +++ b/internal/utils/apply.go @@ -23,6 +23,7 @@ import ( "fmt" "os" "path/filepath" + "time" "github.com/fluxcd/pkg/ssa" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" @@ -37,41 +38,53 @@ import ( // Apply is the equivalent of 'kubectl apply --server-side -f'. // If the given manifest is a kustomization.yaml, then apply performs the equivalent of 'kubectl apply --server-side -k'. func Apply(ctx context.Context, rcg genericclioptions.RESTClientGetter, manifestPath string) (string, error) { - cfg, err := KubeConfig(rcg) + objs, err := readObjects(manifestPath) if err != nil { return "", err } - restMapper, err := rcg.ToRESTMapper() - if err != nil { - return "", err + + if len(objs) == 0 { + return "", fmt.Errorf("no Kubernetes objects found at: %s", manifestPath) } - kubeClient, err := client.New(cfg, client.Options{Mapper: restMapper}) - if err != nil { + + if err := ssa.SetNativeKindsDefaults(objs); err != nil { return "", err } - kubePoller := polling.NewStatusPoller(kubeClient, restMapper, nil) - resourceManager := ssa.NewResourceManager(kubeClient, kubePoller, ssa.Owner{ - Field: "flux", - Group: "fluxcd.io", - }) + changeSet := ssa.NewChangeSet() - objs, err := readObjects(manifestPath) - if err != nil { - return "", err + // contains only CRDs and Namespaces + var stageOne []*unstructured.Unstructured + + // contains all objects except for CRDs and Namespaces + var stageTwo []*unstructured.Unstructured + + for _, u := range objs { + if ssa.IsClusterDefinition(u) { + stageOne = append(stageOne, u) + } else { + stageTwo = append(stageTwo, u) + } } - if len(objs) < 1 { - return "", fmt.Errorf("no Kubernetes objects found at: %s", manifestPath) + if len(stageOne) > 0 { + cs, err := applySet(ctx, rcg, stageOne) + if err != nil { + return "", err + } + changeSet.Append(cs.Entries) } - if err := ssa.SetNativeKindsDefaults(objs); err != nil { + if err := waitForSet(rcg, changeSet); err != nil { return "", err } - changeSet, err := resourceManager.ApplyAllStaged(ctx, objs, ssa.DefaultApplyOptions()) - if err != nil { - return "", err + if len(stageTwo) > 0 { + cs, err := applySet(ctx, rcg, stageTwo) + if err != nil { + return "", err + } + changeSet.Append(cs.Entries) } return changeSet.String(), nil @@ -98,3 +111,42 @@ func readObjects(manifestPath string) ([]*unstructured.Unstructured, error) { return ssa.ReadObjects(bufio.NewReader(ms)) } + +func newManager(rcg genericclioptions.RESTClientGetter) (*ssa.ResourceManager, error) { + cfg, err := KubeConfig(rcg) + if err != nil { + return nil, err + } + restMapper, err := rcg.ToRESTMapper() + if err != nil { + return nil, err + } + kubeClient, err := client.New(cfg, client.Options{Mapper: restMapper, Scheme: NewScheme()}) + if err != nil { + return nil, err + } + kubePoller := polling.NewStatusPoller(kubeClient, restMapper, nil) + + return ssa.NewResourceManager(kubeClient, kubePoller, ssa.Owner{ + Field: "flux", + Group: "fluxcd.io", + }), nil + +} + +func applySet(ctx context.Context, rcg genericclioptions.RESTClientGetter, objects []*unstructured.Unstructured) (*ssa.ChangeSet, error) { + man, err := newManager(rcg) + if err != nil { + return nil, err + } + + return man.ApplyAll(ctx, objects, ssa.DefaultApplyOptions()) +} + +func waitForSet(rcg genericclioptions.RESTClientGetter, changeSet *ssa.ChangeSet) error { + man, err := newManager(rcg) + if err != nil { + return err + } + return man.WaitForSet(changeSet.ToObjMetadataSet(), ssa.WaitOptions{Interval: 2 * time.Second, Timeout: time.Minute}) +} diff --git a/tests/azure/go.mod b/tests/azure/go.mod index 034c17e9..0f0ff70c 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -7,7 +7,7 @@ require ( github.com/fluxcd/helm-controller/api v0.16.0 github.com/fluxcd/image-automation-controller/api v0.20.0 github.com/fluxcd/image-reflector-controller/api v0.16.0 - github.com/fluxcd/kustomize-controller/api v0.20.1 + github.com/fluxcd/kustomize-controller/api v0.20.2 github.com/fluxcd/notification-controller/api v0.21.0 github.com/fluxcd/pkg/apis/meta v0.10.2 github.com/fluxcd/pkg/runtime v0.12.4 diff --git a/tests/azure/go.sum b/tests/azure/go.sum index 68646695..125d7610 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -204,8 +204,8 @@ github.com/fluxcd/image-automation-controller/api v0.20.0 h1:Z+lxqif0KwccsuNOBZq github.com/fluxcd/image-automation-controller/api v0.20.0/go.mod h1:XhLYccGUbmJvTTpJ1jAFKZHr2e1GNXy0T85ZBO50mik= github.com/fluxcd/image-reflector-controller/api v0.16.0 h1:1O1YdoK7LsJgWLyvfZTSbvQcUQCBcgJ573HA0arlQQY= github.com/fluxcd/image-reflector-controller/api v0.16.0/go.mod h1:OIe3mSXc3OwQiNbiQ9vNXWYtNif31hc7WAbZWlFUUnc= -github.com/fluxcd/kustomize-controller/api v0.20.1 h1:BMOUdKCb6bZ6kepcxU8vz9VcDbl4q6SH9j/mRPl2O1A= -github.com/fluxcd/kustomize-controller/api v0.20.1/go.mod h1:5MdpzJVx8+KiDIRv37zLme992BAOCgE0v1n+NOgs1lo= +github.com/fluxcd/kustomize-controller/api v0.20.2 h1:zqCvKGsNCL10WMfmjk2Sd526J6gv8ml027DwesFoZsc= +github.com/fluxcd/kustomize-controller/api v0.20.2/go.mod h1:5MdpzJVx8+KiDIRv37zLme992BAOCgE0v1n+NOgs1lo= github.com/fluxcd/notification-controller/api v0.21.0 h1:D5B3TH5YtSww0SyvW1Ru5xWsh0MgHQanC/a1t3CvXq0= github.com/fluxcd/notification-controller/api v0.21.0/go.mod h1:gA9/j0kjh7VDuUC2Cubr9twxOdzb/0+ojcE9Lzsc9ug= github.com/fluxcd/pkg/apis/acl v0.0.3 h1:Lw0ZHdpnO4G7Zy9KjrzwwBmDZQuy4qEjaU/RvA6k1lc= From 01f910e2578b6d78b8e933cd34ab9df8d07c2993 Mon Sep 17 00:00:00 2001 From: Soule BA Date: Fri, 11 Feb 2022 17:42:48 +0100 Subject: [PATCH 025/818] Add a simple spinner when running flux diff kustomization If implemented, users will see a spinner run while the diff is on-going. Signed-off-by: Soule BA --- go.mod | 6 +++++- go.sum | 13 ++++++++++++- internal/build/diff.go | 29 +++++++++++++++++++++++++++++ 3 files changed, 46 insertions(+), 2 deletions(-) diff --git a/go.mod b/go.mod index dc1ee27a..45789103 100644 --- a/go.mod +++ b/go.mod @@ -35,6 +35,7 @@ require ( github.com/olekukonko/tablewriter v0.0.4 github.com/spf13/cobra v1.2.1 github.com/spf13/pflag v1.0.5 + github.com/theckman/yacspin v0.13.12 golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3 golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 k8s.io/api v0.23.1 @@ -73,6 +74,7 @@ require ( github.com/emirpasic/gods v1.12.0 // indirect github.com/evanphx/json-patch v4.12.0+incompatible // indirect github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d // indirect + github.com/fatih/color v1.13.0 // indirect github.com/fluxcd/pkg/apis/acl v0.0.3 // indirect github.com/form3tech-oss/jwt-go v3.2.3+incompatible // indirect github.com/fvbommel/sortorder v1.0.1 // indirect @@ -108,8 +110,9 @@ require ( github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect github.com/mailru/easyjson v0.7.6 // indirect github.com/mattn/go-ciede2000 v0.0.0-20170301095244-782e8c62fec3 // indirect + github.com/mattn/go-colorable v0.1.12 // indirect github.com/mattn/go-isatty v0.0.14 // indirect - github.com/mattn/go-runewidth v0.0.7 // indirect + github.com/mattn/go-runewidth v0.0.13 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/go-ps v1.0.0 // indirect github.com/mitchellh/go-wordwrap v1.0.0 // indirect @@ -122,6 +125,7 @@ require ( github.com/peterbourgon/diskv v2.0.1+incompatible // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/rivo/uniseg v0.2.0 // indirect github.com/russross/blackfriday v1.5.2 // indirect github.com/russross/blackfriday/v2 v2.0.1 // indirect github.com/sergi/go-diff v1.2.0 // indirect diff --git a/go.sum b/go.sum index 2443dff7..e2aa5f33 100644 --- a/go.sum +++ b/go.sum @@ -221,6 +221,8 @@ github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d h1:105gxyaGwC github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d/go.mod h1:ZZMPRZwes7CROmyNKgQzC3XPs6L/G2EJLHddWejkmf4= github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= +github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fluxcd/go-git-providers v0.5.3 h1:Sg5XH+aXb6mYwITtdE4yc4yLoyFW3aVZx33qWuQb9/Q= github.com/fluxcd/go-git-providers v0.5.3/go.mod h1:4jTHTmSx3rFGnG78KUVgFYeG6vWFnKwUSr2mi31tvp8= @@ -570,6 +572,9 @@ github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlW github.com/mattn/go-ciede2000 v0.0.0-20170301095244-782e8c62fec3 h1:BXxTozrOU8zgC5dkpn3J6NTRdoP+hjok/e+ACr4Hibk= github.com/mattn/go-ciede2000 v0.0.0-20170301095244-782e8c62fec3/go.mod h1:x1uk6vxTiVuNt6S5R2UYgdhpj3oKojXvOXauHZ7dEnI= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= +github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= @@ -577,8 +582,9 @@ github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Ky github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.7 h1:Ei8KR0497xHyKJPAv59M1dkC+rOZCMBJ+t3fZ+twI54= github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU= +github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-shellwords v1.0.12 h1:M2zGm7EW6UQJvDeQxo4T51eKPurbeFbe8WtebGE2xrk= github.com/mattn/go-shellwords v1.0.12/go.mod h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lLtQsUlTZDWQ8Y= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= @@ -706,6 +712,8 @@ github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3x github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446/go.mod h1:uYEyJGbgTkfkS4+E/PavXkNJcbFIpEtjt2B0KDQ5+9M= +github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= +github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= @@ -771,6 +779,8 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/texttheater/golang-levenshtein v1.0.1 h1:+cRNoVrfiwufQPhoMzB6N0Yf/Mqajr6t1lOv8GyGE2U= github.com/texttheater/golang-levenshtein v1.0.1/go.mod h1:PYAKrbF5sAiq9wd+H82hs7gNaen0CplQ9uvm6+enD/8= +github.com/theckman/yacspin v0.13.12 h1:CdZ57+n0U6JMuh2xqjnjRq5Haj6v1ner2djtLQRzJr4= +github.com/theckman/yacspin v0.13.12/go.mod h1:Rd2+oG2LmQi5f3zC3yeZAOl245z8QOvrH4OPOJNZxLg= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= @@ -1049,6 +1059,7 @@ golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210817190340-bfb29a6856f2/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210917161153-d61c044b1678/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211029165221-6e7872819dc8 h1:M69LAlWZCshgp0QSzyDcSsSIejIEeuaCVpmwcKwyLMk= golang.org/x/sys v0.0.0-20211029165221-6e7872819dc8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= diff --git a/internal/build/diff.go b/internal/build/diff.go index 9d9a7b3d..e05a1c02 100644 --- a/internal/build/diff.go +++ b/internal/build/diff.go @@ -26,6 +26,7 @@ import ( "path/filepath" "sort" "strings" + "time" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" "github.com/fluxcd/pkg/ssa" @@ -35,6 +36,7 @@ import ( "github.com/hashicorp/go-multierror" "github.com/homeport/dyff/pkg/dyff" "github.com/lucasb-eyer/go-colorful" + "github.com/theckman/yacspin" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime/schema" "sigs.k8s.io/cli-utils/pkg/kstatus/polling" @@ -53,6 +55,21 @@ func (b *Builder) Manager() (*ssa.ResourceManager, error) { } func (b *Builder) Diff() (string, bool, error) { + // Add a spiner + cfg := yacspin.Config{ + Frequency: 100 * time.Millisecond, + CharSet: yacspin.CharSets[59], + Suffix: "Kustomization diffing...", + SuffixAutoColon: true, + Message: "running dry-run", + StopCharacter: "✓", + StopColors: []string{"fgGreen"}, + } + spinner, err := yacspin.New(cfg) + if err != nil { + return "", false, fmt.Errorf("failed to create spinner: %w", err) + } + output := strings.Builder{} createdOrDrifted := false res, err := b.Build() @@ -77,6 +94,11 @@ func (b *Builder) Diff() (string, bool, error) { return "", createdOrDrifted, err } + err = spinner.Start() + if err != nil { + return "", false, fmt.Errorf("failed to start spinner: %w", err) + } + var diffErrs error // create an inventory of objects to be reconciled newInventory := newInventory() @@ -123,6 +145,8 @@ func (b *Builder) Diff() (string, bool, error) { addObjectsToInventory(newInventory, change) } + spinner.Message("processing inventory") + if b.kustomization.Spec.Prune && diffErrs == nil { oldStatus := b.kustomization.Status.DeepCopy() if oldStatus.Inventory != nil { @@ -136,6 +160,11 @@ func (b *Builder) Diff() (string, bool, error) { } } + err = spinner.Stop() + if err != nil { + return "", createdOrDrifted, fmt.Errorf("failed to stop spinner: %w", err) + } + return output.String(), createdOrDrifted, diffErrs } From c950f8f8175093f2196869c1f544d9b6852d6590 Mon Sep 17 00:00:00 2001 From: Soule BA Date: Sat, 12 Feb 2022 12:55:41 +0100 Subject: [PATCH 026/818] Make sure bootstrap bitbucket-server retrieve the right project When fetching a project by name, a list is returned. If implented, this will make sure we return the right project from the list. Signed-off-by: Soule BA --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 45789103..c01db408 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,7 @@ require ( github.com/Masterminds/semver/v3 v3.1.0 github.com/ProtonMail/go-crypto v0.0.0-20211221144345-a4f6767435ab github.com/cyphar/filepath-securejoin v0.2.2 - github.com/fluxcd/go-git-providers v0.5.3 + github.com/fluxcd/go-git-providers v0.5.4 github.com/fluxcd/helm-controller/api v0.16.0 github.com/fluxcd/image-automation-controller/api v0.20.0 github.com/fluxcd/image-reflector-controller/api v0.16.0 diff --git a/go.sum b/go.sum index e2aa5f33..8ab06aec 100644 --- a/go.sum +++ b/go.sum @@ -224,8 +224,8 @@ github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5Kwzbycv github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/fluxcd/go-git-providers v0.5.3 h1:Sg5XH+aXb6mYwITtdE4yc4yLoyFW3aVZx33qWuQb9/Q= -github.com/fluxcd/go-git-providers v0.5.3/go.mod h1:4jTHTmSx3rFGnG78KUVgFYeG6vWFnKwUSr2mi31tvp8= +github.com/fluxcd/go-git-providers v0.5.4 h1:MnByjsmXa8rMt2hTmhmtbocq7YIsTlwZKrj9lAsob4Q= +github.com/fluxcd/go-git-providers v0.5.4/go.mod h1:4jTHTmSx3rFGnG78KUVgFYeG6vWFnKwUSr2mi31tvp8= github.com/fluxcd/helm-controller/api v0.16.0 h1:VXlt0EZVHgz2ZX1kUuKQAaQWNj1cC3PIKMRR/0aq07g= github.com/fluxcd/helm-controller/api v0.16.0/go.mod h1:/OeNzk18BVa7UmhGphENJdD/2GerKpMeDSxY8QYlO0o= github.com/fluxcd/image-automation-controller/api v0.20.0 h1:Z+lxqif0KwccsuNOBZq5M96RXCPxtm4Xt8siC1kR6H8= From f4418920fb67e75bb666630e19d698a36424ccda Mon Sep 17 00:00:00 2001 From: Simon Howe Date: Fri, 11 Feb 2022 17:58:45 +0100 Subject: [PATCH 027/818] Adds support for dot-prefixed paths in git - in `flux bootstrap` and `flux create kustomization` etc. - E.g. for example `--path=.flux` should work now - Previous behaviour is to strip off any leading "." and leave you with "./flux" in the kustomizations / folder structure generated by `flux bootstrap` Signed-off-by: Simon Howe --- internal/flags/safe_relative_path.go | 5 ++++- internal/flags/safe_relative_path_test.go | 4 ++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/internal/flags/safe_relative_path.go b/internal/flags/safe_relative_path.go index 4a5f78df..dfd3b9ea 100644 --- a/internal/flags/safe_relative_path.go +++ b/internal/flags/safe_relative_path.go @@ -41,7 +41,10 @@ func (p *SafeRelativePath) Set(str string) error { return fmt.Errorf("invalid relative path '%s': %w", cleanP, err) } // NB: required, as a secure join of "./" will result in "." - cleanP = fmt.Sprintf("./%s", strings.TrimPrefix(cleanP, ".")) + if cleanP == "." { + cleanP = "" + } + cleanP = fmt.Sprintf("./%s", cleanP) *p = SafeRelativePath(cleanP) return nil } diff --git a/internal/flags/safe_relative_path_test.go b/internal/flags/safe_relative_path_test.go index 325bd658..5c74ca28 100644 --- a/internal/flags/safe_relative_path_test.go +++ b/internal/flags/safe_relative_path_test.go @@ -37,6 +37,10 @@ func TestRelativePath_Set(t *testing.T) { {"traversing absolute path", "/foo/../bar", "./bar", false}, {"traversing overflowing absolute path", "/foo/../../../bar", "./bar", false}, {"empty", "", "./", false}, + {"relative empty path", "./", "./", false}, + {"double relative empty path", "././", "./", false}, + {"dot path", ".foo", "./.foo", false}, + {"relative dot path", "./.foo", "./.foo", false}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { From aac07f03d867e058af257b8b914ebd4ba4f3d1ec Mon Sep 17 00:00:00 2001 From: Simon Howe Date: Mon, 14 Feb 2022 10:44:56 +0100 Subject: [PATCH 028/818] Adds test for using dot to represent pwd Signed-off-by: Simon Howe --- internal/flags/safe_relative_path_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/flags/safe_relative_path_test.go b/internal/flags/safe_relative_path_test.go index 5c74ca28..86ba64da 100644 --- a/internal/flags/safe_relative_path_test.go +++ b/internal/flags/safe_relative_path_test.go @@ -41,6 +41,7 @@ func TestRelativePath_Set(t *testing.T) { {"double relative empty path", "././", "./", false}, {"dot path", ".foo", "./.foo", false}, {"relative dot path", "./.foo", "./.foo", false}, + {"current directory", ".", "./", false}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { From 23c4c2f1aa7b5c0a55374a9185bcf69531694838 Mon Sep 17 00:00:00 2001 From: Simon Howe Date: Mon, 14 Feb 2022 10:51:20 +0100 Subject: [PATCH 029/818] Adds test for parent directory Signed-off-by: Simon Howe --- internal/flags/safe_relative_path_test.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/internal/flags/safe_relative_path_test.go b/internal/flags/safe_relative_path_test.go index 86ba64da..a9d5f3fe 100644 --- a/internal/flags/safe_relative_path_test.go +++ b/internal/flags/safe_relative_path_test.go @@ -42,6 +42,8 @@ func TestRelativePath_Set(t *testing.T) { {"dot path", ".foo", "./.foo", false}, {"relative dot path", "./.foo", "./.foo", false}, {"current directory", ".", "./", false}, + {"parent directory", "..", "./", false}, + {"parent directory more qualified", "./..", "./", false}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { From a30ffdb1767bfae39cd058e47a8eddfebe83425f Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Mon, 14 Feb 2022 23:59:20 +0100 Subject: [PATCH 030/818] Use text/template Signed-off-by: Somtochi Onyekwere --- cmd/flux/logs.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/flux/logs.go b/cmd/flux/logs.go index 3dc0f903..b16d044d 100644 --- a/cmd/flux/logs.go +++ b/cmd/flux/logs.go @@ -21,12 +21,12 @@ import ( "context" "encoding/json" "fmt" - "html/template" "io" "os" "sort" "strings" "sync" + "text/template" "time" "github.com/spf13/cobra" From 4a893b13f8683ff127ffb4a83e64e5a5495c2bbe Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Wed, 16 Feb 2022 10:47:20 +0100 Subject: [PATCH 031/818] validate that object name adheres to RFC 1123 for flux create commands Signed-off-by: Somtochi Onyekwere --- cmd/flux/create.go | 18 ++++++++++ cmd/flux/create_secret_git_test.go | 2 +- cmd/flux/create_secret_helm_test.go | 2 +- cmd/flux/create_secret_tls_test.go | 2 +- cmd/flux/create_source_git_test.go | 2 +- cmd/flux/create_test.go | 55 +++++++++++++++++++++++++++++ 6 files changed, 77 insertions(+), 4 deletions(-) create mode 100644 cmd/flux/create_test.go diff --git a/cmd/flux/create.go b/cmd/flux/create.go index 758a2f54..1c3d99ef 100644 --- a/cmd/flux/create.go +++ b/cmd/flux/create.go @@ -19,6 +19,7 @@ package main import ( "context" "fmt" + "regexp" "strings" "time" @@ -51,6 +52,18 @@ func init() { createCmd.PersistentFlags().BoolVar(&createArgs.export, "export", false, "export in YAML format to stdout") createCmd.PersistentFlags().StringSliceVar(&createArgs.labels, "label", nil, "set labels on the resource (can specify multiple labels with commas: label1=value1,label2=value2)") + createCmd.PersistentPreRunE = func(cmd *cobra.Command, args []string) error { + if len(args) < 1 { + return fmt.Errorf("name is required") + } + + name := args[0] + if !validateObjectName(name) { + return fmt.Errorf("name '%s' is invalid, it should adhere to standard defined in RFC 1123", name) + } + + return nil + } rootCmd.AddCommand(createCmd) } @@ -150,3 +163,8 @@ func parseLabels() (map[string]string, error) { return result, nil } + +func validateObjectName(name string) bool { + r := regexp.MustCompile("^[a-z0-9]([a-z0-9\\-]){0,61}[a-z0-9]$") + return r.MatchString(name) +} diff --git a/cmd/flux/create_secret_git_test.go b/cmd/flux/create_secret_git_test.go index 01a3e929..16ff400a 100644 --- a/cmd/flux/create_secret_git_test.go +++ b/cmd/flux/create_secret_git_test.go @@ -13,7 +13,7 @@ func TestCreateGitSecret(t *testing.T) { { name: "no args", args: "create secret git", - assert: assertError("secret name is required"), + assert: assertError("name is required"), }, { name: "basic secret", diff --git a/cmd/flux/create_secret_helm_test.go b/cmd/flux/create_secret_helm_test.go index 04c96dbb..fe0bc0c9 100644 --- a/cmd/flux/create_secret_helm_test.go +++ b/cmd/flux/create_secret_helm_test.go @@ -12,7 +12,7 @@ func TestCreateHelmSecret(t *testing.T) { }{ { args: "create secret helm", - assert: assertError("secret name is required"), + assert: assertError("name is required"), }, { args: "create secret helm helm-secret --username=my-username --password=my-password --namespace=my-namespace --export", diff --git a/cmd/flux/create_secret_tls_test.go b/cmd/flux/create_secret_tls_test.go index 8085c584..31d49200 100644 --- a/cmd/flux/create_secret_tls_test.go +++ b/cmd/flux/create_secret_tls_test.go @@ -12,7 +12,7 @@ func TestCreateTlsSecretNoArgs(t *testing.T) { }{ { args: "create secret tls", - assert: assertError("secret name is required"), + assert: assertError("name is required"), }, { args: "create secret tls certs --namespace=my-namespace --cert-file=./testdata/create_secret/tls/test-cert.pem --key-file=./testdata/create_secret/tls/test-key.pem --export", diff --git a/cmd/flux/create_source_git_test.go b/cmd/flux/create_source_git_test.go index 1b391bce..73c1724a 100644 --- a/cmd/flux/create_source_git_test.go +++ b/cmd/flux/create_source_git_test.go @@ -96,7 +96,7 @@ func TestCreateSourceGit(t *testing.T) { { "NoArgs", "create source git", - assertError("GitRepository source name is required"), + assertError("name is required"), nil, }, { "Succeeded", diff --git a/cmd/flux/create_test.go b/cmd/flux/create_test.go new file mode 100644 index 00000000..ee38fe50 --- /dev/null +++ b/cmd/flux/create_test.go @@ -0,0 +1,55 @@ +package main + +import ( + "testing" + + "k8s.io/apimachinery/pkg/util/rand" +) + +func Test_validateObjectName(t *testing.T) { + tests := []struct { + name string + valid bool + }{ + { + name: "flux-system", + valid: true, + }, + { + name: "-flux-system", + valid: false, + }, + { + name: "-flux-system-", + valid: false, + }, + { + name: "third.first", + valid: false, + }, + { + name: "THirdfirst", + valid: false, + }, + { + name: "THirdfirst", + valid: false, + }, + { + name: rand.String(63), + valid: true, + }, + { + name: rand.String(64), + valid: false, + }, + } + + for _, tt := range tests { + valid := validateObjectName(tt.name) + if valid != tt.valid { + t.Errorf("expected name %q to return %t for validateObjectName func but got %t", + tt.name, tt.valid, valid) + } + } +} From d7129d6b5563d7c1b07f7056508e9e99c49fab7b Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Wed, 16 Feb 2022 11:04:05 +0100 Subject: [PATCH 032/818] Remove validation from sub-commands Signed-off-by: Somtochi Onyekwere --- cmd/flux/create.go | 2 +- cmd/flux/create_alert.go | 3 --- cmd/flux/create_alertprovider.go | 3 --- cmd/flux/create_helmrelease.go | 3 --- cmd/flux/create_image_policy.go | 3 --- cmd/flux/create_image_repository.go | 3 --- cmd/flux/create_image_update.go | 3 --- cmd/flux/create_kustomization.go | 3 --- cmd/flux/create_receiver.go | 3 --- cmd/flux/create_secret_git.go | 3 --- cmd/flux/create_secret_helm.go | 4 ---- cmd/flux/create_secret_tls.go | 4 ---- cmd/flux/create_source_bucket.go | 3 --- cmd/flux/create_source_git.go | 3 --- cmd/flux/create_source_helm.go | 3 --- cmd/flux/create_tenant.go | 3 --- 16 files changed, 1 insertion(+), 48 deletions(-) diff --git a/cmd/flux/create.go b/cmd/flux/create.go index 1c3d99ef..9aed0c43 100644 --- a/cmd/flux/create.go +++ b/cmd/flux/create.go @@ -59,7 +59,7 @@ func init() { name := args[0] if !validateObjectName(name) { - return fmt.Errorf("name '%s' is invalid, it should adhere to standard defined in RFC 1123", name) + return fmt.Errorf("name '%s' is invalid, it should adhere to standard defined in RFC 1123, the name can only contain alphanumeric characters or '-'", name) } return nil diff --git a/cmd/flux/create_alert.go b/cmd/flux/create_alert.go index 0a5ea93a..7f9968b8 100644 --- a/cmd/flux/create_alert.go +++ b/cmd/flux/create_alert.go @@ -63,9 +63,6 @@ func init() { } func createAlertCmdRun(cmd *cobra.Command, args []string) error { - if len(args) < 1 { - return fmt.Errorf("Alert name is required") - } name := args[0] if alertArgs.providerRef == "" { diff --git a/cmd/flux/create_alertprovider.go b/cmd/flux/create_alertprovider.go index 7d5bf640..2663482c 100644 --- a/cmd/flux/create_alertprovider.go +++ b/cmd/flux/create_alertprovider.go @@ -73,9 +73,6 @@ func init() { } func createAlertProviderCmdRun(cmd *cobra.Command, args []string) error { - if len(args) < 1 { - return fmt.Errorf("Provider name is required") - } name := args[0] if alertProviderArgs.alertType == "" { diff --git a/cmd/flux/create_helmrelease.go b/cmd/flux/create_helmrelease.go index 2072c720..d8f37cc5 100644 --- a/cmd/flux/create_helmrelease.go +++ b/cmd/flux/create_helmrelease.go @@ -139,9 +139,6 @@ func init() { } func createHelmReleaseCmdRun(cmd *cobra.Command, args []string) error { - if len(args) < 1 { - return fmt.Errorf("HelmRelease name is required") - } name := args[0] if helmReleaseArgs.chart == "" { diff --git a/cmd/flux/create_image_policy.go b/cmd/flux/create_image_policy.go index 05cb5c14..b9d8eb1a 100644 --- a/cmd/flux/create_image_policy.go +++ b/cmd/flux/create_image_policy.go @@ -84,9 +84,6 @@ func (obj imagePolicyAdapter) getObservedGeneration() int64 { } func createImagePolicyRun(cmd *cobra.Command, args []string) error { - if len(args) < 1 { - return fmt.Errorf("ImagePolicy name is required") - } objectName := args[0] if imagePolicyArgs.imageRef == "" { diff --git a/cmd/flux/create_image_repository.go b/cmd/flux/create_image_repository.go index b5ffdcb8..140658f3 100644 --- a/cmd/flux/create_image_repository.go +++ b/cmd/flux/create_image_repository.go @@ -83,9 +83,6 @@ func init() { } func createImageRepositoryRun(cmd *cobra.Command, args []string) error { - if len(args) < 1 { - return fmt.Errorf("ImageRepository name is required") - } objectName := args[0] if imageRepoArgs.image == "" { diff --git a/cmd/flux/create_image_update.go b/cmd/flux/create_image_update.go index f1b7e2ca..a67f6bc3 100644 --- a/cmd/flux/create_image_update.go +++ b/cmd/flux/create_image_update.go @@ -94,9 +94,6 @@ func init() { } func createImageUpdateRun(cmd *cobra.Command, args []string) error { - if len(args) < 1 { - return fmt.Errorf("ImageUpdateAutomation name is required") - } objectName := args[0] if imageUpdateArgs.gitRepoName == "" { diff --git a/cmd/flux/create_kustomization.go b/cmd/flux/create_kustomization.go index d523374d..4d0ebb99 100644 --- a/cmd/flux/create_kustomization.go +++ b/cmd/flux/create_kustomization.go @@ -119,9 +119,6 @@ func NewKustomizationFlags() kustomizationFlags { } func createKsCmdRun(cmd *cobra.Command, args []string) error { - if len(args) < 1 { - return fmt.Errorf("Kustomization name is required") - } name := args[0] if kustomizationArgs.path == "" { diff --git a/cmd/flux/create_receiver.go b/cmd/flux/create_receiver.go index d6004dc1..6533f173 100644 --- a/cmd/flux/create_receiver.go +++ b/cmd/flux/create_receiver.go @@ -67,9 +67,6 @@ func init() { } func createReceiverCmdRun(cmd *cobra.Command, args []string) error { - if len(args) < 1 { - return fmt.Errorf("Receiver name is required") - } name := args[0] if receiverArgs.receiverType == "" { diff --git a/cmd/flux/create_secret_git.go b/cmd/flux/create_secret_git.go index 769c2526..0effc1b5 100644 --- a/cmd/flux/create_secret_git.go +++ b/cmd/flux/create_secret_git.go @@ -112,9 +112,6 @@ func NewSecretGitFlags() secretGitFlags { } func createSecretGitCmdRun(cmd *cobra.Command, args []string) error { - if len(args) < 1 { - return fmt.Errorf("secret name is required") - } name := args[0] if secretGitArgs.url == "" { return fmt.Errorf("url is required") diff --git a/cmd/flux/create_secret_helm.go b/cmd/flux/create_secret_helm.go index 8f9df1b5..80a7ce9d 100644 --- a/cmd/flux/create_secret_helm.go +++ b/cmd/flux/create_secret_helm.go @@ -18,7 +18,6 @@ package main import ( "context" - "fmt" "github.com/spf13/cobra" corev1 "k8s.io/api/core/v1" @@ -68,9 +67,6 @@ func init() { } func createSecretHelmCmdRun(cmd *cobra.Command, args []string) error { - if len(args) < 1 { - return fmt.Errorf("secret name is required") - } name := args[0] labels, err := parseLabels() diff --git a/cmd/flux/create_secret_tls.go b/cmd/flux/create_secret_tls.go index a308066e..b89a2601 100644 --- a/cmd/flux/create_secret_tls.go +++ b/cmd/flux/create_secret_tls.go @@ -18,7 +18,6 @@ package main import ( "context" - "fmt" "github.com/spf13/cobra" "github.com/spf13/pflag" @@ -67,9 +66,6 @@ func init() { } func createSecretTLSCmdRun(cmd *cobra.Command, args []string) error { - if len(args) < 1 { - return fmt.Errorf("secret name is required") - } name := args[0] labels, err := parseLabels() diff --git a/cmd/flux/create_source_bucket.go b/cmd/flux/create_source_bucket.go index 50858c5b..31279799 100644 --- a/cmd/flux/create_source_bucket.go +++ b/cmd/flux/create_source_bucket.go @@ -93,9 +93,6 @@ func NewSourceBucketFlags() sourceBucketFlags { } func createSourceBucketCmdRun(cmd *cobra.Command, args []string) error { - if len(args) < 1 { - return fmt.Errorf("Bucket source name is required") - } name := args[0] if sourceBucketArgs.name == "" { diff --git a/cmd/flux/create_source_git.go b/cmd/flux/create_source_git.go index 17a928b6..2f13dd9c 100644 --- a/cmd/flux/create_source_git.go +++ b/cmd/flux/create_source_git.go @@ -150,9 +150,6 @@ func newSourceGitFlags() sourceGitFlags { } func createSourceGitCmdRun(cmd *cobra.Command, args []string) error { - if len(args) < 1 { - return fmt.Errorf("GitRepository source name is required") - } name := args[0] if sourceGitArgs.url == "" { diff --git a/cmd/flux/create_source_helm.go b/cmd/flux/create_source_helm.go index 81b5a05f..2d3f2513 100644 --- a/cmd/flux/create_source_helm.go +++ b/cmd/flux/create_source_helm.go @@ -91,9 +91,6 @@ func init() { } func createSourceHelmCmdRun(cmd *cobra.Command, args []string) error { - if len(args) < 1 { - return fmt.Errorf("HelmRepository source name is required") - } name := args[0] if sourceHelmArgs.url == "" { diff --git a/cmd/flux/create_tenant.go b/cmd/flux/create_tenant.go index 88b8eda6..4ac8eb96 100644 --- a/cmd/flux/create_tenant.go +++ b/cmd/flux/create_tenant.go @@ -70,9 +70,6 @@ func init() { } func createTenantCmdRun(cmd *cobra.Command, args []string) error { - if len(args) < 1 { - return fmt.Errorf("tenant name is required") - } tenant := args[0] if err := validation.IsQualifiedName(tenant); len(err) > 0 { return fmt.Errorf("invalid tenant name '%s': %v", tenant, err) From a1bb6babede670744237974c0b6dd621b01ed4e7 Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Wed, 16 Feb 2022 12:57:45 +0000 Subject: [PATCH 033/818] Update toolkit components - helm-controller to v0.17.0 https://github.com/fluxcd/helm-controller/blob/v0.17.0/CHANGELOG.md - kustomize-controller to v0.21.0 https://github.com/fluxcd/kustomize-controller/blob/v0.21.0/CHANGELOG.md - notification-controller to v0.22.0 https://github.com/fluxcd/notification-controller/blob/v0.22.0/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 6 +++--- go.sum | 12 ++++++------ manifests/bases/helm-controller/kustomization.yaml | 4 ++-- .../bases/kustomize-controller/kustomization.yaml | 4 ++-- .../bases/notification-controller/kustomization.yaml | 4 ++-- manifests/crds/kustomization.yaml | 6 +++--- 6 files changed, 18 insertions(+), 18 deletions(-) diff --git a/go.mod b/go.mod index c01db408..ab2e38c9 100644 --- a/go.mod +++ b/go.mod @@ -7,11 +7,11 @@ require ( github.com/ProtonMail/go-crypto v0.0.0-20211221144345-a4f6767435ab github.com/cyphar/filepath-securejoin v0.2.2 github.com/fluxcd/go-git-providers v0.5.4 - github.com/fluxcd/helm-controller/api v0.16.0 + github.com/fluxcd/helm-controller/api v0.17.0 github.com/fluxcd/image-automation-controller/api v0.20.0 github.com/fluxcd/image-reflector-controller/api v0.16.0 - github.com/fluxcd/kustomize-controller/api v0.20.2 - github.com/fluxcd/notification-controller/api v0.21.0 + github.com/fluxcd/kustomize-controller/api v0.21.0 + github.com/fluxcd/notification-controller/api v0.22.0 github.com/fluxcd/pkg/apis/kustomize v0.3.1 // indirect github.com/fluxcd/pkg/apis/meta v0.10.2 github.com/fluxcd/pkg/kustomize v0.0.2 diff --git a/go.sum b/go.sum index 8ab06aec..9b449748 100644 --- a/go.sum +++ b/go.sum @@ -226,16 +226,16 @@ github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYF github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fluxcd/go-git-providers v0.5.4 h1:MnByjsmXa8rMt2hTmhmtbocq7YIsTlwZKrj9lAsob4Q= github.com/fluxcd/go-git-providers v0.5.4/go.mod h1:4jTHTmSx3rFGnG78KUVgFYeG6vWFnKwUSr2mi31tvp8= -github.com/fluxcd/helm-controller/api v0.16.0 h1:VXlt0EZVHgz2ZX1kUuKQAaQWNj1cC3PIKMRR/0aq07g= -github.com/fluxcd/helm-controller/api v0.16.0/go.mod h1:/OeNzk18BVa7UmhGphENJdD/2GerKpMeDSxY8QYlO0o= +github.com/fluxcd/helm-controller/api v0.17.0 h1:iWOAf5MQzWQ3QZlKQ78meFabOA61d8pkos+nDW643+s= +github.com/fluxcd/helm-controller/api v0.17.0/go.mod h1:/OeNzk18BVa7UmhGphENJdD/2GerKpMeDSxY8QYlO0o= github.com/fluxcd/image-automation-controller/api v0.20.0 h1:Z+lxqif0KwccsuNOBZq5M96RXCPxtm4Xt8siC1kR6H8= github.com/fluxcd/image-automation-controller/api v0.20.0/go.mod h1:XhLYccGUbmJvTTpJ1jAFKZHr2e1GNXy0T85ZBO50mik= github.com/fluxcd/image-reflector-controller/api v0.16.0 h1:1O1YdoK7LsJgWLyvfZTSbvQcUQCBcgJ573HA0arlQQY= github.com/fluxcd/image-reflector-controller/api v0.16.0/go.mod h1:OIe3mSXc3OwQiNbiQ9vNXWYtNif31hc7WAbZWlFUUnc= -github.com/fluxcd/kustomize-controller/api v0.20.2 h1:zqCvKGsNCL10WMfmjk2Sd526J6gv8ml027DwesFoZsc= -github.com/fluxcd/kustomize-controller/api v0.20.2/go.mod h1:5MdpzJVx8+KiDIRv37zLme992BAOCgE0v1n+NOgs1lo= -github.com/fluxcd/notification-controller/api v0.21.0 h1:D5B3TH5YtSww0SyvW1Ru5xWsh0MgHQanC/a1t3CvXq0= -github.com/fluxcd/notification-controller/api v0.21.0/go.mod h1:gA9/j0kjh7VDuUC2Cubr9twxOdzb/0+ojcE9Lzsc9ug= +github.com/fluxcd/kustomize-controller/api v0.21.0 h1:PizHYQuuxmO4+tnUHJ4v7cUhNEZulhmZdgnkObHjdOo= +github.com/fluxcd/kustomize-controller/api v0.21.0/go.mod h1:5MdpzJVx8+KiDIRv37zLme992BAOCgE0v1n+NOgs1lo= +github.com/fluxcd/notification-controller/api v0.22.0 h1:mbf9utgPbvclOhgQW85lJCzUpZ8FENkLURAwPD6leWM= +github.com/fluxcd/notification-controller/api v0.22.0/go.mod h1:gA9/j0kjh7VDuUC2Cubr9twxOdzb/0+ojcE9Lzsc9ug= github.com/fluxcd/pkg/apis/acl v0.0.3 h1:Lw0ZHdpnO4G7Zy9KjrzwwBmDZQuy4qEjaU/RvA6k1lc= github.com/fluxcd/pkg/apis/acl v0.0.3/go.mod h1:XPts6lRJ9C9fIF9xVWofmQwftvhY25n1ps7W9xw0XLU= github.com/fluxcd/pkg/apis/kustomize v0.3.1 h1:wmb5D9e1+Rr3/5O3235ERuj+h2VKUArVfYYk68QKP+w= diff --git a/manifests/bases/helm-controller/kustomization.yaml b/manifests/bases/helm-controller/kustomization.yaml index 6d6c395e..fb2626da 100644 --- a/manifests/bases/helm-controller/kustomization.yaml +++ b/manifests/bases/helm-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/helm-controller/releases/download/v0.16.0/helm-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.16.0/helm-controller.deployment.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.17.0/helm-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.17.0/helm-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/kustomize-controller/kustomization.yaml b/manifests/bases/kustomize-controller/kustomization.yaml index 9805977c..4e404a9b 100644 --- a/manifests/bases/kustomize-controller/kustomization.yaml +++ b/manifests/bases/kustomize-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.20.2/kustomize-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.20.2/kustomize-controller.deployment.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.21.0/kustomize-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.21.0/kustomize-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/notification-controller/kustomization.yaml b/manifests/bases/notification-controller/kustomization.yaml index 97edf000..0d079a11 100644 --- a/manifests/bases/notification-controller/kustomization.yaml +++ b/manifests/bases/notification-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/notification-controller/releases/download/v0.21.0/notification-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v0.21.0/notification-controller.deployment.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.22.0/notification-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.22.0/notification-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index ac97574a..7136e7f1 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -2,8 +2,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - https://github.com/fluxcd/source-controller/releases/download/v0.21.2/source-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.20.2/kustomize-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.16.0/helm-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v0.21.0/notification-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.21.0/kustomize-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.17.0/helm-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.22.0/notification-controller.crds.yaml - https://github.com/fluxcd/image-reflector-controller/releases/download/v0.16.0/image-reflector-controller.crds.yaml - https://github.com/fluxcd/image-automation-controller/releases/download/v0.20.0/image-automation-controller.crds.yaml From 437a7a2852976c037d34915d325d9fb5288ebd77 Mon Sep 17 00:00:00 2001 From: Andrew Jenkins Date: Tue, 15 Feb 2022 13:17:08 -0700 Subject: [PATCH 034/818] Fix failure in TestTrace/* when timezone isn't UTC MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The TestTrace/Deployment and TestTrace/HelmRelease test cases fail in environments where the timezone isn't UTC, because they compare a local time string to the golden file, which has time in UTC. Here is an example: ``` --- FAIL: TestTrace (0.12s) --- FAIL: TestTrace/Deployment (0.08s) main_test.go:337: Mismatch from golden file 'testdata/trace/deployment.golden': Mismatch from expected value (-want +got):   strings.Join({    ... // 88 identical bytes    " Flux\n---\nHelmRelease: podinfo\nNamespace: podinfo-8\nRevi",    "sion: 6.0.0\nStatus: Last reconciled at 2021-07-16 ", -  "15:42:20 +0000 UTC", +  "09:42:20 -0600 MDT",    "\nMessage: Release reconciliation succeeded\n---\nHelmChart:",    " podinfo-podinfo\nNamespace: flux-system-9\nChart: ",    " podinfo\nVersion: 6.0.0\nRevision: 6.0.0\nStatus: ",    " Last reconciled at 2021-07-16 ", -  "15:32:09 +0000 UTC", +  "09:32:09 -0600 MDT",    "\nMessage: Fetched revision: 6.0.0\n---\nHelmRepository: pod",    "info\nNamespace: flux-system-9\nURL: https://stefa",    "nprodan.github.io/podinfo\nRevision: 8411f23d07d3701f0e96e7",    "d9e503b7936d7e1d56\nStatus: Last reconciled at 2021-07-", -  "1",    "1", -  " 00:25:46 +0000 UTC", +  "0 18:25:46 -0600 MDT",    "\nMessage: Fetched revision: 8411f23d07d3701f0e96e7d9e503b",    "7936d7e1d56\n",   }, "") ``` This commit fixes the issue by converting the golden test times to local time before comparing. The utility function toLocalTime() is added to trace_test.go, and then it is used to provide localized times as template parameters to the golden files. Signed-off-by: Andrew Jenkins --- cmd/flux/testdata/trace/deployment.golden | 6 ++-- cmd/flux/testdata/trace/helmrelease.golden | 4 +-- cmd/flux/trace_test.go | 33 +++++++++++++++++----- 3 files changed, 31 insertions(+), 12 deletions(-) diff --git a/cmd/flux/testdata/trace/deployment.golden b/cmd/flux/testdata/trace/deployment.golden index 8412a50d..d02e8a56 100644 --- a/cmd/flux/testdata/trace/deployment.golden +++ b/cmd/flux/testdata/trace/deployment.golden @@ -6,7 +6,7 @@ Status: Managed by Flux HelmRelease: podinfo Namespace: {{ .ns }} Revision: 6.0.0 -Status: Last reconciled at 2021-07-16 15:42:20 +0000 UTC +Status: Last reconciled at {{ .helmReleaseLastReconcile }} Message: Release reconciliation succeeded --- HelmChart: podinfo-podinfo @@ -14,12 +14,12 @@ Namespace: {{ .fluxns }} Chart: podinfo Version: 6.0.0 Revision: 6.0.0 -Status: Last reconciled at 2021-07-16 15:32:09 +0000 UTC +Status: Last reconciled at {{ .helmChartLastReconcile }} Message: Fetched revision: 6.0.0 --- HelmRepository: podinfo Namespace: {{ .fluxns }} URL: https://stefanprodan.github.io/podinfo Revision: 8411f23d07d3701f0e96e7d9e503b7936d7e1d56 -Status: Last reconciled at 2021-07-11 00:25:46 +0000 UTC +Status: Last reconciled at {{ .helmRepositoryLastReconcile }} Message: Fetched revision: 8411f23d07d3701f0e96e7d9e503b7936d7e1d56 diff --git a/cmd/flux/testdata/trace/helmrelease.golden b/cmd/flux/testdata/trace/helmrelease.golden index 29de7a72..cd775bad 100644 --- a/cmd/flux/testdata/trace/helmrelease.golden +++ b/cmd/flux/testdata/trace/helmrelease.golden @@ -7,7 +7,7 @@ Kustomization: infrastructure Namespace: {{ .fluxns }} Path: ./infrastructure Revision: main/696f056df216eea4f9401adbee0ff744d4df390f -Status: Last reconciled at 2021-08-01 04:52:56 +0000 UTC +Status: Last reconciled at {{ .kustomizationLastReconcile }} Message: Applied revision: main/696f056df216eea4f9401adbee0ff744d4df390f --- GitRepository: flux-system @@ -15,5 +15,5 @@ Namespace: {{ .fluxns }} URL: ssh://git@github.com/example/repo Branch: main Revision: main/696f056df216eea4f9401adbee0ff744d4df390f -Status: Last reconciled at 2021-07-20 00:48:16 +0000 UTC +Status: Last reconciled at {{ .gitRepositoryLastReconcile }} Message: Fetched revision: main/696f056df216eea4f9401adbee0ff744d4df390f diff --git a/cmd/flux/trace_test.go b/cmd/flux/trace_test.go index 052bdbb3..1f3dd889 100644 --- a/cmd/flux/trace_test.go +++ b/cmd/flux/trace_test.go @@ -5,6 +5,7 @@ package main import ( "testing" + "time" ) func TestTraceNoArgs(t *testing.T) { @@ -15,36 +16,54 @@ func TestTraceNoArgs(t *testing.T) { cmd.runTestCmd(t) } +func toLocalTime(t *testing.T, in string) string { + ts, err := time.Parse(time.RFC3339, in) + if err != nil { + t.Fatalf("Error converting golden test time '%s': %v", in, err) + } + return ts.Local().String() +} + func TestTrace(t *testing.T) { cases := []struct { name string args string objectFile string goldenFile string + tmpl map[string]string }{ { "Deployment", "trace podinfo --kind deployment --api-version=apps/v1", "testdata/trace/deployment.yaml", "testdata/trace/deployment.golden", + map[string]string{ + "ns": allocateNamespace("podinfo"), + "fluxns": allocateNamespace("flux-system"), + "helmReleaseLastReconcile": toLocalTime(t, "2021-07-16T15:42:20Z"), + "helmChartLastReconcile": toLocalTime(t, "2021-07-16T15:32:09Z"), + "helmRepositoryLastReconcile": toLocalTime(t, "2021-07-11T00:25:46Z"), + }, }, { "HelmRelease", "trace podinfo --kind HelmRelease --api-version=helm.toolkit.fluxcd.io/v2beta1", "testdata/trace/helmrelease.yaml", "testdata/trace/helmrelease.golden", + map[string]string{ + "ns": allocateNamespace("podinfo"), + "fluxns": allocateNamespace("flux-system"), + "kustomizationLastReconcile": toLocalTime(t, "2021-08-01T04:52:56Z"), + "gitRepositoryLastReconcile": toLocalTime(t, "2021-07-20T00:48:16Z"), + }, }, } for _, tc := range cases { t.Run(tc.name, func(t *testing.T) { - tmpl := map[string]string{ - "ns": allocateNamespace("podinfo"), - "fluxns": allocateNamespace("flux-system"), - } - testEnv.CreateObjectFile(tc.objectFile, tmpl, t) + testEnv.CreateObjectFile(tc.objectFile, tc.tmpl, t) cmd := cmdTestCase{ - args: tc.args + " -n=" + tmpl["ns"], - assert: assertGoldenTemplateFile(tc.goldenFile, tmpl), + args: tc.args + " -n=" + tc.tmpl["ns"], + assert: assertGoldenTemplateFile(tc.goldenFile, tc.tmpl), } cmd.runTestCmd(t) }) From 32ad462ebe7841ad121f17ba20b6dfab0ab1499d Mon Sep 17 00:00:00 2001 From: Soule BA Date: Fri, 18 Feb 2022 16:41:16 +0100 Subject: [PATCH 035/818] Fix stringData Secret issue This commit migrate to the last version of pkg/ssa v0.14.1 that contains a fix for stringData secrets. The test case was changed accordingly to validate a stringData drift. A progress-bar flag option has also been added in order to be able to disable it. Signed-off-by: Soule BA --- cmd/flux/diff_kustomization.go | 13 +- cmd/flux/diff_kustomization_test.go | 22 +- .../build-kustomization/podinfo-result.yaml | 4 +- ...ith-drifted-stringdata-sops-secret.golden} | 6 + .../stringdata-sops-secret.yaml | 2 +- go.mod | 41 +-- go.sum | 243 +++++++++++++----- internal/build/build.go | 41 ++- internal/build/diff.go | 59 ++--- internal/utils/apply.go | 2 +- pkg/status/status.go | 4 +- 11 files changed, 302 insertions(+), 135 deletions(-) rename cmd/flux/testdata/diff-kustomization/{diff-with-stringdata-sops-secret.golden => diff-with-drifted-stringdata-sops-secret.golden} (61%) diff --git a/cmd/flux/diff_kustomization.go b/cmd/flux/diff_kustomization.go index e23c6643..04628ad7 100644 --- a/cmd/flux/diff_kustomization.go +++ b/cmd/flux/diff_kustomization.go @@ -40,13 +40,15 @@ flux diff kustomization my-app --path ./path/to/local/manifests`, } type diffKsFlags struct { - path string + path string + progressBar bool } var diffKsArgs diffKsFlags func init() { diffKsCmd.Flags().StringVar(&diffKsArgs.path, "path", "", "Path to a local directory that matches the specified Kustomization.spec.path.)") + diffKsCmd.Flags().BoolVar(&diffKsArgs.progressBar, "progress-bar", true, "Boolean to set the progress bar. The default value is true.") diffCmd.AddCommand(diffKsCmd) } @@ -64,7 +66,14 @@ func diffKsCmdRun(cmd *cobra.Command, args []string) error { return &RequestError{StatusCode: 2, Err: fmt.Errorf("invalid resource path %q", diffKsArgs.path)} } - builder, err := build.NewBuilder(kubeconfigArgs, name, diffKsArgs.path, build.WithTimeout(rootArgs.timeout)) + var builder *build.Builder + var err error + if diffKsArgs.progressBar { + builder, err = build.NewBuilder(kubeconfigArgs, name, diffKsArgs.path, build.WithTimeout(rootArgs.timeout), build.WithProgressBar()) + } else { + builder, err = build.NewBuilder(kubeconfigArgs, name, diffKsArgs.path, build.WithTimeout(rootArgs.timeout)) + } + if err != nil { return &RequestError{StatusCode: 2, Err: err} } diff --git a/cmd/flux/diff_kustomization_test.go b/cmd/flux/diff_kustomization_test.go index eec3d650..db309ea8 100644 --- a/cmd/flux/diff_kustomization_test.go +++ b/cmd/flux/diff_kustomization_test.go @@ -45,51 +45,51 @@ func TestDiffKustomization(t *testing.T) { }, { name: "diff nothing deployed", - args: "diff kustomization podinfo --path ./testdata/build-kustomization/podinfo", + args: "diff kustomization podinfo --path ./testdata/build-kustomization/podinfo --progress-bar=false", objectFile: "", assert: assertGoldenFile("./testdata/diff-kustomization/nothing-is-deployed.golden"), }, { name: "diff with a deployment object", - args: "diff kustomization podinfo --path ./testdata/build-kustomization/podinfo", + args: "diff kustomization podinfo --path ./testdata/build-kustomization/podinfo --progress-bar=false", objectFile: "./testdata/diff-kustomization/deployment.yaml", assert: assertGoldenFile("./testdata/diff-kustomization/diff-with-deployment.golden"), }, { name: "diff with a drifted service object", - args: "diff kustomization podinfo --path ./testdata/build-kustomization/podinfo", + args: "diff kustomization podinfo --path ./testdata/build-kustomization/podinfo --progress-bar=false", objectFile: "./testdata/diff-kustomization/service.yaml", assert: assertGoldenFile("./testdata/diff-kustomization/diff-with-drifted-service.golden"), }, { name: "diff with a drifted secret object", - args: "diff kustomization podinfo --path ./testdata/build-kustomization/podinfo", + args: "diff kustomization podinfo --path ./testdata/build-kustomization/podinfo --progress-bar=false", objectFile: "./testdata/diff-kustomization/secret.yaml", assert: assertGoldenFile("./testdata/diff-kustomization/diff-with-drifted-secret.golden"), }, { name: "diff with a drifted key in sops secret object", - args: "diff kustomization podinfo --path ./testdata/build-kustomization/podinfo", + args: "diff kustomization podinfo --path ./testdata/build-kustomization/podinfo --progress-bar=false", objectFile: "./testdata/diff-kustomization/key-sops-secret.yaml", assert: assertGoldenFile("./testdata/diff-kustomization/diff-with-drifted-key-sops-secret.golden"), }, { name: "diff with a drifted value in sops secret object", - args: "diff kustomization podinfo --path ./testdata/build-kustomization/podinfo", + args: "diff kustomization podinfo --path ./testdata/build-kustomization/podinfo --progress-bar=false", objectFile: "./testdata/diff-kustomization/value-sops-secret.yaml", assert: assertGoldenFile("./testdata/diff-kustomization/diff-with-drifted-value-sops-secret.golden"), }, { name: "diff with a sops dockerconfigjson secret object", - args: "diff kustomization podinfo --path ./testdata/build-kustomization/podinfo", + args: "diff kustomization podinfo --path ./testdata/build-kustomization/podinfo --progress-bar=false", objectFile: "./testdata/diff-kustomization/dockerconfigjson-sops-secret.yaml", assert: assertGoldenFile("./testdata/diff-kustomization/diff-with-dockerconfigjson-sops-secret.golden"), }, { name: "diff with a sops stringdata secret object", - args: "diff kustomization podinfo --path ./testdata/build-kustomization/podinfo", + args: "diff kustomization podinfo --path ./testdata/build-kustomization/podinfo --progress-bar=false", objectFile: "./testdata/diff-kustomization/stringdata-sops-secret.yaml", - assert: assertGoldenFile("./testdata/diff-kustomization/diff-with-stringdata-sops-secret.golden"), + assert: assertGoldenFile("./testdata/diff-kustomization/diff-with-drifted-stringdata-sops-secret.golden"), }, } @@ -137,5 +137,9 @@ func createObjectFromFile(objectFile string, templateValues map[string]string, t t.Fatalf("Error decoding yaml file '%s': %v", objectFile, err) } + if err := ssa.SetNativeKindsDefaults(clientObjects); err != nil { + t.Fatalf("Error setting native kinds defaults for '%s': %v", objectFile, err) + } + return clientObjects } diff --git a/cmd/flux/testdata/build-kustomization/podinfo-result.yaml b/cmd/flux/testdata/build-kustomization/podinfo-result.yaml index 1fe225fd..e4646dd3 100644 --- a/cmd/flux/testdata/build-kustomization/podinfo-result.yaml +++ b/cmd/flux/testdata/build-kustomization/podinfo-result.yaml @@ -143,8 +143,8 @@ metadata: name: secret-basic-auth-stringdata namespace: default stringData: - password: KipTT1BTKio= - username: KipTT1BTKio= + password: '**SOPS**' + username: '**SOPS**' type: kubernetes.io/basic-auth --- apiVersion: v1 diff --git a/cmd/flux/testdata/diff-kustomization/diff-with-stringdata-sops-secret.golden b/cmd/flux/testdata/diff-kustomization/diff-with-drifted-stringdata-sops-secret.golden similarity index 61% rename from cmd/flux/testdata/diff-kustomization/diff-with-stringdata-sops-secret.golden rename to cmd/flux/testdata/diff-kustomization/diff-with-drifted-stringdata-sops-secret.golden index cf7183c8..6c79b906 100644 --- a/cmd/flux/testdata/diff-kustomization/diff-with-stringdata-sops-secret.golden +++ b/cmd/flux/testdata/diff-kustomization/diff-with-drifted-stringdata-sops-secret.golden @@ -2,5 +2,11 @@ ► HorizontalPodAutoscaler/default/podinfo created ► Service/default/podinfo created ► Secret/default/docker-secret created +► Secret/default/secret-basic-auth-stringdata drifted + +data + - one map entry removed: + one map entry added: + username1: "*****" username: "*****" + ► Secret/default/podinfo-token-77t89m9b67 created ► Secret/default/db-user-pass-bkbd782d2c created diff --git a/cmd/flux/testdata/diff-kustomization/stringdata-sops-secret.yaml b/cmd/flux/testdata/diff-kustomization/stringdata-sops-secret.yaml index c088dd75..8fa3459d 100644 --- a/cmd/flux/testdata/diff-kustomization/stringdata-sops-secret.yaml +++ b/cmd/flux/testdata/diff-kustomization/stringdata-sops-secret.yaml @@ -8,5 +8,5 @@ metadata: namespace: default stringData: password: KipTT1BTKio= - username: KipTT1BTKio= + username1: KipTT1BTKio= type: kubernetes.io/basic-auth diff --git a/go.mod b/go.mod index ab2e38c9..29c52775 100644 --- a/go.mod +++ b/go.mod @@ -12,11 +12,10 @@ require ( github.com/fluxcd/image-reflector-controller/api v0.16.0 github.com/fluxcd/kustomize-controller/api v0.21.0 github.com/fluxcd/notification-controller/api v0.22.0 - github.com/fluxcd/pkg/apis/kustomize v0.3.1 // indirect github.com/fluxcd/pkg/apis/meta v0.10.2 github.com/fluxcd/pkg/kustomize v0.0.2 github.com/fluxcd/pkg/runtime v0.12.4 - github.com/fluxcd/pkg/ssa v0.13.0 + github.com/fluxcd/pkg/ssa v0.14.1 github.com/fluxcd/pkg/ssh v0.3.1 github.com/fluxcd/pkg/untar v0.0.5 github.com/fluxcd/pkg/version v0.0.1 @@ -27,32 +26,31 @@ require ( github.com/google/go-cmp v0.5.6 github.com/google/go-containerregistry v0.2.0 github.com/hashicorp/go-multierror v1.1.1 - github.com/hashicorp/go-retryablehttp v0.7.0 // indirect github.com/homeport/dyff v1.4.6 github.com/lucasb-eyer/go-colorful v1.2.0 github.com/manifoldco/promptui v0.9.0 github.com/mattn/go-shellwords v1.0.12 github.com/olekukonko/tablewriter v0.0.4 - github.com/spf13/cobra v1.2.1 + github.com/spf13/cobra v1.3.0 github.com/spf13/pflag v1.0.5 github.com/theckman/yacspin v0.13.12 golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3 golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 - k8s.io/api v0.23.1 + k8s.io/api v0.23.2 k8s.io/apiextensions-apiserver v0.23.1 - k8s.io/apimachinery v0.23.1 - k8s.io/cli-runtime v0.23.1 - k8s.io/client-go v0.23.1 - k8s.io/kubectl v0.23.1 - sigs.k8s.io/cli-utils v0.27.0 - sigs.k8s.io/controller-runtime v0.11.0 + k8s.io/apimachinery v0.23.2 + k8s.io/cli-runtime v0.23.2 + k8s.io/client-go v0.23.2 + k8s.io/kubectl v0.23.2 + sigs.k8s.io/cli-utils v0.28.0 + sigs.k8s.io/controller-runtime v0.11.1 sigs.k8s.io/kustomize/api v0.11.2 sigs.k8s.io/kustomize/kyaml v0.13.3 sigs.k8s.io/yaml v1.3.0 ) require ( - cloud.google.com/go v0.81.0 // indirect + cloud.google.com/go v0.99.0 // indirect github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect github.com/Azure/go-autorest v14.2.0+incompatible // indirect github.com/Azure/go-autorest/autorest v0.11.18 // indirect @@ -68,7 +66,7 @@ require ( github.com/acomagu/bufpipe v1.0.3 // indirect github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5 // indirect github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e // indirect - github.com/cpuguy83/go-md2man/v2 v2.0.0 // indirect + github.com/cpuguy83/go-md2man/v2 v2.0.1 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/drone/envsubst/v2 v2.0.0-20210730161058-179042472c46 // indirect github.com/emirpasic/gods v1.12.0 // indirect @@ -76,6 +74,7 @@ require ( github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d // indirect github.com/fatih/color v1.13.0 // indirect github.com/fluxcd/pkg/apis/acl v0.0.3 // indirect + github.com/fluxcd/pkg/apis/kustomize v0.3.1 // indirect github.com/form3tech-oss/jwt-go v3.2.3+incompatible // indirect github.com/fvbommel/sortorder v1.0.1 // indirect github.com/go-errors/errors v1.0.1 // indirect @@ -100,7 +99,8 @@ require ( github.com/googleapis/gnostic v0.5.5 // indirect github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 // indirect github.com/hashicorp/errwrap v1.0.0 // indirect - github.com/hashicorp/go-cleanhttp v0.5.1 // indirect + github.com/hashicorp/go-cleanhttp v0.5.2 // indirect + github.com/hashicorp/go-retryablehttp v0.7.0 // indirect github.com/imdario/mergo v0.3.12 // indirect github.com/inconshreveable/mousetrap v1.0.0 // indirect github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect @@ -125,11 +125,12 @@ require ( github.com/peterbourgon/diskv v2.0.1+incompatible // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/prometheus/common v0.32.1 // indirect + github.com/prometheus/procfs v0.7.3 // indirect github.com/rivo/uniseg v0.2.0 // indirect github.com/russross/blackfriday v1.5.2 // indirect - github.com/russross/blackfriday/v2 v2.0.1 // indirect + github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/sergi/go-diff v1.2.0 // indirect - github.com/shurcooL/sanitized_anchor_name v1.0.0 // indirect github.com/stretchr/testify v1.7.0 // indirect github.com/texttheater/golang-levenshtein v1.0.1 // indirect github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74 // indirect @@ -138,9 +139,9 @@ require ( github.com/xlab/treeprint v0.0.0-20181112141820-a009c3971eca // indirect go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 // indirect golang.org/x/net v0.0.0-20211216030914-fe4d6282115f // indirect - golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f // indirect + golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 // indirect golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect - golang.org/x/sys v0.0.0-20211029165221-6e7872819dc8 // indirect + golang.org/x/sys v0.0.0-20220114195835-da31bd327af9 // indirect golang.org/x/text v0.3.7 // indirect golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac // indirect google.golang.org/appengine v1.6.7 // indirect @@ -149,12 +150,12 @@ require ( gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect - k8s.io/component-base v0.23.1 // indirect + k8s.io/component-base v0.23.2 // indirect k8s.io/klog/v2 v2.30.0 // indirect k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65 // indirect k8s.io/utils v0.0.0-20211208161948-7d6a63dca704 // indirect sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2 // indirect - sigs.k8s.io/structured-merge-diff/v4 v4.2.0 // indirect + sigs.k8s.io/structured-merge-diff/v4 v4.2.1 // indirect ) // Fix for CVE-2020-29652: https://github.com/golang/crypto/commit/8b5274cf687fd9316b4108863654cc57385531e8 diff --git a/go.sum b/go.sum index 9b449748..287d64b5 100644 --- a/go.sum +++ b/go.sum @@ -17,8 +17,17 @@ cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKP cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= -cloud.google.com/go v0.81.0 h1:at8Tk2zUz63cLPR0JPWm5vp77pEZmzxEQBEfRKn1VV8= cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= +cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= +cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= +cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= +cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= +cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= +cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= +cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= +cloud.google.com/go v0.98.0/go.mod h1:ua6Ush4NALrHk5QXDWnjvZHN93OuF0HfuEPq9I1X0cM= +cloud.google.com/go v0.99.0 h1:y/cM2iqGgGi5D5DQZl6D9STN/3dR/Vx5Mp8s752oJTY= +cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= @@ -28,6 +37,7 @@ cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM7 cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= +cloud.google.com/go/firestore v1.6.1/go.mod h1:asNXNOzBdyVQmEU+ggO8UPodTkEVFW5Qx+rwHnAz+EY= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= @@ -81,6 +91,7 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03 github.com/BurntSushi/toml v0.4.1 h1:GaI7EiDXDRfa8VshkTj7Fym7ha+y8/XxIgD2okUIjLw= github.com/BurntSushi/toml v0.4.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/GoogleCloudPlatform/k8s-cloud-provider v0.0.0-20190822182118-27a4ced34534/go.mod h1:iroGtC8B3tQiqtds1l+mgk/BBOrxbqjH+eUfFQYRc14= github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd h1:sjQovDkwrZp8u+gxLtPgKGjk5hCxuy2hrRejBTA9xFU= github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd/go.mod h1:64YHyfSL2R96J44Nlwm39UHepQbyR5q10x7iYa1ks2E= @@ -115,7 +126,9 @@ github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20210826220005-b48c857c3a0e/go.m github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= +github.com/armon/go-metrics v0.3.10/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= @@ -133,12 +146,14 @@ github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqO github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/certifi/gocertifi v0.0.0-20191021191039-0944d244cd40/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= github.com/certifi/gocertifi v0.0.0-20200922220541-2c3bb06c6054/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= +github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5 h1:7aWHqerlJ41y6FOsEUvknqgXnGmJyJSbjhAWq5pO4F8= github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5/go.mod h1:/iP1qXHoty45bqomnu2LM+VVyAEdWN+vtSHGlQgyxbw= github.com/chzyer/logex v1.1.10 h1:Swpa1K6QvQznwJRcfTfQJmTE72DqScAa40E+fbHEXEE= @@ -147,11 +162,19 @@ github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e h1:fY5BOSpyZCqRo5O github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1 h1:q763qf9huN11kDQavWsoZXJNW3xEE4JJyHa5Q25/sd8= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= +github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211130200136-a8f946100490/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/cockroachdb/datadriven v0.0.0-20200714090401-bf6692d28da5/go.mod h1:h6jFvWxBdQXxjopDMZyH2UVceIRfR84bdzbkoKrsWNo= github.com/cockroachdb/errors v1.2.4/go.mod h1:rQD95gz6FARkaKkQXUksEje/d9a6wBJoCr5oaCLELYA= @@ -169,8 +192,9 @@ github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSV github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180108230652-97fdf19511ea/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/cpuguy83/go-md2man/v2 v2.0.0 h1:EoUDS0afbrsXAZ9YQ9jdu/mZ2sXgT1/2yyNng4PGlyM= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cpuguy83/go-md2man/v2 v2.0.1 h1:r/myEWzV9lfsM1tFLgDyu0atFtJ1fXn261LKYj/3DxU= +github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.11 h1:07n33Z8lZxZ2qwegKbObQohDhXDQxiMMz1NOUGYlesw= @@ -211,7 +235,10 @@ github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5y github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= +github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= +github.com/envoyproxy/go-control-plane v0.10.1/go.mod h1:AY7fTTXNdv/aJ2O5jwpxAPOWUZ7hQAEvzN5Pf27BkQQ= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/envoyproxy/protoc-gen-validate v0.6.2/go.mod h1:2t7qjJNvHPx8IjnBOzl9E9/baC+qXE/TeeyBRzgJDws= github.com/evanphx/json-patch v0.0.0-20200808040245-162e5629780b/go.mod h1:NAJj0yf/KaRKURN6nyi7A9IZydMivZEm9oQLWNjfKDc= github.com/evanphx/json-patch v0.5.2/go.mod h1:ZWS5hhDbVDyob71nXKNL0+PWn6ToqBHMikGIFbs31qQ= github.com/evanphx/json-patch v4.11.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= @@ -221,6 +248,7 @@ github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d h1:105gxyaGwC github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d/go.mod h1:ZZMPRZwes7CROmyNKgQzC3XPs6L/G2EJLHddWejkmf4= github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= @@ -247,8 +275,8 @@ github.com/fluxcd/pkg/kustomize v0.0.2/go.mod h1:AFwnf3OqQmpTCuwCARTGpPRMBf0ZFJN github.com/fluxcd/pkg/runtime v0.12.3/go.mod h1:imJ2xYy/d4PbSinX2IefmZk+iS2c1P5fY0js8mCE4SM= github.com/fluxcd/pkg/runtime v0.12.4 h1:gA27RG/+adN2/7Qe03PB46Iwmye/MusPCpuS4zQ2fW0= github.com/fluxcd/pkg/runtime v0.12.4/go.mod h1:gspNvhAqodZgSmK1ZhMtvARBf/NGAlxmaZaIOHkJYsc= -github.com/fluxcd/pkg/ssa v0.13.0 h1:LU4wf7dB9ksYdda0BEWNTBSTd68E5YwWxuPiPLAtw4Y= -github.com/fluxcd/pkg/ssa v0.13.0/go.mod h1:XGVGjUaG152HGN6sSUj+VFK/Th5i5rj2XsXSDdlIMNU= +github.com/fluxcd/pkg/ssa v0.14.1 h1:AZxM1VJusAV0r0GgtR43Z8NUI2luV68C/7I0/g28D6c= +github.com/fluxcd/pkg/ssa v0.14.1/go.mod h1:9HfCfy4COdRt/Ck4T4BPPc3i8MgFZFRlY+Bcm+8vMCw= github.com/fluxcd/pkg/ssh v0.3.1 h1:iQw07bkX2rScactX8WYv+uMDsufFOlg8M3fV2TNs244= github.com/fluxcd/pkg/ssh v0.3.1/go.mod h1:Sebfv4Um51PvomuYdMvKRncQW5dtKhZ5J5TA+wiHNSQ= github.com/fluxcd/pkg/untar v0.0.5 h1:UGI3Ch1UIEIaqQvMicmImL1s9npQa64DJ/ozqHKB7gk= @@ -296,11 +324,9 @@ github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= -github.com/go-logr/logr v0.4.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.2 h1:ahHml/yUpnlb96Rp8HCvtYVPY8ZYpxq3g7UYchIYwbs= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/zapr v0.4.0/go.mod h1:tabnROwaDl0UNxkVeFRbY8bwB37GwRv0P8lg6aAiEnk= github.com/go-logr/zapr v1.2.0/go.mod h1:Qa4Bsj2Vb+FAVeAKsLD8RLQ+YRJB8YDmOAKxaBQf7Ro= github.com/go-logr/zapr v1.2.2 h1:5YNlIL6oZLydaV4dOFjL8YpgXF/tPeTbnpatnu3cq6o= github.com/go-logr/zapr v1.2.2/go.mod h1:eIauM6P8qSvTw5o2ez6UEAfGjQKrxQTl5EoK+Qa2oG4= @@ -348,6 +374,7 @@ github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= +github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.0.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -368,6 +395,7 @@ github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaS github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golangplus/testing v0.0.0-20180327235837-af21d9c3145e/go.mod h1:0AA//k/eakGydO4jKRoRL2j92ZKSzTgj9tclaCrvXHk= github.com/gonvenience/bunt v1.1.3/go.mod h1:hZ898ZprNWgaVlq4s1ivsJu3AY+3wrlJadF5Gp7Yq2c= github.com/gonvenience/bunt v1.3.1/go.mod h1:G+d3dJBxxOqV2oca96psgAnPABVC9QptEifjVqPu+mo= @@ -418,6 +446,7 @@ github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/ github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= @@ -429,6 +458,9 @@ github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= @@ -439,6 +471,8 @@ github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= +github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/googleapis/gnostic v0.1.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/googleapis/gnostic v0.2.2/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= @@ -464,22 +498,32 @@ github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t 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/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= +github.com/hashicorp/consul/api v1.11.0/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-cleanhttp v0.5.1 h1:dH3aiDG9Jvb5r5+bYHsikaOUIpcM0xvgMXVoDkXMzJM= +github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-hclog v0.9.2 h1:CG6TE5H9/JXsFWJCfoIVpKFIkFe6ysEuHirp4DxCsHI= +github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= +github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= +github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-hclog v1.0.0 h1:bkKf0BeBXcSYa7f5Fyi9gMuQ8gNsxeiNpZjR6VxNZeo= +github.com/hashicorp/go-hclog v1.0.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= github.com/hashicorp/go-retryablehttp v0.6.8/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= github.com/hashicorp/go-retryablehttp v0.7.0 h1:eu1EI/mbirUgP5C8hVsTNaGZreBDlYiwC1FZWkvQPQ4= github.com/hashicorp/go-retryablehttp v0.7.0/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= +github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= @@ -488,14 +532,22 @@ github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.3/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= +github.com/hashicorp/mdns v1.0.1/go.mod h1:4gW7WsVCke5TE7EPeYliwHlRUyBtfCwuFwuMg2DmyNY= +github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc= github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= +github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= +github.com/hashicorp/memberlist v0.3.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= +github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= +github.com/hashicorp/serf v0.9.6/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= github.com/homeport/dyff v1.4.6 h1:ReC8Hi1I6SkmPmNOqGl9EUlZctx+6AloCzSulqwHge8= github.com/homeport/dyff v1.4.6/go.mod h1:DBCaTwJUIQLNQxNOKTce/OgRxCwwa8erBdN88bBfb9Y= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= 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= @@ -519,6 +571,7 @@ github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBv github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= @@ -556,6 +609,7 @@ github.com/lithammer/dedent v1.1.0/go.mod h1:jrXYCQtgg0nJiN+StA2KgR7w6CiQNv9Fd/Z github.com/lucasb-eyer/go-colorful v1.0.3/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= +github.com/lyft/protoc-gen-star v0.5.3/go.mod h1:V0xaHgaf5oCCqmcxYcWiDfTiKsZsRc87/1qhoTACD8w= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= @@ -572,12 +626,16 @@ github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlW github.com/mattn/go-ciede2000 v0.0.0-20170301095244-782e8c62fec3 h1:BXxTozrOU8zgC5dkpn3J6NTRdoP+hjok/e+ACr4Hibk= github.com/mattn/go-ciede2000 v0.0.0-20170301095244-782e8c62fec3/go.mod h1:x1uk6vxTiVuNt6S5R2UYgdhpj3oKojXvOXauHZ7dEnI= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= +github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= @@ -592,7 +650,10 @@ github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182aff github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/maxbrunsfeld/counterfeiter/v6 v6.2.2/go.mod h1:eD9eIE7cdwcMi9rYluz88Jz2VyhSmden33/aXg4oVIY= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= +github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= +github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= @@ -610,6 +671,7 @@ github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:F github.com/mitchellh/mapstructure v0.0.0-20180220230111-00c29f56e238/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/moby/spdystream v0.2.0 h1:cjW1zVyyoiM0T7b6UoySUFqzXMoqRckQtXwGPiBhOM8= github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= github.com/moby/term v0.0.0-20210610120745-9d4ed1856297 h1:yH0SvLzcbZxcJXho2yh7CqdENGMQe73Cw3woZBpPli0= @@ -663,7 +725,6 @@ github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDs github.com/onsi/gomega v1.10.5/go.mod h1:gza4q3jKQJijlu05nKWRCW/GavJumGt8aNRxWg7mt48= github.com/onsi/gomega v1.11.0/go.mod h1:azGKhqFUon9Vuj0YmTfLSmx0FUwqXYSTl5re8lQLTUg= github.com/onsi/gomega v1.12.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je41yGY= -github.com/onsi/gomega v1.15.0/go.mod h1:cIuvLEne0aoVhAgh/O6ac0Op8WWw9H6eYCriF+tEHG0= github.com/onsi/gomega v1.16.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= github.com/onsi/gomega v1.17.0 h1:9Luw4uT5HTjHTN8+aNcSThgH1vdXnmdJ8xIfZ4wyTRE= github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= @@ -672,8 +733,10 @@ github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3I github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= +github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -685,13 +748,16 @@ github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77 github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.11.0 h1:HNkLOAEQMIDv/K+04rukrLx6ch7msSRwf3/SASFAGtQ= github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= +github.com/prometheus/client_golang v1.12.1 h1:ZiaPsmm9uiBeaSMRznKsCDNtPCS0T3JVDGF+06gjBzk= +github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= @@ -700,16 +766,20 @@ github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6T github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.28.0 h1:vGVfV9KrDTvWt5boZO0I19g2E3CsWfpPPKZM9dt3mEw= github.com/prometheus/common v0.28.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.32.1 h1:hWIdL3N2HoUx3B8j3YN9mWor0qhY/NlEKZEaXxuIRh4= +github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3xv4= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= +github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446/go.mod h1:uYEyJGbgTkfkS4+E/PavXkNJcbFIpEtjt2B0KDQ5+9M= github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= @@ -720,16 +790,17 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rubiojr/go-vhd v0.0.0-20160810183302-0bfd3b39853c/go.mod h1:DM5xW0nvfNNm2uytzsvhI3OnX8uzaRAg8UX/CnDqbto= github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= -github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/sagikazarmark/crypt v0.3.0/go.mod h1:uD/D+6UF4SrIR1uGEv7bBNkNqLGqUr43MRiaGWX1Nig= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/sclevine/spec v1.2.0/go.mod h1:W4J29eT/Kzv7/b9IWLB055Z+qvVC9vt0Arko24q7p+U= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= -github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= @@ -744,14 +815,17 @@ github.com/soheilhy/cmux v0.1.5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= +github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo= -github.com/spf13/cobra v1.2.1 h1:+KmjbUw1hriSNMF55oPrkZcb27aECyrj8V2ytv7kWDw= github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= +github.com/spf13/cobra v1.3.0 h1:R7cSvGu+Vv+qX0gW5R/85dx2kmmJT5z5NM8ifdYjdn0= +github.com/spf13/cobra v1.3.0/go.mod h1:BrRVncBjOJa/eUcVVm9CE+oC6as8k+VYr4NY7WCi9V4= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= @@ -762,6 +836,7 @@ github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= +github.com/spf13/viper v1.10.0/go.mod h1:SoyBPwAtKDzypXNDFKN5kzH7ppppbGZtls1UpIy5AsM= github.com/spyzhov/ajson v0.4.2/go.mod h1:63V+CGM6f1Bu/p4nLIN8885ojBdt88TbLoSFzyqMuVA= github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -784,6 +859,7 @@ github.com/theckman/yacspin v0.13.12/go.mod h1:Rd2+oG2LmQi5f3zC3yeZAOl245z8QOvrH github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/vdemeester/k8s-pkg-credentialprovider v1.18.1-0.20201019120933-f1d16962a4db/go.mod h1:grWy0bkr1XO6hqbaaCKaPXqkBVlMGHYG6PGykktwbJc= @@ -809,8 +885,11 @@ go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= +go.etcd.io/etcd/api/v3 v3.5.1/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= +go.etcd.io/etcd/client/pkg/v3 v3.5.1/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= +go.etcd.io/etcd/client/v2 v2.305.1/go.mod h1:pMEacxZW7o8pg4CrFE7pquyCJJzZvkvdD2RibOCCCGs= go.etcd.io/etcd/client/v3 v3.5.0/go.mod h1:AIKXXVX/DQXtfTEqBryiLTUXwON+GuvO6Z7lLS/oTh0= go.etcd.io/etcd/pkg/v3 v3.5.0/go.mod h1:UzJGatBQ1lXChBkQF0AuAtkRQMYnHubxAEYIrC3MSsE= go.etcd.io/etcd/raft/v3 v3.5.0/go.mod h1:UFOHSIvO/nKwd4lhkwabrTD3cqW5yVyYYf/KlD00Szc= @@ -890,6 +969,7 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 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.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -912,6 +992,7 @@ golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -939,10 +1020,12 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210326060303-6b1517762897/go.mod h1:uSPa2vr4CLtc/ILN5odXGNXS6mhrKVzTaCXzk9m6W3k= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= -golang.org/x/net v0.0.0-20210520170846-37e1c6afe023/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210825183410-e898025ed96a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210917163549-3c21e5b27794/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= @@ -965,8 +1048,12 @@ golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f h1:Qmd2pbz05z7z6lm0DrgQVVPuBm92jqujBKMHMOlOQEw= +golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 h1:RerP+noqYHUQ8CMRcPlC2nvTa4dcBIjegkuWdcUDuqg= +golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= 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= @@ -1005,9 +1092,11 @@ golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191002063906-3421d5a6bb1c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1017,6 +1106,7 @@ golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1042,6 +1132,7 @@ golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1051,20 +1142,28 @@ golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210502180810-71e4cd670f79/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210817190340-bfb29a6856f2/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210917161153-d61c044b1678/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211029165221-6e7872819dc8 h1:M69LAlWZCshgp0QSzyDcSsSIejIEeuaCVpmwcKwyLMk= +golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211029165221-6e7872819dc8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211205182925-97ca703d548d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220114195835-da31bd327af9 h1:XfKQ4OlFl8okEOr5UvAqFRVj8pY/4yfcXrddB8qAbU0= +golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20210916214954-140adaaadfaf/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY= @@ -1109,6 +1208,7 @@ golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgw golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190706070813-72ffa07ba3db/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -1150,7 +1250,10 @@ golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +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.6-0.20210820212750-d4cc65f0b2ff/go.mod h1:YD9qOF0M9xpSpdWTBbzEl5e/RnCefISl8E5Noe10jFM= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1186,6 +1289,17 @@ google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjR google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= google.golang.org/api v0.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8= +google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= +google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= +google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= +google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= +google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= +google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= +google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= +google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= +google.golang.org/api v0.59.0/go.mod h1:sT2boj7M9YJxZzgeZqXogmhfmRWDtPzT31xkieUbuZU= +google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= +google.golang.org/api v0.62.0/go.mod h1:dKmwPCydfsad4qCH08MSdgWjfHOyfpd4VtDGgRFdavw= google.golang.org/appengine v1.0.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1240,8 +1354,29 @@ google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= +google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= +google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211008145708-270636b82663/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211028162531-8db9c33dc351/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211129164237-f09f9a12af12/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211203200212-54befc351ae9/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -1264,8 +1399,14 @@ google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAG google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +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= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -1295,6 +1436,7 @@ gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= @@ -1330,49 +1472,43 @@ honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= k8s.io/api v0.18.8/go.mod h1:d/CXqwWv+Z2XEG1LgceeDmHQwpUJhROPx16SlxJgERY= -k8s.io/api v0.22.2/go.mod h1:y3ydYpLJAaDI+BbSe2xmGcqxiWHmWjkEeIbiwHvnPR8= k8s.io/api v0.23.0/go.mod h1:8wmDdLBHBNxtOIytwLstXt5E9PddnZb0GaMcqsvDBpg= -k8s.io/api v0.23.1 h1:ncu/qfBfUoClqwkTGbeRqqOqBCRoUAflMuOaOD7J0c8= k8s.io/api v0.23.1/go.mod h1:WfXnOnwSqNtG62Y1CdjoMxh7r7u9QXGCkA1u0na2jgo= -k8s.io/apiextensions-apiserver v0.22.2/go.mod h1:2E0Ve/isxNl7tWLSUDgi6+cmwHi5fQRdwGVCxbC+KFA= +k8s.io/api v0.23.2 h1:62cpzreV3dCuj0hqPi8r4dyWh48ogMcyh+ga9jEGij4= +k8s.io/api v0.23.2/go.mod h1:sYuDb3flCtRPI8ghn6qFrcK5ZBu2mhbElxRE95qpwlI= k8s.io/apiextensions-apiserver v0.23.0/go.mod h1:xIFAEEDlAZgpVBl/1VSjGDmLoXAWRG40+GsWhKhAxY4= k8s.io/apiextensions-apiserver v0.23.1 h1:xxE0q1vLOVZiWORu1KwNRQFsGWtImueOrqSl13sS5EU= k8s.io/apiextensions-apiserver v0.23.1/go.mod h1:0qz4fPaHHsVhRApbtk3MGXNn2Q9M/cVWWhfHdY2SxiM= k8s.io/apimachinery v0.18.8/go.mod h1:6sQd+iHEqmOtALqOFjSWp2KZ9F0wlU/nWm0ZgsYWMig= -k8s.io/apimachinery v0.22.2/go.mod h1:O3oNtNadZdeOMxHFVxOreoznohCpy0z6mocxbZr7oJ0= k8s.io/apimachinery v0.23.0/go.mod h1:fFCTTBKvKcwTPFzjlcxp91uPFZr+JA0FubU4fLzzFYc= -k8s.io/apimachinery v0.23.1 h1:sfBjlDFwj2onG0Ijx5C+SrAoeUscPrmghm7wHP+uXlo= k8s.io/apimachinery v0.23.1/go.mod h1:SADt2Kl8/sttJ62RRsi9MIV4o8f5S3coArm0Iu3fBno= +k8s.io/apimachinery v0.23.2 h1:dBmjCOeYBdg2ibcQxMuUq+OopZ9fjfLIR5taP/XKeTs= +k8s.io/apimachinery v0.23.2/go.mod h1:zDqeV0AK62LbCI0CI7KbWCAYdLg+E+8UXJ0rIz5gmS8= k8s.io/apiserver v0.18.8/go.mod h1:12u5FuGql8Cc497ORNj79rhPdiXQC4bf53X/skR/1YM= -k8s.io/apiserver v0.22.2/go.mod h1:vrpMmbyjWrgdyOvZTSpsusQq5iigKNWv9o9KlDAbBHI= k8s.io/apiserver v0.23.0/go.mod h1:Cec35u/9zAepDPPFyT+UMrgqOCjgJ5qtfVJDxjZYmt4= k8s.io/apiserver v0.23.1/go.mod h1:Bqt0gWbeM2NefS8CjWswwd2VNAKN6lUKR85Ft4gippY= -k8s.io/cli-runtime v0.22.2/go.mod h1:tkm2YeORFpbgQHEK/igqttvPTRIHFRz5kATlw53zlMI= -k8s.io/cli-runtime v0.23.0/go.mod h1:B5N3YH0KP1iKr6gEuJ/RRmGjO0mJQ/f/JrsmEiPQAlU= -k8s.io/cli-runtime v0.23.1 h1:vHUZrq1Oejs0WaJnxs09mLHKScvIIl2hMSthhS8o8Yo= -k8s.io/cli-runtime v0.23.1/go.mod h1:r9r8H/qfXo9w+69vwUL7LokKlLRKW5D6A8vUKCx+YL0= +k8s.io/cli-runtime v0.23.2 h1:4zOZX78mFSakwe4gef81XDBu94Yu0th6bfveTOx8ZQk= +k8s.io/cli-runtime v0.23.2/go.mod h1:Ag70akCDvwux4HxY+nH2J3UqE2e6iwSSdG1HE6p1VTU= k8s.io/client-go v0.18.8/go.mod h1:HqFqMllQ5NnQJNwjro9k5zMyfhZlOwpuTLVrxjkYSxU= -k8s.io/client-go v0.22.2/go.mod h1:sAlhrkVDf50ZHx6z4K0S40wISNTarf1r800F+RlCF6U= k8s.io/client-go v0.23.0/go.mod h1:hrDnpnK1mSr65lHHcUuIZIXDgEbzc7/683c6hyG4jTA= -k8s.io/client-go v0.23.1 h1:Ma4Fhf/p07Nmj9yAB1H7UwbFHEBrSPg8lviR24U2GiQ= k8s.io/client-go v0.23.1/go.mod h1:6QSI8fEuqD4zgFK0xbdwfB/PthBsIxCJMa3s17WlcO0= +k8s.io/client-go v0.23.2 h1:BNbOcxa99jxHH8mM1cPKGIrrKRnCSAfAtyonYGsbFtE= +k8s.io/client-go v0.23.2/go.mod h1:k3YbsWg6GWdHF1THHTQP88X9RhB1DWPo3Dq7KfU/D1c= k8s.io/cloud-provider v0.18.8/go.mod h1:cn9AlzMPVIXA4HHLVbgGUigaQlZyHSZ7WAwDEFNrQSs= k8s.io/code-generator v0.17.2/go.mod h1:DVmfPQgxQENqDIzVR2ddLXMH34qeszkKSdH/N+s+38s= -k8s.io/code-generator v0.22.2/go.mod h1:eV77Y09IopzeXOJzndrDyCI88UBok2h6WxAlBwpxa+o= k8s.io/code-generator v0.23.0/go.mod h1:vQvOhDXhuzqiVfM/YHp+dmg10WDZCchJVObc9MvowsE= k8s.io/code-generator v0.23.1/go.mod h1:V7yn6VNTCWW8GqodYCESVo95fuiEg713S8B7WacWZDA= +k8s.io/code-generator v0.23.2/go.mod h1:S0Q1JVA+kSzTI1oUvbKAxZY/DYbA/ZUb4Uknog12ETk= k8s.io/component-base v0.18.8/go.mod h1:00frPRDas29rx58pPCxNkhUfPbwajlyyvu8ruNgSErU= -k8s.io/component-base v0.22.2/go.mod h1:5Br2QhI9OTe79p+TzPe9JKNQYvEKbq9rTJDWllunGug= k8s.io/component-base v0.23.0/go.mod h1:DHH5uiFvLC1edCpvcTDV++NKULdYYU6pR9Tt3HIKMKI= -k8s.io/component-base v0.23.1 h1:j/BqdZUWeWKCy2v/jcgnOJAzpRYWSbGcjGVYICko8Uc= k8s.io/component-base v0.23.1/go.mod h1:6llmap8QtJIXGDd4uIWJhAq0Op8AtQo6bDW2RrNMTeo= -k8s.io/component-helpers v0.22.2/go.mod h1:+N61JAR9aKYSWbnLA88YcFr9K/6ISYvRNybX7QW7Rs8= -k8s.io/component-helpers v0.23.1/go.mod h1:ZK24U+2oXnBPcas2KolLigVVN9g5zOzaHLkHiQMFGr0= +k8s.io/component-base v0.23.2 h1:dAYmUhWIBWO762etTjBEEKtYYHi5CoQInSLtK6LM1Zs= +k8s.io/component-base v0.23.2/go.mod h1:wS9Z03MO3oJ0RU8bB/dbXTiluGju+SC/F5i660gxB8c= +k8s.io/component-helpers v0.23.2/go.mod h1:J6CMwiaf0izLoNwiLl2OymB4+rGTsTpWp6PL/AqOM4U= k8s.io/csi-translation-lib v0.18.8/go.mod h1:6cA6Btlzxy9s3QrS4BCZzQqclIWnTLr6Jx3H2ctAzY4= 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= -k8s.io/gengo v0.0.0-20201214224949-b6c5ce23f027/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= @@ -1380,8 +1516,6 @@ k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8= k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= -k8s.io/klog/v2 v2.9.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec= -k8s.io/klog/v2 v2.10.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec= k8s.io/klog/v2 v2.30.0 h1:bUO6drIvCIsvZ/XFgfxoGFQU/a4Qkh0iAlvUR7vlHJw= k8s.io/klog/v2 v2.30.0/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E= @@ -1389,16 +1523,12 @@ k8s.io/kube-openapi v0.0.0-20200410145947-61e04a5be9a6/go.mod h1:GRQhZsXIAJ1xR0C k8s.io/kube-openapi v0.0.0-20210421082810-95288971da7e/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw= k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65 h1:E3J9oCLlaobFUqsjG9DfKbP2BmgwBL2p7pn0A3dG9W4= k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65/go.mod h1:sX9MT8g7NVZM5lVL/j8QyCCJe8YSMW30QvGZWaCIDIk= -k8s.io/kubectl v0.22.2/go.mod h1:BApg2j0edxLArCOfO0ievI27EeTQqBDMNU9VQH734iQ= -k8s.io/kubectl v0.23.1 h1:gmscOiV4Y4XIRIn14gQBBADoyyVrDZPbxRCTDga4RSA= -k8s.io/kubectl v0.23.1/go.mod h1:Ui7dJKdUludF8yWAOSN7JZEkOuYixX5yF6E6NjoukKE= +k8s.io/kubectl v0.23.2 h1:YakGzFN1csIOW/Us5VsLxjcu5Q6Vh5rqcvukcNuBwFk= +k8s.io/kubectl v0.23.2/go.mod h1:zWm5wt8PdRmHiVhE9a7q7XYW4WFX9StkZGnC18+1v3M= k8s.io/legacy-cloud-providers v0.18.8/go.mod h1:tgp4xYf6lvjrWnjQwTOPvWQE9IVqSBGPF4on0IyICQE= -k8s.io/metrics v0.22.2/go.mod h1:GUcsBtpsqQD1tKFS/2wCKu4ZBowwRncLOJH1rgWs3uw= -k8s.io/metrics v0.23.1/go.mod h1:qXvsM1KANrc+ZZeFwj6Phvf0NLiC+d3RwcsLcdGc+xs= +k8s.io/metrics v0.23.2/go.mod h1:idJHc+lLK5teHUC6Z2+d6qTKA12d5FLDxmC/DHiUYKc= k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20210819203725-bdf08cb9a70a/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20210820185131-d34e5cb4466e/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20210930125809-cb0fa318a74b/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20211208161948-7d6a63dca704 h1:ZKMMxTvduyf5WUtREOqg5LiXaN1KO/+0oOQPRFrClpo= k8s.io/utils v0.0.0-20211208161948-7d6a63dca704/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= @@ -1411,26 +1541,20 @@ rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8 rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.7/go.mod h1:PHgbrJT7lCHcxMU+mDHEm+nx46H4zuuHZkDP6icnhu0= -sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.22/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.25/go.mod h1:Mlj9PNLmG9bZ6BHFwFKDo5afkpWyUISkb9Me0GnK66I= -sigs.k8s.io/cli-utils v0.27.0 h1:BxI7lPNn0fBZa5g4UwR+ShJyL4CCxELA6tLHbr2YrpU= -sigs.k8s.io/cli-utils v0.27.0/go.mod h1:8ll2fyx+bzjbwmwUnKBQU+2LDbMDsxy44DiDZ+drALg= -sigs.k8s.io/controller-runtime v0.10.1/go.mod h1:CQp8eyUQZ/Q7PJvnIrB6/hgfTC1kBkGylwsLgOQi1WY= -sigs.k8s.io/controller-runtime v0.11.0 h1:DqO+c8mywcZLFJWILq4iktoECTyn30Bkj0CwgqMpZWQ= +sigs.k8s.io/cli-utils v0.28.0 h1:gsvwqygoXlW2y8CmKdflQJNZp1Yhi4geATW3/Ei7oYc= +sigs.k8s.io/cli-utils v0.28.0/go.mod h1:WDVRa5/eQBKntG++uyKdyT+xU7MLdCR4XsgseqL5uX4= sigs.k8s.io/controller-runtime v0.11.0/go.mod h1:KKwLiTooNGu+JmLZGn9Sl3Gjmfj66eMbCQznLP5zcqA= +sigs.k8s.io/controller-runtime v0.11.1 h1:7YIHT2QnHJArj/dk9aUkYhfqfK5cIxPOX5gPECfdZLU= +sigs.k8s.io/controller-runtime v0.11.1/go.mod h1:KKwLiTooNGu+JmLZGn9Sl3Gjmfj66eMbCQznLP5zcqA= sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6/go.mod h1:p4QtZmO4uMYipTQNzagwnNoseA6OxSUutVw05NhYDRs= sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2 h1:kDi4JBNAsJWfz1aEXhO8Jg87JJaPNLh5tIzYHgStQ9Y= sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2/go.mod h1:B+TnT182UBxE84DiCz4CVE26eOSDAeYCpfDnC2kdKMY= -sigs.k8s.io/kustomize/api v0.8.11/go.mod h1:a77Ls36JdfCWojpUqR6m60pdGY1AYFix4AH83nJtY1g= sigs.k8s.io/kustomize/api v0.10.1/go.mod h1:2FigT1QN6xKdcnGS2Ppp1uIWrtWN28Ms8A3OZUZhwr8= sigs.k8s.io/kustomize/api v0.11.2 h1:6YvCJHFDwsLwAX7zNHBxMZi3k7dGIXI8G9l0saYQI0E= sigs.k8s.io/kustomize/api v0.11.2/go.mod h1:GZuhith5YcqxIDe0GnRJNx5xxPTjlwaLTt/e+ChUtJA= -sigs.k8s.io/kustomize/cmd/config v0.9.13/go.mod h1:7547FLF8W/lTaDf0BDqFTbZxM9zqwEJqCKN9sSR0xSs= sigs.k8s.io/kustomize/cmd/config v0.10.2/go.mod h1:K2aW7nXJ0AaT+VA/eO0/dzFLxmpFcTzudmAgDwPY1HQ= -sigs.k8s.io/kustomize/kustomize/v4 v4.2.0/go.mod h1:MOkR6fmhwG7hEDRXBYELTi5GSFcLwfqwzTRHW3kv5go= sigs.k8s.io/kustomize/kustomize/v4 v4.4.1/go.mod h1:qOKJMMz2mBP+vcS7vK+mNz4HBLjaQSWRY22EF6Tb7Io= -sigs.k8s.io/kustomize/kyaml v0.11.0/go.mod h1:GNMwjim4Ypgp/MueD3zXHLRJEjz7RvtPae0AwlvEMFM= -sigs.k8s.io/kustomize/kyaml v0.12.0/go.mod h1:FTJxEZ86ScK184NpGSAQcfEqee0nul8oLCK30D47m4E= sigs.k8s.io/kustomize/kyaml v0.13.0/go.mod h1:FTJxEZ86ScK184NpGSAQcfEqee0nul8oLCK30D47m4E= sigs.k8s.io/kustomize/kyaml v0.13.3 h1:tNNQIC+8cc+aXFTVg+RtQAOsjwUdYBZRAgYOVI3RBc4= sigs.k8s.io/kustomize/kyaml v0.13.3/go.mod h1:/ya3Gk4diiQzlE4mBh7wykyLRFZNvqlbh+JnwQ9Vhrc= @@ -1440,8 +1564,9 @@ sigs.k8s.io/structured-merge-diff/v3 v3.0.0-20200116222232-67a7b8c61874/go.mod h sigs.k8s.io/structured-merge-diff/v3 v3.0.0/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw= sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= sigs.k8s.io/structured-merge-diff/v4 v4.1.2/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= -sigs.k8s.io/structured-merge-diff/v4 v4.2.0 h1:kDvPBbnPk+qYmkHmSo8vKGp438IASWofnbbUKDE/bv0= sigs.k8s.io/structured-merge-diff/v4 v4.2.0/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= +sigs.k8s.io/structured-merge-diff/v4 v4.2.1 h1:bKCqE9GvQ5tiVHn5rfn1r+yao3aLQEaLzkkmAkf+A6Y= +sigs.k8s.io/structured-merge-diff/v4 v4.2.1/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= diff --git a/internal/build/build.go b/internal/build/build.go index 6796bdbb..a6fbf696 100644 --- a/internal/build/build.go +++ b/internal/build/build.go @@ -28,6 +28,7 @@ import ( "github.com/fluxcd/flux2/internal/utils" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" "github.com/fluxcd/pkg/kustomize" + "github.com/theckman/yacspin" "k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime" @@ -66,6 +67,7 @@ type Builder struct { action kustomize.Action kustomization *kustomizev1.Kustomization timeout time.Duration + spinner *yacspin.Spinner } type BuilderOptionFunc func(b *Builder) error @@ -77,6 +79,28 @@ func WithTimeout(timeout time.Duration) BuilderOptionFunc { } } +func WithProgressBar() BuilderOptionFunc { + return func(b *Builder) error { + // Add a spiner + cfg := yacspin.Config{ + Frequency: 100 * time.Millisecond, + CharSet: yacspin.CharSets[59], + Suffix: "Kustomization diffing...", + SuffixAutoColon: true, + Message: "running dry-run", + StopCharacter: "✓", + StopColors: []string{"fgGreen"}, + } + spinner, err := yacspin.New(cfg) + if err != nil { + return fmt.Errorf("failed to create spinner: %w", err) + } + b.spinner = spinner + + return nil + } +} + // NewBuilder returns a new Builder // to dp : create functional options func NewBuilder(rcg *genericclioptions.ConfigFlags, name, resources string, opts ...BuilderOptionFunc) (*Builder, error) { @@ -288,12 +312,12 @@ func maskSopsData(res *resource.Resource) error { if v, ok := secretType.(string); ok && v == dockercfgSecretType { // if the secret is a json docker config secret, we need to mask the data with a json object - err := maskDockerconfigjsonSopsData(dataMap) + err := maskDockerconfigjsonSopsData(dataMap, true) if err != nil { return fmt.Errorf("failed to mask secret %s sops data: %w", res.GetName(), err) } - err = maskDockerconfigjsonSopsData(stringDataMap) + err = maskDockerconfigjsonSopsData(stringDataMap, false) if err != nil { return fmt.Errorf("failed to mask secret %s sops data: %w", res.GetName(), err) } @@ -304,7 +328,7 @@ func maskSopsData(res *resource.Resource) error { } for k := range stringDataMap { - stringDataMap[k] = sopsMess + stringDataMap[k] = mask } } } else { @@ -346,7 +370,7 @@ func getStringDataMap(rn *resource.Resource) map[string]string { return result } -func maskDockerconfigjsonSopsData(dataMap map[string]string) error { +func maskDockerconfigjsonSopsData(dataMap map[string]string, encode bool) error { sopsMess := struct { Mask string `json:"mask"` }{ @@ -358,8 +382,15 @@ func maskDockerconfigjsonSopsData(dataMap map[string]string) error { return err } + if encode { + for k := range dataMap { + dataMap[k] = base64.StdEncoding.EncodeToString(maskJson) + } + return nil + } + for k := range dataMap { - dataMap[k] = base64.StdEncoding.EncodeToString(maskJson) + dataMap[k] = string(maskJson) } return nil diff --git a/internal/build/diff.go b/internal/build/diff.go index e05a1c02..4c6b6efa 100644 --- a/internal/build/diff.go +++ b/internal/build/diff.go @@ -26,7 +26,6 @@ import ( "path/filepath" "sort" "strings" - "time" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" "github.com/fluxcd/pkg/ssa" @@ -36,7 +35,6 @@ import ( "github.com/hashicorp/go-multierror" "github.com/homeport/dyff/pkg/dyff" "github.com/lucasb-eyer/go-colorful" - "github.com/theckman/yacspin" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime/schema" "sigs.k8s.io/cli-utils/pkg/kstatus/polling" @@ -45,7 +43,7 @@ import ( ) func (b *Builder) Manager() (*ssa.ResourceManager, error) { - statusPoller := polling.NewStatusPoller(b.client, b.restMapper, nil) + statusPoller := polling.NewStatusPoller(b.client, b.restMapper, polling.Options{}) owner := ssa.Owner{ Field: controllerName, Group: controllerGroup, @@ -55,21 +53,6 @@ func (b *Builder) Manager() (*ssa.ResourceManager, error) { } func (b *Builder) Diff() (string, bool, error) { - // Add a spiner - cfg := yacspin.Config{ - Frequency: 100 * time.Millisecond, - CharSet: yacspin.CharSets[59], - Suffix: "Kustomization diffing...", - SuffixAutoColon: true, - Message: "running dry-run", - StopCharacter: "✓", - StopColors: []string{"fgGreen"}, - } - spinner, err := yacspin.New(cfg) - if err != nil { - return "", false, fmt.Errorf("failed to create spinner: %w", err) - } - output := strings.Builder{} createdOrDrifted := false res, err := b.Build() @@ -94,9 +77,11 @@ func (b *Builder) Diff() (string, bool, error) { return "", createdOrDrifted, err } - err = spinner.Start() - if err != nil { - return "", false, fmt.Errorf("failed to start spinner: %w", err) + if b.spinner != nil { + err = b.spinner.Start() + if err != nil { + return "", false, fmt.Errorf("failed to start spinner: %w", err) + } } var diffErrs error @@ -145,7 +130,9 @@ func (b *Builder) Diff() (string, bool, error) { addObjectsToInventory(newInventory, change) } - spinner.Message("processing inventory") + if b.spinner != nil { + b.spinner.Message("processing inventory") + } if b.kustomization.Spec.Prune && diffErrs == nil { oldStatus := b.kustomization.Status.DeepCopy() @@ -160,9 +147,11 @@ func (b *Builder) Diff() (string, bool, error) { } } - err = spinner.Stop() - if err != nil { - return "", createdOrDrifted, fmt.Errorf("failed to stop spinner: %w", err) + if b.spinner != nil { + err = b.spinner.Stop() + if err != nil { + return "", createdOrDrifted, fmt.Errorf("failed to stop spinner: %w", err) + } } return output.String(), createdOrDrifted, diffErrs @@ -230,15 +219,10 @@ func diff(liveFile, mergedFile string, output io.Writer) error { func diffSopsSecret(obj, liveObject, mergedObject *unstructured.Unstructured, change *ssa.ChangeSetEntry) { // get both data and stringdata maps data := obj.Object[dataField] - stringData := obj.Object[stringDataField] if m, ok := data.(map[string]interface{}); ok && m != nil { applySopsDiff(m, liveObject, mergedObject, change) } - - if m, ok := stringData.(map[string]interface{}); ok && m != nil { - applySopsDiff(m, liveObject, mergedObject, change) - } } func applySopsDiff(data map[string]interface{}, liveObject, mergedObject *unstructured.Unstructured, change *ssa.ChangeSetEntry) { @@ -251,9 +235,8 @@ func applySopsDiff(data map[string]interface{}, liveObject, mergedObject *unstru if bytes.Contains(v, []byte(mask)) { if liveObject != nil && mergedObject != nil { change.Action = string(ssa.UnchangedAction) - dataLive := liveObject.Object[dataField].(map[string]interface{}) - dataMerged := mergedObject.Object[dataField].(map[string]interface{}) - if cmp.Diff(keys(dataLive), keys(dataMerged)) != "" { + liveKeys, mergedKeys := sopsComparableByKeys(liveObject), sopsComparableByKeys(mergedObject) + if cmp.Diff(liveKeys, mergedKeys) != "" { change.Action = string(ssa.ConfiguredAction) } } @@ -261,13 +244,21 @@ func applySopsDiff(data map[string]interface{}, liveObject, mergedObject *unstru } } -func keys(m map[string]interface{}) []string { +func sopsComparableByKeys(object *unstructured.Unstructured) []string { + m := object.Object[dataField].(map[string]interface{}) keys := make([]string, len(m)) i := 0 for k := range m { + // make sure we can compare only on keys + m[k] = "*****" keys[i] = k i++ } + + object.Object[dataField] = m + + sort.Strings(keys) + return keys } diff --git a/internal/utils/apply.go b/internal/utils/apply.go index bfebb03d..087c0e13 100644 --- a/internal/utils/apply.go +++ b/internal/utils/apply.go @@ -125,7 +125,7 @@ func newManager(rcg genericclioptions.RESTClientGetter) (*ssa.ResourceManager, e if err != nil { return nil, err } - kubePoller := polling.NewStatusPoller(kubeClient, restMapper, nil) + kubePoller := polling.NewStatusPoller(kubeClient, restMapper, polling.Options{}) return ssa.NewResourceManager(kubeClient, kubePoller, ssa.Owner{ Field: "flux", diff --git a/pkg/status/status.go b/pkg/status/status.go index 3451b929..ce227a6d 100644 --- a/pkg/status/status.go +++ b/pkg/status/status.go @@ -58,7 +58,7 @@ func NewStatusChecker(kubeConfig *rest.Config, pollInterval time.Duration, timeo pollInterval: pollInterval, timeout: timeout, client: c, - statusPoller: polling.NewStatusPoller(c, restMapper, nil), + statusPoller: polling.NewStatusPoller(c, restMapper, polling.Options{}), logger: log, }, nil } @@ -67,7 +67,7 @@ func (sc *StatusChecker) Assess(identifiers ...object.ObjMetadata) error { ctx, cancel := context.WithTimeout(context.Background(), sc.timeout) defer cancel() - opts := polling.Options{PollInterval: sc.pollInterval, UseCache: true} + opts := polling.PollOptions{PollInterval: sc.pollInterval} eventsChan := sc.statusPoller.Poll(ctx, identifiers, opts) coll := collector.NewResourceStatusCollector(identifiers) From 82a8697f2849e7469c288bca6e871bc6994c5225 Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Thu, 17 Feb 2022 13:58:59 +0100 Subject: [PATCH 036/818] Add gvk to rest of api type Signed-off-by: Somtochi Onyekwere --- cmd/flux/alert.go | 5 +++-- cmd/flux/alert_provider.go | 5 +++-- cmd/flux/helmrelease.go | 5 +++-- cmd/flux/image.go | 15 ++++++++----- cmd/flux/kustomization.go | 5 +++-- cmd/flux/object.go | 1 + cmd/flux/receiver.go | 5 +++-- cmd/flux/reconcile.go | 22 ++++++++++++------- cmd/flux/reconcile_with_source.go | 3 ++- cmd/flux/source.go | 20 ++++++++++------- .../delete_helmrelease_from_git.golden | 4 ++-- .../resume_helmrelease_from_git.golden | 4 ++-- .../suspend_helmrelease_from_git.golden | 4 ++-- .../delete_kustomization_from_git.golden | 4 ++-- .../resume_kustomization_from_git.golden | 4 ++-- .../suspend_kustomization_from_git.golden | 4 ++-- 16 files changed, 65 insertions(+), 45 deletions(-) diff --git a/cmd/flux/alert.go b/cmd/flux/alert.go index ea8012b9..a0a5b0e6 100644 --- a/cmd/flux/alert.go +++ b/cmd/flux/alert.go @@ -25,8 +25,9 @@ import ( // notificationv1.Alert var alertType = apiType{ - kind: notificationv1.AlertKind, - humanKind: "alert", + kind: notificationv1.AlertKind, + humanKind: "alert", + groupVersion: notificationv1.GroupVersion, } type alertAdapter struct { diff --git a/cmd/flux/alert_provider.go b/cmd/flux/alert_provider.go index fb7cb063..d434ffac 100644 --- a/cmd/flux/alert_provider.go +++ b/cmd/flux/alert_provider.go @@ -25,8 +25,9 @@ import ( // notificationv1.Provider var alertProviderType = apiType{ - kind: notificationv1.ProviderKind, - humanKind: "alert provider", + kind: notificationv1.ProviderKind, + humanKind: "alert provider", + groupVersion: notificationv1.GroupVersion, } type alertProviderAdapter struct { diff --git a/cmd/flux/helmrelease.go b/cmd/flux/helmrelease.go index c4ae564a..81deb149 100644 --- a/cmd/flux/helmrelease.go +++ b/cmd/flux/helmrelease.go @@ -25,8 +25,9 @@ import ( // helmv2.HelmRelease var helmReleaseType = apiType{ - kind: helmv2.HelmReleaseKind, - humanKind: "helmreleases", + kind: helmv2.HelmReleaseKind, + humanKind: "helmrelease", + groupVersion: helmv2.GroupVersion, } type helmReleaseAdapter struct { diff --git a/cmd/flux/image.go b/cmd/flux/image.go index b54aa25d..4659788b 100644 --- a/cmd/flux/image.go +++ b/cmd/flux/image.go @@ -30,8 +30,9 @@ import ( // imagev1.ImageRepository var imageRepositoryType = apiType{ - kind: imagev1.ImageRepositoryKind, - humanKind: "image repository", + kind: imagev1.ImageRepositoryKind, + humanKind: "image repository", + groupVersion: imagev1.GroupVersion, } type imageRepositoryAdapter struct { @@ -63,8 +64,9 @@ func (a imageRepositoryListAdapter) len() int { // imagev1.ImagePolicy var imagePolicyType = apiType{ - kind: imagev1.ImagePolicyKind, - humanKind: "image policy", + kind: imagev1.ImagePolicyKind, + humanKind: "image policy", + groupVersion: imagev1.GroupVersion, } type imagePolicyAdapter struct { @@ -92,8 +94,9 @@ func (a imagePolicyListAdapter) len() int { // autov1.ImageUpdateAutomation var imageUpdateAutomationType = apiType{ - kind: autov1.ImageUpdateAutomationKind, - humanKind: "image update automation", + kind: autov1.ImageUpdateAutomationKind, + humanKind: "image update automation", + groupVersion: autov1.GroupVersion, } type imageUpdateAutomationAdapter struct { diff --git a/cmd/flux/kustomization.go b/cmd/flux/kustomization.go index 1151b7aa..0c13f7f5 100644 --- a/cmd/flux/kustomization.go +++ b/cmd/flux/kustomization.go @@ -25,8 +25,9 @@ import ( // kustomizev1.Kustomization var kustomizationType = apiType{ - kind: kustomizev1.KustomizationKind, - humanKind: "kustomizations", + kind: kustomizev1.KustomizationKind, + humanKind: "kustomization", + groupVersion: kustomizev1.GroupVersion, } type kustomizationAdapter struct { diff --git a/cmd/flux/object.go b/cmd/flux/object.go index 0c68fcba..26b3a040 100644 --- a/cmd/flux/object.go +++ b/cmd/flux/object.go @@ -28,6 +28,7 @@ import ( // implementation can pick whichever it wants to use. type apiType struct { kind, humanKind string + groupVersion schema.GroupVersion } // adapter is an interface for a wrapper or alias from which we can diff --git a/cmd/flux/receiver.go b/cmd/flux/receiver.go index 9266e99a..7fa5db77 100644 --- a/cmd/flux/receiver.go +++ b/cmd/flux/receiver.go @@ -25,8 +25,9 @@ import ( // notificationv1.Receiver var receiverType = apiType{ - kind: notificationv1.ReceiverKind, - humanKind: "receiver", + kind: notificationv1.ReceiverKind, + humanKind: "receiver", + groupVersion: notificationv1.GroupVersion, } type receiverAdapter struct { diff --git a/cmd/flux/reconcile.go b/cmd/flux/reconcile.go index c3e53a73..5c56ea63 100644 --- a/cmd/flux/reconcile.go +++ b/cmd/flux/reconcile.go @@ -24,6 +24,7 @@ import ( "github.com/spf13/cobra" apimeta "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/client-go/util/retry" @@ -95,7 +96,8 @@ func (reconcile reconcileCommand) run(cmd *cobra.Command, args []string) error { } logger.Actionf("annotating %s %s in %s namespace", reconcile.kind, name, *kubeconfigArgs.Namespace) - if err := requestReconciliation(ctx, kubeClient, namespacedName, reconcile.object); err != nil { + if err := requestReconciliation(ctx, kubeClient, namespacedName, + reconcile.groupVersion.WithKind(reconcile.kind)); err != nil { return err } logger.Successf("%s annotated", reconcile.kind) @@ -142,21 +144,25 @@ func reconciliationHandled(ctx context.Context, kubeClient client.Client, } func requestReconciliation(ctx context.Context, kubeClient client.Client, - namespacedName types.NamespacedName, obj reconcilable) error { + namespacedName types.NamespacedName, gvk schema.GroupVersionKind) error { return retry.RetryOnConflict(retry.DefaultBackoff, func() (err error) { - if err := kubeClient.Get(ctx, namespacedName, obj.asClientObject()); err != nil { + object := &metav1.PartialObjectMetadata{} + object.SetGroupVersionKind(gvk) + object.SetName(namespacedName.Name) + object.SetNamespace(namespacedName.Namespace) + if err := kubeClient.Get(ctx, namespacedName, object); err != nil { return err } - patch := client.MergeFrom(obj.deepCopyClientObject()) - if ann := obj.GetAnnotations(); ann == nil { - obj.SetAnnotations(map[string]string{ + patch := client.MergeFrom(object.DeepCopy()) + if ann := object.GetAnnotations(); ann == nil { + object.SetAnnotations(map[string]string{ meta.ReconcileRequestAnnotation: time.Now().Format(time.RFC3339Nano), }) } else { ann[meta.ReconcileRequestAnnotation] = time.Now().Format(time.RFC3339Nano) - obj.SetAnnotations(ann) + object.SetAnnotations(ann) } - return kubeClient.Patch(ctx, obj.asClientObject(), patch) + return kubeClient.Patch(ctx, object, patch) }) } diff --git a/cmd/flux/reconcile_with_source.go b/cmd/flux/reconcile_with_source.go index 4eff1ee8..6186d5d6 100644 --- a/cmd/flux/reconcile_with_source.go +++ b/cmd/flux/reconcile_with_source.go @@ -71,7 +71,8 @@ func (reconcile reconcileWithSourceCommand) run(cmd *cobra.Command, args []strin lastHandledReconcileAt := reconcile.object.lastHandledReconcileRequest() logger.Actionf("annotating %s %s in %s namespace", reconcile.kind, name, *kubeconfigArgs.Namespace) - if err := requestReconciliation(ctx, kubeClient, namespacedName, reconcile.object); err != nil { + if err := requestReconciliation(ctx, kubeClient, namespacedName, + reconcile.groupVersion.WithKind(reconcile.kind)); err != nil { return err } logger.Successf("%s annotated", reconcile.kind) diff --git a/cmd/flux/source.go b/cmd/flux/source.go index 29dce7d5..d5c721bc 100644 --- a/cmd/flux/source.go +++ b/cmd/flux/source.go @@ -29,8 +29,9 @@ import ( // sourcev1.Bucket var bucketType = apiType{ - kind: sourcev1.BucketKind, - humanKind: "source bucket", + kind: sourcev1.BucketKind, + humanKind: "source bucket", + groupVersion: sourcev1.GroupVersion, } type bucketAdapter struct { @@ -62,8 +63,9 @@ func (a bucketListAdapter) len() int { // sourcev1.HelmChart var helmChartType = apiType{ - kind: sourcev1.HelmChartKind, - humanKind: "source chart", + kind: sourcev1.HelmChartKind, + humanKind: "source chart", + groupVersion: sourcev1.GroupVersion, } type helmChartAdapter struct { @@ -95,8 +97,9 @@ func (a helmChartListAdapter) len() int { // sourcev1.GitRepository var gitRepositoryType = apiType{ - kind: sourcev1.GitRepositoryKind, - humanKind: "source git", + kind: sourcev1.GitRepositoryKind, + humanKind: "source git", + groupVersion: sourcev1.GroupVersion, } type gitRepositoryAdapter struct { @@ -128,8 +131,9 @@ func (a gitRepositoryListAdapter) len() int { // sourcev1.HelmRepository var helmRepositoryType = apiType{ - kind: sourcev1.HelmRepositoryKind, - humanKind: "source helm", + kind: sourcev1.HelmRepositoryKind, + humanKind: "source helm", + groupVersion: sourcev1.GroupVersion, } type helmRepositoryAdapter struct { diff --git a/cmd/flux/testdata/helmrelease/delete_helmrelease_from_git.golden b/cmd/flux/testdata/helmrelease/delete_helmrelease_from_git.golden index 8ef80f6e..f481ce67 100644 --- a/cmd/flux/testdata/helmrelease/delete_helmrelease_from_git.golden +++ b/cmd/flux/testdata/helmrelease/delete_helmrelease_from_git.golden @@ -1,2 +1,2 @@ -► deleting helmreleases thrfg in {{ .ns }} namespace -✔ helmreleases deleted +► deleting helmrelease thrfg in {{ .ns }} namespace +✔ helmrelease deleted diff --git a/cmd/flux/testdata/helmrelease/resume_helmrelease_from_git.golden b/cmd/flux/testdata/helmrelease/resume_helmrelease_from_git.golden index ad9727fe..38672988 100644 --- a/cmd/flux/testdata/helmrelease/resume_helmrelease_from_git.golden +++ b/cmd/flux/testdata/helmrelease/resume_helmrelease_from_git.golden @@ -1,5 +1,5 @@ -► resuming helmreleases thrfg in {{ .ns }} namespace -✔ helmreleases resumed +► resuming helmrelease thrfg in {{ .ns }} namespace +✔ helmrelease resumed ◎ waiting for HelmRelease reconciliation ✔ HelmRelease reconciliation completed ✔ applied revision 6.0.0 diff --git a/cmd/flux/testdata/helmrelease/suspend_helmrelease_from_git.golden b/cmd/flux/testdata/helmrelease/suspend_helmrelease_from_git.golden index d2f36d24..894a1ad2 100644 --- a/cmd/flux/testdata/helmrelease/suspend_helmrelease_from_git.golden +++ b/cmd/flux/testdata/helmrelease/suspend_helmrelease_from_git.golden @@ -1,2 +1,2 @@ -► suspending helmreleases thrfg in {{ .ns }} namespace -✔ helmreleases suspended +► suspending helmrelease thrfg in {{ .ns }} namespace +✔ helmrelease suspended diff --git a/cmd/flux/testdata/kustomization/delete_kustomization_from_git.golden b/cmd/flux/testdata/kustomization/delete_kustomization_from_git.golden index 2142286d..d12a671f 100644 --- a/cmd/flux/testdata/kustomization/delete_kustomization_from_git.golden +++ b/cmd/flux/testdata/kustomization/delete_kustomization_from_git.golden @@ -1,2 +1,2 @@ -► deleting kustomizations tkfg in {{ .ns }} namespace -✔ kustomizations deleted +► deleting kustomization tkfg in {{ .ns }} namespace +✔ kustomization deleted diff --git a/cmd/flux/testdata/kustomization/resume_kustomization_from_git.golden b/cmd/flux/testdata/kustomization/resume_kustomization_from_git.golden index e24cd125..a59e904d 100644 --- a/cmd/flux/testdata/kustomization/resume_kustomization_from_git.golden +++ b/cmd/flux/testdata/kustomization/resume_kustomization_from_git.golden @@ -1,5 +1,5 @@ -► resuming kustomizations tkfg in {{ .ns }} namespace -✔ kustomizations resumed +► resuming kustomization tkfg in {{ .ns }} namespace +✔ kustomization resumed ◎ waiting for Kustomization reconciliation ✔ Kustomization reconciliation completed ✔ applied revision 6.0.0/627d5c4bb67b77185f37e31d734b085019ff2951 diff --git a/cmd/flux/testdata/kustomization/suspend_kustomization_from_git.golden b/cmd/flux/testdata/kustomization/suspend_kustomization_from_git.golden index 8a30f2a4..f82cd8ac 100644 --- a/cmd/flux/testdata/kustomization/suspend_kustomization_from_git.golden +++ b/cmd/flux/testdata/kustomization/suspend_kustomization_from_git.golden @@ -1,2 +1,2 @@ -► suspending kustomizations tkfg in {{ .ns }} namespace -✔ kustomizations suspended +► suspending kustomization tkfg in {{ .ns }} namespace +✔ kustomization suspended From 9c76ba903b8af164b602705f7c210807b4f68067 Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Thu, 17 Feb 2022 15:37:26 +0100 Subject: [PATCH 037/818] add wait flag to flux resume cmd Signed-off-by: Somtochi Onyekwere --- cmd/flux/resume.go | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/cmd/flux/resume.go b/cmd/flux/resume.go index 9b570978..38613eff 100644 --- a/cmd/flux/resume.go +++ b/cmd/flux/resume.go @@ -35,7 +35,8 @@ var resumeCmd = &cobra.Command{ } type ResumeFlags struct { - all bool + all bool + wait bool } var resumeArgs ResumeFlags @@ -43,6 +44,8 @@ var resumeArgs ResumeFlags func init() { resumeCmd.PersistentFlags().BoolVarP(&resumeArgs.all, "all", "", false, "resume all resources in that namespace") + resumeCmd.PersistentFlags().BoolVarP(&resumeArgs.wait, "wait", "", false, + "waits for one resource to reconcile before moving to the next one") rootCmd.AddCommand(resumeCmd) } @@ -107,19 +110,21 @@ func (resume resumeCommand) run(cmd *cobra.Command, args []string) error { logger.Successf("%s resumed", resume.humanKind) - namespacedName := types.NamespacedName{ - Name: resume.list.resumeItem(i).asClientObject().GetName(), - Namespace: *kubeconfigArgs.Namespace, + if resumeArgs.wait || !resumeArgs.all { + namespacedName := types.NamespacedName{ + Name: resume.list.resumeItem(i).asClientObject().GetName(), + Namespace: *kubeconfigArgs.Namespace, + } + + logger.Waitingf("waiting for %s reconciliation", resume.kind) + if err := wait.PollImmediate(rootArgs.pollInterval, rootArgs.timeout, + isReady(ctx, kubeClient, namespacedName, resume.list.resumeItem(i))); err != nil { + logger.Failuref(err.Error()) + continue + } + logger.Successf("%s reconciliation completed", resume.kind) + logger.Successf(resume.list.resumeItem(i).successMessage()) } - - logger.Waitingf("waiting for %s reconciliation", resume.kind) - if err := wait.PollImmediate(rootArgs.pollInterval, rootArgs.timeout, - isReady(ctx, kubeClient, namespacedName, resume.list.resumeItem(i))); err != nil { - logger.Failuref(err.Error()) - continue - } - logger.Successf("%s reconciliation completed", resume.kind) - logger.Successf(resume.list.resumeItem(i).successMessage()) } return nil From 8aabc544f1e934d56eedbe67a3da27cbae2fdeba Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Wed, 23 Feb 2022 09:00:51 +0000 Subject: [PATCH 038/818] Update toolkit components - helm-controller to v0.17.1 https://github.com/fluxcd/helm-controller/blob/v0.17.1/CHANGELOG.md - kustomize-controller to v0.21.1 https://github.com/fluxcd/kustomize-controller/blob/v0.21.1/CHANGELOG.md - notification-controller to v0.22.1 https://github.com/fluxcd/notification-controller/blob/v0.22.1/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 10 ++++----- go.sum | 22 ++++++++++--------- .../bases/helm-controller/kustomization.yaml | 4 ++-- .../kustomize-controller/kustomization.yaml | 4 ++-- .../kustomization.yaml | 4 ++-- manifests/crds/kustomization.yaml | 6 ++--- 6 files changed, 26 insertions(+), 24 deletions(-) diff --git a/go.mod b/go.mod index 29c52775..6fe144e4 100644 --- a/go.mod +++ b/go.mod @@ -7,14 +7,14 @@ require ( github.com/ProtonMail/go-crypto v0.0.0-20211221144345-a4f6767435ab github.com/cyphar/filepath-securejoin v0.2.2 github.com/fluxcd/go-git-providers v0.5.4 - github.com/fluxcd/helm-controller/api v0.17.0 + github.com/fluxcd/helm-controller/api v0.17.1 github.com/fluxcd/image-automation-controller/api v0.20.0 github.com/fluxcd/image-reflector-controller/api v0.16.0 - github.com/fluxcd/kustomize-controller/api v0.21.0 - github.com/fluxcd/notification-controller/api v0.22.0 + github.com/fluxcd/kustomize-controller/api v0.21.1 + github.com/fluxcd/notification-controller/api v0.22.1 github.com/fluxcd/pkg/apis/meta v0.10.2 github.com/fluxcd/pkg/kustomize v0.0.2 - github.com/fluxcd/pkg/runtime v0.12.4 + github.com/fluxcd/pkg/runtime v0.12.5 github.com/fluxcd/pkg/ssa v0.14.1 github.com/fluxcd/pkg/ssh v0.3.1 github.com/fluxcd/pkg/untar v0.0.5 @@ -37,7 +37,7 @@ require ( golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3 golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 k8s.io/api v0.23.2 - k8s.io/apiextensions-apiserver v0.23.1 + k8s.io/apiextensions-apiserver v0.23.2 k8s.io/apimachinery v0.23.2 k8s.io/cli-runtime v0.23.2 k8s.io/client-go v0.23.2 diff --git a/go.sum b/go.sum index 287d64b5..d9d601eb 100644 --- a/go.sum +++ b/go.sum @@ -254,16 +254,16 @@ github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYF github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fluxcd/go-git-providers v0.5.4 h1:MnByjsmXa8rMt2hTmhmtbocq7YIsTlwZKrj9lAsob4Q= github.com/fluxcd/go-git-providers v0.5.4/go.mod h1:4jTHTmSx3rFGnG78KUVgFYeG6vWFnKwUSr2mi31tvp8= -github.com/fluxcd/helm-controller/api v0.17.0 h1:iWOAf5MQzWQ3QZlKQ78meFabOA61d8pkos+nDW643+s= -github.com/fluxcd/helm-controller/api v0.17.0/go.mod h1:/OeNzk18BVa7UmhGphENJdD/2GerKpMeDSxY8QYlO0o= +github.com/fluxcd/helm-controller/api v0.17.1 h1:nqoOOBkVxssvvE8lezGAqVI89WX/HX6Ddxen6g2JxwM= +github.com/fluxcd/helm-controller/api v0.17.1/go.mod h1:ajkvxpv3mwzr/+H3iKpcnHW9qsOrIqNakalyGzQXduM= github.com/fluxcd/image-automation-controller/api v0.20.0 h1:Z+lxqif0KwccsuNOBZq5M96RXCPxtm4Xt8siC1kR6H8= github.com/fluxcd/image-automation-controller/api v0.20.0/go.mod h1:XhLYccGUbmJvTTpJ1jAFKZHr2e1GNXy0T85ZBO50mik= github.com/fluxcd/image-reflector-controller/api v0.16.0 h1:1O1YdoK7LsJgWLyvfZTSbvQcUQCBcgJ573HA0arlQQY= github.com/fluxcd/image-reflector-controller/api v0.16.0/go.mod h1:OIe3mSXc3OwQiNbiQ9vNXWYtNif31hc7WAbZWlFUUnc= -github.com/fluxcd/kustomize-controller/api v0.21.0 h1:PizHYQuuxmO4+tnUHJ4v7cUhNEZulhmZdgnkObHjdOo= -github.com/fluxcd/kustomize-controller/api v0.21.0/go.mod h1:5MdpzJVx8+KiDIRv37zLme992BAOCgE0v1n+NOgs1lo= -github.com/fluxcd/notification-controller/api v0.22.0 h1:mbf9utgPbvclOhgQW85lJCzUpZ8FENkLURAwPD6leWM= -github.com/fluxcd/notification-controller/api v0.22.0/go.mod h1:gA9/j0kjh7VDuUC2Cubr9twxOdzb/0+ojcE9Lzsc9ug= +github.com/fluxcd/kustomize-controller/api v0.21.1 h1:Abusz7ZxwD7bdWCsXLefowOi3e5DqPk5T+BvdbOYpK8= +github.com/fluxcd/kustomize-controller/api v0.21.1/go.mod h1:LhESmzZMC//KGeSSDE31ZTw/J9CCXbuJpb4DwvL28kM= +github.com/fluxcd/notification-controller/api v0.22.1 h1:2sMhj5tBORyeSQ+pnw+VJEKKvsHFPFKadlQt0yVOxsI= +github.com/fluxcd/notification-controller/api v0.22.1/go.mod h1:gA9/j0kjh7VDuUC2Cubr9twxOdzb/0+ojcE9Lzsc9ug= github.com/fluxcd/pkg/apis/acl v0.0.3 h1:Lw0ZHdpnO4G7Zy9KjrzwwBmDZQuy4qEjaU/RvA6k1lc= github.com/fluxcd/pkg/apis/acl v0.0.3/go.mod h1:XPts6lRJ9C9fIF9xVWofmQwftvhY25n1ps7W9xw0XLU= github.com/fluxcd/pkg/apis/kustomize v0.3.1 h1:wmb5D9e1+Rr3/5O3235ERuj+h2VKUArVfYYk68QKP+w= @@ -272,9 +272,8 @@ github.com/fluxcd/pkg/apis/meta v0.10.2 h1:pnDBBEvfs4HaKiVAYgz+e/AQ8dLvcgmVfSeBr github.com/fluxcd/pkg/apis/meta v0.10.2/go.mod h1:KQ2er9xa6koy7uoPMZjIjNudB5p4tXs+w0GO6fRcy7I= github.com/fluxcd/pkg/kustomize v0.0.2 h1:ipvQrxSeuGZDsPZrVUL6tYMlTR5xqYTZp6G0Tdy2hVs= github.com/fluxcd/pkg/kustomize v0.0.2/go.mod h1:AFwnf3OqQmpTCuwCARTGpPRMBf0ZFJNGCvW63KbgK04= -github.com/fluxcd/pkg/runtime v0.12.3/go.mod h1:imJ2xYy/d4PbSinX2IefmZk+iS2c1P5fY0js8mCE4SM= -github.com/fluxcd/pkg/runtime v0.12.4 h1:gA27RG/+adN2/7Qe03PB46Iwmye/MusPCpuS4zQ2fW0= -github.com/fluxcd/pkg/runtime v0.12.4/go.mod h1:gspNvhAqodZgSmK1ZhMtvARBf/NGAlxmaZaIOHkJYsc= +github.com/fluxcd/pkg/runtime v0.12.5 h1:/8+0UBnSHbO9DVG9IFTjc37lwofsixGbs5WpHso8n5s= +github.com/fluxcd/pkg/runtime v0.12.5/go.mod h1:gspNvhAqodZgSmK1ZhMtvARBf/NGAlxmaZaIOHkJYsc= github.com/fluxcd/pkg/ssa v0.14.1 h1:AZxM1VJusAV0r0GgtR43Z8NUI2luV68C/7I0/g28D6c= github.com/fluxcd/pkg/ssa v0.14.1/go.mod h1:9HfCfy4COdRt/Ck4T4BPPc3i8MgFZFRlY+Bcm+8vMCw= github.com/fluxcd/pkg/ssh v0.3.1 h1:iQw07bkX2rScactX8WYv+uMDsufFOlg8M3fV2TNs244= @@ -1477,8 +1476,9 @@ k8s.io/api v0.23.1/go.mod h1:WfXnOnwSqNtG62Y1CdjoMxh7r7u9QXGCkA1u0na2jgo= k8s.io/api v0.23.2 h1:62cpzreV3dCuj0hqPi8r4dyWh48ogMcyh+ga9jEGij4= k8s.io/api v0.23.2/go.mod h1:sYuDb3flCtRPI8ghn6qFrcK5ZBu2mhbElxRE95qpwlI= k8s.io/apiextensions-apiserver v0.23.0/go.mod h1:xIFAEEDlAZgpVBl/1VSjGDmLoXAWRG40+GsWhKhAxY4= -k8s.io/apiextensions-apiserver v0.23.1 h1:xxE0q1vLOVZiWORu1KwNRQFsGWtImueOrqSl13sS5EU= k8s.io/apiextensions-apiserver v0.23.1/go.mod h1:0qz4fPaHHsVhRApbtk3MGXNn2Q9M/cVWWhfHdY2SxiM= +k8s.io/apiextensions-apiserver v0.23.2 h1:N6CIVAhmF0ahgFKUMDdV/AUyckhUb4nIyVPohPtdUPk= +k8s.io/apiextensions-apiserver v0.23.2/go.mod h1:9cs7avT6+GfzbB0pambTvH11wcaR85QQg4ovl9s15UU= k8s.io/apimachinery v0.18.8/go.mod h1:6sQd+iHEqmOtALqOFjSWp2KZ9F0wlU/nWm0ZgsYWMig= k8s.io/apimachinery v0.23.0/go.mod h1:fFCTTBKvKcwTPFzjlcxp91uPFZr+JA0FubU4fLzzFYc= k8s.io/apimachinery v0.23.1/go.mod h1:SADt2Kl8/sttJ62RRsi9MIV4o8f5S3coArm0Iu3fBno= @@ -1487,6 +1487,7 @@ k8s.io/apimachinery v0.23.2/go.mod h1:zDqeV0AK62LbCI0CI7KbWCAYdLg+E+8UXJ0rIz5gmS k8s.io/apiserver v0.18.8/go.mod h1:12u5FuGql8Cc497ORNj79rhPdiXQC4bf53X/skR/1YM= k8s.io/apiserver v0.23.0/go.mod h1:Cec35u/9zAepDPPFyT+UMrgqOCjgJ5qtfVJDxjZYmt4= k8s.io/apiserver v0.23.1/go.mod h1:Bqt0gWbeM2NefS8CjWswwd2VNAKN6lUKR85Ft4gippY= +k8s.io/apiserver v0.23.2/go.mod h1:Kdt8gafkPev9Gfh+H6lCPbmRu42f7BfhOfHKKa3dtyU= k8s.io/cli-runtime v0.23.2 h1:4zOZX78mFSakwe4gef81XDBu94Yu0th6bfveTOx8ZQk= k8s.io/cli-runtime v0.23.2/go.mod h1:Ag70akCDvwux4HxY+nH2J3UqE2e6iwSSdG1HE6p1VTU= k8s.io/client-go v0.18.8/go.mod h1:HqFqMllQ5NnQJNwjro9k5zMyfhZlOwpuTLVrxjkYSxU= @@ -1542,6 +1543,7 @@ rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.7/go.mod h1:PHgbrJT7lCHcxMU+mDHEm+nx46H4zuuHZkDP6icnhu0= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.25/go.mod h1:Mlj9PNLmG9bZ6BHFwFKDo5afkpWyUISkb9Me0GnK66I= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.27/go.mod h1:tq2nT0Kx7W+/f2JVE+zxYtUhdjuELJkVpNz+x/QN5R4= sigs.k8s.io/cli-utils v0.28.0 h1:gsvwqygoXlW2y8CmKdflQJNZp1Yhi4geATW3/Ei7oYc= sigs.k8s.io/cli-utils v0.28.0/go.mod h1:WDVRa5/eQBKntG++uyKdyT+xU7MLdCR4XsgseqL5uX4= sigs.k8s.io/controller-runtime v0.11.0/go.mod h1:KKwLiTooNGu+JmLZGn9Sl3Gjmfj66eMbCQznLP5zcqA= diff --git a/manifests/bases/helm-controller/kustomization.yaml b/manifests/bases/helm-controller/kustomization.yaml index fb2626da..6c2d5d7e 100644 --- a/manifests/bases/helm-controller/kustomization.yaml +++ b/manifests/bases/helm-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/helm-controller/releases/download/v0.17.0/helm-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.17.0/helm-controller.deployment.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.17.1/helm-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.17.1/helm-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/kustomize-controller/kustomization.yaml b/manifests/bases/kustomize-controller/kustomization.yaml index 4e404a9b..fa142327 100644 --- a/manifests/bases/kustomize-controller/kustomization.yaml +++ b/manifests/bases/kustomize-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.21.0/kustomize-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.21.0/kustomize-controller.deployment.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.21.1/kustomize-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.21.1/kustomize-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/notification-controller/kustomization.yaml b/manifests/bases/notification-controller/kustomization.yaml index 0d079a11..2cc027ce 100644 --- a/manifests/bases/notification-controller/kustomization.yaml +++ b/manifests/bases/notification-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/notification-controller/releases/download/v0.22.0/notification-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v0.22.0/notification-controller.deployment.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.22.1/notification-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.22.1/notification-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index 7136e7f1..1fb81cfa 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -2,8 +2,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - https://github.com/fluxcd/source-controller/releases/download/v0.21.2/source-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.21.0/kustomize-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.17.0/helm-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v0.22.0/notification-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.21.1/kustomize-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.17.1/helm-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.22.1/notification-controller.crds.yaml - https://github.com/fluxcd/image-reflector-controller/releases/download/v0.16.0/image-reflector-controller.crds.yaml - https://github.com/fluxcd/image-automation-controller/releases/download/v0.20.0/image-automation-controller.crds.yaml From 5312f81c8e38e8b4697cad9a6d7ce675fc286f67 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Tue, 15 Feb 2022 09:17:31 +0200 Subject: [PATCH 039/818] Add e2e sequence diagrams Signed-off-by: Stefan Prodan --- docs/internal/diagrams.md | 83 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 docs/internal/diagrams.md diff --git a/docs/internal/diagrams.md b/docs/internal/diagrams.md new file mode 100644 index 00000000..138768cd --- /dev/null +++ b/docs/internal/diagrams.md @@ -0,0 +1,83 @@ +# Flux Diagrams + +## Cluster sync from Git + +```mermaid +sequenceDiagram + actor me + participant git as Git

repository + participant sc as Flux

source-controller + participant kc as Flux

kustomize-controller + participant kube as Kubernetes

api-server + participant nc as Flux

notification-controller + me->>git: 1. git push + sc->>git: 2. git pull + sc->>sc: 3. build artifact for revision + sc->>kube: 4. update status for revision + sc-->>nc: 5. emit events + kube->>kc: 6. notify about new revision + kc->>sc: 7. fetch artifact for revision + kc->>kc: 8. build manifests to objects + kc-->>kc: 9. decrypt secrets + kc->>kube: 10. validate objects + kc->>kube: 11. apply objects + kc-->>kube: 12. delete objects + kc-->>kube: 13. wait for readiness + kc->>kube: 14. update status for revision + kc-->>nc: 15. emit events + nc-->>me: 16. send alerts for revision +``` + +## Helm release upgrade from Git + +```mermaid +sequenceDiagram + actor me + participant git as Git

repository + participant sc as Flux

source-controller + participant hc as Flux

helm-controller + participant kube as Kubernetes

api-server + participant nc as Flux

notification-controller + me->>git: 1. git push + sc->>git: 2. git pull + sc->>sc: 3. build chart for revision + sc->>kube: 4. update chart status + sc-->>nc: 5. emit events + kube->>hc: 6. notify about new revision + hc->>sc: 7. fetch chart + hc->>kube: 8. get values + hc->>hc: 9. render and customize manifests + hc-->>kube: 10. apply CRDs + hc->>kube: 11. upgrade release + hc-->>kube: 12. run tests + hc-->>kube: 13. wait for readiness + hc->>kube: 14. update status + hc-->>nc: 15. emit events + nc-->>me: 16. send alerts +``` + +## Image update to Git + +```mermaid +sequenceDiagram + actor me + participant oci as Image

repository + participant irc as Flux

image-reflector-controller + participant iac as Flux

image-automation-controller + participant kube as Kubernetes

api-server + participant nc as Flux

notification-controller + participant git as Git

repository + me->>oci: 1. docker push + irc->>oci: 2. list tags + irc->>irc: 3. match tags to policies + irc->>kube: 4. update status + irc-->>nc: 5. emit events + kube->>iac: 6. notify about new tags + iac->>git: 7. git clone + iac->>iac: 8. patch manifests with new tags + iac->>git: 9. git push + iac->>kube: 10. update status + iac-->>nc: 11. emit events + nc-->>me: 12. send alerts +``` + From 05479756d83e1a5c871a5f6c4d15aebbc1b0bc56 Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Wed, 23 Feb 2022 13:37:43 +0000 Subject: [PATCH 040/818] Update toolkit components - notification-controller to v0.22.2 https://github.com/fluxcd/notification-controller/blob/v0.22.2/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 2 +- go.sum | 4 ++-- manifests/bases/notification-controller/kustomization.yaml | 4 ++-- manifests/crds/kustomization.yaml | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index 6fe144e4..f6a18368 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/fluxcd/image-automation-controller/api v0.20.0 github.com/fluxcd/image-reflector-controller/api v0.16.0 github.com/fluxcd/kustomize-controller/api v0.21.1 - github.com/fluxcd/notification-controller/api v0.22.1 + github.com/fluxcd/notification-controller/api v0.22.2 github.com/fluxcd/pkg/apis/meta v0.10.2 github.com/fluxcd/pkg/kustomize v0.0.2 github.com/fluxcd/pkg/runtime v0.12.5 diff --git a/go.sum b/go.sum index d9d601eb..0e84ca26 100644 --- a/go.sum +++ b/go.sum @@ -262,8 +262,8 @@ github.com/fluxcd/image-reflector-controller/api v0.16.0 h1:1O1YdoK7LsJgWLyvfZTS github.com/fluxcd/image-reflector-controller/api v0.16.0/go.mod h1:OIe3mSXc3OwQiNbiQ9vNXWYtNif31hc7WAbZWlFUUnc= github.com/fluxcd/kustomize-controller/api v0.21.1 h1:Abusz7ZxwD7bdWCsXLefowOi3e5DqPk5T+BvdbOYpK8= github.com/fluxcd/kustomize-controller/api v0.21.1/go.mod h1:LhESmzZMC//KGeSSDE31ZTw/J9CCXbuJpb4DwvL28kM= -github.com/fluxcd/notification-controller/api v0.22.1 h1:2sMhj5tBORyeSQ+pnw+VJEKKvsHFPFKadlQt0yVOxsI= -github.com/fluxcd/notification-controller/api v0.22.1/go.mod h1:gA9/j0kjh7VDuUC2Cubr9twxOdzb/0+ojcE9Lzsc9ug= +github.com/fluxcd/notification-controller/api v0.22.2 h1:uD4l0A9ihY55AAgRKjgvixlG5+KAUf/6X1WZXvXBjP0= +github.com/fluxcd/notification-controller/api v0.22.2/go.mod h1:gA9/j0kjh7VDuUC2Cubr9twxOdzb/0+ojcE9Lzsc9ug= github.com/fluxcd/pkg/apis/acl v0.0.3 h1:Lw0ZHdpnO4G7Zy9KjrzwwBmDZQuy4qEjaU/RvA6k1lc= github.com/fluxcd/pkg/apis/acl v0.0.3/go.mod h1:XPts6lRJ9C9fIF9xVWofmQwftvhY25n1ps7W9xw0XLU= github.com/fluxcd/pkg/apis/kustomize v0.3.1 h1:wmb5D9e1+Rr3/5O3235ERuj+h2VKUArVfYYk68QKP+w= diff --git a/manifests/bases/notification-controller/kustomization.yaml b/manifests/bases/notification-controller/kustomization.yaml index 2cc027ce..7c39faff 100644 --- a/manifests/bases/notification-controller/kustomization.yaml +++ b/manifests/bases/notification-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/notification-controller/releases/download/v0.22.1/notification-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v0.22.1/notification-controller.deployment.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.22.2/notification-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.22.2/notification-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index 1fb81cfa..21f48369 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -4,6 +4,6 @@ resources: - https://github.com/fluxcd/source-controller/releases/download/v0.21.2/source-controller.crds.yaml - https://github.com/fluxcd/kustomize-controller/releases/download/v0.21.1/kustomize-controller.crds.yaml - https://github.com/fluxcd/helm-controller/releases/download/v0.17.1/helm-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v0.22.1/notification-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.22.2/notification-controller.crds.yaml - https://github.com/fluxcd/image-reflector-controller/releases/download/v0.16.0/image-reflector-controller.crds.yaml - https://github.com/fluxcd/image-automation-controller/releases/download/v0.20.0/image-automation-controller.crds.yaml From 21f0d5d82ca041ba56472a32b6fcc2b09188e923 Mon Sep 17 00:00:00 2001 From: Sunny Date: Thu, 24 Feb 2022 04:21:47 +0530 Subject: [PATCH 041/818] Move MESSAGE to the end of `get` subcommand output Message content could be long compared to other fields. Moving it to the end helps improve the visibility of the other fields. Signed-off-by: Sunny --- cmd/flux/get_alert.go | 4 ++-- cmd/flux/get_helmrelease.go | 4 ++-- cmd/flux/get_image_policy.go | 4 ++-- cmd/flux/get_image_repository.go | 4 ++-- cmd/flux/get_image_update.go | 4 ++-- cmd/flux/get_kustomization.go | 4 ++-- cmd/flux/get_receiver.go | 4 ++-- cmd/flux/get_source_bucket.go | 4 ++-- cmd/flux/get_source_chart.go | 4 ++-- cmd/flux/get_source_git.go | 4 ++-- cmd/flux/get_source_helm.go | 4 ++-- 11 files changed, 22 insertions(+), 22 deletions(-) diff --git a/cmd/flux/get_alert.go b/cmd/flux/get_alert.go index 126dbe56..b23a7637 100644 --- a/cmd/flux/get_alert.go +++ b/cmd/flux/get_alert.go @@ -77,11 +77,11 @@ func init() { func (s alertListAdapter) summariseItem(i int, includeNamespace bool, includeKind bool) []string { item := s.Items[i] status, msg := statusAndMessage(item.Status.Conditions) - return append(nameColumns(&item, includeNamespace, includeKind), status, msg, strings.Title(strconv.FormatBool(item.Spec.Suspend))) + return append(nameColumns(&item, includeNamespace, includeKind), strings.Title(strconv.FormatBool(item.Spec.Suspend)), status, msg) } func (s alertListAdapter) headers(includeNamespace bool) []string { - headers := []string{"Name", "Ready", "Message", "Suspended"} + headers := []string{"Name", "Suspended", "Ready", "Message"} if includeNamespace { return append(namespaceHeader, headers...) } diff --git a/cmd/flux/get_helmrelease.go b/cmd/flux/get_helmrelease.go index 5478e29c..0689757e 100644 --- a/cmd/flux/get_helmrelease.go +++ b/cmd/flux/get_helmrelease.go @@ -75,11 +75,11 @@ func (a helmReleaseListAdapter) summariseItem(i int, includeNamespace bool, incl revision := item.Status.LastAppliedRevision status, msg := statusAndMessage(item.Status.Conditions) return append(nameColumns(&item, includeNamespace, includeKind), - status, msg, revision, strings.Title(strconv.FormatBool(item.Spec.Suspend))) + revision, strings.Title(strconv.FormatBool(item.Spec.Suspend)), status, msg) } func (a helmReleaseListAdapter) headers(includeNamespace bool) []string { - headers := []string{"Name", "Ready", "Message", "Revision", "Suspended"} + headers := []string{"Name", "Revision", "Suspended", "Ready", "Message"} if includeNamespace { headers = append([]string{"Namespace"}, headers...) } diff --git a/cmd/flux/get_image_policy.go b/cmd/flux/get_image_policy.go index 7974c380..a853817e 100644 --- a/cmd/flux/get_image_policy.go +++ b/cmd/flux/get_image_policy.go @@ -74,11 +74,11 @@ func init() { func (s imagePolicyListAdapter) summariseItem(i int, includeNamespace bool, includeKind bool) []string { item := s.Items[i] status, msg := statusAndMessage(item.Status.Conditions) - return append(nameColumns(&item, includeNamespace, includeKind), status, msg, item.Status.LatestImage) + return append(nameColumns(&item, includeNamespace, includeKind), item.Status.LatestImage, status, msg) } func (s imagePolicyListAdapter) headers(includeNamespace bool) []string { - headers := []string{"Name", "Ready", "Message", "Latest image"} + headers := []string{"Name", "Latest image", "Ready", "Message"} if includeNamespace { return append(namespaceHeader, headers...) } diff --git a/cmd/flux/get_image_repository.go b/cmd/flux/get_image_repository.go index 0878a29c..3b190b7d 100644 --- a/cmd/flux/get_image_repository.go +++ b/cmd/flux/get_image_repository.go @@ -82,11 +82,11 @@ func (s imageRepositoryListAdapter) summariseItem(i int, includeNamespace bool, lastScan = item.Status.LastScanResult.ScanTime.Time.Format(time.RFC3339) } return append(nameColumns(&item, includeNamespace, includeKind), - status, msg, lastScan, strings.Title(strconv.FormatBool(item.Spec.Suspend))) + lastScan, strings.Title(strconv.FormatBool(item.Spec.Suspend)), status, msg) } func (s imageRepositoryListAdapter) headers(includeNamespace bool) []string { - headers := []string{"Name", "Ready", "Message", "Last scan", "Suspended"} + headers := []string{"Name", "Last scan", "Suspended", "Ready", "Message"} if includeNamespace { return append(namespaceHeader, headers...) } diff --git a/cmd/flux/get_image_update.go b/cmd/flux/get_image_update.go index da16c576..dd84b6d8 100644 --- a/cmd/flux/get_image_update.go +++ b/cmd/flux/get_image_update.go @@ -81,11 +81,11 @@ func (s imageUpdateAutomationListAdapter) summariseItem(i int, includeNamespace if item.Status.LastAutomationRunTime != nil { lastRun = item.Status.LastAutomationRunTime.Time.Format(time.RFC3339) } - return append(nameColumns(&item, includeNamespace, includeKind), status, msg, lastRun, strings.Title(strconv.FormatBool(item.Spec.Suspend))) + return append(nameColumns(&item, includeNamespace, includeKind), lastRun, strings.Title(strconv.FormatBool(item.Spec.Suspend)), status, msg) } func (s imageUpdateAutomationListAdapter) headers(includeNamespace bool) []string { - headers := []string{"Name", "Ready", "Message", "Last run", "Suspended"} + headers := []string{"Name", "Last run", "Suspended", "Ready", "Message"} if includeNamespace { return append(namespaceHeader, headers...) } diff --git a/cmd/flux/get_kustomization.go b/cmd/flux/get_kustomization.go index d2991e93..5d20f639 100644 --- a/cmd/flux/get_kustomization.go +++ b/cmd/flux/get_kustomization.go @@ -85,11 +85,11 @@ func (a kustomizationListAdapter) summariseItem(i int, includeNamespace bool, in msg = shortenCommitSha(msg) } return append(nameColumns(&item, includeNamespace, includeKind), - status, msg, revision, strings.Title(strconv.FormatBool(item.Spec.Suspend))) + revision, strings.Title(strconv.FormatBool(item.Spec.Suspend)), status, msg) } func (a kustomizationListAdapter) headers(includeNamespace bool) []string { - headers := []string{"Name", "Ready", "Message", "Revision", "Suspended"} + headers := []string{"Name", "Revision", "Suspended", "Ready", "Message"} if includeNamespace { headers = append([]string{"Namespace"}, headers...) } diff --git a/cmd/flux/get_receiver.go b/cmd/flux/get_receiver.go index d2147d1b..ef7eb376 100644 --- a/cmd/flux/get_receiver.go +++ b/cmd/flux/get_receiver.go @@ -74,11 +74,11 @@ func init() { func (s receiverListAdapter) summariseItem(i int, includeNamespace bool, includeKind bool) []string { item := s.Items[i] status, msg := statusAndMessage(item.Status.Conditions) - return append(nameColumns(&item, includeNamespace, includeKind), status, msg, strings.Title(strconv.FormatBool(item.Spec.Suspend))) + return append(nameColumns(&item, includeNamespace, includeKind), strings.Title(strconv.FormatBool(item.Spec.Suspend)), status, msg) } func (s receiverListAdapter) headers(includeNamespace bool) []string { - headers := []string{"Name", "Ready", "Message", "Suspended"} + headers := []string{"Name", "Suspended", "Ready", "Message"} if includeNamespace { return append(namespaceHeader, headers...) } diff --git a/cmd/flux/get_source_bucket.go b/cmd/flux/get_source_bucket.go index 963a8ed4..87c7f86b 100644 --- a/cmd/flux/get_source_bucket.go +++ b/cmd/flux/get_source_bucket.go @@ -81,11 +81,11 @@ func (a *bucketListAdapter) summariseItem(i int, includeNamespace bool, includeK } status, msg := statusAndMessage(item.Status.Conditions) return append(nameColumns(&item, includeNamespace, includeKind), - status, msg, revision, strings.Title(strconv.FormatBool(item.Spec.Suspend))) + revision, strings.Title(strconv.FormatBool(item.Spec.Suspend)), status, msg) } func (a bucketListAdapter) headers(includeNamespace bool) []string { - headers := []string{"Name", "Ready", "Message", "Revision", "Suspended"} + headers := []string{"Name", "Revision", "Suspended", "Ready", "Message"} if includeNamespace { headers = append([]string{"Namespace"}, headers...) } diff --git a/cmd/flux/get_source_chart.go b/cmd/flux/get_source_chart.go index f5401791..5179dad3 100644 --- a/cmd/flux/get_source_chart.go +++ b/cmd/flux/get_source_chart.go @@ -81,11 +81,11 @@ func (a *helmChartListAdapter) summariseItem(i int, includeNamespace bool, inclu } status, msg := statusAndMessage(item.Status.Conditions) return append(nameColumns(&item, includeNamespace, includeKind), - status, msg, revision, strings.Title(strconv.FormatBool(item.Spec.Suspend))) + revision, strings.Title(strconv.FormatBool(item.Spec.Suspend)), status, msg) } func (a helmChartListAdapter) headers(includeNamespace bool) []string { - headers := []string{"Name", "Ready", "Message", "Revision", "Suspended"} + headers := []string{"Name", "Revision", "Suspended", "Ready", "Message"} if includeNamespace { headers = append([]string{"Namespace"}, headers...) } diff --git a/cmd/flux/get_source_git.go b/cmd/flux/get_source_git.go index 95b8ab4f..9690ee3a 100644 --- a/cmd/flux/get_source_git.go +++ b/cmd/flux/get_source_git.go @@ -86,11 +86,11 @@ func (a *gitRepositoryListAdapter) summariseItem(i int, includeNamespace bool, i msg = shortenCommitSha(msg) } return append(nameColumns(&item, includeNamespace, includeKind), - status, msg, revision, strings.Title(strconv.FormatBool(item.Spec.Suspend))) + revision, strings.Title(strconv.FormatBool(item.Spec.Suspend)), status, msg) } func (a gitRepositoryListAdapter) headers(includeNamespace bool) []string { - headers := []string{"Name", "Ready", "Message", "Revision", "Suspended"} + headers := []string{"Name", "Revision", "Suspended", "Ready", "Message"} if includeNamespace { headers = append([]string{"Namespace"}, headers...) } diff --git a/cmd/flux/get_source_helm.go b/cmd/flux/get_source_helm.go index cf98246b..d23ecd32 100644 --- a/cmd/flux/get_source_helm.go +++ b/cmd/flux/get_source_helm.go @@ -81,11 +81,11 @@ func (a *helmRepositoryListAdapter) summariseItem(i int, includeNamespace bool, } status, msg := statusAndMessage(item.Status.Conditions) return append(nameColumns(&item, includeNamespace, includeKind), - status, msg, revision, strings.Title(strconv.FormatBool(item.Spec.Suspend))) + revision, strings.Title(strconv.FormatBool(item.Spec.Suspend)), status, msg) } func (a helmRepositoryListAdapter) headers(includeNamespace bool) []string { - headers := []string{"Name", "Ready", "Message", "Revision", "Suspended"} + headers := []string{"Name", "Revision", "Suspended", "Ready", "Message"} if includeNamespace { headers = append([]string{"Namespace"}, headers...) } From edaf6ca522656a8a1c702cfa122848336e68bae8 Mon Sep 17 00:00:00 2001 From: Sunny Date: Thu, 24 Feb 2022 04:26:18 +0530 Subject: [PATCH 042/818] Add test flag -update to update the golden files Test flag `-update` can be used to update all the golden files whenever the CLI output changes. Signed-off-by: Sunny --- CONTRIBUTING.md | 7 +++++++ Makefile | 2 +- cmd/flux/main_test.go | 11 +++++++++++ .../helmrelease/get_helmrelease_from_git.golden | 4 ++-- cmd/flux/testdata/image/get_image_policy_regex.golden | 4 ++-- .../testdata/image/get_image_policy_semver.golden | 4 ++-- .../kustomization/get_kustomization_from_git.golden | 4 ++-- 7 files changed, 27 insertions(+), 9 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e60c9469..cafc531e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -96,6 +96,13 @@ Then you can run the end-to-end tests with: make e2e ``` +When the output of the Flux CLI changes, to automatically update the golden +files used in the test, pass `-update` flag to the test as: + +```bash +make e2e TEST_ARGS="-update" +``` + Teardown the e2e environment with: ```bash diff --git a/Makefile b/Makefile index 29ca788a..21149468 100644 --- a/Makefile +++ b/Makefile @@ -39,7 +39,7 @@ test: $(EMBEDDED_MANIFESTS_TARGET) tidy fmt vet install-envtest KUBEBUILDER_ASSETS="$(KUBEBUILDER_ASSETS)" go test ./... -coverprofile cover.out --tags=unit e2e: $(EMBEDDED_MANIFESTS_TARGET) tidy fmt vet - TEST_KUBECONFIG=$(TEST_KUBECONFIG) go test ./cmd/flux/... -coverprofile e2e.cover.out --tags=e2e -v -failfast + TEST_KUBECONFIG=$(TEST_KUBECONFIG) go test ./cmd/flux/... -coverprofile e2e.cover.out --tags=e2e -v -failfast $(TEST_ARGS) test-with-kind: install-envtest make setup-kind diff --git a/cmd/flux/main_test.go b/cmd/flux/main_test.go index c41eb3e6..5bc3f1ff 100644 --- a/cmd/flux/main_test.go +++ b/cmd/flux/main_test.go @@ -20,6 +20,7 @@ import ( "bufio" "bytes" "context" + "flag" "fmt" "io" "os" @@ -42,6 +43,9 @@ import ( var nextNamespaceId int64 +// update allows golden files to be updated based on the current output. +var update = flag.Bool("update", false, "update golden files") + // Return a unique namespace with the specified prefix, for tests to create // objects that won't collide with each other. func allocateNamespace(prefix string) string { @@ -298,6 +302,13 @@ func assertGoldenTemplateFile(goldenFile string, templateValues map[string]strin expectedOutput = string(goldenFileContents) } if assertErr := assertGoldenValue(expectedOutput)(output, err); assertErr != nil { + // Update the golden files if comparision fails and the update flag is set. + if *update && output != "" { + if err := os.WriteFile(goldenFile, []byte(output), 0644); err != nil { + return fmt.Errorf("failed to update golden file '%s': %v", goldenFile, err) + } + return nil + } return fmt.Errorf("Mismatch from golden file '%s': %v", goldenFile, assertErr) } return nil diff --git a/cmd/flux/testdata/helmrelease/get_helmrelease_from_git.golden b/cmd/flux/testdata/helmrelease/get_helmrelease_from_git.golden index 1cfeacc3..e802cb36 100644 --- a/cmd/flux/testdata/helmrelease/get_helmrelease_from_git.golden +++ b/cmd/flux/testdata/helmrelease/get_helmrelease_from_git.golden @@ -1,2 +1,2 @@ -NAME READY MESSAGE REVISION SUSPENDED -thrfg True Release reconciliation succeeded 6.0.0 False +NAME REVISION SUSPENDED READY MESSAGE +thrfg 6.0.0 False True Release reconciliation succeeded diff --git a/cmd/flux/testdata/image/get_image_policy_regex.golden b/cmd/flux/testdata/image/get_image_policy_regex.golden index 8486fb1f..b7cf40a9 100644 --- a/cmd/flux/testdata/image/get_image_policy_regex.golden +++ b/cmd/flux/testdata/image/get_image_policy_regex.golden @@ -1,2 +1,2 @@ -NAME READY MESSAGE LATEST IMAGE -podinfo-regex True Latest image tag for 'ghcr.io/stefanprodan/podinfo' resolved to: 5.0.0 ghcr.io/stefanprodan/podinfo:5.0.0 +NAME LATEST IMAGE READY MESSAGE +podinfo-regex ghcr.io/stefanprodan/podinfo:5.0.0 True Latest image tag for 'ghcr.io/stefanprodan/podinfo' resolved to: 5.0.0 diff --git a/cmd/flux/testdata/image/get_image_policy_semver.golden b/cmd/flux/testdata/image/get_image_policy_semver.golden index 6f8a17dd..30ce52b7 100644 --- a/cmd/flux/testdata/image/get_image_policy_semver.golden +++ b/cmd/flux/testdata/image/get_image_policy_semver.golden @@ -1,2 +1,2 @@ -NAME READY MESSAGE LATEST IMAGE -podinfo-semver True Latest image tag for 'ghcr.io/stefanprodan/podinfo' resolved to: 5.0.3 ghcr.io/stefanprodan/podinfo:5.0.3 +NAME LATEST IMAGE READY MESSAGE +podinfo-semver ghcr.io/stefanprodan/podinfo:5.0.3 True Latest image tag for 'ghcr.io/stefanprodan/podinfo' resolved to: 5.0.3 diff --git a/cmd/flux/testdata/kustomization/get_kustomization_from_git.golden b/cmd/flux/testdata/kustomization/get_kustomization_from_git.golden index a613aa34..b4f7e31c 100644 --- a/cmd/flux/testdata/kustomization/get_kustomization_from_git.golden +++ b/cmd/flux/testdata/kustomization/get_kustomization_from_git.golden @@ -1,2 +1,2 @@ -NAME READY MESSAGE REVISION SUSPENDED -tkfg True Applied revision: 6.0.0/627d5c4 6.0.0/627d5c4 False +NAME REVISION SUSPENDED READY MESSAGE +tkfg 6.0.0/627d5c4 False True Applied revision: 6.0.0/627d5c4 From 2c4c3fd7490c3d3f57598d5cb8820715b02d7b3d Mon Sep 17 00:00:00 2001 From: Sunny Date: Mon, 28 Feb 2022 08:56:08 +0530 Subject: [PATCH 043/818] test: ignore golden template files with -update Add a template values check in the `assertGoldenTemplateFile()` function to only update golden files if they aren't templates. A note is printed when an update to a template golden file is needed and `-update` flag can't update it. Signed-off-by: Sunny --- CONTRIBUTING.md | 12 ++++++++++++ Makefile | 6 ++++-- cmd/flux/main_test.go | 11 ++++++++--- 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index cafc531e..58ce5039 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -103,6 +103,18 @@ files used in the test, pass `-update` flag to the test as: make e2e TEST_ARGS="-update" ``` +Since not all packages use golden files for testing, `-update` argument must be +passed only for the packages that use golden files. Use the variables +`TEST_PKG_PATH` for unit tests and `E2E_TEST_PKG_PATH` for e2e tests, to set the +path of the target test package: + +```bash +# Unit test +make test TEST_PKG_PATH="./cmd/flux" TEST_ARGS="-update" +# e2e test +make e2e E2E_TEST_PKG_PATH="./cmd/flux" TEST_ARGS="-update" +``` + Teardown the e2e environment with: ```bash diff --git a/Makefile b/Makefile index 21149468..5fd6f05f 100644 --- a/Makefile +++ b/Makefile @@ -35,11 +35,13 @@ cleanup-kind: rm $(TEST_KUBECONFIG) KUBEBUILDER_ASSETS?="$(shell $(ENVTEST) --arch=$(ENVTEST_ARCH) use -i $(ENVTEST_KUBERNETES_VERSION) --bin-dir=$(ENVTEST_ASSETS_DIR) -p path)" +TEST_PKG_PATH="./..." test: $(EMBEDDED_MANIFESTS_TARGET) tidy fmt vet install-envtest - KUBEBUILDER_ASSETS="$(KUBEBUILDER_ASSETS)" go test ./... -coverprofile cover.out --tags=unit + KUBEBUILDER_ASSETS="$(KUBEBUILDER_ASSETS)" go test $(TEST_PKG_PATH) -coverprofile cover.out --tags=unit $(TEST_ARGS) +E2E_TEST_PKG_PATH="./cmd/flux/..." e2e: $(EMBEDDED_MANIFESTS_TARGET) tidy fmt vet - TEST_KUBECONFIG=$(TEST_KUBECONFIG) go test ./cmd/flux/... -coverprofile e2e.cover.out --tags=e2e -v -failfast $(TEST_ARGS) + TEST_KUBECONFIG=$(TEST_KUBECONFIG) go test $(E2E_TEST_PKG_PATH) -coverprofile e2e.cover.out --tags=e2e -v -failfast $(TEST_ARGS) test-with-kind: install-envtest make setup-kind diff --git a/cmd/flux/main_test.go b/cmd/flux/main_test.go index 5bc3f1ff..4408c8d7 100644 --- a/cmd/flux/main_test.go +++ b/cmd/flux/main_test.go @@ -304,10 +304,15 @@ func assertGoldenTemplateFile(goldenFile string, templateValues map[string]strin if assertErr := assertGoldenValue(expectedOutput)(output, err); assertErr != nil { // Update the golden files if comparision fails and the update flag is set. if *update && output != "" { - if err := os.WriteFile(goldenFile, []byte(output), 0644); err != nil { - return fmt.Errorf("failed to update golden file '%s': %v", goldenFile, err) + // Skip update if there are template values. + if len(templateValues) > 0 { + fmt.Println("NOTE: -update flag passed but golden template files can't be updated, please update it manually") + } else { + if err := os.WriteFile(goldenFile, []byte(output), 0644); err != nil { + return fmt.Errorf("failed to update golden file '%s': %v", goldenFile, err) + } + return nil } - return nil } return fmt.Errorf("Mismatch from golden file '%s': %v", goldenFile, assertErr) } From 3c72e3538106208aceeeff25101b15163a8a9fff Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Tue, 1 Mar 2022 15:07:34 +0000 Subject: [PATCH 044/818] Update toolkit components - image-automation-controller to v0.20.1 https://github.com/fluxcd/image-automation-controller/blob/v0.20.1/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 2 +- go.sum | 4 ++-- .../bases/image-automation-controller/kustomization.yaml | 4 ++-- manifests/crds/kustomization.yaml | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index f6a18368..43e72fa9 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/cyphar/filepath-securejoin v0.2.2 github.com/fluxcd/go-git-providers v0.5.4 github.com/fluxcd/helm-controller/api v0.17.1 - github.com/fluxcd/image-automation-controller/api v0.20.0 + github.com/fluxcd/image-automation-controller/api v0.20.1 github.com/fluxcd/image-reflector-controller/api v0.16.0 github.com/fluxcd/kustomize-controller/api v0.21.1 github.com/fluxcd/notification-controller/api v0.22.2 diff --git a/go.sum b/go.sum index 0e84ca26..00c703f7 100644 --- a/go.sum +++ b/go.sum @@ -256,8 +256,8 @@ github.com/fluxcd/go-git-providers v0.5.4 h1:MnByjsmXa8rMt2hTmhmtbocq7YIsTlwZKrj github.com/fluxcd/go-git-providers v0.5.4/go.mod h1:4jTHTmSx3rFGnG78KUVgFYeG6vWFnKwUSr2mi31tvp8= github.com/fluxcd/helm-controller/api v0.17.1 h1:nqoOOBkVxssvvE8lezGAqVI89WX/HX6Ddxen6g2JxwM= github.com/fluxcd/helm-controller/api v0.17.1/go.mod h1:ajkvxpv3mwzr/+H3iKpcnHW9qsOrIqNakalyGzQXduM= -github.com/fluxcd/image-automation-controller/api v0.20.0 h1:Z+lxqif0KwccsuNOBZq5M96RXCPxtm4Xt8siC1kR6H8= -github.com/fluxcd/image-automation-controller/api v0.20.0/go.mod h1:XhLYccGUbmJvTTpJ1jAFKZHr2e1GNXy0T85ZBO50mik= +github.com/fluxcd/image-automation-controller/api v0.20.1 h1:7KbRDGC0Gp0E64SNgpU/qsWx2Y14I6SCCpw0UaeaWE4= +github.com/fluxcd/image-automation-controller/api v0.20.1/go.mod h1:XhLYccGUbmJvTTpJ1jAFKZHr2e1GNXy0T85ZBO50mik= github.com/fluxcd/image-reflector-controller/api v0.16.0 h1:1O1YdoK7LsJgWLyvfZTSbvQcUQCBcgJ573HA0arlQQY= github.com/fluxcd/image-reflector-controller/api v0.16.0/go.mod h1:OIe3mSXc3OwQiNbiQ9vNXWYtNif31hc7WAbZWlFUUnc= github.com/fluxcd/kustomize-controller/api v0.21.1 h1:Abusz7ZxwD7bdWCsXLefowOi3e5DqPk5T+BvdbOYpK8= diff --git a/manifests/bases/image-automation-controller/kustomization.yaml b/manifests/bases/image-automation-controller/kustomization.yaml index d6b10f10..aa54c473 100644 --- a/manifests/bases/image-automation-controller/kustomization.yaml +++ b/manifests/bases/image-automation-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.20.0/image-automation-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.20.0/image-automation-controller.deployment.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.20.1/image-automation-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.20.1/image-automation-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index 21f48369..1a606a61 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -6,4 +6,4 @@ resources: - https://github.com/fluxcd/helm-controller/releases/download/v0.17.1/helm-controller.crds.yaml - https://github.com/fluxcd/notification-controller/releases/download/v0.22.2/notification-controller.crds.yaml - https://github.com/fluxcd/image-reflector-controller/releases/download/v0.16.0/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.20.0/image-automation-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.20.1/image-automation-controller.crds.yaml From 1fda202cf9c9728c2aa7e1e3f019e2a4209c3364 Mon Sep 17 00:00:00 2001 From: cuishuang Date: Wed, 2 Mar 2022 18:04:35 +0800 Subject: [PATCH 045/818] all: fix some typos Signed-off-by: cuishuang --- cmd/flux/create_source_git.go | 2 +- cmd/flux/main_test.go | 2 +- pkg/manifestgen/install/manifests.go | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cmd/flux/create_source_git.go b/cmd/flux/create_source_git.go index 2f13dd9c..b8e4d6ae 100644 --- a/cmd/flux/create_source_git.go +++ b/cmd/flux/create_source_git.go @@ -169,7 +169,7 @@ func createSourceGitCmdRun(cmd *cobra.Command, args []string) error { } if sourceGitArgs.caFile != "" && u.Scheme == "ssh" { - return fmt.Errorf("specifing a CA file is not supported for Git over SSH") + return fmt.Errorf("specifying a CA file is not supported for Git over SSH") } if sourceGitArgs.recurseSubmodules && sourceGitArgs.gitImplementation == sourcev1.LibGit2Implementation { diff --git a/cmd/flux/main_test.go b/cmd/flux/main_test.go index 4408c8d7..23d9d58f 100644 --- a/cmd/flux/main_test.go +++ b/cmd/flux/main_test.go @@ -302,7 +302,7 @@ func assertGoldenTemplateFile(goldenFile string, templateValues map[string]strin expectedOutput = string(goldenFileContents) } if assertErr := assertGoldenValue(expectedOutput)(output, err); assertErr != nil { - // Update the golden files if comparision fails and the update flag is set. + // Update the golden files if comparison fails and the update flag is set. if *update && output != "" { // Skip update if there are template values. if len(templateValues) > 0 { diff --git a/pkg/manifestgen/install/manifests.go b/pkg/manifestgen/install/manifests.go index 5089074f..23d6a3cc 100644 --- a/pkg/manifestgen/install/manifests.go +++ b/pkg/manifestgen/install/manifests.go @@ -71,7 +71,7 @@ func generate(base string, options Options) error { // In such environments they normally add `.cluster.local` and `.local` // suffixes to `no_proxy` variable in order to prevent cluster-local // traffic from going through http proxy. Without fully specified - // domain they need to mention `notifications-controller` explicity in + // domain they need to mention `notifications-controller` explicitly in // `no_proxy` variable after debugging http proxy logs. options.EventsAddr = fmt.Sprintf("http://%s.%s.svc.%s/", options.NotificationController, options.Namespace, options.ClusterDomain) } From 7359e63960983cd98b213b433c51becbf2fa5394 Mon Sep 17 00:00:00 2001 From: Soule BA Date: Mon, 7 Mar 2022 12:05:53 +0100 Subject: [PATCH 046/818] Introduce a printer interface for flux resource If implemented, there will a common interface to print flux resource. We are adding new way to print resource information e.g. diff of objects. Signed-off-by: Soule BA --- cmd/flux/get.go | 16 +++++++-- internal/build/diff.go | 12 +++---- internal/utils/utils.go | 19 ---------- pkg/printers/dyff.go | 56 ++++++++++++++++++++++++++++++ pkg/printers/interface.go | 33 ++++++++++++++++++ pkg/printers/table_printer.go | 65 +++++++++++++++++++++++++++++++++++ 6 files changed, 171 insertions(+), 30 deletions(-) create mode 100644 pkg/printers/dyff.go create mode 100644 pkg/printers/interface.go create mode 100644 pkg/printers/table_printer.go diff --git a/cmd/flux/get.go b/cmd/flux/get.go index f52fd496..29fa1c2d 100644 --- a/cmd/flux/get.go +++ b/cmd/flux/get.go @@ -33,6 +33,7 @@ import ( "github.com/fluxcd/pkg/apis/meta" "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/flux2/pkg/printers" ) type deriveType func(runtime.Object) (summarisable, error) @@ -177,7 +178,10 @@ func (get getCommand) run(cmd *cobra.Command, args []string) error { return err } - utils.PrintTable(cmd.OutOrStdout(), header, rows) + err = printers.TablePrinter(header).Print(cmd.OutOrStdout(), rows) + if err != nil { + return err + } if getAll { fmt.Println() @@ -242,10 +246,16 @@ func watchUntil(ctx context.Context, w watch.Interface, get *getCommand) (bool, return false, err } if firstIteration { - utils.PrintTable(os.Stdout, header, rows) + err = printers.TablePrinter(header).Print(os.Stdout, rows) + if err != nil { + return false, err + } firstIteration = false } else { - utils.PrintTable(os.Stdout, []string{}, rows) + err = printers.TablePrinter([]string{}).Print(os.Stdout, rows) + if err != nil { + return false, err + } } return false, nil diff --git a/internal/build/diff.go b/internal/build/diff.go index 4c6b6efa..b955989c 100644 --- a/internal/build/diff.go +++ b/internal/build/diff.go @@ -27,6 +27,7 @@ import ( "sort" "strings" + "github.com/fluxcd/flux2/pkg/printers" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" "github.com/fluxcd/pkg/ssa" "github.com/gonvenience/bunt" @@ -112,7 +113,7 @@ func (b *Builder) Diff() (string, bool, error) { } if change.Action == string(ssa.ConfiguredAction) { - output.WriteString(writeString(fmt.Sprintf("► %s drifted\n", change.Subject), bunt.WhiteSmoke)) + output.WriteString(bunt.Sprint(fmt.Sprintf("► %s drifted\n", change.Subject))) liveFile, mergedFile, tmpDir, err := writeYamls(liveObject, mergedObject) if err != nil { return "", createdOrDrifted, err @@ -204,14 +205,9 @@ func diff(liveFile, mergedFile string, output io.Writer) error { return fmt.Errorf("failed to compare input files: %w", err) } - reportWriter := &dyff.HumanReport{ - Report: report, - OmitHeader: true, - } + printer := printers.NewDyffPrinter() - if err := reportWriter.WriteReport(output); err != nil { - return fmt.Errorf("failed to print report: %w", err) - } + printer.Print(output, report) return nil } diff --git a/internal/utils/utils.go b/internal/utils/utils.go index 361b9448..cdadeaa4 100644 --- a/internal/utils/utils.go +++ b/internal/utils/utils.go @@ -27,7 +27,6 @@ import ( "runtime" "strings" - "github.com/olekukonko/tablewriter" appsv1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" networkingv1 "k8s.io/api/networking/v1" @@ -247,24 +246,6 @@ func MakeDependsOn(deps []string) []dependency.CrossNamespaceDependencyReference return refs } -func PrintTable(writer io.Writer, header []string, rows [][]string) { - table := tablewriter.NewWriter(writer) - table.SetHeader(header) - table.SetAutoWrapText(false) - table.SetAutoFormatHeaders(true) - table.SetHeaderAlignment(tablewriter.ALIGN_LEFT) - table.SetAlignment(tablewriter.ALIGN_LEFT) - table.SetCenterSeparator("") - table.SetColumnSeparator("") - table.SetRowSeparator("") - table.SetHeaderLine(false) - table.SetBorder(false) - table.SetTablePadding("\t") - table.SetNoWhiteSpace(true) - table.AppendBulk(rows) - table.Render() -} - func ValidateComponents(components []string) error { defaults := install.MakeDefaultOptions() bootstrapAllComponents := append(defaults.Components, defaults.ComponentsExtra...) diff --git a/pkg/printers/dyff.go b/pkg/printers/dyff.go new file mode 100644 index 00000000..50db14d2 --- /dev/null +++ b/pkg/printers/dyff.go @@ -0,0 +1,56 @@ +/* +Copyright 2022 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package printers + +import ( + "fmt" + "io" + + "github.com/homeport/dyff/pkg/dyff" +) + +// DyffPrinter is a printer that prints dyff reports. +type DyffPrinter struct { + OmitHeader bool +} + +// NewDyffPrinter returns a new DyffPrinter. +func NewDyffPrinter() *DyffPrinter { + return &DyffPrinter{ + OmitHeader: true, + } +} + +// Print prints the given args to the given writer. +func (p *DyffPrinter) Print(w io.Writer, args ...interface{}) error { + for _, arg := range args { + switch arg := arg.(type) { + case dyff.Report: + reportWriter := &dyff.HumanReport{ + Report: arg, + OmitHeader: p.OmitHeader, + } + + if err := reportWriter.WriteReport(w); err != nil { + return fmt.Errorf("failed to print report: %w", err) + } + default: + return fmt.Errorf("unsupported type %T", arg) + } + } + return nil +} diff --git a/pkg/printers/interface.go b/pkg/printers/interface.go new file mode 100644 index 00000000..e01600e5 --- /dev/null +++ b/pkg/printers/interface.go @@ -0,0 +1,33 @@ +/* +Copyright 2022 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package printers + +import "io" + +// Printer is an interface for printing Flux cmd outputs. +type Printer interface { + // Print prints the given args to the given writer. + Print(io.Writer, ...interface{}) error +} + +// PrinterFunc is a function that can print args to a writer. +type PrinterFunc func(w io.Writer, args ...interface{}) error + +// Print implements Printer +func (fn PrinterFunc) Print(w io.Writer, args ...interface{}) error { + return fn(w, args) +} diff --git a/pkg/printers/table_printer.go b/pkg/printers/table_printer.go new file mode 100644 index 00000000..716166ab --- /dev/null +++ b/pkg/printers/table_printer.go @@ -0,0 +1,65 @@ +/* +Copyright 2022 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package printers + +import ( + "fmt" + "io" + + "github.com/olekukonko/tablewriter" +) + +// TablePrinter is a printer that prints Flux cmd outputs. +func TablePrinter(header []string) PrinterFunc { + return func(w io.Writer, args ...interface{}) error { + var rows [][]string + for _, arg := range args { + switch arg := arg.(type) { + case []interface{}: + for _, v := range arg { + s, ok := v.([][]string) + if !ok { + return fmt.Errorf("unsupported type %T", v) + } + for i := range s { + rows = append(rows, s[i]) + } + } + default: + return fmt.Errorf("unsupported type %T", arg) + } + } + + table := tablewriter.NewWriter(w) + table.SetHeader(header) + table.SetAutoWrapText(false) + table.SetAutoFormatHeaders(true) + table.SetHeaderAlignment(tablewriter.ALIGN_LEFT) + table.SetAlignment(tablewriter.ALIGN_LEFT) + table.SetCenterSeparator("") + table.SetColumnSeparator("") + table.SetRowSeparator("") + table.SetHeaderLine(false) + table.SetBorder(false) + table.SetTablePadding("\t") + table.SetNoWhiteSpace(true) + table.AppendBulk(rows) + table.Render() + + return nil + } +} From 2e1000c31a9598fbdd747ac12e5eba46958b20eb Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Fri, 11 Mar 2022 09:19:56 +0200 Subject: [PATCH 047/818] Add components-extra example usage to CLI help Signed-off-by: Stefan Prodan --- cmd/flux/bootstrap.go | 2 +- cmd/flux/install.go | 11 +++++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/cmd/flux/bootstrap.go b/cmd/flux/bootstrap.go index 278da91a..b4b319ef 100644 --- a/cmd/flux/bootstrap.go +++ b/cmd/flux/bootstrap.go @@ -88,7 +88,7 @@ func init() { bootstrapCmd.PersistentFlags().StringSliceVar(&bootstrapArgs.defaultComponents, "components", rootArgs.defaults.Components, "list of components, accepts comma-separated values") bootstrapCmd.PersistentFlags().StringSliceVar(&bootstrapArgs.extraComponents, "components-extra", nil, - "list of components in addition to those supplied or defaulted, accepts comma-separated values") + "list of components in addition to those supplied or defaulted, accepts values such as 'image-reflector-controller,image-automation-controller'") bootstrapCmd.PersistentFlags().StringVar(&bootstrapArgs.registry, "registry", "ghcr.io/fluxcd", "container registry where the toolkit images are published") diff --git a/cmd/flux/install.go b/cmd/flux/install.go index 9032929b..11e6ee77 100644 --- a/cmd/flux/install.go +++ b/cmd/flux/install.go @@ -37,10 +37,13 @@ var installCmd = &cobra.Command{ Long: `The install command deploys Flux in the specified namespace. If a previous version is installed, then an in-place upgrade will be performed.`, Example: ` # Install the latest version in the flux-system namespace - flux install --version=latest --namespace=flux-system + flux install --namespace=flux-system - # Install a specific version and a series of components - flux install --version=v0.0.7 --components="source-controller,kustomize-controller" + # Install a specific series of components + flux install --components="source-controller,kustomize-controller" + + # Install all components including the image automation ones + flux install --components-extra="image-reflector-controller,image-automation-controller" # Install Flux onto tainted Kubernetes nodes flux install --toleration-keys=node.kubernetes.io/dedicated-to-flux @@ -84,7 +87,7 @@ func init() { installCmd.Flags().StringSliceVar(&installArgs.defaultComponents, "components", rootArgs.defaults.Components, "list of components, accepts comma-separated values") installCmd.Flags().StringSliceVar(&installArgs.extraComponents, "components-extra", nil, - "list of components in addition to those supplied or defaulted, accepts comma-separated values") + "list of components in addition to those supplied or defaulted, accepts values such as 'image-reflector-controller,image-automation-controller'") installCmd.Flags().StringVar(&installArgs.manifestsPath, "manifests", "", "path to the manifest directory") installCmd.Flags().StringVar(&installArgs.registry, "registry", rootArgs.defaults.Registry, "container registry where the toolkit images are published") From ff65491bb611fbf6b3fdf485c8fe4be43b9bab40 Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Tue, 15 Mar 2022 20:41:25 +0000 Subject: [PATCH 048/818] Update toolkit components - helm-controller to v0.17.2 https://github.com/fluxcd/helm-controller/blob/v0.17.2/CHANGELOG.md - notification-controller to v0.22.3 https://github.com/fluxcd/notification-controller/blob/v0.22.3/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 4 ++-- go.sum | 8 ++++---- manifests/bases/helm-controller/kustomization.yaml | 4 ++-- .../bases/notification-controller/kustomization.yaml | 4 ++-- manifests/crds/kustomization.yaml | 4 ++-- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/go.mod b/go.mod index 43e72fa9..b38b5cb0 100644 --- a/go.mod +++ b/go.mod @@ -7,11 +7,11 @@ require ( github.com/ProtonMail/go-crypto v0.0.0-20211221144345-a4f6767435ab github.com/cyphar/filepath-securejoin v0.2.2 github.com/fluxcd/go-git-providers v0.5.4 - github.com/fluxcd/helm-controller/api v0.17.1 + github.com/fluxcd/helm-controller/api v0.17.2 github.com/fluxcd/image-automation-controller/api v0.20.1 github.com/fluxcd/image-reflector-controller/api v0.16.0 github.com/fluxcd/kustomize-controller/api v0.21.1 - github.com/fluxcd/notification-controller/api v0.22.2 + github.com/fluxcd/notification-controller/api v0.22.3 github.com/fluxcd/pkg/apis/meta v0.10.2 github.com/fluxcd/pkg/kustomize v0.0.2 github.com/fluxcd/pkg/runtime v0.12.5 diff --git a/go.sum b/go.sum index 00c703f7..390a3fd4 100644 --- a/go.sum +++ b/go.sum @@ -254,16 +254,16 @@ github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYF github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fluxcd/go-git-providers v0.5.4 h1:MnByjsmXa8rMt2hTmhmtbocq7YIsTlwZKrj9lAsob4Q= github.com/fluxcd/go-git-providers v0.5.4/go.mod h1:4jTHTmSx3rFGnG78KUVgFYeG6vWFnKwUSr2mi31tvp8= -github.com/fluxcd/helm-controller/api v0.17.1 h1:nqoOOBkVxssvvE8lezGAqVI89WX/HX6Ddxen6g2JxwM= -github.com/fluxcd/helm-controller/api v0.17.1/go.mod h1:ajkvxpv3mwzr/+H3iKpcnHW9qsOrIqNakalyGzQXduM= +github.com/fluxcd/helm-controller/api v0.17.2 h1:o/9BYA+DP5aC1o5ZT0Gfmtqraw6hGctaHTBjM6/3rls= +github.com/fluxcd/helm-controller/api v0.17.2/go.mod h1:ajkvxpv3mwzr/+H3iKpcnHW9qsOrIqNakalyGzQXduM= github.com/fluxcd/image-automation-controller/api v0.20.1 h1:7KbRDGC0Gp0E64SNgpU/qsWx2Y14I6SCCpw0UaeaWE4= github.com/fluxcd/image-automation-controller/api v0.20.1/go.mod h1:XhLYccGUbmJvTTpJ1jAFKZHr2e1GNXy0T85ZBO50mik= github.com/fluxcd/image-reflector-controller/api v0.16.0 h1:1O1YdoK7LsJgWLyvfZTSbvQcUQCBcgJ573HA0arlQQY= github.com/fluxcd/image-reflector-controller/api v0.16.0/go.mod h1:OIe3mSXc3OwQiNbiQ9vNXWYtNif31hc7WAbZWlFUUnc= github.com/fluxcd/kustomize-controller/api v0.21.1 h1:Abusz7ZxwD7bdWCsXLefowOi3e5DqPk5T+BvdbOYpK8= github.com/fluxcd/kustomize-controller/api v0.21.1/go.mod h1:LhESmzZMC//KGeSSDE31ZTw/J9CCXbuJpb4DwvL28kM= -github.com/fluxcd/notification-controller/api v0.22.2 h1:uD4l0A9ihY55AAgRKjgvixlG5+KAUf/6X1WZXvXBjP0= -github.com/fluxcd/notification-controller/api v0.22.2/go.mod h1:gA9/j0kjh7VDuUC2Cubr9twxOdzb/0+ojcE9Lzsc9ug= +github.com/fluxcd/notification-controller/api v0.22.3 h1:knwdzBYr7bosaGMXAbiywB/sebVwoFPnAy25n4y8y10= +github.com/fluxcd/notification-controller/api v0.22.3/go.mod h1:gA9/j0kjh7VDuUC2Cubr9twxOdzb/0+ojcE9Lzsc9ug= github.com/fluxcd/pkg/apis/acl v0.0.3 h1:Lw0ZHdpnO4G7Zy9KjrzwwBmDZQuy4qEjaU/RvA6k1lc= github.com/fluxcd/pkg/apis/acl v0.0.3/go.mod h1:XPts6lRJ9C9fIF9xVWofmQwftvhY25n1ps7W9xw0XLU= github.com/fluxcd/pkg/apis/kustomize v0.3.1 h1:wmb5D9e1+Rr3/5O3235ERuj+h2VKUArVfYYk68QKP+w= diff --git a/manifests/bases/helm-controller/kustomization.yaml b/manifests/bases/helm-controller/kustomization.yaml index 6c2d5d7e..4b4b3a87 100644 --- a/manifests/bases/helm-controller/kustomization.yaml +++ b/manifests/bases/helm-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/helm-controller/releases/download/v0.17.1/helm-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.17.1/helm-controller.deployment.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.17.2/helm-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.17.2/helm-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/notification-controller/kustomization.yaml b/manifests/bases/notification-controller/kustomization.yaml index 7c39faff..14e389b3 100644 --- a/manifests/bases/notification-controller/kustomization.yaml +++ b/manifests/bases/notification-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/notification-controller/releases/download/v0.22.2/notification-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v0.22.2/notification-controller.deployment.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.22.3/notification-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.22.3/notification-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index 1a606a61..8340b3d6 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -3,7 +3,7 @@ kind: Kustomization resources: - https://github.com/fluxcd/source-controller/releases/download/v0.21.2/source-controller.crds.yaml - https://github.com/fluxcd/kustomize-controller/releases/download/v0.21.1/kustomize-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.17.1/helm-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v0.22.2/notification-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.17.2/helm-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.22.3/notification-controller.crds.yaml - https://github.com/fluxcd/image-reflector-controller/releases/download/v0.16.0/image-reflector-controller.crds.yaml - https://github.com/fluxcd/image-automation-controller/releases/download/v0.20.1/image-automation-controller.crds.yaml From 7756faec1f30ae721e2569d13d42daea72955a0a Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Tue, 22 Mar 2022 15:16:39 +0200 Subject: [PATCH 049/818] Retry bootstrap operations on Git conflict errors When running bootstrap in-parallel for many clusters that target the same repository, the 2nd commit with the sync files fails with ` non-fast-forward update`. We now detect the conflict, and we retry the operations by creating a fresh clone from upstream. Signed-off-by: Stefan Prodan --- internal/bootstrap/bootstrap_plain_git.go | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/internal/bootstrap/bootstrap_plain_git.go b/internal/bootstrap/bootstrap_plain_git.go index f661e936..a5979476 100644 --- a/internal/bootstrap/bootstrap_plain_git.go +++ b/internal/bootstrap/bootstrap_plain_git.go @@ -24,6 +24,7 @@ import ( "strings" "time" + gogit "github.com/go-git/go-git/v5" corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/util/wait" @@ -287,10 +288,28 @@ func (b *PlainGitBootstrapper) ReconcileSyncConfig(ctx context.Context, options if err != nil && err != git.ErrNoStagedFiles { return fmt.Errorf("failed to commit sync manifests: %w", err) } + if err == nil { b.logger.Successf("committed sync manifests to %q (%q)", b.branch, commit) b.logger.Actionf("pushing sync manifests to %q", b.url) - if err = b.git.Push(ctx, b.caBundle); err != nil { + err = b.git.Push(ctx, b.caBundle) + if err != nil { + if strings.HasPrefix(err.Error(), gogit.ErrNonFastForwardUpdate.Error()) { + b.logger.Waitingf("git conflict detected, retrying with a fresh clone") + if err := os.RemoveAll(b.git.Path()); err != nil { + return fmt.Errorf("failed to remove tmp dir: %w", err) + } + if err := os.Mkdir(b.git.Path(), 0o700); err != nil { + return fmt.Errorf("failed to recreate tmp dir: %w", err) + } + if err = retry(1, 2*time.Second, func() (err error) { + _, err = b.git.Clone(ctx, b.url, b.branch, b.caBundle) + return + }); err != nil { + return fmt.Errorf("failed to clone repository: %w", err) + } + return b.ReconcileSyncConfig(ctx, options) + } return fmt.Errorf("failed to push sync manifests: %w", err) } } else { From 139bbbb87c0130ab4f5e0b4a69b617a59b17cfa9 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 23 Mar 2022 11:55:35 +0200 Subject: [PATCH 050/818] Use absolute domain name for the events address Add ending dot to the events address to be consistent with source controller address. This will affect bootstrap and install by setting `--events-addr=http://notification-controller.flux-system.svc.cluster.local./`. Signed-off-by: Stefan Prodan --- manifests/bases/helm-controller/patch.yaml | 2 +- manifests/bases/image-automation-controller/patch.yaml | 2 +- manifests/bases/image-reflector-controller/patch.yaml | 2 +- manifests/bases/kustomize-controller/patch.yaml | 2 +- manifests/bases/source-controller/patch.yaml | 2 +- pkg/manifestgen/install/manifests.go | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/manifests/bases/helm-controller/patch.yaml b/manifests/bases/helm-controller/patch.yaml index 59ea939b..fe49320a 100644 --- a/manifests/bases/helm-controller/patch.yaml +++ b/manifests/bases/helm-controller/patch.yaml @@ -1,6 +1,6 @@ - op: add path: /spec/template/spec/containers/0/args/0 - value: --events-addr=http://notification-controller/ + value: --events-addr=http://notification-controller.flux-system.svc.cluster.local./ - op: add path: /spec/template/spec/serviceAccountName value: helm-controller diff --git a/manifests/bases/image-automation-controller/patch.yaml b/manifests/bases/image-automation-controller/patch.yaml index 4015f0f8..63d261ed 100644 --- a/manifests/bases/image-automation-controller/patch.yaml +++ b/manifests/bases/image-automation-controller/patch.yaml @@ -1,6 +1,6 @@ - op: add path: /spec/template/spec/containers/0/args/0 - value: --events-addr=http://notification-controller/ + value: --events-addr=http://notification-controller.flux-system.svc.cluster.local./ - op: add path: /spec/template/spec/serviceAccountName value: image-automation-controller diff --git a/manifests/bases/image-reflector-controller/patch.yaml b/manifests/bases/image-reflector-controller/patch.yaml index 39814a23..1db56bf2 100644 --- a/manifests/bases/image-reflector-controller/patch.yaml +++ b/manifests/bases/image-reflector-controller/patch.yaml @@ -1,6 +1,6 @@ - op: add path: /spec/template/spec/containers/0/args/0 - value: --events-addr=http://notification-controller/ + value: --events-addr=http://notification-controller.flux-system.svc.cluster.local./ - op: add path: /spec/template/spec/serviceAccountName value: image-reflector-controller diff --git a/manifests/bases/kustomize-controller/patch.yaml b/manifests/bases/kustomize-controller/patch.yaml index 380cdfbd..aa588b2b 100644 --- a/manifests/bases/kustomize-controller/patch.yaml +++ b/manifests/bases/kustomize-controller/patch.yaml @@ -1,6 +1,6 @@ - op: add path: /spec/template/spec/containers/0/args/0 - value: --events-addr=http://notification-controller/ + value: --events-addr=http://notification-controller.flux-system.svc.cluster.local./ - op: add path: /spec/template/spec/serviceAccountName value: kustomize-controller diff --git a/manifests/bases/source-controller/patch.yaml b/manifests/bases/source-controller/patch.yaml index 15c1d28e..911d1865 100644 --- a/manifests/bases/source-controller/patch.yaml +++ b/manifests/bases/source-controller/patch.yaml @@ -1,6 +1,6 @@ - op: add path: /spec/template/spec/containers/0/args/0 - value: --events-addr=http://notification-controller/ + value: --events-addr=http://notification-controller.flux-system.svc.cluster.local./ - op: add path: /spec/template/spec/serviceAccountName value: source-controller diff --git a/pkg/manifestgen/install/manifests.go b/pkg/manifestgen/install/manifests.go index 23d6a3cc..3a584ba1 100644 --- a/pkg/manifestgen/install/manifests.go +++ b/pkg/manifestgen/install/manifests.go @@ -73,7 +73,7 @@ func generate(base string, options Options) error { // traffic from going through http proxy. Without fully specified // domain they need to mention `notifications-controller` explicitly in // `no_proxy` variable after debugging http proxy logs. - options.EventsAddr = fmt.Sprintf("http://%s.%s.svc.%s/", options.NotificationController, options.Namespace, options.ClusterDomain) + options.EventsAddr = fmt.Sprintf("http://%s.%s.svc.%s./", options.NotificationController, options.Namespace, options.ClusterDomain) } if err := execTemplate(options, namespaceTmpl, path.Join(base, "namespace.yaml")); err != nil { From a929d249249020a3f3ed7392849f889246b579df Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Tue, 22 Mar 2022 15:13:38 +0000 Subject: [PATCH 051/818] Update toolkit components - helm-controller to v0.18.0 https://github.com/fluxcd/helm-controller/blob/v0.18.0/CHANGELOG.md - kustomize-controller to v0.22.0 https://github.com/fluxcd/kustomize-controller/blob/v0.22.0/CHANGELOG.md - source-controller to v0.22.0 https://github.com/fluxcd/source-controller/blob/v0.22.0/CHANGELOG.md - notification-controller to v0.23.0 https://github.com/fluxcd/notification-controller/blob/v0.23.0/CHANGELOG.md - image-reflector-controller to v0.17.0 https://github.com/fluxcd/image-reflector-controller/blob/v0.17.0/CHANGELOG.md - image-automation-controller to v0.21.0 https://github.com/fluxcd/image-automation-controller/blob/v0.21.0/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 34 ++++----- go.sum | 70 ++++++++++++------- .../bases/helm-controller/kustomization.yaml | 4 +- .../kustomization.yaml | 4 +- .../kustomization.yaml | 4 +- .../kustomize-controller/kustomization.yaml | 4 +- .../kustomization.yaml | 4 +- .../source-controller/kustomization.yaml | 4 +- manifests/crds/kustomization.yaml | 12 ++-- 9 files changed, 78 insertions(+), 62 deletions(-) diff --git a/go.mod b/go.mod index b38b5cb0..76a9f70b 100644 --- a/go.mod +++ b/go.mod @@ -7,23 +7,23 @@ require ( github.com/ProtonMail/go-crypto v0.0.0-20211221144345-a4f6767435ab github.com/cyphar/filepath-securejoin v0.2.2 github.com/fluxcd/go-git-providers v0.5.4 - github.com/fluxcd/helm-controller/api v0.17.2 - github.com/fluxcd/image-automation-controller/api v0.20.1 - github.com/fluxcd/image-reflector-controller/api v0.16.0 - github.com/fluxcd/kustomize-controller/api v0.21.1 - github.com/fluxcd/notification-controller/api v0.22.3 - github.com/fluxcd/pkg/apis/meta v0.10.2 + github.com/fluxcd/helm-controller/api v0.18.0 + github.com/fluxcd/image-automation-controller/api v0.21.0 + github.com/fluxcd/image-reflector-controller/api v0.17.0 + github.com/fluxcd/kustomize-controller/api v0.22.0 + github.com/fluxcd/notification-controller/api v0.23.0 + github.com/fluxcd/pkg/apis/meta v0.12.1 github.com/fluxcd/pkg/kustomize v0.0.2 github.com/fluxcd/pkg/runtime v0.12.5 github.com/fluxcd/pkg/ssa v0.14.1 github.com/fluxcd/pkg/ssh v0.3.1 github.com/fluxcd/pkg/untar v0.0.5 github.com/fluxcd/pkg/version v0.0.1 - github.com/fluxcd/source-controller/api v0.21.2 + github.com/fluxcd/source-controller/api v0.22.0 github.com/go-git/go-git/v5 v5.4.2 github.com/gonvenience/bunt v1.3.2 github.com/gonvenience/ytbx v1.4.2 - github.com/google/go-cmp v0.5.6 + github.com/google/go-cmp v0.5.7 github.com/google/go-containerregistry v0.2.0 github.com/hashicorp/go-multierror v1.1.1 github.com/homeport/dyff v1.4.6 @@ -36,11 +36,11 @@ require ( github.com/theckman/yacspin v0.13.12 golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3 golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 - k8s.io/api v0.23.2 - k8s.io/apiextensions-apiserver v0.23.2 - k8s.io/apimachinery v0.23.2 + k8s.io/api v0.23.4 + k8s.io/apiextensions-apiserver v0.23.4 + k8s.io/apimachinery v0.23.4 k8s.io/cli-runtime v0.23.2 - k8s.io/client-go v0.23.2 + k8s.io/client-go v0.23.4 k8s.io/kubectl v0.23.2 sigs.k8s.io/cli-utils v0.28.0 sigs.k8s.io/controller-runtime v0.11.1 @@ -74,7 +74,7 @@ require ( github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d // indirect github.com/fatih/color v1.13.0 // indirect github.com/fluxcd/pkg/apis/acl v0.0.3 // indirect - github.com/fluxcd/pkg/apis/kustomize v0.3.1 // indirect + github.com/fluxcd/pkg/apis/kustomize v0.3.2 // indirect github.com/form3tech-oss/jwt-go v3.2.3+incompatible // indirect github.com/fvbommel/sortorder v1.0.1 // indirect github.com/go-errors/errors v1.0.1 // indirect @@ -131,7 +131,7 @@ require ( github.com/russross/blackfriday v1.5.2 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/sergi/go-diff v1.2.0 // indirect - github.com/stretchr/testify v1.7.0 // indirect + github.com/stretchr/testify v1.7.1 // indirect github.com/texttheater/golang-levenshtein v1.0.1 // indirect github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74 // indirect github.com/xanzy/go-gitlab v0.54.3 // indirect @@ -150,10 +150,10 @@ require ( gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect - k8s.io/component-base v0.23.2 // indirect - k8s.io/klog/v2 v2.30.0 // indirect + k8s.io/component-base v0.23.4 // indirect + k8s.io/klog/v2 v2.50.0 // indirect k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65 // indirect - k8s.io/utils v0.0.0-20211208161948-7d6a63dca704 // indirect + k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9 // indirect sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2 // indirect sigs.k8s.io/structured-merge-diff/v4 v4.2.1 // indirect ) diff --git a/go.sum b/go.sum index 390a3fd4..2196788d 100644 --- a/go.sum +++ b/go.sum @@ -254,22 +254,24 @@ github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYF github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fluxcd/go-git-providers v0.5.4 h1:MnByjsmXa8rMt2hTmhmtbocq7YIsTlwZKrj9lAsob4Q= github.com/fluxcd/go-git-providers v0.5.4/go.mod h1:4jTHTmSx3rFGnG78KUVgFYeG6vWFnKwUSr2mi31tvp8= -github.com/fluxcd/helm-controller/api v0.17.2 h1:o/9BYA+DP5aC1o5ZT0Gfmtqraw6hGctaHTBjM6/3rls= -github.com/fluxcd/helm-controller/api v0.17.2/go.mod h1:ajkvxpv3mwzr/+H3iKpcnHW9qsOrIqNakalyGzQXduM= -github.com/fluxcd/image-automation-controller/api v0.20.1 h1:7KbRDGC0Gp0E64SNgpU/qsWx2Y14I6SCCpw0UaeaWE4= -github.com/fluxcd/image-automation-controller/api v0.20.1/go.mod h1:XhLYccGUbmJvTTpJ1jAFKZHr2e1GNXy0T85ZBO50mik= -github.com/fluxcd/image-reflector-controller/api v0.16.0 h1:1O1YdoK7LsJgWLyvfZTSbvQcUQCBcgJ573HA0arlQQY= -github.com/fluxcd/image-reflector-controller/api v0.16.0/go.mod h1:OIe3mSXc3OwQiNbiQ9vNXWYtNif31hc7WAbZWlFUUnc= -github.com/fluxcd/kustomize-controller/api v0.21.1 h1:Abusz7ZxwD7bdWCsXLefowOi3e5DqPk5T+BvdbOYpK8= -github.com/fluxcd/kustomize-controller/api v0.21.1/go.mod h1:LhESmzZMC//KGeSSDE31ZTw/J9CCXbuJpb4DwvL28kM= -github.com/fluxcd/notification-controller/api v0.22.3 h1:knwdzBYr7bosaGMXAbiywB/sebVwoFPnAy25n4y8y10= -github.com/fluxcd/notification-controller/api v0.22.3/go.mod h1:gA9/j0kjh7VDuUC2Cubr9twxOdzb/0+ojcE9Lzsc9ug= +github.com/fluxcd/helm-controller/api v0.18.0 h1:qRkIwRUvIKRvc/7qP9judEZ6lYjptNkRQLNasqdlpH0= +github.com/fluxcd/helm-controller/api v0.18.0/go.mod h1:+P3I9VV/4IMryjj9BIGtdZnxdCQfBXExWTv8Z9DF33o= +github.com/fluxcd/image-automation-controller/api v0.21.0 h1:e87aJhU5+1onwGg5wYjFW4p5tnA31RwyyCWXAF/GBHw= +github.com/fluxcd/image-automation-controller/api v0.21.0/go.mod h1:v2NMXFVogXXfGh37e2132+JB32bcubDrTuvn+CA9c9o= +github.com/fluxcd/image-reflector-controller/api v0.17.0 h1:hMPFqZOuE4gNMvwWq0YX//mX7j/nwtuk5WRu8eBwehg= +github.com/fluxcd/image-reflector-controller/api v0.17.0/go.mod h1:Lg8A+MUcke0Orp6C6UQkf9I3pc8M/B3XS3TOI+YxVBY= +github.com/fluxcd/kustomize-controller/api v0.22.0 h1:zSb9rIhEPLG1z0FtER0+yDsb8OPCv6wcsOdYTo/yiDs= +github.com/fluxcd/kustomize-controller/api v0.22.0/go.mod h1:Kq2kKnU6Z9CiZFLpHTMSLvpgWiT/e03NRb1wc8W+24E= +github.com/fluxcd/notification-controller/api v0.23.0 h1:eWlccKDCEhkPuj8jx+RNpc4CYAa+++uIjFy+R90eVg0= +github.com/fluxcd/notification-controller/api v0.23.0/go.mod h1:0QFnW7CrYl5ItHNPpstxU42Pmb5/Qepx8FFjVxcZqIk= github.com/fluxcd/pkg/apis/acl v0.0.3 h1:Lw0ZHdpnO4G7Zy9KjrzwwBmDZQuy4qEjaU/RvA6k1lc= github.com/fluxcd/pkg/apis/acl v0.0.3/go.mod h1:XPts6lRJ9C9fIF9xVWofmQwftvhY25n1ps7W9xw0XLU= -github.com/fluxcd/pkg/apis/kustomize v0.3.1 h1:wmb5D9e1+Rr3/5O3235ERuj+h2VKUArVfYYk68QKP+w= github.com/fluxcd/pkg/apis/kustomize v0.3.1/go.mod h1:k2HSRd68UwgNmOYBPOd6WbX6a2MH2X/Jeh7e3s3PFPc= -github.com/fluxcd/pkg/apis/meta v0.10.2 h1:pnDBBEvfs4HaKiVAYgz+e/AQ8dLvcgmVfSeBroZ/KKI= +github.com/fluxcd/pkg/apis/kustomize v0.3.2 h1:ULoAwOOekHf5cy6mYIwL+K6v8/cfcNVVbwfIPgWjdjg= +github.com/fluxcd/pkg/apis/kustomize v0.3.2/go.mod h1:p8iAH5TeqMBnnxkkpCNNDvWYfKlNRx89a6WKOo+hJHA= github.com/fluxcd/pkg/apis/meta v0.10.2/go.mod h1:KQ2er9xa6koy7uoPMZjIjNudB5p4tXs+w0GO6fRcy7I= +github.com/fluxcd/pkg/apis/meta v0.12.1 h1:m5PfKAqbqWBvGp9+JRj1sv+xNkGsHwUVf+3rJ8wm6SE= +github.com/fluxcd/pkg/apis/meta v0.12.1/go.mod h1:f8YVt70/KAhqzZ7xxhjvqyzKubOYx2pAbakb/FfCEg8= github.com/fluxcd/pkg/kustomize v0.0.2 h1:ipvQrxSeuGZDsPZrVUL6tYMlTR5xqYTZp6G0Tdy2hVs= github.com/fluxcd/pkg/kustomize v0.0.2/go.mod h1:AFwnf3OqQmpTCuwCARTGpPRMBf0ZFJNGCvW63KbgK04= github.com/fluxcd/pkg/runtime v0.12.5 h1:/8+0UBnSHbO9DVG9IFTjc37lwofsixGbs5WpHso8n5s= @@ -282,9 +284,8 @@ github.com/fluxcd/pkg/untar v0.0.5 h1:UGI3Ch1UIEIaqQvMicmImL1s9npQa64DJ/ozqHKB7g github.com/fluxcd/pkg/untar v0.0.5/go.mod h1:O6V9+rtl8c1mHBafgqFlJN6zkF1HS5SSYn7RpQJ/nfw= github.com/fluxcd/pkg/version v0.0.1 h1:/8asQoDXSThz3csiwi4Qo8Zb6blAxLXbtxNgeMJ9bCg= github.com/fluxcd/pkg/version v0.0.1/go.mod h1:WAF4FEEA9xyhngF8TDxg3UPu5fA1qhEYV8Pmi2Il01Q= -github.com/fluxcd/source-controller/api v0.21.0/go.mod h1:Ab2qDmAUz6ZCp8UaHYLYzxyFrC1FQqEqjxiROb/Rdiw= -github.com/fluxcd/source-controller/api v0.21.2 h1:J0S5NN4V8FPLrkSMXIUoUvj1X/RuTpVJSjIRF414wmc= -github.com/fluxcd/source-controller/api v0.21.2/go.mod h1:Ab2qDmAUz6ZCp8UaHYLYzxyFrC1FQqEqjxiROb/Rdiw= +github.com/fluxcd/source-controller/api v0.22.0 h1:WF0xsrlyUaRLWS4u5un3yfzlvER86sZx/qiV6l7Ay6Q= +github.com/fluxcd/source-controller/api v0.22.0/go.mod h1:Vb13q9Pq+1IW/sJUZn/RSb7IU5WT86Er6uCFPCFm9L4= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/form3tech-oss/jwt-go v3.2.3+incompatible h1:7ZaBxOI7TMoYBfyA3cQHErNNyAWIKUMIwqxEtgHOs5c= @@ -429,8 +430,9 @@ github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.7 h1:81/ik6ipDQS2aGcBfIN5dHDB36BwrStyeAQquSYCV4o= +github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= github.com/google/go-containerregistry v0.2.0 h1:cWFYx+kOkKdyOET0pcp7GMCmxj7da40StvluSuSXWCg= github.com/google/go-containerregistry v0.2.0/go.mod h1:Ts3Wioz1r5ayWx8sS6vLcWltWcM1aqFjd/eVrkFhrWM= github.com/google/go-github/v41 v41.0.0 h1:HseJrM2JFf2vfiZJ8anY2hqBjdfY1Vlj/K27ueww4gg= @@ -457,6 +459,7 @@ github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= @@ -714,6 +717,7 @@ github.com/onsi/ginkgo v1.16.2/go.mod h1:CObGmKUOKaSC0RjmoAK7tKyn4Azo5P2IWuoMnvw github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= 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.0.0/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= 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= @@ -725,8 +729,9 @@ github.com/onsi/gomega v1.10.5/go.mod h1:gza4q3jKQJijlu05nKWRCW/GavJumGt8aNRxWg7 github.com/onsi/gomega v1.11.0/go.mod h1:azGKhqFUon9Vuj0YmTfLSmx0FUwqXYSTl5re8lQLTUg= github.com/onsi/gomega v1.12.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je41yGY= github.com/onsi/gomega v1.16.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= -github.com/onsi/gomega v1.17.0 h1:9Luw4uT5HTjHTN8+aNcSThgH1vdXnmdJ8xIfZ4wyTRE= github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= +github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE= +github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= @@ -848,8 +853,9 @@ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UV github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1 h1:5TQK59W5E3v0r2duFAb7P95B6hEeOyEnHRa8MjYSMTY= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/texttheater/golang-levenshtein v1.0.1 h1:+cRNoVrfiwufQPhoMzB6N0Yf/Mqajr6t1lOv8GyGE2U= github.com/texttheater/golang-levenshtein v1.0.1/go.mod h1:PYAKrbF5sAiq9wd+H82hs7gNaen0CplQ9uvm6+enD/8= @@ -1157,8 +1163,10 @@ golang.org/x/sys v0.0.0-20210917161153-d61c044b1678/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211029165221-6e7872819dc8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211110154304-99a53858aa08/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211205182925-97ca703d548d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9 h1:XfKQ4OlFl8okEOr5UvAqFRVj8pY/4yfcXrddB8qAbU0= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= @@ -1473,38 +1481,43 @@ honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9 k8s.io/api v0.18.8/go.mod h1:d/CXqwWv+Z2XEG1LgceeDmHQwpUJhROPx16SlxJgERY= k8s.io/api v0.23.0/go.mod h1:8wmDdLBHBNxtOIytwLstXt5E9PddnZb0GaMcqsvDBpg= k8s.io/api v0.23.1/go.mod h1:WfXnOnwSqNtG62Y1CdjoMxh7r7u9QXGCkA1u0na2jgo= -k8s.io/api v0.23.2 h1:62cpzreV3dCuj0hqPi8r4dyWh48ogMcyh+ga9jEGij4= k8s.io/api v0.23.2/go.mod h1:sYuDb3flCtRPI8ghn6qFrcK5ZBu2mhbElxRE95qpwlI= +k8s.io/api v0.23.4 h1:85gnfXQOWbJa1SiWGpE9EEtHs0UVvDyIsSMpEtl2D4E= +k8s.io/api v0.23.4/go.mod h1:i77F4JfyNNrhOjZF7OwwNJS5Y1S9dpwvb9iYRYRczfI= k8s.io/apiextensions-apiserver v0.23.0/go.mod h1:xIFAEEDlAZgpVBl/1VSjGDmLoXAWRG40+GsWhKhAxY4= k8s.io/apiextensions-apiserver v0.23.1/go.mod h1:0qz4fPaHHsVhRApbtk3MGXNn2Q9M/cVWWhfHdY2SxiM= -k8s.io/apiextensions-apiserver v0.23.2 h1:N6CIVAhmF0ahgFKUMDdV/AUyckhUb4nIyVPohPtdUPk= -k8s.io/apiextensions-apiserver v0.23.2/go.mod h1:9cs7avT6+GfzbB0pambTvH11wcaR85QQg4ovl9s15UU= +k8s.io/apiextensions-apiserver v0.23.4 h1:AFDUEu/yEf0YnuZhqhIFhPLPhhcQQVuR1u3WCh0rveU= +k8s.io/apiextensions-apiserver v0.23.4/go.mod h1:TWYAKymJx7nLMxWCgWm2RYGXHrGlVZnxIlGnvtfYu+g= k8s.io/apimachinery v0.18.8/go.mod h1:6sQd+iHEqmOtALqOFjSWp2KZ9F0wlU/nWm0ZgsYWMig= k8s.io/apimachinery v0.23.0/go.mod h1:fFCTTBKvKcwTPFzjlcxp91uPFZr+JA0FubU4fLzzFYc= k8s.io/apimachinery v0.23.1/go.mod h1:SADt2Kl8/sttJ62RRsi9MIV4o8f5S3coArm0Iu3fBno= -k8s.io/apimachinery v0.23.2 h1:dBmjCOeYBdg2ibcQxMuUq+OopZ9fjfLIR5taP/XKeTs= k8s.io/apimachinery v0.23.2/go.mod h1:zDqeV0AK62LbCI0CI7KbWCAYdLg+E+8UXJ0rIz5gmS8= +k8s.io/apimachinery v0.23.4 h1:fhnuMd/xUL3Cjfl64j5ULKZ1/J9n8NuQEgNL+WXWfdM= +k8s.io/apimachinery v0.23.4/go.mod h1:BEuFMMBaIbcOqVIJqNZJXGFTP4W6AycEpb5+m/97hrM= k8s.io/apiserver v0.18.8/go.mod h1:12u5FuGql8Cc497ORNj79rhPdiXQC4bf53X/skR/1YM= k8s.io/apiserver v0.23.0/go.mod h1:Cec35u/9zAepDPPFyT+UMrgqOCjgJ5qtfVJDxjZYmt4= k8s.io/apiserver v0.23.1/go.mod h1:Bqt0gWbeM2NefS8CjWswwd2VNAKN6lUKR85Ft4gippY= -k8s.io/apiserver v0.23.2/go.mod h1:Kdt8gafkPev9Gfh+H6lCPbmRu42f7BfhOfHKKa3dtyU= +k8s.io/apiserver v0.23.4/go.mod h1:A6l/ZcNtxGfPSqbFDoxxOjEjSKBaQmE+UTveOmMkpNc= k8s.io/cli-runtime v0.23.2 h1:4zOZX78mFSakwe4gef81XDBu94Yu0th6bfveTOx8ZQk= k8s.io/cli-runtime v0.23.2/go.mod h1:Ag70akCDvwux4HxY+nH2J3UqE2e6iwSSdG1HE6p1VTU= k8s.io/client-go v0.18.8/go.mod h1:HqFqMllQ5NnQJNwjro9k5zMyfhZlOwpuTLVrxjkYSxU= k8s.io/client-go v0.23.0/go.mod h1:hrDnpnK1mSr65lHHcUuIZIXDgEbzc7/683c6hyG4jTA= k8s.io/client-go v0.23.1/go.mod h1:6QSI8fEuqD4zgFK0xbdwfB/PthBsIxCJMa3s17WlcO0= -k8s.io/client-go v0.23.2 h1:BNbOcxa99jxHH8mM1cPKGIrrKRnCSAfAtyonYGsbFtE= k8s.io/client-go v0.23.2/go.mod h1:k3YbsWg6GWdHF1THHTQP88X9RhB1DWPo3Dq7KfU/D1c= +k8s.io/client-go v0.23.4 h1:YVWvPeerA2gpUudLelvsolzH7c2sFoXXR5wM/sWqNFU= +k8s.io/client-go v0.23.4/go.mod h1:PKnIL4pqLuvYUK1WU7RLTMYKPiIh7MYShLshtRY9cj0= k8s.io/cloud-provider v0.18.8/go.mod h1:cn9AlzMPVIXA4HHLVbgGUigaQlZyHSZ7WAwDEFNrQSs= k8s.io/code-generator v0.17.2/go.mod h1:DVmfPQgxQENqDIzVR2ddLXMH34qeszkKSdH/N+s+38s= k8s.io/code-generator v0.23.0/go.mod h1:vQvOhDXhuzqiVfM/YHp+dmg10WDZCchJVObc9MvowsE= k8s.io/code-generator v0.23.1/go.mod h1:V7yn6VNTCWW8GqodYCESVo95fuiEg713S8B7WacWZDA= k8s.io/code-generator v0.23.2/go.mod h1:S0Q1JVA+kSzTI1oUvbKAxZY/DYbA/ZUb4Uknog12ETk= +k8s.io/code-generator v0.23.4/go.mod h1:S0Q1JVA+kSzTI1oUvbKAxZY/DYbA/ZUb4Uknog12ETk= k8s.io/component-base v0.18.8/go.mod h1:00frPRDas29rx58pPCxNkhUfPbwajlyyvu8ruNgSErU= k8s.io/component-base v0.23.0/go.mod h1:DHH5uiFvLC1edCpvcTDV++NKULdYYU6pR9Tt3HIKMKI= k8s.io/component-base v0.23.1/go.mod h1:6llmap8QtJIXGDd4uIWJhAq0Op8AtQo6bDW2RrNMTeo= -k8s.io/component-base v0.23.2 h1:dAYmUhWIBWO762etTjBEEKtYYHi5CoQInSLtK6LM1Zs= k8s.io/component-base v0.23.2/go.mod h1:wS9Z03MO3oJ0RU8bB/dbXTiluGju+SC/F5i660gxB8c= +k8s.io/component-base v0.23.4 h1:SziYh48+QKxK+ykJ3Ejqd98XdZIseVBG7sBaNLPqy6M= +k8s.io/component-base v0.23.4/go.mod h1:8o3Gg8i2vnUXGPOwciiYlkSaZT+p+7gA9Scoz8y4W4E= k8s.io/component-helpers v0.23.2/go.mod h1:J6CMwiaf0izLoNwiLl2OymB4+rGTsTpWp6PL/AqOM4U= k8s.io/csi-translation-lib v0.18.8/go.mod h1:6cA6Btlzxy9s3QrS4BCZzQqclIWnTLr6Jx3H2ctAzY4= k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= @@ -1517,8 +1530,9 @@ k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8= k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= -k8s.io/klog/v2 v2.30.0 h1:bUO6drIvCIsvZ/XFgfxoGFQU/a4Qkh0iAlvUR7vlHJw= k8s.io/klog/v2 v2.30.0/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/klog/v2 v2.50.0 h1:2QWjlAHYTUqUM5XMSobX4mc//mXrf194+hiaZ4jy57Q= +k8s.io/klog/v2 v2.50.0/go.mod h1:N3kgBtsFxMb4nQ0eBDgbHEt/dtxBuTkSFQ+7K5OUoz4= k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E= k8s.io/kube-openapi v0.0.0-20200410145947-61e04a5be9a6/go.mod h1:GRQhZsXIAJ1xR0C9bd8UpWHZ5plfAS9fzPjJuQ6JL3E= k8s.io/kube-openapi v0.0.0-20210421082810-95288971da7e/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw= @@ -1531,8 +1545,10 @@ k8s.io/metrics v0.23.2/go.mod h1:idJHc+lLK5teHUC6Z2+d6qTKA12d5FLDxmC/DHiUYKc= k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20210930125809-cb0fa318a74b/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20211208161948-7d6a63dca704 h1:ZKMMxTvduyf5WUtREOqg5LiXaN1KO/+0oOQPRFrClpo= +k8s.io/utils v0.0.0-20211116205334-6203023598ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20211208161948-7d6a63dca704/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9 h1:HNSDgDCrr/6Ly3WEGKZftiE7IY19Vz2GdbOCyI4qqhc= +k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= 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= diff --git a/manifests/bases/helm-controller/kustomization.yaml b/manifests/bases/helm-controller/kustomization.yaml index 4b4b3a87..a38aa8bb 100644 --- a/manifests/bases/helm-controller/kustomization.yaml +++ b/manifests/bases/helm-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/helm-controller/releases/download/v0.17.2/helm-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.17.2/helm-controller.deployment.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.18.0/helm-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.18.0/helm-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/image-automation-controller/kustomization.yaml b/manifests/bases/image-automation-controller/kustomization.yaml index aa54c473..35f4eae7 100644 --- a/manifests/bases/image-automation-controller/kustomization.yaml +++ b/manifests/bases/image-automation-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.20.1/image-automation-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.20.1/image-automation-controller.deployment.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.21.0/image-automation-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.21.0/image-automation-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/image-reflector-controller/kustomization.yaml b/manifests/bases/image-reflector-controller/kustomization.yaml index 44bfb7fb..ec33da93 100644 --- a/manifests/bases/image-reflector-controller/kustomization.yaml +++ b/manifests/bases/image-reflector-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.16.0/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.16.0/image-reflector-controller.deployment.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.17.0/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.17.0/image-reflector-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/kustomize-controller/kustomization.yaml b/manifests/bases/kustomize-controller/kustomization.yaml index fa142327..90a1a8db 100644 --- a/manifests/bases/kustomize-controller/kustomization.yaml +++ b/manifests/bases/kustomize-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.21.1/kustomize-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.21.1/kustomize-controller.deployment.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.22.0/kustomize-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.22.0/kustomize-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/notification-controller/kustomization.yaml b/manifests/bases/notification-controller/kustomization.yaml index 14e389b3..5a14cb78 100644 --- a/manifests/bases/notification-controller/kustomization.yaml +++ b/manifests/bases/notification-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/notification-controller/releases/download/v0.22.3/notification-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v0.22.3/notification-controller.deployment.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.23.0/notification-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.23.0/notification-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index fde7a5c0..bf17a6fe 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.21.2/source-controller.crds.yaml -- https://github.com/fluxcd/source-controller/releases/download/v0.21.2/source-controller.deployment.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.22.0/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.22.0/source-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index 8340b3d6..63be957c 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -1,9 +1,9 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.21.2/source-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.21.1/kustomize-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.17.2/helm-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v0.22.3/notification-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.16.0/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.20.1/image-automation-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.22.0/source-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.22.0/kustomize-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.18.0/helm-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.23.0/notification-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.17.0/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.21.0/image-automation-controller.crds.yaml From e5ede275f85974751751b78d7621564fbae64581 Mon Sep 17 00:00:00 2001 From: Paulo Gomes Date: Tue, 22 Mar 2022 15:50:52 +0000 Subject: [PATCH 052/818] Update Source API to v1beta2 The creation of oldConditions, statusableConditions and reconcilableConditions is an adhoc solution to deal with the upstream changes on `pkg/apis/meta`, which are yet to be replicated across other Flux API components. Signed-off-by: Paulo Gomes --- cmd/flux/create_image_update.go | 2 +- cmd/flux/create_source_bucket.go | 2 +- cmd/flux/create_source_git.go | 2 +- cmd/flux/create_source_git_test.go | 32 +++++++++++++++---- cmd/flux/create_source_helm.go | 2 +- cmd/flux/delete_source_bucket.go | 2 +- cmd/flux/delete_source_git.go | 2 +- cmd/flux/delete_source_helm.go | 2 +- cmd/flux/export_source_bucket.go | 2 +- cmd/flux/export_source_git.go | 2 +- cmd/flux/export_source_helm.go | 2 +- cmd/flux/get_source_all.go | 2 +- cmd/flux/get_source_bucket.go | 2 +- cmd/flux/get_source_chart.go | 2 +- cmd/flux/get_source_git.go | 2 +- cmd/flux/get_source_helm.go | 2 +- cmd/flux/reconcile.go | 21 ++++++++---- cmd/flux/reconcile_helmrelease.go | 2 +- cmd/flux/reconcile_kustomization.go | 2 +- cmd/flux/reconcile_source_bucket.go | 2 +- cmd/flux/reconcile_source_git.go | 2 +- cmd/flux/reconcile_source_helm.go | 2 +- cmd/flux/reconcile_with_source.go | 5 ++- cmd/flux/resume_source_bucket.go | 2 +- cmd/flux/resume_source_chart.go | 2 +- cmd/flux/resume_source_git.go | 2 +- cmd/flux/resume_source_helm.go | 2 +- cmd/flux/source.go | 2 +- cmd/flux/status.go | 21 ++++++++++-- cmd/flux/suspend_source_bucket.go | 2 +- cmd/flux/suspend_source_chart.go | 2 +- cmd/flux/suspend_source_git.go | 2 +- cmd/flux/suspend_source_helm.go | 2 +- cmd/flux/testdata/export/bucket.yaml | 2 +- cmd/flux/testdata/export/git-repo.yaml | 2 +- cmd/flux/testdata/export/helm-repo.yaml | 2 +- cmd/flux/trace.go | 2 +- cmd/flux/uninstall.go | 2 +- internal/flags/git_implementation.go | 2 +- internal/flags/git_implementation_test.go | 2 +- internal/flags/helm_chart_source.go | 2 +- internal/flags/helm_chart_source_test.go | 2 +- internal/flags/kustomization_source.go | 2 +- internal/flags/kustomization_source_test.go | 2 +- internal/flags/source_bucket_provider.go | 2 +- internal/flags/source_bucket_provider_test.go | 2 +- internal/utils/utils.go | 10 +++--- internal/utils/utils_test.go | 4 +-- pkg/manifestgen/sync/sync.go | 2 +- pkg/manifestgen/sync/sync_test.go | 2 +- tests/azure/azure_test.go | 2 +- tests/azure/go.mod | 10 +++--- tests/azure/go.sum | 17 ++++++---- tests/azure/util_test.go | 2 +- 54 files changed, 130 insertions(+), 82 deletions(-) diff --git a/cmd/flux/create_image_update.go b/cmd/flux/create_image_update.go index a67f6bc3..7bf6a28d 100644 --- a/cmd/flux/create_image_update.go +++ b/cmd/flux/create_image_update.go @@ -23,7 +23,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" autov1 "github.com/fluxcd/image-automation-controller/api/v1beta1" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta1" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" ) var createImageUpdateCmd = &cobra.Command{ diff --git a/cmd/flux/create_source_bucket.go b/cmd/flux/create_source_bucket.go index 31279799..89616451 100644 --- a/cmd/flux/create_source_bucket.go +++ b/cmd/flux/create_source_bucket.go @@ -30,7 +30,7 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" "github.com/fluxcd/pkg/apis/meta" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta1" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" "github.com/fluxcd/flux2/internal/flags" "github.com/fluxcd/flux2/internal/utils" diff --git a/cmd/flux/create_source_git.go b/cmd/flux/create_source_git.go index b8e4d6ae..7e730fe2 100644 --- a/cmd/flux/create_source_git.go +++ b/cmd/flux/create_source_git.go @@ -24,7 +24,7 @@ import ( "os" "github.com/fluxcd/pkg/apis/meta" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta1" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" "github.com/manifoldco/promptui" "github.com/spf13/cobra" corev1 "k8s.io/api/core/v1" diff --git a/cmd/flux/create_source_git_test.go b/cmd/flux/create_source_git_test.go index 73c1724a..b6b9961f 100644 --- a/cmd/flux/create_source_git_test.go +++ b/cmd/flux/create_source_git_test.go @@ -21,15 +21,17 @@ package main import ( "context" + "testing" + "time" + "github.com/fluxcd/pkg/apis/meta" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta1" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" "k8s.io/apimachinery/pkg/api/errors" + apimeta "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/wait" "sigs.k8s.io/controller-runtime/pkg/client" - "testing" - "time" ) var pollInterval = 50 * time.Millisecond @@ -103,7 +105,13 @@ func TestCreateSourceGit(t *testing.T) { command, assertGoldenFile("testdata/create_source_git/success.golden"), func(repo *sourcev1.GitRepository) { - meta.SetResourceCondition(repo, meta.ReadyCondition, metav1.ConditionTrue, sourcev1.GitOperationSucceedReason, "succeeded message") + newCondition := metav1.Condition{ + Type: meta.ReadyCondition, + Status: metav1.ConditionTrue, + Reason: sourcev1.GitOperationSucceedReason, + Message: "succeeded message", + } + apimeta.SetStatusCondition(&repo.Status.Conditions, newCondition) repo.Status.Artifact = &sourcev1.Artifact{ Path: "some-path", Revision: "v1", @@ -114,7 +122,13 @@ func TestCreateSourceGit(t *testing.T) { command, assertError("failed message"), func(repo *sourcev1.GitRepository) { - meta.SetResourceCondition(repo, meta.ReadyCondition, metav1.ConditionFalse, sourcev1.URLInvalidReason, "failed message") + newCondition := metav1.Condition{ + Type: meta.ReadyCondition, + Status: metav1.ConditionFalse, + Reason: sourcev1.URLInvalidReason, + Message: "failed message", + } + apimeta.SetStatusCondition(&repo.Status.Conditions, newCondition) }, }, { "NoArtifact", @@ -122,7 +136,13 @@ func TestCreateSourceGit(t *testing.T) { assertError("GitRepository source reconciliation completed but no artifact was found"), func(repo *sourcev1.GitRepository) { // Updated with no artifact - meta.SetResourceCondition(repo, meta.ReadyCondition, metav1.ConditionTrue, sourcev1.GitOperationSucceedReason, "succeeded message") + newCondition := metav1.Condition{ + Type: meta.ReadyCondition, + Status: metav1.ConditionTrue, + Reason: sourcev1.GitOperationSucceedReason, + Message: "succeeded message", + } + apimeta.SetStatusCondition(&repo.Status.Conditions, newCondition) }, }, } diff --git a/cmd/flux/create_source_helm.go b/cmd/flux/create_source_helm.go index 2d3f2513..f20b4658 100644 --- a/cmd/flux/create_source_helm.go +++ b/cmd/flux/create_source_helm.go @@ -33,7 +33,7 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/yaml" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta1" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" "github.com/fluxcd/flux2/internal/utils" "github.com/fluxcd/flux2/pkg/manifestgen/sourcesecret" diff --git a/cmd/flux/delete_source_bucket.go b/cmd/flux/delete_source_bucket.go index 56d9bdf8..a032dfcc 100644 --- a/cmd/flux/delete_source_bucket.go +++ b/cmd/flux/delete_source_bucket.go @@ -19,7 +19,7 @@ package main import ( "github.com/spf13/cobra" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta1" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" ) var deleteSourceBucketCmd = &cobra.Command{ diff --git a/cmd/flux/delete_source_git.go b/cmd/flux/delete_source_git.go index 5c521a5b..c43398d5 100644 --- a/cmd/flux/delete_source_git.go +++ b/cmd/flux/delete_source_git.go @@ -19,7 +19,7 @@ package main import ( "github.com/spf13/cobra" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta1" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" ) var deleteSourceGitCmd = &cobra.Command{ diff --git a/cmd/flux/delete_source_helm.go b/cmd/flux/delete_source_helm.go index 87b708ad..a5956d87 100644 --- a/cmd/flux/delete_source_helm.go +++ b/cmd/flux/delete_source_helm.go @@ -19,7 +19,7 @@ package main import ( "github.com/spf13/cobra" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta1" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" ) var deleteSourceHelmCmd = &cobra.Command{ diff --git a/cmd/flux/export_source_bucket.go b/cmd/flux/export_source_bucket.go index 33e36ebd..93d1d87d 100644 --- a/cmd/flux/export_source_bucket.go +++ b/cmd/flux/export_source_bucket.go @@ -21,7 +21,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta1" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" ) var exportSourceBucketCmd = &cobra.Command{ diff --git a/cmd/flux/export_source_git.go b/cmd/flux/export_source_git.go index c93e0fd1..f1af1659 100644 --- a/cmd/flux/export_source_git.go +++ b/cmd/flux/export_source_git.go @@ -21,7 +21,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta1" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" ) var exportSourceGitCmd = &cobra.Command{ diff --git a/cmd/flux/export_source_helm.go b/cmd/flux/export_source_helm.go index d2215335..f5f7ef8c 100644 --- a/cmd/flux/export_source_helm.go +++ b/cmd/flux/export_source_helm.go @@ -21,7 +21,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta1" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" ) var exportSourceHelmCmd = &cobra.Command{ diff --git a/cmd/flux/get_source_all.go b/cmd/flux/get_source_all.go index 08c12de1..b9b62555 100644 --- a/cmd/flux/get_source_all.go +++ b/cmd/flux/get_source_all.go @@ -21,7 +21,7 @@ import ( "github.com/spf13/cobra" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta1" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" ) var getSourceAllCmd = &cobra.Command{ diff --git a/cmd/flux/get_source_bucket.go b/cmd/flux/get_source_bucket.go index 87c7f86b..4eed78e1 100644 --- a/cmd/flux/get_source_bucket.go +++ b/cmd/flux/get_source_bucket.go @@ -24,7 +24,7 @@ import ( "github.com/spf13/cobra" "k8s.io/apimachinery/pkg/runtime" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta1" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" ) var getSourceBucketCmd = &cobra.Command{ diff --git a/cmd/flux/get_source_chart.go b/cmd/flux/get_source_chart.go index 5179dad3..6f5ccecd 100644 --- a/cmd/flux/get_source_chart.go +++ b/cmd/flux/get_source_chart.go @@ -24,7 +24,7 @@ import ( "github.com/spf13/cobra" "k8s.io/apimachinery/pkg/runtime" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta1" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" ) var getSourceHelmChartCmd = &cobra.Command{ diff --git a/cmd/flux/get_source_git.go b/cmd/flux/get_source_git.go index 9690ee3a..4b4f7c43 100644 --- a/cmd/flux/get_source_git.go +++ b/cmd/flux/get_source_git.go @@ -25,7 +25,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta1" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" ) var getSourceGitCmd = &cobra.Command{ diff --git a/cmd/flux/get_source_helm.go b/cmd/flux/get_source_helm.go index d23ecd32..7b4eb8e8 100644 --- a/cmd/flux/get_source_helm.go +++ b/cmd/flux/get_source_helm.go @@ -24,7 +24,7 @@ import ( "github.com/spf13/cobra" "k8s.io/apimachinery/pkg/runtime" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta1" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" ) var getSourceHelmCmd = &cobra.Command{ diff --git a/cmd/flux/reconcile.go b/cmd/flux/reconcile.go index 5c56ea63..4ce8cc2c 100644 --- a/cmd/flux/reconcile.go +++ b/cmd/flux/reconcile.go @@ -60,13 +60,22 @@ type reconcilable interface { GetAnnotations() map[string]string SetAnnotations(map[string]string) - // this is usually implemented by GOTK types, since it's used for meta.SetResourceCondition - GetStatusConditions() *[]metav1.Condition - lastHandledReconcileRequest() string // what was the last handled reconcile request? successMessage() string // what do you want to tell people when successfully reconciled? } +func reconcilableConditions(object reconcilable) []metav1.Condition { + if s, ok := object.(meta.ObjectWithConditions); ok { + return s.GetConditions() + } + + if s, ok := object.(oldConditions); ok { + return *s.GetStatusConditions() + } + + return []metav1.Condition{} +} + func (reconcile reconcileCommand) run(cmd *cobra.Command, args []string) error { if len(args) < 1 { return fmt.Errorf("%s name is required", reconcile.kind) @@ -118,7 +127,7 @@ func (reconcile reconcileCommand) run(cmd *cobra.Command, args []string) error { reconciliationHandled(ctx, kubeClient, namespacedName, reconcile.object, lastHandledReconcileAt)); err != nil { return err } - readyCond := apimeta.FindStatusCondition(*reconcile.object.GetStatusConditions(), meta.ReadyCondition) + readyCond := apimeta.FindStatusCondition(reconcilableConditions(reconcile.object), meta.ReadyCondition) if readyCond == nil { return fmt.Errorf("status can't be determined") } @@ -137,7 +146,7 @@ func reconciliationHandled(ctx context.Context, kubeClient client.Client, if err != nil { return false, err } - isProgressing := apimeta.IsStatusConditionPresentAndEqual(*obj.GetStatusConditions(), + isProgressing := apimeta.IsStatusConditionPresentAndEqual(reconcilableConditions(obj), meta.ReadyCondition, metav1.ConditionUnknown) return obj.lastHandledReconcileRequest() != lastHandledReconcileAt && !isProgressing, nil } @@ -174,7 +183,7 @@ func isReconcileReady(ctx context.Context, kubeClient client.Client, return false, err } - if c := apimeta.FindStatusCondition(*obj.GetStatusConditions(), meta.ReadyCondition); c != nil { + if c := apimeta.FindStatusCondition(reconcilableConditions(obj), meta.ReadyCondition); c != nil { switch c.Status { case metav1.ConditionTrue: return true, nil diff --git a/cmd/flux/reconcile_helmrelease.go b/cmd/flux/reconcile_helmrelease.go index 38558a0f..1a513369 100644 --- a/cmd/flux/reconcile_helmrelease.go +++ b/cmd/flux/reconcile_helmrelease.go @@ -21,7 +21,7 @@ import ( "k8s.io/apimachinery/pkg/types" helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta1" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" ) var reconcileHrCmd = &cobra.Command{ diff --git a/cmd/flux/reconcile_kustomization.go b/cmd/flux/reconcile_kustomization.go index fd8e3f8b..05035a50 100644 --- a/cmd/flux/reconcile_kustomization.go +++ b/cmd/flux/reconcile_kustomization.go @@ -21,7 +21,7 @@ import ( "k8s.io/apimachinery/pkg/types" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta1" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" ) var reconcileKsCmd = &cobra.Command{ diff --git a/cmd/flux/reconcile_source_bucket.go b/cmd/flux/reconcile_source_bucket.go index 768071da..3ede1c50 100644 --- a/cmd/flux/reconcile_source_bucket.go +++ b/cmd/flux/reconcile_source_bucket.go @@ -28,7 +28,7 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" "github.com/fluxcd/pkg/apis/meta" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta1" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" ) var reconcileSourceBucketCmd = &cobra.Command{ diff --git a/cmd/flux/reconcile_source_git.go b/cmd/flux/reconcile_source_git.go index 9b5a75be..375291ed 100644 --- a/cmd/flux/reconcile_source_git.go +++ b/cmd/flux/reconcile_source_git.go @@ -21,7 +21,7 @@ import ( "github.com/spf13/cobra" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta1" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" ) var reconcileSourceGitCmd = &cobra.Command{ diff --git a/cmd/flux/reconcile_source_helm.go b/cmd/flux/reconcile_source_helm.go index e0836259..be27cf82 100644 --- a/cmd/flux/reconcile_source_helm.go +++ b/cmd/flux/reconcile_source_helm.go @@ -21,7 +21,7 @@ import ( "github.com/spf13/cobra" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta1" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" ) var reconcileSourceHelmCmd = &cobra.Command{ diff --git a/cmd/flux/reconcile_with_source.go b/cmd/flux/reconcile_with_source.go index 6186d5d6..55361372 100644 --- a/cmd/flux/reconcile_with_source.go +++ b/cmd/flux/reconcile_with_source.go @@ -10,9 +10,8 @@ import ( "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/wait" - "github.com/fluxcd/pkg/apis/meta" - "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/pkg/apis/meta" ) type reconcileWithSource interface { @@ -83,7 +82,7 @@ func (reconcile reconcileWithSourceCommand) run(cmd *cobra.Command, args []strin return err } - readyCond := apimeta.FindStatusCondition(*reconcile.object.GetStatusConditions(), meta.ReadyCondition) + readyCond := apimeta.FindStatusCondition(reconcilableConditions(reconcile.object), meta.ReadyCondition) if readyCond == nil { return fmt.Errorf("status can't be determined") } diff --git a/cmd/flux/resume_source_bucket.go b/cmd/flux/resume_source_bucket.go index c16d2090..a4a3b689 100644 --- a/cmd/flux/resume_source_bucket.go +++ b/cmd/flux/resume_source_bucket.go @@ -19,7 +19,7 @@ package main import ( "github.com/spf13/cobra" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta1" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" ) var resumeSourceBucketCmd = &cobra.Command{ diff --git a/cmd/flux/resume_source_chart.go b/cmd/flux/resume_source_chart.go index 6da61eed..bbe895c1 100644 --- a/cmd/flux/resume_source_chart.go +++ b/cmd/flux/resume_source_chart.go @@ -21,7 +21,7 @@ import ( "github.com/spf13/cobra" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta1" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" ) var resumeSourceHelmChartCmd = &cobra.Command{ diff --git a/cmd/flux/resume_source_git.go b/cmd/flux/resume_source_git.go index 31784281..05a9a095 100644 --- a/cmd/flux/resume_source_git.go +++ b/cmd/flux/resume_source_git.go @@ -19,7 +19,7 @@ package main import ( "github.com/spf13/cobra" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta1" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" ) var resumeSourceGitCmd = &cobra.Command{ diff --git a/cmd/flux/resume_source_helm.go b/cmd/flux/resume_source_helm.go index 674a81b1..6e80895f 100644 --- a/cmd/flux/resume_source_helm.go +++ b/cmd/flux/resume_source_helm.go @@ -19,7 +19,7 @@ package main import ( "github.com/spf13/cobra" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta1" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" ) var resumeSourceHelmCmd = &cobra.Command{ diff --git a/cmd/flux/source.go b/cmd/flux/source.go index d5c721bc..b6c9077c 100644 --- a/cmd/flux/source.go +++ b/cmd/flux/source.go @@ -19,7 +19,7 @@ package main import ( "sigs.k8s.io/controller-runtime/pkg/client" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta1" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" ) // These are general-purpose adapters for attaching methods to, for diff --git a/cmd/flux/status.go b/cmd/flux/status.go index 3c7bb253..e6c4b5fc 100644 --- a/cmd/flux/status.go +++ b/cmd/flux/status.go @@ -20,6 +20,7 @@ import ( "context" "fmt" + "github.com/fluxcd/pkg/apis/meta" apimeta "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime/schema" @@ -27,8 +28,6 @@ import ( "k8s.io/apimachinery/pkg/util/wait" "sigs.k8s.io/cli-utils/pkg/object" "sigs.k8s.io/controller-runtime/pkg/client" - - "github.com/fluxcd/pkg/apis/meta" ) // statusable is used to see if a resource is considered ready in the usual way @@ -37,10 +36,26 @@ type statusable interface { // this is implemented by ObjectMeta GetGeneration() int64 getObservedGeneration() int64 +} + +// oldConditions represents the deprecated API which is sunsetting. +type oldConditions interface { // this is usually implemented by GOTK API objects because it's used by pkg/apis/meta GetStatusConditions() *[]metav1.Condition } +func statusableConditions(object statusable) []metav1.Condition { + if s, ok := object.(meta.ObjectWithConditions); ok { + return s.GetConditions() + } + + if s, ok := object.(oldConditions); ok { + return *s.GetStatusConditions() + } + + return []metav1.Condition{} +} + func isReady(ctx context.Context, kubeClient client.Client, namespacedName types.NamespacedName, object statusable) wait.ConditionFunc { return func() (bool, error) { @@ -54,7 +69,7 @@ func isReady(ctx context.Context, kubeClient client.Client, return false, nil } - if c := apimeta.FindStatusCondition(*object.GetStatusConditions(), meta.ReadyCondition); c != nil { + if c := apimeta.FindStatusCondition(statusableConditions(object), meta.ReadyCondition); c != nil { switch c.Status { case metav1.ConditionTrue: return true, nil diff --git a/cmd/flux/suspend_source_bucket.go b/cmd/flux/suspend_source_bucket.go index e452b9dc..32dab414 100644 --- a/cmd/flux/suspend_source_bucket.go +++ b/cmd/flux/suspend_source_bucket.go @@ -19,7 +19,7 @@ package main import ( "github.com/spf13/cobra" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta1" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" ) var suspendSourceBucketCmd = &cobra.Command{ diff --git a/cmd/flux/suspend_source_chart.go b/cmd/flux/suspend_source_chart.go index 750e65ff..2befdbc4 100644 --- a/cmd/flux/suspend_source_chart.go +++ b/cmd/flux/suspend_source_chart.go @@ -19,7 +19,7 @@ package main import ( "github.com/spf13/cobra" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta1" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" ) var suspendSourceHelmChartCmd = &cobra.Command{ diff --git a/cmd/flux/suspend_source_git.go b/cmd/flux/suspend_source_git.go index 16ebd0a6..19490b10 100644 --- a/cmd/flux/suspend_source_git.go +++ b/cmd/flux/suspend_source_git.go @@ -19,7 +19,7 @@ package main import ( "github.com/spf13/cobra" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta1" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" ) var suspendSourceGitCmd = &cobra.Command{ diff --git a/cmd/flux/suspend_source_helm.go b/cmd/flux/suspend_source_helm.go index 0b29a2dc..73bc1250 100644 --- a/cmd/flux/suspend_source_helm.go +++ b/cmd/flux/suspend_source_helm.go @@ -19,7 +19,7 @@ package main import ( "github.com/spf13/cobra" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta1" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" ) var suspendSourceHelmCmd = &cobra.Command{ diff --git a/cmd/flux/testdata/export/bucket.yaml b/cmd/flux/testdata/export/bucket.yaml index c998daf4..2e94a38e 100644 --- a/cmd/flux/testdata/export/bucket.yaml +++ b/cmd/flux/testdata/export/bucket.yaml @@ -1,5 +1,5 @@ --- -apiVersion: source.toolkit.fluxcd.io/v1beta1 +apiVersion: source.toolkit.fluxcd.io/v1beta2 kind: Bucket metadata: name: flux-system diff --git a/cmd/flux/testdata/export/git-repo.yaml b/cmd/flux/testdata/export/git-repo.yaml index ed590afd..ee74c4b0 100644 --- a/cmd/flux/testdata/export/git-repo.yaml +++ b/cmd/flux/testdata/export/git-repo.yaml @@ -1,5 +1,5 @@ --- -apiVersion: source.toolkit.fluxcd.io/v1beta1 +apiVersion: source.toolkit.fluxcd.io/v1beta2 kind: GitRepository metadata: name: flux-system diff --git a/cmd/flux/testdata/export/helm-repo.yaml b/cmd/flux/testdata/export/helm-repo.yaml index 1503ebf8..6467d6ce 100644 --- a/cmd/flux/testdata/export/helm-repo.yaml +++ b/cmd/flux/testdata/export/helm-repo.yaml @@ -1,5 +1,5 @@ --- -apiVersion: source.toolkit.fluxcd.io/v1beta1 +apiVersion: source.toolkit.fluxcd.io/v1beta2 kind: HelmRepository metadata: name: flux-system diff --git a/cmd/flux/trace.go b/cmd/flux/trace.go index b5805ffd..27227f88 100644 --- a/cmd/flux/trace.go +++ b/cmd/flux/trace.go @@ -37,7 +37,7 @@ import ( helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" fluxmeta "github.com/fluxcd/pkg/apis/meta" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta1" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" ) var traceCmd = &cobra.Command{ diff --git a/cmd/flux/uninstall.go b/cmd/flux/uninstall.go index 15d271b8..c26cbf00 100644 --- a/cmd/flux/uninstall.go +++ b/cmd/flux/uninstall.go @@ -34,7 +34,7 @@ import ( "github.com/fluxcd/flux2/pkg/manifestgen" helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta1" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" ) var uninstallCmd = &cobra.Command{ diff --git a/internal/flags/git_implementation.go b/internal/flags/git_implementation.go index b6896303..77512c2e 100644 --- a/internal/flags/git_implementation.go +++ b/internal/flags/git_implementation.go @@ -20,7 +20,7 @@ import ( "fmt" "strings" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta1" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" "github.com/fluxcd/flux2/internal/utils" ) diff --git a/internal/flags/git_implementation_test.go b/internal/flags/git_implementation_test.go index 22048f2e..9af8cfe2 100644 --- a/internal/flags/git_implementation_test.go +++ b/internal/flags/git_implementation_test.go @@ -22,7 +22,7 @@ package flags import ( "testing" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta1" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" ) func TestGitImplementation_Set(t *testing.T) { diff --git a/internal/flags/helm_chart_source.go b/internal/flags/helm_chart_source.go index c085d21f..f257f199 100644 --- a/internal/flags/helm_chart_source.go +++ b/internal/flags/helm_chart_source.go @@ -20,7 +20,7 @@ import ( "fmt" "strings" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta1" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" "github.com/fluxcd/flux2/internal/utils" ) diff --git a/internal/flags/helm_chart_source_test.go b/internal/flags/helm_chart_source_test.go index 726581ed..4590c3e9 100644 --- a/internal/flags/helm_chart_source_test.go +++ b/internal/flags/helm_chart_source_test.go @@ -23,7 +23,7 @@ import ( "fmt" "testing" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta1" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" ) func TestHelmChartSource_Set(t *testing.T) { diff --git a/internal/flags/kustomization_source.go b/internal/flags/kustomization_source.go index ca0b9f8e..b506230d 100644 --- a/internal/flags/kustomization_source.go +++ b/internal/flags/kustomization_source.go @@ -20,7 +20,7 @@ import ( "fmt" "strings" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta1" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" "github.com/fluxcd/flux2/internal/utils" ) diff --git a/internal/flags/kustomization_source_test.go b/internal/flags/kustomization_source_test.go index 2d1ba7e0..f2a398c4 100644 --- a/internal/flags/kustomization_source_test.go +++ b/internal/flags/kustomization_source_test.go @@ -23,7 +23,7 @@ import ( "fmt" "testing" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta1" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" ) func TestKustomizationSource_Set(t *testing.T) { diff --git a/internal/flags/source_bucket_provider.go b/internal/flags/source_bucket_provider.go index 87e26977..f5c62c71 100644 --- a/internal/flags/source_bucket_provider.go +++ b/internal/flags/source_bucket_provider.go @@ -21,7 +21,7 @@ import ( "strings" "github.com/fluxcd/flux2/internal/utils" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta1" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" ) var supportedSourceBucketProviders = []string{sourcev1.GenericBucketProvider, sourcev1.AmazonBucketProvider} diff --git a/internal/flags/source_bucket_provider_test.go b/internal/flags/source_bucket_provider_test.go index 244a7ac6..2f3192fd 100644 --- a/internal/flags/source_bucket_provider_test.go +++ b/internal/flags/source_bucket_provider_test.go @@ -22,7 +22,7 @@ package flags import ( "testing" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta1" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" ) func TestSourceBucketProvider_Set(t *testing.T) { diff --git a/internal/utils/utils.go b/internal/utils/utils.go index cdadeaa4..cc24354d 100644 --- a/internal/utils/utils.go +++ b/internal/utils/utils.go @@ -46,9 +46,9 @@ import ( imagereflectv1 "github.com/fluxcd/image-reflector-controller/api/v1beta1" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" notificationv1 "github.com/fluxcd/notification-controller/api/v1beta1" - "github.com/fluxcd/pkg/runtime/dependency" + "github.com/fluxcd/pkg/apis/meta" "github.com/fluxcd/pkg/version" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta1" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" "github.com/fluxcd/flux2/pkg/manifestgen/install" ) @@ -226,8 +226,8 @@ func ParseObjectKindNameNamespace(input string) (kind, name, namespace string) { return kind, name, namespace } -func MakeDependsOn(deps []string) []dependency.CrossNamespaceDependencyReference { - refs := []dependency.CrossNamespaceDependencyReference{} +func MakeDependsOn(deps []string) []meta.NamespacedObjectReference { + refs := []meta.NamespacedObjectReference{} for _, dep := range deps { parts := strings.Split(dep, "/") depNamespace := "" @@ -238,7 +238,7 @@ func MakeDependsOn(deps []string) []dependency.CrossNamespaceDependencyReference } else { depName = parts[0] } - refs = append(refs, dependency.CrossNamespaceDependencyReference{ + refs = append(refs, meta.NamespacedObjectReference{ Namespace: depNamespace, Name: depName, }) diff --git a/internal/utils/utils_test.go b/internal/utils/utils_test.go index 516423e6..c51e3e3c 100644 --- a/internal/utils/utils_test.go +++ b/internal/utils/utils_test.go @@ -25,7 +25,7 @@ import ( "reflect" "testing" - "github.com/fluxcd/pkg/runtime/dependency" + "github.com/fluxcd/pkg/apis/meta" ) func TestCompatibleVersion(t *testing.T) { @@ -88,7 +88,7 @@ func TestMakeDependsOn(t *testing.T) { "someNSD/", "", } - want := []dependency.CrossNamespaceDependencyReference{ + want := []meta.NamespacedObjectReference{ {Namespace: "someNSA", Name: "someNameA"}, {Namespace: "someNSB", Name: "someNameB"}, {Namespace: "", Name: "someNameC"}, diff --git a/pkg/manifestgen/sync/sync.go b/pkg/manifestgen/sync/sync.go index 757d6bef..818c11f4 100644 --- a/pkg/manifestgen/sync/sync.go +++ b/pkg/manifestgen/sync/sync.go @@ -28,7 +28,7 @@ import ( kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" "github.com/fluxcd/pkg/apis/meta" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta1" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" "github.com/fluxcd/flux2/pkg/manifestgen" ) diff --git a/pkg/manifestgen/sync/sync_test.go b/pkg/manifestgen/sync/sync_test.go index 3ab0a743..2c22d407 100644 --- a/pkg/manifestgen/sync/sync_test.go +++ b/pkg/manifestgen/sync/sync_test.go @@ -25,7 +25,7 @@ import ( "testing" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta1" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" ) func TestGenerate(t *testing.T) { diff --git a/tests/azure/azure_test.go b/tests/azure/azure_test.go index ce4c2937..ed701baa 100644 --- a/tests/azure/azure_test.go +++ b/tests/azure/azure_test.go @@ -51,7 +51,7 @@ import ( notiv1beta1 "github.com/fluxcd/notification-controller/api/v1beta1" "github.com/fluxcd/pkg/apis/meta" "github.com/fluxcd/pkg/runtime/events" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta1" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" ) const ( diff --git a/tests/azure/go.mod b/tests/azure/go.mod index 0f0ff70c..59981ec6 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -9,9 +9,9 @@ require ( github.com/fluxcd/image-reflector-controller/api v0.16.0 github.com/fluxcd/kustomize-controller/api v0.20.2 github.com/fluxcd/notification-controller/api v0.21.0 - github.com/fluxcd/pkg/apis/meta v0.10.2 + github.com/fluxcd/pkg/apis/meta v0.12.1 github.com/fluxcd/pkg/runtime v0.12.4 - github.com/fluxcd/source-controller/api v0.21.2 + github.com/fluxcd/source-controller/api v0.22.0 github.com/hashicorp/terraform-exec v0.14.0 github.com/libgit2/git2go/v31 v31.6.1 github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 @@ -19,9 +19,9 @@ require ( github.com/whilp/git-urls v1.0.0 go.uber.org/multierr v1.6.0 k8s.io/api v0.23.1 - k8s.io/apimachinery v0.23.1 + k8s.io/apimachinery v0.23.4 k8s.io/client-go v0.23.1 - sigs.k8s.io/controller-runtime v0.11.0 + sigs.k8s.io/controller-runtime v0.11.1 ) require ( @@ -103,7 +103,7 @@ require ( k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65 // indirect k8s.io/utils v0.0.0-20211208161948-7d6a63dca704 // indirect sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2 // indirect - sigs.k8s.io/structured-merge-diff/v4 v4.2.0 // indirect + sigs.k8s.io/structured-merge-diff/v4 v4.2.1 // indirect sigs.k8s.io/yaml v1.3.0 // indirect ) diff --git a/tests/azure/go.sum b/tests/azure/go.sum index 125d7610..9582fe29 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -212,14 +212,15 @@ github.com/fluxcd/pkg/apis/acl v0.0.3 h1:Lw0ZHdpnO4G7Zy9KjrzwwBmDZQuy4qEjaU/RvA6 github.com/fluxcd/pkg/apis/acl v0.0.3/go.mod h1:XPts6lRJ9C9fIF9xVWofmQwftvhY25n1ps7W9xw0XLU= github.com/fluxcd/pkg/apis/kustomize v0.3.1 h1:wmb5D9e1+Rr3/5O3235ERuj+h2VKUArVfYYk68QKP+w= github.com/fluxcd/pkg/apis/kustomize v0.3.1/go.mod h1:k2HSRd68UwgNmOYBPOd6WbX6a2MH2X/Jeh7e3s3PFPc= -github.com/fluxcd/pkg/apis/meta v0.10.2 h1:pnDBBEvfs4HaKiVAYgz+e/AQ8dLvcgmVfSeBroZ/KKI= github.com/fluxcd/pkg/apis/meta v0.10.2/go.mod h1:KQ2er9xa6koy7uoPMZjIjNudB5p4tXs+w0GO6fRcy7I= +github.com/fluxcd/pkg/apis/meta v0.12.1 h1:m5PfKAqbqWBvGp9+JRj1sv+xNkGsHwUVf+3rJ8wm6SE= +github.com/fluxcd/pkg/apis/meta v0.12.1/go.mod h1:f8YVt70/KAhqzZ7xxhjvqyzKubOYx2pAbakb/FfCEg8= github.com/fluxcd/pkg/runtime v0.12.3/go.mod h1:imJ2xYy/d4PbSinX2IefmZk+iS2c1P5fY0js8mCE4SM= github.com/fluxcd/pkg/runtime v0.12.4 h1:gA27RG/+adN2/7Qe03PB46Iwmye/MusPCpuS4zQ2fW0= github.com/fluxcd/pkg/runtime v0.12.4/go.mod h1:gspNvhAqodZgSmK1ZhMtvARBf/NGAlxmaZaIOHkJYsc= github.com/fluxcd/source-controller/api v0.21.0/go.mod h1:Ab2qDmAUz6ZCp8UaHYLYzxyFrC1FQqEqjxiROb/Rdiw= -github.com/fluxcd/source-controller/api v0.21.2 h1:J0S5NN4V8FPLrkSMXIUoUvj1X/RuTpVJSjIRF414wmc= -github.com/fluxcd/source-controller/api v0.21.2/go.mod h1:Ab2qDmAUz6ZCp8UaHYLYzxyFrC1FQqEqjxiROb/Rdiw= +github.com/fluxcd/source-controller/api v0.22.0 h1:WF0xsrlyUaRLWS4u5un3yfzlvER86sZx/qiV6l7Ay6Q= +github.com/fluxcd/source-controller/api v0.22.0/go.mod h1:Vb13q9Pq+1IW/sJUZn/RSb7IU5WT86Er6uCFPCFm9L4= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/form3tech-oss/jwt-go v3.2.3+incompatible h1:7ZaBxOI7TMoYBfyA3cQHErNNyAWIKUMIwqxEtgHOs5c= @@ -1121,8 +1122,9 @@ k8s.io/apiextensions-apiserver v0.23.0/go.mod h1:xIFAEEDlAZgpVBl/1VSjGDmLoXAWRG4 k8s.io/apiextensions-apiserver v0.23.1 h1:xxE0q1vLOVZiWORu1KwNRQFsGWtImueOrqSl13sS5EU= k8s.io/apiextensions-apiserver v0.23.1/go.mod h1:0qz4fPaHHsVhRApbtk3MGXNn2Q9M/cVWWhfHdY2SxiM= k8s.io/apimachinery v0.23.0/go.mod h1:fFCTTBKvKcwTPFzjlcxp91uPFZr+JA0FubU4fLzzFYc= -k8s.io/apimachinery v0.23.1 h1:sfBjlDFwj2onG0Ijx5C+SrAoeUscPrmghm7wHP+uXlo= k8s.io/apimachinery v0.23.1/go.mod h1:SADt2Kl8/sttJ62RRsi9MIV4o8f5S3coArm0Iu3fBno= +k8s.io/apimachinery v0.23.4 h1:fhnuMd/xUL3Cjfl64j5ULKZ1/J9n8NuQEgNL+WXWfdM= +k8s.io/apimachinery v0.23.4/go.mod h1:BEuFMMBaIbcOqVIJqNZJXGFTP4W6AycEpb5+m/97hrM= k8s.io/apiserver v0.23.0/go.mod h1:Cec35u/9zAepDPPFyT+UMrgqOCjgJ5qtfVJDxjZYmt4= k8s.io/apiserver v0.23.1/go.mod h1:Bqt0gWbeM2NefS8CjWswwd2VNAKN6lUKR85Ft4gippY= k8s.io/client-go v0.23.0/go.mod h1:hrDnpnK1mSr65lHHcUuIZIXDgEbzc7/683c6hyG4jTA= @@ -1141,21 +1143,24 @@ k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65 h1:E3J9oCLlaobFUqsjG9DfKb k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65/go.mod h1:sX9MT8g7NVZM5lVL/j8QyCCJe8YSMW30QvGZWaCIDIk= k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20210930125809-cb0fa318a74b/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/utils v0.0.0-20211116205334-6203023598ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20211208161948-7d6a63dca704 h1:ZKMMxTvduyf5WUtREOqg5LiXaN1KO/+0oOQPRFrClpo= k8s.io/utils v0.0.0-20211208161948-7d6a63dca704/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.25/go.mod h1:Mlj9PNLmG9bZ6BHFwFKDo5afkpWyUISkb9Me0GnK66I= -sigs.k8s.io/controller-runtime v0.11.0 h1:DqO+c8mywcZLFJWILq4iktoECTyn30Bkj0CwgqMpZWQ= sigs.k8s.io/controller-runtime v0.11.0/go.mod h1:KKwLiTooNGu+JmLZGn9Sl3Gjmfj66eMbCQznLP5zcqA= +sigs.k8s.io/controller-runtime v0.11.1 h1:7YIHT2QnHJArj/dk9aUkYhfqfK5cIxPOX5gPECfdZLU= +sigs.k8s.io/controller-runtime v0.11.1/go.mod h1:KKwLiTooNGu+JmLZGn9Sl3Gjmfj66eMbCQznLP5zcqA= sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6/go.mod h1:p4QtZmO4uMYipTQNzagwnNoseA6OxSUutVw05NhYDRs= sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2 h1:kDi4JBNAsJWfz1aEXhO8Jg87JJaPNLh5tIzYHgStQ9Y= sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2/go.mod h1:B+TnT182UBxE84DiCz4CVE26eOSDAeYCpfDnC2kdKMY= sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= sigs.k8s.io/structured-merge-diff/v4 v4.1.2/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= -sigs.k8s.io/structured-merge-diff/v4 v4.2.0 h1:kDvPBbnPk+qYmkHmSo8vKGp438IASWofnbbUKDE/bv0= sigs.k8s.io/structured-merge-diff/v4 v4.2.0/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= +sigs.k8s.io/structured-merge-diff/v4 v4.2.1 h1:bKCqE9GvQ5tiVHn5rfn1r+yao3aLQEaLzkkmAkf+A6Y= +sigs.k8s.io/structured-merge-diff/v4 v4.2.1/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= diff --git a/tests/azure/util_test.go b/tests/azure/util_test.go index 958b40fd..c49b28d7 100644 --- a/tests/azure/util_test.go +++ b/tests/azure/util_test.go @@ -41,7 +41,7 @@ import ( kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" notiv1beta1 "github.com/fluxcd/notification-controller/api/v1beta1" "github.com/fluxcd/pkg/apis/meta" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta1" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" ) const defaultBranch = "main" From efe9a3052396017e8024e2514c43b8f70c658b41 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Tue, 22 Mar 2022 17:56:40 +0100 Subject: [PATCH 053/818] Update dependencies - github.com/Masterminds/semver/v3 to v3.1.1 - github.com/ProtonMail/go-crypto to v0.0.0-20220113124808-70ae35bab23f - github.com/cyphar/filepath-securejoin to v0.2.3 - github.com/fluxcd/pkg/kustomize to v0.0.3 - github.com/fluxcd/pkg/runtime to v0.13.2 - github.com/fluxcd/pkg/ssa to v0.15.1 - github.com/fluxcd/pkg/ssh to v0.3.2 - github.com/fluxcd/pkg/untar to v0.1.0 - github.com/fluxcd/pkg/version to v0.1.0 - github.com/gonvenience/bunt to v1.3.3 - github.com/gonvenience/ytbx to v1.4.4 - github.com/google/go-containerregistry to v0.8.0 - github.com/homeport/dyff to v1.5.1 - github.com/olekukonko/tablewriter to v0.0.5 - github.com/spf13/cobra to v1.4.0 - golang.org/x/crypto to v0.0.0-20220321153916-2c7772ba3064 - k8s.io/kubectl to v0.23.4 - k8s.io/cli-runtime to v0.23.4 - sigs.k8s.io/cli-utils to v0.29.3 Signed-off-by: Hidde Beydals --- Makefile | 4 +- go.mod | 58 +++-- go.sum | 657 ++++++++++++++++++++++++++++++++++--------------------- 3 files changed, 438 insertions(+), 281 deletions(-) diff --git a/Makefile b/Makefile index 5fd6f05f..7942926d 100644 --- a/Makefile +++ b/Makefile @@ -16,8 +16,8 @@ rwildcard=$(foreach d,$(wildcard $(addsuffix *,$(1))),$(call rwildcard,$(d)/,$(2 all: test build tidy: - go mod tidy - cd tests/azure && go mod tidy + go mod tidy -compat=1.17 + cd tests/azure && go mod tidy -compat=1.17 fmt: go fmt ./... diff --git a/go.mod b/go.mod index 76a9f70b..6ccfa081 100644 --- a/go.mod +++ b/go.mod @@ -3,9 +3,9 @@ module github.com/fluxcd/flux2 go 1.17 require ( - github.com/Masterminds/semver/v3 v3.1.0 - github.com/ProtonMail/go-crypto v0.0.0-20211221144345-a4f6767435ab - github.com/cyphar/filepath-securejoin v0.2.2 + github.com/Masterminds/semver/v3 v3.1.1 + github.com/ProtonMail/go-crypto v0.0.0-20220113124808-70ae35bab23f + github.com/cyphar/filepath-securejoin v0.2.3 github.com/fluxcd/go-git-providers v0.5.4 github.com/fluxcd/helm-controller/api v0.18.0 github.com/fluxcd/image-automation-controller/api v0.21.0 @@ -13,36 +13,36 @@ require ( github.com/fluxcd/kustomize-controller/api v0.22.0 github.com/fluxcd/notification-controller/api v0.23.0 github.com/fluxcd/pkg/apis/meta v0.12.1 - github.com/fluxcd/pkg/kustomize v0.0.2 - github.com/fluxcd/pkg/runtime v0.12.5 - github.com/fluxcd/pkg/ssa v0.14.1 - github.com/fluxcd/pkg/ssh v0.3.1 - github.com/fluxcd/pkg/untar v0.0.5 - github.com/fluxcd/pkg/version v0.0.1 + github.com/fluxcd/pkg/kustomize v0.0.3 + github.com/fluxcd/pkg/runtime v0.13.2 + github.com/fluxcd/pkg/ssa v0.15.1 + github.com/fluxcd/pkg/ssh v0.3.2 + github.com/fluxcd/pkg/untar v0.1.0 + github.com/fluxcd/pkg/version v0.1.0 github.com/fluxcd/source-controller/api v0.22.0 github.com/go-git/go-git/v5 v5.4.2 - github.com/gonvenience/bunt v1.3.2 - github.com/gonvenience/ytbx v1.4.2 + github.com/gonvenience/bunt v1.3.3 + github.com/gonvenience/ytbx v1.4.4 github.com/google/go-cmp v0.5.7 - github.com/google/go-containerregistry v0.2.0 + github.com/google/go-containerregistry v0.8.0 github.com/hashicorp/go-multierror v1.1.1 - github.com/homeport/dyff v1.4.6 + github.com/homeport/dyff v1.5.1 github.com/lucasb-eyer/go-colorful v1.2.0 github.com/manifoldco/promptui v0.9.0 github.com/mattn/go-shellwords v1.0.12 - github.com/olekukonko/tablewriter v0.0.4 - github.com/spf13/cobra v1.3.0 + github.com/olekukonko/tablewriter v0.0.5 + github.com/spf13/cobra v1.4.0 github.com/spf13/pflag v1.0.5 github.com/theckman/yacspin v0.13.12 - golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3 + golang.org/x/crypto v0.0.0-20220321153916-2c7772ba3064 golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 k8s.io/api v0.23.4 k8s.io/apiextensions-apiserver v0.23.4 k8s.io/apimachinery v0.23.4 - k8s.io/cli-runtime v0.23.2 + k8s.io/cli-runtime v0.23.4 k8s.io/client-go v0.23.4 - k8s.io/kubectl v0.23.2 - sigs.k8s.io/cli-utils v0.28.0 + k8s.io/kubectl v0.23.4 + sigs.k8s.io/cli-utils v0.29.3 sigs.k8s.io/controller-runtime v0.11.1 sigs.k8s.io/kustomize/api v0.11.2 sigs.k8s.io/kustomize/kyaml v0.13.3 @@ -58,9 +58,9 @@ require ( github.com/Azure/go-autorest/autorest/date v0.3.0 // indirect github.com/Azure/go-autorest/logger v0.2.1 // indirect github.com/Azure/go-autorest/tracing v0.6.0 // indirect - github.com/BurntSushi/toml v0.4.1 // indirect + github.com/BurntSushi/toml v1.0.0 // indirect github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd // indirect - github.com/Microsoft/go-winio v0.4.16 // indirect + github.com/Microsoft/go-winio v0.5.1 // indirect github.com/PuerkitoBio/purell v1.1.1 // indirect github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect github.com/acomagu/bufpipe v1.0.3 // indirect @@ -86,10 +86,10 @@ require ( github.com/go-openapi/swag v0.19.14 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/protobuf v1.5.2 // indirect - github.com/gonvenience/neat v1.3.7 // indirect - github.com/gonvenience/term v1.0.1 // indirect - github.com/gonvenience/text v1.0.6 // indirect - github.com/gonvenience/wrap v1.1.0 // indirect + github.com/gonvenience/neat v1.3.9 // indirect + github.com/gonvenience/term v1.0.2 // indirect + github.com/gonvenience/text v1.0.7 // indirect + github.com/gonvenience/wrap v1.1.1 // indirect github.com/google/btree v1.0.1 // indirect github.com/google/go-github/v41 v41.0.0 // indirect github.com/google/go-querystring v1.1.0 // indirect @@ -125,8 +125,6 @@ require ( github.com/peterbourgon/diskv v2.0.1+incompatible // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/prometheus/common v0.32.1 // indirect - github.com/prometheus/procfs v0.7.3 // indirect github.com/rivo/uniseg v0.2.0 // indirect github.com/russross/blackfriday v1.5.2 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect @@ -138,7 +136,7 @@ require ( github.com/xanzy/ssh-agent v0.3.0 // indirect github.com/xlab/treeprint v0.0.0-20181112141820-a009c3971eca // indirect go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 // indirect - golang.org/x/net v0.0.0-20211216030914-fe4d6282115f // indirect + golang.org/x/net v0.0.0-20220121210141-e204ce36a2ba // indirect golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 // indirect golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect golang.org/x/sys v0.0.0-20220114195835-da31bd327af9 // indirect @@ -157,7 +155,3 @@ require ( sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2 // indirect sigs.k8s.io/structured-merge-diff/v4 v4.2.1 // indirect ) - -// Fix for CVE-2020-29652: https://github.com/golang/crypto/commit/8b5274cf687fd9316b4108863654cc57385531e8 -// Fix for CVE-2021-43565: https://github.com/golang/crypto/commit/5770296d904e90f15f38f77dfc2e43fdf5efc083 -replace golang.org/x/crypto => golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3 diff --git a/go.sum b/go.sum index 2196788d..83579425 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,4 @@ +bazil.org/fuse v0.0.0-20160811212531-371fbbdaa898/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= @@ -48,70 +49,72 @@ cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohl cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/Azure/azure-sdk-for-go v35.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/azure-sdk-for-go v38.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/azure-sdk-for-go v42.3.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +github.com/Azure/azure-sdk-for-go v16.2.1+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= github.com/Azure/go-ansiterm v0.0.0-20210608223527-2377c96fe795/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= +github.com/Azure/go-autorest v10.8.1+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs= github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= -github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= -github.com/Azure/go-autorest/autorest v0.9.3/go.mod h1:GsRuLYvwzLjjjRoWEIyMUaYq8GNUx2nRB378IPt/1p0= -github.com/Azure/go-autorest/autorest v0.10.2/go.mod h1:/FALq9T/kS7b5J5qsQ+RSTUdAmGFqi0vUdVNNx8q630= +github.com/Azure/go-autorest/autorest v0.11.1/go.mod h1:JFgpikqFJ/MleTTxwepExTKnFUKKszPS8UavbQYUMuw= github.com/Azure/go-autorest/autorest v0.11.18 h1:90Y4srNYrwOtAgVo3ndrQkTYn6kf1Eg/AjTFJ8Is2aM= github.com/Azure/go-autorest/autorest v0.11.18/go.mod h1:dSiJPy22c3u0OtOKDNttNgqpNFY/GeWa7GH/Pz56QRA= -github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= -github.com/Azure/go-autorest/autorest/adal v0.8.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S6HY6e6wcHn37qQMBQlvY3lc= -github.com/Azure/go-autorest/autorest/adal v0.8.2/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= +github.com/Azure/go-autorest/autorest/adal v0.9.0/go.mod h1:/c022QCutn2P7uY+/oQWWNcK9YU+MH96NgK+jErpbcg= github.com/Azure/go-autorest/autorest/adal v0.9.5/go.mod h1:B7KF7jKIeC9Mct5spmyCB/A8CG/sEz1vwIRGv/bbw7A= github.com/Azure/go-autorest/autorest/adal v0.9.13 h1:Mp5hbtOePIzM8pJVRa3YLrWWmZtoxRXqUEzCfJt3+/Q= github.com/Azure/go-autorest/autorest/adal v0.9.13/go.mod h1:W/MM4U6nLxnIskrw4UwWzlHfGjwUS50aOsc/I3yuU8M= -github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= -github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g= github.com/Azure/go-autorest/autorest/date v0.3.0 h1:7gUk1U5M/CQbp9WoqinNzJar+8KY+LPI6wiWrP/myHw= github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74= -github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= -github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= -github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= +github.com/Azure/go-autorest/autorest/mocks v0.4.0/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= github.com/Azure/go-autorest/autorest/mocks v0.4.1 h1:K0laFcLE6VLTOwNgSxaGbUcLPuGXlNkbVvq4cW4nIHk= github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= -github.com/Azure/go-autorest/autorest/to v0.2.0/go.mod h1:GunWKJp1AEqgMaGLV+iocmRAJWqST1wQYhyyjXJ3SJc= -github.com/Azure/go-autorest/autorest/to v0.3.0/go.mod h1:MgwOyqaIuKdG4TL/2ywSsIWKAfJfgHDo8ObuUk3t5sA= -github.com/Azure/go-autorest/autorest/validation v0.1.0/go.mod h1:Ha3z/SqBeaalWQvokg3NZAlQTalVMtOIAs1aGK7G6u8= -github.com/Azure/go-autorest/autorest/validation v0.2.0/go.mod h1:3EEqHnBxQGHXRYq3HT1WyXAvT7LLY3tl70hw6tQIbjI= -github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= +github.com/Azure/go-autorest/logger v0.2.0/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= github.com/Azure/go-autorest/logger v0.2.1 h1:IG7i4p/mDa2Ce4TRyAO8IHnVhAVF3RFU+ZtXWSmf4Tg= github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= -github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo= github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/toml v0.4.1 h1:GaI7EiDXDRfa8VshkTj7Fym7ha+y8/XxIgD2okUIjLw= -github.com/BurntSushi/toml v0.4.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/toml v1.0.0 h1:dtDWrepsVPfW9H/4y7dDgFc2MBUSeJhlaDtK13CxFlU= +github.com/BurntSushi/toml v1.0.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= -github.com/GoogleCloudPlatform/k8s-cloud-provider v0.0.0-20190822182118-27a4ced34534/go.mod h1:iroGtC8B3tQiqtds1l+mgk/BBOrxbqjH+eUfFQYRc14= github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd h1:sjQovDkwrZp8u+gxLtPgKGjk5hCxuy2hrRejBTA9xFU= github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd/go.mod h1:64YHyfSL2R96J44Nlwm39UHepQbyR5q10x7iYa1ks2E= -github.com/Masterminds/semver/v3 v3.1.0 h1:Y2lUDsFKVRSYGojLJ1yLxSXdMmMYTYls0rCvoqmMUQk= github.com/Masterminds/semver/v3 v3.1.0/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= +github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030IGemrRc= +github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= +github.com/Microsoft/go-winio v0.4.11/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA= github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= -github.com/Microsoft/go-winio v0.4.16 h1:FtSW/jqD+l4ba5iPBj9CODVtgfYAD8w2wS923g/cFDk= +github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= +github.com/Microsoft/go-winio v0.4.16-0.20201130162521-d1ffc52c7331/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= +github.com/Microsoft/go-winio v0.4.17-0.20210211115548-6eac466e5fa3/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= +github.com/Microsoft/go-winio v0.4.17-0.20210324224401-5516f17a5958/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= +github.com/Microsoft/go-winio v0.4.17/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= +github.com/Microsoft/go-winio v0.5.1 h1:aPJp2QD7OOrhO5tQXqQoGSJc+DjDtWTGLOmNyAm6FgY= +github.com/Microsoft/go-winio v0.5.1/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= +github.com/Microsoft/hcsshim v0.8.6/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg= +github.com/Microsoft/hcsshim v0.8.7-0.20190325164909-8abdbb8205e4/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg= +github.com/Microsoft/hcsshim v0.8.7/go.mod h1:OHd7sQqRFrYd3RmSgbgji+ctCwkbq2wbEYNSzOYtcBQ= +github.com/Microsoft/hcsshim v0.8.9/go.mod h1:5692vkUqntj1idxauYlpoINNKeqCiG6Sg38RRsjT5y8= +github.com/Microsoft/hcsshim v0.8.14/go.mod h1:NtVKoYxQuTLx6gEq0L96c9Ju4JbRJ4nY2ow3VK6a9Lg= +github.com/Microsoft/hcsshim v0.8.15/go.mod h1:x38A4YbHbdxJtc0sF6oIz+RG0npwSCAvn69iY6URG00= +github.com/Microsoft/hcsshim v0.8.16/go.mod h1:o5/SZqmR7x9JNKsW3pu+nqHm0MF8vbA+VxGOoXdC600= +github.com/Microsoft/hcsshim v0.8.23/go.mod h1:4zegtUJth7lAvFyc6cH2gGQ5B3OFQim01nnU2M8jKDg= +github.com/Microsoft/hcsshim/test v0.0.0-20201218223536-d3e5debf77da/go.mod h1:5hlzMzRKMLyo42nCZ9oml8AdTlq/0cvIaBv6tK1RehU= +github.com/Microsoft/hcsshim/test v0.0.0-20210227013316-43a75bb4edd3/go.mod h1:mw7qgWloBUl75W/gVH3cQszUg1+gUITj7D6NY7ywVnY= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= -github.com/ProtonMail/go-crypto v0.0.0-20211221144345-a4f6767435ab h1:5FiL/TCaiKCss/BLMIACDxxadYrx767l9kh0qYX+sLQ= -github.com/ProtonMail/go-crypto v0.0.0-20211221144345-a4f6767435ab/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= -github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/ProtonMail/go-crypto v0.0.0-20220113124808-70ae35bab23f h1:J2FzIrXN82q5uyUraeJpLIm7U6PffRwje2ORho5yIik= +github.com/ProtonMail/go-crypto v0.0.0-20220113124808-70ae35bab23f/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ= github.com/acomagu/bufpipe v1.0.3 h1:fxAGrHZTgQ9w5QqVItgzwj235/uYZYgbXitB+dLupOk= github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -119,6 +122,7 @@ github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuy github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= +github.com/alexflint/go-filemutex v0.0.0-20171022225611-72bdc8eae2ae/go.mod h1:CgnQgUtFrFz9mxFNtED3jI5tLDjKlOM+oUF/sTk6ps0= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo4JG6LR5AXSUEsOjtdm0kw0FtQtMJA= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= @@ -132,19 +136,29 @@ github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgI github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= -github.com/aws/aws-sdk-go v1.28.2/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.31.6/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= +github.com/aws/aws-sdk-go v1.15.11/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= +github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/beorn7/perks v0.0.0-20160804104726-4c0e84591b9a/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA= +github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= -github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/blang/semver v3.1.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= +github.com/bshuster-repo/logrus-logstash-hook v0.4.1/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk= +github.com/buger/jsonparser v0.0.0-20180808090653-f4dd9f5a6b44/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= +github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8= +github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b/go.mod h1:obH5gd0BsqsP2LwDJ9aOkm/6J86V6lyAXCoQWGw3K50= +github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE= +github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/certifi/gocertifi v0.0.0-20191021191039-0944d244cd40/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= @@ -156,12 +170,19 @@ github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cb github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5 h1:7aWHqerlJ41y6FOsEUvknqgXnGmJyJSbjhAWq5pO4F8= github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5/go.mod h1:/iP1qXHoty45bqomnu2LM+VVyAEdWN+vtSHGlQgyxbw= +github.com/checkpoint-restore/go-criu/v4 v4.1.0/go.mod h1:xUQBLp4RLc5zJtWY++yjOoMoB5lihDt7fai+75m+rGw= +github.com/checkpoint-restore/go-criu/v5 v5.0.0/go.mod h1:cfwC0EG7HMUenopBsUf9d89JlCLQIfgVcNsNN0t6T2M= github.com/chzyer/logex v1.1.10 h1:Swpa1K6QvQznwJRcfTfQJmTE72DqScAa40E+fbHEXEE= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e h1:fY5BOSpyZCqRo5OhCuC+XN+r/bBCmeuuJtjz+bCNIf8= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1 h1:q763qf9huN11kDQavWsoZXJNW3xEE4JJyHa5Q25/sd8= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/cilium/ebpf v0.0.0-20200110133405-4032b1d8aae3/go.mod h1:MA5e5Lr8slmEg9bt0VpxxWqJlO4iwu3FBdHUzV7wQVg= +github.com/cilium/ebpf v0.0.0-20200702112145-1c8d4c9ef775/go.mod h1:7cR51M8ViRLIdUjrmSXlK9pkrsDlLHbO8jiB8X8JnOc= +github.com/cilium/ebpf v0.2.0/go.mod h1:To2CFviqOWL/M0gIMsvSMlqe7em/l1ALkX1PyjrX2Qs= +github.com/cilium/ebpf v0.4.0/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs= +github.com/cilium/ebpf v0.6.2/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs= github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= @@ -179,19 +200,107 @@ github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:z github.com/cockroachdb/datadriven v0.0.0-20200714090401-bf6692d28da5/go.mod h1:h6jFvWxBdQXxjopDMZyH2UVceIRfR84bdzbkoKrsWNo= github.com/cockroachdb/errors v1.2.4/go.mod h1:rQD95gz6FARkaKkQXUksEje/d9a6wBJoCr5oaCLELYA= github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f/go.mod h1:i/u985jwjWRlyHXQbwatDASoW0RMlZ/3i9yJHE2xLkI= +github.com/containerd/aufs v0.0.0-20200908144142-dab0cbea06f4/go.mod h1:nukgQABAEopAHvB6j7cnP5zJ+/3aVcE7hCYqvIwAHyE= +github.com/containerd/aufs v0.0.0-20201003224125-76a6863f2989/go.mod h1:AkGGQs9NM2vtYHaUen+NljV0/baGCAPELGm2q9ZXpWU= +github.com/containerd/aufs v0.0.0-20210316121734-20793ff83c97/go.mod h1:kL5kd6KM5TzQjR79jljyi4olc1Vrx6XBlcyj3gNv2PU= +github.com/containerd/aufs v1.0.0/go.mod h1:kL5kd6KM5TzQjR79jljyi4olc1Vrx6XBlcyj3gNv2PU= +github.com/containerd/btrfs v0.0.0-20201111183144-404b9149801e/go.mod h1:jg2QkJcsabfHugurUvvPhS3E08Oxiuh5W/g1ybB4e0E= +github.com/containerd/btrfs v0.0.0-20210316141732-918d888fb676/go.mod h1:zMcX3qkXTAi9GI50+0HOeuV8LU2ryCE/V2vG/ZBiTss= +github.com/containerd/btrfs v1.0.0/go.mod h1:zMcX3qkXTAi9GI50+0HOeuV8LU2ryCE/V2vG/ZBiTss= +github.com/containerd/cgroups v0.0.0-20190717030353-c4b9ac5c7601/go.mod h1:X9rLEHIqSf/wfK8NsPqxJmeZgW4pcfzdXITDrUSJ6uI= +github.com/containerd/cgroups v0.0.0-20190919134610-bf292b21730f/go.mod h1:OApqhQ4XNSNC13gXIwDjhOQxjWa/NxkwZXJ1EvqT0ko= +github.com/containerd/cgroups v0.0.0-20200531161412-0dbf7f05ba59/go.mod h1:pA0z1pT8KYB3TCXK/ocprsh7MAkoW8bZVzPdih9snmM= +github.com/containerd/cgroups v0.0.0-20200710171044-318312a37340/go.mod h1:s5q4SojHctfxANBDvMeIaIovkq29IP48TKAxnhYRxvo= +github.com/containerd/cgroups v0.0.0-20200824123100-0b889c03f102/go.mod h1:s5q4SojHctfxANBDvMeIaIovkq29IP48TKAxnhYRxvo= +github.com/containerd/cgroups v0.0.0-20210114181951-8a68de567b68/go.mod h1:ZJeTFisyysqgcCdecO57Dj79RfL0LNeGiFUqLYQRYLE= +github.com/containerd/cgroups v1.0.1/go.mod h1:0SJrPIenamHDcZhEcJMNBB85rHcUsw4f25ZfBiPYRkU= +github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= +github.com/containerd/console v0.0.0-20181022165439-0650fd9eeb50/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= +github.com/containerd/console v0.0.0-20191206165004-02ecf6a7291e/go.mod h1:8Pf4gM6VEbTNRIT26AyyU7hxdQU3MvAvxVI0sc00XBE= +github.com/containerd/console v1.0.1/go.mod h1:XUsP6YE/mKtz6bxc+I8UiKKTP04qjQL4qcS3XoQ5xkw= +github.com/containerd/console v1.0.2/go.mod h1:ytZPjGgY2oeTkAONYafi2kSj0aYggsf8acV1PGKCbzQ= +github.com/containerd/containerd v1.2.10/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.3.0-beta.2.0.20190828155532-0293cbd26c69/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= github.com/containerd/containerd v1.3.0/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.3.1-0.20191213020239-082f7e3aed57/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.3.2/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.4.0-beta.2.0.20200729163537-40b22ef07410/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.4.1/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.4.3/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.4.9/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.5.0-beta.1/go.mod h1:5HfvG1V2FsKesEGQ17k5/T7V960Tmcumvqn8Mc+pCYQ= +github.com/containerd/containerd v1.5.0-beta.3/go.mod h1:/wr9AVtEM7x9c+n0+stptlo/uBBoBORwEx6ardVcmKU= +github.com/containerd/containerd v1.5.0-beta.4/go.mod h1:GmdgZd2zA2GYIBZ0w09ZvgqEq8EfBp/m3lcVZIvPHhI= +github.com/containerd/containerd v1.5.0-rc.0/go.mod h1:V/IXoMqNGgBlabz3tHD2TWDoTJseu1FGOKuoA4nNb2s= +github.com/containerd/containerd v1.5.8/go.mod h1:YdFSv5bTFLpG2HIYmfqDpSYYTDX+mc5qtSuYx1YUb/s= +github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= +github.com/containerd/continuity v0.0.0-20190815185530-f2a389ac0a02/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= +github.com/containerd/continuity v0.0.0-20191127005431-f65d91d395eb/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= +github.com/containerd/continuity v0.0.0-20200710164510-efbc4488d8fe/go.mod h1:cECdGN1O8G9bgKTlLhuPJimka6Xb/Gg7vYzCTNVxhvo= +github.com/containerd/continuity v0.0.0-20201208142359-180525291bb7/go.mod h1:kR3BEg7bDFaEddKm54WSmrol1fKWDU1nKYkgrcgZT7Y= +github.com/containerd/continuity v0.0.0-20210208174643-50096c924a4e/go.mod h1:EXlVlkqNba9rJe3j7w3Xa924itAMLgZH4UD/Q4PExuQ= +github.com/containerd/continuity v0.1.0/go.mod h1:ICJu0PwR54nI0yPEnJ6jcS+J7CZAUXrLh8lPo2knzsM= +github.com/containerd/fifo v0.0.0-20180307165137-3d5202aec260/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= +github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= +github.com/containerd/fifo v0.0.0-20200410184934-f15a3290365b/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0= +github.com/containerd/fifo v0.0.0-20201026212402-0724c46b320c/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0= +github.com/containerd/fifo v0.0.0-20210316144830-115abcc95a1d/go.mod h1:ocF/ME1SX5b1AOlWi9r677YJmCPSwwWnQ9O123vzpE4= +github.com/containerd/fifo v1.0.0/go.mod h1:ocF/ME1SX5b1AOlWi9r677YJmCPSwwWnQ9O123vzpE4= +github.com/containerd/go-cni v1.0.1/go.mod h1:+vUpYxKvAF72G9i1WoDOiPGRtQpqsNW/ZHtSlv++smU= +github.com/containerd/go-cni v1.0.2/go.mod h1:nrNABBHzu0ZwCug9Ije8hL2xBCYh/pjfMb1aZGrrohk= +github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= +github.com/containerd/go-runc v0.0.0-20190911050354-e029b79d8cda/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= +github.com/containerd/go-runc v0.0.0-20200220073739-7016d3ce2328/go.mod h1:PpyHrqVs8FTi9vpyHwPwiNEGaACDxT/N/pLcvMSRA9g= +github.com/containerd/go-runc v0.0.0-20201020171139-16b287bc67d0/go.mod h1:cNU0ZbCgCQVZK4lgG3P+9tn9/PaJNmoDXPpoJhDR+Ok= +github.com/containerd/go-runc v1.0.0/go.mod h1:cNU0ZbCgCQVZK4lgG3P+9tn9/PaJNmoDXPpoJhDR+Ok= +github.com/containerd/imgcrypt v1.0.1/go.mod h1:mdd8cEPW7TPgNG4FpuP3sGBiQ7Yi/zak9TYCG3juvb0= +github.com/containerd/imgcrypt v1.0.4-0.20210301171431-0ae5c75f59ba/go.mod h1:6TNsg0ctmizkrOgXRNQjAPFWpMYRWuiB6dSF4Pfa5SA= +github.com/containerd/imgcrypt v1.1.1-0.20210312161619-7ed62a527887/go.mod h1:5AZJNI6sLHJljKuI9IHnw1pWqo/F0nGDOuR9zgTs7ow= +github.com/containerd/imgcrypt v1.1.1/go.mod h1:xpLnwiQmEUJPvQoAapeb2SNCxz7Xr6PJrXQb0Dpc4ms= +github.com/containerd/nri v0.0.0-20201007170849-eb1350a75164/go.mod h1:+2wGSDGFYfE5+So4M5syatU0N0f0LbWpuqyMi4/BE8c= +github.com/containerd/nri v0.0.0-20210316161719-dbaa18c31c14/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY= +github.com/containerd/nri v0.1.0/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY= +github.com/containerd/stargz-snapshotter/estargz v0.10.1/go.mod h1:aE5PCyhFMwR8sbrErO5eM2GcvkyXTTJremG883D4qF0= +github.com/containerd/ttrpc v0.0.0-20190828154514-0e0f228740de/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= +github.com/containerd/ttrpc v0.0.0-20190828172938-92c8520ef9f8/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= +github.com/containerd/ttrpc v0.0.0-20191028202541-4f1b8fe65a5c/go.mod h1:LPm1u0xBw8r8NOKoOdNMeVHSawSsltak+Ihv+etqsE8= +github.com/containerd/ttrpc v1.0.1/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y= +github.com/containerd/ttrpc v1.0.2/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y= +github.com/containerd/ttrpc v1.1.0/go.mod h1:XX4ZTnoOId4HklF4edwc4DcqskFZuvXB1Evzy5KFQpQ= +github.com/containerd/typeurl v0.0.0-20180627222232-a93fcdb778cd/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc= +github.com/containerd/typeurl v0.0.0-20190911142611-5eb25027c9fd/go.mod h1:GeKYzf2pQcqv7tJ0AoCuuhtnqhva5LNU3U+OyKxxJpk= +github.com/containerd/typeurl v1.0.1/go.mod h1:TB1hUtrpaiO88KEK56ijojHS1+NeF0izUACaJW2mdXg= +github.com/containerd/typeurl v1.0.2/go.mod h1:9trJWW2sRlGub4wZJRTW83VtbOLS6hwcDZXTn6oPz9s= +github.com/containerd/zfs v0.0.0-20200918131355-0a33824f23a2/go.mod h1:8IgZOBdv8fAgXddBT4dBXJPtxyRsejFIpXoklgxgEjw= +github.com/containerd/zfs v0.0.0-20210301145711-11e8f1707f62/go.mod h1:A9zfAbMlQwE+/is6hi0Xw8ktpL+6glmqZYtevJgaB8Y= +github.com/containerd/zfs v0.0.0-20210315114300-dde8f0fda960/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY= +github.com/containerd/zfs v0.0.0-20210324211415-d5c4544f0433/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY= +github.com/containerd/zfs v1.0.0/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY= +github.com/containernetworking/cni v0.7.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= +github.com/containernetworking/cni v0.8.0/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= +github.com/containernetworking/cni v0.8.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= +github.com/containernetworking/plugins v0.8.6/go.mod h1:qnw5mN19D8fIwkqW7oHHYDHVlzhJpcY6TQxn/fUyDDM= +github.com/containernetworking/plugins v0.9.1/go.mod h1:xP/idU2ldlzN6m4p5LmGiwRDjeJr6FLK6vuiUwoH7P8= +github.com/containers/ocicrypt v1.0.1/go.mod h1:MeJDzk1RJHv89LjsH0Sp5KTY3ZYkjXO/C+bKAeWFIrc= +github.com/containers/ocicrypt v1.1.0/go.mod h1:b8AOe0YR67uU8OqfVNcznfFpAzu3rdgUV4GP9qXPfu4= +github.com/containers/ocicrypt v1.1.1/go.mod h1:Dm55fwWm1YZAjYRaJ94z2mfZikIyIN4B0oB3dj3jFxY= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-iptables v0.4.5/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmekav8Dbxlm1MU= +github.com/coreos/go-iptables v0.5.0/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmekav8Dbxlm1MU= github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20161114122254-48702e0da86b/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd/v22 v22.0.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= +github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/coreos/pkg v0.0.0-20180108230652-97fdf19511ea/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.1 h1:r/myEWzV9lfsM1tFLgDyu0atFtJ1fXn261LKYj/3DxU= github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= @@ -199,23 +308,36 @@ github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7Do github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.11 h1:07n33Z8lZxZ2qwegKbObQohDhXDQxiMMz1NOUGYlesw= github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/cyphar/filepath-securejoin v0.2.2 h1:jCwT2GTP+PY5nBz3c/YL5PAIbusElVrPujOBSCj8xRg= github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4= -github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/cyphar/filepath-securejoin v0.2.3 h1:YX6ebbZCZP7VkM3scTTokDgBL2TY741X51MTk3ycuNI= +github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= +github.com/d2g/dhcp4 v0.0.0-20170904100407-a1d1b6c41b1c/go.mod h1:Ct2BUK8SB0YC1SMSibvLzxjeJLnrYEVLULFNiHY9YfQ= +github.com/d2g/dhcp4client v1.0.0/go.mod h1:j0hNfjhrt2SxUOw55nL0ATM/z4Yt3t2Kd1mW34z5W5s= +github.com/d2g/dhcp4server v0.0.0-20181031114812-7d4a0a7f59a5/go.mod h1:Eo87+Kg/IX2hfWJfwxMzLyuSZyxSoAug2nGa1G2QAi8= +github.com/d2g/hardwareaddr v0.0.0-20190221164911-e7d9fbe030e4/go.mod h1:bMl4RjIciD2oAxI7DmWRx6gbeqrkoLqv3MV0vzNad+I= +github.com/danieljoos/wincred v1.1.0/go.mod h1:XYlo+eRTsVA9aHGp7NGjFkPla4m+DCL7hqDjlFjiygg= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/daviddengcn/go-colortext v0.0.0-20160507010035-511bcaf42ccd/go.mod h1:dv4zxwHi5C/8AeI+4gX4dCWOIvNi7I6JCSX0HvlKPgE= +github.com/denverdino/aliyungo v0.0.0-20190125010748-a747050bb1ba/go.mod h1:dV8lFg6daOBZbT6/BDGIz6Y3WFGn8juu6G+CQ6LHtl0= +github.com/dgrijalva/jwt-go v0.0.0-20170104182250-a601269ab70c/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E= -github.com/docker/cli v0.0.0-20191017083524-a8ff7f821017/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/cli v20.10.12+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/distribution v0.0.0-20190905152932-14b96e55d84c/go.mod h1:0+TTO4EOBfRPhZXAeF1Vu+W3hHZ8eLp8PgKVZlcvtFY= +github.com/docker/distribution v2.7.1-0.20190205005809-0d3efadf0154+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v0.7.3-0.20190327010347-be7ac8be2ae0/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v1.4.2-0.20190924003213-a8608b5b67c7/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker-credential-helpers v0.6.3/go.mod h1:WRaJzqw3CTB9bk10avuGsjVBZsD05qeibJ1/TYlvc0Y= +github.com/docker/docker v20.10.12+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker-credential-helpers v0.6.4/go.mod h1:ofX3UI0Gz1TteYBjtgs07O36Pyasyp66D2uKT7H8W1c= github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= +github.com/docker/go-events v0.0.0-20170721190031-9461782956ad/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= +github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= +github.com/docker/go-metrics v0.0.0-20180209012529-399ea8c73916/go.mod h1:/u0gXw0Gay3ceNrsHubL3BtdOL2fHf93USgMTe0W5dI= +github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw= github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE= github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/drone/envsubst/v2 v2.0.0-20210730161058-179042472c46 h1:7QPwrLT79GlD5sizHf27aoY2RTvw62mO6x7mxkScNk0= @@ -239,8 +361,7 @@ github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go. github.com/envoyproxy/go-control-plane v0.10.1/go.mod h1:AY7fTTXNdv/aJ2O5jwpxAPOWUZ7hQAEvzN5Pf27BkQQ= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v0.6.2/go.mod h1:2t7qjJNvHPx8IjnBOzl9E9/baC+qXE/TeeyBRzgJDws= -github.com/evanphx/json-patch v0.0.0-20200808040245-162e5629780b/go.mod h1:NAJj0yf/KaRKURN6nyi7A9IZydMivZEm9oQLWNjfKDc= -github.com/evanphx/json-patch v0.5.2/go.mod h1:ZWS5hhDbVDyob71nXKNL0+PWn6ToqBHMikGIFbs31qQ= +github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.11.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH5pOlLGNtQ5lPWQu84= github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= @@ -266,36 +387,37 @@ github.com/fluxcd/notification-controller/api v0.23.0 h1:eWlccKDCEhkPuj8jx+RNpc4 github.com/fluxcd/notification-controller/api v0.23.0/go.mod h1:0QFnW7CrYl5ItHNPpstxU42Pmb5/Qepx8FFjVxcZqIk= github.com/fluxcd/pkg/apis/acl v0.0.3 h1:Lw0ZHdpnO4G7Zy9KjrzwwBmDZQuy4qEjaU/RvA6k1lc= github.com/fluxcd/pkg/apis/acl v0.0.3/go.mod h1:XPts6lRJ9C9fIF9xVWofmQwftvhY25n1ps7W9xw0XLU= -github.com/fluxcd/pkg/apis/kustomize v0.3.1/go.mod h1:k2HSRd68UwgNmOYBPOd6WbX6a2MH2X/Jeh7e3s3PFPc= github.com/fluxcd/pkg/apis/kustomize v0.3.2 h1:ULoAwOOekHf5cy6mYIwL+K6v8/cfcNVVbwfIPgWjdjg= github.com/fluxcd/pkg/apis/kustomize v0.3.2/go.mod h1:p8iAH5TeqMBnnxkkpCNNDvWYfKlNRx89a6WKOo+hJHA= -github.com/fluxcd/pkg/apis/meta v0.10.2/go.mod h1:KQ2er9xa6koy7uoPMZjIjNudB5p4tXs+w0GO6fRcy7I= github.com/fluxcd/pkg/apis/meta v0.12.1 h1:m5PfKAqbqWBvGp9+JRj1sv+xNkGsHwUVf+3rJ8wm6SE= github.com/fluxcd/pkg/apis/meta v0.12.1/go.mod h1:f8YVt70/KAhqzZ7xxhjvqyzKubOYx2pAbakb/FfCEg8= -github.com/fluxcd/pkg/kustomize v0.0.2 h1:ipvQrxSeuGZDsPZrVUL6tYMlTR5xqYTZp6G0Tdy2hVs= -github.com/fluxcd/pkg/kustomize v0.0.2/go.mod h1:AFwnf3OqQmpTCuwCARTGpPRMBf0ZFJNGCvW63KbgK04= -github.com/fluxcd/pkg/runtime v0.12.5 h1:/8+0UBnSHbO9DVG9IFTjc37lwofsixGbs5WpHso8n5s= -github.com/fluxcd/pkg/runtime v0.12.5/go.mod h1:gspNvhAqodZgSmK1ZhMtvARBf/NGAlxmaZaIOHkJYsc= -github.com/fluxcd/pkg/ssa v0.14.1 h1:AZxM1VJusAV0r0GgtR43Z8NUI2luV68C/7I0/g28D6c= -github.com/fluxcd/pkg/ssa v0.14.1/go.mod h1:9HfCfy4COdRt/Ck4T4BPPc3i8MgFZFRlY+Bcm+8vMCw= -github.com/fluxcd/pkg/ssh v0.3.1 h1:iQw07bkX2rScactX8WYv+uMDsufFOlg8M3fV2TNs244= -github.com/fluxcd/pkg/ssh v0.3.1/go.mod h1:Sebfv4Um51PvomuYdMvKRncQW5dtKhZ5J5TA+wiHNSQ= -github.com/fluxcd/pkg/untar v0.0.5 h1:UGI3Ch1UIEIaqQvMicmImL1s9npQa64DJ/ozqHKB7gk= -github.com/fluxcd/pkg/untar v0.0.5/go.mod h1:O6V9+rtl8c1mHBafgqFlJN6zkF1HS5SSYn7RpQJ/nfw= -github.com/fluxcd/pkg/version v0.0.1 h1:/8asQoDXSThz3csiwi4Qo8Zb6blAxLXbtxNgeMJ9bCg= -github.com/fluxcd/pkg/version v0.0.1/go.mod h1:WAF4FEEA9xyhngF8TDxg3UPu5fA1qhEYV8Pmi2Il01Q= +github.com/fluxcd/pkg/kustomize v0.0.3 h1:u1uj8se4bhq0mDrD/qZ3Wbk4/a8Kcbm132tsLwJakm4= +github.com/fluxcd/pkg/kustomize v0.0.3/go.mod h1:ezVwKj22MUktPCECK5pFvAOh57P1yh3Y6SV2NAt/cd0= +github.com/fluxcd/pkg/runtime v0.13.2 h1:6jkQQUbp17WxHsbozlJFCvHmOS4JIB+yB20CdCd8duE= +github.com/fluxcd/pkg/runtime v0.13.2/go.mod h1:dzWNKqFzFXeittbpFcJzR3cdC9CWlbzw+pNOgaVvF/0= +github.com/fluxcd/pkg/ssa v0.15.1 h1:HXAT+K6c9Yy8Evxdyk3DU0KTk3yZ+fwgTEEzU1W/1V8= +github.com/fluxcd/pkg/ssa v0.15.1/go.mod h1:OSXVu/uKPbhzBRljA359+WYxbXtMUNbkADlrS3Rm+gE= +github.com/fluxcd/pkg/ssh v0.3.2 h1:HZlDF6Qu4yplsU4Tisv6hxsRIbIOwwr7rKus8/Q/Dn0= +github.com/fluxcd/pkg/ssh v0.3.2/go.mod h1:OVnuv9y2WCx7AoOIid0sxqe9lLKKfDS4PMl+4ta5DIo= +github.com/fluxcd/pkg/untar v0.1.0 h1:k97V/xV5hFrAkIkVPuv5AVhyxh1ZzzAKba/lbDfGo6o= +github.com/fluxcd/pkg/untar v0.1.0/go.mod h1:aGswNyzB1mlz/T/kpOS58mITBMxMKc9tlJBH037A2HY= +github.com/fluxcd/pkg/version v0.1.0 h1:v+SmCanmCB5Tj2Cx9TXlj+kNRfPGbAvirkeqsp7ZEAQ= +github.com/fluxcd/pkg/version v0.1.0/go.mod h1:V7Z/w8dxLQzv0FHqa5ox5TeyOd2zOd49EeuWFgnwyj4= github.com/fluxcd/source-controller/api v0.22.0 h1:WF0xsrlyUaRLWS4u5un3yfzlvER86sZx/qiV6l7Ay6Q= github.com/fluxcd/source-controller/api v0.22.0/go.mod h1:Vb13q9Pq+1IW/sJUZn/RSb7IU5WT86Er6uCFPCFm9L4= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/form3tech-oss/jwt-go v3.2.3+incompatible h1:7ZaBxOI7TMoYBfyA3cQHErNNyAWIKUMIwqxEtgHOs5c= github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= +github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpgI= github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= +github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa/go.mod h1:KnogPXtdwXqoenmZCw6S+25EAm2MkxbG0deNDu4cbSA= github.com/fvbommel/sortorder v1.0.1 h1:dSnXLt4mJYH25uDDGa3biZNQsozaUWDSWeKJ0qqFfzE= github.com/fvbommel/sortorder v1.0.1/go.mod h1:uk88iVf1ovNn1iLfgUVU2F9o5eO30ui720w+kxuqRs0= +github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= github.com/getkin/kin-openapi v0.76.0/go.mod h1:660oXbgy5JFMKreazJaQTw7o+X00qeSyhcnluiMv+Xg= github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ= github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= @@ -316,6 +438,7 @@ github.com/go-git/go-git/v5 v5.4.2/go.mod h1:gQ1kArt6d+n+BGd+/B/I74HwRTLhth2+zti github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-ini/ini v1.25.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= @@ -329,31 +452,31 @@ github.com/go-logr/logr v1.2.2 h1:ahHml/yUpnlb96Rp8HCvtYVPY8ZYpxq3g7UYchIYwbs= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/zapr v1.2.0/go.mod h1:Qa4Bsj2Vb+FAVeAKsLD8RLQ+YRJB8YDmOAKxaBQf7Ro= github.com/go-logr/zapr v1.2.2 h1:5YNlIL6oZLydaV4dOFjL8YpgXF/tPeTbnpatnu3cq6o= -github.com/go-logr/zapr v1.2.2/go.mod h1:eIauM6P8qSvTw5o2ez6UEAfGjQKrxQTl5EoK+Qa2oG4= -github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= github.com/go-openapi/jsonreference v0.19.5 h1:1WJP/wi4OjB4iV8KVbH73rQaoialJrqv8gitZLxGLtM= github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg= -github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= -github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.14 h1:gm3vOOXfiuw5i9p5N9xJvfjvuofpyvLA9Wr6QfK5Fng= github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= -github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= +github.com/godbus/dbus v0.0.0-20151105175453-c7fdd8b5cd55/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= +github.com/godbus/dbus v0.0.0-20180201030542-885f9cc04c9c/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= +github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= +github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/gogo/googleapis v1.2.0/go.mod h1:Njal3psf3qN6dwBtQfUmBZh2ybovJ0tlu3o/AC7HYjU= +github.com/gogo/googleapis v1.4.0/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= @@ -375,8 +498,6 @@ github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= -github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.0.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -397,22 +518,18 @@ github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golangplus/testing v0.0.0-20180327235837-af21d9c3145e/go.mod h1:0AA//k/eakGydO4jKRoRL2j92ZKSzTgj9tclaCrvXHk= -github.com/gonvenience/bunt v1.1.3/go.mod h1:hZ898ZprNWgaVlq4s1ivsJu3AY+3wrlJadF5Gp7Yq2c= -github.com/gonvenience/bunt v1.3.1/go.mod h1:G+d3dJBxxOqV2oca96psgAnPABVC9QptEifjVqPu+mo= -github.com/gonvenience/bunt v1.3.2 h1:gDiyTDfPf87fCtIbFzvENrmlnDZYbENdhhRW2kun/tw= -github.com/gonvenience/bunt v1.3.2/go.mod h1:oTOZqb1TVL1KqZm57zUCJCiwUliNfY8+d3QndOVqxpg= -github.com/gonvenience/neat v1.3.6/go.mod h1:wv0eXmvwFfpuS5bpf2fIofXQvf8W7HTdSzKfGCYbIe8= -github.com/gonvenience/neat v1.3.7 h1:k4shy3sgSBfUk9LTN51naxVIkB6BlGaxH0ReERO92zw= -github.com/gonvenience/neat v1.3.7/go.mod h1:Y4eeQH3GEBvjmLoMiu4oWGyOopGDaI2/y2jwcVfvlvs= -github.com/gonvenience/term v1.0.0/go.mod h1:wohD4Iqso9Eol7qc2VnNhSFFhZxok5PvO7pZhdrAn4E= -github.com/gonvenience/term v1.0.1 h1:8bg2O0ox0Ss64nnUxW5AXlSHhllc8dTOSKuKu6uoGpw= -github.com/gonvenience/term v1.0.1/go.mod h1:TrQEhxBNE/ng5kTV+S0OvQowTDJSfhlBeZbcOmTR6qI= -github.com/gonvenience/text v1.0.6 h1:9JH9fz0BL0NX4uKmjLuVcsBKiniPa+XLpf8KH9so44U= -github.com/gonvenience/text v1.0.6/go.mod h1:9U5WbkT/5wR5+aNMR4HucamY+HgVMEn+UbF78XHmUio= -github.com/gonvenience/wrap v1.1.0 h1:d8gEZrXS/zg4BC1q0U4nHpPIh5k6muKpQ1+rQFBwpYc= -github.com/gonvenience/wrap v1.1.0/go.mod h1:L47Cm1sK1G8QmFAYQfkHcF/sQ1IBJUa0u4sjqiLqPdM= -github.com/gonvenience/ytbx v1.4.2 h1:fpgOpsQ+gwTPqiatki0aY7q3BEjt7EcwiI5b+D0Qjvg= -github.com/gonvenience/ytbx v1.4.2/go.mod h1:GkUMPGH5qZSg1S8L6u9XNI9hJ4L1yKSQFIA4J8vaPdY= +github.com/gonvenience/bunt v1.3.3 h1:a751qSbJIgWGbazGYr9hyuudOg7wMHh2m4JjE3tfURE= +github.com/gonvenience/bunt v1.3.3/go.mod h1:XjlODZ8sTL9jQs9c4Kj1ZBTrHSsbUGdoRy7ROCtw8nU= +github.com/gonvenience/neat v1.3.9 h1:c3nbMP8ysGtaekkkY3Veg2OPa76fK8r45ontZdSPUw0= +github.com/gonvenience/neat v1.3.9/go.mod h1:UcFJPKGG0rxx1Kah6kavTms9Rz2Wr4ApT/WpOcX6NFA= +github.com/gonvenience/term v1.0.2 h1:qKa2RydbWIrabGjR/fegJwpW5m+JvUwFL8mLhHzDXn0= +github.com/gonvenience/term v1.0.2/go.mod h1:wThTR+3MzWtWn7XGVW6qQ65uaVf8GHED98KmwpuEQeo= +github.com/gonvenience/text v1.0.7 h1:YmIqmgTwxnACYCG59DykgMbomwteYyNhAmEUEJtPl14= +github.com/gonvenience/text v1.0.7/go.mod h1:OAjH+mohRszffLY6OjgQcUXiSkbrIavooFpfIt1ZwAs= +github.com/gonvenience/wrap v1.1.1 h1:7cMuyMtTdUe2aObp760CzXo/wOmFaY7JXsIksu8NYYc= +github.com/gonvenience/wrap v1.1.1/go.mod h1:u27bruNdIB6U5nnR0qq+GRRKbAJzEqC0H3DBHxl7YNM= +github.com/gonvenience/ytbx v1.4.4 h1:jQopwyaLsVGuwdxSiN4WkXjsEaFNPJ3V4lUj7eyEpzo= +github.com/gonvenience/ytbx v1.4.4/go.mod h1:w37+MKCPcCMY/jpPNmEklD4xKqrOAVBO6kIWW2+uI6M= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4= @@ -433,13 +550,12 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.7 h1:81/ik6ipDQS2aGcBfIN5dHDB36BwrStyeAQquSYCV4o= github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= -github.com/google/go-containerregistry v0.2.0 h1:cWFYx+kOkKdyOET0pcp7GMCmxj7da40StvluSuSXWCg= -github.com/google/go-containerregistry v0.2.0/go.mod h1:Ts3Wioz1r5ayWx8sS6vLcWltWcM1aqFjd/eVrkFhrWM= +github.com/google/go-containerregistry v0.8.0 h1:mtR24eN6rapCN+shds82qFEIWWmg64NPMuyCNT7/Ogc= +github.com/google/go-containerregistry v0.8.0/go.mod h1:wW5v71NHGnQyb4k+gSshjxidrC7lN33MdWEn+Mz9TsI= github.com/google/go-github/v41 v41.0.0 h1:HseJrM2JFf2vfiZJ8anY2hqBjdfY1Vlj/K27ueww4gg= github.com/google/go-github/v41 v41.0.0/go.mod h1:XgmCA5H323A9rtgExdTcnDkcqp6S30AVACCBDOonIxg= github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= -github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= @@ -459,7 +575,6 @@ github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= @@ -469,21 +584,20 @@ github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3 github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= -github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= -github.com/googleapis/gnostic v0.1.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= -github.com/googleapis/gnostic v0.2.2/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= +github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2cUuW7uA/OeU= github.com/googleapis/gnostic v0.5.5 h1:9fHAtK0uDfpveeqqo1hkEZJcFvYXAiCN3UutL8F9xHw= github.com/googleapis/gnostic v0.5.5/go.mod h1:7+EbHbldMins07ALC74bsA81Ovc97DwqyJO1AENw9kA= -github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/handlers v0.0.0-20150720190736-60c7bfde3e33/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= +github.com/gorilla/mux v1.7.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= @@ -503,6 +617,7 @@ github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBt github.com/hashicorp/consul/api v1.11.0/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= +github.com/hashicorp/errwrap v0.0.0-20141028054710-7554cd9344ce/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= @@ -516,12 +631,12 @@ github.com/hashicorp/go-hclog v1.0.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39E github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= +github.com/hashicorp/go-multierror v0.0.0-20161216184304-ed905158d874/go.mod h1:JMRHfdO9jKNzS/+BTlxCjKNQHg/jZAft8U7LloJvN7I= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= -github.com/hashicorp/go-retryablehttp v0.6.8/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= github.com/hashicorp/go-retryablehttp v0.7.0 h1:eu1EI/mbirUgP5C8hVsTNaGZreBDlYiwC1FZWkvQPQ4= github.com/hashicorp/go-retryablehttp v0.7.0/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= @@ -533,7 +648,6 @@ github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/b github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.3/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= @@ -546,33 +660,33 @@ github.com/hashicorp/memberlist v0.3.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOn github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= github.com/hashicorp/serf v0.9.6/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= -github.com/homeport/dyff v1.4.6 h1:ReC8Hi1I6SkmPmNOqGl9EUlZctx+6AloCzSulqwHge8= -github.com/homeport/dyff v1.4.6/go.mod h1:DBCaTwJUIQLNQxNOKTce/OgRxCwwa8erBdN88bBfb9Y= +github.com/homeport/dyff v1.5.1 h1:SSMEQXQ71Iw2NUHbtPANZu7E2jlFkuiydg9HTdwqXso= +github.com/homeport/dyff v1.5.1/go.mod h1:o84/LlrvFeX6J1b4YxcNxlfhbiYbT0Hekt9kCLtgYZ4= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= 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= +github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.10/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= +github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/j-keck/arping v0.0.0-20160618110441-2cf9dc699c56/go.mod h1:ymszkNOg6tORTn+6F6j+Jc8TOr5osrynvN6ivFWZ2GA= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= -github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik= -github.com/joefitzgerald/rainbow-reporter v0.1.0/go.mod h1:481CNgqmVHQZzdIbN52CupLJyoVwB10FQ/IQlF1pdL8= +github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jmespath/go-jmespath v0.0.0-20160803190731-bd40a432e4c7/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= -github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= @@ -583,15 +697,17 @@ github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/X github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= -github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= -github.com/k0kubun/pp v2.3.0+incompatible/go.mod h1:GWse8YhT0p8pT4ir3ZgBbfZild3tgzSScAn6HmfYukg= github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351 h1:DowS9hvgyYSX4TO5NpyC606/Z4SxnNYbT+WX27or6Ck= github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.11.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.11.13/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= @@ -604,18 +720,15 @@ github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/ktrysmt/go-bitbucket v0.9.34/go.mod h1:FWxy2UK7GlK5b0NSJGc5hPqnssVlkNnsChvyuOf/Xno= github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de h1:9TO3cAIGXtEhnIaL+V+BEER86oLrvS+kWobKpbJuye0= github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9B/r2mtpb6U+EI2rYA5OAXxsYw6wTamcNW+zcE= github.com/lithammer/dedent v1.1.0/go.mod h1:jrXYCQtgg0nJiN+StA2KgR7w6CiQNv9Fd/Z9BP0jIOc= -github.com/lucasb-eyer/go-colorful v1.0.3/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/lyft/protoc-gen-star v0.5.3/go.mod h1:V0xaHgaf5oCCqmcxYcWiDfTiKsZsRc87/1qhoTACD8w= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= -github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= @@ -623,6 +736,7 @@ github.com/mailru/easyjson v0.7.6 h1:8yTIVnZgCoiM1TgqoeTl+LfU5Jg6/xL3QhGQnimLYnA github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/manifoldco/promptui v0.9.0 h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA= github.com/manifoldco/promptui v0.9.0/go.mod h1:ka04sppxSGFAtxX0qhlYQjISsg9mR4GWtQEhdbn6Pgg= +github.com/marstr/guid v1.1.0/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHefzho= github.com/matryer/is v1.2.0 h1:92UTHpy8CDwaJ08GqLDzhhuixiBUUD1p3AU6PHddz4A= github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= github.com/mattn/go-ciede2000 v0.0.0-20170301095244-782e8c62fec3 h1:BXxTozrOU8zgC5dkpn3J6NTRdoP+hjok/e+ACr4Hibk= @@ -643,23 +757,25 @@ github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9 github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU= github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mattn/go-shellwords v1.0.3/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o= github.com/mattn/go-shellwords v1.0.12 h1:M2zGm7EW6UQJvDeQxo4T51eKPurbeFbe8WtebGE2xrk= github.com/mattn/go-shellwords v1.0.12/go.mod h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lLtQsUlTZDWQ8Y= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= -github.com/maxbrunsfeld/counterfeiter/v6 v6.2.2/go.mod h1:eD9eIE7cdwcMi9rYluz88Jz2VyhSmden33/aXg4oVIY= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= +github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= +github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-ps v0.0.0-20170309133038-4fdf99ab2936/go.mod h1:r1VsdOzOPt1ZSrGZWFoNhsAedKnEd6r9Np1+5blZCWk= github.com/mitchellh/go-ps v1.0.0 h1:i6ampVEEF4wQFF+bkYfwYgY+F/uYJDktmvLPf7qIgjc= github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= @@ -670,18 +786,23 @@ github.com/mitchellh/hashstructure v1.1.0 h1:P6P1hdjqAAknpY/M1CGipelZgp+4y9ja9km github.com/mitchellh/hashstructure v1.1.0/go.mod h1:xUDAozZz0Wmdiufv0uyhnHkUTN6/6d8ulp4AwfLKrmA= github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v0.0.0-20180220230111-00c29f56e238/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f/go.mod h1:OkQIRizQZAeMln+1tSwduZz7+Af5oFlKirV/MSYes2A= +github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc= github.com/moby/spdystream v0.2.0 h1:cjW1zVyyoiM0T7b6UoySUFqzXMoqRckQtXwGPiBhOM8= github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= +github.com/moby/sys/mountinfo v0.4.0/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A= +github.com/moby/sys/mountinfo v0.4.1/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A= +github.com/moby/sys/symlink v0.1.0/go.mod h1:GGDODQmbFOjFsXvfLVn3+ZRxkch54RkSiGqsZeMYowQ= +github.com/moby/term v0.0.0-20200312100748-672ec06f55cd/go.mod h1:DdlQx2hp0Ss5/fLikoLlEeIYiATotOjgB//nb973jeo= +github.com/moby/term v0.0.0-20201216013528-df9cb8a40635/go.mod h1:FBS0z0QWA44HXygs7VXDUOGoN/1TV3RuWkLO04am3wc= github.com/moby/term v0.0.0-20210610120745-9d4ed1856297 h1:yH0SvLzcbZxcJXho2yh7CqdENGMQe73Cw3woZBpPli0= github.com/moby/term v0.0.0-20210610120745-9d4ed1856297/go.mod h1:vgPCkQMyxTZ7IDy8SXRufE172gr8+K/JE/7hHFxHW3A= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180320133207-05fbef0ca5da/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= @@ -689,123 +810,141 @@ github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjY github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 h1:n6/2gBQ3RWajuToeY6ZtZTIKv2v7ThUy5KKusIT0yc0= github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00/go.mod h1:Pm3mSP3c5uWn86xMLZ5Sa7JB9GsEZySvHYXCTK4E9q4= github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= +github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ= github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= +github.com/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= -github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/olekukonko/tablewriter v0.0.4 h1:vHD/YYe1Wolo78koG299f7V/VAS08c6IpCLn+Ejf/w8= github.com/olekukonko/tablewriter v0.0.4/go.mod h1:zq6QwlOf5SlnkVbMSr5EoBv3636FWnp+qbPhuoO21uA= +github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= +github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= +github.com/onsi/ginkgo v0.0.0-20151202141238-7f8ab55aaf3b/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= -github.com/onsi/ginkgo v1.14.2/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= -github.com/onsi/ginkgo v1.15.0/go.mod h1:hF8qUzuuC8DJGygJH3726JnCZX4MYbRB8yFfISqnKUg= -github.com/onsi/ginkgo v1.15.1/go.mod h1:Dd6YFfwBW84ETqqtL0CPyPXillHgY6XhQH3uuCCTr/o= -github.com/onsi/ginkgo v1.15.2/go.mod h1:Dd6YFfwBW84ETqqtL0CPyPXillHgY6XhQH3uuCCTr/o= -github.com/onsi/ginkgo v1.16.2/go.mod h1:CObGmKUOKaSC0RjmoAK7tKyn4Azo5P2IWuoMnvwxz1E= -github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= 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.0.0/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= +github.com/onsi/gomega v0.0.0-20151007035656-2152b45fa28a/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= -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.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDsH8xc= -github.com/onsi/gomega v1.10.5/go.mod h1:gza4q3jKQJijlu05nKWRCW/GavJumGt8aNRxWg7mt48= -github.com/onsi/gomega v1.11.0/go.mod h1:azGKhqFUon9Vuj0YmTfLSmx0FUwqXYSTl5re8lQLTUg= -github.com/onsi/gomega v1.12.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je41yGY= -github.com/onsi/gomega v1.16.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= -github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE= -github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= +github.com/opencontainers/go-digest v0.0.0-20170106003457-a6d0ee40d420/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= +github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= +github.com/opencontainers/go-digest v1.0.0-rc1.0.20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= +github.com/opencontainers/image-spec v1.0.0/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= +github.com/opencontainers/image-spec v1.0.2-0.20211117181255-693428a734f5/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= +github.com/opencontainers/runc v0.0.0-20190115041553-12f6a991201f/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= +github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= +github.com/opencontainers/runc v1.0.0-rc8.0.20190926000215-3e425f80a8c9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= +github.com/opencontainers/runc v1.0.0-rc9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= +github.com/opencontainers/runc v1.0.0-rc93/go.mod h1:3NOsor4w32B2tC0Zbl8Knk4Wg84SM2ImC1fxBuqJ/H0= +github.com/opencontainers/runc v1.0.2/go.mod h1:aTaHFFwQXuA71CiyxOdFFIorAoemI04suvGRQFzWTD0= +github.com/opencontainers/runtime-spec v0.1.2-0.20190507144316-5b71a03e2700/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-spec v1.0.1/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-spec v1.0.2-0.20190207185410-29686dbc5559/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-spec v1.0.3-0.20200929063507-e6143ca7d51d/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-tools v0.0.0-20181011054405-1d69bd0f9c39/go.mod h1:r3f7wjNzSs2extwzU3Y+6pKfobzPh+kKFJ3ofN+3nfs= +github.com/opencontainers/selinux v1.6.0/go.mod h1:VVGKuOLlE7v4PJyT6h7mNWvq1rzqiriPsEqVhc+svHE= +github.com/opencontainers/selinux v1.8.0/go.mod h1:RScLhm78qiWa2gbVCcGkC7tCGdgk3ogry1nUQF8Evvo= +github.com/opencontainers/selinux v1.8.2/go.mod h1:MUIHuUEvKB1wtJjQdOyYRgOnLD2xAPP8dBsCoU0KuF8= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc= github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1-0.20171018195549-f15c970de5b7/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= -github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= +github.com/prometheus/client_golang v0.0.0-20180209125602-c332b6f63c06/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_golang v1.12.1 h1:ZiaPsmm9uiBeaSMRznKsCDNtPCS0T3JVDGF+06gjBzk= -github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= +github.com/prometheus/client_model v0.0.0-20171117100541-99fa1f4be8e5/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/common v0.0.0-20180110214958-89604d197083/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.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.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= github.com/prometheus/common v0.28.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/common v0.32.1 h1:hWIdL3N2HoUx3B8j3YN9mWor0qhY/NlEKZEaXxuIRh4= -github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/procfs v0.0.0-20180125133057-cb4147076ac7/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.0-20190522114515-bc1a522cf7b1/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= 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.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= -github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446/go.mod h1:uYEyJGbgTkfkS4+E/PavXkNJcbFIpEtjt2B0KDQ5+9M= github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rubiojr/go-vhd v0.0.0-20160810183302-0bfd3b39853c/go.mod h1:DM5xW0nvfNNm2uytzsvhI3OnX8uzaRAg8UX/CnDqbto= github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/safchain/ethtool v0.0.0-20190326074333-42ed695e3de8/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4= github.com/sagikazarmark/crypt v0.3.0/go.mod h1:uD/D+6UF4SrIR1uGEv7bBNkNqLGqUr43MRiaGWX1Nig= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= -github.com/sclevine/spec v1.2.0/go.mod h1:W4J29eT/Kzv7/b9IWLB055Z+qvVC9vt0Arko24q7p+U= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= +github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= @@ -813,6 +952,7 @@ github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrf github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/soheilhy/cmux v0.1.5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0= @@ -824,15 +964,18 @@ github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cobra v0.0.2-0.20171109065643-2da4a54c5cee/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo= github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= -github.com/spf13/cobra v1.3.0 h1:R7cSvGu+Vv+qX0gW5R/85dx2kmmJT5z5NM8ifdYjdn0= github.com/spf13/cobra v1.3.0/go.mod h1:BrRVncBjOJa/eUcVVm9CE+oC6as8k+VYr4NY7WCi9V4= +github.com/spf13/cobra v1.4.0 h1:y+wJpx64xcgO1V+RcnwW0LEHxTKRi2ZDPSBjWnrg88Q= +github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.1-0.20171106142849-4c012f6dcd95/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= @@ -841,13 +984,14 @@ github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/y github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= github.com/spf13/viper v1.10.0/go.mod h1:SoyBPwAtKDzypXNDFKN5kzH7ppppbGZtls1UpIy5AsM= -github.com/spyzhov/ajson v0.4.2/go.mod h1:63V+CGM6f1Bu/p4nLIN8885ojBdt88TbLoSFzyqMuVA= +github.com/stefanberger/go-pkcs11uri v0.0.0-20201008174630-78d3cae3a980/go.mod h1:AO3tvPzVZ/ayst6UlUKUv6rcPQInYe3IknH3jYhAKu8= github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= +github.com/stretchr/objx v0.0.0-20180129172003-8a3f7159479f/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= -github.com/stretchr/testify v0.0.0-20151208002404-e3a8ff8ce365/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v0.0.0-20180303142811-b89eecf5ca5d/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -857,6 +1001,10 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.1 h1:5TQK59W5E3v0r2duFAb7P95B6hEeOyEnHRa8MjYSMTY= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= +github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= +github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= +github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= +github.com/tchap/go-patricia v2.2.6+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I= github.com/texttheater/golang-levenshtein v1.0.1 h1:+cRNoVrfiwufQPhoMzB6N0Yf/Mqajr6t1lOv8GyGE2U= github.com/texttheater/golang-levenshtein v1.0.1/go.mod h1:PYAKrbF5sAiq9wd+H82hs7gNaen0CplQ9uvm6+enD/8= github.com/theckman/yacspin v0.13.12 h1:CdZ57+n0U6JMuh2xqjnjRq5Haj6v1ner2djtLQRzJr4= @@ -866,15 +1014,29 @@ github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1 github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= +github.com/urfave/cli v0.0.0-20171014202726-7bc6a0acffa5/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= -github.com/vdemeester/k8s-pkg-credentialprovider v1.18.1-0.20201019120933-f1d16962a4db/go.mod h1:grWy0bkr1XO6hqbaaCKaPXqkBVlMGHYG6PGykktwbJc= +github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/cli v1.22.4/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/vbatts/tar-split v0.11.2/go.mod h1:vV3ZuO2yWSVsz+pfFzDG/upWH1JhjOiEaWq6kXyQ3VI= github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74 h1:JwtAtbp7r/7QSyGz8mKUbYJBg2+6Cd7OjM8o/GNOcVo= github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74/go.mod h1:RmMWU37GKR2s6pgrIEB4ixgpVCt/cf7dnJv3fuH1J1c= -github.com/vmware/govmomi v0.20.3/go.mod h1:URlwyTFZX72RmxtxuaFL2Uj3fD1JTvZdx59bHWk6aFU= +github.com/vishvananda/netlink v0.0.0-20181108222139-023a6dafdcdf/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk= +github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= +github.com/vishvananda/netlink v1.1.1-0.20201029203352-d40f9887b852/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhgX83tXhKS2B/PRMpOho= +github.com/vishvananda/netns v0.0.0-20180720170159-13995c7128cc/go.mod h1:ZjcWmFBXmLKZu9Nxj3WKYEafiSqer2rnvPr0en9UNpI= +github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= +github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= +github.com/willf/bitset v1.1.11-0.20200630133818-d5bec3311243/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= +github.com/willf/bitset v1.1.11/go.mod h1:83CECat5yLh5zVOf4P1ErAgKA5UDvKtgyUABdr3+MjI= github.com/xanzy/go-gitlab v0.54.3 h1:fPfZ3Jcu5dPc3xyIYtAALZsEgoyKNFNuULD+TdJ7Zvk= github.com/xanzy/go-gitlab v0.54.3/go.mod h1:F0QEXwmqiBUxCgJm8fE9S+1veX4XC9Z4cfaAbqwk4YM= github.com/xanzy/ssh-agent v0.3.0 h1:wUMzuKtKilRgBAD1sUb8gOwwRr2FGoBVumcjoOACClI= github.com/xanzy/ssh-agent v0.3.0/go.mod h1:3s9xbODqPuuhK9JV1R321M/FlMZSBvE5aY6eAcqrDh0= +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= +github.com/xeipuuv/gojsonschema v0.0.0-20180618132009-1d523034197f/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xlab/treeprint v0.0.0-20181112141820-a009c3971eca h1:1CFlNzQhALwjS9mBAUkycX616GzgsuYUOCHA5+HSlXI= github.com/xlab/treeprint v0.0.0-20181112141820-a009c3971eca/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= @@ -885,10 +1047,15 @@ github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43/go.mod h1:aX5oPXxHm3bOH+xeAttToC8pqch2ScQN/JoXYupl6xs= +github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50/go.mod h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96TguQh0+r/ssA= +github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= -go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= +go.etcd.io/etcd v0.5.0-alpha.5.0.20200910180754-dd1b699fc489/go.mod h1:yVHk9ub3CSBatqGNg7GRmsnfLWtoW60w4eDYfh7vHDg= go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= go.etcd.io/etcd/api/v3 v3.5.1/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= @@ -899,6 +1066,7 @@ go.etcd.io/etcd/client/v3 v3.5.0/go.mod h1:AIKXXVX/DQXtfTEqBryiLTUXwON+GuvO6Z7lL go.etcd.io/etcd/pkg/v3 v3.5.0/go.mod h1:UzJGatBQ1lXChBkQF0AuAtkRQMYnHubxAEYIrC3MSsE= go.etcd.io/etcd/raft/v3 v3.5.0/go.mod h1:UFOHSIvO/nKwd4lhkwabrTD3cqW5yVyYYf/KlD00Szc= go.etcd.io/etcd/server/v3 v3.5.0/go.mod h1:3Ah5ruV+M+7RZr0+Y/5mNLwC+eQlni+mQmOVdCRJoS4= +go.mozilla.org/pkcs7 v0.0.0-20200128120323-432b2356ecb1/go.mod h1:SNgMg+EgDFwmvSmLRTNKC5fegJjB7v23qTQ0XLGUNHk= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -925,22 +1093,36 @@ go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= -go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= -go.uber.org/zap v1.19.1 h1:ue41HOKd1vGURxrmeKIgELGb3jPW9DMUDGtsinblHwI= -go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= -golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3 h1:0es+/5331RGQPcXlMfP+WrnIIS6dNnNRe0WB02W0F4M= -golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +go.uber.org/zap v1.21.0 h1:WefMeulhovoZ2sYXz7st6K0sLj7bBhpiFaud4r4zST8= +golang.org/x/crypto v0.0.0-20171113213409-9f005a07e0d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181009213950-7c1a557ab941/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20220321153916-2c7772ba3064 h1:S25/rfnfsMVgORT4/J61MJ7rdyseOZOyvLIrZEZ7s6s= +golang.org/x/crypto v0.0.0-20220321153916-2c7772ba3064/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= 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= -golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= @@ -975,11 +1157,11 @@ golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 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.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= -golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -987,11 +1169,13 @@ golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190619014844-b5b0513f8c1b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -1020,27 +1204,24 @@ golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210326060303-6b1517762897/go.mod h1:uSPa2vr4CLtc/ILN5odXGNXS6mhrKVzTaCXzk9m6W3k= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210825183410-e898025ed96a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210917163549-3c21e5b27794/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211209124913-491a49abca63/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211215060638-4ddde0e984e9/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211216030914-fe4d6282115f h1:hEYJvxw1lSnWIl8X9ofsYMklzaDs90JI2az5YMd4fPM= golang.org/x/net v0.0.0-20211216030914-fe4d6282115f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/oauth2 v0.0.0-20180227000427-d7d64896b5ff/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/net v0.0.0-20220121210141-e204ce36a2ba h1:6u6sik+bn/y7vILcYkK3iwTBWN7WtBvB0+SZswQnbf8= +golang.org/x/net v0.0.0-20220121210141-e204ce36a2ba/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20181106182150-f42d05182288/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= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1071,8 +1252,6 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180224232135-f6cff0780e54/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1081,7 +1260,6 @@ golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190209173611-3b5209105503/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1089,14 +1267,20 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190514135907-3a4b5fb9f71f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190522044717-8097e1b27ff5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190602015325-4c4f7f33c9ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190812073006-9eafafc0a87e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191002063906-3421d5a6bb1c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1104,16 +1288,20 @@ golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191210023423-ac6580df4449/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200120151820-655fe14d7479/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200217220822-9197077df867/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1124,16 +1312,24 @@ golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200728102440-3e129f6d46b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200817155316-9781c653f443/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200916030750-2334cc1a136f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200922070232-aee5d888a860/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201112073958-5cba982894dd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201117170446-d9b008d0a637/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201202213521-69691e467435/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1145,6 +1341,7 @@ golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210426230700-d19ff857e887/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210502180810-71e4cd670f79/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1159,23 +1356,18 @@ golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210917161153-d61c044b1678/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211029165221-6e7872819dc8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211110154304-99a53858aa08/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211205182925-97ca703d548d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9 h1:XfKQ4OlFl8okEOr5UvAqFRVj8pY/4yfcXrddB8qAbU0= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -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-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.0.0-20210916214954-140adaaadfaf/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -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.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1190,16 +1382,14 @@ golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac h1:7zkz7BUtwNFFqcowJ+RIgu2MaV/MapERkDIy+mwPyjs= golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= @@ -1213,11 +1403,9 @@ golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgw golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190706070813-72ffa07ba3db/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -1249,11 +1437,9 @@ golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20200916195026-c9a70fc28ce3/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= @@ -1263,18 +1449,15 @@ golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= 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.6-0.20210820212750-d4cc65f0b2ff/go.mod h1:YD9qOF0M9xpSpdWTBbzEl5e/RnCefISl8E5Noe10jFM= +golang.org/x/tools v0.1.8/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gomodules.xyz/jsonpatch/v2 v2.2.0 h1:4pT439QV83L+G9FkcCriY6EkpcK6r6bK+A5FBUMI7qY= -gomodules.xyz/jsonpatch/v2 v2.2.0/go.mod h1:WXp+iVDkoLQqPudfQ9GBlwB2eZ5DKOnjQZCYdOS8GPY= -gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0= -gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= -gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ= +google.golang.org/api v0.0.0-20160322025152-9bf6e6e569ff/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.6.1-0.20190607001116-5213b8090861/go.mod h1:btoxGiFvQNVUZQ8W08zLtrVS08CNpINPEfxXxgJL1Q4= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= @@ -1307,9 +1490,7 @@ google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdr google.golang.org/api v0.59.0/go.mod h1:sT2boj7M9YJxZzgeZqXogmhfmRWDtPzT31xkieUbuZU= google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= google.golang.org/api v0.62.0/go.mod h1:dKmwPCydfsad4qCH08MSdgWjfHOyfpd4VtDGgRFdavw= -google.golang.org/appengine v1.0.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= @@ -1317,11 +1498,13 @@ google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCID google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/cloud v0.0.0-20151119220103-975617b05ea8/go.mod h1:0H1ncTHf11KCFhTc/+EFRbzSCOZx+VUbRMk55Yv5MYk= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190522204451-c2c4e71fbf69/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= @@ -1330,6 +1513,7 @@ google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvx google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200117163144-32f20d992d24/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= @@ -1344,7 +1528,6 @@ google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200527145253-8367513e4ece/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= @@ -1353,6 +1536,7 @@ google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201102152239-715cce707fb0/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201110150050-8816d57aaa9a/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= @@ -1384,12 +1568,14 @@ google.golang.org/genproto v0.0.0-20211129164237-f09f9a12af12/go.mod h1:5CzLGKJ6 google.golang.org/genproto v0.0.0-20211203200212-54befc351ae9/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/grpc v0.0.0-20160317175043-d3ddb4469d5a/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= @@ -1413,6 +1599,7 @@ google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnD google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.43.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= 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= @@ -1428,8 +1615,10 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0 google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +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= +gopkg.in/check.v1 v1.0.0-20141024133853-64131543e789/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -1438,7 +1627,7 @@ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EV gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/gcfg.v1 v1.2.0/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= +gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= @@ -1447,9 +1636,10 @@ gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= +gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= +gopkg.in/square/go-jose.v2 v2.5.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/warnings.v0 v0.1.1/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= @@ -1478,91 +1668,69 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -k8s.io/api v0.18.8/go.mod h1:d/CXqwWv+Z2XEG1LgceeDmHQwpUJhROPx16SlxJgERY= -k8s.io/api v0.23.0/go.mod h1:8wmDdLBHBNxtOIytwLstXt5E9PddnZb0GaMcqsvDBpg= -k8s.io/api v0.23.1/go.mod h1:WfXnOnwSqNtG62Y1CdjoMxh7r7u9QXGCkA1u0na2jgo= -k8s.io/api v0.23.2/go.mod h1:sYuDb3flCtRPI8ghn6qFrcK5ZBu2mhbElxRE95qpwlI= +k8s.io/api v0.20.1/go.mod h1:KqwcCVogGxQY3nBlRpwt+wpAMF/KjaCc7RpywacvqUo= +k8s.io/api v0.20.4/go.mod h1:++lNL1AJMkDymriNniQsWRkMDzRaX2Y/POTUi8yvqYQ= +k8s.io/api v0.20.6/go.mod h1:X9e8Qag6JV/bL5G6bU8sdVRltWKmdHsFUGS3eVndqE8= k8s.io/api v0.23.4 h1:85gnfXQOWbJa1SiWGpE9EEtHs0UVvDyIsSMpEtl2D4E= k8s.io/api v0.23.4/go.mod h1:i77F4JfyNNrhOjZF7OwwNJS5Y1S9dpwvb9iYRYRczfI= -k8s.io/apiextensions-apiserver v0.23.0/go.mod h1:xIFAEEDlAZgpVBl/1VSjGDmLoXAWRG40+GsWhKhAxY4= -k8s.io/apiextensions-apiserver v0.23.1/go.mod h1:0qz4fPaHHsVhRApbtk3MGXNn2Q9M/cVWWhfHdY2SxiM= k8s.io/apiextensions-apiserver v0.23.4 h1:AFDUEu/yEf0YnuZhqhIFhPLPhhcQQVuR1u3WCh0rveU= k8s.io/apiextensions-apiserver v0.23.4/go.mod h1:TWYAKymJx7nLMxWCgWm2RYGXHrGlVZnxIlGnvtfYu+g= -k8s.io/apimachinery v0.18.8/go.mod h1:6sQd+iHEqmOtALqOFjSWp2KZ9F0wlU/nWm0ZgsYWMig= -k8s.io/apimachinery v0.23.0/go.mod h1:fFCTTBKvKcwTPFzjlcxp91uPFZr+JA0FubU4fLzzFYc= -k8s.io/apimachinery v0.23.1/go.mod h1:SADt2Kl8/sttJ62RRsi9MIV4o8f5S3coArm0Iu3fBno= -k8s.io/apimachinery v0.23.2/go.mod h1:zDqeV0AK62LbCI0CI7KbWCAYdLg+E+8UXJ0rIz5gmS8= +k8s.io/apimachinery v0.20.1/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= +k8s.io/apimachinery v0.20.4/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= +k8s.io/apimachinery v0.20.6/go.mod h1:ejZXtW1Ra6V1O5H8xPBGz+T3+4gfkTCeExAHKU57MAc= k8s.io/apimachinery v0.23.4 h1:fhnuMd/xUL3Cjfl64j5ULKZ1/J9n8NuQEgNL+WXWfdM= k8s.io/apimachinery v0.23.4/go.mod h1:BEuFMMBaIbcOqVIJqNZJXGFTP4W6AycEpb5+m/97hrM= -k8s.io/apiserver v0.18.8/go.mod h1:12u5FuGql8Cc497ORNj79rhPdiXQC4bf53X/skR/1YM= -k8s.io/apiserver v0.23.0/go.mod h1:Cec35u/9zAepDPPFyT+UMrgqOCjgJ5qtfVJDxjZYmt4= -k8s.io/apiserver v0.23.1/go.mod h1:Bqt0gWbeM2NefS8CjWswwd2VNAKN6lUKR85Ft4gippY= +k8s.io/apiserver v0.20.1/go.mod h1:ro5QHeQkgMS7ZGpvf4tSMx6bBOgPfE+f52KwvXfScaU= +k8s.io/apiserver v0.20.4/go.mod h1:Mc80thBKOyy7tbvFtB4kJv1kbdD0eIH8k8vianJcbFM= +k8s.io/apiserver v0.20.6/go.mod h1:QIJXNt6i6JB+0YQRNcS0hdRHJlMhflFmsBDeSgT1r8Q= k8s.io/apiserver v0.23.4/go.mod h1:A6l/ZcNtxGfPSqbFDoxxOjEjSKBaQmE+UTveOmMkpNc= -k8s.io/cli-runtime v0.23.2 h1:4zOZX78mFSakwe4gef81XDBu94Yu0th6bfveTOx8ZQk= -k8s.io/cli-runtime v0.23.2/go.mod h1:Ag70akCDvwux4HxY+nH2J3UqE2e6iwSSdG1HE6p1VTU= -k8s.io/client-go v0.18.8/go.mod h1:HqFqMllQ5NnQJNwjro9k5zMyfhZlOwpuTLVrxjkYSxU= -k8s.io/client-go v0.23.0/go.mod h1:hrDnpnK1mSr65lHHcUuIZIXDgEbzc7/683c6hyG4jTA= -k8s.io/client-go v0.23.1/go.mod h1:6QSI8fEuqD4zgFK0xbdwfB/PthBsIxCJMa3s17WlcO0= -k8s.io/client-go v0.23.2/go.mod h1:k3YbsWg6GWdHF1THHTQP88X9RhB1DWPo3Dq7KfU/D1c= +k8s.io/cli-runtime v0.23.4 h1:C3AFQmo4TK4dlVPLOI62gtHEHu0OfA2Cp4UVRZ1JXns= +k8s.io/cli-runtime v0.23.4/go.mod h1:7KywUNTUibmHPqmpDFuRO1kc9RhsufHv2lkjCm2YZyM= +k8s.io/client-go v0.20.1/go.mod h1:/zcHdt1TeWSd5HoUe6elJmHSQ6uLLgp4bIJHVEuy+/Y= +k8s.io/client-go v0.20.4/go.mod h1:LiMv25ND1gLUdBeYxBIwKpkSC5IsozMMmOOeSJboP+k= +k8s.io/client-go v0.20.6/go.mod h1:nNQMnOvEUEsOzRRFIIkdmYOjAZrC8bgq0ExboWSU1I0= k8s.io/client-go v0.23.4 h1:YVWvPeerA2gpUudLelvsolzH7c2sFoXXR5wM/sWqNFU= k8s.io/client-go v0.23.4/go.mod h1:PKnIL4pqLuvYUK1WU7RLTMYKPiIh7MYShLshtRY9cj0= -k8s.io/cloud-provider v0.18.8/go.mod h1:cn9AlzMPVIXA4HHLVbgGUigaQlZyHSZ7WAwDEFNrQSs= -k8s.io/code-generator v0.17.2/go.mod h1:DVmfPQgxQENqDIzVR2ddLXMH34qeszkKSdH/N+s+38s= -k8s.io/code-generator v0.23.0/go.mod h1:vQvOhDXhuzqiVfM/YHp+dmg10WDZCchJVObc9MvowsE= -k8s.io/code-generator v0.23.1/go.mod h1:V7yn6VNTCWW8GqodYCESVo95fuiEg713S8B7WacWZDA= -k8s.io/code-generator v0.23.2/go.mod h1:S0Q1JVA+kSzTI1oUvbKAxZY/DYbA/ZUb4Uknog12ETk= k8s.io/code-generator v0.23.4/go.mod h1:S0Q1JVA+kSzTI1oUvbKAxZY/DYbA/ZUb4Uknog12ETk= -k8s.io/component-base v0.18.8/go.mod h1:00frPRDas29rx58pPCxNkhUfPbwajlyyvu8ruNgSErU= -k8s.io/component-base v0.23.0/go.mod h1:DHH5uiFvLC1edCpvcTDV++NKULdYYU6pR9Tt3HIKMKI= -k8s.io/component-base v0.23.1/go.mod h1:6llmap8QtJIXGDd4uIWJhAq0Op8AtQo6bDW2RrNMTeo= -k8s.io/component-base v0.23.2/go.mod h1:wS9Z03MO3oJ0RU8bB/dbXTiluGju+SC/F5i660gxB8c= +k8s.io/component-base v0.20.1/go.mod h1:guxkoJnNoh8LNrbtiQOlyp2Y2XFCZQmrcg2n/DeYNLk= +k8s.io/component-base v0.20.4/go.mod h1:t4p9EdiagbVCJKrQ1RsA5/V4rFQNDfRlevJajlGwgjI= +k8s.io/component-base v0.20.6/go.mod h1:6f1MPBAeI+mvuts3sIdtpjljHWBQ2cIy38oBIWMYnrM= k8s.io/component-base v0.23.4 h1:SziYh48+QKxK+ykJ3Ejqd98XdZIseVBG7sBaNLPqy6M= k8s.io/component-base v0.23.4/go.mod h1:8o3Gg8i2vnUXGPOwciiYlkSaZT+p+7gA9Scoz8y4W4E= -k8s.io/component-helpers v0.23.2/go.mod h1:J6CMwiaf0izLoNwiLl2OymB4+rGTsTpWp6PL/AqOM4U= -k8s.io/csi-translation-lib v0.18.8/go.mod h1:6cA6Btlzxy9s3QrS4BCZzQqclIWnTLr6Jx3H2ctAzY4= -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/component-helpers v0.23.4/go.mod h1:1Pl7L4zukZ054ElzRbvmZ1FJIU8roBXFOeRFu8zipa4= +k8s.io/cri-api v0.17.3/go.mod h1:X1sbHmuXhwaHs9xxYffLqJogVsnI+f6cPRcgPel7ywM= +k8s.io/cri-api v0.20.1/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI= +k8s.io/cri-api v0.20.4/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI= +k8s.io/cri-api v0.20.6/go.mod h1:ew44AjNXwyn1s0U4xCKGodU7J1HzBeZ1MpGrpa5r8Yc= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= -k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= -k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= -k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8= -k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= +k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/klog/v2 v2.30.0/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/klog/v2 v2.50.0 h1:2QWjlAHYTUqUM5XMSobX4mc//mXrf194+hiaZ4jy57Q= k8s.io/klog/v2 v2.50.0/go.mod h1:N3kgBtsFxMb4nQ0eBDgbHEt/dtxBuTkSFQ+7K5OUoz4= -k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E= -k8s.io/kube-openapi v0.0.0-20200410145947-61e04a5be9a6/go.mod h1:GRQhZsXIAJ1xR0C9bd8UpWHZ5plfAS9fzPjJuQ6JL3E= +k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM= k8s.io/kube-openapi v0.0.0-20210421082810-95288971da7e/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw= k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65 h1:E3J9oCLlaobFUqsjG9DfKbP2BmgwBL2p7pn0A3dG9W4= k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65/go.mod h1:sX9MT8g7NVZM5lVL/j8QyCCJe8YSMW30QvGZWaCIDIk= -k8s.io/kubectl v0.23.2 h1:YakGzFN1csIOW/Us5VsLxjcu5Q6Vh5rqcvukcNuBwFk= -k8s.io/kubectl v0.23.2/go.mod h1:zWm5wt8PdRmHiVhE9a7q7XYW4WFX9StkZGnC18+1v3M= -k8s.io/legacy-cloud-providers v0.18.8/go.mod h1:tgp4xYf6lvjrWnjQwTOPvWQE9IVqSBGPF4on0IyICQE= -k8s.io/metrics v0.23.2/go.mod h1:idJHc+lLK5teHUC6Z2+d6qTKA12d5FLDxmC/DHiUYKc= -k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= +k8s.io/kubectl v0.23.4 h1:mAa+zEOlyZieecEy+xSrhjkpMcukYyHWzcNdX28dzMY= +k8s.io/kubectl v0.23.4/go.mod h1:Dgb0Rvx/8JKS/C2EuvsNiQc6RZnX0SbHJVG3XUzH6ok= +k8s.io/kubernetes v1.13.0/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk= +k8s.io/metrics v0.23.4/go.mod h1:cl6sY9BdVT3DubbpqnkPIKi6mn/F2ltkU4yH1tEJ3Bo= +k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20210930125809-cb0fa318a74b/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20211116205334-6203023598ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20211208161948-7d6a63dca704/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9 h1:HNSDgDCrr/6Ly3WEGKZftiE7IY19Vz2GdbOCyI4qqhc= k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -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= -modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs= -modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.7/go.mod h1:PHgbrJT7lCHcxMU+mDHEm+nx46H4zuuHZkDP6icnhu0= -sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.25/go.mod h1:Mlj9PNLmG9bZ6BHFwFKDo5afkpWyUISkb9Me0GnK66I= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.14/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.15/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.27/go.mod h1:tq2nT0Kx7W+/f2JVE+zxYtUhdjuELJkVpNz+x/QN5R4= -sigs.k8s.io/cli-utils v0.28.0 h1:gsvwqygoXlW2y8CmKdflQJNZp1Yhi4geATW3/Ei7oYc= -sigs.k8s.io/cli-utils v0.28.0/go.mod h1:WDVRa5/eQBKntG++uyKdyT+xU7MLdCR4XsgseqL5uX4= -sigs.k8s.io/controller-runtime v0.11.0/go.mod h1:KKwLiTooNGu+JmLZGn9Sl3Gjmfj66eMbCQznLP5zcqA= +sigs.k8s.io/cli-utils v0.29.3 h1:4QRB9ayCd5pd9M/D3q2KQgr+nYrvRaw3suW+rcOutvk= +sigs.k8s.io/cli-utils v0.29.3/go.mod h1:WDVRa5/eQBKntG++uyKdyT+xU7MLdCR4XsgseqL5uX4= sigs.k8s.io/controller-runtime v0.11.1 h1:7YIHT2QnHJArj/dk9aUkYhfqfK5cIxPOX5gPECfdZLU= sigs.k8s.io/controller-runtime v0.11.1/go.mod h1:KKwLiTooNGu+JmLZGn9Sl3Gjmfj66eMbCQznLP5zcqA= sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6/go.mod h1:p4QtZmO4uMYipTQNzagwnNoseA6OxSUutVw05NhYDRs= @@ -1576,13 +1744,8 @@ sigs.k8s.io/kustomize/kustomize/v4 v4.4.1/go.mod h1:qOKJMMz2mBP+vcS7vK+mNz4HBLja sigs.k8s.io/kustomize/kyaml v0.13.0/go.mod h1:FTJxEZ86ScK184NpGSAQcfEqee0nul8oLCK30D47m4E= sigs.k8s.io/kustomize/kyaml v0.13.3 h1:tNNQIC+8cc+aXFTVg+RtQAOsjwUdYBZRAgYOVI3RBc4= sigs.k8s.io/kustomize/kyaml v0.13.3/go.mod h1:/ya3Gk4diiQzlE4mBh7wykyLRFZNvqlbh+JnwQ9Vhrc= -sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e h1:4Z09Hglb792X0kfOBBJUPFEyvVfQWrYT/l8h5EKA6JQ= -sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= -sigs.k8s.io/structured-merge-diff/v3 v3.0.0-20200116222232-67a7b8c61874/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw= -sigs.k8s.io/structured-merge-diff/v3 v3.0.0/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw= sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= -sigs.k8s.io/structured-merge-diff/v4 v4.1.2/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= -sigs.k8s.io/structured-merge-diff/v4 v4.2.0/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= +sigs.k8s.io/structured-merge-diff/v4 v4.0.3/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= sigs.k8s.io/structured-merge-diff/v4 v4.2.1 h1:bKCqE9GvQ5tiVHn5rfn1r+yao3aLQEaLzkkmAkf+A6Y= sigs.k8s.io/structured-merge-diff/v4 v4.2.1/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= From f1e4561bddad4dd9b4df5b445b3159d34882ddbf Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Tue, 22 Mar 2022 18:08:10 +0100 Subject: [PATCH 054/818] tests/azure: update dependencies - github.com/Azure/azure-event-hubs-go/v3 to v3.3.17 - github.com/fluxcd/helm-controller/api to v0.18.0 - github.com/fluxcd/image-automation-controller/api to v0.21.0 - github.com/fluxcd/image-reflector-controller/api to v0.17.0 - github.com/fluxcd/kustomize-controller/api to v0.22.0 - github.com/fluxcd/notification-controller/api to v0.23.0 - github.com/fluxcd/pkg/runtime to v0.13.2 - github.com/hashicorp/terraform-exec to v0.15.0 - github.com/libgit2/git2go/v31 to v31.7.9 - github.com/stretchr/testify to v1.7.1 - go.uber.org/multierr to v1.8.0 - k8s.io/api to v0.23.4 - k8s.io/client-go to v0.23.4 For `github.com/hashicorp/terraform-exec`, a newer version (v0.16.0) is availabe. This version however contains a breaking change (as it removes the `tfinstall` module), which I did not want to deal with at the moment. Signed-off-by: Hidde Beydals --- tests/azure/go.mod | 68 ++++++++++-------- tests/azure/go.sum | 167 ++++++++++++++++++++------------------------- 2 files changed, 115 insertions(+), 120 deletions(-) diff --git a/tests/azure/go.mod b/tests/azure/go.mod index 59981ec6..cf5abdf2 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -3,33 +3,33 @@ module github.com/fluxcd/flux2/tests/azure go 1.17 require ( - github.com/Azure/azure-event-hubs-go/v3 v3.3.13 - github.com/fluxcd/helm-controller/api v0.16.0 - github.com/fluxcd/image-automation-controller/api v0.20.0 - github.com/fluxcd/image-reflector-controller/api v0.16.0 - github.com/fluxcd/kustomize-controller/api v0.20.2 - github.com/fluxcd/notification-controller/api v0.21.0 + github.com/Azure/azure-event-hubs-go/v3 v3.3.17 + github.com/fluxcd/helm-controller/api v0.18.0 + github.com/fluxcd/image-automation-controller/api v0.21.0 + github.com/fluxcd/image-reflector-controller/api v0.17.0 + github.com/fluxcd/kustomize-controller/api v0.22.0 + github.com/fluxcd/notification-controller/api v0.23.0 github.com/fluxcd/pkg/apis/meta v0.12.1 - github.com/fluxcd/pkg/runtime v0.12.4 + github.com/fluxcd/pkg/runtime v0.13.2 github.com/fluxcd/source-controller/api v0.22.0 - github.com/hashicorp/terraform-exec v0.14.0 - github.com/libgit2/git2go/v31 v31.6.1 + github.com/hashicorp/terraform-exec v0.15.0 + github.com/libgit2/git2go/v31 v31.7.9 github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 - github.com/stretchr/testify v1.7.0 + github.com/stretchr/testify v1.7.1 github.com/whilp/git-urls v1.0.0 - go.uber.org/multierr v1.6.0 - k8s.io/api v0.23.1 + go.uber.org/multierr v1.8.0 + k8s.io/api v0.23.4 k8s.io/apimachinery v0.23.4 - k8s.io/client-go v0.23.1 + k8s.io/client-go v0.23.4 sigs.k8s.io/controller-runtime v0.11.1 ) require ( cloud.google.com/go v0.81.0 // indirect cloud.google.com/go/storage v1.10.0 // indirect - github.com/Azure/azure-amqp-common-go/v3 v3.0.1 // indirect + github.com/Azure/azure-amqp-common-go/v3 v3.2.3 // indirect github.com/Azure/azure-sdk-for-go v51.1.0+incompatible // indirect - github.com/Azure/go-amqp v0.13.12 // indirect + github.com/Azure/go-amqp v0.17.0 // indirect github.com/Azure/go-autorest v14.2.0+incompatible // indirect github.com/Azure/go-autorest/autorest v0.11.18 // indirect github.com/Azure/go-autorest/autorest/adal v0.9.13 // indirect @@ -39,35 +39,41 @@ require ( github.com/Azure/go-autorest/logger v0.2.1 // indirect github.com/Azure/go-autorest/tracing v0.6.0 // indirect github.com/aws/aws-sdk-go v1.15.78 // indirect + github.com/beorn7/perks v1.0.1 // indirect github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect + github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/devigned/tab v0.1.1 // indirect github.com/evanphx/json-patch v4.12.0+incompatible // indirect github.com/fluxcd/pkg/apis/acl v0.0.3 // indirect - github.com/fluxcd/pkg/apis/kustomize v0.3.1 // indirect + github.com/fluxcd/pkg/apis/kustomize v0.3.2 // indirect github.com/form3tech-oss/jwt-go v3.2.3+incompatible // indirect + github.com/fsnotify/fsnotify v1.5.1 // indirect github.com/go-logr/logr v1.2.2 // indirect + github.com/go-logr/zapr v1.2.0 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.2 // indirect - github.com/google/go-cmp v0.5.6 // indirect + github.com/google/go-cmp v0.5.7 // indirect github.com/google/gofuzz v1.2.0 // indirect - github.com/google/uuid v1.1.2 // indirect + github.com/google/uuid v1.2.0 // indirect github.com/googleapis/gax-go/v2 v2.0.5 // indirect github.com/googleapis/gnostic v0.5.5 // indirect github.com/hashicorp/go-checkpoint v0.5.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/hashicorp/go-getter v1.5.3 // indirect - github.com/hashicorp/go-retryablehttp v0.6.8 // indirect + github.com/hashicorp/go-retryablehttp v0.7.0 // indirect github.com/hashicorp/go-safetemp v1.0.0 // indirect github.com/hashicorp/go-uuid v1.0.1 // indirect - github.com/hashicorp/go-version v1.3.0 // indirect - github.com/hashicorp/terraform-json v0.12.0 // indirect + github.com/hashicorp/go-version v1.4.0 // indirect + github.com/hashicorp/terraform-json v0.13.0 // indirect + github.com/imdario/mergo v0.3.12 // indirect github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8 // indirect github.com/jpillora/backoff v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/jstemmer/go-junit-report v0.9.1 // indirect github.com/klauspost/compress v1.11.2 // indirect + github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/go-testing-interface v1.0.0 // indirect github.com/mitchellh/mapstructure v1.4.1 // indirect @@ -75,21 +81,28 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/prometheus/client_golang v1.12.1 // indirect + github.com/prometheus/client_model v0.2.0 // indirect + github.com/prometheus/common v0.32.1 // indirect + github.com/prometheus/procfs v0.7.3 // indirect + github.com/spf13/pflag v1.0.5 // indirect github.com/ulikunitz/xz v0.5.8 // indirect - github.com/zclconf/go-cty v1.8.4 // indirect + github.com/zclconf/go-cty v1.10.0 // indirect go.opencensus.io v0.23.0 // indirect go.uber.org/atomic v1.7.0 // indirect + go.uber.org/zap v1.21.0 // indirect golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 // indirect golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 // indirect golang.org/x/mod v0.4.2 // indirect golang.org/x/net v0.0.0-20211216030914-fe4d6282115f // indirect - golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f // indirect - golang.org/x/sys v0.0.0-20211029165221-6e7872819dc8 // indirect + golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 // indirect + golang.org/x/sys v0.0.0-20220114195835-da31bd327af9 // indirect golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b // indirect golang.org/x/text v0.3.7 // indirect golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac // indirect golang.org/x/tools v0.1.6-0.20210820212750-d4cc65f0b2ff // indirect golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect + gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/api v0.44.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2 // indirect @@ -98,10 +111,11 @@ require ( gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect - k8s.io/apiextensions-apiserver v0.23.1 // indirect - k8s.io/klog/v2 v2.30.0 // indirect + k8s.io/apiextensions-apiserver v0.23.4 // indirect + k8s.io/component-base v0.23.4 // indirect + k8s.io/klog/v2 v2.50.0 // indirect k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65 // indirect - k8s.io/utils v0.0.0-20211208161948-7d6a63dca704 // indirect + k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9 // indirect sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2 // indirect sigs.k8s.io/structured-merge-diff/v4 v4.2.1 // indirect sigs.k8s.io/yaml v1.3.0 // indirect diff --git a/tests/azure/go.sum b/tests/azure/go.sum index 9582fe29..31e2c91d 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -39,31 +39,28 @@ cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RX cloud.google.com/go/storage v1.10.0 h1:STgFzyU5/8miMl0//zKh2aQeTyeaUH3WN9bSUiJ09bA= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/Azure/azure-amqp-common-go/v3 v3.0.1 h1:mXh+eyOxGLBfqDtfmbtby0l7XfG/6b2NkuZ3B7i6zHA= -github.com/Azure/azure-amqp-common-go/v3 v3.0.1/go.mod h1:PBIGdzcO1teYoufTKMcGibdKaYZv4avS+O6LNIp8bq0= -github.com/Azure/azure-event-hubs-go/v3 v3.3.13 h1:aiI2RLjp0MzLCuFUXzR8b3h3bdPIc2c3vBYXRK8jX3E= -github.com/Azure/azure-event-hubs-go/v3 v3.3.13/go.mod h1:dJ/WqDn0KEJkNznL9UT/UbXzfmkffCjSNl9x2Y8JI28= +github.com/Azure/azure-amqp-common-go/v3 v3.2.3 h1:uDF62mbd9bypXWi19V1bN5NZEO84JqgmI5G73ibAmrk= +github.com/Azure/azure-amqp-common-go/v3 v3.2.3/go.mod h1:7rPmbSfszeovxGfc5fSAXE4ehlXQZHpMja2OtxC2Tas= +github.com/Azure/azure-event-hubs-go/v3 v3.3.17 h1:9k2yRMBJWgcIlSNBuKVja2af/oR3oMowqFPpHDV5Kl4= +github.com/Azure/azure-event-hubs-go/v3 v3.3.17/go.mod h1:R5H325+EzgxcBDkUerEwtor7ZQg77G7HiOTwpcuIVXY= github.com/Azure/azure-pipeline-go v0.1.8/go.mod h1:XA1kFWRVhSK+KNFiOhfv83Fv8L9achrP7OxIzeTn1Yg= github.com/Azure/azure-pipeline-go v0.1.9/go.mod h1:XA1kFWRVhSK+KNFiOhfv83Fv8L9achrP7OxIzeTn1Yg= github.com/Azure/azure-sdk-for-go v51.1.0+incompatible h1:7uk6GWtUqKg6weLv2dbKnzwb0ml1Qn70AdtRccZ543w= github.com/Azure/azure-sdk-for-go v51.1.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/azure-storage-blob-go v0.6.0/go.mod h1:oGfmITT1V6x//CswqY2gtAHND+xIP64/qL7a5QJix0Y= -github.com/Azure/go-amqp v0.13.0/go.mod h1:qj+o8xPCz9tMSbQ83Vp8boHahuRDl5mkNHyt1xlxUTs= -github.com/Azure/go-amqp v0.13.12 h1:u/m0QvBgNVlcMqj4bPHxtEyANOzS+cXXndVMYGsC29A= -github.com/Azure/go-amqp v0.13.12/go.mod h1:D5ZrjQqB1dyp1A+G73xeL/kNn7D5qHJIIsNNps7YNmk= +github.com/Azure/go-amqp v0.17.0 h1:HHXa3149nKrI0IZwyM7DRcRy5810t9ZICDutn4BYzj4= +github.com/Azure/go-amqp v0.17.0/go.mod h1:9YJ3RhxRT1gquYnzpZO1vcYMMpAdJT+QEg6fwmw9Zlg= github.com/Azure/go-ansiterm v0.0.0-20210608223527-2377c96fe795/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs= github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= github.com/Azure/go-autorest/autorest v0.9.3/go.mod h1:GsRuLYvwzLjjjRoWEIyMUaYq8GNUx2nRB378IPt/1p0= -github.com/Azure/go-autorest/autorest v0.11.3/go.mod h1:JFgpikqFJ/MleTTxwepExTKnFUKKszPS8UavbQYUMuw= github.com/Azure/go-autorest/autorest v0.11.18 h1:90Y4srNYrwOtAgVo3ndrQkTYn6kf1Eg/AjTFJ8Is2aM= github.com/Azure/go-autorest/autorest v0.11.18/go.mod h1:dSiJPy22c3u0OtOKDNttNgqpNFY/GeWa7GH/Pz56QRA= github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= github.com/Azure/go-autorest/autorest/adal v0.8.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S6HY6e6wcHn37qQMBQlvY3lc= github.com/Azure/go-autorest/autorest/adal v0.8.1/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= -github.com/Azure/go-autorest/autorest/adal v0.9.0/go.mod h1:/c022QCutn2P7uY+/oQWWNcK9YU+MH96NgK+jErpbcg= github.com/Azure/go-autorest/autorest/adal v0.9.13 h1:Mp5hbtOePIzM8pJVRa3YLrWWmZtoxRXqUEzCfJt3+/Q= github.com/Azure/go-autorest/autorest/adal v0.9.13/go.mod h1:W/MM4U6nLxnIskrw4UwWzlHfGjwUS50aOsc/I3yuU8M= github.com/Azure/go-autorest/autorest/azure/auth v0.4.2 h1:iM6UAvjR97ZIeR93qTcwpKNMpV+/FTWjwEbuPD495Tk= @@ -77,7 +74,6 @@ github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSY github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= -github.com/Azure/go-autorest/autorest/mocks v0.4.0/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= github.com/Azure/go-autorest/autorest/mocks v0.4.1 h1:K0laFcLE6VLTOwNgSxaGbUcLPuGXlNkbVvq4cW4nIHk= github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= github.com/Azure/go-autorest/autorest/to v0.4.0 h1:oXVqrxakqqV1UZdSazDOPOLvOIz+XA683u8EctwboHk= @@ -85,7 +81,6 @@ github.com/Azure/go-autorest/autorest/to v0.4.0/go.mod h1:fE8iZBn7LQR7zH/9XU2NcP github.com/Azure/go-autorest/autorest/validation v0.3.1 h1:AgyqjAd94fwNAoTjl/WQXg4VvFeRFpO+UhNyRXqF1ac= github.com/Azure/go-autorest/autorest/validation v0.3.1/go.mod h1:yhLgjC0Wda5DYXl6JAsWyUe4KVNffhoDhG0zVzUMo3E= github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= -github.com/Azure/go-autorest/logger v0.2.0/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= github.com/Azure/go-autorest/logger v0.2.1 h1:IG7i4p/mDa2Ce4TRyAO8IHnVhAVF3RFU+ZtXWSmf4Tg= github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= @@ -127,6 +122,7 @@ github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:l github.com/aws/aws-sdk-go v1.15.78 h1:LaXy6lWR0YK7LKyuU0QWy2ws/LWTPfYV/UgfiBu4tvY= github.com/aws/aws-sdk-go v1.15.78/go.mod h1:E3/ieXAlvM0XWO57iftYVDLLvQ824smPP3ATZkfNZeM= github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= +github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= @@ -141,10 +137,10 @@ github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnweb github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/certifi/gocertifi v0.0.0-20191021191039-0944d244cd40/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= github.com/certifi/gocertifi v0.0.0-20200922220541-2c3bb06c6054/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= -github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= +github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= @@ -170,10 +166,8 @@ github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/devigned/tab v0.0.1/go.mod h1:oVYrfgGyond090gxCvvbjZji79+peOiSV6vhZhKJM0Y= github.com/devigned/tab v0.1.1 h1:3mD6Kb1mUOYeLpJvTVSDwSg5ZsfSxfvxGRTxRsJsITA= github.com/devigned/tab v0.1.1/go.mod h1:XG9mPq0dFghrYvoBF3xdRrJzSTX1b7IQrvaL9mzjeJY= -github.com/devigned/tab/opencensus v0.1.2/go.mod h1:U6xXMXnNwXJpdaK0mnT3zdng4WTi+vCfqn7YHofEv2A= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dimchansky/utfbom v1.1.0 h1:FcM3g+nofKgUteL8dm/UpdRXNC9KmADgTpLKsu0TRo4= @@ -198,27 +192,24 @@ github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/fluxcd/helm-controller/api v0.16.0 h1:VXlt0EZVHgz2ZX1kUuKQAaQWNj1cC3PIKMRR/0aq07g= -github.com/fluxcd/helm-controller/api v0.16.0/go.mod h1:/OeNzk18BVa7UmhGphENJdD/2GerKpMeDSxY8QYlO0o= -github.com/fluxcd/image-automation-controller/api v0.20.0 h1:Z+lxqif0KwccsuNOBZq5M96RXCPxtm4Xt8siC1kR6H8= -github.com/fluxcd/image-automation-controller/api v0.20.0/go.mod h1:XhLYccGUbmJvTTpJ1jAFKZHr2e1GNXy0T85ZBO50mik= -github.com/fluxcd/image-reflector-controller/api v0.16.0 h1:1O1YdoK7LsJgWLyvfZTSbvQcUQCBcgJ573HA0arlQQY= -github.com/fluxcd/image-reflector-controller/api v0.16.0/go.mod h1:OIe3mSXc3OwQiNbiQ9vNXWYtNif31hc7WAbZWlFUUnc= -github.com/fluxcd/kustomize-controller/api v0.20.2 h1:zqCvKGsNCL10WMfmjk2Sd526J6gv8ml027DwesFoZsc= -github.com/fluxcd/kustomize-controller/api v0.20.2/go.mod h1:5MdpzJVx8+KiDIRv37zLme992BAOCgE0v1n+NOgs1lo= -github.com/fluxcd/notification-controller/api v0.21.0 h1:D5B3TH5YtSww0SyvW1Ru5xWsh0MgHQanC/a1t3CvXq0= -github.com/fluxcd/notification-controller/api v0.21.0/go.mod h1:gA9/j0kjh7VDuUC2Cubr9twxOdzb/0+ojcE9Lzsc9ug= +github.com/fluxcd/helm-controller/api v0.18.0 h1:qRkIwRUvIKRvc/7qP9judEZ6lYjptNkRQLNasqdlpH0= +github.com/fluxcd/helm-controller/api v0.18.0/go.mod h1:+P3I9VV/4IMryjj9BIGtdZnxdCQfBXExWTv8Z9DF33o= +github.com/fluxcd/image-automation-controller/api v0.21.0 h1:e87aJhU5+1onwGg5wYjFW4p5tnA31RwyyCWXAF/GBHw= +github.com/fluxcd/image-automation-controller/api v0.21.0/go.mod h1:v2NMXFVogXXfGh37e2132+JB32bcubDrTuvn+CA9c9o= +github.com/fluxcd/image-reflector-controller/api v0.17.0 h1:hMPFqZOuE4gNMvwWq0YX//mX7j/nwtuk5WRu8eBwehg= +github.com/fluxcd/image-reflector-controller/api v0.17.0/go.mod h1:Lg8A+MUcke0Orp6C6UQkf9I3pc8M/B3XS3TOI+YxVBY= +github.com/fluxcd/kustomize-controller/api v0.22.0 h1:zSb9rIhEPLG1z0FtER0+yDsb8OPCv6wcsOdYTo/yiDs= +github.com/fluxcd/kustomize-controller/api v0.22.0/go.mod h1:Kq2kKnU6Z9CiZFLpHTMSLvpgWiT/e03NRb1wc8W+24E= +github.com/fluxcd/notification-controller/api v0.23.0 h1:eWlccKDCEhkPuj8jx+RNpc4CYAa+++uIjFy+R90eVg0= +github.com/fluxcd/notification-controller/api v0.23.0/go.mod h1:0QFnW7CrYl5ItHNPpstxU42Pmb5/Qepx8FFjVxcZqIk= github.com/fluxcd/pkg/apis/acl v0.0.3 h1:Lw0ZHdpnO4G7Zy9KjrzwwBmDZQuy4qEjaU/RvA6k1lc= github.com/fluxcd/pkg/apis/acl v0.0.3/go.mod h1:XPts6lRJ9C9fIF9xVWofmQwftvhY25n1ps7W9xw0XLU= -github.com/fluxcd/pkg/apis/kustomize v0.3.1 h1:wmb5D9e1+Rr3/5O3235ERuj+h2VKUArVfYYk68QKP+w= -github.com/fluxcd/pkg/apis/kustomize v0.3.1/go.mod h1:k2HSRd68UwgNmOYBPOd6WbX6a2MH2X/Jeh7e3s3PFPc= -github.com/fluxcd/pkg/apis/meta v0.10.2/go.mod h1:KQ2er9xa6koy7uoPMZjIjNudB5p4tXs+w0GO6fRcy7I= +github.com/fluxcd/pkg/apis/kustomize v0.3.2 h1:ULoAwOOekHf5cy6mYIwL+K6v8/cfcNVVbwfIPgWjdjg= +github.com/fluxcd/pkg/apis/kustomize v0.3.2/go.mod h1:p8iAH5TeqMBnnxkkpCNNDvWYfKlNRx89a6WKOo+hJHA= github.com/fluxcd/pkg/apis/meta v0.12.1 h1:m5PfKAqbqWBvGp9+JRj1sv+xNkGsHwUVf+3rJ8wm6SE= github.com/fluxcd/pkg/apis/meta v0.12.1/go.mod h1:f8YVt70/KAhqzZ7xxhjvqyzKubOYx2pAbakb/FfCEg8= -github.com/fluxcd/pkg/runtime v0.12.3/go.mod h1:imJ2xYy/d4PbSinX2IefmZk+iS2c1P5fY0js8mCE4SM= -github.com/fluxcd/pkg/runtime v0.12.4 h1:gA27RG/+adN2/7Qe03PB46Iwmye/MusPCpuS4zQ2fW0= -github.com/fluxcd/pkg/runtime v0.12.4/go.mod h1:gspNvhAqodZgSmK1ZhMtvARBf/NGAlxmaZaIOHkJYsc= -github.com/fluxcd/source-controller/api v0.21.0/go.mod h1:Ab2qDmAUz6ZCp8UaHYLYzxyFrC1FQqEqjxiROb/Rdiw= +github.com/fluxcd/pkg/runtime v0.13.2 h1:6jkQQUbp17WxHsbozlJFCvHmOS4JIB+yB20CdCd8duE= +github.com/fluxcd/pkg/runtime v0.13.2/go.mod h1:dzWNKqFzFXeittbpFcJzR3cdC9CWlbzw+pNOgaVvF/0= github.com/fluxcd/source-controller/api v0.22.0 h1:WF0xsrlyUaRLWS4u5un3yfzlvER86sZx/qiV6l7Ay6Q= github.com/fluxcd/source-controller/api v0.22.0/go.mod h1:Vb13q9Pq+1IW/sJUZn/RSb7IU5WT86Er6uCFPCFm9L4= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= @@ -266,7 +257,6 @@ github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= @@ -324,8 +314,9 @@ github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.7 h1:81/ik6ipDQS2aGcBfIN5dHDB36BwrStyeAQquSYCV4o= +github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= @@ -350,8 +341,9 @@ github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm4 github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.2.0 h1:qJYtXnJRWmpe7m/3XlyhrsLrEURqHRM2kxzoxXqyUDs= +github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+Tv3SM= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= @@ -383,8 +375,8 @@ github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrj github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-retryablehttp v0.6.8 h1:92lWxgpa+fF3FozM4B3UZtHZMJX8T5XT+TFdCxsPyWs= -github.com/hashicorp/go-retryablehttp v0.6.8/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= +github.com/hashicorp/go-retryablehttp v0.7.0 h1:eu1EI/mbirUgP5C8hVsTNaGZreBDlYiwC1FZWkvQPQ4= +github.com/hashicorp/go-retryablehttp v0.7.0/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= github.com/hashicorp/go-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo= github.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoDHxNAB65b+Rj1I= @@ -394,8 +386,9 @@ github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/b github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.1.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go-version v1.3.0 h1:McDWVJIU/y+u1BRV06dPaLfLCaT7fUTJLp5r04x7iNw= github.com/hashicorp/go-version v1.3.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.4.0 h1:aAQzgqIrRKRa7w75CKpbBxYsmUoPjzVm1W59ca1L0J4= +github.com/hashicorp/go-version v1.4.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= @@ -404,10 +397,10 @@ github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= -github.com/hashicorp/terraform-exec v0.14.0 h1:UQoUcxKTZZXhyyK68Cwn4mApT4mnFPmEXPiqaHL9r+w= -github.com/hashicorp/terraform-exec v0.14.0/go.mod h1:qrAASDq28KZiMPDnQ02sFS9udcqEkRly002EA2izXTA= -github.com/hashicorp/terraform-json v0.12.0 h1:8czPgEEWWPROStjkWPUnTQDXmpmZPlkQAwYYLETaTvw= -github.com/hashicorp/terraform-json v0.12.0/go.mod h1:pmbq9o4EuL43db5+0ogX10Yofv1nozM+wskr/bGFJpI= +github.com/hashicorp/terraform-exec v0.15.0 h1:cqjh4d8HYNQrDoEmlSGelHmg2DYDh5yayckvJ5bV18E= +github.com/hashicorp/terraform-exec v0.15.0/go.mod h1:H4IG8ZxanU+NW0ZpDRNsvh9f0ul7C0nHP+rUR/CHs7I= +github.com/hashicorp/terraform-json v0.13.0 h1:Li9L+lKD1FO5RVFRM1mMMIBDoUHslOniyEi5CM+FWGY= +github.com/hashicorp/terraform-json v0.13.0/go.mod h1:y5OdLBCT+rxbwnpxZs9kGL7R9ExU76+cpdY8zHwoazk= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/huandu/xstrings v1.3.2/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= @@ -463,8 +456,8 @@ github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= -github.com/libgit2/git2go/v31 v31.6.1 h1:FnKHHDDBgltSsu9RpKuL4rSR8dQ1JTf9dfvFhZ1y7Aw= -github.com/libgit2/git2go/v31 v31.6.1/go.mod h1:c/rkJcBcUFx6wHaT++UwNpKvIsmPNqCeQ/vzO4DrEec= +github.com/libgit2/git2go/v31 v31.7.9 h1:RUDiYm7+i3GY414acI31oDD8x5P0PZyWeZZfwpPuynE= +github.com/libgit2/git2go/v31 v31.7.9/go.mod h1:c/rkJcBcUFx6wHaT++UwNpKvIsmPNqCeQ/vzO4DrEec= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= @@ -515,20 +508,16 @@ github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+ github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= -github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= -github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= 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/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.17.0 h1:9Luw4uT5HTjHTN8+aNcSThgH1vdXnmdJ8xIfZ4wyTRE= -github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= +github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= @@ -547,8 +536,9 @@ github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXP github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.11.0 h1:HNkLOAEQMIDv/K+04rukrLx6ch7msSRwf3/SASFAGtQ= github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= +github.com/prometheus/client_golang v1.12.1 h1:ZiaPsmm9uiBeaSMRznKsCDNtPCS0T3JVDGF+06gjBzk= +github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= @@ -559,14 +549,16 @@ github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y8 github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.28.0 h1:vGVfV9KrDTvWt5boZO0I19g2E3CsWfpPPKZM9dt3mEw= github.com/prometheus/common v0.28.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.32.1 h1:hWIdL3N2HoUx3B8j3YN9mWor0qhY/NlEKZEaXxuIRh4= +github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3xv4= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= +github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= @@ -613,8 +605,9 @@ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UV github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1 h1:5TQK59W5E3v0r2duFAb7P95B6hEeOyEnHRa8MjYSMTY= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= @@ -635,9 +628,9 @@ github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9dec github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/zclconf/go-cty v1.2.0/go.mod h1:hOPWgoHbaTUnI5k4D2ld+GRpFJSCe6bCM7m1q/N4PQ8= -github.com/zclconf/go-cty v1.2.1/go.mod h1:hOPWgoHbaTUnI5k4D2ld+GRpFJSCe6bCM7m1q/N4PQ8= -github.com/zclconf/go-cty v1.8.4 h1:pwhhz5P+Fjxse7S7UriBrMu6AUJSZM5pKqGem1PjGAs= -github.com/zclconf/go-cty v1.8.4/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uUAzyuvAk= +github.com/zclconf/go-cty v1.9.1/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uUAzyuvAk= +github.com/zclconf/go-cty v1.10.0 h1:mp9ZXQeIcN8kAwuqorjH+Q+njbJKjLrvB2yIh4q7U+0= +github.com/zclconf/go-cty v1.10.0/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uUAzyuvAk= github.com/zclconf/go-cty-debug v0.0.0-20191215020915-b22d67c1ba0b/go.mod h1:ZRKQfBXbGkpdV6QMzT3rU1kSTAnfu1dO8dPKjYprgj8= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= @@ -672,16 +665,17 @@ go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= -go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= +go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= +go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= +go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= +go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= -go.uber.org/zap v1.19.1 h1:ue41HOKd1vGURxrmeKIgELGb3jPW9DMUDGtsinblHwI= -go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= +go.uber.org/zap v1.21.0 h1:WefMeulhovoZ2sYXz7st6K0sLj7bBhpiFaud4r4zST8= +go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3 h1:0es+/5331RGQPcXlMfP+WrnIIS6dNnNRe0WB02W0F4M= golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -765,13 +759,11 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210326060303-6b1517762897/go.mod h1:uSPa2vr4CLtc/ILN5odXGNXS6mhrKVzTaCXzk9m6W3k= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210825183410-e898025ed96a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211209124913-491a49abca63/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211215060638-4ddde0e984e9/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211216030914-fe4d6282115f h1:hEYJvxw1lSnWIl8X9ofsYMklzaDs90JI2az5YMd4fPM= golang.org/x/net v0.0.0-20211216030914-fe4d6282115f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -787,8 +779,9 @@ golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f h1:Qmd2pbz05z7z6lm0DrgQVVPuBm92jqujBKMHMOlOQEw= golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 h1:RerP+noqYHUQ8CMRcPlC2nvTa4dcBIjegkuWdcUDuqg= +golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= 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= @@ -849,7 +842,6 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -868,8 +860,8 @@ golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211029165221-6e7872819dc8 h1:M69LAlWZCshgp0QSzyDcSsSIejIEeuaCVpmwcKwyLMk= -golang.org/x/sys v0.0.0-20211029165221-6e7872819dc8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220114195835-da31bd327af9 h1:XfKQ4OlFl8okEOr5UvAqFRVj8pY/4yfcXrddB8qAbU0= +golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b h1:9zKuko04nR4gjZ4+DNjHqRlAJqbJETHwiNKDqTfOjfE= golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -941,7 +933,6 @@ golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82u golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= @@ -1115,50 +1106,40 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -k8s.io/api v0.23.0/go.mod h1:8wmDdLBHBNxtOIytwLstXt5E9PddnZb0GaMcqsvDBpg= -k8s.io/api v0.23.1 h1:ncu/qfBfUoClqwkTGbeRqqOqBCRoUAflMuOaOD7J0c8= -k8s.io/api v0.23.1/go.mod h1:WfXnOnwSqNtG62Y1CdjoMxh7r7u9QXGCkA1u0na2jgo= -k8s.io/apiextensions-apiserver v0.23.0/go.mod h1:xIFAEEDlAZgpVBl/1VSjGDmLoXAWRG40+GsWhKhAxY4= -k8s.io/apiextensions-apiserver v0.23.1 h1:xxE0q1vLOVZiWORu1KwNRQFsGWtImueOrqSl13sS5EU= -k8s.io/apiextensions-apiserver v0.23.1/go.mod h1:0qz4fPaHHsVhRApbtk3MGXNn2Q9M/cVWWhfHdY2SxiM= -k8s.io/apimachinery v0.23.0/go.mod h1:fFCTTBKvKcwTPFzjlcxp91uPFZr+JA0FubU4fLzzFYc= -k8s.io/apimachinery v0.23.1/go.mod h1:SADt2Kl8/sttJ62RRsi9MIV4o8f5S3coArm0Iu3fBno= +k8s.io/api v0.23.4 h1:85gnfXQOWbJa1SiWGpE9EEtHs0UVvDyIsSMpEtl2D4E= +k8s.io/api v0.23.4/go.mod h1:i77F4JfyNNrhOjZF7OwwNJS5Y1S9dpwvb9iYRYRczfI= +k8s.io/apiextensions-apiserver v0.23.4 h1:AFDUEu/yEf0YnuZhqhIFhPLPhhcQQVuR1u3WCh0rveU= +k8s.io/apiextensions-apiserver v0.23.4/go.mod h1:TWYAKymJx7nLMxWCgWm2RYGXHrGlVZnxIlGnvtfYu+g= k8s.io/apimachinery v0.23.4 h1:fhnuMd/xUL3Cjfl64j5ULKZ1/J9n8NuQEgNL+WXWfdM= k8s.io/apimachinery v0.23.4/go.mod h1:BEuFMMBaIbcOqVIJqNZJXGFTP4W6AycEpb5+m/97hrM= -k8s.io/apiserver v0.23.0/go.mod h1:Cec35u/9zAepDPPFyT+UMrgqOCjgJ5qtfVJDxjZYmt4= -k8s.io/apiserver v0.23.1/go.mod h1:Bqt0gWbeM2NefS8CjWswwd2VNAKN6lUKR85Ft4gippY= -k8s.io/client-go v0.23.0/go.mod h1:hrDnpnK1mSr65lHHcUuIZIXDgEbzc7/683c6hyG4jTA= -k8s.io/client-go v0.23.1 h1:Ma4Fhf/p07Nmj9yAB1H7UwbFHEBrSPg8lviR24U2GiQ= -k8s.io/client-go v0.23.1/go.mod h1:6QSI8fEuqD4zgFK0xbdwfB/PthBsIxCJMa3s17WlcO0= -k8s.io/code-generator v0.23.0/go.mod h1:vQvOhDXhuzqiVfM/YHp+dmg10WDZCchJVObc9MvowsE= -k8s.io/code-generator v0.23.1/go.mod h1:V7yn6VNTCWW8GqodYCESVo95fuiEg713S8B7WacWZDA= -k8s.io/component-base v0.23.0/go.mod h1:DHH5uiFvLC1edCpvcTDV++NKULdYYU6pR9Tt3HIKMKI= -k8s.io/component-base v0.23.1/go.mod h1:6llmap8QtJIXGDd4uIWJhAq0Op8AtQo6bDW2RrNMTeo= +k8s.io/apiserver v0.23.4/go.mod h1:A6l/ZcNtxGfPSqbFDoxxOjEjSKBaQmE+UTveOmMkpNc= +k8s.io/client-go v0.23.4 h1:YVWvPeerA2gpUudLelvsolzH7c2sFoXXR5wM/sWqNFU= +k8s.io/client-go v0.23.4/go.mod h1:PKnIL4pqLuvYUK1WU7RLTMYKPiIh7MYShLshtRY9cj0= +k8s.io/code-generator v0.23.4/go.mod h1:S0Q1JVA+kSzTI1oUvbKAxZY/DYbA/ZUb4Uknog12ETk= +k8s.io/component-base v0.23.4 h1:SziYh48+QKxK+ykJ3Ejqd98XdZIseVBG7sBaNLPqy6M= +k8s.io/component-base v0.23.4/go.mod h1:8o3Gg8i2vnUXGPOwciiYlkSaZT+p+7gA9Scoz8y4W4E= k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= -k8s.io/klog/v2 v2.30.0 h1:bUO6drIvCIsvZ/XFgfxoGFQU/a4Qkh0iAlvUR7vlHJw= k8s.io/klog/v2 v2.30.0/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/klog/v2 v2.50.0 h1:2QWjlAHYTUqUM5XMSobX4mc//mXrf194+hiaZ4jy57Q= +k8s.io/klog/v2 v2.50.0/go.mod h1:N3kgBtsFxMb4nQ0eBDgbHEt/dtxBuTkSFQ+7K5OUoz4= k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65 h1:E3J9oCLlaobFUqsjG9DfKbP2BmgwBL2p7pn0A3dG9W4= k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65/go.mod h1:sX9MT8g7NVZM5lVL/j8QyCCJe8YSMW30QvGZWaCIDIk= k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20210930125809-cb0fa318a74b/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20211116205334-6203023598ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20211208161948-7d6a63dca704 h1:ZKMMxTvduyf5WUtREOqg5LiXaN1KO/+0oOQPRFrClpo= -k8s.io/utils v0.0.0-20211208161948-7d6a63dca704/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9 h1:HNSDgDCrr/6Ly3WEGKZftiE7IY19Vz2GdbOCyI4qqhc= +k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.25/go.mod h1:Mlj9PNLmG9bZ6BHFwFKDo5afkpWyUISkb9Me0GnK66I= -sigs.k8s.io/controller-runtime v0.11.0/go.mod h1:KKwLiTooNGu+JmLZGn9Sl3Gjmfj66eMbCQznLP5zcqA= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.27/go.mod h1:tq2nT0Kx7W+/f2JVE+zxYtUhdjuELJkVpNz+x/QN5R4= sigs.k8s.io/controller-runtime v0.11.1 h1:7YIHT2QnHJArj/dk9aUkYhfqfK5cIxPOX5gPECfdZLU= sigs.k8s.io/controller-runtime v0.11.1/go.mod h1:KKwLiTooNGu+JmLZGn9Sl3Gjmfj66eMbCQznLP5zcqA= sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6/go.mod h1:p4QtZmO4uMYipTQNzagwnNoseA6OxSUutVw05NhYDRs= sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2 h1:kDi4JBNAsJWfz1aEXhO8Jg87JJaPNLh5tIzYHgStQ9Y= sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2/go.mod h1:B+TnT182UBxE84DiCz4CVE26eOSDAeYCpfDnC2kdKMY= sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= -sigs.k8s.io/structured-merge-diff/v4 v4.1.2/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= -sigs.k8s.io/structured-merge-diff/v4 v4.2.0/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= sigs.k8s.io/structured-merge-diff/v4 v4.2.1 h1:bKCqE9GvQ5tiVHn5rfn1r+yao3aLQEaLzkkmAkf+A6Y= sigs.k8s.io/structured-merge-diff/v4 v4.2.1/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= From 0717c8bdbb2c12771dd1c53706b9ccae56d6dd86 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Wed, 23 Mar 2022 11:13:15 +0100 Subject: [PATCH 055/818] Update fluxcd/source-controller to v0.22.1 Signed-off-by: Hidde Beydals --- go.mod | 2 +- go.sum | 4 ++-- manifests/bases/source-controller/kustomization.yaml | 4 ++-- manifests/crds/kustomization.yaml | 2 +- tests/azure/go.mod | 2 +- tests/azure/go.sum | 4 ++-- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/go.mod b/go.mod index 6ccfa081..17ac2bbe 100644 --- a/go.mod +++ b/go.mod @@ -19,7 +19,7 @@ require ( github.com/fluxcd/pkg/ssh v0.3.2 github.com/fluxcd/pkg/untar v0.1.0 github.com/fluxcd/pkg/version v0.1.0 - github.com/fluxcd/source-controller/api v0.22.0 + github.com/fluxcd/source-controller/api v0.22.1 github.com/go-git/go-git/v5 v5.4.2 github.com/gonvenience/bunt v1.3.3 github.com/gonvenience/ytbx v1.4.4 diff --git a/go.sum b/go.sum index 83579425..e08705dd 100644 --- a/go.sum +++ b/go.sum @@ -403,8 +403,8 @@ github.com/fluxcd/pkg/untar v0.1.0 h1:k97V/xV5hFrAkIkVPuv5AVhyxh1ZzzAKba/lbDfGo6 github.com/fluxcd/pkg/untar v0.1.0/go.mod h1:aGswNyzB1mlz/T/kpOS58mITBMxMKc9tlJBH037A2HY= github.com/fluxcd/pkg/version v0.1.0 h1:v+SmCanmCB5Tj2Cx9TXlj+kNRfPGbAvirkeqsp7ZEAQ= github.com/fluxcd/pkg/version v0.1.0/go.mod h1:V7Z/w8dxLQzv0FHqa5ox5TeyOd2zOd49EeuWFgnwyj4= -github.com/fluxcd/source-controller/api v0.22.0 h1:WF0xsrlyUaRLWS4u5un3yfzlvER86sZx/qiV6l7Ay6Q= -github.com/fluxcd/source-controller/api v0.22.0/go.mod h1:Vb13q9Pq+1IW/sJUZn/RSb7IU5WT86Er6uCFPCFm9L4= +github.com/fluxcd/source-controller/api v0.22.1 h1:0KLO/L1bTVeHGr2CpTSM1k+jFDrhtboH1qV1HoleVO0= +github.com/fluxcd/source-controller/api v0.22.1/go.mod h1:Vb13q9Pq+1IW/sJUZn/RSb7IU5WT86Er6uCFPCFm9L4= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/form3tech-oss/jwt-go v3.2.3+incompatible h1:7ZaBxOI7TMoYBfyA3cQHErNNyAWIKUMIwqxEtgHOs5c= diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index bf17a6fe..64a4e69d 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.22.0/source-controller.crds.yaml -- https://github.com/fluxcd/source-controller/releases/download/v0.22.0/source-controller.deployment.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.22.1/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.22.1/source-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index 63be957c..b58a5b20 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -1,7 +1,7 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.22.0/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.22.1/source-controller.crds.yaml - https://github.com/fluxcd/kustomize-controller/releases/download/v0.22.0/kustomize-controller.crds.yaml - https://github.com/fluxcd/helm-controller/releases/download/v0.18.0/helm-controller.crds.yaml - https://github.com/fluxcd/notification-controller/releases/download/v0.23.0/notification-controller.crds.yaml diff --git a/tests/azure/go.mod b/tests/azure/go.mod index cf5abdf2..fd5e64e5 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -11,7 +11,7 @@ require ( github.com/fluxcd/notification-controller/api v0.23.0 github.com/fluxcd/pkg/apis/meta v0.12.1 github.com/fluxcd/pkg/runtime v0.13.2 - github.com/fluxcd/source-controller/api v0.22.0 + github.com/fluxcd/source-controller/api v0.22.1 github.com/hashicorp/terraform-exec v0.15.0 github.com/libgit2/git2go/v31 v31.7.9 github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 diff --git a/tests/azure/go.sum b/tests/azure/go.sum index 31e2c91d..9cf9f893 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -210,8 +210,8 @@ github.com/fluxcd/pkg/apis/meta v0.12.1 h1:m5PfKAqbqWBvGp9+JRj1sv+xNkGsHwUVf+3rJ github.com/fluxcd/pkg/apis/meta v0.12.1/go.mod h1:f8YVt70/KAhqzZ7xxhjvqyzKubOYx2pAbakb/FfCEg8= github.com/fluxcd/pkg/runtime v0.13.2 h1:6jkQQUbp17WxHsbozlJFCvHmOS4JIB+yB20CdCd8duE= github.com/fluxcd/pkg/runtime v0.13.2/go.mod h1:dzWNKqFzFXeittbpFcJzR3cdC9CWlbzw+pNOgaVvF/0= -github.com/fluxcd/source-controller/api v0.22.0 h1:WF0xsrlyUaRLWS4u5un3yfzlvER86sZx/qiV6l7Ay6Q= -github.com/fluxcd/source-controller/api v0.22.0/go.mod h1:Vb13q9Pq+1IW/sJUZn/RSb7IU5WT86Er6uCFPCFm9L4= +github.com/fluxcd/source-controller/api v0.22.1 h1:0KLO/L1bTVeHGr2CpTSM1k+jFDrhtboH1qV1HoleVO0= +github.com/fluxcd/source-controller/api v0.22.1/go.mod h1:Vb13q9Pq+1IW/sJUZn/RSb7IU5WT86Er6uCFPCFm9L4= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/form3tech-oss/jwt-go v3.2.3+incompatible h1:7ZaBxOI7TMoYBfyA3cQHErNNyAWIKUMIwqxEtgHOs5c= From 3edcd16b62ba509f92eda89d69b72f6e78bc9179 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Wed, 23 Mar 2022 12:15:31 +0100 Subject: [PATCH 056/818] fix: wait for Source objects observed generation This ensures the command will wait for the object to report a Ready Condition with an ObservedGeneration matching the Generation of the resource. Ensuring that when a "create" is actually a mutation, it waits instead of prematurely assuming the Source to be Ready. Signed-off-by: Hidde Beydals --- cmd/flux/create_source_bucket.go | 29 ++++++++++++++++++++++++++ cmd/flux/create_source_git.go | 17 +++++++++++---- cmd/flux/create_source_git_test.go | 27 +++++++++++++----------- cmd/flux/create_source_helm.go | 14 +++++++------ cmd/flux/reconcile_source_bucket.go | 32 ----------------------------- go.mod | 1 + go.sum | 11 ++++++++++ 7 files changed, 77 insertions(+), 54 deletions(-) diff --git a/cmd/flux/create_source_bucket.go b/cmd/flux/create_source_bucket.go index 89616451..6160be0c 100644 --- a/cmd/flux/create_source_bucket.go +++ b/cmd/flux/create_source_bucket.go @@ -30,6 +30,8 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" "github.com/fluxcd/pkg/apis/meta" + "github.com/fluxcd/pkg/runtime/conditions" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" "github.com/fluxcd/flux2/internal/flags" @@ -235,3 +237,30 @@ func upsertBucket(ctx context.Context, kubeClient client.Client, logger.Successf("Bucket source updated") return namespacedName, nil } + +func isBucketReady(ctx context.Context, kubeClient client.Client, + namespacedName types.NamespacedName, bucket *sourcev1.Bucket) wait.ConditionFunc { + return func() (bool, error) { + err := kubeClient.Get(ctx, namespacedName, bucket) + if err != nil { + return false, err + } + + if c := conditions.Get(bucket, meta.ReadyCondition); c != nil { + // Confirm the Ready condition we are observing is for the + // current generation + if c.ObservedGeneration != bucket.GetGeneration() { + return false, nil + } + + // Further check the Status + switch c.Status { + case metav1.ConditionTrue: + return true, nil + case metav1.ConditionFalse: + return false, fmt.Errorf(c.Message) + } + } + return false, nil + } +} diff --git a/cmd/flux/create_source_git.go b/cmd/flux/create_source_git.go index 7e730fe2..28c1be50 100644 --- a/cmd/flux/create_source_git.go +++ b/cmd/flux/create_source_git.go @@ -23,19 +23,21 @@ import ( "net/url" "os" - "github.com/fluxcd/pkg/apis/meta" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" "github.com/manifoldco/promptui" "github.com/spf13/cobra" corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/errors" - apimeta "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/wait" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/yaml" + "github.com/fluxcd/pkg/apis/meta" + "github.com/fluxcd/pkg/runtime/conditions" + + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + "github.com/fluxcd/flux2/internal/flags" "github.com/fluxcd/flux2/internal/utils" "github.com/fluxcd/flux2/pkg/manifestgen/sourcesecret" @@ -355,7 +357,14 @@ func isGitRepositoryReady(ctx context.Context, kubeClient client.Client, return false, err } - if c := apimeta.FindStatusCondition(gitRepository.Status.Conditions, meta.ReadyCondition); c != nil { + if c := conditions.Get(gitRepository, meta.ReadyCondition); c != nil { + // Confirm the Ready condition we are observing is for the + // current generation + if c.ObservedGeneration != gitRepository.GetGeneration() { + return false, nil + } + + // Further check the Status switch c.Status { case metav1.ConditionTrue: return true, nil diff --git a/cmd/flux/create_source_git_test.go b/cmd/flux/create_source_git_test.go index b6b9961f..6447e52e 100644 --- a/cmd/flux/create_source_git_test.go +++ b/cmd/flux/create_source_git_test.go @@ -106,10 +106,11 @@ func TestCreateSourceGit(t *testing.T) { assertGoldenFile("testdata/create_source_git/success.golden"), func(repo *sourcev1.GitRepository) { newCondition := metav1.Condition{ - Type: meta.ReadyCondition, - Status: metav1.ConditionTrue, - Reason: sourcev1.GitOperationSucceedReason, - Message: "succeeded message", + Type: meta.ReadyCondition, + Status: metav1.ConditionTrue, + Reason: sourcev1.GitOperationSucceedReason, + Message: "succeeded message", + ObservedGeneration: repo.GetGeneration(), } apimeta.SetStatusCondition(&repo.Status.Conditions, newCondition) repo.Status.Artifact = &sourcev1.Artifact{ @@ -123,10 +124,11 @@ func TestCreateSourceGit(t *testing.T) { assertError("failed message"), func(repo *sourcev1.GitRepository) { newCondition := metav1.Condition{ - Type: meta.ReadyCondition, - Status: metav1.ConditionFalse, - Reason: sourcev1.URLInvalidReason, - Message: "failed message", + Type: meta.ReadyCondition, + Status: metav1.ConditionFalse, + Reason: sourcev1.URLInvalidReason, + Message: "failed message", + ObservedGeneration: repo.GetGeneration(), } apimeta.SetStatusCondition(&repo.Status.Conditions, newCondition) }, @@ -137,10 +139,11 @@ func TestCreateSourceGit(t *testing.T) { func(repo *sourcev1.GitRepository) { // Updated with no artifact newCondition := metav1.Condition{ - Type: meta.ReadyCondition, - Status: metav1.ConditionTrue, - Reason: sourcev1.GitOperationSucceedReason, - Message: "succeeded message", + Type: meta.ReadyCondition, + Status: metav1.ConditionTrue, + Reason: sourcev1.GitOperationSucceedReason, + Message: "succeeded message", + ObservedGeneration: repo.GetGeneration(), } apimeta.SetStatusCondition(&repo.Status.Conditions, newCondition) }, diff --git a/cmd/flux/create_source_helm.go b/cmd/flux/create_source_helm.go index f20b4658..789ff6e5 100644 --- a/cmd/flux/create_source_helm.go +++ b/cmd/flux/create_source_helm.go @@ -23,10 +23,10 @@ import ( "os" "github.com/fluxcd/pkg/apis/meta" + "github.com/fluxcd/pkg/runtime/conditions" "github.com/spf13/cobra" corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/errors" - apimeta "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/wait" @@ -242,12 +242,14 @@ func isHelmRepositoryReady(ctx context.Context, kubeClient client.Client, return false, err } - // Confirm the state we are observing is for the current generation - if helmRepository.Generation != helmRepository.Status.ObservedGeneration { - return false, nil - } + if c := conditions.Get(helmRepository, meta.ReadyCondition); c != nil { + // Confirm the Ready condition we are observing is for the + // current generation + if c.ObservedGeneration != helmRepository.GetGeneration() { + return false, nil + } - if c := apimeta.FindStatusCondition(helmRepository.Status.Conditions, meta.ReadyCondition); c != nil { + // Further check the Status switch c.Status { case metav1.ConditionTrue: return true, nil diff --git a/cmd/flux/reconcile_source_bucket.go b/cmd/flux/reconcile_source_bucket.go index 3ede1c50..2a2bbdbc 100644 --- a/cmd/flux/reconcile_source_bucket.go +++ b/cmd/flux/reconcile_source_bucket.go @@ -17,17 +17,10 @@ limitations under the License. package main import ( - "context" "fmt" "github.com/spf13/cobra" - apimeta "k8s.io/apimachinery/pkg/api/meta" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/types" - "k8s.io/apimachinery/pkg/util/wait" - "sigs.k8s.io/controller-runtime/pkg/client" - "github.com/fluxcd/pkg/apis/meta" sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" ) @@ -48,31 +41,6 @@ func init() { reconcileSourceCmd.AddCommand(reconcileSourceBucketCmd) } -func isBucketReady(ctx context.Context, kubeClient client.Client, - namespacedName types.NamespacedName, bucket *sourcev1.Bucket) wait.ConditionFunc { - return func() (bool, error) { - err := kubeClient.Get(ctx, namespacedName, bucket) - if err != nil { - return false, err - } - - // Confirm the state we are observing is for the current generation - if bucket.Generation != bucket.Status.ObservedGeneration { - return false, nil - } - - if c := apimeta.FindStatusCondition(bucket.Status.Conditions, meta.ReadyCondition); c != nil { - switch c.Status { - case metav1.ConditionTrue: - return true, nil - case metav1.ConditionFalse: - return false, fmt.Errorf(c.Message) - } - } - return false, nil - } -} - func (obj bucketAdapter) lastHandledReconcileRequest() string { return obj.Status.GetLastHandledReconcileRequest() } diff --git a/go.mod b/go.mod index 17ac2bbe..bdf9bc9b 100644 --- a/go.mod +++ b/go.mod @@ -122,6 +122,7 @@ require ( github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 // indirect + github.com/onsi/gomega v1.18.1 // indirect github.com/peterbourgon/diskv v2.0.1+incompatible // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect diff --git a/go.sum b/go.sum index e08705dd..d9bee2db 100644 --- a/go.sum +++ b/go.sum @@ -466,6 +466,7 @@ github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh github.com/go-openapi/swag v0.19.14 h1:gm3vOOXfiuw5i9p5N9xJvfjvuofpyvLA9Wr6QfK5Fng= github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/godbus/dbus v0.0.0-20151105175453-c7fdd8b5cd55/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= github.com/godbus/dbus v0.0.0-20180201030542-885f9cc04c9c/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= @@ -575,6 +576,7 @@ github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= @@ -820,6 +822,7 @@ github.com/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/olekukonko/tablewriter v0.0.4/go.mod h1:zq6QwlOf5SlnkVbMSr5EoBv3636FWnp+qbPhuoO21uA= @@ -833,14 +836,19 @@ github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+ github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= +github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= +github.com/onsi/ginkgo/v2 v2.0.0 h1:CcuG/HvWNkkaqCUpJifQY8z7qEMBJya6aLPx6ftGyjQ= +github.com/onsi/ginkgo/v2 v2.0.0/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= github.com/onsi/gomega v0.0.0-20151007035656-2152b45fa28a/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDsH8xc= +github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE= +github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= github.com/opencontainers/go-digest v0.0.0-20170106003457-a6d0ee40d420/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= @@ -1211,6 +1219,7 @@ golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLd golang.org/x/net v0.0.0-20210326060303-6b1517762897/go.mod h1:uSPa2vr4CLtc/ILN5odXGNXS6mhrKVzTaCXzk9m6W3k= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= +golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= @@ -1330,6 +1339,7 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201202213521-69691e467435/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1440,6 +1450,7 @@ golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82u golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= From 5f74c7d2942a2bb2d8b47ad321761bf13e5e7050 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 23 Mar 2022 15:33:57 +0200 Subject: [PATCH 057/818] Fix resume source bucket panic Signed-off-by: Stefan Prodan --- cmd/flux/resume_source_bucket.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cmd/flux/resume_source_bucket.go b/cmd/flux/resume_source_bucket.go index a4a3b689..4fd32bc2 100644 --- a/cmd/flux/resume_source_bucket.go +++ b/cmd/flux/resume_source_bucket.go @@ -31,7 +31,8 @@ var resumeSourceBucketCmd = &cobra.Command{ ValidArgsFunction: resourceNamesCompletionFunc(sourcev1.GroupVersion.WithKind(sourcev1.BucketKind)), RunE: resumeCommand{ apiType: bucketType, - object: &bucketAdapter{&sourcev1.Bucket{}}, + object: bucketAdapter{&sourcev1.Bucket{}}, + list: bucketListAdapter{&sourcev1.BucketList{}}, }.run, } From c85954ddef12e344b951f3da60de0a7e5ff7c22f Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Wed, 23 Mar 2022 20:16:52 +0000 Subject: [PATCH 058/818] Update toolkit components - helm-controller to v0.18.1 https://github.com/fluxcd/helm-controller/blob/v0.18.1/CHANGELOG.md - source-controller to v0.22.2 https://github.com/fluxcd/source-controller/blob/v0.22.2/CHANGELOG.md - notification-controller to v0.23.1 https://github.com/fluxcd/notification-controller/blob/v0.23.1/CHANGELOG.md - image-reflector-controller to v0.17.1 https://github.com/fluxcd/image-reflector-controller/blob/v0.17.1/CHANGELOG.md - image-automation-controller to v0.21.1 https://github.com/fluxcd/image-automation-controller/blob/v0.21.1/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 10 +++++----- go.sum | 20 +++++++++---------- .../bases/helm-controller/kustomization.yaml | 4 ++-- .../kustomization.yaml | 4 ++-- .../kustomization.yaml | 4 ++-- .../kustomization.yaml | 4 ++-- .../source-controller/kustomization.yaml | 4 ++-- manifests/crds/kustomization.yaml | 10 +++++----- 8 files changed, 30 insertions(+), 30 deletions(-) diff --git a/go.mod b/go.mod index bdf9bc9b..885216b8 100644 --- a/go.mod +++ b/go.mod @@ -7,11 +7,11 @@ require ( github.com/ProtonMail/go-crypto v0.0.0-20220113124808-70ae35bab23f github.com/cyphar/filepath-securejoin v0.2.3 github.com/fluxcd/go-git-providers v0.5.4 - github.com/fluxcd/helm-controller/api v0.18.0 - github.com/fluxcd/image-automation-controller/api v0.21.0 - github.com/fluxcd/image-reflector-controller/api v0.17.0 + github.com/fluxcd/helm-controller/api v0.18.1 + github.com/fluxcd/image-automation-controller/api v0.21.1 + github.com/fluxcd/image-reflector-controller/api v0.17.1 github.com/fluxcd/kustomize-controller/api v0.22.0 - github.com/fluxcd/notification-controller/api v0.23.0 + github.com/fluxcd/notification-controller/api v0.23.1 github.com/fluxcd/pkg/apis/meta v0.12.1 github.com/fluxcd/pkg/kustomize v0.0.3 github.com/fluxcd/pkg/runtime v0.13.2 @@ -19,7 +19,7 @@ require ( github.com/fluxcd/pkg/ssh v0.3.2 github.com/fluxcd/pkg/untar v0.1.0 github.com/fluxcd/pkg/version v0.1.0 - github.com/fluxcd/source-controller/api v0.22.1 + github.com/fluxcd/source-controller/api v0.22.2 github.com/go-git/go-git/v5 v5.4.2 github.com/gonvenience/bunt v1.3.3 github.com/gonvenience/ytbx v1.4.4 diff --git a/go.sum b/go.sum index d9bee2db..c60221a3 100644 --- a/go.sum +++ b/go.sum @@ -375,16 +375,16 @@ github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYF github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fluxcd/go-git-providers v0.5.4 h1:MnByjsmXa8rMt2hTmhmtbocq7YIsTlwZKrj9lAsob4Q= github.com/fluxcd/go-git-providers v0.5.4/go.mod h1:4jTHTmSx3rFGnG78KUVgFYeG6vWFnKwUSr2mi31tvp8= -github.com/fluxcd/helm-controller/api v0.18.0 h1:qRkIwRUvIKRvc/7qP9judEZ6lYjptNkRQLNasqdlpH0= -github.com/fluxcd/helm-controller/api v0.18.0/go.mod h1:+P3I9VV/4IMryjj9BIGtdZnxdCQfBXExWTv8Z9DF33o= -github.com/fluxcd/image-automation-controller/api v0.21.0 h1:e87aJhU5+1onwGg5wYjFW4p5tnA31RwyyCWXAF/GBHw= -github.com/fluxcd/image-automation-controller/api v0.21.0/go.mod h1:v2NMXFVogXXfGh37e2132+JB32bcubDrTuvn+CA9c9o= -github.com/fluxcd/image-reflector-controller/api v0.17.0 h1:hMPFqZOuE4gNMvwWq0YX//mX7j/nwtuk5WRu8eBwehg= -github.com/fluxcd/image-reflector-controller/api v0.17.0/go.mod h1:Lg8A+MUcke0Orp6C6UQkf9I3pc8M/B3XS3TOI+YxVBY= +github.com/fluxcd/helm-controller/api v0.18.1 h1:1DEHG56g6F2u6jVpxlaJyMtSujFVOiOrUNYLZ2l7BE0= +github.com/fluxcd/helm-controller/api v0.18.1/go.mod h1:+P3I9VV/4IMryjj9BIGtdZnxdCQfBXExWTv8Z9DF33o= +github.com/fluxcd/image-automation-controller/api v0.21.1 h1:qwcIOsjHIURMiUICoBfSaY8P7PmSsnLUMFkThr3F5HY= +github.com/fluxcd/image-automation-controller/api v0.21.1/go.mod h1:QWVMs4MElbyYHCwSEw5D6/aecbxcSwS4ronGWlPPWC4= +github.com/fluxcd/image-reflector-controller/api v0.17.1 h1:0eWE26PmCo3ZQBnDkNA6wiHhAEsTtUG4oz59enqIzsQ= +github.com/fluxcd/image-reflector-controller/api v0.17.1/go.mod h1:Lg8A+MUcke0Orp6C6UQkf9I3pc8M/B3XS3TOI+YxVBY= github.com/fluxcd/kustomize-controller/api v0.22.0 h1:zSb9rIhEPLG1z0FtER0+yDsb8OPCv6wcsOdYTo/yiDs= github.com/fluxcd/kustomize-controller/api v0.22.0/go.mod h1:Kq2kKnU6Z9CiZFLpHTMSLvpgWiT/e03NRb1wc8W+24E= -github.com/fluxcd/notification-controller/api v0.23.0 h1:eWlccKDCEhkPuj8jx+RNpc4CYAa+++uIjFy+R90eVg0= -github.com/fluxcd/notification-controller/api v0.23.0/go.mod h1:0QFnW7CrYl5ItHNPpstxU42Pmb5/Qepx8FFjVxcZqIk= +github.com/fluxcd/notification-controller/api v0.23.1 h1:Bef4+AbuNXS+7M5bWjOKXBDQT5OU1xVM9VbZWFYiRp0= +github.com/fluxcd/notification-controller/api v0.23.1/go.mod h1:0QFnW7CrYl5ItHNPpstxU42Pmb5/Qepx8FFjVxcZqIk= github.com/fluxcd/pkg/apis/acl v0.0.3 h1:Lw0ZHdpnO4G7Zy9KjrzwwBmDZQuy4qEjaU/RvA6k1lc= github.com/fluxcd/pkg/apis/acl v0.0.3/go.mod h1:XPts6lRJ9C9fIF9xVWofmQwftvhY25n1ps7W9xw0XLU= github.com/fluxcd/pkg/apis/kustomize v0.3.2 h1:ULoAwOOekHf5cy6mYIwL+K6v8/cfcNVVbwfIPgWjdjg= @@ -403,8 +403,8 @@ github.com/fluxcd/pkg/untar v0.1.0 h1:k97V/xV5hFrAkIkVPuv5AVhyxh1ZzzAKba/lbDfGo6 github.com/fluxcd/pkg/untar v0.1.0/go.mod h1:aGswNyzB1mlz/T/kpOS58mITBMxMKc9tlJBH037A2HY= github.com/fluxcd/pkg/version v0.1.0 h1:v+SmCanmCB5Tj2Cx9TXlj+kNRfPGbAvirkeqsp7ZEAQ= github.com/fluxcd/pkg/version v0.1.0/go.mod h1:V7Z/w8dxLQzv0FHqa5ox5TeyOd2zOd49EeuWFgnwyj4= -github.com/fluxcd/source-controller/api v0.22.1 h1:0KLO/L1bTVeHGr2CpTSM1k+jFDrhtboH1qV1HoleVO0= -github.com/fluxcd/source-controller/api v0.22.1/go.mod h1:Vb13q9Pq+1IW/sJUZn/RSb7IU5WT86Er6uCFPCFm9L4= +github.com/fluxcd/source-controller/api v0.22.2 h1:1TSCa4qLKDstPpXQoaz5xiLER2y8xflpCXKPxYPFGPY= +github.com/fluxcd/source-controller/api v0.22.2/go.mod h1:Vb13q9Pq+1IW/sJUZn/RSb7IU5WT86Er6uCFPCFm9L4= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/form3tech-oss/jwt-go v3.2.3+incompatible h1:7ZaBxOI7TMoYBfyA3cQHErNNyAWIKUMIwqxEtgHOs5c= diff --git a/manifests/bases/helm-controller/kustomization.yaml b/manifests/bases/helm-controller/kustomization.yaml index a38aa8bb..dea138c6 100644 --- a/manifests/bases/helm-controller/kustomization.yaml +++ b/manifests/bases/helm-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/helm-controller/releases/download/v0.18.0/helm-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.18.0/helm-controller.deployment.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.18.1/helm-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.18.1/helm-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/image-automation-controller/kustomization.yaml b/manifests/bases/image-automation-controller/kustomization.yaml index 35f4eae7..3b1a10e3 100644 --- a/manifests/bases/image-automation-controller/kustomization.yaml +++ b/manifests/bases/image-automation-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.21.0/image-automation-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.21.0/image-automation-controller.deployment.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.21.1/image-automation-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.21.1/image-automation-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/image-reflector-controller/kustomization.yaml b/manifests/bases/image-reflector-controller/kustomization.yaml index ec33da93..7b3ae987 100644 --- a/manifests/bases/image-reflector-controller/kustomization.yaml +++ b/manifests/bases/image-reflector-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.17.0/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.17.0/image-reflector-controller.deployment.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.17.1/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.17.1/image-reflector-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/notification-controller/kustomization.yaml b/manifests/bases/notification-controller/kustomization.yaml index 5a14cb78..86aa8023 100644 --- a/manifests/bases/notification-controller/kustomization.yaml +++ b/manifests/bases/notification-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/notification-controller/releases/download/v0.23.0/notification-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v0.23.0/notification-controller.deployment.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.23.1/notification-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.23.1/notification-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index 64a4e69d..9fbcc89b 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.22.1/source-controller.crds.yaml -- https://github.com/fluxcd/source-controller/releases/download/v0.22.1/source-controller.deployment.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.22.2/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.22.2/source-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index b58a5b20..2aec455f 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -1,9 +1,9 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.22.1/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.22.2/source-controller.crds.yaml - https://github.com/fluxcd/kustomize-controller/releases/download/v0.22.0/kustomize-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.18.0/helm-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v0.23.0/notification-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.17.0/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.21.0/image-automation-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.18.1/helm-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.23.1/notification-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.17.1/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.21.1/image-automation-controller.crds.yaml From 775891fc88bdd7b30b3b281773d6e39a48d5a5e2 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Wed, 23 Mar 2022 21:32:00 +0100 Subject: [PATCH 059/818] build: ensure component update runs with make tidy This to include the `-compat` flag. Signed-off-by: Hidde Beydals --- .github/workflows/update.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/update.yaml b/.github/workflows/update.yaml index bb815fdd..7d0da6f9 100644 --- a/.github/workflows/update.yaml +++ b/.github/workflows/update.yaml @@ -42,8 +42,7 @@ jobs: if [[ "${MOD_VERSION}" != "${LATEST_VERSION}" ]]; then go mod edit -require="github.com/fluxcd/$1/api@${LATEST_VERSION}" - rm go.sum - go mod tidy + make tidy changed=true fi From e2ccbe2088f4f8ecb1096553d4762b87265862d8 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Wed, 23 Mar 2022 21:33:34 +0100 Subject: [PATCH 060/818] tests/azure: update toolkit components - helm-controller to v0.18.1 https://github.com/fluxcd/helm-controller/blob/v0.18.1/CHANGELOG.md - source-controller to v0.22.2 https://github.com/fluxcd/source-controller/blob/v0.22.2/CHANGELOG.md - notification-controller to v0.23.1 https://github.com/fluxcd/notification-controller/blob/v0.23.1/CHANGELOG.md - image-reflector-controller to v0.17.1 https://github.com/fluxcd/image-reflector-controller/blob/v0.17.1/CHANGELOG.md - image-automation-controller to v0.21.1 https://github.com/fluxcd/image-automation-controller/blob/v0.21.1/CHANGELOG.md Signed-off-by: Hidde Beydals --- tests/azure/go.mod | 10 +++++----- tests/azure/go.sum | 20 ++++++++++---------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/tests/azure/go.mod b/tests/azure/go.mod index fd5e64e5..2b2938e8 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -4,14 +4,14 @@ go 1.17 require ( github.com/Azure/azure-event-hubs-go/v3 v3.3.17 - github.com/fluxcd/helm-controller/api v0.18.0 - github.com/fluxcd/image-automation-controller/api v0.21.0 - github.com/fluxcd/image-reflector-controller/api v0.17.0 + github.com/fluxcd/helm-controller/api v0.18.1 + github.com/fluxcd/image-automation-controller/api v0.21.1 + github.com/fluxcd/image-reflector-controller/api v0.17.1 github.com/fluxcd/kustomize-controller/api v0.22.0 - github.com/fluxcd/notification-controller/api v0.23.0 + github.com/fluxcd/notification-controller/api v0.23.1 github.com/fluxcd/pkg/apis/meta v0.12.1 github.com/fluxcd/pkg/runtime v0.13.2 - github.com/fluxcd/source-controller/api v0.22.1 + github.com/fluxcd/source-controller/api v0.22.2 github.com/hashicorp/terraform-exec v0.15.0 github.com/libgit2/git2go/v31 v31.7.9 github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 diff --git a/tests/azure/go.sum b/tests/azure/go.sum index 9cf9f893..89f39034 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -192,16 +192,16 @@ github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/fluxcd/helm-controller/api v0.18.0 h1:qRkIwRUvIKRvc/7qP9judEZ6lYjptNkRQLNasqdlpH0= -github.com/fluxcd/helm-controller/api v0.18.0/go.mod h1:+P3I9VV/4IMryjj9BIGtdZnxdCQfBXExWTv8Z9DF33o= -github.com/fluxcd/image-automation-controller/api v0.21.0 h1:e87aJhU5+1onwGg5wYjFW4p5tnA31RwyyCWXAF/GBHw= -github.com/fluxcd/image-automation-controller/api v0.21.0/go.mod h1:v2NMXFVogXXfGh37e2132+JB32bcubDrTuvn+CA9c9o= -github.com/fluxcd/image-reflector-controller/api v0.17.0 h1:hMPFqZOuE4gNMvwWq0YX//mX7j/nwtuk5WRu8eBwehg= -github.com/fluxcd/image-reflector-controller/api v0.17.0/go.mod h1:Lg8A+MUcke0Orp6C6UQkf9I3pc8M/B3XS3TOI+YxVBY= +github.com/fluxcd/helm-controller/api v0.18.1 h1:1DEHG56g6F2u6jVpxlaJyMtSujFVOiOrUNYLZ2l7BE0= +github.com/fluxcd/helm-controller/api v0.18.1/go.mod h1:+P3I9VV/4IMryjj9BIGtdZnxdCQfBXExWTv8Z9DF33o= +github.com/fluxcd/image-automation-controller/api v0.21.1 h1:qwcIOsjHIURMiUICoBfSaY8P7PmSsnLUMFkThr3F5HY= +github.com/fluxcd/image-automation-controller/api v0.21.1/go.mod h1:QWVMs4MElbyYHCwSEw5D6/aecbxcSwS4ronGWlPPWC4= +github.com/fluxcd/image-reflector-controller/api v0.17.1 h1:0eWE26PmCo3ZQBnDkNA6wiHhAEsTtUG4oz59enqIzsQ= +github.com/fluxcd/image-reflector-controller/api v0.17.1/go.mod h1:Lg8A+MUcke0Orp6C6UQkf9I3pc8M/B3XS3TOI+YxVBY= github.com/fluxcd/kustomize-controller/api v0.22.0 h1:zSb9rIhEPLG1z0FtER0+yDsb8OPCv6wcsOdYTo/yiDs= github.com/fluxcd/kustomize-controller/api v0.22.0/go.mod h1:Kq2kKnU6Z9CiZFLpHTMSLvpgWiT/e03NRb1wc8W+24E= -github.com/fluxcd/notification-controller/api v0.23.0 h1:eWlccKDCEhkPuj8jx+RNpc4CYAa+++uIjFy+R90eVg0= -github.com/fluxcd/notification-controller/api v0.23.0/go.mod h1:0QFnW7CrYl5ItHNPpstxU42Pmb5/Qepx8FFjVxcZqIk= +github.com/fluxcd/notification-controller/api v0.23.1 h1:Bef4+AbuNXS+7M5bWjOKXBDQT5OU1xVM9VbZWFYiRp0= +github.com/fluxcd/notification-controller/api v0.23.1/go.mod h1:0QFnW7CrYl5ItHNPpstxU42Pmb5/Qepx8FFjVxcZqIk= github.com/fluxcd/pkg/apis/acl v0.0.3 h1:Lw0ZHdpnO4G7Zy9KjrzwwBmDZQuy4qEjaU/RvA6k1lc= github.com/fluxcd/pkg/apis/acl v0.0.3/go.mod h1:XPts6lRJ9C9fIF9xVWofmQwftvhY25n1ps7W9xw0XLU= github.com/fluxcd/pkg/apis/kustomize v0.3.2 h1:ULoAwOOekHf5cy6mYIwL+K6v8/cfcNVVbwfIPgWjdjg= @@ -210,8 +210,8 @@ github.com/fluxcd/pkg/apis/meta v0.12.1 h1:m5PfKAqbqWBvGp9+JRj1sv+xNkGsHwUVf+3rJ github.com/fluxcd/pkg/apis/meta v0.12.1/go.mod h1:f8YVt70/KAhqzZ7xxhjvqyzKubOYx2pAbakb/FfCEg8= github.com/fluxcd/pkg/runtime v0.13.2 h1:6jkQQUbp17WxHsbozlJFCvHmOS4JIB+yB20CdCd8duE= github.com/fluxcd/pkg/runtime v0.13.2/go.mod h1:dzWNKqFzFXeittbpFcJzR3cdC9CWlbzw+pNOgaVvF/0= -github.com/fluxcd/source-controller/api v0.22.1 h1:0KLO/L1bTVeHGr2CpTSM1k+jFDrhtboH1qV1HoleVO0= -github.com/fluxcd/source-controller/api v0.22.1/go.mod h1:Vb13q9Pq+1IW/sJUZn/RSb7IU5WT86Er6uCFPCFm9L4= +github.com/fluxcd/source-controller/api v0.22.2 h1:1TSCa4qLKDstPpXQoaz5xiLER2y8xflpCXKPxYPFGPY= +github.com/fluxcd/source-controller/api v0.22.2/go.mod h1:Vb13q9Pq+1IW/sJUZn/RSb7IU5WT86Er6uCFPCFm9L4= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/form3tech-oss/jwt-go v3.2.3+incompatible h1:7ZaBxOI7TMoYBfyA3cQHErNNyAWIKUMIwqxEtgHOs5c= From 116be0cfedb2e7008f32b01f519210e65caec86f Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Thu, 24 Mar 2022 07:01:20 +0000 Subject: [PATCH 061/818] Update toolkit components - kustomize-controller to v0.22.1 https://github.com/fluxcd/kustomize-controller/blob/v0.22.1/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 2 +- go.sum | 4 ++-- manifests/bases/kustomize-controller/kustomization.yaml | 4 ++-- manifests/crds/kustomization.yaml | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index 885216b8..a6ca1c2f 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/fluxcd/helm-controller/api v0.18.1 github.com/fluxcd/image-automation-controller/api v0.21.1 github.com/fluxcd/image-reflector-controller/api v0.17.1 - github.com/fluxcd/kustomize-controller/api v0.22.0 + github.com/fluxcd/kustomize-controller/api v0.22.1 github.com/fluxcd/notification-controller/api v0.23.1 github.com/fluxcd/pkg/apis/meta v0.12.1 github.com/fluxcd/pkg/kustomize v0.0.3 diff --git a/go.sum b/go.sum index c60221a3..a89b47c9 100644 --- a/go.sum +++ b/go.sum @@ -381,8 +381,8 @@ github.com/fluxcd/image-automation-controller/api v0.21.1 h1:qwcIOsjHIURMiUICoBf github.com/fluxcd/image-automation-controller/api v0.21.1/go.mod h1:QWVMs4MElbyYHCwSEw5D6/aecbxcSwS4ronGWlPPWC4= github.com/fluxcd/image-reflector-controller/api v0.17.1 h1:0eWE26PmCo3ZQBnDkNA6wiHhAEsTtUG4oz59enqIzsQ= github.com/fluxcd/image-reflector-controller/api v0.17.1/go.mod h1:Lg8A+MUcke0Orp6C6UQkf9I3pc8M/B3XS3TOI+YxVBY= -github.com/fluxcd/kustomize-controller/api v0.22.0 h1:zSb9rIhEPLG1z0FtER0+yDsb8OPCv6wcsOdYTo/yiDs= -github.com/fluxcd/kustomize-controller/api v0.22.0/go.mod h1:Kq2kKnU6Z9CiZFLpHTMSLvpgWiT/e03NRb1wc8W+24E= +github.com/fluxcd/kustomize-controller/api v0.22.1 h1:PUO1DQsZjnskOlHEwUjUo6Hxd9hjGnocDhiaVrwp28w= +github.com/fluxcd/kustomize-controller/api v0.22.1/go.mod h1:Kq2kKnU6Z9CiZFLpHTMSLvpgWiT/e03NRb1wc8W+24E= github.com/fluxcd/notification-controller/api v0.23.1 h1:Bef4+AbuNXS+7M5bWjOKXBDQT5OU1xVM9VbZWFYiRp0= github.com/fluxcd/notification-controller/api v0.23.1/go.mod h1:0QFnW7CrYl5ItHNPpstxU42Pmb5/Qepx8FFjVxcZqIk= github.com/fluxcd/pkg/apis/acl v0.0.3 h1:Lw0ZHdpnO4G7Zy9KjrzwwBmDZQuy4qEjaU/RvA6k1lc= diff --git a/manifests/bases/kustomize-controller/kustomization.yaml b/manifests/bases/kustomize-controller/kustomization.yaml index 90a1a8db..ca4311b3 100644 --- a/manifests/bases/kustomize-controller/kustomization.yaml +++ b/manifests/bases/kustomize-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.22.0/kustomize-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.22.0/kustomize-controller.deployment.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.22.1/kustomize-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.22.1/kustomize-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index 2aec455f..8c7c86df 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -2,7 +2,7 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - https://github.com/fluxcd/source-controller/releases/download/v0.22.2/source-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.22.0/kustomize-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.22.1/kustomize-controller.crds.yaml - https://github.com/fluxcd/helm-controller/releases/download/v0.18.1/helm-controller.crds.yaml - https://github.com/fluxcd/notification-controller/releases/download/v0.23.1/notification-controller.crds.yaml - https://github.com/fluxcd/image-reflector-controller/releases/download/v0.17.1/image-reflector-controller.crds.yaml From 694f1797d29f4d3cb61518fb8b2993f556c31140 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Thu, 24 Mar 2022 09:23:35 +0200 Subject: [PATCH 062/818] Update packages for Azure e2e testing Signed-off-by: Stefan Prodan --- tests/azure/go.mod | 2 +- tests/azure/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/azure/go.mod b/tests/azure/go.mod index 2b2938e8..7ee402ea 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -7,7 +7,7 @@ require ( github.com/fluxcd/helm-controller/api v0.18.1 github.com/fluxcd/image-automation-controller/api v0.21.1 github.com/fluxcd/image-reflector-controller/api v0.17.1 - github.com/fluxcd/kustomize-controller/api v0.22.0 + github.com/fluxcd/kustomize-controller/api v0.22.1 github.com/fluxcd/notification-controller/api v0.23.1 github.com/fluxcd/pkg/apis/meta v0.12.1 github.com/fluxcd/pkg/runtime v0.13.2 diff --git a/tests/azure/go.sum b/tests/azure/go.sum index 89f39034..78b54ea3 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -198,8 +198,8 @@ github.com/fluxcd/image-automation-controller/api v0.21.1 h1:qwcIOsjHIURMiUICoBf github.com/fluxcd/image-automation-controller/api v0.21.1/go.mod h1:QWVMs4MElbyYHCwSEw5D6/aecbxcSwS4ronGWlPPWC4= github.com/fluxcd/image-reflector-controller/api v0.17.1 h1:0eWE26PmCo3ZQBnDkNA6wiHhAEsTtUG4oz59enqIzsQ= github.com/fluxcd/image-reflector-controller/api v0.17.1/go.mod h1:Lg8A+MUcke0Orp6C6UQkf9I3pc8M/B3XS3TOI+YxVBY= -github.com/fluxcd/kustomize-controller/api v0.22.0 h1:zSb9rIhEPLG1z0FtER0+yDsb8OPCv6wcsOdYTo/yiDs= -github.com/fluxcd/kustomize-controller/api v0.22.0/go.mod h1:Kq2kKnU6Z9CiZFLpHTMSLvpgWiT/e03NRb1wc8W+24E= +github.com/fluxcd/kustomize-controller/api v0.22.1 h1:PUO1DQsZjnskOlHEwUjUo6Hxd9hjGnocDhiaVrwp28w= +github.com/fluxcd/kustomize-controller/api v0.22.1/go.mod h1:Kq2kKnU6Z9CiZFLpHTMSLvpgWiT/e03NRb1wc8W+24E= github.com/fluxcd/notification-controller/api v0.23.1 h1:Bef4+AbuNXS+7M5bWjOKXBDQT5OU1xVM9VbZWFYiRp0= github.com/fluxcd/notification-controller/api v0.23.1/go.mod h1:0QFnW7CrYl5ItHNPpstxU42Pmb5/Qepx8FFjVxcZqIk= github.com/fluxcd/pkg/apis/acl v0.0.3 h1:Lw0ZHdpnO4G7Zy9KjrzwwBmDZQuy4qEjaU/RvA6k1lc= From 0d8194c800482b6f8e7ba8aeec25ceeb8681e4c5 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Thu, 24 Mar 2022 20:02:17 +0200 Subject: [PATCH 063/818] Add the kube client qps and burst to the global args Signed-off-by: Stefan Prodan --- cmd/flux/bootstrap_bitbucket_server.go | 4 ++-- cmd/flux/bootstrap_git.go | 4 ++-- cmd/flux/bootstrap_github.go | 4 ++-- cmd/flux/bootstrap_gitlab.go | 4 ++-- cmd/flux/build_kustomization.go | 2 +- cmd/flux/check.go | 6 +++--- cmd/flux/completion.go | 2 +- cmd/flux/create.go | 2 +- cmd/flux/create_alert.go | 2 +- cmd/flux/create_alertprovider.go | 2 +- cmd/flux/create_helmrelease.go | 2 +- cmd/flux/create_kustomization.go | 2 +- cmd/flux/create_receiver.go | 2 +- cmd/flux/create_secret_git.go | 2 +- cmd/flux/create_secret_helm.go | 2 +- cmd/flux/create_secret_tls.go | 2 +- cmd/flux/create_source_bucket.go | 2 +- cmd/flux/create_source_git.go | 2 +- cmd/flux/create_source_helm.go | 2 +- cmd/flux/create_tenant.go | 2 +- cmd/flux/delete.go | 2 +- cmd/flux/diff_kustomization.go | 4 ++-- cmd/flux/diff_kustomization_test.go | 2 +- cmd/flux/export.go | 2 +- cmd/flux/export_secret.go | 2 +- cmd/flux/get.go | 2 +- cmd/flux/install.go | 4 ++-- cmd/flux/logs.go | 2 +- cmd/flux/main.go | 5 +++++ cmd/flux/reconcile.go | 2 +- cmd/flux/reconcile_alertprovider.go | 2 +- cmd/flux/reconcile_receiver.go | 2 +- cmd/flux/reconcile_with_source.go | 2 +- cmd/flux/resume.go | 2 +- cmd/flux/suspend.go | 2 +- cmd/flux/trace.go | 2 +- cmd/flux/tree_kustomization.go | 2 +- cmd/flux/uninstall.go | 2 +- cmd/flux/version.go | 2 +- go.mod | 10 ++++++++++ go.sum | 8 +++++++- internal/bootstrap/bootstrap_plain_git.go | 12 +++++++----- internal/bootstrap/options.go | 14 +++++++++---- internal/build/build.go | 13 +++++++----- internal/utils/apply.go | 24 ++++++++++++----------- internal/utils/utils.go | 12 ++++++++---- 46 files changed, 114 insertions(+), 76 deletions(-) diff --git a/cmd/flux/bootstrap_bitbucket_server.go b/cmd/flux/bootstrap_bitbucket_server.go index d71754e4..4898e1fe 100644 --- a/cmd/flux/bootstrap_bitbucket_server.go +++ b/cmd/flux/bootstrap_bitbucket_server.go @@ -121,7 +121,7 @@ func bootstrapBServerCmdRun(cmd *cobra.Command, args []string) error { ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) defer cancel() - kubeClient, err := utils.KubeClient(kubeconfigArgs) + kubeClient, err := utils.KubeClient(kubeconfigArgs, kubeclientOptions) if err != nil { return err } @@ -251,7 +251,7 @@ func bootstrapBServerCmdRun(cmd *cobra.Command, args []string) error { bootstrap.WithCommitMessageAppendix(bootstrapArgs.commitMessageAppendix), bootstrap.WithProviderTeamPermissions(mapTeamSlice(bServerArgs.teams, bServerDefaultPermission)), bootstrap.WithReadWriteKeyPermissions(bServerArgs.readWriteKey), - bootstrap.WithKubeconfig(kubeconfigArgs), + bootstrap.WithKubeconfig(kubeconfigArgs, kubeclientOptions), bootstrap.WithLogger(logger), bootstrap.WithCABundle(caBundle), bootstrap.WithGitCommitSigning(bootstrapArgs.gpgKeyRingPath, bootstrapArgs.gpgPassphrase, bootstrapArgs.gpgKeyID), diff --git a/cmd/flux/bootstrap_git.go b/cmd/flux/bootstrap_git.go index 91738ae5..3104ea97 100644 --- a/cmd/flux/bootstrap_git.go +++ b/cmd/flux/bootstrap_git.go @@ -101,7 +101,7 @@ func bootstrapGitCmdRun(cmd *cobra.Command, args []string) error { ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) defer cancel() - kubeClient, err := utils.KubeClient(kubeconfigArgs) + kubeClient, err := utils.KubeClient(kubeconfigArgs, kubeclientOptions) if err != nil { return err } @@ -225,7 +225,7 @@ func bootstrapGitCmdRun(cmd *cobra.Command, args []string) error { bootstrap.WithBranch(bootstrapArgs.branch), bootstrap.WithAuthor(bootstrapArgs.authorName, bootstrapArgs.authorEmail), bootstrap.WithCommitMessageAppendix(bootstrapArgs.commitMessageAppendix), - bootstrap.WithKubeconfig(kubeconfigArgs), + bootstrap.WithKubeconfig(kubeconfigArgs, kubeclientOptions), bootstrap.WithPostGenerateSecretFunc(promptPublicKey), bootstrap.WithLogger(logger), bootstrap.WithCABundle(caBundle), diff --git a/cmd/flux/bootstrap_github.go b/cmd/flux/bootstrap_github.go index 904f6890..3f2ff342 100644 --- a/cmd/flux/bootstrap_github.go +++ b/cmd/flux/bootstrap_github.go @@ -125,7 +125,7 @@ func bootstrapGitHubCmdRun(cmd *cobra.Command, args []string) error { ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) defer cancel() - kubeClient, err := utils.KubeClient(kubeconfigArgs) + kubeClient, err := utils.KubeClient(kubeconfigArgs, kubeclientOptions) if err != nil { return err } @@ -240,7 +240,7 @@ func bootstrapGitHubCmdRun(cmd *cobra.Command, args []string) error { bootstrap.WithCommitMessageAppendix(bootstrapArgs.commitMessageAppendix), bootstrap.WithProviderTeamPermissions(mapTeamSlice(githubArgs.teams, ghDefaultPermission)), bootstrap.WithReadWriteKeyPermissions(githubArgs.readWriteKey), - bootstrap.WithKubeconfig(kubeconfigArgs), + bootstrap.WithKubeconfig(kubeconfigArgs, kubeclientOptions), bootstrap.WithLogger(logger), bootstrap.WithCABundle(caBundle), bootstrap.WithGitCommitSigning(bootstrapArgs.gpgKeyRingPath, bootstrapArgs.gpgPassphrase, bootstrapArgs.gpgKeyID), diff --git a/cmd/flux/bootstrap_gitlab.go b/cmd/flux/bootstrap_gitlab.go index 1e58834d..afebfa91 100644 --- a/cmd/flux/bootstrap_gitlab.go +++ b/cmd/flux/bootstrap_gitlab.go @@ -129,7 +129,7 @@ func bootstrapGitLabCmdRun(cmd *cobra.Command, args []string) error { ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) defer cancel() - kubeClient, err := utils.KubeClient(kubeconfigArgs) + kubeClient, err := utils.KubeClient(kubeconfigArgs, kubeclientOptions) if err != nil { return err } @@ -254,7 +254,7 @@ func bootstrapGitLabCmdRun(cmd *cobra.Command, args []string) error { bootstrap.WithCommitMessageAppendix(bootstrapArgs.commitMessageAppendix), bootstrap.WithProviderTeamPermissions(mapTeamSlice(gitlabArgs.teams, glDefaultPermission)), bootstrap.WithReadWriteKeyPermissions(gitlabArgs.readWriteKey), - bootstrap.WithKubeconfig(kubeconfigArgs), + bootstrap.WithKubeconfig(kubeconfigArgs, kubeclientOptions), bootstrap.WithLogger(logger), bootstrap.WithCABundle(caBundle), bootstrap.WithGitCommitSigning(bootstrapArgs.gpgKeyRingPath, bootstrapArgs.gpgPassphrase, bootstrapArgs.gpgKeyID), diff --git a/cmd/flux/build_kustomization.go b/cmd/flux/build_kustomization.go index 966046b7..41280976 100644 --- a/cmd/flux/build_kustomization.go +++ b/cmd/flux/build_kustomization.go @@ -65,7 +65,7 @@ func buildKsCmdRun(cmd *cobra.Command, args []string) error { return fmt.Errorf("invalid resource path %q", buildKsArgs.path) } - builder, err := build.NewBuilder(kubeconfigArgs, name, buildKsArgs.path, build.WithTimeout(rootArgs.timeout)) + builder, err := build.NewBuilder(kubeconfigArgs, kubeclientOptions, name, buildKsArgs.path, build.WithTimeout(rootArgs.timeout)) if err != nil { return err } diff --git a/cmd/flux/check.go b/cmd/flux/check.go index d530f553..5ad70f9b 100644 --- a/cmd/flux/check.go +++ b/cmd/flux/check.go @@ -125,7 +125,7 @@ func fluxCheck() { } func kubernetesCheck(constraints []string) bool { - cfg, err := utils.KubeConfig(kubeconfigArgs) + cfg, err := utils.KubeConfig(kubeconfigArgs, kubeclientOptions) if err != nil { logger.Failuref("Kubernetes client initialization failed: %s", err.Error()) return false @@ -173,7 +173,7 @@ func componentsCheck() bool { ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) defer cancel() - kubeConfig, err := utils.KubeConfig(kubeconfigArgs) + kubeConfig, err := utils.KubeConfig(kubeconfigArgs, kubeclientOptions) if err != nil { return false } @@ -183,7 +183,7 @@ func componentsCheck() bool { return false } - kubeClient, err := utils.KubeClient(kubeconfigArgs) + kubeClient, err := utils.KubeClient(kubeconfigArgs, kubeclientOptions) if err != nil { return false } diff --git a/cmd/flux/completion.go b/cmd/flux/completion.go index 06beac2a..c24c16be 100644 --- a/cmd/flux/completion.go +++ b/cmd/flux/completion.go @@ -60,7 +60,7 @@ func resourceNamesCompletionFunc(gvk schema.GroupVersionKind) func(cmd *cobra.Co ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) defer cancel() - cfg, err := utils.KubeConfig(kubeconfigArgs) + cfg, err := utils.KubeConfig(kubeconfigArgs, kubeclientOptions) if err != nil { return completionError(err) } diff --git a/cmd/flux/create.go b/cmd/flux/create.go index 9aed0c43..ee339775 100644 --- a/cmd/flux/create.go +++ b/cmd/flux/create.go @@ -117,7 +117,7 @@ func (names apiType) upsertAndWait(object upsertWaitable, mutate func() error) e ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) defer cancel() - kubeClient, err := utils.KubeClient(kubeconfigArgs) // NB globals + kubeClient, err := utils.KubeClient(kubeconfigArgs, kubeclientOptions) // NB globals if err != nil { return err } diff --git a/cmd/flux/create_alert.go b/cmd/flux/create_alert.go index 7f9968b8..282f8a70 100644 --- a/cmd/flux/create_alert.go +++ b/cmd/flux/create_alert.go @@ -119,7 +119,7 @@ func createAlertCmdRun(cmd *cobra.Command, args []string) error { ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) defer cancel() - kubeClient, err := utils.KubeClient(kubeconfigArgs) + kubeClient, err := utils.KubeClient(kubeconfigArgs, kubeclientOptions) if err != nil { return err } diff --git a/cmd/flux/create_alertprovider.go b/cmd/flux/create_alertprovider.go index 2663482c..fe4d0651 100644 --- a/cmd/flux/create_alertprovider.go +++ b/cmd/flux/create_alertprovider.go @@ -115,7 +115,7 @@ func createAlertProviderCmdRun(cmd *cobra.Command, args []string) error { ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) defer cancel() - kubeClient, err := utils.KubeClient(kubeconfigArgs) + kubeClient, err := utils.KubeClient(kubeconfigArgs, kubeclientOptions) if err != nil { return err } diff --git a/cmd/flux/create_helmrelease.go b/cmd/flux/create_helmrelease.go index d8f37cc5..a6705f29 100644 --- a/cmd/flux/create_helmrelease.go +++ b/cmd/flux/create_helmrelease.go @@ -247,7 +247,7 @@ func createHelmReleaseCmdRun(cmd *cobra.Command, args []string) error { ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) defer cancel() - kubeClient, err := utils.KubeClient(kubeconfigArgs) + kubeClient, err := utils.KubeClient(kubeconfigArgs, kubeclientOptions) if err != nil { return err } diff --git a/cmd/flux/create_kustomization.go b/cmd/flux/create_kustomization.go index 4d0ebb99..ef55c23c 100644 --- a/cmd/flux/create_kustomization.go +++ b/cmd/flux/create_kustomization.go @@ -229,7 +229,7 @@ func createKsCmdRun(cmd *cobra.Command, args []string) error { ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) defer cancel() - kubeClient, err := utils.KubeClient(kubeconfigArgs) + kubeClient, err := utils.KubeClient(kubeconfigArgs, kubeclientOptions) if err != nil { return err } diff --git a/cmd/flux/create_receiver.go b/cmd/flux/create_receiver.go index 6533f173..47b2570f 100644 --- a/cmd/flux/create_receiver.go +++ b/cmd/flux/create_receiver.go @@ -127,7 +127,7 @@ func createReceiverCmdRun(cmd *cobra.Command, args []string) error { ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) defer cancel() - kubeClient, err := utils.KubeClient(kubeconfigArgs) + kubeClient, err := utils.KubeClient(kubeconfigArgs, kubeclientOptions) if err != nil { return err } diff --git a/cmd/flux/create_secret_git.go b/cmd/flux/create_secret_git.go index 0effc1b5..054c8a98 100644 --- a/cmd/flux/create_secret_git.go +++ b/cmd/flux/create_secret_git.go @@ -173,7 +173,7 @@ func createSecretGitCmdRun(cmd *cobra.Command, args []string) error { ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) defer cancel() - kubeClient, err := utils.KubeClient(kubeconfigArgs) + kubeClient, err := utils.KubeClient(kubeconfigArgs, kubeclientOptions) if err != nil { return err } diff --git a/cmd/flux/create_secret_helm.go b/cmd/flux/create_secret_helm.go index 80a7ce9d..1928c109 100644 --- a/cmd/flux/create_secret_helm.go +++ b/cmd/flux/create_secret_helm.go @@ -96,7 +96,7 @@ func createSecretHelmCmdRun(cmd *cobra.Command, args []string) error { ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) defer cancel() - kubeClient, err := utils.KubeClient(kubeconfigArgs) + kubeClient, err := utils.KubeClient(kubeconfigArgs, kubeclientOptions) if err != nil { return err } diff --git a/cmd/flux/create_secret_tls.go b/cmd/flux/create_secret_tls.go index b89a2601..e3afd380 100644 --- a/cmd/flux/create_secret_tls.go +++ b/cmd/flux/create_secret_tls.go @@ -93,7 +93,7 @@ func createSecretTLSCmdRun(cmd *cobra.Command, args []string) error { ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) defer cancel() - kubeClient, err := utils.KubeClient(kubeconfigArgs) + kubeClient, err := utils.KubeClient(kubeconfigArgs, kubeclientOptions) if err != nil { return err } diff --git a/cmd/flux/create_source_bucket.go b/cmd/flux/create_source_bucket.go index 6160be0c..4ba4d636 100644 --- a/cmd/flux/create_source_bucket.go +++ b/cmd/flux/create_source_bucket.go @@ -151,7 +151,7 @@ func createSourceBucketCmdRun(cmd *cobra.Command, args []string) error { ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) defer cancel() - kubeClient, err := utils.KubeClient(kubeconfigArgs) + kubeClient, err := utils.KubeClient(kubeconfigArgs, kubeclientOptions) if err != nil { return err } diff --git a/cmd/flux/create_source_git.go b/cmd/flux/create_source_git.go index 28c1be50..a520523e 100644 --- a/cmd/flux/create_source_git.go +++ b/cmd/flux/create_source_git.go @@ -234,7 +234,7 @@ func createSourceGitCmdRun(cmd *cobra.Command, args []string) error { ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) defer cancel() - kubeClient, err := utils.KubeClient(kubeconfigArgs) + kubeClient, err := utils.KubeClient(kubeconfigArgs, kubeclientOptions) if err != nil { return err } diff --git a/cmd/flux/create_source_helm.go b/cmd/flux/create_source_helm.go index 789ff6e5..d294aace 100644 --- a/cmd/flux/create_source_helm.go +++ b/cmd/flux/create_source_helm.go @@ -144,7 +144,7 @@ func createSourceHelmCmdRun(cmd *cobra.Command, args []string) error { ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) defer cancel() - kubeClient, err := utils.KubeClient(kubeconfigArgs) + kubeClient, err := utils.KubeClient(kubeconfigArgs, kubeclientOptions) if err != nil { return err } diff --git a/cmd/flux/create_tenant.go b/cmd/flux/create_tenant.go index 4ac8eb96..deb62f90 100644 --- a/cmd/flux/create_tenant.go +++ b/cmd/flux/create_tenant.go @@ -156,7 +156,7 @@ func createTenantCmdRun(cmd *cobra.Command, args []string) error { ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) defer cancel() - kubeClient, err := utils.KubeClient(kubeconfigArgs) + kubeClient, err := utils.KubeClient(kubeconfigArgs, kubeclientOptions) if err != nil { return err } diff --git a/cmd/flux/delete.go b/cmd/flux/delete.go index 7facf933..ae808b77 100644 --- a/cmd/flux/delete.go +++ b/cmd/flux/delete.go @@ -60,7 +60,7 @@ func (del deleteCommand) run(cmd *cobra.Command, args []string) error { ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) defer cancel() - kubeClient, err := utils.KubeClient(kubeconfigArgs) + kubeClient, err := utils.KubeClient(kubeconfigArgs, kubeclientOptions) if err != nil { return err } diff --git a/cmd/flux/diff_kustomization.go b/cmd/flux/diff_kustomization.go index 04628ad7..8be50fc1 100644 --- a/cmd/flux/diff_kustomization.go +++ b/cmd/flux/diff_kustomization.go @@ -69,9 +69,9 @@ func diffKsCmdRun(cmd *cobra.Command, args []string) error { var builder *build.Builder var err error if diffKsArgs.progressBar { - builder, err = build.NewBuilder(kubeconfigArgs, name, diffKsArgs.path, build.WithTimeout(rootArgs.timeout), build.WithProgressBar()) + builder, err = build.NewBuilder(kubeconfigArgs, kubeclientOptions, name, diffKsArgs.path, build.WithTimeout(rootArgs.timeout), build.WithProgressBar()) } else { - builder, err = build.NewBuilder(kubeconfigArgs, name, diffKsArgs.path, build.WithTimeout(rootArgs.timeout)) + builder, err = build.NewBuilder(kubeconfigArgs, kubeclientOptions, name, diffKsArgs.path, build.WithTimeout(rootArgs.timeout)) } if err != nil { diff --git a/cmd/flux/diff_kustomization_test.go b/cmd/flux/diff_kustomization_test.go index db309ea8..60e73a6c 100644 --- a/cmd/flux/diff_kustomization_test.go +++ b/cmd/flux/diff_kustomization_test.go @@ -97,7 +97,7 @@ func TestDiffKustomization(t *testing.T) { "fluxns": allocateNamespace("flux-system"), } - b, _ := build.NewBuilder(kubeconfigArgs, "podinfo", "") + b, _ := build.NewBuilder(kubeconfigArgs, kubeclientOptions, "podinfo", "") resourceManager, err := b.Manager() if err != nil { diff --git a/cmd/flux/export.go b/cmd/flux/export.go index e9b3be11..4291ee5f 100644 --- a/cmd/flux/export.go +++ b/cmd/flux/export.go @@ -74,7 +74,7 @@ func (export exportCommand) run(cmd *cobra.Command, args []string) error { ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) defer cancel() - kubeClient, err := utils.KubeClient(kubeconfigArgs) + kubeClient, err := utils.KubeClient(kubeconfigArgs, kubeclientOptions) if err != nil { return err } diff --git a/cmd/flux/export_secret.go b/cmd/flux/export_secret.go index eb7dfb05..1c9e475d 100644 --- a/cmd/flux/export_secret.go +++ b/cmd/flux/export_secret.go @@ -59,7 +59,7 @@ func (export exportWithSecretCommand) run(cmd *cobra.Command, args []string) err ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) defer cancel() - kubeClient, err := utils.KubeClient(kubeconfigArgs) + kubeClient, err := utils.KubeClient(kubeconfigArgs, kubeclientOptions) if err != nil { return err } diff --git a/cmd/flux/get.go b/cmd/flux/get.go index 29fa1c2d..ac099a9f 100644 --- a/cmd/flux/get.go +++ b/cmd/flux/get.go @@ -136,7 +136,7 @@ func (get getCommand) run(cmd *cobra.Command, args []string) error { ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) defer cancel() - kubeClient, err := utils.KubeClient(kubeconfigArgs) + kubeClient, err := utils.KubeClient(kubeconfigArgs, kubeclientOptions) if err != nil { return err } diff --git a/cmd/flux/install.go b/cmd/flux/install.go index 11e6ee77..616e3c95 100644 --- a/cmd/flux/install.go +++ b/cmd/flux/install.go @@ -193,14 +193,14 @@ func installCmdRun(cmd *cobra.Command, args []string) error { return nil } - applyOutput, err := utils.Apply(ctx, kubeconfigArgs, filepath.Join(tmpDir, manifest.Path)) + applyOutput, err := utils.Apply(ctx, kubeconfigArgs, kubeclientOptions, filepath.Join(tmpDir, manifest.Path)) if err != nil { return fmt.Errorf("install failed: %w", err) } fmt.Fprintln(os.Stderr, applyOutput) - kubeConfig, err := utils.KubeConfig(kubeconfigArgs) + kubeConfig, err := utils.KubeConfig(kubeconfigArgs, kubeclientOptions) if err != nil { return fmt.Errorf("install failed: %w", err) } diff --git a/cmd/flux/logs.go b/cmd/flux/logs.go index b16d044d..50cf96af 100644 --- a/cmd/flux/logs.go +++ b/cmd/flux/logs.go @@ -99,7 +99,7 @@ func logsCmdRun(cmd *cobra.Command, args []string) error { ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) defer cancel() - cfg, err := utils.KubeConfig(kubeconfigArgs) + cfg, err := utils.KubeConfig(kubeconfigArgs, kubeclientOptions) if err != nil { return err } diff --git a/cmd/flux/main.go b/cmd/flux/main.go index cf803e5d..9c49b3c5 100644 --- a/cmd/flux/main.go +++ b/cmd/flux/main.go @@ -30,6 +30,8 @@ import ( "k8s.io/cli-runtime/pkg/genericclioptions" _ "k8s.io/client-go/plugin/pkg/client/auth" + runclient "github.com/fluxcd/pkg/runtime/client" + "github.com/fluxcd/flux2/pkg/manifestgen/install" ) @@ -117,6 +119,7 @@ func (r *RequestError) Error() string { var rootArgs = NewRootFlags() var kubeconfigArgs = genericclioptions.NewConfigFlags(false) +var kubeclientOptions = new(runclient.Options) func init() { rootCmd.PersistentFlags().DurationVar(&rootArgs.timeout, "timeout", 5*time.Minute, "timeout for this operation") @@ -134,6 +137,8 @@ func init() { kubeconfigArgs.APIServer = &apiServer rootCmd.PersistentFlags().StringVar(kubeconfigArgs.APIServer, "server", *kubeconfigArgs.APIServer, "The address and port of the Kubernetes API server") + kubeclientOptions.BindFlags(rootCmd.PersistentFlags()) + rootCmd.RegisterFlagCompletionFunc("context", contextsCompletionFunc) rootCmd.RegisterFlagCompletionFunc("namespace", resourceNamesCompletionFunc(corev1.SchemeGroupVersion.WithKind("Namespace"))) diff --git a/cmd/flux/reconcile.go b/cmd/flux/reconcile.go index 4ce8cc2c..d116dddb 100644 --- a/cmd/flux/reconcile.go +++ b/cmd/flux/reconcile.go @@ -85,7 +85,7 @@ func (reconcile reconcileCommand) run(cmd *cobra.Command, args []string) error { ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) defer cancel() - kubeClient, err := utils.KubeClient(kubeconfigArgs) + kubeClient, err := utils.KubeClient(kubeconfigArgs, kubeclientOptions) if err != nil { return err } diff --git a/cmd/flux/reconcile_alertprovider.go b/cmd/flux/reconcile_alertprovider.go index df24a68e..f5399802 100644 --- a/cmd/flux/reconcile_alertprovider.go +++ b/cmd/flux/reconcile_alertprovider.go @@ -54,7 +54,7 @@ func reconcileAlertProviderCmdRun(cmd *cobra.Command, args []string) error { ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) defer cancel() - kubeClient, err := utils.KubeClient(kubeconfigArgs) + kubeClient, err := utils.KubeClient(kubeconfigArgs, kubeclientOptions) if err != nil { return err } diff --git a/cmd/flux/reconcile_receiver.go b/cmd/flux/reconcile_receiver.go index 676aa30a..6f13a35f 100644 --- a/cmd/flux/reconcile_receiver.go +++ b/cmd/flux/reconcile_receiver.go @@ -54,7 +54,7 @@ func reconcileReceiverCmdRun(cmd *cobra.Command, args []string) error { ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) defer cancel() - kubeClient, err := utils.KubeClient(kubeconfigArgs) + kubeClient, err := utils.KubeClient(kubeconfigArgs, kubeclientOptions) if err != nil { return err } diff --git a/cmd/flux/reconcile_with_source.go b/cmd/flux/reconcile_with_source.go index 55361372..0eda5f60 100644 --- a/cmd/flux/reconcile_with_source.go +++ b/cmd/flux/reconcile_with_source.go @@ -35,7 +35,7 @@ func (reconcile reconcileWithSourceCommand) run(cmd *cobra.Command, args []strin ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) defer cancel() - kubeClient, err := utils.KubeClient(kubeconfigArgs) + kubeClient, err := utils.KubeClient(kubeconfigArgs, kubeclientOptions) if err != nil { return err } diff --git a/cmd/flux/resume.go b/cmd/flux/resume.go index 38613eff..368c5e59 100644 --- a/cmd/flux/resume.go +++ b/cmd/flux/resume.go @@ -76,7 +76,7 @@ func (resume resumeCommand) run(cmd *cobra.Command, args []string) error { ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) defer cancel() - kubeClient, err := utils.KubeClient(kubeconfigArgs) + kubeClient, err := utils.KubeClient(kubeconfigArgs, kubeclientOptions) if err != nil { return err } diff --git a/cmd/flux/suspend.go b/cmd/flux/suspend.go index 6b31f5c0..58f7a962 100644 --- a/cmd/flux/suspend.go +++ b/cmd/flux/suspend.go @@ -70,7 +70,7 @@ func (suspend suspendCommand) run(cmd *cobra.Command, args []string) error { ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) defer cancel() - kubeClient, err := utils.KubeClient(kubeconfigArgs) + kubeClient, err := utils.KubeClient(kubeconfigArgs, kubeclientOptions) if err != nil { return err } diff --git a/cmd/flux/trace.go b/cmd/flux/trace.go index 27227f88..926b6016 100644 --- a/cmd/flux/trace.go +++ b/cmd/flux/trace.go @@ -84,7 +84,7 @@ func traceCmdRun(cmd *cobra.Command, args []string) error { ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) defer cancel() - kubeClient, err := utils.KubeClient(kubeconfigArgs) + kubeClient, err := utils.KubeClient(kubeconfigArgs, kubeclientOptions) if err != nil { return err } diff --git a/cmd/flux/tree_kustomization.go b/cmd/flux/tree_kustomization.go index 9cb9ea2b..c471295f 100644 --- a/cmd/flux/tree_kustomization.go +++ b/cmd/flux/tree_kustomization.go @@ -77,7 +77,7 @@ func treeKsCmdRun(cmd *cobra.Command, args []string) error { ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) defer cancel() - kubeClient, err := utils.KubeClient(kubeconfigArgs) + kubeClient, err := utils.KubeClient(kubeconfigArgs, kubeclientOptions) if err != nil { return err } diff --git a/cmd/flux/uninstall.go b/cmd/flux/uninstall.go index c26cbf00..d982ed5b 100644 --- a/cmd/flux/uninstall.go +++ b/cmd/flux/uninstall.go @@ -82,7 +82,7 @@ func uninstallCmdRun(cmd *cobra.Command, args []string) error { ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) defer cancel() - kubeClient, err := utils.KubeClient(kubeconfigArgs) + kubeClient, err := utils.KubeClient(kubeconfigArgs, kubeclientOptions) if err != nil { return err } diff --git a/cmd/flux/version.go b/cmd/flux/version.go index f5da9e29..8d563dc1 100644 --- a/cmd/flux/version.go +++ b/cmd/flux/version.go @@ -74,7 +74,7 @@ func versionCmdRun(cmd *cobra.Command, args []string) error { info["flux"] = rootArgs.defaults.Version if !versionArgs.client { - kubeClient, err := utils.KubeClient(kubeconfigArgs) + kubeClient, err := utils.KubeClient(kubeconfigArgs, kubeclientOptions) if err != nil { return err } diff --git a/go.mod b/go.mod index a6ca1c2f..2d2a4ee4 100644 --- a/go.mod +++ b/go.mod @@ -64,6 +64,8 @@ require ( github.com/PuerkitoBio/purell v1.1.1 // indirect github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect github.com/acomagu/bufpipe v1.0.3 // indirect + github.com/beorn7/perks v1.0.1 // indirect + github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5 // indirect github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e // indirect github.com/cpuguy83/go-md2man/v2 v2.0.1 // indirect @@ -76,6 +78,7 @@ require ( github.com/fluxcd/pkg/apis/acl v0.0.3 // indirect github.com/fluxcd/pkg/apis/kustomize v0.3.2 // indirect github.com/form3tech-oss/jwt-go v3.2.3+incompatible // indirect + github.com/fsnotify/fsnotify v1.5.1 // indirect github.com/fvbommel/sortorder v1.0.1 // indirect github.com/go-errors/errors v1.0.1 // indirect github.com/go-git/gcfg v1.5.0 // indirect @@ -85,6 +88,7 @@ require ( github.com/go-openapi/jsonreference v0.19.5 // indirect github.com/go-openapi/swag v0.19.14 // indirect github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.2 // indirect github.com/gonvenience/neat v1.3.9 // indirect github.com/gonvenience/term v1.0.2 // indirect @@ -113,6 +117,7 @@ require ( github.com/mattn/go-colorable v0.1.12 // indirect github.com/mattn/go-isatty v0.0.14 // indirect github.com/mattn/go-runewidth v0.0.13 // indirect + github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/go-ps v1.0.0 // indirect github.com/mitchellh/go-wordwrap v1.0.0 // indirect @@ -126,6 +131,10 @@ require ( github.com/peterbourgon/diskv v2.0.1+incompatible // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/prometheus/client_golang v1.12.1 // indirect + github.com/prometheus/client_model v0.2.0 // indirect + github.com/prometheus/common v0.32.1 // indirect + github.com/prometheus/procfs v0.7.3 // indirect github.com/rivo/uniseg v0.2.0 // indirect github.com/russross/blackfriday v1.5.2 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect @@ -143,6 +152,7 @@ require ( golang.org/x/sys v0.0.0-20220114195835-da31bd327af9 // indirect golang.org/x/text v0.3.7 // indirect golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac // indirect + gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/protobuf v1.27.1 // indirect gopkg.in/inf.v0 v0.9.1 // indirect diff --git a/go.sum b/go.sum index a89b47c9..d1f3687b 100644 --- a/go.sum +++ b/go.sum @@ -163,7 +163,6 @@ github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/certifi/gocertifi v0.0.0-20191021191039-0944d244cd40/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= github.com/certifi/gocertifi v0.0.0-20200922220541-2c3bb06c6054/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= -github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= @@ -361,6 +360,7 @@ github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go. github.com/envoyproxy/go-control-plane v0.10.1/go.mod h1:AY7fTTXNdv/aJ2O5jwpxAPOWUZ7hQAEvzN5Pf27BkQQ= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v0.6.2/go.mod h1:2t7qjJNvHPx8IjnBOzl9E9/baC+qXE/TeeyBRzgJDws= +github.com/evanphx/json-patch v0.5.2/go.mod h1:ZWS5hhDbVDyob71nXKNL0+PWn6ToqBHMikGIFbs31qQ= github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.11.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH5pOlLGNtQ5lPWQu84= @@ -679,6 +679,7 @@ github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANyt github.com/j-keck/arping v0.0.0-20160618110441-2cf9dc699c56/go.mod h1:ymszkNOg6tORTn+6F6j+Jc8TOr5osrynvN6ivFWZ2GA= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= +github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.0.0-20160803190731-bd40a432e4c7/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= @@ -902,6 +903,7 @@ github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3O github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_golang v1.12.1 h1:ZiaPsmm9uiBeaSMRznKsCDNtPCS0T3JVDGF+06gjBzk= +github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= github.com/prometheus/client_model v0.0.0-20171117100541-99fa1f4be8e5/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= @@ -918,6 +920,7 @@ github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB8 github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= github.com/prometheus/common v0.28.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/common v0.32.1 h1:hWIdL3N2HoUx3B8j3YN9mWor0qhY/NlEKZEaXxuIRh4= +github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/procfs v0.0.0-20180125133057-cb4147076ac7/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= @@ -930,6 +933,7 @@ github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4O github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= +github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= @@ -1101,6 +1105,7 @@ go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= +go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= @@ -1467,6 +1472,7 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gomodules.xyz/jsonpatch/v2 v2.2.0 h1:4pT439QV83L+G9FkcCriY6EkpcK6r6bK+A5FBUMI7qY= +gomodules.xyz/jsonpatch/v2 v2.2.0/go.mod h1:WXp+iVDkoLQqPudfQ9GBlwB2eZ5DKOnjQZCYdOS8GPY= google.golang.org/api v0.0.0-20160322025152-9bf6e6e569ff/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= diff --git a/internal/bootstrap/bootstrap_plain_git.go b/internal/bootstrap/bootstrap_plain_git.go index a5979476..ea4895fd 100644 --- a/internal/bootstrap/bootstrap_plain_git.go +++ b/internal/bootstrap/bootstrap_plain_git.go @@ -36,6 +36,7 @@ import ( "sigs.k8s.io/yaml" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" + runclient "github.com/fluxcd/pkg/runtime/client" "github.com/fluxcd/flux2/internal/bootstrap/git" "github.com/fluxcd/flux2/internal/utils" @@ -59,7 +60,8 @@ type PlainGitBootstrapper struct { gpgPassphrase string gpgKeyID string - restClientGetter genericclioptions.RESTClientGetter + restClientGetter genericclioptions.RESTClientGetter + restClientOptions *runclient.Options postGenerateSecret []PostGenerateSecretFunc @@ -168,12 +170,12 @@ func (b *PlainGitBootstrapper) ReconcileComponents(ctx context.Context, manifest if _, err := os.Stat(kfile); err == nil { // Apply the components and their patches b.logger.Actionf("installing components in %q namespace", options.Namespace) - if _, err := utils.Apply(ctx, b.restClientGetter, kfile); err != nil { + if _, err := utils.Apply(ctx, b.restClientGetter, b.restClientOptions, kfile); err != nil { return err } } else { // Apply the CRDs and controllers - if _, err := utils.Apply(ctx, b.restClientGetter, componentsYAML); err != nil { + if _, err := utils.Apply(ctx, b.restClientGetter, b.restClientOptions, componentsYAML); err != nil { return err } } @@ -318,7 +320,7 @@ func (b *PlainGitBootstrapper) ReconcileSyncConfig(ctx context.Context, options // Apply to cluster b.logger.Actionf("applying sync manifests") - if _, err := utils.Apply(ctx, b.restClientGetter, filepath.Join(b.git.Path(), kusManifests.Path)); err != nil { + if _, err := utils.Apply(ctx, b.restClientGetter, b.restClientOptions, filepath.Join(b.git.Path(), kusManifests.Path)); err != nil { return err } @@ -351,7 +353,7 @@ func (b *PlainGitBootstrapper) ReportKustomizationHealth(ctx context.Context, op } func (b *PlainGitBootstrapper) ReportComponentsHealth(ctx context.Context, install install.Options, timeout time.Duration) error { - cfg, err := utils.KubeConfig(b.restClientGetter) + cfg, err := utils.KubeConfig(b.restClientGetter, b.restClientOptions) if err != nil { return err } diff --git a/internal/bootstrap/options.go b/internal/bootstrap/options.go index 6d79055c..2d1f69b7 100644 --- a/internal/bootstrap/options.go +++ b/internal/bootstrap/options.go @@ -17,9 +17,12 @@ limitations under the License. package bootstrap import ( + "k8s.io/cli-runtime/pkg/genericclioptions" + + runclient "github.com/fluxcd/pkg/runtime/client" + "github.com/fluxcd/flux2/internal/bootstrap/git" "github.com/fluxcd/flux2/pkg/log" - "k8s.io/cli-runtime/pkg/genericclioptions" ) type Option interface { @@ -91,18 +94,21 @@ func (o commitMessageAppendixOption) applyGitProvider(b *GitProviderBootstrapper o.applyGit(b.PlainGitBootstrapper) } -func WithKubeconfig(rcg genericclioptions.RESTClientGetter) Option { +func WithKubeconfig(rcg genericclioptions.RESTClientGetter, opts *runclient.Options) Option { return kubeconfigOption{ - rcg: rcg, + rcg: rcg, + opts: opts, } } type kubeconfigOption struct { - rcg genericclioptions.RESTClientGetter + rcg genericclioptions.RESTClientGetter + opts *runclient.Options } func (o kubeconfigOption) applyGit(b *PlainGitBootstrapper) { b.restClientGetter = o.rcg + b.restClientOptions = o.opts } func (o kubeconfigOption) applyGitProvider(b *GitProviderBootstrapper) { diff --git a/internal/build/build.go b/internal/build/build.go index a6fbf696..3eb0844c 100644 --- a/internal/build/build.go +++ b/internal/build/build.go @@ -25,9 +25,6 @@ import ( "sync" "time" - "github.com/fluxcd/flux2/internal/utils" - kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" - "github.com/fluxcd/pkg/kustomize" "github.com/theckman/yacspin" "k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" @@ -39,6 +36,12 @@ import ( "sigs.k8s.io/kustomize/api/resource" "sigs.k8s.io/kustomize/kyaml/filesys" "sigs.k8s.io/kustomize/kyaml/yaml" + + kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" + "github.com/fluxcd/pkg/kustomize" + runclient "github.com/fluxcd/pkg/runtime/client" + + "github.com/fluxcd/flux2/internal/utils" ) const ( @@ -103,8 +106,8 @@ func WithProgressBar() BuilderOptionFunc { // NewBuilder returns a new Builder // to dp : create functional options -func NewBuilder(rcg *genericclioptions.ConfigFlags, name, resources string, opts ...BuilderOptionFunc) (*Builder, error) { - kubeClient, err := utils.KubeClient(rcg) +func NewBuilder(rcg *genericclioptions.ConfigFlags, clientOpts *runclient.Options, name, resources string, opts ...BuilderOptionFunc) (*Builder, error) { + kubeClient, err := utils.KubeClient(rcg, clientOpts) if err != nil { return nil, err } diff --git a/internal/utils/apply.go b/internal/utils/apply.go index 087c0e13..95badc1f 100644 --- a/internal/utils/apply.go +++ b/internal/utils/apply.go @@ -25,19 +25,21 @@ import ( "path/filepath" "time" - "github.com/fluxcd/pkg/ssa" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/cli-runtime/pkg/genericclioptions" "sigs.k8s.io/cli-utils/pkg/kstatus/polling" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/kustomize/api/konfig" + runclient "github.com/fluxcd/pkg/runtime/client" + "github.com/fluxcd/pkg/ssa" + "github.com/fluxcd/flux2/pkg/manifestgen/kustomization" ) // Apply is the equivalent of 'kubectl apply --server-side -f'. // If the given manifest is a kustomization.yaml, then apply performs the equivalent of 'kubectl apply --server-side -k'. -func Apply(ctx context.Context, rcg genericclioptions.RESTClientGetter, manifestPath string) (string, error) { +func Apply(ctx context.Context, rcg genericclioptions.RESTClientGetter, opts *runclient.Options, manifestPath string) (string, error) { objs, err := readObjects(manifestPath) if err != nil { return "", err @@ -68,19 +70,19 @@ func Apply(ctx context.Context, rcg genericclioptions.RESTClientGetter, manifest } if len(stageOne) > 0 { - cs, err := applySet(ctx, rcg, stageOne) + cs, err := applySet(ctx, rcg, opts, stageOne) if err != nil { return "", err } changeSet.Append(cs.Entries) } - if err := waitForSet(rcg, changeSet); err != nil { + if err := waitForSet(rcg, opts, changeSet); err != nil { return "", err } if len(stageTwo) > 0 { - cs, err := applySet(ctx, rcg, stageTwo) + cs, err := applySet(ctx, rcg, opts, stageTwo) if err != nil { return "", err } @@ -112,8 +114,8 @@ func readObjects(manifestPath string) ([]*unstructured.Unstructured, error) { return ssa.ReadObjects(bufio.NewReader(ms)) } -func newManager(rcg genericclioptions.RESTClientGetter) (*ssa.ResourceManager, error) { - cfg, err := KubeConfig(rcg) +func newManager(rcg genericclioptions.RESTClientGetter, opts *runclient.Options) (*ssa.ResourceManager, error) { + cfg, err := KubeConfig(rcg, opts) if err != nil { return nil, err } @@ -134,8 +136,8 @@ func newManager(rcg genericclioptions.RESTClientGetter) (*ssa.ResourceManager, e } -func applySet(ctx context.Context, rcg genericclioptions.RESTClientGetter, objects []*unstructured.Unstructured) (*ssa.ChangeSet, error) { - man, err := newManager(rcg) +func applySet(ctx context.Context, rcg genericclioptions.RESTClientGetter, opts *runclient.Options, objects []*unstructured.Unstructured) (*ssa.ChangeSet, error) { + man, err := newManager(rcg, opts) if err != nil { return nil, err } @@ -143,8 +145,8 @@ func applySet(ctx context.Context, rcg genericclioptions.RESTClientGetter, objec return man.ApplyAll(ctx, objects, ssa.DefaultApplyOptions()) } -func waitForSet(rcg genericclioptions.RESTClientGetter, changeSet *ssa.ChangeSet) error { - man, err := newManager(rcg) +func waitForSet(rcg genericclioptions.RESTClientGetter, opts *runclient.Options, changeSet *ssa.ChangeSet) error { + man, err := newManager(rcg, opts) if err != nil { return err } diff --git a/internal/utils/utils.go b/internal/utils/utils.go index cc24354d..c41b2f4e 100644 --- a/internal/utils/utils.go +++ b/internal/utils/utils.go @@ -47,6 +47,7 @@ import ( kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" notificationv1 "github.com/fluxcd/notification-controller/api/v1beta1" "github.com/fluxcd/pkg/apis/meta" + runclient "github.com/fluxcd/pkg/runtime/client" "github.com/fluxcd/pkg/version" sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" @@ -106,15 +107,15 @@ func ExecKubectlCommand(ctx context.Context, mode ExecMode, kubeConfigPath strin return "", nil } -func KubeConfig(rcg genericclioptions.RESTClientGetter) (*rest.Config, error) { +func KubeConfig(rcg genericclioptions.RESTClientGetter, opts *runclient.Options) (*rest.Config, error) { cfg, err := rcg.ToRESTConfig() if err != nil { return nil, fmt.Errorf("kubernetes configuration load failed: %w", err) } // avoid throttling request when some Flux CRDs are not registered - cfg.QPS = 50 - cfg.Burst = 100 + cfg.QPS = opts.QPS + cfg.Burst = opts.Burst return cfg, nil } @@ -137,12 +138,15 @@ func NewScheme() *apiruntime.Scheme { return scheme } -func KubeClient(rcg genericclioptions.RESTClientGetter) (client.WithWatch, error) { +func KubeClient(rcg genericclioptions.RESTClientGetter, opts *runclient.Options) (client.WithWatch, error) { cfg, err := rcg.ToRESTConfig() if err != nil { return nil, err } + cfg.QPS = opts.QPS + cfg.Burst = opts.Burst + scheme := NewScheme() kubeClient, err := client.NewWithWatch(cfg, client.Options{ Scheme: scheme, From 3f652f8b0595b898eae5df14a0ad0e284d724641 Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Fri, 25 Mar 2022 17:50:26 +0000 Subject: [PATCH 064/818] Update toolkit components - helm-controller to v0.18.2 https://github.com/fluxcd/helm-controller/blob/v0.18.2/CHANGELOG.md - kustomize-controller to v0.22.2 https://github.com/fluxcd/kustomize-controller/blob/v0.22.2/CHANGELOG.md - source-controller to v0.22.3 https://github.com/fluxcd/source-controller/blob/v0.22.3/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 6 +++--- go.sum | 12 ++++++------ manifests/bases/helm-controller/kustomization.yaml | 4 ++-- .../bases/kustomize-controller/kustomization.yaml | 4 ++-- manifests/bases/source-controller/kustomization.yaml | 4 ++-- manifests/crds/kustomization.yaml | 6 +++--- 6 files changed, 18 insertions(+), 18 deletions(-) diff --git a/go.mod b/go.mod index 2d2a4ee4..dd64bce3 100644 --- a/go.mod +++ b/go.mod @@ -7,10 +7,10 @@ require ( github.com/ProtonMail/go-crypto v0.0.0-20220113124808-70ae35bab23f github.com/cyphar/filepath-securejoin v0.2.3 github.com/fluxcd/go-git-providers v0.5.4 - github.com/fluxcd/helm-controller/api v0.18.1 + github.com/fluxcd/helm-controller/api v0.18.2 github.com/fluxcd/image-automation-controller/api v0.21.1 github.com/fluxcd/image-reflector-controller/api v0.17.1 - github.com/fluxcd/kustomize-controller/api v0.22.1 + github.com/fluxcd/kustomize-controller/api v0.22.2 github.com/fluxcd/notification-controller/api v0.23.1 github.com/fluxcd/pkg/apis/meta v0.12.1 github.com/fluxcd/pkg/kustomize v0.0.3 @@ -19,7 +19,7 @@ require ( github.com/fluxcd/pkg/ssh v0.3.2 github.com/fluxcd/pkg/untar v0.1.0 github.com/fluxcd/pkg/version v0.1.0 - github.com/fluxcd/source-controller/api v0.22.2 + github.com/fluxcd/source-controller/api v0.22.3 github.com/go-git/go-git/v5 v5.4.2 github.com/gonvenience/bunt v1.3.3 github.com/gonvenience/ytbx v1.4.4 diff --git a/go.sum b/go.sum index d1f3687b..f2f75b0c 100644 --- a/go.sum +++ b/go.sum @@ -375,14 +375,14 @@ github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYF github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fluxcd/go-git-providers v0.5.4 h1:MnByjsmXa8rMt2hTmhmtbocq7YIsTlwZKrj9lAsob4Q= github.com/fluxcd/go-git-providers v0.5.4/go.mod h1:4jTHTmSx3rFGnG78KUVgFYeG6vWFnKwUSr2mi31tvp8= -github.com/fluxcd/helm-controller/api v0.18.1 h1:1DEHG56g6F2u6jVpxlaJyMtSujFVOiOrUNYLZ2l7BE0= -github.com/fluxcd/helm-controller/api v0.18.1/go.mod h1:+P3I9VV/4IMryjj9BIGtdZnxdCQfBXExWTv8Z9DF33o= +github.com/fluxcd/helm-controller/api v0.18.2 h1:zXyu9q4B/J7ouOVl4nyxYHPVwhAs3bwWa4lgP7SQmfo= +github.com/fluxcd/helm-controller/api v0.18.2/go.mod h1:+P3I9VV/4IMryjj9BIGtdZnxdCQfBXExWTv8Z9DF33o= github.com/fluxcd/image-automation-controller/api v0.21.1 h1:qwcIOsjHIURMiUICoBfSaY8P7PmSsnLUMFkThr3F5HY= github.com/fluxcd/image-automation-controller/api v0.21.1/go.mod h1:QWVMs4MElbyYHCwSEw5D6/aecbxcSwS4ronGWlPPWC4= github.com/fluxcd/image-reflector-controller/api v0.17.1 h1:0eWE26PmCo3ZQBnDkNA6wiHhAEsTtUG4oz59enqIzsQ= github.com/fluxcd/image-reflector-controller/api v0.17.1/go.mod h1:Lg8A+MUcke0Orp6C6UQkf9I3pc8M/B3XS3TOI+YxVBY= -github.com/fluxcd/kustomize-controller/api v0.22.1 h1:PUO1DQsZjnskOlHEwUjUo6Hxd9hjGnocDhiaVrwp28w= -github.com/fluxcd/kustomize-controller/api v0.22.1/go.mod h1:Kq2kKnU6Z9CiZFLpHTMSLvpgWiT/e03NRb1wc8W+24E= +github.com/fluxcd/kustomize-controller/api v0.22.2 h1:7zQDkC6gFE1mNallS4WfVCBEJYc9Y32HZ7oi8OnSnw0= +github.com/fluxcd/kustomize-controller/api v0.22.2/go.mod h1:Kq2kKnU6Z9CiZFLpHTMSLvpgWiT/e03NRb1wc8W+24E= github.com/fluxcd/notification-controller/api v0.23.1 h1:Bef4+AbuNXS+7M5bWjOKXBDQT5OU1xVM9VbZWFYiRp0= github.com/fluxcd/notification-controller/api v0.23.1/go.mod h1:0QFnW7CrYl5ItHNPpstxU42Pmb5/Qepx8FFjVxcZqIk= github.com/fluxcd/pkg/apis/acl v0.0.3 h1:Lw0ZHdpnO4G7Zy9KjrzwwBmDZQuy4qEjaU/RvA6k1lc= @@ -403,8 +403,8 @@ github.com/fluxcd/pkg/untar v0.1.0 h1:k97V/xV5hFrAkIkVPuv5AVhyxh1ZzzAKba/lbDfGo6 github.com/fluxcd/pkg/untar v0.1.0/go.mod h1:aGswNyzB1mlz/T/kpOS58mITBMxMKc9tlJBH037A2HY= github.com/fluxcd/pkg/version v0.1.0 h1:v+SmCanmCB5Tj2Cx9TXlj+kNRfPGbAvirkeqsp7ZEAQ= github.com/fluxcd/pkg/version v0.1.0/go.mod h1:V7Z/w8dxLQzv0FHqa5ox5TeyOd2zOd49EeuWFgnwyj4= -github.com/fluxcd/source-controller/api v0.22.2 h1:1TSCa4qLKDstPpXQoaz5xiLER2y8xflpCXKPxYPFGPY= -github.com/fluxcd/source-controller/api v0.22.2/go.mod h1:Vb13q9Pq+1IW/sJUZn/RSb7IU5WT86Er6uCFPCFm9L4= +github.com/fluxcd/source-controller/api v0.22.3 h1:HnpSnCtIytwSGSz2qu+GJwyZRmD5UXZL5oOQapiQOtk= +github.com/fluxcd/source-controller/api v0.22.3/go.mod h1:Vb13q9Pq+1IW/sJUZn/RSb7IU5WT86Er6uCFPCFm9L4= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/form3tech-oss/jwt-go v3.2.3+incompatible h1:7ZaBxOI7TMoYBfyA3cQHErNNyAWIKUMIwqxEtgHOs5c= diff --git a/manifests/bases/helm-controller/kustomization.yaml b/manifests/bases/helm-controller/kustomization.yaml index dea138c6..fe70492a 100644 --- a/manifests/bases/helm-controller/kustomization.yaml +++ b/manifests/bases/helm-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/helm-controller/releases/download/v0.18.1/helm-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.18.1/helm-controller.deployment.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.18.2/helm-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.18.2/helm-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/kustomize-controller/kustomization.yaml b/manifests/bases/kustomize-controller/kustomization.yaml index ca4311b3..28446a79 100644 --- a/manifests/bases/kustomize-controller/kustomization.yaml +++ b/manifests/bases/kustomize-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.22.1/kustomize-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.22.1/kustomize-controller.deployment.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.22.2/kustomize-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.22.2/kustomize-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index 9fbcc89b..4f00de43 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.22.2/source-controller.crds.yaml -- https://github.com/fluxcd/source-controller/releases/download/v0.22.2/source-controller.deployment.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.22.3/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.22.3/source-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index 8c7c86df..f2bce951 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -1,9 +1,9 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.22.2/source-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.22.1/kustomize-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.18.1/helm-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.22.3/source-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.22.2/kustomize-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.18.2/helm-controller.crds.yaml - https://github.com/fluxcd/notification-controller/releases/download/v0.23.1/notification-controller.crds.yaml - https://github.com/fluxcd/image-reflector-controller/releases/download/v0.17.1/image-reflector-controller.crds.yaml - https://github.com/fluxcd/image-automation-controller/releases/download/v0.21.1/image-automation-controller.crds.yaml From 97a53b1536e1cbcf41fbb40b15c39b0b489085bb Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Mon, 28 Mar 2022 16:52:13 +0000 Subject: [PATCH 065/818] Update toolkit components - source-controller to v0.22.4 https://github.com/fluxcd/source-controller/blob/v0.22.4/CHANGELOG.md - image-automation-controller to v0.21.2 https://github.com/fluxcd/image-automation-controller/blob/v0.21.2/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 4 ++-- go.sum | 8 ++++---- .../bases/image-automation-controller/kustomization.yaml | 4 ++-- manifests/bases/source-controller/kustomization.yaml | 4 ++-- manifests/crds/kustomization.yaml | 4 ++-- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/go.mod b/go.mod index dd64bce3..c82d21a0 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/cyphar/filepath-securejoin v0.2.3 github.com/fluxcd/go-git-providers v0.5.4 github.com/fluxcd/helm-controller/api v0.18.2 - github.com/fluxcd/image-automation-controller/api v0.21.1 + github.com/fluxcd/image-automation-controller/api v0.21.2 github.com/fluxcd/image-reflector-controller/api v0.17.1 github.com/fluxcd/kustomize-controller/api v0.22.2 github.com/fluxcd/notification-controller/api v0.23.1 @@ -19,7 +19,7 @@ require ( github.com/fluxcd/pkg/ssh v0.3.2 github.com/fluxcd/pkg/untar v0.1.0 github.com/fluxcd/pkg/version v0.1.0 - github.com/fluxcd/source-controller/api v0.22.3 + github.com/fluxcd/source-controller/api v0.22.4 github.com/go-git/go-git/v5 v5.4.2 github.com/gonvenience/bunt v1.3.3 github.com/gonvenience/ytbx v1.4.4 diff --git a/go.sum b/go.sum index f2f75b0c..ef80bf36 100644 --- a/go.sum +++ b/go.sum @@ -377,8 +377,8 @@ github.com/fluxcd/go-git-providers v0.5.4 h1:MnByjsmXa8rMt2hTmhmtbocq7YIsTlwZKrj github.com/fluxcd/go-git-providers v0.5.4/go.mod h1:4jTHTmSx3rFGnG78KUVgFYeG6vWFnKwUSr2mi31tvp8= github.com/fluxcd/helm-controller/api v0.18.2 h1:zXyu9q4B/J7ouOVl4nyxYHPVwhAs3bwWa4lgP7SQmfo= github.com/fluxcd/helm-controller/api v0.18.2/go.mod h1:+P3I9VV/4IMryjj9BIGtdZnxdCQfBXExWTv8Z9DF33o= -github.com/fluxcd/image-automation-controller/api v0.21.1 h1:qwcIOsjHIURMiUICoBfSaY8P7PmSsnLUMFkThr3F5HY= -github.com/fluxcd/image-automation-controller/api v0.21.1/go.mod h1:QWVMs4MElbyYHCwSEw5D6/aecbxcSwS4ronGWlPPWC4= +github.com/fluxcd/image-automation-controller/api v0.21.2 h1:3xYlIgO5UX3fyuloP1REp6qnKinnCy/i74BUmQtWYaE= +github.com/fluxcd/image-automation-controller/api v0.21.2/go.mod h1:QWVMs4MElbyYHCwSEw5D6/aecbxcSwS4ronGWlPPWC4= github.com/fluxcd/image-reflector-controller/api v0.17.1 h1:0eWE26PmCo3ZQBnDkNA6wiHhAEsTtUG4oz59enqIzsQ= github.com/fluxcd/image-reflector-controller/api v0.17.1/go.mod h1:Lg8A+MUcke0Orp6C6UQkf9I3pc8M/B3XS3TOI+YxVBY= github.com/fluxcd/kustomize-controller/api v0.22.2 h1:7zQDkC6gFE1mNallS4WfVCBEJYc9Y32HZ7oi8OnSnw0= @@ -403,8 +403,8 @@ github.com/fluxcd/pkg/untar v0.1.0 h1:k97V/xV5hFrAkIkVPuv5AVhyxh1ZzzAKba/lbDfGo6 github.com/fluxcd/pkg/untar v0.1.0/go.mod h1:aGswNyzB1mlz/T/kpOS58mITBMxMKc9tlJBH037A2HY= github.com/fluxcd/pkg/version v0.1.0 h1:v+SmCanmCB5Tj2Cx9TXlj+kNRfPGbAvirkeqsp7ZEAQ= github.com/fluxcd/pkg/version v0.1.0/go.mod h1:V7Z/w8dxLQzv0FHqa5ox5TeyOd2zOd49EeuWFgnwyj4= -github.com/fluxcd/source-controller/api v0.22.3 h1:HnpSnCtIytwSGSz2qu+GJwyZRmD5UXZL5oOQapiQOtk= -github.com/fluxcd/source-controller/api v0.22.3/go.mod h1:Vb13q9Pq+1IW/sJUZn/RSb7IU5WT86Er6uCFPCFm9L4= +github.com/fluxcd/source-controller/api v0.22.4 h1:PJuZg6/9UN0GLhe2Mt8DJBNuC/t1BHvZAg79k7xPDcQ= +github.com/fluxcd/source-controller/api v0.22.4/go.mod h1:Vb13q9Pq+1IW/sJUZn/RSb7IU5WT86Er6uCFPCFm9L4= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/form3tech-oss/jwt-go v3.2.3+incompatible h1:7ZaBxOI7TMoYBfyA3cQHErNNyAWIKUMIwqxEtgHOs5c= diff --git a/manifests/bases/image-automation-controller/kustomization.yaml b/manifests/bases/image-automation-controller/kustomization.yaml index 3b1a10e3..1744dc70 100644 --- a/manifests/bases/image-automation-controller/kustomization.yaml +++ b/manifests/bases/image-automation-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.21.1/image-automation-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.21.1/image-automation-controller.deployment.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.21.2/image-automation-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.21.2/image-automation-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index 4f00de43..1f552f8c 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.22.3/source-controller.crds.yaml -- https://github.com/fluxcd/source-controller/releases/download/v0.22.3/source-controller.deployment.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.22.4/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.22.4/source-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index f2bce951..9dd1403e 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -1,9 +1,9 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.22.3/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.22.4/source-controller.crds.yaml - https://github.com/fluxcd/kustomize-controller/releases/download/v0.22.2/kustomize-controller.crds.yaml - https://github.com/fluxcd/helm-controller/releases/download/v0.18.2/helm-controller.crds.yaml - https://github.com/fluxcd/notification-controller/releases/download/v0.23.1/notification-controller.crds.yaml - https://github.com/fluxcd/image-reflector-controller/releases/download/v0.17.1/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.21.1/image-automation-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.21.2/image-automation-controller.crds.yaml From 4b7042cc46832156bb0c893b2e8b96579d09963b Mon Sep 17 00:00:00 2001 From: jooooel Date: Sun, 13 Mar 2022 20:46:51 +0100 Subject: [PATCH 066/818] Add coreutils (for Mac OS) as a dependency Signed-off-by: jooooel --- CONTRIBUTING.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 58ce5039..c2886fd7 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -70,6 +70,7 @@ Prerequisites: * go >= 1.17 * kubectl >= 1.20 * kustomize >= 4.4 +* coreutils (on Mac OS) Install the [controller-runtime/envtest](https://github.com/kubernetes-sigs/controller-runtime/tree/master/tools/setup-envtest) binaries with: From 9e2a4f329b3b4e2f7a5d8c4205e73d766c4a3e49 Mon Sep 17 00:00:00 2001 From: Soule BA Date: Mon, 28 Mar 2022 18:04:57 +0200 Subject: [PATCH 067/818] Update homeport/Dyff to v1.5.2 If implmented, this will provide an inline diff for configmaps with the command `flux diff``. Signed-off-by: Soule BA --- go.mod | 10 +++++----- go.sum | 30 +++++++++++------------------- 2 files changed, 16 insertions(+), 24 deletions(-) diff --git a/go.mod b/go.mod index c82d21a0..9993afb5 100644 --- a/go.mod +++ b/go.mod @@ -26,7 +26,7 @@ require ( github.com/google/go-cmp v0.5.7 github.com/google/go-containerregistry v0.8.0 github.com/hashicorp/go-multierror v1.1.1 - github.com/homeport/dyff v1.5.1 + github.com/homeport/dyff v1.5.2 github.com/lucasb-eyer/go-colorful v1.2.0 github.com/manifoldco/promptui v0.9.0 github.com/mattn/go-shellwords v1.0.12 @@ -90,7 +90,7 @@ require ( github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.2 // indirect - github.com/gonvenience/neat v1.3.9 // indirect + github.com/gonvenience/neat v1.3.10 // indirect github.com/gonvenience/term v1.0.2 // indirect github.com/gonvenience/text v1.0.7 // indirect github.com/gonvenience/wrap v1.1.1 // indirect @@ -127,7 +127,7 @@ require ( github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 // indirect - github.com/onsi/gomega v1.18.1 // indirect + github.com/onsi/gomega v1.19.0 // indirect github.com/peterbourgon/diskv v2.0.1+incompatible // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect @@ -146,10 +146,10 @@ require ( github.com/xanzy/ssh-agent v0.3.0 // indirect github.com/xlab/treeprint v0.0.0-20181112141820-a009c3971eca // indirect go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 // indirect - golang.org/x/net v0.0.0-20220121210141-e204ce36a2ba // indirect + golang.org/x/net v0.0.0-20220325170049-de3da57026de // indirect golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 // indirect golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect - golang.org/x/sys v0.0.0-20220114195835-da31bd327af9 // indirect + golang.org/x/sys v0.0.0-20220325203850-36772127a21f // indirect golang.org/x/text v0.3.7 // indirect golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect diff --git a/go.sum b/go.sum index ef80bf36..2961e5d0 100644 --- a/go.sum +++ b/go.sum @@ -466,7 +466,6 @@ github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh github.com/go-openapi/swag v0.19.14 h1:gm3vOOXfiuw5i9p5N9xJvfjvuofpyvLA9Wr6QfK5Fng= github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/godbus/dbus v0.0.0-20151105175453-c7fdd8b5cd55/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= github.com/godbus/dbus v0.0.0-20180201030542-885f9cc04c9c/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= @@ -521,8 +520,8 @@ github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEW github.com/golangplus/testing v0.0.0-20180327235837-af21d9c3145e/go.mod h1:0AA//k/eakGydO4jKRoRL2j92ZKSzTgj9tclaCrvXHk= github.com/gonvenience/bunt v1.3.3 h1:a751qSbJIgWGbazGYr9hyuudOg7wMHh2m4JjE3tfURE= github.com/gonvenience/bunt v1.3.3/go.mod h1:XjlODZ8sTL9jQs9c4Kj1ZBTrHSsbUGdoRy7ROCtw8nU= -github.com/gonvenience/neat v1.3.9 h1:c3nbMP8ysGtaekkkY3Veg2OPa76fK8r45ontZdSPUw0= -github.com/gonvenience/neat v1.3.9/go.mod h1:UcFJPKGG0rxx1Kah6kavTms9Rz2Wr4ApT/WpOcX6NFA= +github.com/gonvenience/neat v1.3.10 h1:gHrVkQAvbUsZgnpEglPwsAJLPqSFQxOgfbB3FWLhmUo= +github.com/gonvenience/neat v1.3.10/go.mod h1:SenKN3l5LkhNYKXTq6Ibvq64wE9O2rxir+YEtqdi4jc= github.com/gonvenience/term v1.0.2 h1:qKa2RydbWIrabGjR/fegJwpW5m+JvUwFL8mLhHzDXn0= github.com/gonvenience/term v1.0.2/go.mod h1:wThTR+3MzWtWn7XGVW6qQ65uaVf8GHED98KmwpuEQeo= github.com/gonvenience/text v1.0.7 h1:YmIqmgTwxnACYCG59DykgMbomwteYyNhAmEUEJtPl14= @@ -576,7 +575,6 @@ github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= @@ -662,8 +660,8 @@ github.com/hashicorp/memberlist v0.3.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOn github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= github.com/hashicorp/serf v0.9.6/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= -github.com/homeport/dyff v1.5.1 h1:SSMEQXQ71Iw2NUHbtPANZu7E2jlFkuiydg9HTdwqXso= -github.com/homeport/dyff v1.5.1/go.mod h1:o84/LlrvFeX6J1b4YxcNxlfhbiYbT0Hekt9kCLtgYZ4= +github.com/homeport/dyff v1.5.2 h1:68iA503cOu5dEnZr2HDfdVbZAmzrBsNhdFbIUhzz2/U= +github.com/homeport/dyff v1.5.2/go.mod h1:tTVEEcqIS3XPocLfR4rdgQYV1VlKMuM5R3Dx4Q0LMmU= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= @@ -823,7 +821,6 @@ github.com/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= -github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/olekukonko/tablewriter v0.0.4/go.mod h1:zq6QwlOf5SlnkVbMSr5EoBv3636FWnp+qbPhuoO21uA= @@ -837,19 +834,16 @@ github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+ github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= -github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= -github.com/onsi/ginkgo/v2 v2.0.0 h1:CcuG/HvWNkkaqCUpJifQY8z7qEMBJya6aLPx6ftGyjQ= -github.com/onsi/ginkgo/v2 v2.0.0/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= +github.com/onsi/ginkgo/v2 v2.1.3 h1:e/3Cwtogj0HA+25nMP1jCMDIf8RtRYbGwGGuBIFztkc= github.com/onsi/gomega v0.0.0-20151007035656-2152b45fa28a/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDsH8xc= -github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= -github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE= -github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= +github.com/onsi/gomega v1.19.0 h1:4ieX6qQjPP/BfC3mpsAtIGGlxTWPeA3Inl/7DtXw1tw= +github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= github.com/opencontainers/go-digest v0.0.0-20170106003457-a6d0ee40d420/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= @@ -1224,7 +1218,6 @@ golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLd golang.org/x/net v0.0.0-20210326060303-6b1517762897/go.mod h1:uSPa2vr4CLtc/ILN5odXGNXS6mhrKVzTaCXzk9m6W3k= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= @@ -1233,8 +1226,8 @@ golang.org/x/net v0.0.0-20210825183410-e898025ed96a/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211209124913-491a49abca63/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211216030914-fe4d6282115f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220121210141-e204ce36a2ba h1:6u6sik+bn/y7vILcYkK3iwTBWN7WtBvB0+SZswQnbf8= -golang.org/x/net v0.0.0-20220121210141-e204ce36a2ba/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220325170049-de3da57026de h1:pZB1TWnKi+o4bENlbzAgLrEbY4RMYmUIRobMcSmfeYc= +golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= 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= @@ -1344,7 +1337,6 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201202213521-69691e467435/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1377,8 +1369,9 @@ golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211205182925-97ca703d548d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220114195835-da31bd327af9 h1:XfKQ4OlFl8okEOr5UvAqFRVj8pY/4yfcXrddB8qAbU0= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220325203850-36772127a21f h1:TrmogKRsSOxRMJbLYGrB4SBbW+LJcEllYBLME5Zk5pU= +golang.org/x/sys v0.0.0-20220325203850-36772127a21f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY= @@ -1455,7 +1448,6 @@ golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82u golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= From 24188e58ffaf1146b6b2250599af65e45d6e34a5 Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Wed, 30 Mar 2022 17:39:09 +0000 Subject: [PATCH 068/818] Update toolkit components - kustomize-controller to v0.22.3 https://github.com/fluxcd/kustomize-controller/blob/v0.22.3/CHANGELOG.md - source-controller to v0.22.5 https://github.com/fluxcd/source-controller/blob/v0.22.5/CHANGELOG.md - notification-controller to v0.23.2 https://github.com/fluxcd/notification-controller/blob/v0.23.2/CHANGELOG.md - image-automation-controller to v0.21.3 https://github.com/fluxcd/image-automation-controller/blob/v0.21.3/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 8 ++++---- go.sum | 16 ++++++++-------- .../kustomization.yaml | 4 ++-- .../kustomize-controller/kustomization.yaml | 4 ++-- .../notification-controller/kustomization.yaml | 4 ++-- .../bases/source-controller/kustomization.yaml | 4 ++-- manifests/crds/kustomization.yaml | 8 ++++---- 7 files changed, 24 insertions(+), 24 deletions(-) diff --git a/go.mod b/go.mod index 9993afb5..b3e04463 100644 --- a/go.mod +++ b/go.mod @@ -8,10 +8,10 @@ require ( github.com/cyphar/filepath-securejoin v0.2.3 github.com/fluxcd/go-git-providers v0.5.4 github.com/fluxcd/helm-controller/api v0.18.2 - github.com/fluxcd/image-automation-controller/api v0.21.2 + github.com/fluxcd/image-automation-controller/api v0.21.3 github.com/fluxcd/image-reflector-controller/api v0.17.1 - github.com/fluxcd/kustomize-controller/api v0.22.2 - github.com/fluxcd/notification-controller/api v0.23.1 + github.com/fluxcd/kustomize-controller/api v0.22.3 + github.com/fluxcd/notification-controller/api v0.23.2 github.com/fluxcd/pkg/apis/meta v0.12.1 github.com/fluxcd/pkg/kustomize v0.0.3 github.com/fluxcd/pkg/runtime v0.13.2 @@ -19,7 +19,7 @@ require ( github.com/fluxcd/pkg/ssh v0.3.2 github.com/fluxcd/pkg/untar v0.1.0 github.com/fluxcd/pkg/version v0.1.0 - github.com/fluxcd/source-controller/api v0.22.4 + github.com/fluxcd/source-controller/api v0.22.5 github.com/go-git/go-git/v5 v5.4.2 github.com/gonvenience/bunt v1.3.3 github.com/gonvenience/ytbx v1.4.4 diff --git a/go.sum b/go.sum index 2961e5d0..27631410 100644 --- a/go.sum +++ b/go.sum @@ -377,14 +377,14 @@ github.com/fluxcd/go-git-providers v0.5.4 h1:MnByjsmXa8rMt2hTmhmtbocq7YIsTlwZKrj github.com/fluxcd/go-git-providers v0.5.4/go.mod h1:4jTHTmSx3rFGnG78KUVgFYeG6vWFnKwUSr2mi31tvp8= github.com/fluxcd/helm-controller/api v0.18.2 h1:zXyu9q4B/J7ouOVl4nyxYHPVwhAs3bwWa4lgP7SQmfo= github.com/fluxcd/helm-controller/api v0.18.2/go.mod h1:+P3I9VV/4IMryjj9BIGtdZnxdCQfBXExWTv8Z9DF33o= -github.com/fluxcd/image-automation-controller/api v0.21.2 h1:3xYlIgO5UX3fyuloP1REp6qnKinnCy/i74BUmQtWYaE= -github.com/fluxcd/image-automation-controller/api v0.21.2/go.mod h1:QWVMs4MElbyYHCwSEw5D6/aecbxcSwS4ronGWlPPWC4= +github.com/fluxcd/image-automation-controller/api v0.21.3 h1:hKqmc03oEWV8ACmO5NCYfamfl+jxEH0QxUZzrGyLcFI= +github.com/fluxcd/image-automation-controller/api v0.21.3/go.mod h1:zyo56fYxvAKQLHXCtEPiFBWXZAe949vAZruNwS+4K8w= github.com/fluxcd/image-reflector-controller/api v0.17.1 h1:0eWE26PmCo3ZQBnDkNA6wiHhAEsTtUG4oz59enqIzsQ= github.com/fluxcd/image-reflector-controller/api v0.17.1/go.mod h1:Lg8A+MUcke0Orp6C6UQkf9I3pc8M/B3XS3TOI+YxVBY= -github.com/fluxcd/kustomize-controller/api v0.22.2 h1:7zQDkC6gFE1mNallS4WfVCBEJYc9Y32HZ7oi8OnSnw0= -github.com/fluxcd/kustomize-controller/api v0.22.2/go.mod h1:Kq2kKnU6Z9CiZFLpHTMSLvpgWiT/e03NRb1wc8W+24E= -github.com/fluxcd/notification-controller/api v0.23.1 h1:Bef4+AbuNXS+7M5bWjOKXBDQT5OU1xVM9VbZWFYiRp0= -github.com/fluxcd/notification-controller/api v0.23.1/go.mod h1:0QFnW7CrYl5ItHNPpstxU42Pmb5/Qepx8FFjVxcZqIk= +github.com/fluxcd/kustomize-controller/api v0.22.3 h1:zCnT54qlQIQnWkcgnYsBPjxXannVnQWcoGgrUADNoAY= +github.com/fluxcd/kustomize-controller/api v0.22.3/go.mod h1:Kq2kKnU6Z9CiZFLpHTMSLvpgWiT/e03NRb1wc8W+24E= +github.com/fluxcd/notification-controller/api v0.23.2 h1:aKe9dHsOx00ZqafmZ+CfJNYLjAeQLjodzdW3qzEVl40= +github.com/fluxcd/notification-controller/api v0.23.2/go.mod h1:0QFnW7CrYl5ItHNPpstxU42Pmb5/Qepx8FFjVxcZqIk= github.com/fluxcd/pkg/apis/acl v0.0.3 h1:Lw0ZHdpnO4G7Zy9KjrzwwBmDZQuy4qEjaU/RvA6k1lc= github.com/fluxcd/pkg/apis/acl v0.0.3/go.mod h1:XPts6lRJ9C9fIF9xVWofmQwftvhY25n1ps7W9xw0XLU= github.com/fluxcd/pkg/apis/kustomize v0.3.2 h1:ULoAwOOekHf5cy6mYIwL+K6v8/cfcNVVbwfIPgWjdjg= @@ -403,8 +403,8 @@ github.com/fluxcd/pkg/untar v0.1.0 h1:k97V/xV5hFrAkIkVPuv5AVhyxh1ZzzAKba/lbDfGo6 github.com/fluxcd/pkg/untar v0.1.0/go.mod h1:aGswNyzB1mlz/T/kpOS58mITBMxMKc9tlJBH037A2HY= github.com/fluxcd/pkg/version v0.1.0 h1:v+SmCanmCB5Tj2Cx9TXlj+kNRfPGbAvirkeqsp7ZEAQ= github.com/fluxcd/pkg/version v0.1.0/go.mod h1:V7Z/w8dxLQzv0FHqa5ox5TeyOd2zOd49EeuWFgnwyj4= -github.com/fluxcd/source-controller/api v0.22.4 h1:PJuZg6/9UN0GLhe2Mt8DJBNuC/t1BHvZAg79k7xPDcQ= -github.com/fluxcd/source-controller/api v0.22.4/go.mod h1:Vb13q9Pq+1IW/sJUZn/RSb7IU5WT86Er6uCFPCFm9L4= +github.com/fluxcd/source-controller/api v0.22.5 h1:EyqQbpzS8Pg1dLqsSho1lFWsb3KWKvK+cKtm35pSbF8= +github.com/fluxcd/source-controller/api v0.22.5/go.mod h1:Vb13q9Pq+1IW/sJUZn/RSb7IU5WT86Er6uCFPCFm9L4= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/form3tech-oss/jwt-go v3.2.3+incompatible h1:7ZaBxOI7TMoYBfyA3cQHErNNyAWIKUMIwqxEtgHOs5c= diff --git a/manifests/bases/image-automation-controller/kustomization.yaml b/manifests/bases/image-automation-controller/kustomization.yaml index 1744dc70..715b7605 100644 --- a/manifests/bases/image-automation-controller/kustomization.yaml +++ b/manifests/bases/image-automation-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.21.2/image-automation-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.21.2/image-automation-controller.deployment.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.21.3/image-automation-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.21.3/image-automation-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/kustomize-controller/kustomization.yaml b/manifests/bases/kustomize-controller/kustomization.yaml index 28446a79..2be3a7ef 100644 --- a/manifests/bases/kustomize-controller/kustomization.yaml +++ b/manifests/bases/kustomize-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.22.2/kustomize-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.22.2/kustomize-controller.deployment.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.22.3/kustomize-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.22.3/kustomize-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/notification-controller/kustomization.yaml b/manifests/bases/notification-controller/kustomization.yaml index 86aa8023..2d9c48e2 100644 --- a/manifests/bases/notification-controller/kustomization.yaml +++ b/manifests/bases/notification-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/notification-controller/releases/download/v0.23.1/notification-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v0.23.1/notification-controller.deployment.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.23.2/notification-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.23.2/notification-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index 1f552f8c..39f822db 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.22.4/source-controller.crds.yaml -- https://github.com/fluxcd/source-controller/releases/download/v0.22.4/source-controller.deployment.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.22.5/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.22.5/source-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index 9dd1403e..fac9d890 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -1,9 +1,9 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.22.4/source-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.22.2/kustomize-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.22.5/source-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.22.3/kustomize-controller.crds.yaml - https://github.com/fluxcd/helm-controller/releases/download/v0.18.2/helm-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v0.23.1/notification-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.23.2/notification-controller.crds.yaml - https://github.com/fluxcd/image-reflector-controller/releases/download/v0.17.1/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.21.2/image-automation-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.21.3/image-automation-controller.crds.yaml From 1807852b6be2948078a70213cdb760c43b000b10 Mon Sep 17 00:00:00 2001 From: Soule BA Date: Fri, 1 Apr 2022 10:27:37 +0200 Subject: [PATCH 069/818] Update pkg/kustomize to v0.1.0 If implemented this fixes a bug where retrieving the groupVersion.Group of a kustomization were returning an empty string. Signed-off-by: Soule BA --- cmd/flux/build_kustomization_test.go | 6 + .../podinfo-kustomization.yaml | 4 + .../podinfo-with-var-substitution-result.yaml | 216 ++++++++++++++++++ .../var-substitution/cluster.json | 124 ++++++++++ .../var-substitution/deployment.yaml | 77 +++++++ .../var-substitution/kustomization.yaml | 11 + go.mod | 2 +- go.sum | 4 +- 8 files changed, 441 insertions(+), 3 deletions(-) create mode 100644 cmd/flux/testdata/build-kustomization/podinfo-with-var-substitution-result.yaml create mode 100644 cmd/flux/testdata/build-kustomization/var-substitution/cluster.json create mode 100644 cmd/flux/testdata/build-kustomization/var-substitution/deployment.yaml create mode 100644 cmd/flux/testdata/build-kustomization/var-substitution/kustomization.yaml diff --git a/cmd/flux/build_kustomization_test.go b/cmd/flux/build_kustomization_test.go index 99ecb45c..03826d04 100644 --- a/cmd/flux/build_kustomization_test.go +++ b/cmd/flux/build_kustomization_test.go @@ -54,6 +54,12 @@ func TestBuildKustomization(t *testing.T) { resultFile: "./testdata/build-kustomization/podinfo-without-service-result.yaml", assertFunc: "assertGoldenTemplateFile", }, + { + name: "build deployment and configmpa with var substitution", + args: "build kustomization podinfo --path ./testdata/build-kustomization/var-substitution", + resultFile: "./testdata/build-kustomization/podinfo-with-var-substitution-result.yaml", + assertFunc: "assertGoldenTemplateFile", + }, } tmpl := map[string]string{ diff --git a/cmd/flux/testdata/build-kustomization/podinfo-kustomization.yaml b/cmd/flux/testdata/build-kustomization/podinfo-kustomization.yaml index 6d3eabed..72103efe 100644 --- a/cmd/flux/testdata/build-kustomization/podinfo-kustomization.yaml +++ b/cmd/flux/testdata/build-kustomization/podinfo-kustomization.yaml @@ -13,3 +13,7 @@ spec: kind: GitRepository name: podinfo targetNamespace: default + postBuild: + substitute: + cluster_env: "prod" + cluster_region: "eu-central-1" diff --git a/cmd/flux/testdata/build-kustomization/podinfo-with-var-substitution-result.yaml b/cmd/flux/testdata/build-kustomization/podinfo-with-var-substitution-result.yaml new file mode 100644 index 00000000..0c32c936 --- /dev/null +++ b/cmd/flux/testdata/build-kustomization/podinfo-with-var-substitution-result.yaml @@ -0,0 +1,216 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + environment: prod + kustomize.toolkit.fluxcd.io/name: podinfo + kustomize.toolkit.fluxcd.io/namespace: {{ .fluxns }} + region: eu-central-1 + name: podinfo + namespace: default +spec: + minReadySeconds: 3 + progressDeadlineSeconds: 60 + revisionHistoryLimit: 5 + selector: + matchLabels: + app: podinfo + strategy: + rollingUpdate: + maxUnavailable: 0 + type: RollingUpdate + template: + metadata: + annotations: + prometheus.io/port: "9797" + prometheus.io/scrape: "true" + labels: + app: podinfo + spec: + containers: + - command: + - ./podinfo + - --port=9898 + - --port-metrics=9797 + - --grpc-port=9999 + - --grpc-service-name=podinfo + - --level=info + - --random-delay=false + - --random-error=false + env: + - name: PODINFO_UI_COLOR + value: '#34577c' + image: ghcr.io/stefanprodan/podinfo:6.0.10 + imagePullPolicy: IfNotPresent + livenessProbe: + exec: + command: + - podcli + - check + - http + - localhost:9898/healthz + initialDelaySeconds: 5 + timeoutSeconds: 5 + name: podinfod + ports: + - containerPort: 9898 + name: http + protocol: TCP + - containerPort: 9797 + name: http-metrics + protocol: TCP + - containerPort: 9999 + name: grpc + protocol: TCP + readinessProbe: + exec: + command: + - podcli + - check + - http + - localhost:9898/readyz + initialDelaySeconds: 5 + timeoutSeconds: 5 + resources: + limits: + cpu: 2000m + memory: 512Mi + requests: + cpu: 100m + memory: 64Mi +--- +apiVersion: v1 +data: + cluster.json: | + { + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": "-- Grafana --", + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "gnetId": null, + "graphTooltip": 0, + "iteration": 1636369574387, + "links": [], + "panels": [ + { + "datasource": "${DS_PROMETHEUS}", + "description": "", + "fieldConfig": { + "defaults": { + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue", + "value": null + }, + { + "color": "red", + "value": 100 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 6, + "x": 0, + "y": 0 + }, + "id": 24, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "last" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "value" + }, + "pluginVersion": "7.5.5", + "targets": [ + { + "exemplar": true, + "expr": "count(gotk_reconcile_condition{namespace=~\"$operator_namespace\",exported_namespace=~\"$namespace\",type=\"Ready\",status=\"True\",kind=~\"Kustomization|HelmRelease\"})\n-\nsum(gotk_reconcile_condition{namespace=~\"$operator_namespace\",exported_namespace=~\"$namespace\",type=\"Ready\",status=\"Deleted\",kind=~\"Kustomization|HelmRelease\"})", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Cluster Reconcilers", + "type": "stat" + }, + { + "collapsed": false, + "datasource": "${DS_PROMETHEUS}", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 9 + }, + "id": 15, + "panels": [], + "title": "Status", + "type": "row" + } + ], + "refresh": "", + "schemaVersion": 27, + "style": "light", + "tags": [ + "flux" + ], + "time": { + "from": "now-15m", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ] + }, + "timezone": "", + "title": "Flux Cluster Stats", + "uid": "flux-cluster", + "version": 1 + } +kind: ConfigMap +metadata: + labels: + kustomize.toolkit.fluxcd.io/name: podinfo + kustomize.toolkit.fluxcd.io/namespace: {{ .fluxns }} + kustomize.toolkit.fluxcd.io/substitute: disabled + name: flux-grafana-dashboards-kt8md725kf + namespace: default diff --git a/cmd/flux/testdata/build-kustomization/var-substitution/cluster.json b/cmd/flux/testdata/build-kustomization/var-substitution/cluster.json new file mode 100644 index 00000000..8184714a --- /dev/null +++ b/cmd/flux/testdata/build-kustomization/var-substitution/cluster.json @@ -0,0 +1,124 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": "-- Grafana --", + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "gnetId": null, + "graphTooltip": 0, + "iteration": 1636369574387, + "links": [], + "panels": [ + { + "datasource": "${DS_PROMETHEUS}", + "description": "", + "fieldConfig": { + "defaults": { + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue", + "value": null + }, + { + "color": "red", + "value": 100 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 6, + "x": 0, + "y": 0 + }, + "id": 24, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "last" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "value" + }, + "pluginVersion": "7.5.5", + "targets": [ + { + "exemplar": true, + "expr": "count(gotk_reconcile_condition{namespace=~\"$operator_namespace\",exported_namespace=~\"$namespace\",type=\"Ready\",status=\"True\",kind=~\"Kustomization|HelmRelease\"})\n-\nsum(gotk_reconcile_condition{namespace=~\"$operator_namespace\",exported_namespace=~\"$namespace\",type=\"Ready\",status=\"Deleted\",kind=~\"Kustomization|HelmRelease\"})", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Cluster Reconcilers", + "type": "stat" + }, + { + "collapsed": false, + "datasource": "${DS_PROMETHEUS}", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 9 + }, + "id": 15, + "panels": [], + "title": "Status", + "type": "row" + } + ], + "refresh": "", + "schemaVersion": 27, + "style": "light", + "tags": [ + "flux" + ], + "time": { + "from": "now-15m", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ] + }, + "timezone": "", + "title": "Flux Cluster Stats", + "uid": "flux-cluster", + "version": 1 +} diff --git a/cmd/flux/testdata/build-kustomization/var-substitution/deployment.yaml b/cmd/flux/testdata/build-kustomization/var-substitution/deployment.yaml new file mode 100644 index 00000000..9b5f2c35 --- /dev/null +++ b/cmd/flux/testdata/build-kustomization/var-substitution/deployment.yaml @@ -0,0 +1,77 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + environment: ${cluster_env:=dev} + region: ${cluster_region} + name: podinfo +spec: + minReadySeconds: 3 + revisionHistoryLimit: 5 + progressDeadlineSeconds: 60 + strategy: + rollingUpdate: + maxUnavailable: 0 + type: RollingUpdate + selector: + matchLabels: + app: podinfo + template: + metadata: + annotations: + prometheus.io/scrape: "true" + prometheus.io/port: "9797" + labels: + app: podinfo + spec: + containers: + - name: podinfod + image: ghcr.io/stefanprodan/podinfo:6.0.10 + imagePullPolicy: IfNotPresent + ports: + - name: http + containerPort: 9898 + protocol: TCP + - name: http-metrics + containerPort: 9797 + protocol: TCP + - name: grpc + containerPort: 9999 + protocol: TCP + command: + - ./podinfo + - --port=9898 + - --port-metrics=9797 + - --grpc-port=9999 + - --grpc-service-name=podinfo + - --level=info + - --random-delay=false + - --random-error=false + env: + - name: PODINFO_UI_COLOR + value: "#34577c" + livenessProbe: + exec: + command: + - podcli + - check + - http + - localhost:9898/healthz + initialDelaySeconds: 5 + timeoutSeconds: 5 + readinessProbe: + exec: + command: + - podcli + - check + - http + - localhost:9898/readyz + initialDelaySeconds: 5 + timeoutSeconds: 5 + resources: + limits: + cpu: 2000m + memory: 512Mi + requests: + cpu: 100m + memory: 64Mi diff --git a/cmd/flux/testdata/build-kustomization/var-substitution/kustomization.yaml b/cmd/flux/testdata/build-kustomization/var-substitution/kustomization.yaml new file mode 100644 index 00000000..8edecffd --- /dev/null +++ b/cmd/flux/testdata/build-kustomization/var-substitution/kustomization.yaml @@ -0,0 +1,11 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: + - ./deployment.yaml +generatorOptions: + labels: + kustomize.toolkit.fluxcd.io/substitute: disabled +configMapGenerator: + - name: flux-grafana-dashboards + files: + - cluster.json diff --git a/go.mod b/go.mod index b3e04463..670a392f 100644 --- a/go.mod +++ b/go.mod @@ -13,7 +13,7 @@ require ( github.com/fluxcd/kustomize-controller/api v0.22.3 github.com/fluxcd/notification-controller/api v0.23.2 github.com/fluxcd/pkg/apis/meta v0.12.1 - github.com/fluxcd/pkg/kustomize v0.0.3 + github.com/fluxcd/pkg/kustomize v0.1.0 github.com/fluxcd/pkg/runtime v0.13.2 github.com/fluxcd/pkg/ssa v0.15.1 github.com/fluxcd/pkg/ssh v0.3.2 diff --git a/go.sum b/go.sum index 27631410..2748f000 100644 --- a/go.sum +++ b/go.sum @@ -391,8 +391,8 @@ github.com/fluxcd/pkg/apis/kustomize v0.3.2 h1:ULoAwOOekHf5cy6mYIwL+K6v8/cfcNVVb github.com/fluxcd/pkg/apis/kustomize v0.3.2/go.mod h1:p8iAH5TeqMBnnxkkpCNNDvWYfKlNRx89a6WKOo+hJHA= github.com/fluxcd/pkg/apis/meta v0.12.1 h1:m5PfKAqbqWBvGp9+JRj1sv+xNkGsHwUVf+3rJ8wm6SE= github.com/fluxcd/pkg/apis/meta v0.12.1/go.mod h1:f8YVt70/KAhqzZ7xxhjvqyzKubOYx2pAbakb/FfCEg8= -github.com/fluxcd/pkg/kustomize v0.0.3 h1:u1uj8se4bhq0mDrD/qZ3Wbk4/a8Kcbm132tsLwJakm4= -github.com/fluxcd/pkg/kustomize v0.0.3/go.mod h1:ezVwKj22MUktPCECK5pFvAOh57P1yh3Y6SV2NAt/cd0= +github.com/fluxcd/pkg/kustomize v0.1.0 h1:koptEkMQoVSdEmOvOPg6EupHPQmfuAV2kgddN2ijelI= +github.com/fluxcd/pkg/kustomize v0.1.0/go.mod h1:m4R8reRl16zf0aYJTy1uOQUQfM+/KfVaqjwTlAPcYZ4= github.com/fluxcd/pkg/runtime v0.13.2 h1:6jkQQUbp17WxHsbozlJFCvHmOS4JIB+yB20CdCd8duE= github.com/fluxcd/pkg/runtime v0.13.2/go.mod h1:dzWNKqFzFXeittbpFcJzR3cdC9CWlbzw+pNOgaVvF/0= github.com/fluxcd/pkg/ssa v0.15.1 h1:HXAT+K6c9Yy8Evxdyk3DU0KTk3yZ+fwgTEEzU1W/1V8= From b44e4617e036d88779f517c0629fc1dfc616eca1 Mon Sep 17 00:00:00 2001 From: Sunny Date: Sat, 2 Apr 2022 23:32:12 +0530 Subject: [PATCH 070/818] monitoring-config: grafana dashboards labelValue Since kube-prometheus-stack helm chart v32.2.0, the `labelValue` has to be set to "1" for the default grafana dashboard label selector to select the flux dashboard configuration. Also, update kube-prometheus-stack to v34.7.0, latest. Refer: https://github.com/prometheus-community/helm-charts/commit/eba5b198f597a39f2d40d3edd209dfa09429623e Signed-off-by: Sunny --- manifests/monitoring/kube-prometheus-stack/release.yaml | 2 +- manifests/monitoring/monitoring-config/kustomization.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/manifests/monitoring/kube-prometheus-stack/release.yaml b/manifests/monitoring/kube-prometheus-stack/release.yaml index f4e6d60f..d5985433 100644 --- a/manifests/monitoring/kube-prometheus-stack/release.yaml +++ b/manifests/monitoring/kube-prometheus-stack/release.yaml @@ -6,7 +6,7 @@ spec: interval: 5m chart: spec: - version: 23.2.0 + version: 34.7.0 chart: kube-prometheus-stack sourceRef: kind: HelmRepository diff --git a/manifests/monitoring/monitoring-config/kustomization.yaml b/manifests/monitoring/monitoring-config/kustomization.yaml index 7b53fa1f..11467e33 100644 --- a/manifests/monitoring/monitoring-config/kustomization.yaml +++ b/manifests/monitoring/monitoring-config/kustomization.yaml @@ -10,4 +10,4 @@ configMapGenerator: - ../grafana/dashboards/cluster.json options: labels: - grafana_dashboard: flux-system + grafana_dashboard: "1" From b80f32ce7dd6d1d5c2985463e0f4429311925418 Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Tue, 5 Apr 2022 11:53:17 +0100 Subject: [PATCH 071/818] Add cli flags for chart interval and reconcile strategy Signed-off-by: Somtochi Onyekwere --- cmd/flux/.create_helmrelease.go.swp | Bin 0 -> 16384 bytes cmd/flux/create_helmrelease.go | 51 ++++++++++++++++++++++------ 2 files changed, 40 insertions(+), 11 deletions(-) create mode 100644 cmd/flux/.create_helmrelease.go.swp diff --git a/cmd/flux/.create_helmrelease.go.swp b/cmd/flux/.create_helmrelease.go.swp new file mode 100644 index 0000000000000000000000000000000000000000..d42c707c4f43f19c29f11e07724beb5f80e304ef GIT binary patch literal 16384 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 literal 0 HcmV?d00001 diff --git a/cmd/flux/create_helmrelease.go b/cmd/flux/create_helmrelease.go index a6705f29..5a5f2c84 100644 --- a/cmd/flux/create_helmrelease.go +++ b/cmd/flux/create_helmrelease.go @@ -21,6 +21,7 @@ import ( "encoding/json" "fmt" "os" + "time" "github.com/fluxcd/flux2/internal/flags" "github.com/fluxcd/flux2/internal/utils" @@ -108,17 +109,19 @@ var createHelmReleaseCmd = &cobra.Command{ } type helmReleaseFlags struct { - name string - source flags.HelmChartSource - dependsOn []string - chart string - chartVersion string - targetNamespace string - createNamespace bool - valuesFiles []string - valuesFrom flags.HelmReleaseValuesFrom - saName string - crds flags.CRDsPolicy + name string + source flags.HelmChartSource + dependsOn []string + chart string + chartVersion string + targetNamespace string + createNamespace bool + valuesFiles []string + valuesFrom flags.HelmReleaseValuesFrom + saName string + crds flags.CRDsPolicy + reconcileStrategy string + chartInterval time.Duration } var helmReleaseArgs helmReleaseFlags @@ -132,6 +135,8 @@ func init() { createHelmReleaseCmd.Flags().StringVar(&helmReleaseArgs.targetNamespace, "target-namespace", "", "namespace to install this release, defaults to the HelmRelease namespace") createHelmReleaseCmd.Flags().BoolVar(&helmReleaseArgs.createNamespace, "create-target-namespace", false, "create the target namespace if it does not exist") createHelmReleaseCmd.Flags().StringVar(&helmReleaseArgs.saName, "service-account", "", "the name of the service account to impersonate when reconciling this HelmRelease") + createHelmReleaseCmd.Flags().StringVar(&helmReleaseArgs.reconcileStrategy, "reconcile-strategy", "ChartVersion", "the reconcile strategy for helm chart created by the helm release(accepted values: Revision and ChartRevision)") + createHelmReleaseCmd.Flags().DurationVarP(&helmReleaseArgs.chartInterval, "chart-interval", "", 0, "the interval of which to check for new chart versions") createHelmReleaseCmd.Flags().StringSliceVar(&helmReleaseArgs.valuesFiles, "values", nil, "local path to values.yaml files, also accepts comma-separated values") createHelmReleaseCmd.Flags().Var(&helmReleaseArgs.valuesFrom, "values-from", helmReleaseArgs.valuesFrom.Description()) createHelmReleaseCmd.Flags().Var(&helmReleaseArgs.crds, "crds", helmReleaseArgs.crds.Description()) @@ -154,6 +159,11 @@ func createHelmReleaseCmdRun(cmd *cobra.Command, args []string) error { logger.Generatef("generating HelmRelease") } + if !validateStrategy(helmReleaseArgs.reconcileStrategy) { + return fmt.Errorf("'%s' is an invalid reconcile strategy(valid: Revision, ChartVersion)", + helmReleaseArgs.reconcileStrategy) + } + helmRelease := helmv2.HelmRelease{ ObjectMeta: metav1.ObjectMeta{ Name: name, @@ -177,12 +187,19 @@ func createHelmReleaseCmdRun(cmd *cobra.Command, args []string) error { Name: helmReleaseArgs.source.Name, Namespace: helmReleaseArgs.source.Namespace, }, + ReconcileStrategy: helmReleaseArgs.reconcileStrategy, }, }, Suspend: false, }, } + if helmReleaseArgs.chartInterval != 0 { + helmRelease.Spec.Chart.Spec.Interval = &metav1.Duration{ + Duration: helmReleaseArgs.chartInterval, + } + } + if helmReleaseArgs.createNamespace { if helmRelease.Spec.Install == nil { helmRelease.Spec.Install = &helmv2.Install{} @@ -316,3 +333,15 @@ func isHelmReleaseReady(ctx context.Context, kubeClient client.Client, return apimeta.IsStatusConditionTrue(helmRelease.Status.Conditions, meta.ReadyCondition), nil } } + +func validateStrategy(input string) bool { + allowedStrategy := []string{"Revision", "ChartVersion"} + + for _, strategy := range allowedStrategy { + if strategy == input { + return true + } + } + + return false +} From 5536af9756b6a55139855b385b557f3f92ffca14 Mon Sep 17 00:00:00 2001 From: Soule BA Date: Mon, 4 Apr 2022 14:11:10 +0200 Subject: [PATCH 072/818] Add an option to diff with a local kustomization file If implemented, users will be able to provide a local kustomization file to `flux build/diff`. Signed-off-by: Soule BA --- cmd/flux/build_kustomization.go | 23 ++++-- cmd/flux/build_kustomization_test.go | 103 ++++++++++++++++++++++++++- cmd/flux/diff_kustomization.go | 23 ++++-- internal/build/build.go | 50 ++++++++++--- 4 files changed, 179 insertions(+), 20 deletions(-) diff --git a/cmd/flux/build_kustomization.go b/cmd/flux/build_kustomization.go index 41280976..e093ac96 100644 --- a/cmd/flux/build_kustomization.go +++ b/cmd/flux/build_kustomization.go @@ -33,21 +33,28 @@ var buildKsCmd = &cobra.Command{ Short: "Build Kustomization", Long: `The build command queries the Kubernetes API and fetches the specified Flux Kustomization. It then uses the fetched in cluster flux kustomization to perform needed transformation on the local kustomization.yaml -pointed at by --path. The local kustomization.yaml is generated if it does not exist. Finally it builds the overlays using the local kustomization.yaml, and write the resulting multi-doc YAML to stdout.`, +pointed at by --path. The local kustomization.yaml is generated if it does not exist. Finally it builds the overlays using the local kustomization.yaml, and write the resulting multi-doc YAML to stdout. + +It is possible to specify a Flux kustomization file using --kustomization-file.`, Example: `# Build the local manifests as they were built on the cluster -flux build kustomization my-app --path ./path/to/local/manifests`, +flux build kustomization my-app --path ./path/to/local/manifests + +# Build using a local flux kustomization file +flux build kustomization my-app --path ./path/to/local/manifests --kustomization-file ./path/to/local/my-app.yaml`, ValidArgsFunction: resourceNamesCompletionFunc(kustomizev1.GroupVersion.WithKind(kustomizev1.KustomizationKind)), RunE: buildKsCmdRun, } type buildKsFlags struct { - path string + kustomizationFile string + path string } var buildKsArgs buildKsFlags func init() { - buildKsCmd.Flags().StringVar(&buildKsArgs.path, "path", "", "Path to the manifests location.)") + buildKsCmd.Flags().StringVar(&buildKsArgs.path, "path", "", "Path to the manifests location.") + buildKsCmd.Flags().StringVar(&buildKsArgs.kustomizationFile, "kustomization-file", "", "Path to the Flux Kustomization YAML file.") buildCmd.AddCommand(buildKsCmd) } @@ -65,7 +72,13 @@ func buildKsCmdRun(cmd *cobra.Command, args []string) error { return fmt.Errorf("invalid resource path %q", buildKsArgs.path) } - builder, err := build.NewBuilder(kubeconfigArgs, kubeclientOptions, name, buildKsArgs.path, build.WithTimeout(rootArgs.timeout)) + if buildKsArgs.kustomizationFile != "" { + if fs, err := os.Stat(buildKsArgs.kustomizationFile); os.IsNotExist(err) || fs.IsDir() { + return fmt.Errorf("invalid kustomization file %q", buildKsArgs.kustomizationFile) + } + } + + builder, err := build.NewBuilder(kubeconfigArgs, kubeclientOptions, name, buildKsArgs.path, build.WithTimeout(rootArgs.timeout), build.WithKustomizationFile(buildKsArgs.kustomizationFile)) if err != nil { return err } diff --git a/cmd/flux/build_kustomization_test.go b/cmd/flux/build_kustomization_test.go index 03826d04..aba1b16c 100644 --- a/cmd/flux/build_kustomization_test.go +++ b/cmd/flux/build_kustomization_test.go @@ -20,7 +20,10 @@ limitations under the License. package main import ( + "bytes" + "os" "testing" + "text/template" ) func setup(t *testing.T, tmpl map[string]string) { @@ -55,7 +58,7 @@ func TestBuildKustomization(t *testing.T) { assertFunc: "assertGoldenTemplateFile", }, { - name: "build deployment and configmpa with var substitution", + name: "build deployment and configmap with var substitution", args: "build kustomization podinfo --path ./testdata/build-kustomization/var-substitution", resultFile: "./testdata/build-kustomization/podinfo-with-var-substitution-result.yaml", assertFunc: "assertGoldenTemplateFile", @@ -87,3 +90,101 @@ func TestBuildKustomization(t *testing.T) { }) } } + +func TestBuildLocalKustomization(t *testing.T) { + podinfo := `apiVersion: kustomize.toolkit.fluxcd.io/v1beta2 +kind: Kustomization +metadata: + name: podinfo + namespace: {{ .fluxns }} +spec: + interval: 5m0s + path: ./kustomize + force: true + prune: true + sourceRef: + kind: GitRepository + name: podinfo + targetNamespace: default + postBuild: + substitute: + cluster_env: "prod" + cluster_region: "eu-central-1" +` + + tests := []struct { + name string + args string + resultFile string + assertFunc string + }{ + { + name: "no args", + args: "build kustomization podinfo --kustomization-file ./wrongfile/ --path ./testdata/build-kustomization/podinfo", + resultFile: "invalid kustomization file \"./wrongfile/\"", + assertFunc: "assertError", + }, + { + name: "build podinfo", + args: "build kustomization podinfo --kustomization-file ./testdata/build-kustomization/podinfo.yaml --path ./testdata/build-kustomization/podinfo", + resultFile: "./testdata/build-kustomization/podinfo-result.yaml", + assertFunc: "assertGoldenTemplateFile", + }, + { + name: "build podinfo without service", + args: "build kustomization podinfo --kustomization-file ./testdata/build-kustomization/podinfo.yaml --path ./testdata/build-kustomization/delete-service", + resultFile: "./testdata/build-kustomization/podinfo-without-service-result.yaml", + assertFunc: "assertGoldenTemplateFile", + }, + { + name: "build deployment and configmap with var substitution", + args: "build kustomization podinfo --kustomization-file ./testdata/build-kustomization/podinfo.yaml --path ./testdata/build-kustomization/var-substitution", + resultFile: "./testdata/build-kustomization/podinfo-with-var-substitution-result.yaml", + assertFunc: "assertGoldenTemplateFile", + }, + } + + tmpl := map[string]string{ + "fluxns": allocateNamespace("flux-system"), + } + + testEnv.CreateObjectFile("./testdata/build-kustomization/podinfo-source.yaml", tmpl, t) + + temp, err := template.New("podinfo").Parse(podinfo) + if err != nil { + t.Fatal(err) + } + + var b bytes.Buffer + err = temp.Execute(&b, tmpl) + if err != nil { + t.Fatal(err) + } + + err = os.WriteFile("./testdata/build-kustomization/podinfo.yaml", b.Bytes(), 0666) + if err != nil { + t.Fatal(err) + } + + defer os.Remove("./testdata/build-kustomization/podinfo.yaml") + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + var assert assertFunc + + switch tt.assertFunc { + case "assertGoldenTemplateFile": + assert = assertGoldenTemplateFile(tt.resultFile, tmpl) + case "assertError": + assert = assertError(tt.resultFile) + } + + cmd := cmdTestCase{ + args: tt.args + " -n " + tmpl["fluxns"], + assert: assert, + } + + cmd.runTestCmd(t) + }) + } +} diff --git a/cmd/flux/diff_kustomization.go b/cmd/flux/diff_kustomization.go index 8be50fc1..baeda363 100644 --- a/cmd/flux/diff_kustomization.go +++ b/cmd/flux/diff_kustomization.go @@ -34,21 +34,26 @@ var diffKsCmd = &cobra.Command{ Long: `The diff command does a build, then it performs a server-side dry-run and prints the diff. Exit status: 0 No differences were found. 1 Differences were found. >1 diff failed with an error.`, Example: `# Preview local changes as they were applied on the cluster -flux diff kustomization my-app --path ./path/to/local/manifests`, +flux diff kustomization my-app --path ./path/to/local/manifests + +# Preview using a local flux kustomization file +flux diff kustomization my-app --path ./path/to/local/manifests --kustomization-file ./path/to/local/my-app.yaml`, ValidArgsFunction: resourceNamesCompletionFunc(kustomizev1.GroupVersion.WithKind(kustomizev1.KustomizationKind)), RunE: diffKsCmdRun, } type diffKsFlags struct { - path string - progressBar bool + kustomizationFile string + path string + progressBar bool } var diffKsArgs diffKsFlags func init() { - diffKsCmd.Flags().StringVar(&diffKsArgs.path, "path", "", "Path to a local directory that matches the specified Kustomization.spec.path.)") + diffKsCmd.Flags().StringVar(&diffKsArgs.path, "path", "", "Path to a local directory that matches the specified Kustomization.spec.path.") diffKsCmd.Flags().BoolVar(&diffKsArgs.progressBar, "progress-bar", true, "Boolean to set the progress bar. The default value is true.") + diffKsCmd.Flags().StringVar(&diffKsArgs.kustomizationFile, "kustomization-file", "", "Path to the Flux Kustomization YAML file.") diffCmd.AddCommand(diffKsCmd) } @@ -66,12 +71,18 @@ func diffKsCmdRun(cmd *cobra.Command, args []string) error { return &RequestError{StatusCode: 2, Err: fmt.Errorf("invalid resource path %q", diffKsArgs.path)} } + if diffKsArgs.kustomizationFile != "" { + if fs, err := os.Stat(diffKsArgs.kustomizationFile); os.IsNotExist(err) || fs.IsDir() { + return fmt.Errorf("invalid kustomization file %q", diffKsArgs.kustomizationFile) + } + } + var builder *build.Builder var err error if diffKsArgs.progressBar { - builder, err = build.NewBuilder(kubeconfigArgs, kubeclientOptions, name, diffKsArgs.path, build.WithTimeout(rootArgs.timeout), build.WithProgressBar()) + builder, err = build.NewBuilder(kubeconfigArgs, kubeclientOptions, name, diffKsArgs.path, build.WithTimeout(rootArgs.timeout), build.WithKustomizationFile(diffKsArgs.kustomizationFile), build.WithProgressBar()) } else { - builder, err = build.NewBuilder(kubeconfigArgs, kubeclientOptions, name, diffKsArgs.path, build.WithTimeout(rootArgs.timeout)) + builder, err = build.NewBuilder(kubeconfigArgs, kubeclientOptions, name, diffKsArgs.path, build.WithTimeout(rootArgs.timeout), build.WithKustomizationFile(diffKsArgs.kustomizationFile)) } if err != nil { diff --git a/internal/build/build.go b/internal/build/build.go index 3eb0844c..27fa06a7 100644 --- a/internal/build/build.go +++ b/internal/build/build.go @@ -22,6 +22,7 @@ import ( "encoding/base64" "encoding/json" "fmt" + "os" "sync" "time" @@ -30,6 +31,7 @@ import ( "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" + k8syaml "k8s.io/apimachinery/pkg/util/yaml" "k8s.io/cli-runtime/pkg/genericclioptions" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/kustomize/api/resmap" @@ -60,11 +62,12 @@ var defaultTimeout = 80 * time.Second // It retrieves the kustomization object from the k8s cluster // and overlays the manifests with the resources specified in the resourcesPath type Builder struct { - client client.WithWatch - restMapper meta.RESTMapper - name string - namespace string - resourcesPath string + client client.WithWatch + restMapper meta.RESTMapper + name string + namespace string + resourcesPath string + kustomizationFile string // mu is used to synchronize access to the kustomization file mu sync.Mutex action kustomize.Action @@ -75,6 +78,13 @@ type Builder struct { type BuilderOptionFunc func(b *Builder) error +func WithKustomizationFile(file string) BuilderOptionFunc { + return func(b *Builder) error { + b.kustomizationFile = file + return nil + } +} + func WithTimeout(timeout time.Duration) BuilderOptionFunc { return func(b *Builder) error { b.timeout = timeout @@ -176,9 +186,18 @@ func (b *Builder) build() (m resmap.ResMap, err error) { defer cancel() // Get the kustomization object - k, err := b.getKustomization(ctx) - if err != nil { - return + k := &kustomizev1.Kustomization{} + if b.kustomizationFile != "" { + k, err = b.unMarshallKustomization() + if err != nil { + return + } + } else { + k, err = b.getKustomization(ctx) + if err != nil { + err = fmt.Errorf("failed to get kustomization object: %w", err) + return + } } // store the kustomization object @@ -225,6 +244,21 @@ func (b *Builder) build() (m resmap.ResMap, err error) { } +func (b *Builder) unMarshallKustomization() (*kustomizev1.Kustomization, error) { + data, err := os.ReadFile(b.kustomizationFile) + if err != nil { + return nil, fmt.Errorf("failed to read kustomization file %s: %w", b.kustomizationFile, err) + } + + k := &kustomizev1.Kustomization{} + decoder := k8syaml.NewYAMLOrJSONDecoder(bytes.NewBuffer(data), len(data)) + err = decoder.Decode(k) + if err != nil { + return nil, fmt.Errorf("failed to unmarshall kustomization file %s: %w", b.kustomizationFile, err) + } + return k, nil +} + func (b *Builder) generate(kustomization kustomizev1.Kustomization, dirPath string) (kustomize.Action, error) { data, err := runtime.DefaultUnstructuredConverter.ToUnstructured(&kustomization) if err != nil { From 7e2b63ea5dda2d0ecbc4039c28efdbec4923e047 Mon Sep 17 00:00:00 2001 From: Kingdon Barrett Date: Thu, 7 Apr 2022 08:29:57 -0400 Subject: [PATCH 073/818] add detail to delete docs Signed-off-by: Kingdon Barrett --- cmd/flux/delete_kustomization.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/flux/delete_kustomization.go b/cmd/flux/delete_kustomization.go index e3366f2f..257d7362 100644 --- a/cmd/flux/delete_kustomization.go +++ b/cmd/flux/delete_kustomization.go @@ -27,7 +27,7 @@ var deleteKsCmd = &cobra.Command{ Aliases: []string{"ks"}, Short: "Delete a Kustomization resource", Long: "The delete kustomization command deletes the given Kustomization from the cluster.", - Example: ` # Delete a kustomization and the Kubernetes resources created by it + Example: ` # Delete a kustomization and the Kubernetes resources created by it when prune is enabled flux delete kustomization podinfo`, ValidArgsFunction: resourceNamesCompletionFunc(kustomizev1.GroupVersion.WithKind(kustomizev1.KustomizationKind)), RunE: deleteCommand{ From a85ea5982484b826ac558f1238af05e15d6b3e64 Mon Sep 17 00:00:00 2001 From: Chen Anidam Date: Tue, 12 Apr 2022 11:56:37 +0300 Subject: [PATCH 074/818] Read password of generic git bootstrap command from env or stdin Signed-off-by: Chen Anidam --- cmd/flux/bootstrap_git.go | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/cmd/flux/bootstrap_git.go b/cmd/flux/bootstrap_git.go index 3104ea97..7e2193eb 100644 --- a/cmd/flux/bootstrap_git.go +++ b/cmd/flux/bootstrap_git.go @@ -53,6 +53,9 @@ command will perform an upgrade if needed.`, # Run bootstrap for a Git repository and authenticate using a password flux bootstrap git --url=https://example.com/repository.git --password= + # Run bootstrap for a Git repository and authenticate using a password from environment variable + GIT_PASSWORD= && flux bootstrap git --url=https://example.com/repository.git + # Run bootstrap for a Git repository with a passwordless private key flux bootstrap git --url=ssh://git@example.com/repository.git --private-key-file= @@ -71,6 +74,10 @@ type gitFlags struct { silent bool } +const ( + gitPasswordEnvVar = "GIT_PASSWORD" +) + var gitArgs gitFlags func init() { @@ -85,6 +92,19 @@ func init() { } func bootstrapGitCmdRun(cmd *cobra.Command, args []string) error { + gitPassword := os.Getenv(gitPasswordEnvVar) + if gitPassword != "" && gitArgs.password == "" { + gitArgs.password = gitPassword + } + if bootstrapArgs.tokenAuth && gitArgs.password == "" { + var err error + gitPassword, err = readPasswordFromStdin("Please enter your Git repository password: ") + if err != nil { + return fmt.Errorf("could not read token: %w", err) + } + gitArgs.password = gitPassword + } + if err := bootstrapValidate(); err != nil { return err } From 0135eb19d4569364fa26c71da0f0c3613f62021c Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 30 Mar 2022 13:18:27 +0300 Subject: [PATCH 075/818] Add proposal for adding Helm OCI support to Flux Source API Signed-off-by: Stefan Prodan --- rfcs/helm-oci/README.md | 110 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 rfcs/helm-oci/README.md diff --git a/rfcs/helm-oci/README.md b/rfcs/helm-oci/README.md new file mode 100644 index 00000000..a57d3db1 --- /dev/null +++ b/rfcs/helm-oci/README.md @@ -0,0 +1,110 @@ +# RFC-xxxx Flux OCI support for Helm + +**Status:** provisional + +**Creation date:** 2022-03-30 + +**Last update:** 2022-03-30 + +## Summary + +Given that Helm v3.8 supports [OCI](https://helm.sh/docs/topics/registries/) for package distribution, +we should extend the Flux Source API to allow fetching Helm charts from container registries. + +## Motivation + +Helm OCI support is one of the most requested feature in Flux +as seen on this [issue](https://github.com/fluxcd/source-controller/issues/124). + +### Goals + +- Add support for fetching Helm charts stored as OCI artifacts with minimal API changes to Flux. +- Make it easy for users to switch from HTTP/S Helm repositories to OCI repositories. + +### Non-Goals + +- Introduce a new API kind for referencing charts stored as OCI artifacts. + +## Proposal + +Introduce an optional field called `type` to the `HelmRepository` spec. + +When not specified, the `spec.type` field defaults to `Default` which preserve the current `HelmRepository` API behaviour. + +When the `spec.type` field is set to `OCI`, the `spec.url` field must be prefixed with `oci://` (to follow the Helm conventions). +For `oci://` URLs, source-controller will use the Helm SDK and the `oras` library to connect to the OCI remote storage. +For authentication, the controller will use Kubernetes secrets of `kubernetes.io/dockerconfigjson` type. + +### User Stories + +#### Story 1 + +> As a developer I want to use Flux `HelmReleases` that refer to Helm charts stored +> as OCI artifacts in GitHub Container Registry. + +First create a secret using a GitHub token that allows access to GHCR: + +```sh +kubectl create secret docker-registry ghcr-charts \ + --docker-server=ghcr.io \ + --docker-username=$GITHUB_USER \ + --docker-password=$GITHUB_TOKEN +``` + +Then define a `HelmRepository` of type `OCI` and reference the `dockerconfig` secret: + +```yaml +apiVersion: source.toolkit.fluxcd.io/v1beta2 +kind: HelmRepository +metadata: + name: ghcr-charts + namespace: default +spec: + type: OCI + url: oci://ghcr.io/my-org/charts/ + secretRef: + name: ghcr-charts +``` + +And finally in Flux `HelmReleases`, refer to the ghcr-charts `HelmRepository`: + +```yaml +apiVersion: helm.toolkit.fluxcd.io/v2beta1 +kind: HelmRelease +metadata: + name: podinfo + namespace: default +spec: + interval: 60m + chart: + spec: + chart: my-app + version: '1.0.x' + sourceRef: + kind: HelmRepository + name: ghcr-charts + interval: 1m # check for new OCI artifacts every minute +``` + +### Alternatives + +We could use introduce a new API type e.g. `HelmOCIRepository`. That is considered unpractical, +as there is no benefit for users in having a dedicated kind instead of a `type` filed in the current +`HelmRepository` API. Adding a `type` filed to the spec follows the Flux Bucket API design, where +the same Kind servers different implementations: AWS S3 vs Azure Blob vs Google Storage. + +## Design Details + +In source-controller we'll add a new predicate for indexing `HelmRepositories` based on the `spec.type` field. + +When the `spec.type` field is set to `OCI`, the `HelmRepositoryReconciler` +will set the `HelmRepository` Ready status to `False` if the URL is not prefixed with `oci://`, +otherwise the Ready status will be set to `True`. + +The current `HelmChartReconciler` will use the `HelmRepositories` with `type: Default`. +For `type: OCI` we'll introduce a new reconciler `HelmChartOCIReconciler` that uses `oras` to download charts +and their dependencies. + +### Enabling the feature + +The feature is enabled by default. From 606078c1b3890a2b9842f846bf6df710b7cd4298 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 30 Mar 2022 14:31:25 +0300 Subject: [PATCH 076/818] Add chart update automation to Git Signed-off-by: Stefan Prodan --- rfcs/helm-oci/README.md | 57 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 53 insertions(+), 4 deletions(-) diff --git a/rfcs/helm-oci/README.md b/rfcs/helm-oci/README.md index a57d3db1..6d9fc87c 100644 --- a/rfcs/helm-oci/README.md +++ b/rfcs/helm-oci/README.md @@ -16,6 +16,9 @@ we should extend the Flux Source API to allow fetching Helm charts from containe Helm OCI support is one of the most requested feature in Flux as seen on this [issue](https://github.com/fluxcd/source-controller/issues/124). +With OCI support, Flux users can automate chart updates to Git in the same way +they do today for container images. + ### Goals - Add support for fetching Helm charts stored as OCI artifacts with minimal API changes to Flux. @@ -86,12 +89,58 @@ spec: interval: 1m # check for new OCI artifacts every minute ``` +#### Story 2 + +> As a platform admin I want to automate Helm chart updates based on a semver ranges. +> When a new patch version is available in the container registry, I want Flux to open a PR +> with the version set in the `HelmRelease` manifests. + +Given that charts are stored in container registries, you can use Flux image automation +and patch the chart version in Git, in the same way Flux works for updating container image tags. + +Define an image policy using semver: + +```yaml +apiVersion: image.toolkit.fluxcd.io/v1beta1 +kind: ImagePolicy +metadata: + name: my-app + namespace: default +spec: + imageRepositoryRef: + name: my-app + policy: + semver: + range: 1.0.x +``` + +Then add the policy marker to the `HelmRelease` manifests in Git: + +```yaml +apiVersion: helm.toolkit.fluxcd.io/v2beta1 +kind: HelmRelease +metadata: + name: podinfo + namespace: default +spec: + interval: 60m + chart: + spec: + chart: my-app + version: 1.0.0 # {"$imagepolicy": "default:my-app:tag"} + sourceRef: + kind: HelmRepository + name: ghcr-charts + interval: 1m +``` + ### Alternatives -We could use introduce a new API type e.g. `HelmOCIRepository`. That is considered unpractical, -as there is no benefit for users in having a dedicated kind instead of a `type` filed in the current -`HelmRepository` API. Adding a `type` filed to the spec follows the Flux Bucket API design, where -the same Kind servers different implementations: AWS S3 vs Azure Blob vs Google Storage. +We could introduce a new API type e.g. `HelmRegistry` to hold the reference to auth secret, +as proposed in [#2573](https://github.com/fluxcd/flux2/pull/2573). +That is considered unpractical, as there is no benefit for users in having a dedicated kind instead of +a `type` filed in the current `HelmRepository` API. Adding a `type` filed to the spec follows the Flux +Bucket API design, where the same Kind servers different implementations: AWS S3 vs Azure Blob vs Google Storage. ## Design Details From 20d7d0c78ac4371cc1130df0490004ba8514c180 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Fri, 1 Apr 2022 15:21:10 +0300 Subject: [PATCH 077/818] Add image registry example to story 2 Signed-off-by: Stefan Prodan --- rfcs/helm-oci/README.md | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/rfcs/helm-oci/README.md b/rfcs/helm-oci/README.md index 6d9fc87c..b03fba6c 100644 --- a/rfcs/helm-oci/README.md +++ b/rfcs/helm-oci/README.md @@ -75,7 +75,7 @@ And finally in Flux `HelmReleases`, refer to the ghcr-charts `HelmRepository`: apiVersion: helm.toolkit.fluxcd.io/v2beta1 kind: HelmRelease metadata: - name: podinfo + name: my-app namespace: default spec: interval: 60m @@ -98,10 +98,19 @@ spec: Given that charts are stored in container registries, you can use Flux image automation and patch the chart version in Git, in the same way Flux works for updating container image tags. -Define an image policy using semver: +Define an image registry and a policy for the chart artifact: ```yaml apiVersion: image.toolkit.fluxcd.io/v1beta1 +kind: ImageRepository +metadata: + name: my-app + namespace: default +spec: + image: ghcr.io/my-org/charts/my-app + interval: 1m0s +--- +apiVersion: image.toolkit.fluxcd.io/v1beta1 kind: ImagePolicy metadata: name: my-app @@ -120,7 +129,7 @@ Then add the policy marker to the `HelmRelease` manifests in Git: apiVersion: helm.toolkit.fluxcd.io/v2beta1 kind: HelmRelease metadata: - name: podinfo + name: my-app namespace: default spec: interval: 60m From e06fa24616ec182e8fbe045f616571844523f04e Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Fri, 1 Apr 2022 15:29:50 +0300 Subject: [PATCH 078/818] Add dedicated reconcilers to the design docs Signed-off-by: Stefan Prodan --- rfcs/helm-oci/README.md | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/rfcs/helm-oci/README.md b/rfcs/helm-oci/README.md index b03fba6c..59626250 100644 --- a/rfcs/helm-oci/README.md +++ b/rfcs/helm-oci/README.md @@ -22,7 +22,8 @@ they do today for container images. ### Goals - Add support for fetching Helm charts stored as OCI artifacts with minimal API changes to Flux. -- Make it easy for users to switch from HTTP/S Helm repositories to OCI repositories. +- Make it easy for users to switch from [HTTP/S Helm repositories](https://github.com/helm/helm-www/blob/416fabea6ffab8dc156b6a0c5eb5e8df5f5ef7dc/content/en/docs/topics/chart_repository.md) + to OCI repositories. ### Non-Goals @@ -148,18 +149,23 @@ spec: We could introduce a new API type e.g. `HelmRegistry` to hold the reference to auth secret, as proposed in [#2573](https://github.com/fluxcd/flux2/pull/2573). That is considered unpractical, as there is no benefit for users in having a dedicated kind instead of -a `type` filed in the current `HelmRepository` API. Adding a `type` filed to the spec follows the Flux +a `type` field in the current `HelmRepository` API. Adding a `type` field to the spec follows the Flux Bucket API design, where the same Kind servers different implementations: AWS S3 vs Azure Blob vs Google Storage. ## Design Details -In source-controller we'll add a new predicate for indexing `HelmRepositories` based on the `spec.type` field. +In source-controller we'll add a new predicate for filtering `HelmRepositories` based on the `spec.type` field. -When the `spec.type` field is set to `OCI`, the `HelmRepositoryReconciler` -will set the `HelmRepository` Ready status to `False` if the URL is not prefixed with `oci://`, -otherwise the Ready status will be set to `True`. +The current `HelmRepositoryReconciler` will be renamed to `HelmRepositoryDefaultReconciler`, +it's scope remains unchanged, and it will handle only objects with `type: Default`. + +We'll introduce a new reconciler named `HelmRepositoryOCIReconciler`, that will handle +objects with `type: OCI`. This reconciler will set the `HelmRepository` Ready status to +`False` if the URL is not prefixed with `oci://`, otherwise the Ready status will be set to `True`. + +The current `HelmChartReconciler` will be renamed to `HelmChartDefaultReconciler`, +it's scope remains unchanged, and it will handle only objects that refer to `HelmRepositories` with `type: Default`. -The current `HelmChartReconciler` will use the `HelmRepositories` with `type: Default`. For `type: OCI` we'll introduce a new reconciler `HelmChartOCIReconciler` that uses `oras` to download charts and their dependencies. From 30f977a7cb275b57fb23628b609d4170aa483477 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 13 Apr 2022 10:27:11 +0300 Subject: [PATCH 079/818] Assign RFC-0002 to Helm OCI proposal Signed-off-by: Stefan Prodan --- rfcs/{helm-oci => 0002-helm-oci}/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) rename rfcs/{helm-oci => 0002-helm-oci}/README.md (98%) diff --git a/rfcs/helm-oci/README.md b/rfcs/0002-helm-oci/README.md similarity index 98% rename from rfcs/helm-oci/README.md rename to rfcs/0002-helm-oci/README.md index 59626250..878055fc 100644 --- a/rfcs/helm-oci/README.md +++ b/rfcs/0002-helm-oci/README.md @@ -1,10 +1,10 @@ -# RFC-xxxx Flux OCI support for Helm +# RFC-0002 Flux OCI support for Helm -**Status:** provisional +**Status:** implementable **Creation date:** 2022-03-30 -**Last update:** 2022-03-30 +**Last update:** 2022-04-13 ## Summary From 2955cd70a82a94a8ef4755a07a912a6de62a3451 Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Tue, 19 Apr 2022 15:45:35 +0000 Subject: [PATCH 080/818] Update toolkit components - helm-controller to v0.20.0 https://github.com/fluxcd/helm-controller/blob/v0.20.0/CHANGELOG.md - kustomize-controller to v0.24.0 https://github.com/fluxcd/kustomize-controller/blob/v0.24.0/CHANGELOG.md - source-controller to v0.24.0 https://github.com/fluxcd/source-controller/blob/v0.24.0/CHANGELOG.md - notification-controller to v0.23.3 https://github.com/fluxcd/notification-controller/blob/v0.23.3/CHANGELOG.md - image-reflector-controller to v0.17.2 https://github.com/fluxcd/image-reflector-controller/blob/v0.17.2/CHANGELOG.md - image-automation-controller to v0.22.0 https://github.com/fluxcd/image-automation-controller/blob/v0.22.0/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 28 ++++----- go.sum | 57 ++++++++++--------- .../bases/helm-controller/kustomization.yaml | 4 +- .../kustomization.yaml | 4 +- .../kustomization.yaml | 4 +- .../kustomize-controller/kustomization.yaml | 4 +- .../kustomization.yaml | 4 +- .../source-controller/kustomization.yaml | 4 +- manifests/crds/kustomization.yaml | 12 ++-- 9 files changed, 63 insertions(+), 58 deletions(-) diff --git a/go.mod b/go.mod index 670a392f..bebec933 100644 --- a/go.mod +++ b/go.mod @@ -7,19 +7,19 @@ require ( github.com/ProtonMail/go-crypto v0.0.0-20220113124808-70ae35bab23f github.com/cyphar/filepath-securejoin v0.2.3 github.com/fluxcd/go-git-providers v0.5.4 - github.com/fluxcd/helm-controller/api v0.18.2 - github.com/fluxcd/image-automation-controller/api v0.21.3 - github.com/fluxcd/image-reflector-controller/api v0.17.1 - github.com/fluxcd/kustomize-controller/api v0.22.3 - github.com/fluxcd/notification-controller/api v0.23.2 - github.com/fluxcd/pkg/apis/meta v0.12.1 + github.com/fluxcd/helm-controller/api v0.20.0 + github.com/fluxcd/image-automation-controller/api v0.22.0 + github.com/fluxcd/image-reflector-controller/api v0.17.2 + github.com/fluxcd/kustomize-controller/api v0.24.0 + github.com/fluxcd/notification-controller/api v0.23.3 + github.com/fluxcd/pkg/apis/meta v0.12.2 github.com/fluxcd/pkg/kustomize v0.1.0 github.com/fluxcd/pkg/runtime v0.13.2 github.com/fluxcd/pkg/ssa v0.15.1 github.com/fluxcd/pkg/ssh v0.3.2 github.com/fluxcd/pkg/untar v0.1.0 github.com/fluxcd/pkg/version v0.1.0 - github.com/fluxcd/source-controller/api v0.22.5 + github.com/fluxcd/source-controller/api v0.24.0 github.com/go-git/go-git/v5 v5.4.2 github.com/gonvenience/bunt v1.3.3 github.com/gonvenience/ytbx v1.4.4 @@ -36,14 +36,14 @@ require ( github.com/theckman/yacspin v0.13.12 golang.org/x/crypto v0.0.0-20220321153916-2c7772ba3064 golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 - k8s.io/api v0.23.4 - k8s.io/apiextensions-apiserver v0.23.4 - k8s.io/apimachinery v0.23.4 + k8s.io/api v0.23.5 + k8s.io/apiextensions-apiserver v0.23.5 + k8s.io/apimachinery v0.23.5 k8s.io/cli-runtime v0.23.4 - k8s.io/client-go v0.23.4 + k8s.io/client-go v0.23.5 k8s.io/kubectl v0.23.4 sigs.k8s.io/cli-utils v0.29.3 - sigs.k8s.io/controller-runtime v0.11.1 + sigs.k8s.io/controller-runtime v0.11.2 sigs.k8s.io/kustomize/api v0.11.2 sigs.k8s.io/kustomize/kyaml v0.13.3 sigs.k8s.io/yaml v1.3.0 @@ -76,7 +76,7 @@ require ( github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d // indirect github.com/fatih/color v1.13.0 // indirect github.com/fluxcd/pkg/apis/acl v0.0.3 // indirect - github.com/fluxcd/pkg/apis/kustomize v0.3.2 // indirect + github.com/fluxcd/pkg/apis/kustomize v0.3.3 // indirect github.com/form3tech-oss/jwt-go v3.2.3+incompatible // indirect github.com/fsnotify/fsnotify v1.5.1 // indirect github.com/fvbommel/sortorder v1.0.1 // indirect @@ -159,7 +159,7 @@ require ( gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect - k8s.io/component-base v0.23.4 // indirect + k8s.io/component-base v0.23.5 // indirect k8s.io/klog/v2 v2.50.0 // indirect k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65 // indirect k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9 // indirect diff --git a/go.sum b/go.sum index 2748f000..73dbd4e4 100644 --- a/go.sum +++ b/go.sum @@ -375,22 +375,22 @@ github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYF github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fluxcd/go-git-providers v0.5.4 h1:MnByjsmXa8rMt2hTmhmtbocq7YIsTlwZKrj9lAsob4Q= github.com/fluxcd/go-git-providers v0.5.4/go.mod h1:4jTHTmSx3rFGnG78KUVgFYeG6vWFnKwUSr2mi31tvp8= -github.com/fluxcd/helm-controller/api v0.18.2 h1:zXyu9q4B/J7ouOVl4nyxYHPVwhAs3bwWa4lgP7SQmfo= -github.com/fluxcd/helm-controller/api v0.18.2/go.mod h1:+P3I9VV/4IMryjj9BIGtdZnxdCQfBXExWTv8Z9DF33o= -github.com/fluxcd/image-automation-controller/api v0.21.3 h1:hKqmc03oEWV8ACmO5NCYfamfl+jxEH0QxUZzrGyLcFI= -github.com/fluxcd/image-automation-controller/api v0.21.3/go.mod h1:zyo56fYxvAKQLHXCtEPiFBWXZAe949vAZruNwS+4K8w= -github.com/fluxcd/image-reflector-controller/api v0.17.1 h1:0eWE26PmCo3ZQBnDkNA6wiHhAEsTtUG4oz59enqIzsQ= -github.com/fluxcd/image-reflector-controller/api v0.17.1/go.mod h1:Lg8A+MUcke0Orp6C6UQkf9I3pc8M/B3XS3TOI+YxVBY= -github.com/fluxcd/kustomize-controller/api v0.22.3 h1:zCnT54qlQIQnWkcgnYsBPjxXannVnQWcoGgrUADNoAY= -github.com/fluxcd/kustomize-controller/api v0.22.3/go.mod h1:Kq2kKnU6Z9CiZFLpHTMSLvpgWiT/e03NRb1wc8W+24E= -github.com/fluxcd/notification-controller/api v0.23.2 h1:aKe9dHsOx00ZqafmZ+CfJNYLjAeQLjodzdW3qzEVl40= -github.com/fluxcd/notification-controller/api v0.23.2/go.mod h1:0QFnW7CrYl5ItHNPpstxU42Pmb5/Qepx8FFjVxcZqIk= +github.com/fluxcd/helm-controller/api v0.20.0 h1:APPF5IH00VXz+hx5vdUsVyj2w6hQ9W8Uz2CP7x5jYbA= +github.com/fluxcd/helm-controller/api v0.20.0/go.mod h1:D1qkXPYATzhNw9tU4jP+Jr3XBPvAYMolx8MfbRhHS2g= +github.com/fluxcd/image-automation-controller/api v0.22.0 h1:k9R8KN2kcFUaSmYcprRgdTihxIDBNgJM2/Y5sxzFU3E= +github.com/fluxcd/image-automation-controller/api v0.22.0/go.mod h1:wnWx89ol/6xIj85rCxsji3aP70mRHFt5sR/WcEjY4m4= +github.com/fluxcd/image-reflector-controller/api v0.17.2 h1:QQl9YBhz+7lwKejG92StCa9Vxswph6+7O7TmkVNNoSw= +github.com/fluxcd/image-reflector-controller/api v0.17.2/go.mod h1:PwmjD9DeA6yBdGnMVzUB+5n2hVqsKTGroFlN/oR4RkI= +github.com/fluxcd/kustomize-controller/api v0.24.0 h1:ZMqAH/tH5NzBcZbMX8OPATyXmxhg0Ci5jfj4gG8phy8= +github.com/fluxcd/kustomize-controller/api v0.24.0/go.mod h1:fzzyD5x2SRs/9XfZEVkQ89IDKykG0ugjMMrI7h5hvR8= +github.com/fluxcd/notification-controller/api v0.23.3 h1:Pl0l2nGngy3QrWOkPW+rx4ED9r5dGQWhhpBoKrxrdtg= +github.com/fluxcd/notification-controller/api v0.23.3/go.mod h1:TbXfm58an42g9DwcaYMBfuli1mbGLaUdmewjLGUTIXo= github.com/fluxcd/pkg/apis/acl v0.0.3 h1:Lw0ZHdpnO4G7Zy9KjrzwwBmDZQuy4qEjaU/RvA6k1lc= github.com/fluxcd/pkg/apis/acl v0.0.3/go.mod h1:XPts6lRJ9C9fIF9xVWofmQwftvhY25n1ps7W9xw0XLU= -github.com/fluxcd/pkg/apis/kustomize v0.3.2 h1:ULoAwOOekHf5cy6mYIwL+K6v8/cfcNVVbwfIPgWjdjg= -github.com/fluxcd/pkg/apis/kustomize v0.3.2/go.mod h1:p8iAH5TeqMBnnxkkpCNNDvWYfKlNRx89a6WKOo+hJHA= -github.com/fluxcd/pkg/apis/meta v0.12.1 h1:m5PfKAqbqWBvGp9+JRj1sv+xNkGsHwUVf+3rJ8wm6SE= -github.com/fluxcd/pkg/apis/meta v0.12.1/go.mod h1:f8YVt70/KAhqzZ7xxhjvqyzKubOYx2pAbakb/FfCEg8= +github.com/fluxcd/pkg/apis/kustomize v0.3.3 h1:bPN29SdVzWl0yhgivuf/83IAe2R6vUuDVcB3LzyVU8E= +github.com/fluxcd/pkg/apis/kustomize v0.3.3/go.mod h1:5HTOFZfQFVMMqR2rvuxpbZhpb+sQpcTT6RCQZOhjFzA= +github.com/fluxcd/pkg/apis/meta v0.12.2 h1:AiKAZxLyPtV150y63WC+mL1Qm4x5qWQmW6r4mLy1i8c= +github.com/fluxcd/pkg/apis/meta v0.12.2/go.mod h1:Z26X5uTU5LxAyWETGueRQY7TvdPaGfKU7Wye9bdUlho= github.com/fluxcd/pkg/kustomize v0.1.0 h1:koptEkMQoVSdEmOvOPg6EupHPQmfuAV2kgddN2ijelI= github.com/fluxcd/pkg/kustomize v0.1.0/go.mod h1:m4R8reRl16zf0aYJTy1uOQUQfM+/KfVaqjwTlAPcYZ4= github.com/fluxcd/pkg/runtime v0.13.2 h1:6jkQQUbp17WxHsbozlJFCvHmOS4JIB+yB20CdCd8duE= @@ -403,8 +403,8 @@ github.com/fluxcd/pkg/untar v0.1.0 h1:k97V/xV5hFrAkIkVPuv5AVhyxh1ZzzAKba/lbDfGo6 github.com/fluxcd/pkg/untar v0.1.0/go.mod h1:aGswNyzB1mlz/T/kpOS58mITBMxMKc9tlJBH037A2HY= github.com/fluxcd/pkg/version v0.1.0 h1:v+SmCanmCB5Tj2Cx9TXlj+kNRfPGbAvirkeqsp7ZEAQ= github.com/fluxcd/pkg/version v0.1.0/go.mod h1:V7Z/w8dxLQzv0FHqa5ox5TeyOd2zOd49EeuWFgnwyj4= -github.com/fluxcd/source-controller/api v0.22.5 h1:EyqQbpzS8Pg1dLqsSho1lFWsb3KWKvK+cKtm35pSbF8= -github.com/fluxcd/source-controller/api v0.22.5/go.mod h1:Vb13q9Pq+1IW/sJUZn/RSb7IU5WT86Er6uCFPCFm9L4= +github.com/fluxcd/source-controller/api v0.24.0 h1:VIpyMX8jrPKGhOsFOzaxYeufi/gq5GZwcoeG8+QqrgE= +github.com/fluxcd/source-controller/api v0.24.0/go.mod h1:+raHSQaSGlk1PqgLc0joVk1KTnf1K/lQcgxdEdZ/mk8= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/form3tech-oss/jwt-go v3.2.3+incompatible h1:7ZaBxOI7TMoYBfyA3cQHErNNyAWIKUMIwqxEtgHOs5c= @@ -1680,32 +1680,37 @@ honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9 k8s.io/api v0.20.1/go.mod h1:KqwcCVogGxQY3nBlRpwt+wpAMF/KjaCc7RpywacvqUo= k8s.io/api v0.20.4/go.mod h1:++lNL1AJMkDymriNniQsWRkMDzRaX2Y/POTUi8yvqYQ= k8s.io/api v0.20.6/go.mod h1:X9e8Qag6JV/bL5G6bU8sdVRltWKmdHsFUGS3eVndqE8= -k8s.io/api v0.23.4 h1:85gnfXQOWbJa1SiWGpE9EEtHs0UVvDyIsSMpEtl2D4E= k8s.io/api v0.23.4/go.mod h1:i77F4JfyNNrhOjZF7OwwNJS5Y1S9dpwvb9iYRYRczfI= -k8s.io/apiextensions-apiserver v0.23.4 h1:AFDUEu/yEf0YnuZhqhIFhPLPhhcQQVuR1u3WCh0rveU= -k8s.io/apiextensions-apiserver v0.23.4/go.mod h1:TWYAKymJx7nLMxWCgWm2RYGXHrGlVZnxIlGnvtfYu+g= +k8s.io/api v0.23.5 h1:zno3LUiMubxD/V1Zw3ijyKO3wxrhbUF1Ck+VjBvfaoA= +k8s.io/api v0.23.5/go.mod h1:Na4XuKng8PXJ2JsploYYrivXrINeTaycCGcYgF91Xm8= +k8s.io/apiextensions-apiserver v0.23.5 h1:5SKzdXyvIJKu+zbfPc3kCbWpbxi+O+zdmAJBm26UJqI= +k8s.io/apiextensions-apiserver v0.23.5/go.mod h1:ntcPWNXS8ZPKN+zTXuzYMeg731CP0heCTl6gYBxLcuQ= k8s.io/apimachinery v0.20.1/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= k8s.io/apimachinery v0.20.4/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= k8s.io/apimachinery v0.20.6/go.mod h1:ejZXtW1Ra6V1O5H8xPBGz+T3+4gfkTCeExAHKU57MAc= -k8s.io/apimachinery v0.23.4 h1:fhnuMd/xUL3Cjfl64j5ULKZ1/J9n8NuQEgNL+WXWfdM= k8s.io/apimachinery v0.23.4/go.mod h1:BEuFMMBaIbcOqVIJqNZJXGFTP4W6AycEpb5+m/97hrM= +k8s.io/apimachinery v0.23.5 h1:Va7dwhp8wgkUPWsEXk6XglXWU4IKYLKNlv8VkX7SDM0= +k8s.io/apimachinery v0.23.5/go.mod h1:BEuFMMBaIbcOqVIJqNZJXGFTP4W6AycEpb5+m/97hrM= k8s.io/apiserver v0.20.1/go.mod h1:ro5QHeQkgMS7ZGpvf4tSMx6bBOgPfE+f52KwvXfScaU= k8s.io/apiserver v0.20.4/go.mod h1:Mc80thBKOyy7tbvFtB4kJv1kbdD0eIH8k8vianJcbFM= k8s.io/apiserver v0.20.6/go.mod h1:QIJXNt6i6JB+0YQRNcS0hdRHJlMhflFmsBDeSgT1r8Q= -k8s.io/apiserver v0.23.4/go.mod h1:A6l/ZcNtxGfPSqbFDoxxOjEjSKBaQmE+UTveOmMkpNc= +k8s.io/apiserver v0.23.5/go.mod h1:7wvMtGJ42VRxzgVI7jkbKvMbuCbVbgsWFT7RyXiRNTw= k8s.io/cli-runtime v0.23.4 h1:C3AFQmo4TK4dlVPLOI62gtHEHu0OfA2Cp4UVRZ1JXns= k8s.io/cli-runtime v0.23.4/go.mod h1:7KywUNTUibmHPqmpDFuRO1kc9RhsufHv2lkjCm2YZyM= k8s.io/client-go v0.20.1/go.mod h1:/zcHdt1TeWSd5HoUe6elJmHSQ6uLLgp4bIJHVEuy+/Y= k8s.io/client-go v0.20.4/go.mod h1:LiMv25ND1gLUdBeYxBIwKpkSC5IsozMMmOOeSJboP+k= k8s.io/client-go v0.20.6/go.mod h1:nNQMnOvEUEsOzRRFIIkdmYOjAZrC8bgq0ExboWSU1I0= -k8s.io/client-go v0.23.4 h1:YVWvPeerA2gpUudLelvsolzH7c2sFoXXR5wM/sWqNFU= k8s.io/client-go v0.23.4/go.mod h1:PKnIL4pqLuvYUK1WU7RLTMYKPiIh7MYShLshtRY9cj0= +k8s.io/client-go v0.23.5 h1:zUXHmEuqx0RY4+CsnkOn5l0GU+skkRXKGJrhmE2SLd8= +k8s.io/client-go v0.23.5/go.mod h1:flkeinTO1CirYgzMPRWxUCnV0G4Fbu2vLhYCObnt/r4= k8s.io/code-generator v0.23.4/go.mod h1:S0Q1JVA+kSzTI1oUvbKAxZY/DYbA/ZUb4Uknog12ETk= +k8s.io/code-generator v0.23.5/go.mod h1:S0Q1JVA+kSzTI1oUvbKAxZY/DYbA/ZUb4Uknog12ETk= k8s.io/component-base v0.20.1/go.mod h1:guxkoJnNoh8LNrbtiQOlyp2Y2XFCZQmrcg2n/DeYNLk= k8s.io/component-base v0.20.4/go.mod h1:t4p9EdiagbVCJKrQ1RsA5/V4rFQNDfRlevJajlGwgjI= k8s.io/component-base v0.20.6/go.mod h1:6f1MPBAeI+mvuts3sIdtpjljHWBQ2cIy38oBIWMYnrM= -k8s.io/component-base v0.23.4 h1:SziYh48+QKxK+ykJ3Ejqd98XdZIseVBG7sBaNLPqy6M= k8s.io/component-base v0.23.4/go.mod h1:8o3Gg8i2vnUXGPOwciiYlkSaZT+p+7gA9Scoz8y4W4E= +k8s.io/component-base v0.23.5 h1:8qgP5R6jG1BBSXmRYW+dsmitIrpk8F/fPEvgDenMCCE= +k8s.io/component-base v0.23.5/go.mod h1:c5Nq44KZyt1aLl0IpHX82fhsn84Sb0jjzwjpcA42bY0= k8s.io/component-helpers v0.23.4/go.mod h1:1Pl7L4zukZ054ElzRbvmZ1FJIU8roBXFOeRFu8zipa4= k8s.io/cri-api v0.17.3/go.mod h1:X1sbHmuXhwaHs9xxYffLqJogVsnI+f6cPRcgPel7ywM= k8s.io/cri-api v0.20.1/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI= @@ -1737,11 +1742,11 @@ rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.14/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.15/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= -sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.27/go.mod h1:tq2nT0Kx7W+/f2JVE+zxYtUhdjuELJkVpNz+x/QN5R4= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.30/go.mod h1:fEO7lRTdivWO2qYVCVG7dEADOMo/MLDCVr8So2g88Uw= sigs.k8s.io/cli-utils v0.29.3 h1:4QRB9ayCd5pd9M/D3q2KQgr+nYrvRaw3suW+rcOutvk= sigs.k8s.io/cli-utils v0.29.3/go.mod h1:WDVRa5/eQBKntG++uyKdyT+xU7MLdCR4XsgseqL5uX4= -sigs.k8s.io/controller-runtime v0.11.1 h1:7YIHT2QnHJArj/dk9aUkYhfqfK5cIxPOX5gPECfdZLU= -sigs.k8s.io/controller-runtime v0.11.1/go.mod h1:KKwLiTooNGu+JmLZGn9Sl3Gjmfj66eMbCQznLP5zcqA= +sigs.k8s.io/controller-runtime v0.11.2 h1:H5GTxQl0Mc9UjRJhORusqfJCIjBO8UtUxGggCwL1rLA= +sigs.k8s.io/controller-runtime v0.11.2/go.mod h1:P6QCzrEjLaZGqHsfd+os7JQ+WFZhvB8MRFsn4dWF7O4= sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6/go.mod h1:p4QtZmO4uMYipTQNzagwnNoseA6OxSUutVw05NhYDRs= sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2 h1:kDi4JBNAsJWfz1aEXhO8Jg87JJaPNLh5tIzYHgStQ9Y= sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2/go.mod h1:B+TnT182UBxE84DiCz4CVE26eOSDAeYCpfDnC2kdKMY= diff --git a/manifests/bases/helm-controller/kustomization.yaml b/manifests/bases/helm-controller/kustomization.yaml index fe70492a..ca94ba9e 100644 --- a/manifests/bases/helm-controller/kustomization.yaml +++ b/manifests/bases/helm-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/helm-controller/releases/download/v0.18.2/helm-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.18.2/helm-controller.deployment.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.20.0/helm-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.20.0/helm-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/image-automation-controller/kustomization.yaml b/manifests/bases/image-automation-controller/kustomization.yaml index 715b7605..09bf39ae 100644 --- a/manifests/bases/image-automation-controller/kustomization.yaml +++ b/manifests/bases/image-automation-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.21.3/image-automation-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.21.3/image-automation-controller.deployment.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.22.0/image-automation-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.22.0/image-automation-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/image-reflector-controller/kustomization.yaml b/manifests/bases/image-reflector-controller/kustomization.yaml index 7b3ae987..ff263902 100644 --- a/manifests/bases/image-reflector-controller/kustomization.yaml +++ b/manifests/bases/image-reflector-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.17.1/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.17.1/image-reflector-controller.deployment.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.17.2/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.17.2/image-reflector-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/kustomize-controller/kustomization.yaml b/manifests/bases/kustomize-controller/kustomization.yaml index 2be3a7ef..a03ff953 100644 --- a/manifests/bases/kustomize-controller/kustomization.yaml +++ b/manifests/bases/kustomize-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.22.3/kustomize-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.22.3/kustomize-controller.deployment.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.24.0/kustomize-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.24.0/kustomize-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/notification-controller/kustomization.yaml b/manifests/bases/notification-controller/kustomization.yaml index 2d9c48e2..f15de171 100644 --- a/manifests/bases/notification-controller/kustomization.yaml +++ b/manifests/bases/notification-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/notification-controller/releases/download/v0.23.2/notification-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v0.23.2/notification-controller.deployment.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.23.3/notification-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.23.3/notification-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index 39f822db..4afd6fc1 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.22.5/source-controller.crds.yaml -- https://github.com/fluxcd/source-controller/releases/download/v0.22.5/source-controller.deployment.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.24.0/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.24.0/source-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index fac9d890..4b54afa4 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -1,9 +1,9 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.22.5/source-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.22.3/kustomize-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.18.2/helm-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v0.23.2/notification-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.17.1/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.21.3/image-automation-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.24.0/source-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.24.0/kustomize-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.20.0/helm-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.23.3/notification-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.17.2/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.22.0/image-automation-controller.crds.yaml From 6bbbf161406ec2c54101bd732311cb905be77afb Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Tue, 19 Apr 2022 18:23:42 +0200 Subject: [PATCH 081/818] tests/azure: update dependencies This does not include an update of `github.com/hashicorp/terraform-exec` to `v0.16.1`, as it contains a breaking change. `tfinstall` has been removed and needs to be replaced with `github.com/hashicorp/hc-install`. - github.com/fluxcd/helm-controller/api to v0.20.0 - github.com/fluxcd/image-automation-controller/api to v0.22.0 - github.com/fluxcd/image-reflector-controller/api to v0.17.2 - github.com/fluxcd/kustomize-controller/api to v0.24.0 - github.com/fluxcd/notification-controller/api to v0.23.3 - github.com/fluxcd/pkg/apis/meta to v0.12.2 - github.com/fluxcd/pkg/runtime to v0.14.1 - github.com/fluxcd/source-controller/api to v0.24.0 - k8s.io/api to v0.23.5 - k8s.io/apimachinery to v0.23.5 - k8s.io/client-go to v0.23.5 - sigs.k8s.io/controller-runtime to v0.11.2 Signed-off-by: Hidde Beydals --- tests/azure/go.mod | 30 ++++++++++----------- tests/azure/go.sum | 66 +++++++++++++++++++++++----------------------- 2 files changed, 48 insertions(+), 48 deletions(-) diff --git a/tests/azure/go.mod b/tests/azure/go.mod index 7ee402ea..ffb42bbe 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -4,24 +4,24 @@ go 1.17 require ( github.com/Azure/azure-event-hubs-go/v3 v3.3.17 - github.com/fluxcd/helm-controller/api v0.18.1 - github.com/fluxcd/image-automation-controller/api v0.21.1 - github.com/fluxcd/image-reflector-controller/api v0.17.1 - github.com/fluxcd/kustomize-controller/api v0.22.1 - github.com/fluxcd/notification-controller/api v0.23.1 - github.com/fluxcd/pkg/apis/meta v0.12.1 - github.com/fluxcd/pkg/runtime v0.13.2 - github.com/fluxcd/source-controller/api v0.22.2 + github.com/fluxcd/helm-controller/api v0.20.0 + github.com/fluxcd/image-automation-controller/api v0.22.0 + github.com/fluxcd/image-reflector-controller/api v0.17.2 + github.com/fluxcd/kustomize-controller/api v0.24.0 + github.com/fluxcd/notification-controller/api v0.23.3 + github.com/fluxcd/pkg/apis/meta v0.12.2 + github.com/fluxcd/pkg/runtime v0.14.1 + github.com/fluxcd/source-controller/api v0.24.0 github.com/hashicorp/terraform-exec v0.15.0 github.com/libgit2/git2go/v31 v31.7.9 github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 github.com/stretchr/testify v1.7.1 github.com/whilp/git-urls v1.0.0 go.uber.org/multierr v1.8.0 - k8s.io/api v0.23.4 - k8s.io/apimachinery v0.23.4 - k8s.io/client-go v0.23.4 - sigs.k8s.io/controller-runtime v0.11.1 + k8s.io/api v0.23.5 + k8s.io/apimachinery v0.23.5 + k8s.io/client-go v0.23.5 + sigs.k8s.io/controller-runtime v0.11.2 ) require ( @@ -46,7 +46,7 @@ require ( github.com/devigned/tab v0.1.1 // indirect github.com/evanphx/json-patch v4.12.0+incompatible // indirect github.com/fluxcd/pkg/apis/acl v0.0.3 // indirect - github.com/fluxcd/pkg/apis/kustomize v0.3.2 // indirect + github.com/fluxcd/pkg/apis/kustomize v0.3.3 // indirect github.com/form3tech-oss/jwt-go v3.2.3+incompatible // indirect github.com/fsnotify/fsnotify v1.5.1 // indirect github.com/go-logr/logr v1.2.2 // indirect @@ -111,8 +111,8 @@ require ( gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect - k8s.io/apiextensions-apiserver v0.23.4 // indirect - k8s.io/component-base v0.23.4 // indirect + k8s.io/apiextensions-apiserver v0.23.5 // indirect + k8s.io/component-base v0.23.5 // indirect k8s.io/klog/v2 v2.50.0 // indirect k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65 // indirect k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9 // indirect diff --git a/tests/azure/go.sum b/tests/azure/go.sum index 78b54ea3..8f4b264b 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -192,26 +192,26 @@ github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/fluxcd/helm-controller/api v0.18.1 h1:1DEHG56g6F2u6jVpxlaJyMtSujFVOiOrUNYLZ2l7BE0= -github.com/fluxcd/helm-controller/api v0.18.1/go.mod h1:+P3I9VV/4IMryjj9BIGtdZnxdCQfBXExWTv8Z9DF33o= -github.com/fluxcd/image-automation-controller/api v0.21.1 h1:qwcIOsjHIURMiUICoBfSaY8P7PmSsnLUMFkThr3F5HY= -github.com/fluxcd/image-automation-controller/api v0.21.1/go.mod h1:QWVMs4MElbyYHCwSEw5D6/aecbxcSwS4ronGWlPPWC4= -github.com/fluxcd/image-reflector-controller/api v0.17.1 h1:0eWE26PmCo3ZQBnDkNA6wiHhAEsTtUG4oz59enqIzsQ= -github.com/fluxcd/image-reflector-controller/api v0.17.1/go.mod h1:Lg8A+MUcke0Orp6C6UQkf9I3pc8M/B3XS3TOI+YxVBY= -github.com/fluxcd/kustomize-controller/api v0.22.1 h1:PUO1DQsZjnskOlHEwUjUo6Hxd9hjGnocDhiaVrwp28w= -github.com/fluxcd/kustomize-controller/api v0.22.1/go.mod h1:Kq2kKnU6Z9CiZFLpHTMSLvpgWiT/e03NRb1wc8W+24E= -github.com/fluxcd/notification-controller/api v0.23.1 h1:Bef4+AbuNXS+7M5bWjOKXBDQT5OU1xVM9VbZWFYiRp0= -github.com/fluxcd/notification-controller/api v0.23.1/go.mod h1:0QFnW7CrYl5ItHNPpstxU42Pmb5/Qepx8FFjVxcZqIk= +github.com/fluxcd/helm-controller/api v0.20.0 h1:APPF5IH00VXz+hx5vdUsVyj2w6hQ9W8Uz2CP7x5jYbA= +github.com/fluxcd/helm-controller/api v0.20.0/go.mod h1:D1qkXPYATzhNw9tU4jP+Jr3XBPvAYMolx8MfbRhHS2g= +github.com/fluxcd/image-automation-controller/api v0.22.0 h1:k9R8KN2kcFUaSmYcprRgdTihxIDBNgJM2/Y5sxzFU3E= +github.com/fluxcd/image-automation-controller/api v0.22.0/go.mod h1:wnWx89ol/6xIj85rCxsji3aP70mRHFt5sR/WcEjY4m4= +github.com/fluxcd/image-reflector-controller/api v0.17.2 h1:QQl9YBhz+7lwKejG92StCa9Vxswph6+7O7TmkVNNoSw= +github.com/fluxcd/image-reflector-controller/api v0.17.2/go.mod h1:PwmjD9DeA6yBdGnMVzUB+5n2hVqsKTGroFlN/oR4RkI= +github.com/fluxcd/kustomize-controller/api v0.24.0 h1:ZMqAH/tH5NzBcZbMX8OPATyXmxhg0Ci5jfj4gG8phy8= +github.com/fluxcd/kustomize-controller/api v0.24.0/go.mod h1:fzzyD5x2SRs/9XfZEVkQ89IDKykG0ugjMMrI7h5hvR8= +github.com/fluxcd/notification-controller/api v0.23.3 h1:Pl0l2nGngy3QrWOkPW+rx4ED9r5dGQWhhpBoKrxrdtg= +github.com/fluxcd/notification-controller/api v0.23.3/go.mod h1:TbXfm58an42g9DwcaYMBfuli1mbGLaUdmewjLGUTIXo= github.com/fluxcd/pkg/apis/acl v0.0.3 h1:Lw0ZHdpnO4G7Zy9KjrzwwBmDZQuy4qEjaU/RvA6k1lc= github.com/fluxcd/pkg/apis/acl v0.0.3/go.mod h1:XPts6lRJ9C9fIF9xVWofmQwftvhY25n1ps7W9xw0XLU= -github.com/fluxcd/pkg/apis/kustomize v0.3.2 h1:ULoAwOOekHf5cy6mYIwL+K6v8/cfcNVVbwfIPgWjdjg= -github.com/fluxcd/pkg/apis/kustomize v0.3.2/go.mod h1:p8iAH5TeqMBnnxkkpCNNDvWYfKlNRx89a6WKOo+hJHA= -github.com/fluxcd/pkg/apis/meta v0.12.1 h1:m5PfKAqbqWBvGp9+JRj1sv+xNkGsHwUVf+3rJ8wm6SE= -github.com/fluxcd/pkg/apis/meta v0.12.1/go.mod h1:f8YVt70/KAhqzZ7xxhjvqyzKubOYx2pAbakb/FfCEg8= -github.com/fluxcd/pkg/runtime v0.13.2 h1:6jkQQUbp17WxHsbozlJFCvHmOS4JIB+yB20CdCd8duE= -github.com/fluxcd/pkg/runtime v0.13.2/go.mod h1:dzWNKqFzFXeittbpFcJzR3cdC9CWlbzw+pNOgaVvF/0= -github.com/fluxcd/source-controller/api v0.22.2 h1:1TSCa4qLKDstPpXQoaz5xiLER2y8xflpCXKPxYPFGPY= -github.com/fluxcd/source-controller/api v0.22.2/go.mod h1:Vb13q9Pq+1IW/sJUZn/RSb7IU5WT86Er6uCFPCFm9L4= +github.com/fluxcd/pkg/apis/kustomize v0.3.3 h1:bPN29SdVzWl0yhgivuf/83IAe2R6vUuDVcB3LzyVU8E= +github.com/fluxcd/pkg/apis/kustomize v0.3.3/go.mod h1:5HTOFZfQFVMMqR2rvuxpbZhpb+sQpcTT6RCQZOhjFzA= +github.com/fluxcd/pkg/apis/meta v0.12.2 h1:AiKAZxLyPtV150y63WC+mL1Qm4x5qWQmW6r4mLy1i8c= +github.com/fluxcd/pkg/apis/meta v0.12.2/go.mod h1:Z26X5uTU5LxAyWETGueRQY7TvdPaGfKU7Wye9bdUlho= +github.com/fluxcd/pkg/runtime v0.14.1 h1:ZbS3RzR+f+wu1e6Y7GoCxY9PFZkOgX6/gL7Enr75CY0= +github.com/fluxcd/pkg/runtime v0.14.1/go.mod h1:eS4378ydLlWPt2fFjcrAAnJegGJNj3Q/iqYZqjBeWlM= +github.com/fluxcd/source-controller/api v0.24.0 h1:VIpyMX8jrPKGhOsFOzaxYeufi/gq5GZwcoeG8+QqrgE= +github.com/fluxcd/source-controller/api v0.24.0/go.mod h1:+raHSQaSGlk1PqgLc0joVk1KTnf1K/lQcgxdEdZ/mk8= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/form3tech-oss/jwt-go v3.2.3+incompatible h1:7ZaBxOI7TMoYBfyA3cQHErNNyAWIKUMIwqxEtgHOs5c= @@ -1106,18 +1106,18 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -k8s.io/api v0.23.4 h1:85gnfXQOWbJa1SiWGpE9EEtHs0UVvDyIsSMpEtl2D4E= -k8s.io/api v0.23.4/go.mod h1:i77F4JfyNNrhOjZF7OwwNJS5Y1S9dpwvb9iYRYRczfI= -k8s.io/apiextensions-apiserver v0.23.4 h1:AFDUEu/yEf0YnuZhqhIFhPLPhhcQQVuR1u3WCh0rveU= -k8s.io/apiextensions-apiserver v0.23.4/go.mod h1:TWYAKymJx7nLMxWCgWm2RYGXHrGlVZnxIlGnvtfYu+g= -k8s.io/apimachinery v0.23.4 h1:fhnuMd/xUL3Cjfl64j5ULKZ1/J9n8NuQEgNL+WXWfdM= -k8s.io/apimachinery v0.23.4/go.mod h1:BEuFMMBaIbcOqVIJqNZJXGFTP4W6AycEpb5+m/97hrM= -k8s.io/apiserver v0.23.4/go.mod h1:A6l/ZcNtxGfPSqbFDoxxOjEjSKBaQmE+UTveOmMkpNc= -k8s.io/client-go v0.23.4 h1:YVWvPeerA2gpUudLelvsolzH7c2sFoXXR5wM/sWqNFU= -k8s.io/client-go v0.23.4/go.mod h1:PKnIL4pqLuvYUK1WU7RLTMYKPiIh7MYShLshtRY9cj0= -k8s.io/code-generator v0.23.4/go.mod h1:S0Q1JVA+kSzTI1oUvbKAxZY/DYbA/ZUb4Uknog12ETk= -k8s.io/component-base v0.23.4 h1:SziYh48+QKxK+ykJ3Ejqd98XdZIseVBG7sBaNLPqy6M= -k8s.io/component-base v0.23.4/go.mod h1:8o3Gg8i2vnUXGPOwciiYlkSaZT+p+7gA9Scoz8y4W4E= +k8s.io/api v0.23.5 h1:zno3LUiMubxD/V1Zw3ijyKO3wxrhbUF1Ck+VjBvfaoA= +k8s.io/api v0.23.5/go.mod h1:Na4XuKng8PXJ2JsploYYrivXrINeTaycCGcYgF91Xm8= +k8s.io/apiextensions-apiserver v0.23.5 h1:5SKzdXyvIJKu+zbfPc3kCbWpbxi+O+zdmAJBm26UJqI= +k8s.io/apiextensions-apiserver v0.23.5/go.mod h1:ntcPWNXS8ZPKN+zTXuzYMeg731CP0heCTl6gYBxLcuQ= +k8s.io/apimachinery v0.23.5 h1:Va7dwhp8wgkUPWsEXk6XglXWU4IKYLKNlv8VkX7SDM0= +k8s.io/apimachinery v0.23.5/go.mod h1:BEuFMMBaIbcOqVIJqNZJXGFTP4W6AycEpb5+m/97hrM= +k8s.io/apiserver v0.23.5/go.mod h1:7wvMtGJ42VRxzgVI7jkbKvMbuCbVbgsWFT7RyXiRNTw= +k8s.io/client-go v0.23.5 h1:zUXHmEuqx0RY4+CsnkOn5l0GU+skkRXKGJrhmE2SLd8= +k8s.io/client-go v0.23.5/go.mod h1:flkeinTO1CirYgzMPRWxUCnV0G4Fbu2vLhYCObnt/r4= +k8s.io/code-generator v0.23.5/go.mod h1:S0Q1JVA+kSzTI1oUvbKAxZY/DYbA/ZUb4Uknog12ETk= +k8s.io/component-base v0.23.5 h1:8qgP5R6jG1BBSXmRYW+dsmitIrpk8F/fPEvgDenMCCE= +k8s.io/component-base v0.23.5/go.mod h1:c5Nq44KZyt1aLl0IpHX82fhsn84Sb0jjzwjpcA42bY0= k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= @@ -1133,9 +1133,9 @@ k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9/go.mod h1:jPW/WVKK9YHAvNhRxK0md/ rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.27/go.mod h1:tq2nT0Kx7W+/f2JVE+zxYtUhdjuELJkVpNz+x/QN5R4= -sigs.k8s.io/controller-runtime v0.11.1 h1:7YIHT2QnHJArj/dk9aUkYhfqfK5cIxPOX5gPECfdZLU= -sigs.k8s.io/controller-runtime v0.11.1/go.mod h1:KKwLiTooNGu+JmLZGn9Sl3Gjmfj66eMbCQznLP5zcqA= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.30/go.mod h1:fEO7lRTdivWO2qYVCVG7dEADOMo/MLDCVr8So2g88Uw= +sigs.k8s.io/controller-runtime v0.11.2 h1:H5GTxQl0Mc9UjRJhORusqfJCIjBO8UtUxGggCwL1rLA= +sigs.k8s.io/controller-runtime v0.11.2/go.mod h1:P6QCzrEjLaZGqHsfd+os7JQ+WFZhvB8MRFsn4dWF7O4= sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6/go.mod h1:p4QtZmO4uMYipTQNzagwnNoseA6OxSUutVw05NhYDRs= sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2 h1:kDi4JBNAsJWfz1aEXhO8Jg87JJaPNLh5tIzYHgStQ9Y= sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2/go.mod h1:B+TnT182UBxE84DiCz4CVE26eOSDAeYCpfDnC2kdKMY= From c2f465e2467fa4669ef4623476b86799640a51a4 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Tue, 19 Apr 2022 18:27:33 +0200 Subject: [PATCH 082/818] Update dependencies - github.com/ProtonMail/go-crypto to v0.0.0-20220407094043-a94812496cf5 - github.com/fluxcd/pkg/kustomize to v0.2.0 - github.com/fluxcd/pkg/runtime to v0.14.1 - github.com/fluxcd/pkg/ssa to v0.15.2 - golang.org/x/crypto to v0.0.0-20220411220226-7b82a4e95df4 - golang.org/x/term to v0.0.0-20220411215600-e5f449aeb171 - k8s.io/cli-runtime to v0.23.5 - k8s.io/kubectl to v0.23.5 - sigs.k8s.io/cli-utils to v0.29.4 - sigs.k8s.io/kustomize/api to v0.11.4 - sigs.k8s.io/kustomize/kyaml to v0.13.6 Signed-off-by: Hidde Beydals --- go.mod | 22 +++++++++++----------- go.sum | 55 ++++++++++++++++++++++++++----------------------------- 2 files changed, 37 insertions(+), 40 deletions(-) diff --git a/go.mod b/go.mod index bebec933..cb3ccd58 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.17 require ( github.com/Masterminds/semver/v3 v3.1.1 - github.com/ProtonMail/go-crypto v0.0.0-20220113124808-70ae35bab23f + github.com/ProtonMail/go-crypto v0.0.0-20220407094043-a94812496cf5 github.com/cyphar/filepath-securejoin v0.2.3 github.com/fluxcd/go-git-providers v0.5.4 github.com/fluxcd/helm-controller/api v0.20.0 @@ -13,9 +13,9 @@ require ( github.com/fluxcd/kustomize-controller/api v0.24.0 github.com/fluxcd/notification-controller/api v0.23.3 github.com/fluxcd/pkg/apis/meta v0.12.2 - github.com/fluxcd/pkg/kustomize v0.1.0 - github.com/fluxcd/pkg/runtime v0.13.2 - github.com/fluxcd/pkg/ssa v0.15.1 + github.com/fluxcd/pkg/kustomize v0.2.0 + github.com/fluxcd/pkg/runtime v0.14.1 + github.com/fluxcd/pkg/ssa v0.15.2 github.com/fluxcd/pkg/ssh v0.3.2 github.com/fluxcd/pkg/untar v0.1.0 github.com/fluxcd/pkg/version v0.1.0 @@ -34,18 +34,18 @@ require ( github.com/spf13/cobra v1.4.0 github.com/spf13/pflag v1.0.5 github.com/theckman/yacspin v0.13.12 - golang.org/x/crypto v0.0.0-20220321153916-2c7772ba3064 - golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 + golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 + golang.org/x/term v0.0.0-20220411215600-e5f449aeb171 k8s.io/api v0.23.5 k8s.io/apiextensions-apiserver v0.23.5 k8s.io/apimachinery v0.23.5 - k8s.io/cli-runtime v0.23.4 + k8s.io/cli-runtime v0.23.5 k8s.io/client-go v0.23.5 - k8s.io/kubectl v0.23.4 - sigs.k8s.io/cli-utils v0.29.3 + k8s.io/kubectl v0.23.5 + sigs.k8s.io/cli-utils v0.29.4 sigs.k8s.io/controller-runtime v0.11.2 - sigs.k8s.io/kustomize/api v0.11.2 - sigs.k8s.io/kustomize/kyaml v0.13.3 + sigs.k8s.io/kustomize/api v0.11.4 + sigs.k8s.io/kustomize/kyaml v0.13.6 sigs.k8s.io/yaml v1.3.0 ) diff --git a/go.sum b/go.sum index 73dbd4e4..d2fc8f8a 100644 --- a/go.sum +++ b/go.sum @@ -108,8 +108,8 @@ github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb0 github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= -github.com/ProtonMail/go-crypto v0.0.0-20220113124808-70ae35bab23f h1:J2FzIrXN82q5uyUraeJpLIm7U6PffRwje2ORho5yIik= -github.com/ProtonMail/go-crypto v0.0.0-20220113124808-70ae35bab23f/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= +github.com/ProtonMail/go-crypto v0.0.0-20220407094043-a94812496cf5 h1:cSHEbLj0GZeHM1mWG84qEnGFojNEQ83W7cwaPRjcwXU= +github.com/ProtonMail/go-crypto v0.0.0-20220407094043-a94812496cf5/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= @@ -391,12 +391,12 @@ github.com/fluxcd/pkg/apis/kustomize v0.3.3 h1:bPN29SdVzWl0yhgivuf/83IAe2R6vUuDV github.com/fluxcd/pkg/apis/kustomize v0.3.3/go.mod h1:5HTOFZfQFVMMqR2rvuxpbZhpb+sQpcTT6RCQZOhjFzA= github.com/fluxcd/pkg/apis/meta v0.12.2 h1:AiKAZxLyPtV150y63WC+mL1Qm4x5qWQmW6r4mLy1i8c= github.com/fluxcd/pkg/apis/meta v0.12.2/go.mod h1:Z26X5uTU5LxAyWETGueRQY7TvdPaGfKU7Wye9bdUlho= -github.com/fluxcd/pkg/kustomize v0.1.0 h1:koptEkMQoVSdEmOvOPg6EupHPQmfuAV2kgddN2ijelI= -github.com/fluxcd/pkg/kustomize v0.1.0/go.mod h1:m4R8reRl16zf0aYJTy1uOQUQfM+/KfVaqjwTlAPcYZ4= -github.com/fluxcd/pkg/runtime v0.13.2 h1:6jkQQUbp17WxHsbozlJFCvHmOS4JIB+yB20CdCd8duE= -github.com/fluxcd/pkg/runtime v0.13.2/go.mod h1:dzWNKqFzFXeittbpFcJzR3cdC9CWlbzw+pNOgaVvF/0= -github.com/fluxcd/pkg/ssa v0.15.1 h1:HXAT+K6c9Yy8Evxdyk3DU0KTk3yZ+fwgTEEzU1W/1V8= -github.com/fluxcd/pkg/ssa v0.15.1/go.mod h1:OSXVu/uKPbhzBRljA359+WYxbXtMUNbkADlrS3Rm+gE= +github.com/fluxcd/pkg/kustomize v0.2.0 h1:twiGAFJctt2tyH8vHxL1uqb6BlU3B9ZqG8uSlluuioM= +github.com/fluxcd/pkg/kustomize v0.2.0/go.mod h1:Qczvl7vNY9NJBpyaFrldsxfGjj6uaMcMmKGsSJ6hcxc= +github.com/fluxcd/pkg/runtime v0.14.1 h1:ZbS3RzR+f+wu1e6Y7GoCxY9PFZkOgX6/gL7Enr75CY0= +github.com/fluxcd/pkg/runtime v0.14.1/go.mod h1:eS4378ydLlWPt2fFjcrAAnJegGJNj3Q/iqYZqjBeWlM= +github.com/fluxcd/pkg/ssa v0.15.2 h1:hLEIh7Ymlt6ihfQHIEx7DjAa+FCndBpHW6wyELToVsI= +github.com/fluxcd/pkg/ssa v0.15.2/go.mod h1:wwDtLfi7a31/yQuC/oeHXZpaSHGrkZk835uhdHDNyik= github.com/fluxcd/pkg/ssh v0.3.2 h1:HZlDF6Qu4yplsU4Tisv6hxsRIbIOwwr7rKus8/Q/Dn0= github.com/fluxcd/pkg/ssh v0.3.2/go.mod h1:OVnuv9y2WCx7AoOIid0sxqe9lLKKfDS4PMl+4ta5DIo= github.com/fluxcd/pkg/untar v0.1.0 h1:k97V/xV5hFrAkIkVPuv5AVhyxh1ZzzAKba/lbDfGo6o= @@ -536,6 +536,8 @@ github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4= github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= github.com/google/cel-go v0.9.0/go.mod h1:U7ayypeSkw23szu4GaQTPJGx66c20mx8JklMSxrmI1w= github.com/google/cel-spec v0.6.0/go.mod h1:Nwjgxy5CbjlPrtCWjeDjUyKMl8w41YBYGjsyDdqk0xA= +github.com/google/gnostic v0.5.7-v3refs h1:FhTMOKj2VhjpouxvWJAV1TL304uMlb9zcDqkl6cEI54= +github.com/google/gnostic v0.5.7-v3refs/go.mod h1:73MKFl6jIHelAJNaBGFzt3SPtZULs9dYrGFt8OiIsHQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -1126,8 +1128,8 @@ golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20220321153916-2c7772ba3064 h1:S25/rfnfsMVgORT4/J61MJ7rdyseOZOyvLIrZEZ7s6s= -golang.org/x/crypto v0.0.0-20220321153916-2c7772ba3064/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 h1:kUhD7nTDoI3fVd9G4ORWrbV5NY0liEs/Jg2pv5f+bBA= +golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -1374,8 +1376,8 @@ golang.org/x/sys v0.0.0-20220325203850-36772127a21f h1:TrmogKRsSOxRMJbLYGrB4SBbW golang.org/x/sys v0.0.0-20220325203850-36772127a21f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.0.0-20220411215600-e5f449aeb171 h1:EH1Deb8WZJ0xc0WK//leUHXcX9aLE5SymusoTmMZye8= +golang.org/x/term v0.0.0-20220411215600-e5f449aeb171/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1680,7 +1682,6 @@ honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9 k8s.io/api v0.20.1/go.mod h1:KqwcCVogGxQY3nBlRpwt+wpAMF/KjaCc7RpywacvqUo= k8s.io/api v0.20.4/go.mod h1:++lNL1AJMkDymriNniQsWRkMDzRaX2Y/POTUi8yvqYQ= k8s.io/api v0.20.6/go.mod h1:X9e8Qag6JV/bL5G6bU8sdVRltWKmdHsFUGS3eVndqE8= -k8s.io/api v0.23.4/go.mod h1:i77F4JfyNNrhOjZF7OwwNJS5Y1S9dpwvb9iYRYRczfI= k8s.io/api v0.23.5 h1:zno3LUiMubxD/V1Zw3ijyKO3wxrhbUF1Ck+VjBvfaoA= k8s.io/api v0.23.5/go.mod h1:Na4XuKng8PXJ2JsploYYrivXrINeTaycCGcYgF91Xm8= k8s.io/apiextensions-apiserver v0.23.5 h1:5SKzdXyvIJKu+zbfPc3kCbWpbxi+O+zdmAJBm26UJqI= @@ -1688,30 +1689,26 @@ k8s.io/apiextensions-apiserver v0.23.5/go.mod h1:ntcPWNXS8ZPKN+zTXuzYMeg731CP0he k8s.io/apimachinery v0.20.1/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= k8s.io/apimachinery v0.20.4/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= k8s.io/apimachinery v0.20.6/go.mod h1:ejZXtW1Ra6V1O5H8xPBGz+T3+4gfkTCeExAHKU57MAc= -k8s.io/apimachinery v0.23.4/go.mod h1:BEuFMMBaIbcOqVIJqNZJXGFTP4W6AycEpb5+m/97hrM= k8s.io/apimachinery v0.23.5 h1:Va7dwhp8wgkUPWsEXk6XglXWU4IKYLKNlv8VkX7SDM0= k8s.io/apimachinery v0.23.5/go.mod h1:BEuFMMBaIbcOqVIJqNZJXGFTP4W6AycEpb5+m/97hrM= k8s.io/apiserver v0.20.1/go.mod h1:ro5QHeQkgMS7ZGpvf4tSMx6bBOgPfE+f52KwvXfScaU= k8s.io/apiserver v0.20.4/go.mod h1:Mc80thBKOyy7tbvFtB4kJv1kbdD0eIH8k8vianJcbFM= k8s.io/apiserver v0.20.6/go.mod h1:QIJXNt6i6JB+0YQRNcS0hdRHJlMhflFmsBDeSgT1r8Q= k8s.io/apiserver v0.23.5/go.mod h1:7wvMtGJ42VRxzgVI7jkbKvMbuCbVbgsWFT7RyXiRNTw= -k8s.io/cli-runtime v0.23.4 h1:C3AFQmo4TK4dlVPLOI62gtHEHu0OfA2Cp4UVRZ1JXns= -k8s.io/cli-runtime v0.23.4/go.mod h1:7KywUNTUibmHPqmpDFuRO1kc9RhsufHv2lkjCm2YZyM= +k8s.io/cli-runtime v0.23.5 h1:Z7XUpGoJZYZB2uNjQfJjMbyDKyVkoBGye62Ap0sWQHY= +k8s.io/cli-runtime v0.23.5/go.mod h1:oY6QDF2qo9xndSq32tqcmRp2UyXssdGrLfjAVymgbx4= k8s.io/client-go v0.20.1/go.mod h1:/zcHdt1TeWSd5HoUe6elJmHSQ6uLLgp4bIJHVEuy+/Y= k8s.io/client-go v0.20.4/go.mod h1:LiMv25ND1gLUdBeYxBIwKpkSC5IsozMMmOOeSJboP+k= k8s.io/client-go v0.20.6/go.mod h1:nNQMnOvEUEsOzRRFIIkdmYOjAZrC8bgq0ExboWSU1I0= -k8s.io/client-go v0.23.4/go.mod h1:PKnIL4pqLuvYUK1WU7RLTMYKPiIh7MYShLshtRY9cj0= k8s.io/client-go v0.23.5 h1:zUXHmEuqx0RY4+CsnkOn5l0GU+skkRXKGJrhmE2SLd8= k8s.io/client-go v0.23.5/go.mod h1:flkeinTO1CirYgzMPRWxUCnV0G4Fbu2vLhYCObnt/r4= -k8s.io/code-generator v0.23.4/go.mod h1:S0Q1JVA+kSzTI1oUvbKAxZY/DYbA/ZUb4Uknog12ETk= k8s.io/code-generator v0.23.5/go.mod h1:S0Q1JVA+kSzTI1oUvbKAxZY/DYbA/ZUb4Uknog12ETk= k8s.io/component-base v0.20.1/go.mod h1:guxkoJnNoh8LNrbtiQOlyp2Y2XFCZQmrcg2n/DeYNLk= k8s.io/component-base v0.20.4/go.mod h1:t4p9EdiagbVCJKrQ1RsA5/V4rFQNDfRlevJajlGwgjI= k8s.io/component-base v0.20.6/go.mod h1:6f1MPBAeI+mvuts3sIdtpjljHWBQ2cIy38oBIWMYnrM= -k8s.io/component-base v0.23.4/go.mod h1:8o3Gg8i2vnUXGPOwciiYlkSaZT+p+7gA9Scoz8y4W4E= k8s.io/component-base v0.23.5 h1:8qgP5R6jG1BBSXmRYW+dsmitIrpk8F/fPEvgDenMCCE= k8s.io/component-base v0.23.5/go.mod h1:c5Nq44KZyt1aLl0IpHX82fhsn84Sb0jjzwjpcA42bY0= -k8s.io/component-helpers v0.23.4/go.mod h1:1Pl7L4zukZ054ElzRbvmZ1FJIU8roBXFOeRFu8zipa4= +k8s.io/component-helpers v0.23.5/go.mod h1:5riXJgjTIs+ZB8xnf5M2anZ8iQuq37a0B/0BgoPQuSM= k8s.io/cri-api v0.17.3/go.mod h1:X1sbHmuXhwaHs9xxYffLqJogVsnI+f6cPRcgPel7ywM= k8s.io/cri-api v0.20.1/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI= k8s.io/cri-api v0.20.4/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI= @@ -1728,10 +1725,10 @@ k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAG k8s.io/kube-openapi v0.0.0-20210421082810-95288971da7e/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw= k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65 h1:E3J9oCLlaobFUqsjG9DfKbP2BmgwBL2p7pn0A3dG9W4= k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65/go.mod h1:sX9MT8g7NVZM5lVL/j8QyCCJe8YSMW30QvGZWaCIDIk= -k8s.io/kubectl v0.23.4 h1:mAa+zEOlyZieecEy+xSrhjkpMcukYyHWzcNdX28dzMY= -k8s.io/kubectl v0.23.4/go.mod h1:Dgb0Rvx/8JKS/C2EuvsNiQc6RZnX0SbHJVG3XUzH6ok= +k8s.io/kubectl v0.23.5 h1:DmDULqCaF4qstj0Im143XmncvqWtJxHzK8IrW2BzlU0= +k8s.io/kubectl v0.23.5/go.mod h1:lLgw7cVY8xbd7o637vOXPca/w6HC205KsPCRDYRCxwE= k8s.io/kubernetes v1.13.0/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk= -k8s.io/metrics v0.23.4/go.mod h1:cl6sY9BdVT3DubbpqnkPIKi6mn/F2ltkU4yH1tEJ3Bo= +k8s.io/metrics v0.23.5/go.mod h1:WNAtV2a5BYbmDS8+7jSqYYV6E3efuGTpIwJ8PTD1wgs= k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20211116205334-6203023598ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= @@ -1743,21 +1740,21 @@ rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.14/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.15/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.30/go.mod h1:fEO7lRTdivWO2qYVCVG7dEADOMo/MLDCVr8So2g88Uw= -sigs.k8s.io/cli-utils v0.29.3 h1:4QRB9ayCd5pd9M/D3q2KQgr+nYrvRaw3suW+rcOutvk= -sigs.k8s.io/cli-utils v0.29.3/go.mod h1:WDVRa5/eQBKntG++uyKdyT+xU7MLdCR4XsgseqL5uX4= +sigs.k8s.io/cli-utils v0.29.4 h1:1bsZ5bE90Mbl6Jat4nmZULJCOkLQ9rwJVVrREgqtXT4= +sigs.k8s.io/cli-utils v0.29.4/go.mod h1:WDVRa5/eQBKntG++uyKdyT+xU7MLdCR4XsgseqL5uX4= sigs.k8s.io/controller-runtime v0.11.2 h1:H5GTxQl0Mc9UjRJhORusqfJCIjBO8UtUxGggCwL1rLA= sigs.k8s.io/controller-runtime v0.11.2/go.mod h1:P6QCzrEjLaZGqHsfd+os7JQ+WFZhvB8MRFsn4dWF7O4= sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6/go.mod h1:p4QtZmO4uMYipTQNzagwnNoseA6OxSUutVw05NhYDRs= sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2 h1:kDi4JBNAsJWfz1aEXhO8Jg87JJaPNLh5tIzYHgStQ9Y= sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2/go.mod h1:B+TnT182UBxE84DiCz4CVE26eOSDAeYCpfDnC2kdKMY= sigs.k8s.io/kustomize/api v0.10.1/go.mod h1:2FigT1QN6xKdcnGS2Ppp1uIWrtWN28Ms8A3OZUZhwr8= -sigs.k8s.io/kustomize/api v0.11.2 h1:6YvCJHFDwsLwAX7zNHBxMZi3k7dGIXI8G9l0saYQI0E= -sigs.k8s.io/kustomize/api v0.11.2/go.mod h1:GZuhith5YcqxIDe0GnRJNx5xxPTjlwaLTt/e+ChUtJA= +sigs.k8s.io/kustomize/api v0.11.4 h1:/0Mr3kfBBNcNPOW5Qwk/3eb8zkswCwnqQxxKtmrTkRo= +sigs.k8s.io/kustomize/api v0.11.4/go.mod h1:k+8RsqYbgpkIrJ4p9jcdPqe8DprLxFUUO0yNOq8C+xI= sigs.k8s.io/kustomize/cmd/config v0.10.2/go.mod h1:K2aW7nXJ0AaT+VA/eO0/dzFLxmpFcTzudmAgDwPY1HQ= sigs.k8s.io/kustomize/kustomize/v4 v4.4.1/go.mod h1:qOKJMMz2mBP+vcS7vK+mNz4HBLjaQSWRY22EF6Tb7Io= sigs.k8s.io/kustomize/kyaml v0.13.0/go.mod h1:FTJxEZ86ScK184NpGSAQcfEqee0nul8oLCK30D47m4E= -sigs.k8s.io/kustomize/kyaml v0.13.3 h1:tNNQIC+8cc+aXFTVg+RtQAOsjwUdYBZRAgYOVI3RBc4= -sigs.k8s.io/kustomize/kyaml v0.13.3/go.mod h1:/ya3Gk4diiQzlE4mBh7wykyLRFZNvqlbh+JnwQ9Vhrc= +sigs.k8s.io/kustomize/kyaml v0.13.6 h1:eF+wsn4J7GOAXlvajv6OknSunxpcOBQQqsnPxObtkGs= +sigs.k8s.io/kustomize/kyaml v0.13.6/go.mod h1:yHP031rn1QX1lr/Xd934Ri/xdVNG8BE2ECa78Ht/kEg= sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= sigs.k8s.io/structured-merge-diff/v4 v4.0.3/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= sigs.k8s.io/structured-merge-diff/v4 v4.2.1 h1:bKCqE9GvQ5tiVHn5rfn1r+yao3aLQEaLzkkmAkf+A6Y= From 5c9cbe676d0a5eacef6548775774c85858d355ea Mon Sep 17 00:00:00 2001 From: Sanskar Jaiswal Date: Mon, 18 Apr 2022 16:16:08 +0530 Subject: [PATCH 083/818] handle secret types properly while masking sops data Signed-off-by: Sanskar Jaiswal --- internal/build/build.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/internal/build/build.go b/internal/build/build.go index 27fa06a7..df51db5b 100644 --- a/internal/build/build.go +++ b/internal/build/build.go @@ -21,6 +21,7 @@ import ( "context" "encoding/base64" "encoding/json" + "errors" "fmt" "os" "sync" @@ -343,7 +344,11 @@ func maskSopsData(res *resource.Resource) error { res.PipeE(yaml.FieldClearer{Name: "sops"}) secretType, err := res.GetFieldValue(typeField) - if err != nil { + // If the intented type is Opaque, then it can be omitted from the manifest, since it's the default + // Ref: https://kubernetes.io/docs/concepts/configuration/secret/#opaque-secrets + if errors.As(err, &yaml.NoFieldError{}) { + secretType = "Opaque" + } else if err != nil { return fmt.Errorf("failed to mask secret %s sops data: %w", res.GetName(), err) } From 224a1ce94178c980a78af68fdf2fabb3b8adb8d4 Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Wed, 20 Apr 2022 09:46:28 +0000 Subject: [PATCH 084/818] Update toolkit components - helm-controller to v0.20.1 https://github.com/fluxcd/helm-controller/blob/v0.20.1/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 2 +- go.sum | 4 ++-- manifests/bases/helm-controller/kustomization.yaml | 4 ++-- manifests/crds/kustomization.yaml | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index cb3ccd58..45ddb89a 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,7 @@ require ( github.com/ProtonMail/go-crypto v0.0.0-20220407094043-a94812496cf5 github.com/cyphar/filepath-securejoin v0.2.3 github.com/fluxcd/go-git-providers v0.5.4 - github.com/fluxcd/helm-controller/api v0.20.0 + github.com/fluxcd/helm-controller/api v0.20.1 github.com/fluxcd/image-automation-controller/api v0.22.0 github.com/fluxcd/image-reflector-controller/api v0.17.2 github.com/fluxcd/kustomize-controller/api v0.24.0 diff --git a/go.sum b/go.sum index d2fc8f8a..9c268fb9 100644 --- a/go.sum +++ b/go.sum @@ -375,8 +375,8 @@ github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYF github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fluxcd/go-git-providers v0.5.4 h1:MnByjsmXa8rMt2hTmhmtbocq7YIsTlwZKrj9lAsob4Q= github.com/fluxcd/go-git-providers v0.5.4/go.mod h1:4jTHTmSx3rFGnG78KUVgFYeG6vWFnKwUSr2mi31tvp8= -github.com/fluxcd/helm-controller/api v0.20.0 h1:APPF5IH00VXz+hx5vdUsVyj2w6hQ9W8Uz2CP7x5jYbA= -github.com/fluxcd/helm-controller/api v0.20.0/go.mod h1:D1qkXPYATzhNw9tU4jP+Jr3XBPvAYMolx8MfbRhHS2g= +github.com/fluxcd/helm-controller/api v0.20.1 h1:U5JsBKT8B77gjqRObx2zSnB8jWGh8U2E8Ix6HI6Q8Aw= +github.com/fluxcd/helm-controller/api v0.20.1/go.mod h1:D1qkXPYATzhNw9tU4jP+Jr3XBPvAYMolx8MfbRhHS2g= github.com/fluxcd/image-automation-controller/api v0.22.0 h1:k9R8KN2kcFUaSmYcprRgdTihxIDBNgJM2/Y5sxzFU3E= github.com/fluxcd/image-automation-controller/api v0.22.0/go.mod h1:wnWx89ol/6xIj85rCxsji3aP70mRHFt5sR/WcEjY4m4= github.com/fluxcd/image-reflector-controller/api v0.17.2 h1:QQl9YBhz+7lwKejG92StCa9Vxswph6+7O7TmkVNNoSw= diff --git a/manifests/bases/helm-controller/kustomization.yaml b/manifests/bases/helm-controller/kustomization.yaml index ca94ba9e..1c3ff52f 100644 --- a/manifests/bases/helm-controller/kustomization.yaml +++ b/manifests/bases/helm-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/helm-controller/releases/download/v0.20.0/helm-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.20.0/helm-controller.deployment.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.20.1/helm-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.20.1/helm-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index 4b54afa4..dad4e57a 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -3,7 +3,7 @@ kind: Kustomization resources: - https://github.com/fluxcd/source-controller/releases/download/v0.24.0/source-controller.crds.yaml - https://github.com/fluxcd/kustomize-controller/releases/download/v0.24.0/kustomize-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.20.0/helm-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.20.1/helm-controller.crds.yaml - https://github.com/fluxcd/notification-controller/releases/download/v0.23.3/notification-controller.crds.yaml - https://github.com/fluxcd/image-reflector-controller/releases/download/v0.17.2/image-reflector-controller.crds.yaml - https://github.com/fluxcd/image-automation-controller/releases/download/v0.22.0/image-automation-controller.crds.yaml From baadaa05d295db2aa0e9d3e6e7dd047273e5566c Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Wed, 20 Apr 2022 11:49:49 +0200 Subject: [PATCH 085/818] tests/azure: Update toolkit components Signed-off-by: Hidde Beydals --- tests/azure/go.mod | 2 +- tests/azure/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/azure/go.mod b/tests/azure/go.mod index ffb42bbe..e20807f9 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -4,7 +4,7 @@ go 1.17 require ( github.com/Azure/azure-event-hubs-go/v3 v3.3.17 - github.com/fluxcd/helm-controller/api v0.20.0 + github.com/fluxcd/helm-controller/api v0.20.1 github.com/fluxcd/image-automation-controller/api v0.22.0 github.com/fluxcd/image-reflector-controller/api v0.17.2 github.com/fluxcd/kustomize-controller/api v0.24.0 diff --git a/tests/azure/go.sum b/tests/azure/go.sum index 8f4b264b..61a08ce2 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -192,8 +192,8 @@ github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/fluxcd/helm-controller/api v0.20.0 h1:APPF5IH00VXz+hx5vdUsVyj2w6hQ9W8Uz2CP7x5jYbA= -github.com/fluxcd/helm-controller/api v0.20.0/go.mod h1:D1qkXPYATzhNw9tU4jP+Jr3XBPvAYMolx8MfbRhHS2g= +github.com/fluxcd/helm-controller/api v0.20.1 h1:U5JsBKT8B77gjqRObx2zSnB8jWGh8U2E8Ix6HI6Q8Aw= +github.com/fluxcd/helm-controller/api v0.20.1/go.mod h1:D1qkXPYATzhNw9tU4jP+Jr3XBPvAYMolx8MfbRhHS2g= github.com/fluxcd/image-automation-controller/api v0.22.0 h1:k9R8KN2kcFUaSmYcprRgdTihxIDBNgJM2/Y5sxzFU3E= github.com/fluxcd/image-automation-controller/api v0.22.0/go.mod h1:wnWx89ol/6xIj85rCxsji3aP70mRHFt5sR/WcEjY4m4= github.com/fluxcd/image-reflector-controller/api v0.17.2 h1:QQl9YBhz+7lwKejG92StCa9Vxswph6+7O7TmkVNNoSw= From 5d8248d31d53bcef4a6b659a7429893c178974f9 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Wed, 20 Apr 2022 17:32:19 +0200 Subject: [PATCH 086/818] Update kustomize-controller to v0.24.1 Signed-off-by: Hidde Beydals --- go.mod | 2 +- go.sum | 4 ++-- manifests/bases/kustomize-controller/kustomization.yaml | 4 ++-- manifests/crds/kustomization.yaml | 2 +- tests/azure/go.mod | 2 +- tests/azure/go.sum | 4 ++-- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/go.mod b/go.mod index 45ddb89a..a2f6a896 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/fluxcd/helm-controller/api v0.20.1 github.com/fluxcd/image-automation-controller/api v0.22.0 github.com/fluxcd/image-reflector-controller/api v0.17.2 - github.com/fluxcd/kustomize-controller/api v0.24.0 + github.com/fluxcd/kustomize-controller/api v0.24.1 github.com/fluxcd/notification-controller/api v0.23.3 github.com/fluxcd/pkg/apis/meta v0.12.2 github.com/fluxcd/pkg/kustomize v0.2.0 diff --git a/go.sum b/go.sum index 9c268fb9..2898e795 100644 --- a/go.sum +++ b/go.sum @@ -381,8 +381,8 @@ github.com/fluxcd/image-automation-controller/api v0.22.0 h1:k9R8KN2kcFUaSmYcprR github.com/fluxcd/image-automation-controller/api v0.22.0/go.mod h1:wnWx89ol/6xIj85rCxsji3aP70mRHFt5sR/WcEjY4m4= github.com/fluxcd/image-reflector-controller/api v0.17.2 h1:QQl9YBhz+7lwKejG92StCa9Vxswph6+7O7TmkVNNoSw= github.com/fluxcd/image-reflector-controller/api v0.17.2/go.mod h1:PwmjD9DeA6yBdGnMVzUB+5n2hVqsKTGroFlN/oR4RkI= -github.com/fluxcd/kustomize-controller/api v0.24.0 h1:ZMqAH/tH5NzBcZbMX8OPATyXmxhg0Ci5jfj4gG8phy8= -github.com/fluxcd/kustomize-controller/api v0.24.0/go.mod h1:fzzyD5x2SRs/9XfZEVkQ89IDKykG0ugjMMrI7h5hvR8= +github.com/fluxcd/kustomize-controller/api v0.24.1 h1:Yh+IlEUjoNAGJO+FyDpZn9NKuc/jElYGJghkfe0YjPs= +github.com/fluxcd/kustomize-controller/api v0.24.1/go.mod h1:fzzyD5x2SRs/9XfZEVkQ89IDKykG0ugjMMrI7h5hvR8= github.com/fluxcd/notification-controller/api v0.23.3 h1:Pl0l2nGngy3QrWOkPW+rx4ED9r5dGQWhhpBoKrxrdtg= github.com/fluxcd/notification-controller/api v0.23.3/go.mod h1:TbXfm58an42g9DwcaYMBfuli1mbGLaUdmewjLGUTIXo= github.com/fluxcd/pkg/apis/acl v0.0.3 h1:Lw0ZHdpnO4G7Zy9KjrzwwBmDZQuy4qEjaU/RvA6k1lc= diff --git a/manifests/bases/kustomize-controller/kustomization.yaml b/manifests/bases/kustomize-controller/kustomization.yaml index a03ff953..c906ac22 100644 --- a/manifests/bases/kustomize-controller/kustomization.yaml +++ b/manifests/bases/kustomize-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.24.0/kustomize-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.24.0/kustomize-controller.deployment.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.24.1/kustomize-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.24.1/kustomize-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index dad4e57a..09c81d8c 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -2,7 +2,7 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - https://github.com/fluxcd/source-controller/releases/download/v0.24.0/source-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.24.0/kustomize-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.24.1/kustomize-controller.crds.yaml - https://github.com/fluxcd/helm-controller/releases/download/v0.20.1/helm-controller.crds.yaml - https://github.com/fluxcd/notification-controller/releases/download/v0.23.3/notification-controller.crds.yaml - https://github.com/fluxcd/image-reflector-controller/releases/download/v0.17.2/image-reflector-controller.crds.yaml diff --git a/tests/azure/go.mod b/tests/azure/go.mod index e20807f9..5089bf5d 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -7,7 +7,7 @@ require ( github.com/fluxcd/helm-controller/api v0.20.1 github.com/fluxcd/image-automation-controller/api v0.22.0 github.com/fluxcd/image-reflector-controller/api v0.17.2 - github.com/fluxcd/kustomize-controller/api v0.24.0 + github.com/fluxcd/kustomize-controller/api v0.24.1 github.com/fluxcd/notification-controller/api v0.23.3 github.com/fluxcd/pkg/apis/meta v0.12.2 github.com/fluxcd/pkg/runtime v0.14.1 diff --git a/tests/azure/go.sum b/tests/azure/go.sum index 61a08ce2..dac5913d 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -198,8 +198,8 @@ github.com/fluxcd/image-automation-controller/api v0.22.0 h1:k9R8KN2kcFUaSmYcprR github.com/fluxcd/image-automation-controller/api v0.22.0/go.mod h1:wnWx89ol/6xIj85rCxsji3aP70mRHFt5sR/WcEjY4m4= github.com/fluxcd/image-reflector-controller/api v0.17.2 h1:QQl9YBhz+7lwKejG92StCa9Vxswph6+7O7TmkVNNoSw= github.com/fluxcd/image-reflector-controller/api v0.17.2/go.mod h1:PwmjD9DeA6yBdGnMVzUB+5n2hVqsKTGroFlN/oR4RkI= -github.com/fluxcd/kustomize-controller/api v0.24.0 h1:ZMqAH/tH5NzBcZbMX8OPATyXmxhg0Ci5jfj4gG8phy8= -github.com/fluxcd/kustomize-controller/api v0.24.0/go.mod h1:fzzyD5x2SRs/9XfZEVkQ89IDKykG0ugjMMrI7h5hvR8= +github.com/fluxcd/kustomize-controller/api v0.24.1 h1:Yh+IlEUjoNAGJO+FyDpZn9NKuc/jElYGJghkfe0YjPs= +github.com/fluxcd/kustomize-controller/api v0.24.1/go.mod h1:fzzyD5x2SRs/9XfZEVkQ89IDKykG0ugjMMrI7h5hvR8= github.com/fluxcd/notification-controller/api v0.23.3 h1:Pl0l2nGngy3QrWOkPW+rx4ED9r5dGQWhhpBoKrxrdtg= github.com/fluxcd/notification-controller/api v0.23.3/go.mod h1:TbXfm58an42g9DwcaYMBfuli1mbGLaUdmewjLGUTIXo= github.com/fluxcd/pkg/apis/acl v0.0.3 h1:Lw0ZHdpnO4G7Zy9KjrzwwBmDZQuy4qEjaU/RvA6k1lc= From 1a546a1d8200ccf92a3fa3c4f25fbc9d1d0eaf3f Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Thu, 21 Apr 2022 09:29:20 +0000 Subject: [PATCH 087/818] Update toolkit components - kustomize-controller to v0.24.2 https://github.com/fluxcd/kustomize-controller/blob/v0.24.2/CHANGELOG.md - notification-controller to v0.23.4 https://github.com/fluxcd/notification-controller/blob/v0.23.4/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 4 ++-- go.sum | 8 ++++---- manifests/bases/kustomize-controller/kustomization.yaml | 4 ++-- .../bases/notification-controller/kustomization.yaml | 4 ++-- manifests/crds/kustomization.yaml | 4 ++-- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/go.mod b/go.mod index a2f6a896..cbcc2213 100644 --- a/go.mod +++ b/go.mod @@ -10,8 +10,8 @@ require ( github.com/fluxcd/helm-controller/api v0.20.1 github.com/fluxcd/image-automation-controller/api v0.22.0 github.com/fluxcd/image-reflector-controller/api v0.17.2 - github.com/fluxcd/kustomize-controller/api v0.24.1 - github.com/fluxcd/notification-controller/api v0.23.3 + github.com/fluxcd/kustomize-controller/api v0.24.2 + github.com/fluxcd/notification-controller/api v0.23.4 github.com/fluxcd/pkg/apis/meta v0.12.2 github.com/fluxcd/pkg/kustomize v0.2.0 github.com/fluxcd/pkg/runtime v0.14.1 diff --git a/go.sum b/go.sum index 2898e795..cea9ed7c 100644 --- a/go.sum +++ b/go.sum @@ -381,10 +381,10 @@ github.com/fluxcd/image-automation-controller/api v0.22.0 h1:k9R8KN2kcFUaSmYcprR github.com/fluxcd/image-automation-controller/api v0.22.0/go.mod h1:wnWx89ol/6xIj85rCxsji3aP70mRHFt5sR/WcEjY4m4= github.com/fluxcd/image-reflector-controller/api v0.17.2 h1:QQl9YBhz+7lwKejG92StCa9Vxswph6+7O7TmkVNNoSw= github.com/fluxcd/image-reflector-controller/api v0.17.2/go.mod h1:PwmjD9DeA6yBdGnMVzUB+5n2hVqsKTGroFlN/oR4RkI= -github.com/fluxcd/kustomize-controller/api v0.24.1 h1:Yh+IlEUjoNAGJO+FyDpZn9NKuc/jElYGJghkfe0YjPs= -github.com/fluxcd/kustomize-controller/api v0.24.1/go.mod h1:fzzyD5x2SRs/9XfZEVkQ89IDKykG0ugjMMrI7h5hvR8= -github.com/fluxcd/notification-controller/api v0.23.3 h1:Pl0l2nGngy3QrWOkPW+rx4ED9r5dGQWhhpBoKrxrdtg= -github.com/fluxcd/notification-controller/api v0.23.3/go.mod h1:TbXfm58an42g9DwcaYMBfuli1mbGLaUdmewjLGUTIXo= +github.com/fluxcd/kustomize-controller/api v0.24.2 h1:ZHS4KkR4t76KagrD9wKgW1Fgw5nK6PseBLLArbKFyTk= +github.com/fluxcd/kustomize-controller/api v0.24.2/go.mod h1:fzzyD5x2SRs/9XfZEVkQ89IDKykG0ugjMMrI7h5hvR8= +github.com/fluxcd/notification-controller/api v0.23.4 h1:NiH26jZu1+nbQJoeKsoGYCxi+ZdxyITkRA+vZ2+5//4= +github.com/fluxcd/notification-controller/api v0.23.4/go.mod h1:TbXfm58an42g9DwcaYMBfuli1mbGLaUdmewjLGUTIXo= github.com/fluxcd/pkg/apis/acl v0.0.3 h1:Lw0ZHdpnO4G7Zy9KjrzwwBmDZQuy4qEjaU/RvA6k1lc= github.com/fluxcd/pkg/apis/acl v0.0.3/go.mod h1:XPts6lRJ9C9fIF9xVWofmQwftvhY25n1ps7W9xw0XLU= github.com/fluxcd/pkg/apis/kustomize v0.3.3 h1:bPN29SdVzWl0yhgivuf/83IAe2R6vUuDVcB3LzyVU8E= diff --git a/manifests/bases/kustomize-controller/kustomization.yaml b/manifests/bases/kustomize-controller/kustomization.yaml index c906ac22..c9ca176d 100644 --- a/manifests/bases/kustomize-controller/kustomization.yaml +++ b/manifests/bases/kustomize-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.24.1/kustomize-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.24.1/kustomize-controller.deployment.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.24.2/kustomize-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.24.2/kustomize-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/notification-controller/kustomization.yaml b/manifests/bases/notification-controller/kustomization.yaml index f15de171..f822ffba 100644 --- a/manifests/bases/notification-controller/kustomization.yaml +++ b/manifests/bases/notification-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/notification-controller/releases/download/v0.23.3/notification-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v0.23.3/notification-controller.deployment.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.23.4/notification-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.23.4/notification-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index 09c81d8c..3db2343d 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -2,8 +2,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - https://github.com/fluxcd/source-controller/releases/download/v0.24.0/source-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.24.1/kustomize-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.24.2/kustomize-controller.crds.yaml - https://github.com/fluxcd/helm-controller/releases/download/v0.20.1/helm-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v0.23.3/notification-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.23.4/notification-controller.crds.yaml - https://github.com/fluxcd/image-reflector-controller/releases/download/v0.17.2/image-reflector-controller.crds.yaml - https://github.com/fluxcd/image-automation-controller/releases/download/v0.22.0/image-automation-controller.crds.yaml From c7504442bdf7cb57d320a7d826cd244c157a1aa7 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Thu, 21 Apr 2022 11:31:07 +0200 Subject: [PATCH 088/818] tests/azure: update toolkit components Signed-off-by: Hidde Beydals --- tests/azure/go.mod | 4 ++-- tests/azure/go.sum | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/azure/go.mod b/tests/azure/go.mod index 5089bf5d..739513fc 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -7,8 +7,8 @@ require ( github.com/fluxcd/helm-controller/api v0.20.1 github.com/fluxcd/image-automation-controller/api v0.22.0 github.com/fluxcd/image-reflector-controller/api v0.17.2 - github.com/fluxcd/kustomize-controller/api v0.24.1 - github.com/fluxcd/notification-controller/api v0.23.3 + github.com/fluxcd/kustomize-controller/api v0.24.2 + github.com/fluxcd/notification-controller/api v0.23.4 github.com/fluxcd/pkg/apis/meta v0.12.2 github.com/fluxcd/pkg/runtime v0.14.1 github.com/fluxcd/source-controller/api v0.24.0 diff --git a/tests/azure/go.sum b/tests/azure/go.sum index dac5913d..9c193316 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -198,10 +198,10 @@ github.com/fluxcd/image-automation-controller/api v0.22.0 h1:k9R8KN2kcFUaSmYcprR github.com/fluxcd/image-automation-controller/api v0.22.0/go.mod h1:wnWx89ol/6xIj85rCxsji3aP70mRHFt5sR/WcEjY4m4= github.com/fluxcd/image-reflector-controller/api v0.17.2 h1:QQl9YBhz+7lwKejG92StCa9Vxswph6+7O7TmkVNNoSw= github.com/fluxcd/image-reflector-controller/api v0.17.2/go.mod h1:PwmjD9DeA6yBdGnMVzUB+5n2hVqsKTGroFlN/oR4RkI= -github.com/fluxcd/kustomize-controller/api v0.24.1 h1:Yh+IlEUjoNAGJO+FyDpZn9NKuc/jElYGJghkfe0YjPs= -github.com/fluxcd/kustomize-controller/api v0.24.1/go.mod h1:fzzyD5x2SRs/9XfZEVkQ89IDKykG0ugjMMrI7h5hvR8= -github.com/fluxcd/notification-controller/api v0.23.3 h1:Pl0l2nGngy3QrWOkPW+rx4ED9r5dGQWhhpBoKrxrdtg= -github.com/fluxcd/notification-controller/api v0.23.3/go.mod h1:TbXfm58an42g9DwcaYMBfuli1mbGLaUdmewjLGUTIXo= +github.com/fluxcd/kustomize-controller/api v0.24.2 h1:ZHS4KkR4t76KagrD9wKgW1Fgw5nK6PseBLLArbKFyTk= +github.com/fluxcd/kustomize-controller/api v0.24.2/go.mod h1:fzzyD5x2SRs/9XfZEVkQ89IDKykG0ugjMMrI7h5hvR8= +github.com/fluxcd/notification-controller/api v0.23.4 h1:NiH26jZu1+nbQJoeKsoGYCxi+ZdxyITkRA+vZ2+5//4= +github.com/fluxcd/notification-controller/api v0.23.4/go.mod h1:TbXfm58an42g9DwcaYMBfuli1mbGLaUdmewjLGUTIXo= github.com/fluxcd/pkg/apis/acl v0.0.3 h1:Lw0ZHdpnO4G7Zy9KjrzwwBmDZQuy4qEjaU/RvA6k1lc= github.com/fluxcd/pkg/apis/acl v0.0.3/go.mod h1:XPts6lRJ9C9fIF9xVWofmQwftvhY25n1ps7W9xw0XLU= github.com/fluxcd/pkg/apis/kustomize v0.3.3 h1:bPN29SdVzWl0yhgivuf/83IAe2R6vUuDVcB3LzyVU8E= From 5c4991299c876d0ad05ef671ecae4c5be207ff5d Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Fri, 22 Apr 2022 10:09:00 +0000 Subject: [PATCH 089/818] Update toolkit components - kustomize-controller to v0.24.3 https://github.com/fluxcd/kustomize-controller/blob/v0.24.3/CHANGELOG.md - source-controller to v0.24.1 https://github.com/fluxcd/source-controller/blob/v0.24.1/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 4 ++-- go.sum | 8 ++++---- manifests/bases/kustomize-controller/kustomization.yaml | 4 ++-- manifests/bases/source-controller/kustomization.yaml | 4 ++-- manifests/crds/kustomization.yaml | 4 ++-- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/go.mod b/go.mod index cbcc2213..34e2f776 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/fluxcd/helm-controller/api v0.20.1 github.com/fluxcd/image-automation-controller/api v0.22.0 github.com/fluxcd/image-reflector-controller/api v0.17.2 - github.com/fluxcd/kustomize-controller/api v0.24.2 + github.com/fluxcd/kustomize-controller/api v0.24.3 github.com/fluxcd/notification-controller/api v0.23.4 github.com/fluxcd/pkg/apis/meta v0.12.2 github.com/fluxcd/pkg/kustomize v0.2.0 @@ -19,7 +19,7 @@ require ( github.com/fluxcd/pkg/ssh v0.3.2 github.com/fluxcd/pkg/untar v0.1.0 github.com/fluxcd/pkg/version v0.1.0 - github.com/fluxcd/source-controller/api v0.24.0 + github.com/fluxcd/source-controller/api v0.24.1 github.com/go-git/go-git/v5 v5.4.2 github.com/gonvenience/bunt v1.3.3 github.com/gonvenience/ytbx v1.4.4 diff --git a/go.sum b/go.sum index cea9ed7c..86eca164 100644 --- a/go.sum +++ b/go.sum @@ -381,8 +381,8 @@ github.com/fluxcd/image-automation-controller/api v0.22.0 h1:k9R8KN2kcFUaSmYcprR github.com/fluxcd/image-automation-controller/api v0.22.0/go.mod h1:wnWx89ol/6xIj85rCxsji3aP70mRHFt5sR/WcEjY4m4= github.com/fluxcd/image-reflector-controller/api v0.17.2 h1:QQl9YBhz+7lwKejG92StCa9Vxswph6+7O7TmkVNNoSw= github.com/fluxcd/image-reflector-controller/api v0.17.2/go.mod h1:PwmjD9DeA6yBdGnMVzUB+5n2hVqsKTGroFlN/oR4RkI= -github.com/fluxcd/kustomize-controller/api v0.24.2 h1:ZHS4KkR4t76KagrD9wKgW1Fgw5nK6PseBLLArbKFyTk= -github.com/fluxcd/kustomize-controller/api v0.24.2/go.mod h1:fzzyD5x2SRs/9XfZEVkQ89IDKykG0ugjMMrI7h5hvR8= +github.com/fluxcd/kustomize-controller/api v0.24.3 h1:rnxq2wVefofAnLR1gGcvFgEz+WjrkXRM41KTEZCaNKs= +github.com/fluxcd/kustomize-controller/api v0.24.3/go.mod h1:fzzyD5x2SRs/9XfZEVkQ89IDKykG0ugjMMrI7h5hvR8= github.com/fluxcd/notification-controller/api v0.23.4 h1:NiH26jZu1+nbQJoeKsoGYCxi+ZdxyITkRA+vZ2+5//4= github.com/fluxcd/notification-controller/api v0.23.4/go.mod h1:TbXfm58an42g9DwcaYMBfuli1mbGLaUdmewjLGUTIXo= github.com/fluxcd/pkg/apis/acl v0.0.3 h1:Lw0ZHdpnO4G7Zy9KjrzwwBmDZQuy4qEjaU/RvA6k1lc= @@ -403,8 +403,8 @@ github.com/fluxcd/pkg/untar v0.1.0 h1:k97V/xV5hFrAkIkVPuv5AVhyxh1ZzzAKba/lbDfGo6 github.com/fluxcd/pkg/untar v0.1.0/go.mod h1:aGswNyzB1mlz/T/kpOS58mITBMxMKc9tlJBH037A2HY= github.com/fluxcd/pkg/version v0.1.0 h1:v+SmCanmCB5Tj2Cx9TXlj+kNRfPGbAvirkeqsp7ZEAQ= github.com/fluxcd/pkg/version v0.1.0/go.mod h1:V7Z/w8dxLQzv0FHqa5ox5TeyOd2zOd49EeuWFgnwyj4= -github.com/fluxcd/source-controller/api v0.24.0 h1:VIpyMX8jrPKGhOsFOzaxYeufi/gq5GZwcoeG8+QqrgE= -github.com/fluxcd/source-controller/api v0.24.0/go.mod h1:+raHSQaSGlk1PqgLc0joVk1KTnf1K/lQcgxdEdZ/mk8= +github.com/fluxcd/source-controller/api v0.24.1 h1:bFpfajE09k/xNIWkgNZtmtPrw/dS0zWUYMYxUUWu+jI= +github.com/fluxcd/source-controller/api v0.24.1/go.mod h1:+raHSQaSGlk1PqgLc0joVk1KTnf1K/lQcgxdEdZ/mk8= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/form3tech-oss/jwt-go v3.2.3+incompatible h1:7ZaBxOI7TMoYBfyA3cQHErNNyAWIKUMIwqxEtgHOs5c= diff --git a/manifests/bases/kustomize-controller/kustomization.yaml b/manifests/bases/kustomize-controller/kustomization.yaml index c9ca176d..8b22391f 100644 --- a/manifests/bases/kustomize-controller/kustomization.yaml +++ b/manifests/bases/kustomize-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.24.2/kustomize-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.24.2/kustomize-controller.deployment.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.24.3/kustomize-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.24.3/kustomize-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index 4afd6fc1..eeddf810 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.24.0/source-controller.crds.yaml -- https://github.com/fluxcd/source-controller/releases/download/v0.24.0/source-controller.deployment.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.24.1/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.24.1/source-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index 3db2343d..eba465ec 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.24.0/source-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.24.2/kustomize-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.24.1/source-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.24.3/kustomize-controller.crds.yaml - https://github.com/fluxcd/helm-controller/releases/download/v0.20.1/helm-controller.crds.yaml - https://github.com/fluxcd/notification-controller/releases/download/v0.23.4/notification-controller.crds.yaml - https://github.com/fluxcd/image-reflector-controller/releases/download/v0.17.2/image-reflector-controller.crds.yaml From 787d491bd5cf6c9dfec96e45391562041ac82a21 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Fri, 22 Apr 2022 12:09:27 +0200 Subject: [PATCH 090/818] tests/azure: update toolkit components Signed-off-by: Hidde Beydals --- tests/azure/go.mod | 4 ++-- tests/azure/go.sum | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/azure/go.mod b/tests/azure/go.mod index 739513fc..b3295a90 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -7,11 +7,11 @@ require ( github.com/fluxcd/helm-controller/api v0.20.1 github.com/fluxcd/image-automation-controller/api v0.22.0 github.com/fluxcd/image-reflector-controller/api v0.17.2 - github.com/fluxcd/kustomize-controller/api v0.24.2 + github.com/fluxcd/kustomize-controller/api v0.24.3 github.com/fluxcd/notification-controller/api v0.23.4 github.com/fluxcd/pkg/apis/meta v0.12.2 github.com/fluxcd/pkg/runtime v0.14.1 - github.com/fluxcd/source-controller/api v0.24.0 + github.com/fluxcd/source-controller/api v0.24.1 github.com/hashicorp/terraform-exec v0.15.0 github.com/libgit2/git2go/v31 v31.7.9 github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 diff --git a/tests/azure/go.sum b/tests/azure/go.sum index 9c193316..c3cf5b51 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -198,8 +198,8 @@ github.com/fluxcd/image-automation-controller/api v0.22.0 h1:k9R8KN2kcFUaSmYcprR github.com/fluxcd/image-automation-controller/api v0.22.0/go.mod h1:wnWx89ol/6xIj85rCxsji3aP70mRHFt5sR/WcEjY4m4= github.com/fluxcd/image-reflector-controller/api v0.17.2 h1:QQl9YBhz+7lwKejG92StCa9Vxswph6+7O7TmkVNNoSw= github.com/fluxcd/image-reflector-controller/api v0.17.2/go.mod h1:PwmjD9DeA6yBdGnMVzUB+5n2hVqsKTGroFlN/oR4RkI= -github.com/fluxcd/kustomize-controller/api v0.24.2 h1:ZHS4KkR4t76KagrD9wKgW1Fgw5nK6PseBLLArbKFyTk= -github.com/fluxcd/kustomize-controller/api v0.24.2/go.mod h1:fzzyD5x2SRs/9XfZEVkQ89IDKykG0ugjMMrI7h5hvR8= +github.com/fluxcd/kustomize-controller/api v0.24.3 h1:rnxq2wVefofAnLR1gGcvFgEz+WjrkXRM41KTEZCaNKs= +github.com/fluxcd/kustomize-controller/api v0.24.3/go.mod h1:fzzyD5x2SRs/9XfZEVkQ89IDKykG0ugjMMrI7h5hvR8= github.com/fluxcd/notification-controller/api v0.23.4 h1:NiH26jZu1+nbQJoeKsoGYCxi+ZdxyITkRA+vZ2+5//4= github.com/fluxcd/notification-controller/api v0.23.4/go.mod h1:TbXfm58an42g9DwcaYMBfuli1mbGLaUdmewjLGUTIXo= github.com/fluxcd/pkg/apis/acl v0.0.3 h1:Lw0ZHdpnO4G7Zy9KjrzwwBmDZQuy4qEjaU/RvA6k1lc= @@ -210,8 +210,8 @@ github.com/fluxcd/pkg/apis/meta v0.12.2 h1:AiKAZxLyPtV150y63WC+mL1Qm4x5qWQmW6r4m github.com/fluxcd/pkg/apis/meta v0.12.2/go.mod h1:Z26X5uTU5LxAyWETGueRQY7TvdPaGfKU7Wye9bdUlho= github.com/fluxcd/pkg/runtime v0.14.1 h1:ZbS3RzR+f+wu1e6Y7GoCxY9PFZkOgX6/gL7Enr75CY0= github.com/fluxcd/pkg/runtime v0.14.1/go.mod h1:eS4378ydLlWPt2fFjcrAAnJegGJNj3Q/iqYZqjBeWlM= -github.com/fluxcd/source-controller/api v0.24.0 h1:VIpyMX8jrPKGhOsFOzaxYeufi/gq5GZwcoeG8+QqrgE= -github.com/fluxcd/source-controller/api v0.24.0/go.mod h1:+raHSQaSGlk1PqgLc0joVk1KTnf1K/lQcgxdEdZ/mk8= +github.com/fluxcd/source-controller/api v0.24.1 h1:bFpfajE09k/xNIWkgNZtmtPrw/dS0zWUYMYxUUWu+jI= +github.com/fluxcd/source-controller/api v0.24.1/go.mod h1:+raHSQaSGlk1PqgLc0joVk1KTnf1K/lQcgxdEdZ/mk8= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/form3tech-oss/jwt-go v3.2.3+incompatible h1:7ZaBxOI7TMoYBfyA3cQHErNNyAWIKUMIwqxEtgHOs5c= From 64a473db2e573d5a53b014ff13f87b7784387400 Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Tue, 26 Apr 2022 07:29:06 +0000 Subject: [PATCH 091/818] Update toolkit components - source-controller to v0.24.2 https://github.com/fluxcd/source-controller/blob/v0.24.2/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 2 +- go.sum | 4 ++-- manifests/bases/source-controller/kustomization.yaml | 4 ++-- manifests/crds/kustomization.yaml | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index 34e2f776..73832db3 100644 --- a/go.mod +++ b/go.mod @@ -19,7 +19,7 @@ require ( github.com/fluxcd/pkg/ssh v0.3.2 github.com/fluxcd/pkg/untar v0.1.0 github.com/fluxcd/pkg/version v0.1.0 - github.com/fluxcd/source-controller/api v0.24.1 + github.com/fluxcd/source-controller/api v0.24.2 github.com/go-git/go-git/v5 v5.4.2 github.com/gonvenience/bunt v1.3.3 github.com/gonvenience/ytbx v1.4.4 diff --git a/go.sum b/go.sum index 86eca164..451519fd 100644 --- a/go.sum +++ b/go.sum @@ -403,8 +403,8 @@ github.com/fluxcd/pkg/untar v0.1.0 h1:k97V/xV5hFrAkIkVPuv5AVhyxh1ZzzAKba/lbDfGo6 github.com/fluxcd/pkg/untar v0.1.0/go.mod h1:aGswNyzB1mlz/T/kpOS58mITBMxMKc9tlJBH037A2HY= github.com/fluxcd/pkg/version v0.1.0 h1:v+SmCanmCB5Tj2Cx9TXlj+kNRfPGbAvirkeqsp7ZEAQ= github.com/fluxcd/pkg/version v0.1.0/go.mod h1:V7Z/w8dxLQzv0FHqa5ox5TeyOd2zOd49EeuWFgnwyj4= -github.com/fluxcd/source-controller/api v0.24.1 h1:bFpfajE09k/xNIWkgNZtmtPrw/dS0zWUYMYxUUWu+jI= -github.com/fluxcd/source-controller/api v0.24.1/go.mod h1:+raHSQaSGlk1PqgLc0joVk1KTnf1K/lQcgxdEdZ/mk8= +github.com/fluxcd/source-controller/api v0.24.2 h1:zxAnWhNDF1zQMLc7dNqOdRjCiyQAoWPnSedGycyG8NA= +github.com/fluxcd/source-controller/api v0.24.2/go.mod h1:+raHSQaSGlk1PqgLc0joVk1KTnf1K/lQcgxdEdZ/mk8= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/form3tech-oss/jwt-go v3.2.3+incompatible h1:7ZaBxOI7TMoYBfyA3cQHErNNyAWIKUMIwqxEtgHOs5c= diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index eeddf810..06c16a9d 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.24.1/source-controller.crds.yaml -- https://github.com/fluxcd/source-controller/releases/download/v0.24.1/source-controller.deployment.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.24.2/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.24.2/source-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index eba465ec..10df8500 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -1,7 +1,7 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.24.1/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.24.2/source-controller.crds.yaml - https://github.com/fluxcd/kustomize-controller/releases/download/v0.24.3/kustomize-controller.crds.yaml - https://github.com/fluxcd/helm-controller/releases/download/v0.20.1/helm-controller.crds.yaml - https://github.com/fluxcd/notification-controller/releases/download/v0.23.4/notification-controller.crds.yaml From c4c890d4e9d40fedf3debcf972fb9468b10c6f10 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Tue, 26 Apr 2022 09:31:11 +0200 Subject: [PATCH 092/818] tests/azure: update toolkit components Signed-off-by: Hidde Beydals --- tests/azure/go.mod | 2 +- tests/azure/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/azure/go.mod b/tests/azure/go.mod index b3295a90..b93a7b82 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -11,7 +11,7 @@ require ( github.com/fluxcd/notification-controller/api v0.23.4 github.com/fluxcd/pkg/apis/meta v0.12.2 github.com/fluxcd/pkg/runtime v0.14.1 - github.com/fluxcd/source-controller/api v0.24.1 + github.com/fluxcd/source-controller/api v0.24.2 github.com/hashicorp/terraform-exec v0.15.0 github.com/libgit2/git2go/v31 v31.7.9 github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 diff --git a/tests/azure/go.sum b/tests/azure/go.sum index c3cf5b51..2d32c1c0 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -210,8 +210,8 @@ github.com/fluxcd/pkg/apis/meta v0.12.2 h1:AiKAZxLyPtV150y63WC+mL1Qm4x5qWQmW6r4m github.com/fluxcd/pkg/apis/meta v0.12.2/go.mod h1:Z26X5uTU5LxAyWETGueRQY7TvdPaGfKU7Wye9bdUlho= github.com/fluxcd/pkg/runtime v0.14.1 h1:ZbS3RzR+f+wu1e6Y7GoCxY9PFZkOgX6/gL7Enr75CY0= github.com/fluxcd/pkg/runtime v0.14.1/go.mod h1:eS4378ydLlWPt2fFjcrAAnJegGJNj3Q/iqYZqjBeWlM= -github.com/fluxcd/source-controller/api v0.24.1 h1:bFpfajE09k/xNIWkgNZtmtPrw/dS0zWUYMYxUUWu+jI= -github.com/fluxcd/source-controller/api v0.24.1/go.mod h1:+raHSQaSGlk1PqgLc0joVk1KTnf1K/lQcgxdEdZ/mk8= +github.com/fluxcd/source-controller/api v0.24.2 h1:zxAnWhNDF1zQMLc7dNqOdRjCiyQAoWPnSedGycyG8NA= +github.com/fluxcd/source-controller/api v0.24.2/go.mod h1:+raHSQaSGlk1PqgLc0joVk1KTnf1K/lQcgxdEdZ/mk8= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/form3tech-oss/jwt-go v3.2.3+incompatible h1:7ZaBxOI7TMoYBfyA3cQHErNNyAWIKUMIwqxEtgHOs5c= From 151b84b8fe5f8a7d8d4366c6e931b99bb76f3fd0 Mon Sep 17 00:00:00 2001 From: Paulo Gomes Date: Wed, 13 Apr 2022 16:44:27 +0100 Subject: [PATCH 093/818] Add Paulo Gomes to maintainer's list Signed-off-by: Paulo Gomes --- MAINTAINERS | 1 + 1 file changed, 1 insertion(+) diff --git a/MAINTAINERS b/MAINTAINERS index bd9d47ab..cf2893d3 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -15,6 +15,7 @@ In alphabetical order: Aurel Canciu, NexHealth (github: @relu, slack: relu) Hidde Beydals, Weaveworks (github: @hiddeco, slack: hidde) Max Jonas Werner, D2iQ (github: @makkes, slack: max) +Paulo Gomes, Weaveworks (github: @pjbgf, slack: pjbgf) Philip Laine, Xenit (github: @phillebaba, slack: phillebaba) Stefan Prodan, Weaveworks (github: @stefanprodan, slack: stefanprodan) Sunny, Weaveworks (github: @darkowlzz, slack: darkowlzz) From 5430152c7fef76a4274db49b31e2ee193f806af6 Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Thu, 28 Apr 2022 08:35:38 +0000 Subject: [PATCH 094/818] Update toolkit components - kustomize-controller to v0.24.4 https://github.com/fluxcd/kustomize-controller/blob/v0.24.4/CHANGELOG.md - source-controller to v0.24.3 https://github.com/fluxcd/source-controller/blob/v0.24.3/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 4 ++-- go.sum | 8 ++++---- manifests/bases/kustomize-controller/kustomization.yaml | 4 ++-- manifests/bases/source-controller/kustomization.yaml | 4 ++-- manifests/crds/kustomization.yaml | 4 ++-- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/go.mod b/go.mod index 73832db3..1129ed0f 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/fluxcd/helm-controller/api v0.20.1 github.com/fluxcd/image-automation-controller/api v0.22.0 github.com/fluxcd/image-reflector-controller/api v0.17.2 - github.com/fluxcd/kustomize-controller/api v0.24.3 + github.com/fluxcd/kustomize-controller/api v0.24.4 github.com/fluxcd/notification-controller/api v0.23.4 github.com/fluxcd/pkg/apis/meta v0.12.2 github.com/fluxcd/pkg/kustomize v0.2.0 @@ -19,7 +19,7 @@ require ( github.com/fluxcd/pkg/ssh v0.3.2 github.com/fluxcd/pkg/untar v0.1.0 github.com/fluxcd/pkg/version v0.1.0 - github.com/fluxcd/source-controller/api v0.24.2 + github.com/fluxcd/source-controller/api v0.24.3 github.com/go-git/go-git/v5 v5.4.2 github.com/gonvenience/bunt v1.3.3 github.com/gonvenience/ytbx v1.4.4 diff --git a/go.sum b/go.sum index 451519fd..00541439 100644 --- a/go.sum +++ b/go.sum @@ -381,8 +381,8 @@ github.com/fluxcd/image-automation-controller/api v0.22.0 h1:k9R8KN2kcFUaSmYcprR github.com/fluxcd/image-automation-controller/api v0.22.0/go.mod h1:wnWx89ol/6xIj85rCxsji3aP70mRHFt5sR/WcEjY4m4= github.com/fluxcd/image-reflector-controller/api v0.17.2 h1:QQl9YBhz+7lwKejG92StCa9Vxswph6+7O7TmkVNNoSw= github.com/fluxcd/image-reflector-controller/api v0.17.2/go.mod h1:PwmjD9DeA6yBdGnMVzUB+5n2hVqsKTGroFlN/oR4RkI= -github.com/fluxcd/kustomize-controller/api v0.24.3 h1:rnxq2wVefofAnLR1gGcvFgEz+WjrkXRM41KTEZCaNKs= -github.com/fluxcd/kustomize-controller/api v0.24.3/go.mod h1:fzzyD5x2SRs/9XfZEVkQ89IDKykG0ugjMMrI7h5hvR8= +github.com/fluxcd/kustomize-controller/api v0.24.4 h1:6Cr6EdXtpcAh1d4vJPqsN2GvpoDYgCSlRwbd6T4oxlg= +github.com/fluxcd/kustomize-controller/api v0.24.4/go.mod h1:fzzyD5x2SRs/9XfZEVkQ89IDKykG0ugjMMrI7h5hvR8= github.com/fluxcd/notification-controller/api v0.23.4 h1:NiH26jZu1+nbQJoeKsoGYCxi+ZdxyITkRA+vZ2+5//4= github.com/fluxcd/notification-controller/api v0.23.4/go.mod h1:TbXfm58an42g9DwcaYMBfuli1mbGLaUdmewjLGUTIXo= github.com/fluxcd/pkg/apis/acl v0.0.3 h1:Lw0ZHdpnO4G7Zy9KjrzwwBmDZQuy4qEjaU/RvA6k1lc= @@ -403,8 +403,8 @@ github.com/fluxcd/pkg/untar v0.1.0 h1:k97V/xV5hFrAkIkVPuv5AVhyxh1ZzzAKba/lbDfGo6 github.com/fluxcd/pkg/untar v0.1.0/go.mod h1:aGswNyzB1mlz/T/kpOS58mITBMxMKc9tlJBH037A2HY= github.com/fluxcd/pkg/version v0.1.0 h1:v+SmCanmCB5Tj2Cx9TXlj+kNRfPGbAvirkeqsp7ZEAQ= github.com/fluxcd/pkg/version v0.1.0/go.mod h1:V7Z/w8dxLQzv0FHqa5ox5TeyOd2zOd49EeuWFgnwyj4= -github.com/fluxcd/source-controller/api v0.24.2 h1:zxAnWhNDF1zQMLc7dNqOdRjCiyQAoWPnSedGycyG8NA= -github.com/fluxcd/source-controller/api v0.24.2/go.mod h1:+raHSQaSGlk1PqgLc0joVk1KTnf1K/lQcgxdEdZ/mk8= +github.com/fluxcd/source-controller/api v0.24.3 h1:4HMXDxqjpxSo5RfTP3k9w8w7CgDn8/Gd9/jMrY6URiw= +github.com/fluxcd/source-controller/api v0.24.3/go.mod h1:+raHSQaSGlk1PqgLc0joVk1KTnf1K/lQcgxdEdZ/mk8= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/form3tech-oss/jwt-go v3.2.3+incompatible h1:7ZaBxOI7TMoYBfyA3cQHErNNyAWIKUMIwqxEtgHOs5c= diff --git a/manifests/bases/kustomize-controller/kustomization.yaml b/manifests/bases/kustomize-controller/kustomization.yaml index 8b22391f..0667a3cf 100644 --- a/manifests/bases/kustomize-controller/kustomization.yaml +++ b/manifests/bases/kustomize-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.24.3/kustomize-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.24.3/kustomize-controller.deployment.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.24.4/kustomize-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.24.4/kustomize-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index 06c16a9d..4c9bb147 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.24.2/source-controller.crds.yaml -- https://github.com/fluxcd/source-controller/releases/download/v0.24.2/source-controller.deployment.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.24.3/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.24.3/source-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index 10df8500..28a6bf64 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.24.2/source-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.24.3/kustomize-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.24.3/source-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.24.4/kustomize-controller.crds.yaml - https://github.com/fluxcd/helm-controller/releases/download/v0.20.1/helm-controller.crds.yaml - https://github.com/fluxcd/notification-controller/releases/download/v0.23.4/notification-controller.crds.yaml - https://github.com/fluxcd/image-reflector-controller/releases/download/v0.17.2/image-reflector-controller.crds.yaml From 2858e83fe12968469e20209f1e496e146dcb5fac Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Thu, 28 Apr 2022 10:42:42 +0200 Subject: [PATCH 095/818] tests/azure: update toolkit components Signed-off-by: Hidde Beydals --- tests/azure/go.mod | 4 ++-- tests/azure/go.sum | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/azure/go.mod b/tests/azure/go.mod index b93a7b82..6403566a 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -7,11 +7,11 @@ require ( github.com/fluxcd/helm-controller/api v0.20.1 github.com/fluxcd/image-automation-controller/api v0.22.0 github.com/fluxcd/image-reflector-controller/api v0.17.2 - github.com/fluxcd/kustomize-controller/api v0.24.3 + github.com/fluxcd/kustomize-controller/api v0.24.4 github.com/fluxcd/notification-controller/api v0.23.4 github.com/fluxcd/pkg/apis/meta v0.12.2 github.com/fluxcd/pkg/runtime v0.14.1 - github.com/fluxcd/source-controller/api v0.24.2 + github.com/fluxcd/source-controller/api v0.24.3 github.com/hashicorp/terraform-exec v0.15.0 github.com/libgit2/git2go/v31 v31.7.9 github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 diff --git a/tests/azure/go.sum b/tests/azure/go.sum index 2d32c1c0..ea4f6f91 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -198,8 +198,8 @@ github.com/fluxcd/image-automation-controller/api v0.22.0 h1:k9R8KN2kcFUaSmYcprR github.com/fluxcd/image-automation-controller/api v0.22.0/go.mod h1:wnWx89ol/6xIj85rCxsji3aP70mRHFt5sR/WcEjY4m4= github.com/fluxcd/image-reflector-controller/api v0.17.2 h1:QQl9YBhz+7lwKejG92StCa9Vxswph6+7O7TmkVNNoSw= github.com/fluxcd/image-reflector-controller/api v0.17.2/go.mod h1:PwmjD9DeA6yBdGnMVzUB+5n2hVqsKTGroFlN/oR4RkI= -github.com/fluxcd/kustomize-controller/api v0.24.3 h1:rnxq2wVefofAnLR1gGcvFgEz+WjrkXRM41KTEZCaNKs= -github.com/fluxcd/kustomize-controller/api v0.24.3/go.mod h1:fzzyD5x2SRs/9XfZEVkQ89IDKykG0ugjMMrI7h5hvR8= +github.com/fluxcd/kustomize-controller/api v0.24.4 h1:6Cr6EdXtpcAh1d4vJPqsN2GvpoDYgCSlRwbd6T4oxlg= +github.com/fluxcd/kustomize-controller/api v0.24.4/go.mod h1:fzzyD5x2SRs/9XfZEVkQ89IDKykG0ugjMMrI7h5hvR8= github.com/fluxcd/notification-controller/api v0.23.4 h1:NiH26jZu1+nbQJoeKsoGYCxi+ZdxyITkRA+vZ2+5//4= github.com/fluxcd/notification-controller/api v0.23.4/go.mod h1:TbXfm58an42g9DwcaYMBfuli1mbGLaUdmewjLGUTIXo= github.com/fluxcd/pkg/apis/acl v0.0.3 h1:Lw0ZHdpnO4G7Zy9KjrzwwBmDZQuy4qEjaU/RvA6k1lc= @@ -210,8 +210,8 @@ github.com/fluxcd/pkg/apis/meta v0.12.2 h1:AiKAZxLyPtV150y63WC+mL1Qm4x5qWQmW6r4m github.com/fluxcd/pkg/apis/meta v0.12.2/go.mod h1:Z26X5uTU5LxAyWETGueRQY7TvdPaGfKU7Wye9bdUlho= github.com/fluxcd/pkg/runtime v0.14.1 h1:ZbS3RzR+f+wu1e6Y7GoCxY9PFZkOgX6/gL7Enr75CY0= github.com/fluxcd/pkg/runtime v0.14.1/go.mod h1:eS4378ydLlWPt2fFjcrAAnJegGJNj3Q/iqYZqjBeWlM= -github.com/fluxcd/source-controller/api v0.24.2 h1:zxAnWhNDF1zQMLc7dNqOdRjCiyQAoWPnSedGycyG8NA= -github.com/fluxcd/source-controller/api v0.24.2/go.mod h1:+raHSQaSGlk1PqgLc0joVk1KTnf1K/lQcgxdEdZ/mk8= +github.com/fluxcd/source-controller/api v0.24.3 h1:4HMXDxqjpxSo5RfTP3k9w8w7CgDn8/Gd9/jMrY6URiw= +github.com/fluxcd/source-controller/api v0.24.3/go.mod h1:+raHSQaSGlk1PqgLc0joVk1KTnf1K/lQcgxdEdZ/mk8= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/form3tech-oss/jwt-go v3.2.3+incompatible h1:7ZaBxOI7TMoYBfyA3cQHErNNyAWIKUMIwqxEtgHOs5c= From 57442e8faa9079cba879ac3c9208b93f07a9a372 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Tue, 19 Apr 2022 21:22:24 +0200 Subject: [PATCH 096/818] kustomize: use FS from `fluxcd/pkg` This switches to a secure FS implementation in most places, except for where we can not make changes at this moment because it would break behavior. Not handled in this commit: - Allowing the root for `manifestgen` packages to be configured. - Allowing the user to define a working root while building locally. - Defaulting to the secure FS implementation in `kustomization.MakeDefaultOptions`. Problem here is that constructing the secure FS could result in an error, which we can not surface without signature changes to the constructor func. Signed-off-by: Hidde Beydals --- go.mod | 2 +- go.sum | 4 +- internal/bootstrap/bootstrap_plain_git.go | 16 ++++++-- internal/build/build.go | 8 +++- pkg/manifestgen/install/manifests.go | 10 +++-- .../kustomization/kustomization.go | 41 +++++++++++++------ pkg/manifestgen/kustomization/options.go | 2 + 7 files changed, 59 insertions(+), 24 deletions(-) diff --git a/go.mod b/go.mod index 1129ed0f..b2e87d20 100644 --- a/go.mod +++ b/go.mod @@ -13,7 +13,7 @@ require ( github.com/fluxcd/kustomize-controller/api v0.24.4 github.com/fluxcd/notification-controller/api v0.23.4 github.com/fluxcd/pkg/apis/meta v0.12.2 - github.com/fluxcd/pkg/kustomize v0.2.0 + github.com/fluxcd/pkg/kustomize v0.4.0 github.com/fluxcd/pkg/runtime v0.14.1 github.com/fluxcd/pkg/ssa v0.15.2 github.com/fluxcd/pkg/ssh v0.3.2 diff --git a/go.sum b/go.sum index 00541439..67ea07dc 100644 --- a/go.sum +++ b/go.sum @@ -391,8 +391,8 @@ github.com/fluxcd/pkg/apis/kustomize v0.3.3 h1:bPN29SdVzWl0yhgivuf/83IAe2R6vUuDV github.com/fluxcd/pkg/apis/kustomize v0.3.3/go.mod h1:5HTOFZfQFVMMqR2rvuxpbZhpb+sQpcTT6RCQZOhjFzA= github.com/fluxcd/pkg/apis/meta v0.12.2 h1:AiKAZxLyPtV150y63WC+mL1Qm4x5qWQmW6r4mLy1i8c= github.com/fluxcd/pkg/apis/meta v0.12.2/go.mod h1:Z26X5uTU5LxAyWETGueRQY7TvdPaGfKU7Wye9bdUlho= -github.com/fluxcd/pkg/kustomize v0.2.0 h1:twiGAFJctt2tyH8vHxL1uqb6BlU3B9ZqG8uSlluuioM= -github.com/fluxcd/pkg/kustomize v0.2.0/go.mod h1:Qczvl7vNY9NJBpyaFrldsxfGjj6uaMcMmKGsSJ6hcxc= +github.com/fluxcd/pkg/kustomize v0.4.0 h1:ct1YGrO/o++NVecAyeOxd3/YzGNvRdslaE6pmWxBt0M= +github.com/fluxcd/pkg/kustomize v0.4.0/go.mod h1:ZlTFhk6Cxtmf1T7tpYuTACmMfqDdsPcXUGRAq3t9fH8= github.com/fluxcd/pkg/runtime v0.14.1 h1:ZbS3RzR+f+wu1e6Y7GoCxY9PFZkOgX6/gL7Enr75CY0= github.com/fluxcd/pkg/runtime v0.14.1/go.mod h1:eS4378ydLlWPt2fFjcrAAnJegGJNj3Q/iqYZqjBeWlM= github.com/fluxcd/pkg/ssa v0.15.2 h1:hLEIh7Ymlt6ihfQHIEx7DjAa+FCndBpHW6wyELToVsI= diff --git a/internal/bootstrap/bootstrap_plain_git.go b/internal/bootstrap/bootstrap_plain_git.go index ea4895fd..863c4cd7 100644 --- a/internal/bootstrap/bootstrap_plain_git.go +++ b/internal/bootstrap/bootstrap_plain_git.go @@ -31,11 +31,11 @@ import ( "k8s.io/cli-runtime/pkg/genericclioptions" "sigs.k8s.io/cli-utils/pkg/object" "sigs.k8s.io/controller-runtime/pkg/client" - "sigs.k8s.io/kustomize/api/filesys" "sigs.k8s.io/kustomize/api/konfig" "sigs.k8s.io/yaml" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" + "github.com/fluxcd/pkg/kustomize/filesys" runclient "github.com/fluxcd/pkg/runtime/client" "github.com/fluxcd/flux2/internal/bootstrap/git" @@ -105,7 +105,7 @@ func NewPlainGitProvider(git git.Git, kube client.Client, opts ...GitOption) (*P return b, nil } -func (b *PlainGitBootstrapper) ReconcileComponents(ctx context.Context, manifestsBase string, options install.Options, secretOpts sourcesecret.Options) error { +func (b *PlainGitBootstrapper) ReconcileComponents(ctx context.Context, manifestsBase string, options install.Options, _ sourcesecret.Options) error { // Clone if not already if _, err := b.git.Status(); err != nil { if err != git.ErrNoGitRepository { @@ -263,13 +263,21 @@ func (b *PlainGitBootstrapper) ReconcileSyncConfig(ctx context.Context, options if err = b.git.Write(manifests.Path, strings.NewReader(manifests.Content)); err != nil { return fmt.Errorf("failed to write manifest %q: %w", manifests.Path, err) } + + // Create secure Kustomize FS + fs, err := filesys.MakeFsOnDiskSecureBuild(b.git.Path()) + if err != nil { + return fmt.Errorf("failed to initialize Kustomize file system: %w", err) + } + + // Generate Kustomization kusManifests, err := kustomization.Generate(kustomization.Options{ - FileSystem: filesys.MakeFsOnDisk(), + FileSystem: fs, BaseDir: b.git.Path(), TargetPath: filepath.Dir(manifests.Path), }) if err != nil { - return fmt.Errorf("kustomization.yaml generation failed: %w", err) + return fmt.Errorf("%s generation failed: %w", konfig.DefaultKustomizationFileName(), err) } if err = b.git.Write(kusManifests.Path, strings.NewReader(kusManifests.Content)); err != nil { return fmt.Errorf("failed to write manifest %q: %w", kusManifests.Path, err) diff --git a/internal/build/build.go b/internal/build/build.go index df51db5b..74fd34d7 100644 --- a/internal/build/build.go +++ b/internal/build/build.go @@ -37,11 +37,11 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/kustomize/api/resmap" "sigs.k8s.io/kustomize/api/resource" - "sigs.k8s.io/kustomize/kyaml/filesys" "sigs.k8s.io/kustomize/kyaml/yaml" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" "github.com/fluxcd/pkg/kustomize" + "github.com/fluxcd/pkg/kustomize/filesys" runclient "github.com/fluxcd/pkg/runtime/client" "github.com/fluxcd/flux2/internal/utils" @@ -275,7 +275,11 @@ func (b *Builder) generate(kustomization kustomizev1.Kustomization, dirPath stri } func (b *Builder) do(ctx context.Context, kustomization kustomizev1.Kustomization, dirPath string) (resmap.ResMap, error) { - fs := filesys.MakeFsOnDisk() + // TODO(hidde): provide option to enforce FS boundaries of local build + fs, err := filesys.MakeFsOnDiskSecureBuild("/") + if err != nil { + return nil, fmt.Errorf("kustomization build failed: %w", err) + } // acuire the lock b.mu.Lock() diff --git a/pkg/manifestgen/install/manifests.go b/pkg/manifestgen/install/manifests.go index 3a584ba1..17fc33f1 100644 --- a/pkg/manifestgen/install/manifests.go +++ b/pkg/manifestgen/install/manifests.go @@ -26,8 +26,8 @@ import ( "path/filepath" "strings" + "github.com/fluxcd/pkg/kustomize/filesys" "github.com/fluxcd/pkg/untar" - "sigs.k8s.io/kustomize/api/filesys" "github.com/fluxcd/flux2/pkg/manifestgen/kustomization" ) @@ -126,8 +126,12 @@ func build(base, output string) error { return err } - fs := filesys.MakeFsOnDisk() - if err := fs.WriteFile(output, resources); err != nil { + outputBase := filepath.Dir(strings.TrimSuffix(output, string(filepath.Separator))) + fs, err := filesys.MakeFsOnDiskSecure(outputBase) + if err != nil { + return err + } + if err = fs.WriteFile(output, resources); err != nil { return err } diff --git a/pkg/manifestgen/kustomization/kustomization.go b/pkg/manifestgen/kustomization/kustomization.go index 676f64b7..45a40315 100644 --- a/pkg/manifestgen/kustomization/kustomization.go +++ b/pkg/manifestgen/kustomization/kustomization.go @@ -20,20 +20,23 @@ import ( "fmt" "os" "path/filepath" + "strings" "sync" - "sigs.k8s.io/kustomize/api/filesys" "sigs.k8s.io/kustomize/api/konfig" "sigs.k8s.io/kustomize/api/krusty" "sigs.k8s.io/kustomize/api/provider" kustypes "sigs.k8s.io/kustomize/api/types" "sigs.k8s.io/yaml" + "github.com/fluxcd/pkg/kustomize/filesys" + "github.com/fluxcd/flux2/pkg/manifestgen" ) -// Generate scans the given directory for Kubernetes manifests and creates a kustomization.yaml -// including all discovered manifests as resources. +// Generate scans the given directory for Kubernetes manifests and creates a +// konfig.DefaultKustomizationFileName file, including all discovered manifests +// as resources. func Generate(options Options) (*manifestgen.Manifest, error) { kfile := filepath.Join(options.TargetPath, konfig.DefaultKustomizationFileName()) abskfile := filepath.Join(options.BaseDir, kfile) @@ -50,7 +53,7 @@ func Generate(options Options) (*manifestgen.Manifest, error) { return nil } if info.IsDir() { - // If a sub-directory contains an existing Kustomization file add the + // If a sub-directory contains an existing Kustomization file, add the // directory as a resource and do not decent into it. for _, kfilename := range konfig.RecognizedKustomizationFileNames() { if options.FileSystem.Exists(filepath.Join(path, kfilename)) { @@ -88,7 +91,9 @@ func Generate(options Options) (*manifestgen.Manifest, error) { if err != nil { return nil, err } - f.Close() + if err = f.Close(); err != nil { + return nil, err + } kus := kustypes.Kustomization{ TypeMeta: kustypes.TypeMeta{ @@ -128,20 +133,32 @@ func Generate(options Options) (*manifestgen.Manifest, error) { }, nil } +// kustomizeBuildMutex is a workaround for a concurrent map read and map write bug. +// TODO(stefan): https://github.com/kubernetes-sigs/kustomize/issues/3659 var kustomizeBuildMutex sync.Mutex -// Build takes a Kustomize overlays and returns the resulting manifests as multi-doc YAML. +// Build takes the path to a directory with a konfig.RecognizedKustomizationFileNames, +// builds it, and returns the resulting manifests as multi-doc YAML. func Build(base string) ([]byte, error) { - // TODO(stefan): temporary workaround for concurrent map read and map write bug - // https://github.com/kubernetes-sigs/kustomize/issues/3659 kustomizeBuildMutex.Lock() defer kustomizeBuildMutex.Unlock() - kfile := filepath.Join(base, konfig.DefaultKustomizationFileName()) + // TODO(hidde): make this configurable to a specific root (relative to base) + parent := filepath.Dir(strings.TrimSuffix(base, string(filepath.Separator))) + fs, err := filesys.MakeFsOnDiskSecureBuild(parent) + if err != nil { + return nil, err + } - fs := filesys.MakeFsOnDisk() - if !fs.Exists(kfile) { - return nil, fmt.Errorf("%s not found", kfile) + var kfile string + for _, f := range konfig.RecognizedKustomizationFileNames() { + if kf := filepath.Join(base, f); fs.Exists(kf) { + kfile = kf + break + } + } + if kfile == "" { + return nil, fmt.Errorf("%s not found", konfig.DefaultKustomizationFileName()) } // TODO(hidde): work around for a bug in kustomize causing it to diff --git a/pkg/manifestgen/kustomization/options.go b/pkg/manifestgen/kustomization/options.go index 57ffb9bd..c8cf0955 100644 --- a/pkg/manifestgen/kustomization/options.go +++ b/pkg/manifestgen/kustomization/options.go @@ -25,6 +25,8 @@ type Options struct { } func MakeDefaultOptions() Options { + // TODO(hidde): switch MakeFsOnDisk to MakeFsOnDiskSecureBuild when we + // break API. return Options{ FileSystem: filesys.MakeFsOnDisk(), BaseDir: "", From f1e9da56dc2b6ffc1fc0f9d5e593baef7c422e6b Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Tue, 3 May 2022 18:17:11 +0000 Subject: [PATCH 097/818] Update toolkit components - helm-controller to v0.21.0 https://github.com/fluxcd/helm-controller/blob/v0.21.0/CHANGELOG.md - kustomize-controller to v0.25.0 https://github.com/fluxcd/kustomize-controller/blob/v0.25.0/CHANGELOG.md - source-controller to v0.24.4 https://github.com/fluxcd/source-controller/blob/v0.24.4/CHANGELOG.md - notification-controller to v0.23.5 https://github.com/fluxcd/notification-controller/blob/v0.23.5/CHANGELOG.md - image-reflector-controller to v0.18.0 https://github.com/fluxcd/image-reflector-controller/blob/v0.18.0/CHANGELOG.md - image-automation-controller to v0.22.1 https://github.com/fluxcd/image-automation-controller/blob/v0.22.1/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 24 +++++----- go.sum | 47 ++++++++++--------- .../bases/helm-controller/kustomization.yaml | 4 +- .../kustomization.yaml | 4 +- .../kustomization.yaml | 4 +- .../kustomize-controller/kustomization.yaml | 4 +- .../kustomization.yaml | 4 +- .../source-controller/kustomization.yaml | 4 +- manifests/crds/kustomization.yaml | 12 ++--- 9 files changed, 56 insertions(+), 51 deletions(-) diff --git a/go.mod b/go.mod index b2e87d20..a2031b36 100644 --- a/go.mod +++ b/go.mod @@ -7,19 +7,19 @@ require ( github.com/ProtonMail/go-crypto v0.0.0-20220407094043-a94812496cf5 github.com/cyphar/filepath-securejoin v0.2.3 github.com/fluxcd/go-git-providers v0.5.4 - github.com/fluxcd/helm-controller/api v0.20.1 - github.com/fluxcd/image-automation-controller/api v0.22.0 - github.com/fluxcd/image-reflector-controller/api v0.17.2 - github.com/fluxcd/kustomize-controller/api v0.24.4 - github.com/fluxcd/notification-controller/api v0.23.4 - github.com/fluxcd/pkg/apis/meta v0.12.2 + github.com/fluxcd/helm-controller/api v0.21.0 + github.com/fluxcd/image-automation-controller/api v0.22.1 + github.com/fluxcd/image-reflector-controller/api v0.18.0 + github.com/fluxcd/kustomize-controller/api v0.25.0 + github.com/fluxcd/notification-controller/api v0.23.5 + github.com/fluxcd/pkg/apis/meta v0.13.0 github.com/fluxcd/pkg/kustomize v0.4.0 github.com/fluxcd/pkg/runtime v0.14.1 github.com/fluxcd/pkg/ssa v0.15.2 github.com/fluxcd/pkg/ssh v0.3.2 github.com/fluxcd/pkg/untar v0.1.0 github.com/fluxcd/pkg/version v0.1.0 - github.com/fluxcd/source-controller/api v0.24.3 + github.com/fluxcd/source-controller/api v0.24.4 github.com/go-git/go-git/v5 v5.4.2 github.com/gonvenience/bunt v1.3.3 github.com/gonvenience/ytbx v1.4.4 @@ -36,11 +36,11 @@ require ( github.com/theckman/yacspin v0.13.12 golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 golang.org/x/term v0.0.0-20220411215600-e5f449aeb171 - k8s.io/api v0.23.5 - k8s.io/apiextensions-apiserver v0.23.5 - k8s.io/apimachinery v0.23.5 + k8s.io/api v0.23.6 + k8s.io/apiextensions-apiserver v0.23.6 + k8s.io/apimachinery v0.23.6 k8s.io/cli-runtime v0.23.5 - k8s.io/client-go v0.23.5 + k8s.io/client-go v0.23.6 k8s.io/kubectl v0.23.5 sigs.k8s.io/cli-utils v0.29.4 sigs.k8s.io/controller-runtime v0.11.2 @@ -159,7 +159,7 @@ require ( gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect - k8s.io/component-base v0.23.5 // indirect + k8s.io/component-base v0.23.6 // indirect k8s.io/klog/v2 v2.50.0 // indirect k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65 // indirect k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9 // indirect diff --git a/go.sum b/go.sum index 67ea07dc..02fba884 100644 --- a/go.sum +++ b/go.sum @@ -375,22 +375,22 @@ github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYF github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fluxcd/go-git-providers v0.5.4 h1:MnByjsmXa8rMt2hTmhmtbocq7YIsTlwZKrj9lAsob4Q= github.com/fluxcd/go-git-providers v0.5.4/go.mod h1:4jTHTmSx3rFGnG78KUVgFYeG6vWFnKwUSr2mi31tvp8= -github.com/fluxcd/helm-controller/api v0.20.1 h1:U5JsBKT8B77gjqRObx2zSnB8jWGh8U2E8Ix6HI6Q8Aw= -github.com/fluxcd/helm-controller/api v0.20.1/go.mod h1:D1qkXPYATzhNw9tU4jP+Jr3XBPvAYMolx8MfbRhHS2g= -github.com/fluxcd/image-automation-controller/api v0.22.0 h1:k9R8KN2kcFUaSmYcprRgdTihxIDBNgJM2/Y5sxzFU3E= -github.com/fluxcd/image-automation-controller/api v0.22.0/go.mod h1:wnWx89ol/6xIj85rCxsji3aP70mRHFt5sR/WcEjY4m4= -github.com/fluxcd/image-reflector-controller/api v0.17.2 h1:QQl9YBhz+7lwKejG92StCa9Vxswph6+7O7TmkVNNoSw= -github.com/fluxcd/image-reflector-controller/api v0.17.2/go.mod h1:PwmjD9DeA6yBdGnMVzUB+5n2hVqsKTGroFlN/oR4RkI= -github.com/fluxcd/kustomize-controller/api v0.24.4 h1:6Cr6EdXtpcAh1d4vJPqsN2GvpoDYgCSlRwbd6T4oxlg= -github.com/fluxcd/kustomize-controller/api v0.24.4/go.mod h1:fzzyD5x2SRs/9XfZEVkQ89IDKykG0ugjMMrI7h5hvR8= -github.com/fluxcd/notification-controller/api v0.23.4 h1:NiH26jZu1+nbQJoeKsoGYCxi+ZdxyITkRA+vZ2+5//4= -github.com/fluxcd/notification-controller/api v0.23.4/go.mod h1:TbXfm58an42g9DwcaYMBfuli1mbGLaUdmewjLGUTIXo= +github.com/fluxcd/helm-controller/api v0.21.0 h1:MWvVzz6u9jR1aE7j1YaSEjBehw0zMndkODnjAE0/1nQ= +github.com/fluxcd/helm-controller/api v0.21.0/go.mod h1:cgP5ZR46HIhC8phUfx4Z60He9zNuIHbH3r8YEVl5ip8= +github.com/fluxcd/image-automation-controller/api v0.22.1 h1:7OtqjJU2s4GF0d6z35G+Ss4Ugvuo/vv8sQsxEX9embA= +github.com/fluxcd/image-automation-controller/api v0.22.1/go.mod h1:SKasiuSIW7+NKi6Sb4iuDa+AJR8wJS8mapZETR/PGTI= +github.com/fluxcd/image-reflector-controller/api v0.18.0 h1:31KhS4IXIcTIK1lrSgsLZTmstM2uMZj9PTUqiWAoVcY= +github.com/fluxcd/image-reflector-controller/api v0.18.0/go.mod h1:ilumM3a/k0+7Xpq13fsh5zVmDLy7du61j37NAEuKOI0= +github.com/fluxcd/kustomize-controller/api v0.25.0 h1:/qQ+4Yy1/H9Z1N/AEBIVEHy180WGTPL9UKDICMdxbjg= +github.com/fluxcd/kustomize-controller/api v0.25.0/go.mod h1:W9EDKlibtbGyF3lUnb16u3eXHYZ2awAvyR8b/PPrNkY= +github.com/fluxcd/notification-controller/api v0.23.5 h1:yVx3AXSIL52TwqIxTki3MGRPFLsnBW5ozNMCIX0uRKQ= +github.com/fluxcd/notification-controller/api v0.23.5/go.mod h1:+TZuRS0YbiKxVJYGWDTSG6sL8F0V8+7zK+y14EvV818= github.com/fluxcd/pkg/apis/acl v0.0.3 h1:Lw0ZHdpnO4G7Zy9KjrzwwBmDZQuy4qEjaU/RvA6k1lc= github.com/fluxcd/pkg/apis/acl v0.0.3/go.mod h1:XPts6lRJ9C9fIF9xVWofmQwftvhY25n1ps7W9xw0XLU= github.com/fluxcd/pkg/apis/kustomize v0.3.3 h1:bPN29SdVzWl0yhgivuf/83IAe2R6vUuDVcB3LzyVU8E= github.com/fluxcd/pkg/apis/kustomize v0.3.3/go.mod h1:5HTOFZfQFVMMqR2rvuxpbZhpb+sQpcTT6RCQZOhjFzA= -github.com/fluxcd/pkg/apis/meta v0.12.2 h1:AiKAZxLyPtV150y63WC+mL1Qm4x5qWQmW6r4mLy1i8c= -github.com/fluxcd/pkg/apis/meta v0.12.2/go.mod h1:Z26X5uTU5LxAyWETGueRQY7TvdPaGfKU7Wye9bdUlho= +github.com/fluxcd/pkg/apis/meta v0.13.0 h1:0QuNKEExSjk+Rv0I6a85p2H3xOlWhdxZRsh10waEL/c= +github.com/fluxcd/pkg/apis/meta v0.13.0/go.mod h1:Z26X5uTU5LxAyWETGueRQY7TvdPaGfKU7Wye9bdUlho= github.com/fluxcd/pkg/kustomize v0.4.0 h1:ct1YGrO/o++NVecAyeOxd3/YzGNvRdslaE6pmWxBt0M= github.com/fluxcd/pkg/kustomize v0.4.0/go.mod h1:ZlTFhk6Cxtmf1T7tpYuTACmMfqDdsPcXUGRAq3t9fH8= github.com/fluxcd/pkg/runtime v0.14.1 h1:ZbS3RzR+f+wu1e6Y7GoCxY9PFZkOgX6/gL7Enr75CY0= @@ -403,8 +403,8 @@ github.com/fluxcd/pkg/untar v0.1.0 h1:k97V/xV5hFrAkIkVPuv5AVhyxh1ZzzAKba/lbDfGo6 github.com/fluxcd/pkg/untar v0.1.0/go.mod h1:aGswNyzB1mlz/T/kpOS58mITBMxMKc9tlJBH037A2HY= github.com/fluxcd/pkg/version v0.1.0 h1:v+SmCanmCB5Tj2Cx9TXlj+kNRfPGbAvirkeqsp7ZEAQ= github.com/fluxcd/pkg/version v0.1.0/go.mod h1:V7Z/w8dxLQzv0FHqa5ox5TeyOd2zOd49EeuWFgnwyj4= -github.com/fluxcd/source-controller/api v0.24.3 h1:4HMXDxqjpxSo5RfTP3k9w8w7CgDn8/Gd9/jMrY6URiw= -github.com/fluxcd/source-controller/api v0.24.3/go.mod h1:+raHSQaSGlk1PqgLc0joVk1KTnf1K/lQcgxdEdZ/mk8= +github.com/fluxcd/source-controller/api v0.24.4 h1:m54sS1rJlgJf5j9qDRgKLhbPJAnJ9dY+VrstPKj0aQo= +github.com/fluxcd/source-controller/api v0.24.4/go.mod h1:b0MmMPGE8gcpgSyGXe5m7see77tBW26eZrvGkkPstUs= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/form3tech-oss/jwt-go v3.2.3+incompatible h1:7ZaBxOI7TMoYBfyA3cQHErNNyAWIKUMIwqxEtgHOs5c= @@ -1682,32 +1682,37 @@ honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9 k8s.io/api v0.20.1/go.mod h1:KqwcCVogGxQY3nBlRpwt+wpAMF/KjaCc7RpywacvqUo= k8s.io/api v0.20.4/go.mod h1:++lNL1AJMkDymriNniQsWRkMDzRaX2Y/POTUi8yvqYQ= k8s.io/api v0.20.6/go.mod h1:X9e8Qag6JV/bL5G6bU8sdVRltWKmdHsFUGS3eVndqE8= -k8s.io/api v0.23.5 h1:zno3LUiMubxD/V1Zw3ijyKO3wxrhbUF1Ck+VjBvfaoA= k8s.io/api v0.23.5/go.mod h1:Na4XuKng8PXJ2JsploYYrivXrINeTaycCGcYgF91Xm8= -k8s.io/apiextensions-apiserver v0.23.5 h1:5SKzdXyvIJKu+zbfPc3kCbWpbxi+O+zdmAJBm26UJqI= -k8s.io/apiextensions-apiserver v0.23.5/go.mod h1:ntcPWNXS8ZPKN+zTXuzYMeg731CP0heCTl6gYBxLcuQ= +k8s.io/api v0.23.6 h1:yOK34wbYECH4RsJbQ9sfkFK3O7f/DUHRlzFehkqZyVw= +k8s.io/api v0.23.6/go.mod h1:1kFaYxGCFHYp3qd6a85DAj/yW8aVD6XLZMqJclkoi9g= +k8s.io/apiextensions-apiserver v0.23.6 h1:v58cQ6Z0/GK1IXYr+oW0fnYl52o9LTY0WgoWvI8uv5Q= +k8s.io/apiextensions-apiserver v0.23.6/go.mod h1:YVh17Mphv183THQJA5spNFp9XfoidFyL3WoDgZxQIZU= k8s.io/apimachinery v0.20.1/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= k8s.io/apimachinery v0.20.4/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= k8s.io/apimachinery v0.20.6/go.mod h1:ejZXtW1Ra6V1O5H8xPBGz+T3+4gfkTCeExAHKU57MAc= -k8s.io/apimachinery v0.23.5 h1:Va7dwhp8wgkUPWsEXk6XglXWU4IKYLKNlv8VkX7SDM0= k8s.io/apimachinery v0.23.5/go.mod h1:BEuFMMBaIbcOqVIJqNZJXGFTP4W6AycEpb5+m/97hrM= +k8s.io/apimachinery v0.23.6 h1:RH1UweWJkWNTlFx0D8uxOpaU1tjIOvVVWV/bu5b3/NQ= +k8s.io/apimachinery v0.23.6/go.mod h1:BEuFMMBaIbcOqVIJqNZJXGFTP4W6AycEpb5+m/97hrM= k8s.io/apiserver v0.20.1/go.mod h1:ro5QHeQkgMS7ZGpvf4tSMx6bBOgPfE+f52KwvXfScaU= k8s.io/apiserver v0.20.4/go.mod h1:Mc80thBKOyy7tbvFtB4kJv1kbdD0eIH8k8vianJcbFM= k8s.io/apiserver v0.20.6/go.mod h1:QIJXNt6i6JB+0YQRNcS0hdRHJlMhflFmsBDeSgT1r8Q= -k8s.io/apiserver v0.23.5/go.mod h1:7wvMtGJ42VRxzgVI7jkbKvMbuCbVbgsWFT7RyXiRNTw= +k8s.io/apiserver v0.23.6/go.mod h1:5PU32F82tfErXPmf7FXhd/UcuLfh97tGepjKUgJ2atg= k8s.io/cli-runtime v0.23.5 h1:Z7XUpGoJZYZB2uNjQfJjMbyDKyVkoBGye62Ap0sWQHY= k8s.io/cli-runtime v0.23.5/go.mod h1:oY6QDF2qo9xndSq32tqcmRp2UyXssdGrLfjAVymgbx4= k8s.io/client-go v0.20.1/go.mod h1:/zcHdt1TeWSd5HoUe6elJmHSQ6uLLgp4bIJHVEuy+/Y= k8s.io/client-go v0.20.4/go.mod h1:LiMv25ND1gLUdBeYxBIwKpkSC5IsozMMmOOeSJboP+k= k8s.io/client-go v0.20.6/go.mod h1:nNQMnOvEUEsOzRRFIIkdmYOjAZrC8bgq0ExboWSU1I0= -k8s.io/client-go v0.23.5 h1:zUXHmEuqx0RY4+CsnkOn5l0GU+skkRXKGJrhmE2SLd8= k8s.io/client-go v0.23.5/go.mod h1:flkeinTO1CirYgzMPRWxUCnV0G4Fbu2vLhYCObnt/r4= +k8s.io/client-go v0.23.6 h1:7h4SctDVQAQbkHQnR4Kzi7EyUyvla5G1pFWf4+Od7hQ= +k8s.io/client-go v0.23.6/go.mod h1:Umt5icFOMLV/+qbtZ3PR0D+JA6lvvb3syzodv4irpK4= k8s.io/code-generator v0.23.5/go.mod h1:S0Q1JVA+kSzTI1oUvbKAxZY/DYbA/ZUb4Uknog12ETk= +k8s.io/code-generator v0.23.6/go.mod h1:S0Q1JVA+kSzTI1oUvbKAxZY/DYbA/ZUb4Uknog12ETk= k8s.io/component-base v0.20.1/go.mod h1:guxkoJnNoh8LNrbtiQOlyp2Y2XFCZQmrcg2n/DeYNLk= k8s.io/component-base v0.20.4/go.mod h1:t4p9EdiagbVCJKrQ1RsA5/V4rFQNDfRlevJajlGwgjI= k8s.io/component-base v0.20.6/go.mod h1:6f1MPBAeI+mvuts3sIdtpjljHWBQ2cIy38oBIWMYnrM= -k8s.io/component-base v0.23.5 h1:8qgP5R6jG1BBSXmRYW+dsmitIrpk8F/fPEvgDenMCCE= k8s.io/component-base v0.23.5/go.mod h1:c5Nq44KZyt1aLl0IpHX82fhsn84Sb0jjzwjpcA42bY0= +k8s.io/component-base v0.23.6 h1:8dhVZ4VrRcNdV2EGjl8tj8YOHwX6ysgCGMJ2Oyy0NW8= +k8s.io/component-base v0.23.6/go.mod h1:FGMPeMrjYu0UZBSAFcfloVDplj9IvU+uRMTOdE23Fj0= k8s.io/component-helpers v0.23.5/go.mod h1:5riXJgjTIs+ZB8xnf5M2anZ8iQuq37a0B/0BgoPQuSM= k8s.io/cri-api v0.17.3/go.mod h1:X1sbHmuXhwaHs9xxYffLqJogVsnI+f6cPRcgPel7ywM= k8s.io/cri-api v0.20.1/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI= diff --git a/manifests/bases/helm-controller/kustomization.yaml b/manifests/bases/helm-controller/kustomization.yaml index 1c3ff52f..9c4ecaae 100644 --- a/manifests/bases/helm-controller/kustomization.yaml +++ b/manifests/bases/helm-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/helm-controller/releases/download/v0.20.1/helm-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.20.1/helm-controller.deployment.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.21.0/helm-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.21.0/helm-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/image-automation-controller/kustomization.yaml b/manifests/bases/image-automation-controller/kustomization.yaml index 09bf39ae..151efaaf 100644 --- a/manifests/bases/image-automation-controller/kustomization.yaml +++ b/manifests/bases/image-automation-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.22.0/image-automation-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.22.0/image-automation-controller.deployment.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.22.1/image-automation-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.22.1/image-automation-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/image-reflector-controller/kustomization.yaml b/manifests/bases/image-reflector-controller/kustomization.yaml index ff263902..739879d6 100644 --- a/manifests/bases/image-reflector-controller/kustomization.yaml +++ b/manifests/bases/image-reflector-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.17.2/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.17.2/image-reflector-controller.deployment.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.18.0/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.18.0/image-reflector-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/kustomize-controller/kustomization.yaml b/manifests/bases/kustomize-controller/kustomization.yaml index 0667a3cf..1a34fac7 100644 --- a/manifests/bases/kustomize-controller/kustomization.yaml +++ b/manifests/bases/kustomize-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.24.4/kustomize-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.24.4/kustomize-controller.deployment.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.25.0/kustomize-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.25.0/kustomize-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/notification-controller/kustomization.yaml b/manifests/bases/notification-controller/kustomization.yaml index f822ffba..945f8466 100644 --- a/manifests/bases/notification-controller/kustomization.yaml +++ b/manifests/bases/notification-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/notification-controller/releases/download/v0.23.4/notification-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v0.23.4/notification-controller.deployment.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.23.5/notification-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.23.5/notification-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index 4c9bb147..dbb9714e 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.24.3/source-controller.crds.yaml -- https://github.com/fluxcd/source-controller/releases/download/v0.24.3/source-controller.deployment.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.24.4/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.24.4/source-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index 28a6bf64..afac6087 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -1,9 +1,9 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.24.3/source-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.24.4/kustomize-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.20.1/helm-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v0.23.4/notification-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.17.2/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.22.0/image-automation-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.24.4/source-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.25.0/kustomize-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.21.0/helm-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.23.5/notification-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.18.0/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.22.1/image-automation-controller.crds.yaml From 8dfbe952ae1da889e5d0a3dc6a327bb791001ad6 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Tue, 3 May 2022 20:19:29 +0200 Subject: [PATCH 098/818] tests/azure: update toolkit components Signed-off-by: Hidde Beydals --- tests/azure/go.mod | 28 +++++++++++----------- tests/azure/go.sum | 60 +++++++++++++++++++++++----------------------- 2 files changed, 44 insertions(+), 44 deletions(-) diff --git a/tests/azure/go.mod b/tests/azure/go.mod index 6403566a..1bc19b0f 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -3,24 +3,24 @@ module github.com/fluxcd/flux2/tests/azure go 1.17 require ( - github.com/Azure/azure-event-hubs-go/v3 v3.3.17 - github.com/fluxcd/helm-controller/api v0.20.1 - github.com/fluxcd/image-automation-controller/api v0.22.0 - github.com/fluxcd/image-reflector-controller/api v0.17.2 - github.com/fluxcd/kustomize-controller/api v0.24.4 - github.com/fluxcd/notification-controller/api v0.23.4 - github.com/fluxcd/pkg/apis/meta v0.12.2 - github.com/fluxcd/pkg/runtime v0.14.1 - github.com/fluxcd/source-controller/api v0.24.3 + github.com/Azure/azure-event-hubs-go/v3 v3.3.18 + github.com/fluxcd/helm-controller/api v0.21.0 + github.com/fluxcd/image-automation-controller/api v0.22.1 + github.com/fluxcd/image-reflector-controller/api v0.18.0 + github.com/fluxcd/kustomize-controller/api v0.25.0 + github.com/fluxcd/notification-controller/api v0.23.5 + github.com/fluxcd/pkg/apis/meta v0.13.0 + github.com/fluxcd/pkg/runtime v0.14.2 + github.com/fluxcd/source-controller/api v0.24.4 github.com/hashicorp/terraform-exec v0.15.0 github.com/libgit2/git2go/v31 v31.7.9 github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 github.com/stretchr/testify v1.7.1 github.com/whilp/git-urls v1.0.0 go.uber.org/multierr v1.8.0 - k8s.io/api v0.23.5 - k8s.io/apimachinery v0.23.5 - k8s.io/client-go v0.23.5 + k8s.io/api v0.23.6 + k8s.io/apimachinery v0.23.6 + k8s.io/client-go v0.23.6 sigs.k8s.io/controller-runtime v0.11.2 ) @@ -111,8 +111,8 @@ require ( gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect - k8s.io/apiextensions-apiserver v0.23.5 // indirect - k8s.io/component-base v0.23.5 // indirect + k8s.io/apiextensions-apiserver v0.23.6 // indirect + k8s.io/component-base v0.23.6 // indirect k8s.io/klog/v2 v2.50.0 // indirect k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65 // indirect k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9 // indirect diff --git a/tests/azure/go.sum b/tests/azure/go.sum index ea4f6f91..a319e93b 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -41,8 +41,8 @@ cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9 dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/Azure/azure-amqp-common-go/v3 v3.2.3 h1:uDF62mbd9bypXWi19V1bN5NZEO84JqgmI5G73ibAmrk= github.com/Azure/azure-amqp-common-go/v3 v3.2.3/go.mod h1:7rPmbSfszeovxGfc5fSAXE4ehlXQZHpMja2OtxC2Tas= -github.com/Azure/azure-event-hubs-go/v3 v3.3.17 h1:9k2yRMBJWgcIlSNBuKVja2af/oR3oMowqFPpHDV5Kl4= -github.com/Azure/azure-event-hubs-go/v3 v3.3.17/go.mod h1:R5H325+EzgxcBDkUerEwtor7ZQg77G7HiOTwpcuIVXY= +github.com/Azure/azure-event-hubs-go/v3 v3.3.18 h1:jgWDk2qmknA0UsfyzjHiW5yciOw3aBY0Oq9p/M9lz2Q= +github.com/Azure/azure-event-hubs-go/v3 v3.3.18/go.mod h1:R5H325+EzgxcBDkUerEwtor7ZQg77G7HiOTwpcuIVXY= github.com/Azure/azure-pipeline-go v0.1.8/go.mod h1:XA1kFWRVhSK+KNFiOhfv83Fv8L9achrP7OxIzeTn1Yg= github.com/Azure/azure-pipeline-go v0.1.9/go.mod h1:XA1kFWRVhSK+KNFiOhfv83Fv8L9achrP7OxIzeTn1Yg= github.com/Azure/azure-sdk-for-go v51.1.0+incompatible h1:7uk6GWtUqKg6weLv2dbKnzwb0ml1Qn70AdtRccZ543w= @@ -192,26 +192,26 @@ github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/fluxcd/helm-controller/api v0.20.1 h1:U5JsBKT8B77gjqRObx2zSnB8jWGh8U2E8Ix6HI6Q8Aw= -github.com/fluxcd/helm-controller/api v0.20.1/go.mod h1:D1qkXPYATzhNw9tU4jP+Jr3XBPvAYMolx8MfbRhHS2g= -github.com/fluxcd/image-automation-controller/api v0.22.0 h1:k9R8KN2kcFUaSmYcprRgdTihxIDBNgJM2/Y5sxzFU3E= -github.com/fluxcd/image-automation-controller/api v0.22.0/go.mod h1:wnWx89ol/6xIj85rCxsji3aP70mRHFt5sR/WcEjY4m4= -github.com/fluxcd/image-reflector-controller/api v0.17.2 h1:QQl9YBhz+7lwKejG92StCa9Vxswph6+7O7TmkVNNoSw= -github.com/fluxcd/image-reflector-controller/api v0.17.2/go.mod h1:PwmjD9DeA6yBdGnMVzUB+5n2hVqsKTGroFlN/oR4RkI= -github.com/fluxcd/kustomize-controller/api v0.24.4 h1:6Cr6EdXtpcAh1d4vJPqsN2GvpoDYgCSlRwbd6T4oxlg= -github.com/fluxcd/kustomize-controller/api v0.24.4/go.mod h1:fzzyD5x2SRs/9XfZEVkQ89IDKykG0ugjMMrI7h5hvR8= -github.com/fluxcd/notification-controller/api v0.23.4 h1:NiH26jZu1+nbQJoeKsoGYCxi+ZdxyITkRA+vZ2+5//4= -github.com/fluxcd/notification-controller/api v0.23.4/go.mod h1:TbXfm58an42g9DwcaYMBfuli1mbGLaUdmewjLGUTIXo= +github.com/fluxcd/helm-controller/api v0.21.0 h1:MWvVzz6u9jR1aE7j1YaSEjBehw0zMndkODnjAE0/1nQ= +github.com/fluxcd/helm-controller/api v0.21.0/go.mod h1:cgP5ZR46HIhC8phUfx4Z60He9zNuIHbH3r8YEVl5ip8= +github.com/fluxcd/image-automation-controller/api v0.22.1 h1:7OtqjJU2s4GF0d6z35G+Ss4Ugvuo/vv8sQsxEX9embA= +github.com/fluxcd/image-automation-controller/api v0.22.1/go.mod h1:SKasiuSIW7+NKi6Sb4iuDa+AJR8wJS8mapZETR/PGTI= +github.com/fluxcd/image-reflector-controller/api v0.18.0 h1:31KhS4IXIcTIK1lrSgsLZTmstM2uMZj9PTUqiWAoVcY= +github.com/fluxcd/image-reflector-controller/api v0.18.0/go.mod h1:ilumM3a/k0+7Xpq13fsh5zVmDLy7du61j37NAEuKOI0= +github.com/fluxcd/kustomize-controller/api v0.25.0 h1:/qQ+4Yy1/H9Z1N/AEBIVEHy180WGTPL9UKDICMdxbjg= +github.com/fluxcd/kustomize-controller/api v0.25.0/go.mod h1:W9EDKlibtbGyF3lUnb16u3eXHYZ2awAvyR8b/PPrNkY= +github.com/fluxcd/notification-controller/api v0.23.5 h1:yVx3AXSIL52TwqIxTki3MGRPFLsnBW5ozNMCIX0uRKQ= +github.com/fluxcd/notification-controller/api v0.23.5/go.mod h1:+TZuRS0YbiKxVJYGWDTSG6sL8F0V8+7zK+y14EvV818= github.com/fluxcd/pkg/apis/acl v0.0.3 h1:Lw0ZHdpnO4G7Zy9KjrzwwBmDZQuy4qEjaU/RvA6k1lc= github.com/fluxcd/pkg/apis/acl v0.0.3/go.mod h1:XPts6lRJ9C9fIF9xVWofmQwftvhY25n1ps7W9xw0XLU= github.com/fluxcd/pkg/apis/kustomize v0.3.3 h1:bPN29SdVzWl0yhgivuf/83IAe2R6vUuDVcB3LzyVU8E= github.com/fluxcd/pkg/apis/kustomize v0.3.3/go.mod h1:5HTOFZfQFVMMqR2rvuxpbZhpb+sQpcTT6RCQZOhjFzA= -github.com/fluxcd/pkg/apis/meta v0.12.2 h1:AiKAZxLyPtV150y63WC+mL1Qm4x5qWQmW6r4mLy1i8c= -github.com/fluxcd/pkg/apis/meta v0.12.2/go.mod h1:Z26X5uTU5LxAyWETGueRQY7TvdPaGfKU7Wye9bdUlho= -github.com/fluxcd/pkg/runtime v0.14.1 h1:ZbS3RzR+f+wu1e6Y7GoCxY9PFZkOgX6/gL7Enr75CY0= -github.com/fluxcd/pkg/runtime v0.14.1/go.mod h1:eS4378ydLlWPt2fFjcrAAnJegGJNj3Q/iqYZqjBeWlM= -github.com/fluxcd/source-controller/api v0.24.3 h1:4HMXDxqjpxSo5RfTP3k9w8w7CgDn8/Gd9/jMrY6URiw= -github.com/fluxcd/source-controller/api v0.24.3/go.mod h1:+raHSQaSGlk1PqgLc0joVk1KTnf1K/lQcgxdEdZ/mk8= +github.com/fluxcd/pkg/apis/meta v0.13.0 h1:0QuNKEExSjk+Rv0I6a85p2H3xOlWhdxZRsh10waEL/c= +github.com/fluxcd/pkg/apis/meta v0.13.0/go.mod h1:Z26X5uTU5LxAyWETGueRQY7TvdPaGfKU7Wye9bdUlho= +github.com/fluxcd/pkg/runtime v0.14.2 h1:ktyUjcX4pHoC8DRoBmhEP6eMHbmR6+/MYoARe4YulZY= +github.com/fluxcd/pkg/runtime v0.14.2/go.mod h1:NZr3PRK7xX2M1bl0LdtugvQyWkOmu2NcW3NrZH6U0is= +github.com/fluxcd/source-controller/api v0.24.4 h1:m54sS1rJlgJf5j9qDRgKLhbPJAnJ9dY+VrstPKj0aQo= +github.com/fluxcd/source-controller/api v0.24.4/go.mod h1:b0MmMPGE8gcpgSyGXe5m7see77tBW26eZrvGkkPstUs= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/form3tech-oss/jwt-go v3.2.3+incompatible h1:7ZaBxOI7TMoYBfyA3cQHErNNyAWIKUMIwqxEtgHOs5c= @@ -1106,18 +1106,18 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -k8s.io/api v0.23.5 h1:zno3LUiMubxD/V1Zw3ijyKO3wxrhbUF1Ck+VjBvfaoA= -k8s.io/api v0.23.5/go.mod h1:Na4XuKng8PXJ2JsploYYrivXrINeTaycCGcYgF91Xm8= -k8s.io/apiextensions-apiserver v0.23.5 h1:5SKzdXyvIJKu+zbfPc3kCbWpbxi+O+zdmAJBm26UJqI= -k8s.io/apiextensions-apiserver v0.23.5/go.mod h1:ntcPWNXS8ZPKN+zTXuzYMeg731CP0heCTl6gYBxLcuQ= -k8s.io/apimachinery v0.23.5 h1:Va7dwhp8wgkUPWsEXk6XglXWU4IKYLKNlv8VkX7SDM0= -k8s.io/apimachinery v0.23.5/go.mod h1:BEuFMMBaIbcOqVIJqNZJXGFTP4W6AycEpb5+m/97hrM= -k8s.io/apiserver v0.23.5/go.mod h1:7wvMtGJ42VRxzgVI7jkbKvMbuCbVbgsWFT7RyXiRNTw= -k8s.io/client-go v0.23.5 h1:zUXHmEuqx0RY4+CsnkOn5l0GU+skkRXKGJrhmE2SLd8= -k8s.io/client-go v0.23.5/go.mod h1:flkeinTO1CirYgzMPRWxUCnV0G4Fbu2vLhYCObnt/r4= -k8s.io/code-generator v0.23.5/go.mod h1:S0Q1JVA+kSzTI1oUvbKAxZY/DYbA/ZUb4Uknog12ETk= -k8s.io/component-base v0.23.5 h1:8qgP5R6jG1BBSXmRYW+dsmitIrpk8F/fPEvgDenMCCE= -k8s.io/component-base v0.23.5/go.mod h1:c5Nq44KZyt1aLl0IpHX82fhsn84Sb0jjzwjpcA42bY0= +k8s.io/api v0.23.6 h1:yOK34wbYECH4RsJbQ9sfkFK3O7f/DUHRlzFehkqZyVw= +k8s.io/api v0.23.6/go.mod h1:1kFaYxGCFHYp3qd6a85DAj/yW8aVD6XLZMqJclkoi9g= +k8s.io/apiextensions-apiserver v0.23.6 h1:v58cQ6Z0/GK1IXYr+oW0fnYl52o9LTY0WgoWvI8uv5Q= +k8s.io/apiextensions-apiserver v0.23.6/go.mod h1:YVh17Mphv183THQJA5spNFp9XfoidFyL3WoDgZxQIZU= +k8s.io/apimachinery v0.23.6 h1:RH1UweWJkWNTlFx0D8uxOpaU1tjIOvVVWV/bu5b3/NQ= +k8s.io/apimachinery v0.23.6/go.mod h1:BEuFMMBaIbcOqVIJqNZJXGFTP4W6AycEpb5+m/97hrM= +k8s.io/apiserver v0.23.6/go.mod h1:5PU32F82tfErXPmf7FXhd/UcuLfh97tGepjKUgJ2atg= +k8s.io/client-go v0.23.6 h1:7h4SctDVQAQbkHQnR4Kzi7EyUyvla5G1pFWf4+Od7hQ= +k8s.io/client-go v0.23.6/go.mod h1:Umt5icFOMLV/+qbtZ3PR0D+JA6lvvb3syzodv4irpK4= +k8s.io/code-generator v0.23.6/go.mod h1:S0Q1JVA+kSzTI1oUvbKAxZY/DYbA/ZUb4Uknog12ETk= +k8s.io/component-base v0.23.6 h1:8dhVZ4VrRcNdV2EGjl8tj8YOHwX6ysgCGMJ2Oyy0NW8= +k8s.io/component-base v0.23.6/go.mod h1:FGMPeMrjYu0UZBSAFcfloVDplj9IvU+uRMTOdE23Fj0= k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= From 8e4044eed93b44f7b019115e03fbb1e5b835d8ca Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Tue, 3 May 2022 20:47:16 +0200 Subject: [PATCH 099/818] Update dependencies - github.com/fluxcd/pkg/runtime to v0.14.2 - github.com/google/go-cmp to v0.5.8 - golang.org/x/crypto to v0.0.0-20220427172511-eb4f295cb31f - k8s.io/cli-runtime to v0.23.6 - k8s.io/kubectl to v0.23.6 Signed-off-by: Hidde Beydals --- Dockerfile | 2 +- go.mod | 10 +++++----- go.sum | 30 ++++++++++++------------------ 3 files changed, 18 insertions(+), 24 deletions(-) diff --git a/Dockerfile b/Dockerfile index 4d72c9fb..cc326f41 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ FROM alpine:3.15 as builder RUN apk add --no-cache ca-certificates curl ARG ARCH=linux/amd64 -ARG KUBECTL_VER=1.23.1 +ARG KUBECTL_VER=1.23.6 RUN curl -sL https://storage.googleapis.com/kubernetes-release/release/v${KUBECTL_VER}/bin/${ARCH}/kubectl \ -o /usr/local/bin/kubectl && chmod +x /usr/local/bin/kubectl && \ diff --git a/go.mod b/go.mod index a2031b36..6241f9ef 100644 --- a/go.mod +++ b/go.mod @@ -14,7 +14,7 @@ require ( github.com/fluxcd/notification-controller/api v0.23.5 github.com/fluxcd/pkg/apis/meta v0.13.0 github.com/fluxcd/pkg/kustomize v0.4.0 - github.com/fluxcd/pkg/runtime v0.14.1 + github.com/fluxcd/pkg/runtime v0.14.2 github.com/fluxcd/pkg/ssa v0.15.2 github.com/fluxcd/pkg/ssh v0.3.2 github.com/fluxcd/pkg/untar v0.1.0 @@ -23,7 +23,7 @@ require ( github.com/go-git/go-git/v5 v5.4.2 github.com/gonvenience/bunt v1.3.3 github.com/gonvenience/ytbx v1.4.4 - github.com/google/go-cmp v0.5.7 + github.com/google/go-cmp v0.5.8 github.com/google/go-containerregistry v0.8.0 github.com/hashicorp/go-multierror v1.1.1 github.com/homeport/dyff v1.5.2 @@ -34,14 +34,14 @@ require ( github.com/spf13/cobra v1.4.0 github.com/spf13/pflag v1.0.5 github.com/theckman/yacspin v0.13.12 - golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 + golang.org/x/crypto v0.0.0-20220427172511-eb4f295cb31f golang.org/x/term v0.0.0-20220411215600-e5f449aeb171 k8s.io/api v0.23.6 k8s.io/apiextensions-apiserver v0.23.6 k8s.io/apimachinery v0.23.6 - k8s.io/cli-runtime v0.23.5 + k8s.io/cli-runtime v0.23.6 k8s.io/client-go v0.23.6 - k8s.io/kubectl v0.23.5 + k8s.io/kubectl v0.23.6 sigs.k8s.io/cli-utils v0.29.4 sigs.k8s.io/controller-runtime v0.11.2 sigs.k8s.io/kustomize/api v0.11.4 diff --git a/go.sum b/go.sum index 02fba884..c5b9a894 100644 --- a/go.sum +++ b/go.sum @@ -393,8 +393,8 @@ github.com/fluxcd/pkg/apis/meta v0.13.0 h1:0QuNKEExSjk+Rv0I6a85p2H3xOlWhdxZRsh10 github.com/fluxcd/pkg/apis/meta v0.13.0/go.mod h1:Z26X5uTU5LxAyWETGueRQY7TvdPaGfKU7Wye9bdUlho= github.com/fluxcd/pkg/kustomize v0.4.0 h1:ct1YGrO/o++NVecAyeOxd3/YzGNvRdslaE6pmWxBt0M= github.com/fluxcd/pkg/kustomize v0.4.0/go.mod h1:ZlTFhk6Cxtmf1T7tpYuTACmMfqDdsPcXUGRAq3t9fH8= -github.com/fluxcd/pkg/runtime v0.14.1 h1:ZbS3RzR+f+wu1e6Y7GoCxY9PFZkOgX6/gL7Enr75CY0= -github.com/fluxcd/pkg/runtime v0.14.1/go.mod h1:eS4378ydLlWPt2fFjcrAAnJegGJNj3Q/iqYZqjBeWlM= +github.com/fluxcd/pkg/runtime v0.14.2 h1:ktyUjcX4pHoC8DRoBmhEP6eMHbmR6+/MYoARe4YulZY= +github.com/fluxcd/pkg/runtime v0.14.2/go.mod h1:NZr3PRK7xX2M1bl0LdtugvQyWkOmu2NcW3NrZH6U0is= github.com/fluxcd/pkg/ssa v0.15.2 h1:hLEIh7Ymlt6ihfQHIEx7DjAa+FCndBpHW6wyELToVsI= github.com/fluxcd/pkg/ssa v0.15.2/go.mod h1:wwDtLfi7a31/yQuC/oeHXZpaSHGrkZk835uhdHDNyik= github.com/fluxcd/pkg/ssh v0.3.2 h1:HZlDF6Qu4yplsU4Tisv6hxsRIbIOwwr7rKus8/Q/Dn0= @@ -550,8 +550,8 @@ github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.7 h1:81/ik6ipDQS2aGcBfIN5dHDB36BwrStyeAQquSYCV4o= -github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= +github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= +github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-containerregistry v0.8.0 h1:mtR24eN6rapCN+shds82qFEIWWmg64NPMuyCNT7/Ogc= github.com/google/go-containerregistry v0.8.0/go.mod h1:wW5v71NHGnQyb4k+gSshjxidrC7lN33MdWEn+Mz9TsI= github.com/google/go-github/v41 v41.0.0 h1:HseJrM2JFf2vfiZJ8anY2hqBjdfY1Vlj/K27ueww4gg= @@ -1128,8 +1128,8 @@ golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 h1:kUhD7nTDoI3fVd9G4ORWrbV5NY0liEs/Jg2pv5f+bBA= -golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220427172511-eb4f295cb31f h1:OeJjE6G4dgCY4PIXvIRQbE8+RX+uXZyGhUy/ksMGJoc= +golang.org/x/crypto v0.0.0-20220427172511-eb4f295cb31f/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -1463,7 +1463,6 @@ golang.org/x/tools v0.1.8/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gomodules.xyz/jsonpatch/v2 v2.2.0 h1:4pT439QV83L+G9FkcCriY6EkpcK6r6bK+A5FBUMI7qY= gomodules.xyz/jsonpatch/v2 v2.2.0/go.mod h1:WXp+iVDkoLQqPudfQ9GBlwB2eZ5DKOnjQZCYdOS8GPY= @@ -1682,7 +1681,6 @@ honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9 k8s.io/api v0.20.1/go.mod h1:KqwcCVogGxQY3nBlRpwt+wpAMF/KjaCc7RpywacvqUo= k8s.io/api v0.20.4/go.mod h1:++lNL1AJMkDymriNniQsWRkMDzRaX2Y/POTUi8yvqYQ= k8s.io/api v0.20.6/go.mod h1:X9e8Qag6JV/bL5G6bU8sdVRltWKmdHsFUGS3eVndqE8= -k8s.io/api v0.23.5/go.mod h1:Na4XuKng8PXJ2JsploYYrivXrINeTaycCGcYgF91Xm8= k8s.io/api v0.23.6 h1:yOK34wbYECH4RsJbQ9sfkFK3O7f/DUHRlzFehkqZyVw= k8s.io/api v0.23.6/go.mod h1:1kFaYxGCFHYp3qd6a85DAj/yW8aVD6XLZMqJclkoi9g= k8s.io/apiextensions-apiserver v0.23.6 h1:v58cQ6Z0/GK1IXYr+oW0fnYl52o9LTY0WgoWvI8uv5Q= @@ -1690,30 +1688,26 @@ k8s.io/apiextensions-apiserver v0.23.6/go.mod h1:YVh17Mphv183THQJA5spNFp9XfoidFy k8s.io/apimachinery v0.20.1/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= k8s.io/apimachinery v0.20.4/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= k8s.io/apimachinery v0.20.6/go.mod h1:ejZXtW1Ra6V1O5H8xPBGz+T3+4gfkTCeExAHKU57MAc= -k8s.io/apimachinery v0.23.5/go.mod h1:BEuFMMBaIbcOqVIJqNZJXGFTP4W6AycEpb5+m/97hrM= k8s.io/apimachinery v0.23.6 h1:RH1UweWJkWNTlFx0D8uxOpaU1tjIOvVVWV/bu5b3/NQ= k8s.io/apimachinery v0.23.6/go.mod h1:BEuFMMBaIbcOqVIJqNZJXGFTP4W6AycEpb5+m/97hrM= k8s.io/apiserver v0.20.1/go.mod h1:ro5QHeQkgMS7ZGpvf4tSMx6bBOgPfE+f52KwvXfScaU= k8s.io/apiserver v0.20.4/go.mod h1:Mc80thBKOyy7tbvFtB4kJv1kbdD0eIH8k8vianJcbFM= k8s.io/apiserver v0.20.6/go.mod h1:QIJXNt6i6JB+0YQRNcS0hdRHJlMhflFmsBDeSgT1r8Q= k8s.io/apiserver v0.23.6/go.mod h1:5PU32F82tfErXPmf7FXhd/UcuLfh97tGepjKUgJ2atg= -k8s.io/cli-runtime v0.23.5 h1:Z7XUpGoJZYZB2uNjQfJjMbyDKyVkoBGye62Ap0sWQHY= -k8s.io/cli-runtime v0.23.5/go.mod h1:oY6QDF2qo9xndSq32tqcmRp2UyXssdGrLfjAVymgbx4= +k8s.io/cli-runtime v0.23.6 h1:zvsGa4An+udUnznKSfD1Q17sETWHNOaMqYKHwHCvg+4= +k8s.io/cli-runtime v0.23.6/go.mod h1:0Z3VR/HRIFKiLzKIAkm1mPtcH98GT/fXu2IU0E4vFmw= k8s.io/client-go v0.20.1/go.mod h1:/zcHdt1TeWSd5HoUe6elJmHSQ6uLLgp4bIJHVEuy+/Y= k8s.io/client-go v0.20.4/go.mod h1:LiMv25ND1gLUdBeYxBIwKpkSC5IsozMMmOOeSJboP+k= k8s.io/client-go v0.20.6/go.mod h1:nNQMnOvEUEsOzRRFIIkdmYOjAZrC8bgq0ExboWSU1I0= -k8s.io/client-go v0.23.5/go.mod h1:flkeinTO1CirYgzMPRWxUCnV0G4Fbu2vLhYCObnt/r4= k8s.io/client-go v0.23.6 h1:7h4SctDVQAQbkHQnR4Kzi7EyUyvla5G1pFWf4+Od7hQ= k8s.io/client-go v0.23.6/go.mod h1:Umt5icFOMLV/+qbtZ3PR0D+JA6lvvb3syzodv4irpK4= -k8s.io/code-generator v0.23.5/go.mod h1:S0Q1JVA+kSzTI1oUvbKAxZY/DYbA/ZUb4Uknog12ETk= k8s.io/code-generator v0.23.6/go.mod h1:S0Q1JVA+kSzTI1oUvbKAxZY/DYbA/ZUb4Uknog12ETk= k8s.io/component-base v0.20.1/go.mod h1:guxkoJnNoh8LNrbtiQOlyp2Y2XFCZQmrcg2n/DeYNLk= k8s.io/component-base v0.20.4/go.mod h1:t4p9EdiagbVCJKrQ1RsA5/V4rFQNDfRlevJajlGwgjI= k8s.io/component-base v0.20.6/go.mod h1:6f1MPBAeI+mvuts3sIdtpjljHWBQ2cIy38oBIWMYnrM= -k8s.io/component-base v0.23.5/go.mod h1:c5Nq44KZyt1aLl0IpHX82fhsn84Sb0jjzwjpcA42bY0= k8s.io/component-base v0.23.6 h1:8dhVZ4VrRcNdV2EGjl8tj8YOHwX6ysgCGMJ2Oyy0NW8= k8s.io/component-base v0.23.6/go.mod h1:FGMPeMrjYu0UZBSAFcfloVDplj9IvU+uRMTOdE23Fj0= -k8s.io/component-helpers v0.23.5/go.mod h1:5riXJgjTIs+ZB8xnf5M2anZ8iQuq37a0B/0BgoPQuSM= +k8s.io/component-helpers v0.23.6/go.mod h1:kgvl6wvnYg9oebklLPpbW8UhvAZ9Qds26/RANEbny/8= k8s.io/cri-api v0.17.3/go.mod h1:X1sbHmuXhwaHs9xxYffLqJogVsnI+f6cPRcgPel7ywM= k8s.io/cri-api v0.20.1/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI= k8s.io/cri-api v0.20.4/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI= @@ -1730,10 +1724,10 @@ k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAG k8s.io/kube-openapi v0.0.0-20210421082810-95288971da7e/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw= k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65 h1:E3J9oCLlaobFUqsjG9DfKbP2BmgwBL2p7pn0A3dG9W4= k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65/go.mod h1:sX9MT8g7NVZM5lVL/j8QyCCJe8YSMW30QvGZWaCIDIk= -k8s.io/kubectl v0.23.5 h1:DmDULqCaF4qstj0Im143XmncvqWtJxHzK8IrW2BzlU0= -k8s.io/kubectl v0.23.5/go.mod h1:lLgw7cVY8xbd7o637vOXPca/w6HC205KsPCRDYRCxwE= +k8s.io/kubectl v0.23.6 h1:ajzrqj88GqlH/gpscMCts+mKNeSJprpkWJEHO8CR2Ss= +k8s.io/kubectl v0.23.6/go.mod h1:mMtJhc2QtQiSfvIQoMEUIjGHtZuP4uxMy/ees6j6zx8= k8s.io/kubernetes v1.13.0/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk= -k8s.io/metrics v0.23.5/go.mod h1:WNAtV2a5BYbmDS8+7jSqYYV6E3efuGTpIwJ8PTD1wgs= +k8s.io/metrics v0.23.6/go.mod h1:Fm9VzVMZ7KVEEeLStF2y3XogfcDwpGyI15o1xB6PbYk= k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20211116205334-6203023598ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= From b5c0ae9d5ada091a4f705716d573e45a7c6edb3b Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Tue, 3 May 2022 21:05:41 +0200 Subject: [PATCH 100/818] build: update various CI dependencies - kind to v0.12.0 - kubectl to v1.23.6 - helm to v3.8.2 - runner to v2.291.1 Signed-off-by: Hidde Beydals --- .github/runners/prereq.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/runners/prereq.sh b/.github/runners/prereq.sh index bcec3428..6c20ec3d 100755 --- a/.github/runners/prereq.sh +++ b/.github/runners/prereq.sh @@ -18,11 +18,11 @@ set -eu -KIND_VERSION=0.11.1 -KUBECTL_VERSION=1.21.2 -KUSTOMIZE_VERSION=4.1.3 -HELM_VERSION=3.7.2 -GITHUB_RUNNER_VERSION=2.285.1 +KIND_VERSION=0.12.0 +KUBECTL_VERSION=1.23.6 +KUSTOMIZE_VERSION=4.5.4 +HELM_VERSION=3.8.2 +GITHUB_RUNNER_VERSION=2.291.1 PACKAGES="apt-transport-https ca-certificates software-properties-common build-essential libssl-dev gnupg lsb-release jq pkg-config" # install prerequisites From b9fbdfc9a447d9f9543b967433adedcf28ff14db Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 4 May 2022 09:41:26 +0300 Subject: [PATCH 101/818] Fix bootstrap manifest generation Use the OS package to write the generated files on disk instead of Flux secure FS package which is meant for read operations. Signed-off-by: Stefan Prodan --- pkg/manifestgen/install/manifests.go | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/pkg/manifestgen/install/manifests.go b/pkg/manifestgen/install/manifests.go index 17fc33f1..6ab91eae 100644 --- a/pkg/manifestgen/install/manifests.go +++ b/pkg/manifestgen/install/manifests.go @@ -26,7 +26,6 @@ import ( "path/filepath" "strings" - "github.com/fluxcd/pkg/kustomize/filesys" "github.com/fluxcd/pkg/untar" "github.com/fluxcd/flux2/pkg/manifestgen/kustomization" @@ -126,12 +125,7 @@ func build(base, output string) error { return err } - outputBase := filepath.Dir(strings.TrimSuffix(output, string(filepath.Separator))) - fs, err := filesys.MakeFsOnDiskSecure(outputBase) - if err != nil { - return err - } - if err = fs.WriteFile(output, resources); err != nil { + if err = os.WriteFile(output, resources, 0o640); err != nil { return err } From 5dee903374accaf36d50713c9f84af4d3f8b669a Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 4 May 2022 10:47:04 +0300 Subject: [PATCH 102/818] Grant service account read-only access to controllers For image automation to use a service account to authenticate to container registries, the controllers needs read-only access to service accounts. Signed-off-by: Stefan Prodan --- manifests/rbac/controller.yaml | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/manifests/rbac/controller.yaml b/manifests/rbac/controller.yaml index 7fb181c5..7eb0d7fd 100644 --- a/manifests/rbac/controller.yaml +++ b/manifests/rbac/controller.yaml @@ -23,6 +23,8 @@ rules: resources: - namespaces - secrets + - configmaps + - serviceaccounts verbs: - get - list @@ -34,19 +36,6 @@ rules: verbs: - create - patch -- apiGroups: - - "" - resources: - - configmaps - - configmaps/status - verbs: - - get - - list - - watch - - create - - update - - patch - - delete - apiGroups: - "coordination.k8s.io" resources: From 1ece35e4c559ff16f4799b2928d551cd797132c6 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 4 May 2022 11:11:51 +0300 Subject: [PATCH 103/818] Add leader election required permissions Signed-off-by: Stefan Prodan --- manifests/rbac/controller.yaml | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/manifests/rbac/controller.yaml b/manifests/rbac/controller.yaml index 7eb0d7fd..c444c58e 100644 --- a/manifests/rbac/controller.yaml +++ b/manifests/rbac/controller.yaml @@ -36,6 +36,27 @@ rules: verbs: - create - patch +# required by leader election +- apiGroups: + - "" + resources: + - configmaps + verbs: + - get + - list + - watch + - create + - update + - patch + - delete +- apiGroups: + - "" + resources: + - configmaps/status + verbs: + - get + - update + - patch - apiGroups: - "coordination.k8s.io" resources: From 7232ff9ea01c1510e5d8e4ef1aea0025f5250824 Mon Sep 17 00:00:00 2001 From: Sanskar Jaiswal Date: Wed, 4 May 2022 14:41:21 +0530 Subject: [PATCH 104/818] modify tmp dir generation to be absolute on all OSes Signed-off-by: Sanskar Jaiswal --- cmd/flux/bootstrap.go | 4 +-- cmd/flux/bootstrap_bitbucket_server.go | 3 +- cmd/flux/bootstrap_git.go | 3 +- cmd/flux/bootstrap_github.go | 3 +- cmd/flux/bootstrap_gitlab.go | 3 +- cmd/flux/install.go | 3 +- pkg/manifestgen/install/install.go | 2 +- pkg/manifestgen/install/manifests.go | 8 +++++- pkg/manifestgen/tmpdir.go | 38 ++++++++++++++++++++++++++ 9 files changed, 58 insertions(+), 9 deletions(-) create mode 100644 pkg/manifestgen/tmpdir.go diff --git a/cmd/flux/bootstrap.go b/cmd/flux/bootstrap.go index b4b319ef..9e390a89 100644 --- a/cmd/flux/bootstrap.go +++ b/cmd/flux/bootstrap.go @@ -19,13 +19,13 @@ package main import ( "crypto/elliptic" "fmt" - "os" "strings" "github.com/spf13/cobra" "github.com/fluxcd/flux2/internal/flags" "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/flux2/pkg/manifestgen" "github.com/fluxcd/flux2/pkg/manifestgen/sourcesecret" ) @@ -154,7 +154,7 @@ func buildEmbeddedManifestBase() (string, error) { if !isEmbeddedVersion(bootstrapArgs.version) { return "", nil } - tmpBaseDir, err := os.MkdirTemp("", "flux-manifests-") + tmpBaseDir, err := manifestgen.MkdirTempAbs("", "flux-manifests-") if err != nil { return "", err } diff --git a/cmd/flux/bootstrap_bitbucket_server.go b/cmd/flux/bootstrap_bitbucket_server.go index 4898e1fe..b620fa61 100644 --- a/cmd/flux/bootstrap_bitbucket_server.go +++ b/cmd/flux/bootstrap_bitbucket_server.go @@ -30,6 +30,7 @@ import ( "github.com/fluxcd/flux2/internal/bootstrap/provider" "github.com/fluxcd/flux2/internal/flags" "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/flux2/pkg/manifestgen" "github.com/fluxcd/flux2/pkg/manifestgen/install" "github.com/fluxcd/flux2/pkg/manifestgen/sourcesecret" "github.com/fluxcd/flux2/pkg/manifestgen/sync" @@ -165,7 +166,7 @@ func bootstrapBServerCmdRun(cmd *cobra.Command, args []string) error { } // Lazy go-git repository - tmpDir, err := os.MkdirTemp("", "flux-bootstrap-") + tmpDir, err := manifestgen.MkdirTempAbs("", "flux-bootstrap-") if err != nil { return fmt.Errorf("failed to create temporary working dir: %w", err) } diff --git a/cmd/flux/bootstrap_git.go b/cmd/flux/bootstrap_git.go index 7e2193eb..f3005107 100644 --- a/cmd/flux/bootstrap_git.go +++ b/cmd/flux/bootstrap_git.go @@ -35,6 +35,7 @@ import ( "github.com/fluxcd/flux2/internal/bootstrap/git/gogit" "github.com/fluxcd/flux2/internal/flags" "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/flux2/pkg/manifestgen" "github.com/fluxcd/flux2/pkg/manifestgen/install" "github.com/fluxcd/flux2/pkg/manifestgen/sourcesecret" "github.com/fluxcd/flux2/pkg/manifestgen/sync" @@ -137,7 +138,7 @@ func bootstrapGitCmdRun(cmd *cobra.Command, args []string) error { defer os.RemoveAll(manifestsBase) // Lazy go-git repository - tmpDir, err := os.MkdirTemp("", "flux-bootstrap-") + tmpDir, err := manifestgen.MkdirTempAbs("", "flux-bootstrap-") if err != nil { return fmt.Errorf("failed to create temporary working dir: %w", err) } diff --git a/cmd/flux/bootstrap_github.go b/cmd/flux/bootstrap_github.go index 3f2ff342..14261820 100644 --- a/cmd/flux/bootstrap_github.go +++ b/cmd/flux/bootstrap_github.go @@ -30,6 +30,7 @@ import ( "github.com/fluxcd/flux2/internal/bootstrap/provider" "github.com/fluxcd/flux2/internal/flags" "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/flux2/pkg/manifestgen" "github.com/fluxcd/flux2/pkg/manifestgen/install" "github.com/fluxcd/flux2/pkg/manifestgen/sourcesecret" "github.com/fluxcd/flux2/pkg/manifestgen/sync" @@ -161,7 +162,7 @@ func bootstrapGitHubCmdRun(cmd *cobra.Command, args []string) error { } // Lazy go-git repository - tmpDir, err := os.MkdirTemp("", "flux-bootstrap-") + tmpDir, err := manifestgen.MkdirTempAbs("", "flux-bootstrap-") if err != nil { return fmt.Errorf("failed to create temporary working dir: %w", err) } diff --git a/cmd/flux/bootstrap_gitlab.go b/cmd/flux/bootstrap_gitlab.go index afebfa91..56768042 100644 --- a/cmd/flux/bootstrap_gitlab.go +++ b/cmd/flux/bootstrap_gitlab.go @@ -32,6 +32,7 @@ import ( "github.com/fluxcd/flux2/internal/bootstrap/provider" "github.com/fluxcd/flux2/internal/flags" "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/flux2/pkg/manifestgen" "github.com/fluxcd/flux2/pkg/manifestgen/install" "github.com/fluxcd/flux2/pkg/manifestgen/sourcesecret" "github.com/fluxcd/flux2/pkg/manifestgen/sync" @@ -172,7 +173,7 @@ func bootstrapGitLabCmdRun(cmd *cobra.Command, args []string) error { } // Lazy go-git repository - tmpDir, err := os.MkdirTemp("", "flux-bootstrap-") + tmpDir, err := manifestgen.MkdirTempAbs("", "flux-bootstrap-") if err != nil { return fmt.Errorf("failed to create temporary working dir: %w", err) } diff --git a/cmd/flux/install.go b/cmd/flux/install.go index 616e3c95..0af11cee 100644 --- a/cmd/flux/install.go +++ b/cmd/flux/install.go @@ -27,6 +27,7 @@ import ( "github.com/fluxcd/flux2/internal/flags" "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/flux2/pkg/manifestgen" "github.com/fluxcd/flux2/pkg/manifestgen/install" "github.com/fluxcd/flux2/pkg/status" ) @@ -134,7 +135,7 @@ func installCmdRun(cmd *cobra.Command, args []string) error { logger.Generatef("generating manifests") } - tmpDir, err := os.MkdirTemp("", *kubeconfigArgs.Namespace) + tmpDir, err := manifestgen.MkdirTempAbs("", *kubeconfigArgs.Namespace) if err != nil { return err } diff --git a/pkg/manifestgen/install/install.go b/pkg/manifestgen/install/install.go index ce6d1e19..80621782 100644 --- a/pkg/manifestgen/install/install.go +++ b/pkg/manifestgen/install/install.go @@ -54,7 +54,7 @@ func Generate(options Options, manifestsBase string) (*manifestgen.Manifest, err } else { // download the manifests base from GitHub if manifestsBase == "" { - manifestsBase, err = os.MkdirTemp("", options.Namespace) + manifestsBase, err = manifestgen.MkdirTempAbs("", options.Namespace) if err != nil { return nil, fmt.Errorf("temp dir error: %w", err) } diff --git a/pkg/manifestgen/install/manifests.go b/pkg/manifestgen/install/manifests.go index 6ab91eae..17fc33f1 100644 --- a/pkg/manifestgen/install/manifests.go +++ b/pkg/manifestgen/install/manifests.go @@ -26,6 +26,7 @@ import ( "path/filepath" "strings" + "github.com/fluxcd/pkg/kustomize/filesys" "github.com/fluxcd/pkg/untar" "github.com/fluxcd/flux2/pkg/manifestgen/kustomization" @@ -125,7 +126,12 @@ func build(base, output string) error { return err } - if err = os.WriteFile(output, resources, 0o640); err != nil { + outputBase := filepath.Dir(strings.TrimSuffix(output, string(filepath.Separator))) + fs, err := filesys.MakeFsOnDiskSecure(outputBase) + if err != nil { + return err + } + if err = fs.WriteFile(output, resources); err != nil { return err } diff --git a/pkg/manifestgen/tmpdir.go b/pkg/manifestgen/tmpdir.go new file mode 100644 index 00000000..db4daf13 --- /dev/null +++ b/pkg/manifestgen/tmpdir.go @@ -0,0 +1,38 @@ +/* +Copyright 2022 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package manifestgen + +import ( + "fmt" + "os" + "path/filepath" +) + +// MkdirTempAbs creates a tmp dir and returns the absolute path to the dir. +// This is required since certain OSes like MacOS create temporary files in +// e.g. `/private/var`, to which `/var` is a symlink. +func MkdirTempAbs(dir, pattern string) (string, error) { + tmpDir, err := os.MkdirTemp(dir, pattern) + if err != nil { + return "", err + } + tmpDir, err = filepath.EvalSymlinks(tmpDir) + if err != nil { + return "", fmt.Errorf("error evaluating symlink: %w", err) + } + return tmpDir, nil +} From e1def4f8ac11b9d73c1caaa13a7c69626c964315 Mon Sep 17 00:00:00 2001 From: Max Jonas Werner Date: Wed, 18 May 2022 16:36:18 +0200 Subject: [PATCH 105/818] make e2e test easier to debug Signed-off-by: Max Jonas Werner --- cmd/flux/check_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/flux/check_test.go b/cmd/flux/check_test.go index e6374535..41b885ab 100644 --- a/cmd/flux/check_test.go +++ b/cmd/flux/check_test.go @@ -37,7 +37,7 @@ func TestCheckPre(t *testing.T) { var versions map[string]version.Info if err := json.Unmarshal([]byte(jsonOutput), &versions); err != nil { - t.Fatalf("Error unmarshalling: %v", err.Error()) + t.Fatalf("Error unmarshalling '%s': %v", jsonOutput, err.Error()) } serverVersion := strings.TrimPrefix(versions["serverVersion"].GitVersion, "v") From 9af61753020bc8a55531a451365f1474b0bc213d Mon Sep 17 00:00:00 2001 From: Max Jonas Werner Date: Wed, 18 May 2022 16:51:18 +0200 Subject: [PATCH 106/818] fix e2e check test The output of `kubectl version` has changed with newer kubectl version from ``` { "serverVersion": ..., "clientVersion": ... } ``` to ``` { "serverVersion": ..., "clientVersion": ..., "kustomizeVersion": ... } ``` So the `kustomizeVersion` field is new which causes the JSON unmarshaling to fail. We now just unmarshal it to `map[string]interface{}` and peel the server git version out of that map manually w/o unmarshalling the JSON into a custom type. Signed-off-by: Max Jonas Werner --- cmd/flux/check_test.go | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/cmd/flux/check_test.go b/cmd/flux/check_test.go index 41b885ab..abfd8463 100644 --- a/cmd/flux/check_test.go +++ b/cmd/flux/check_test.go @@ -22,11 +22,9 @@ package main import ( "context" "encoding/json" - "strings" "testing" "github.com/fluxcd/flux2/internal/utils" - "k8s.io/apimachinery/pkg/version" ) func TestCheckPre(t *testing.T) { @@ -35,17 +33,17 @@ func TestCheckPre(t *testing.T) { t.Fatalf("Error running utils.ExecKubectlCommand: %v", err.Error()) } - var versions map[string]version.Info + var versions map[string]interface{} if err := json.Unmarshal([]byte(jsonOutput), &versions); err != nil { t.Fatalf("Error unmarshalling '%s': %v", jsonOutput, err.Error()) } - serverVersion := strings.TrimPrefix(versions["serverVersion"].GitVersion, "v") + serverGitVersion := versions["serverVersion"].(map[string]interface{})["gitVersion"].(string) cmd := cmdTestCase{ args: "check --pre", assert: assertGoldenTemplateFile("testdata/check/check_pre.golden", map[string]string{ - "serverVersion": serverVersion, + "serverVersion": serverGitVersion, }), } cmd.runTestCmd(t) From e35da1c8904e20955ddf811db225aae587e30dac Mon Sep 17 00:00:00 2001 From: Max Jonas Werner Date: Wed, 18 May 2022 17:08:50 +0200 Subject: [PATCH 107/818] trim prefix from server version It's not part of the `flux check` output. Signed-off-by: Max Jonas Werner --- cmd/flux/check_test.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cmd/flux/check_test.go b/cmd/flux/check_test.go index abfd8463..50aac200 100644 --- a/cmd/flux/check_test.go +++ b/cmd/flux/check_test.go @@ -22,6 +22,7 @@ package main import ( "context" "encoding/json" + "strings" "testing" "github.com/fluxcd/flux2/internal/utils" @@ -38,7 +39,9 @@ func TestCheckPre(t *testing.T) { t.Fatalf("Error unmarshalling '%s': %v", jsonOutput, err.Error()) } - serverGitVersion := versions["serverVersion"].(map[string]interface{})["gitVersion"].(string) + serverGitVersion := strings.TrimPrefix( + versions["serverVersion"].(map[string]interface{})["gitVersion"].(string), + "v") cmd := cmdTestCase{ args: "check --pre", From 97a7b4450fe755d5a9a2b75bef51601351eaff53 Mon Sep 17 00:00:00 2001 From: Daniel Holbach Date: Wed, 18 May 2022 12:06:15 +0200 Subject: [PATCH 108/818] Move MAINTAINERS to f/community Signed-off-by: Daniel Holbach --- MAINTAINERS | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-) diff --git a/MAINTAINERS b/MAINTAINERS index cf2893d3..03d9f7ba 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2,20 +2,7 @@ The maintainers are generally available in Slack at https://cloud-native.slack.com in #flux (https://cloud-native.slack.com/messages/CLAJ40HV3) (obtain an invitation at https://slack.cncf.io/). -These maintainers are shared with other Flux v2-related git -repositories under https://github.com/fluxcd, as noted in their -respective MAINTAINERS files. +The Flux2 maintainers team is identical with the core maintainers of the project +as listed in -For convenience, they are reflected in the GitHub team -@fluxcd/flux2-maintainers -- if the list here changes, that team also -should. - -In alphabetical order: - -Aurel Canciu, NexHealth (github: @relu, slack: relu) -Hidde Beydals, Weaveworks (github: @hiddeco, slack: hidde) -Max Jonas Werner, D2iQ (github: @makkes, slack: max) -Paulo Gomes, Weaveworks (github: @pjbgf, slack: pjbgf) -Philip Laine, Xenit (github: @phillebaba, slack: phillebaba) -Stefan Prodan, Weaveworks (github: @stefanprodan, slack: stefanprodan) -Sunny, Weaveworks (github: @darkowlzz, slack: darkowlzz) + https://github.com/fluxcd/community/blob/main/CORE-MAINTAINERS From 5130a154e4ba0e74505805d1c0ff3aa1cd777218 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Tue, 24 May 2022 12:03:40 +0200 Subject: [PATCH 109/818] Ensure proper FS root is set while bootstrapping This ensures relative paths to e.g. bases can be used. Signed-off-by: Hidde Beydals --- cmd/flux/install.go | 2 +- internal/bootstrap/bootstrap_plain_git.go | 11 ++++--- internal/utils/apply.go | 29 ++++++++++++++----- .../kustomization/kustomization.go | 16 +++++++--- 4 files changed, 39 insertions(+), 19 deletions(-) diff --git a/cmd/flux/install.go b/cmd/flux/install.go index 0af11cee..4d0e6d82 100644 --- a/cmd/flux/install.go +++ b/cmd/flux/install.go @@ -194,7 +194,7 @@ func installCmdRun(cmd *cobra.Command, args []string) error { return nil } - applyOutput, err := utils.Apply(ctx, kubeconfigArgs, kubeclientOptions, filepath.Join(tmpDir, manifest.Path)) + applyOutput, err := utils.Apply(ctx, kubeconfigArgs, kubeclientOptions, tmpDir, filepath.Join(tmpDir, manifest.Path)) if err != nil { return fmt.Errorf("install failed: %w", err) } diff --git a/internal/bootstrap/bootstrap_plain_git.go b/internal/bootstrap/bootstrap_plain_git.go index 863c4cd7..685c1f0d 100644 --- a/internal/bootstrap/bootstrap_plain_git.go +++ b/internal/bootstrap/bootstrap_plain_git.go @@ -163,19 +163,18 @@ func (b *PlainGitBootstrapper) ReconcileComponents(ctx context.Context, manifest // Conditionally install manifests if mustInstallManifests(ctx, b.kube, options.Namespace) { - componentsYAML := filepath.Join(b.git.Path(), manifests.Path) + b.logger.Actionf("installing components in %q namespace", options.Namespace) - // Apply components using any existing customisations + componentsYAML := filepath.Join(b.git.Path(), manifests.Path) kfile := filepath.Join(filepath.Dir(componentsYAML), konfig.DefaultKustomizationFileName()) if _, err := os.Stat(kfile); err == nil { // Apply the components and their patches - b.logger.Actionf("installing components in %q namespace", options.Namespace) - if _, err := utils.Apply(ctx, b.restClientGetter, b.restClientOptions, kfile); err != nil { + if _, err := utils.Apply(ctx, b.restClientGetter, b.restClientOptions, b.git.Path(), kfile); err != nil { return err } } else { // Apply the CRDs and controllers - if _, err := utils.Apply(ctx, b.restClientGetter, b.restClientOptions, componentsYAML); err != nil { + if _, err := utils.Apply(ctx, b.restClientGetter, b.restClientOptions, b.git.Path(), componentsYAML); err != nil { return err } } @@ -328,7 +327,7 @@ func (b *PlainGitBootstrapper) ReconcileSyncConfig(ctx context.Context, options // Apply to cluster b.logger.Actionf("applying sync manifests") - if _, err := utils.Apply(ctx, b.restClientGetter, b.restClientOptions, filepath.Join(b.git.Path(), kusManifests.Path)); err != nil { + if _, err := utils.Apply(ctx, b.restClientGetter, b.restClientOptions, b.git.Path(), filepath.Join(b.git.Path(), kusManifests.Path)); err != nil { return err } diff --git a/internal/utils/apply.go b/internal/utils/apply.go index 95badc1f..1979759b 100644 --- a/internal/utils/apply.go +++ b/internal/utils/apply.go @@ -31,16 +31,15 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/kustomize/api/konfig" + "github.com/fluxcd/flux2/pkg/manifestgen/kustomization" runclient "github.com/fluxcd/pkg/runtime/client" "github.com/fluxcd/pkg/ssa" - - "github.com/fluxcd/flux2/pkg/manifestgen/kustomization" ) // Apply is the equivalent of 'kubectl apply --server-side -f'. // If the given manifest is a kustomization.yaml, then apply performs the equivalent of 'kubectl apply --server-side -k'. -func Apply(ctx context.Context, rcg genericclioptions.RESTClientGetter, opts *runclient.Options, manifestPath string) (string, error) { - objs, err := readObjects(manifestPath) +func Apply(ctx context.Context, rcg genericclioptions.RESTClientGetter, opts *runclient.Options, root, manifestPath string) (string, error) { + objs, err := readObjects(root, manifestPath) if err != nil { return "", err } @@ -92,13 +91,17 @@ func Apply(ctx context.Context, rcg genericclioptions.RESTClientGetter, opts *ru return changeSet.String(), nil } -func readObjects(manifestPath string) ([]*unstructured.Unstructured, error) { - if _, err := os.Stat(manifestPath); err != nil { +func readObjects(root, manifestPath string) ([]*unstructured.Unstructured, error) { + fi, err := os.Lstat(manifestPath) + if err != nil { return nil, err } + if fi.IsDir() || !fi.Mode().IsRegular() { + return nil, fmt.Errorf("expected %q to be a file", manifestPath) + } - if filepath.Base(manifestPath) == konfig.DefaultKustomizationFileName() { - resources, err := kustomization.Build(filepath.Dir(manifestPath)) + if isRecognizedKustomizationFile(manifestPath) { + resources, err := kustomization.BuildWithRoot(root, filepath.Dir(manifestPath)) if err != nil { return nil, err } @@ -152,3 +155,13 @@ func waitForSet(rcg genericclioptions.RESTClientGetter, opts *runclient.Options, } return man.WaitForSet(changeSet.ToObjMetadataSet(), ssa.WaitOptions{Interval: 2 * time.Second, Timeout: time.Minute}) } + +func isRecognizedKustomizationFile(path string) bool { + base := filepath.Base(path) + for _, v := range konfig.RecognizedKustomizationFileNames() { + if base == v { + return true + } + } + return false +} diff --git a/pkg/manifestgen/kustomization/kustomization.go b/pkg/manifestgen/kustomization/kustomization.go index 45a40315..058049b7 100644 --- a/pkg/manifestgen/kustomization/kustomization.go +++ b/pkg/manifestgen/kustomization/kustomization.go @@ -138,14 +138,22 @@ func Generate(options Options) (*manifestgen.Manifest, error) { var kustomizeBuildMutex sync.Mutex // Build takes the path to a directory with a konfig.RecognizedKustomizationFileNames, -// builds it, and returns the resulting manifests as multi-doc YAML. +// builds it, and returns the resulting manifests as multi-doc YAML. It restricts the +// Kustomize file system to the parent directory of the base. func Build(base string) ([]byte, error) { + // TODO(hidde): drop this when consumers have moved away to BuildWithRoot. + parent := filepath.Dir(strings.TrimSuffix(base, string(filepath.Separator))) + return BuildWithRoot(parent, base) +} + +// BuildWithRoot takes the path to a directory with a konfig.RecognizedKustomizationFileNames, +// builds it, and returns the resulting manifests as multi-doc YAML. +// The Kustomize file system is restricted to root. +func BuildWithRoot(root, base string) ([]byte, error) { kustomizeBuildMutex.Lock() defer kustomizeBuildMutex.Unlock() - // TODO(hidde): make this configurable to a specific root (relative to base) - parent := filepath.Dir(strings.TrimSuffix(base, string(filepath.Separator))) - fs, err := filesys.MakeFsOnDiskSecureBuild(parent) + fs, err := filesys.MakeFsOnDiskSecureBuild(root) if err != nil { return nil, err } From a1a22867947b887f71e2b73428c16330fb91b87b Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 25 May 2022 11:04:26 +0300 Subject: [PATCH 110/818] Update Alpine to v3.16 Signed-off-by: Stefan Prodan --- Dockerfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index cc326f41..b992cf71 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,15 +1,15 @@ -FROM alpine:3.15 as builder +FROM alpine:3.16 as builder RUN apk add --no-cache ca-certificates curl ARG ARCH=linux/amd64 -ARG KUBECTL_VER=1.23.6 +ARG KUBECTL_VER=1.24.0 RUN curl -sL https://storage.googleapis.com/kubernetes-release/release/v${KUBECTL_VER}/bin/${ARCH}/kubectl \ -o /usr/local/bin/kubectl && chmod +x /usr/local/bin/kubectl && \ kubectl version --client=true -FROM alpine:3.15 as flux-cli +FROM alpine:3.16 as flux-cli # Create minimal nsswitch.conf file to prioritize the usage of /etc/hosts over DNS queries. # https://github.com/gliderlabs/docker-alpine/issues/367#issuecomment-354316460 From b795e612f71851e81e31220e1101d3588ae42fa2 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 25 May 2022 11:04:51 +0300 Subject: [PATCH 111/818] Update Go to v1.18 Signed-off-by: Stefan Prodan --- .github/workflows/bootstrap.yaml | 6 +++--- .github/workflows/e2e-arm64.yaml | 4 ++-- .github/workflows/e2e-azure.yaml | 6 +++--- .github/workflows/e2e.yaml | 8 ++++---- .github/workflows/rebase.yaml | 21 --------------------- .github/workflows/release.yaml | 2 +- .github/workflows/update.yaml | 2 +- 7 files changed, 14 insertions(+), 35 deletions(-) delete mode 100644 .github/workflows/rebase.yaml diff --git a/.github/workflows/bootstrap.yaml b/.github/workflows/bootstrap.yaml index 90d8802d..79c05511 100644 --- a/.github/workflows/bootstrap.yaml +++ b/.github/workflows/bootstrap.yaml @@ -17,13 +17,13 @@ jobs: uses: actions/cache@v1 with: path: ~/go/pkg/mod - key: ${{ runner.os }}-go1.17-${{ hashFiles('**/go.sum') }} + key: ${{ runner.os }}-go1.18-${{ hashFiles('**/go.sum') }} restore-keys: | - ${{ runner.os }}-go1.17- + ${{ runner.os }}-go1.18- - name: Setup Go uses: actions/setup-go@v2 with: - go-version: 1.17.x + go-version: 1.18.x - name: Setup Kubernetes uses: engineerd/setup-kind@v0.5.0 with: diff --git a/.github/workflows/e2e-arm64.yaml b/.github/workflows/e2e-arm64.yaml index 5855e30b..38460402 100644 --- a/.github/workflows/e2e-arm64.yaml +++ b/.github/workflows/e2e-arm64.yaml @@ -3,7 +3,7 @@ name: e2e-arm64 on: workflow_dispatch: push: - branches: [ main, update-components, equinix-runners ] + branches: [ main, update-components ] jobs: test: @@ -16,7 +16,7 @@ jobs: - name: Setup Go uses: actions/setup-go@v2 with: - go-version: 1.17.x + go-version: 1.18.x - name: Prepare id: prep run: | diff --git a/.github/workflows/e2e-azure.yaml b/.github/workflows/e2e-azure.yaml index 75abf7ef..0d5c0081 100644 --- a/.github/workflows/e2e-azure.yaml +++ b/.github/workflows/e2e-azure.yaml @@ -17,13 +17,13 @@ jobs: uses: actions/cache@v1 with: path: ~/go/pkg/mod - key: ${{ runner.os }}-go1.17-${{ hashFiles('**/go.sum') }} + key: ${{ runner.os }}-go1.18-${{ hashFiles('**/go.sum') }} restore-keys: | - ${{ runner.os }}-go1.17- + ${{ runner.os }}-go1.18- - name: Setup Go uses: actions/setup-go@v2 with: - go-version: 1.17.x + go-version: 1.18.x - name: Install libgit2 run: | sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 648ACFD622F3D138 diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index 7a4f6165..1a058668 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -2,7 +2,7 @@ name: e2e on: push: - branches: [ main, e2e* ] + branches: [ main ] pull_request: branches: [ main ] @@ -16,13 +16,13 @@ jobs: uses: actions/cache@v1 with: path: ~/go/pkg/mod - key: ${{ runner.os }}-go1.17-${{ hashFiles('**/go.sum') }} + key: ${{ runner.os }}-go1.18-${{ hashFiles('**/go.sum') }} restore-keys: | - ${{ runner.os }}-go1.17- + ${{ runner.os }}-go1.18- - name: Setup Go uses: actions/setup-go@v2 with: - go-version: 1.17.x + go-version: 1.18.x - name: Setup Kubernetes uses: engineerd/setup-kind@v0.5.0 with: diff --git a/.github/workflows/rebase.yaml b/.github/workflows/rebase.yaml deleted file mode 100644 index 623b0fbe..00000000 --- a/.github/workflows/rebase.yaml +++ /dev/null @@ -1,21 +0,0 @@ -name: rebase - -on: - pull_request: - types: [ opened ] - issue_comment: - types: [ created ] - -jobs: - rebase: - if: github.event.issue.pull_request != '' && contains(github.event.comment.body, '/rebase') && (github.event.comment.author_association == 'CONTRIBUTOR' || github.event.comment.author_association == 'MEMBER' || github.event.comment.author_association == 'OWNER') - runs-on: ubuntu-latest - steps: - - name: Checkout the latest code - uses: actions/checkout@v2 - with: - fetch-depth: 0 - - name: Automatic Rebase - uses: cirrus-actions/rebase@1.3.1 - env: - GITHUB_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN }} diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index bd49f177..65a7d260 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -20,7 +20,7 @@ jobs: - name: Setup Go uses: actions/setup-go@v2 with: - go-version: 1.17.x + go-version: 1.18.x - name: Setup QEMU uses: docker/setup-qemu-action@v1 - name: Setup Docker Buildx diff --git a/.github/workflows/update.yaml b/.github/workflows/update.yaml index 7d0da6f9..ab5732e6 100644 --- a/.github/workflows/update.yaml +++ b/.github/workflows/update.yaml @@ -16,7 +16,7 @@ jobs: - name: Setup Go uses: actions/setup-go@v2 with: - go-version: 1.17.x + go-version: 1.18.x - name: Update component versions id: update run: | From 38c62d46c7e4d495ab9d5637cc0fe31384efc53e Mon Sep 17 00:00:00 2001 From: Cristian Chiru Date: Thu, 12 May 2022 10:24:16 +0300 Subject: [PATCH 112/818] [grafana dashboard] display exported namespace, slight resizing, default sorting by state Signed-off-by: Cristian Chiru --- .../grafana/dashboards/cluster.json | 161 ++++++++++-------- 1 file changed, 92 insertions(+), 69 deletions(-) diff --git a/manifests/monitoring/grafana/dashboards/cluster.json b/manifests/monitoring/grafana/dashboards/cluster.json index 21a46bb9..d9960b7b 100644 --- a/manifests/monitoring/grafana/dashboards/cluster.json +++ b/manifests/monitoring/grafana/dashboards/cluster.json @@ -15,7 +15,7 @@ "editable": true, "gnetId": null, "graphTooltip": 0, - "iteration": 1636369574387, + "iteration": 1652337714814, "links": [], "panels": [ { @@ -290,6 +290,8 @@ "id": 8, "options": { "displayMode": "gradient", + "minVizHeight": 10, + "minVizWidth": 0, "orientation": "horizontal", "reduceOptions": { "calcs": [ @@ -352,6 +354,8 @@ "id": 31, "options": { "displayMode": "gradient", + "minVizHeight": 10, + "minVizWidth": 0, "orientation": "horizontal", "reduceOptions": { "calcs": [ @@ -398,25 +402,21 @@ "fieldConfig": { "defaults": { "custom": { - "align": null, - "filterable": true + "displayMode": "auto", + "filterable": true, + "inspect": false }, "mappings": [ { - "from": "", - "id": 1, - "text": "Ready", - "to": "", - "type": 1, - "value": "0" - }, - { - "from": "", - "id": 2, - "text": "Not Ready", - "to": "", - "type": 1, - "value": "1" + "options": { + "0": { + "text": "Ready" + }, + "1": { + "text": "Not Ready" + } + }, + "type": "value" } ], "thresholds": { @@ -453,14 +453,27 @@ ] }, "gridPos": { - "h": 8, + "h": 11, "w": 12, "x": 0, "y": 10 }, "id": 33, "options": { - "showHeader": true + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [ + { + "desc": true, + "displayName": "Status" + } + ] }, "pluginVersion": "7.5.5", "targets": [ @@ -487,11 +500,12 @@ "app": true, "container": true, "endpoint": true, - "exported_namespace": true, + "exported_namespace": false, "instance": true, "job": true, "kubernetes_namespace": true, "kubernetes_pod_name": true, + "namespace": true, "pod": true, "pod_template_hash": true, "status": true, @@ -500,9 +514,10 @@ "indexByName": {}, "renameByName": { "Value": "Status", + "exported_namespace": "Namespace", "kind": "Kind", "name": "Name", - "namespace": "Namespace" + "namespace": "Operator Namespace" } } } @@ -515,25 +530,21 @@ "fieldConfig": { "defaults": { "custom": { - "align": null, - "filterable": true + "displayMode": "auto", + "filterable": true, + "inspect": false }, "mappings": [ { - "from": "", - "id": 1, - "text": "Ready", - "to": "", - "type": 1, - "value": "0" - }, - { - "from": "", - "id": 2, - "text": "Not Ready", - "to": "", - "type": 1, - "value": "1" + "options": { + "0": { + "text": "Ready" + }, + "1": { + "text": "Not Ready" + } + }, + "type": "value" } ], "thresholds": { @@ -570,14 +581,27 @@ ] }, "gridPos": { - "h": 8, + "h": 11, "w": 12, "x": 12, "y": 10 }, "id": 34, "options": { - "showHeader": true + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [ + { + "desc": true, + "displayName": "Status" + } + ] }, "pluginVersion": "7.5.5", "targets": [ @@ -604,11 +628,12 @@ "app": true, "container": true, "endpoint": true, - "exported_namespace": true, + "exported_namespace": false, "instance": true, "job": true, "kubernetes_namespace": true, "kubernetes_pod_name": true, + "namespace": true, "pod": true, "pod_template_hash": true, "status": true, @@ -617,9 +642,10 @@ "indexByName": {}, "renameByName": { "Value": "Status", + "exported_namespace": "Namespace", "kind": "Kind", "name": "Name", - "namespace": "Namespace" + "namespace": "Operator Namespace" } } } @@ -633,7 +659,7 @@ "h": 1, "w": 24, "x": 0, - "y": 18 + "y": 21 }, "id": 17, "panels": [], @@ -657,7 +683,7 @@ "h": 8, "w": 24, "x": 0, - "y": 19 + "y": 22 }, "hiddenSeries": false, "id": 27, @@ -757,7 +783,7 @@ "h": 8, "w": 24, "x": 0, - "y": 27 + "y": 30 }, "hiddenSeries": false, "id": 35, @@ -841,34 +867,14 @@ } } ], - "refresh": "", - "schemaVersion": 27, + "refresh": "30s", + "schemaVersion": 36, "style": "light", "tags": [ "flux" ], "templating": { "list": [ - { - "current": { - "selected": false, - "text": "Prometheus", - "value": "Prometheus" - }, - "description": null, - "error": null, - "hide": 2, - "includeAll": false, - "label": null, - "multi": false, - "name": "DS_PROMETHEUS", - "options": [], - "query": "prometheus", - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "type": "datasource" - }, { "allValue": "", "current": { @@ -916,7 +922,7 @@ "$__all" ] }, - "datasource": null, + "datasource": "$DS_PROMETHEUS", "definition": "label_values(gotk_reconcile_condition, exported_namespace)", "description": null, "error": null, @@ -939,6 +945,24 @@ "tagsQuery": "", "type": "query", "useTags": false + }, + { + "current": { + "selected": false, + "text": "Prometheus", + "value": "Prometheus" + }, + "hide": 0, + "includeAll": false, + "label": "Datasource", + "multi": false, + "name": "DS_PROMETHEUS", + "options": [], + "query": "prometheus", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "type": "datasource" } ] }, @@ -959,8 +983,7 @@ "1d" ] }, - "timezone": "", "title": "Flux Cluster Stats", "uid": "flux-cluster", - "version": 1 + "version": 3 } From 3f0efc9435c84f1f7366f972fc56cb9d4fee1da9 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Fri, 27 May 2022 13:29:20 +0300 Subject: [PATCH 113/818] Update dependencies - Update Kubernetes packages to v1.24 - Update go-yaml to v3.0.0 (fix CVE-2022-28948) - Update fluxcd/pkg/runtime to v0.15.1 Signed-off-by: Stefan Prodan --- go.mod | 78 +-- go.sum | 678 +++---------------- pkg/manifestgen/sourcesecret/sourcesecret.go | 2 +- tests/azure/go.mod | 35 +- tests/azure/go.sum | 50 +- 5 files changed, 195 insertions(+), 648 deletions(-) diff --git a/go.mod b/go.mod index 6241f9ef..680c5c1e 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.17 require ( github.com/Masterminds/semver/v3 v3.1.1 - github.com/ProtonMail/go-crypto v0.0.0-20220407094043-a94812496cf5 + github.com/ProtonMail/go-crypto v0.0.0-20220517143526-88bb52951d5b github.com/cyphar/filepath-securejoin v0.2.3 github.com/fluxcd/go-git-providers v0.5.4 github.com/fluxcd/helm-controller/api v0.21.0 @@ -12,11 +12,11 @@ require ( github.com/fluxcd/image-reflector-controller/api v0.18.0 github.com/fluxcd/kustomize-controller/api v0.25.0 github.com/fluxcd/notification-controller/api v0.23.5 - github.com/fluxcd/pkg/apis/meta v0.13.0 - github.com/fluxcd/pkg/kustomize v0.4.0 - github.com/fluxcd/pkg/runtime v0.14.2 - github.com/fluxcd/pkg/ssa v0.15.2 - github.com/fluxcd/pkg/ssh v0.3.2 + github.com/fluxcd/pkg/apis/meta v0.14.1 + github.com/fluxcd/pkg/kustomize v0.5.1 + github.com/fluxcd/pkg/runtime v0.15.1 + github.com/fluxcd/pkg/ssa v0.16.1 + github.com/fluxcd/pkg/ssh v0.4.0 github.com/fluxcd/pkg/untar v0.1.0 github.com/fluxcd/pkg/version v0.1.0 github.com/fluxcd/source-controller/api v0.24.4 @@ -24,9 +24,9 @@ require ( github.com/gonvenience/bunt v1.3.3 github.com/gonvenience/ytbx v1.4.4 github.com/google/go-cmp v0.5.8 - github.com/google/go-containerregistry v0.8.0 + github.com/google/go-containerregistry v0.9.0 github.com/hashicorp/go-multierror v1.1.1 - github.com/homeport/dyff v1.5.2 + github.com/homeport/dyff v1.5.3 github.com/lucasb-eyer/go-colorful v1.2.0 github.com/manifoldco/promptui v0.9.0 github.com/mattn/go-shellwords v1.0.12 @@ -34,21 +34,24 @@ require ( github.com/spf13/cobra v1.4.0 github.com/spf13/pflag v1.0.5 github.com/theckman/yacspin v0.13.12 - golang.org/x/crypto v0.0.0-20220427172511-eb4f295cb31f - golang.org/x/term v0.0.0-20220411215600-e5f449aeb171 - k8s.io/api v0.23.6 - k8s.io/apiextensions-apiserver v0.23.6 - k8s.io/apimachinery v0.23.6 - k8s.io/cli-runtime v0.23.6 - k8s.io/client-go v0.23.6 - k8s.io/kubectl v0.23.6 - sigs.k8s.io/cli-utils v0.29.4 + golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e + golang.org/x/term v0.0.0-20220526004731-065cf7ba2467 + k8s.io/api v0.24.1 + k8s.io/apiextensions-apiserver v0.24.0 + k8s.io/apimachinery v0.24.1 + k8s.io/cli-runtime v0.24.0 + k8s.io/client-go v0.24.1 + k8s.io/kubectl v0.24.0 + sigs.k8s.io/cli-utils v0.31.1 sigs.k8s.io/controller-runtime v0.11.2 - sigs.k8s.io/kustomize/api v0.11.4 - sigs.k8s.io/kustomize/kyaml v0.13.6 + sigs.k8s.io/kustomize/api v0.11.5 + sigs.k8s.io/kustomize/kyaml v0.13.7 sigs.k8s.io/yaml v1.3.0 ) +// Fix CVE-2022-28948 +replace gopkg.in/yaml.v3 => gopkg.in/yaml.v3 v3.0.0 + require ( cloud.google.com/go v0.99.0 // indirect github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect @@ -60,7 +63,7 @@ require ( github.com/Azure/go-autorest/tracing v0.6.0 // indirect github.com/BurntSushi/toml v1.0.0 // indirect github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd // indirect - github.com/Microsoft/go-winio v0.5.1 // indirect + github.com/Microsoft/go-winio v0.5.2 // indirect github.com/PuerkitoBio/purell v1.1.1 // indirect github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect github.com/acomagu/bufpipe v1.0.3 // indirect @@ -68,22 +71,22 @@ require ( github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5 // indirect github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e // indirect - github.com/cpuguy83/go-md2man/v2 v2.0.1 // indirect + github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/drone/envsubst/v2 v2.0.0-20210730161058-179042472c46 // indirect + github.com/emicklei/go-restful v2.9.5+incompatible // indirect github.com/emirpasic/gods v1.12.0 // indirect github.com/evanphx/json-patch v4.12.0+incompatible // indirect github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d // indirect github.com/fatih/color v1.13.0 // indirect github.com/fluxcd/pkg/apis/acl v0.0.3 // indirect - github.com/fluxcd/pkg/apis/kustomize v0.3.3 // indirect + github.com/fluxcd/pkg/apis/kustomize v0.4.1 // indirect github.com/form3tech-oss/jwt-go v3.2.3+incompatible // indirect github.com/fsnotify/fsnotify v1.5.1 // indirect - github.com/fvbommel/sortorder v1.0.1 // indirect github.com/go-errors/errors v1.0.1 // indirect github.com/go-git/gcfg v1.5.0 // indirect github.com/go-git/go-billy/v5 v5.3.1 // indirect - github.com/go-logr/logr v1.2.2 // indirect + github.com/go-logr/logr v1.2.3 // indirect github.com/go-openapi/jsonpointer v0.19.5 // indirect github.com/go-openapi/jsonreference v0.19.5 // indirect github.com/go-openapi/swag v0.19.14 // indirect @@ -95,16 +98,16 @@ require ( github.com/gonvenience/text v1.0.7 // indirect github.com/gonvenience/wrap v1.1.1 // indirect github.com/google/btree v1.0.1 // indirect + github.com/google/gnostic v0.5.7-v3refs // indirect github.com/google/go-github/v41 v41.0.0 // indirect github.com/google/go-querystring v1.1.0 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect github.com/google/uuid v1.3.0 // indirect - github.com/googleapis/gnostic v0.5.5 // indirect github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 // indirect github.com/hashicorp/errwrap v1.0.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect - github.com/hashicorp/go-retryablehttp v0.7.0 // indirect + github.com/hashicorp/go-retryablehttp v0.7.1 // indirect github.com/imdario/mergo v0.3.12 // indirect github.com/inconshreveable/mousetrap v1.0.0 // indirect github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect @@ -123,14 +126,14 @@ require ( github.com/mitchellh/go-wordwrap v1.0.0 // indirect github.com/mitchellh/hashstructure v1.1.0 // indirect github.com/moby/spdystream v0.2.0 // indirect - github.com/moby/term v0.0.0-20210610120745-9d4ed1856297 // indirect + github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 // indirect + github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/onsi/gomega v1.19.0 // indirect github.com/peterbourgon/diskv v2.0.1+incompatible // indirect github.com/pkg/errors v0.9.1 // indirect - github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_golang v1.12.1 // indirect github.com/prometheus/client_model v0.2.0 // indirect github.com/prometheus/common v0.32.1 // indirect @@ -139,29 +142,28 @@ require ( github.com/russross/blackfriday v1.5.2 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/sergi/go-diff v1.2.0 // indirect - github.com/stretchr/testify v1.7.1 // indirect github.com/texttheater/golang-levenshtein v1.0.1 // indirect github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74 // indirect github.com/xanzy/go-gitlab v0.54.3 // indirect github.com/xanzy/ssh-agent v0.3.0 // indirect github.com/xlab/treeprint v0.0.0-20181112141820-a009c3971eca // indirect go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 // indirect - golang.org/x/net v0.0.0-20220325170049-de3da57026de // indirect - golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 // indirect - golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect - golang.org/x/sys v0.0.0-20220325203850-36772127a21f // indirect + golang.org/x/net v0.0.0-20220516155154-20f960328961 // indirect + golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 // indirect + golang.org/x/sync v0.0.0-20220513210516-0976fa681c29 // indirect + golang.org/x/sys v0.0.0-20220513210249-45d2b4557a2a // indirect golang.org/x/text v0.3.7 // indirect - golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac // indirect + golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/protobuf v1.27.1 // indirect + google.golang.org/protobuf v1.28.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect - k8s.io/component-base v0.23.6 // indirect - k8s.io/klog/v2 v2.50.0 // indirect - k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65 // indirect + k8s.io/component-base v0.24.1 // indirect + k8s.io/klog/v2 v2.60.1 // indirect + k8s.io/kube-openapi v0.0.0-20220401212409-b28bf2818661 // indirect k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9 // indirect sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2 // indirect sigs.k8s.io/structured-merge-diff/v4 v4.2.1 // indirect diff --git a/go.sum b/go.sum index c5b9a894..32e5bc11 100644 --- a/go.sum +++ b/go.sum @@ -1,4 +1,3 @@ -bazil.org/fuse v0.0.0-20160811212531-371fbbdaa898/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= @@ -26,7 +25,6 @@ cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aD cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= -cloud.google.com/go v0.98.0/go.mod h1:ua6Ush4NALrHk5QXDWnjvZHN93OuF0HfuEPq9I1X0cM= cloud.google.com/go v0.99.0 h1:y/cM2iqGgGi5D5DQZl6D9STN/3dR/Vx5Mp8s752oJTY= cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= @@ -38,7 +36,6 @@ cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM7 cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= -cloud.google.com/go/firestore v1.6.1/go.mod h1:asNXNOzBdyVQmEU+ggO8UPodTkEVFW5Qx+rwHnAz+EY= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= @@ -49,27 +46,18 @@ cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohl cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/Azure/azure-sdk-for-go v16.2.1+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= -github.com/Azure/go-ansiterm v0.0.0-20210608223527-2377c96fe795/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= -github.com/Azure/go-autorest v10.8.1+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs= github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= -github.com/Azure/go-autorest/autorest v0.11.1/go.mod h1:JFgpikqFJ/MleTTxwepExTKnFUKKszPS8UavbQYUMuw= github.com/Azure/go-autorest/autorest v0.11.18 h1:90Y4srNYrwOtAgVo3ndrQkTYn6kf1Eg/AjTFJ8Is2aM= github.com/Azure/go-autorest/autorest v0.11.18/go.mod h1:dSiJPy22c3u0OtOKDNttNgqpNFY/GeWa7GH/Pz56QRA= -github.com/Azure/go-autorest/autorest/adal v0.9.0/go.mod h1:/c022QCutn2P7uY+/oQWWNcK9YU+MH96NgK+jErpbcg= -github.com/Azure/go-autorest/autorest/adal v0.9.5/go.mod h1:B7KF7jKIeC9Mct5spmyCB/A8CG/sEz1vwIRGv/bbw7A= github.com/Azure/go-autorest/autorest/adal v0.9.13 h1:Mp5hbtOePIzM8pJVRa3YLrWWmZtoxRXqUEzCfJt3+/Q= github.com/Azure/go-autorest/autorest/adal v0.9.13/go.mod h1:W/MM4U6nLxnIskrw4UwWzlHfGjwUS50aOsc/I3yuU8M= github.com/Azure/go-autorest/autorest/date v0.3.0 h1:7gUk1U5M/CQbp9WoqinNzJar+8KY+LPI6wiWrP/myHw= github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74= -github.com/Azure/go-autorest/autorest/mocks v0.4.0/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= github.com/Azure/go-autorest/autorest/mocks v0.4.1 h1:K0laFcLE6VLTOwNgSxaGbUcLPuGXlNkbVvq4cW4nIHk= github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= -github.com/Azure/go-autorest/logger v0.2.0/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= github.com/Azure/go-autorest/logger v0.2.1 h1:IG7i4p/mDa2Ce4TRyAO8IHnVhAVF3RFU+ZtXWSmf4Tg= github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo= @@ -78,43 +66,25 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03 github.com/BurntSushi/toml v1.0.0 h1:dtDWrepsVPfW9H/4y7dDgFc2MBUSeJhlaDtK13CxFlU= github.com/BurntSushi/toml v1.0.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd h1:sjQovDkwrZp8u+gxLtPgKGjk5hCxuy2hrRejBTA9xFU= github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd/go.mod h1:64YHyfSL2R96J44Nlwm39UHepQbyR5q10x7iYa1ks2E= github.com/Masterminds/semver/v3 v3.1.0/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030IGemrRc= github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= -github.com/Microsoft/go-winio v0.4.11/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA= github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= -github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= -github.com/Microsoft/go-winio v0.4.16-0.20201130162521-d1ffc52c7331/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= -github.com/Microsoft/go-winio v0.4.17-0.20210211115548-6eac466e5fa3/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= -github.com/Microsoft/go-winio v0.4.17-0.20210324224401-5516f17a5958/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= -github.com/Microsoft/go-winio v0.4.17/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= -github.com/Microsoft/go-winio v0.5.1 h1:aPJp2QD7OOrhO5tQXqQoGSJc+DjDtWTGLOmNyAm6FgY= -github.com/Microsoft/go-winio v0.5.1/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= -github.com/Microsoft/hcsshim v0.8.6/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg= -github.com/Microsoft/hcsshim v0.8.7-0.20190325164909-8abdbb8205e4/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg= -github.com/Microsoft/hcsshim v0.8.7/go.mod h1:OHd7sQqRFrYd3RmSgbgji+ctCwkbq2wbEYNSzOYtcBQ= -github.com/Microsoft/hcsshim v0.8.9/go.mod h1:5692vkUqntj1idxauYlpoINNKeqCiG6Sg38RRsjT5y8= -github.com/Microsoft/hcsshim v0.8.14/go.mod h1:NtVKoYxQuTLx6gEq0L96c9Ju4JbRJ4nY2ow3VK6a9Lg= -github.com/Microsoft/hcsshim v0.8.15/go.mod h1:x38A4YbHbdxJtc0sF6oIz+RG0npwSCAvn69iY6URG00= -github.com/Microsoft/hcsshim v0.8.16/go.mod h1:o5/SZqmR7x9JNKsW3pu+nqHm0MF8vbA+VxGOoXdC600= -github.com/Microsoft/hcsshim v0.8.23/go.mod h1:4zegtUJth7lAvFyc6cH2gGQ5B3OFQim01nnU2M8jKDg= -github.com/Microsoft/hcsshim/test v0.0.0-20201218223536-d3e5debf77da/go.mod h1:5hlzMzRKMLyo42nCZ9oml8AdTlq/0cvIaBv6tK1RehU= -github.com/Microsoft/hcsshim/test v0.0.0-20210227013316-43a75bb4edd3/go.mod h1:mw7qgWloBUl75W/gVH3cQszUg1+gUITj7D6NY7ywVnY= +github.com/Microsoft/go-winio v0.5.2 h1:a9IhgEQBCUEk6QCdml9CiJGhAws+YwffDHEMp1VMrpA= +github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= -github.com/ProtonMail/go-crypto v0.0.0-20220407094043-a94812496cf5 h1:cSHEbLj0GZeHM1mWG84qEnGFojNEQ83W7cwaPRjcwXU= -github.com/ProtonMail/go-crypto v0.0.0-20220407094043-a94812496cf5/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= +github.com/ProtonMail/go-crypto v0.0.0-20220517143526-88bb52951d5b h1:lcbBNuQhppsc7A5gjdHmdlqUqJfgGMylBdGyDs0j7G8= +github.com/ProtonMail/go-crypto v0.0.0-20220517143526-88bb52951d5b/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ= github.com/acomagu/bufpipe v1.0.3 h1:fxAGrHZTgQ9w5QqVItgzwj235/uYZYgbXitB+dLupOk= github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -122,45 +92,28 @@ github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuy github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/alexflint/go-filemutex v0.0.0-20171022225611-72bdc8eae2ae/go.mod h1:CgnQgUtFrFz9mxFNtED3jI5tLDjKlOM+oUF/sTk6ps0= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo4JG6LR5AXSUEsOjtdm0kw0FtQtMJA= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20210826220005-b48c857c3a0e/go.mod h1:F7bn7fEU90QkQ3tnmaTx3LTKLEDqnwWODIYppRQ5hnY= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= -github.com/armon/go-metrics v0.3.10/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= -github.com/aws/aws-sdk-go v1.15.11/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/beorn7/perks v0.0.0-20160804104726-4c0e84591b9a/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA= -github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= -github.com/blang/semver v3.1.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= -github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= -github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= -github.com/bshuster-repo/logrus-logstash-hook v0.4.1/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk= -github.com/buger/jsonparser v0.0.0-20180808090653-f4dd9f5a6b44/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= -github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8= -github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b/go.mod h1:obH5gd0BsqsP2LwDJ9aOkm/6J86V6lyAXCoQWGw3K50= -github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE= -github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/certifi/gocertifi v0.0.0-20191021191039-0944d244cd40/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= github.com/certifi/gocertifi v0.0.0-20200922220541-2c3bb06c6054/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= @@ -169,183 +122,51 @@ github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cb github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5 h1:7aWHqerlJ41y6FOsEUvknqgXnGmJyJSbjhAWq5pO4F8= github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5/go.mod h1:/iP1qXHoty45bqomnu2LM+VVyAEdWN+vtSHGlQgyxbw= -github.com/checkpoint-restore/go-criu/v4 v4.1.0/go.mod h1:xUQBLp4RLc5zJtWY++yjOoMoB5lihDt7fai+75m+rGw= -github.com/checkpoint-restore/go-criu/v5 v5.0.0/go.mod h1:cfwC0EG7HMUenopBsUf9d89JlCLQIfgVcNsNN0t6T2M= github.com/chzyer/logex v1.1.10 h1:Swpa1K6QvQznwJRcfTfQJmTE72DqScAa40E+fbHEXEE= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e h1:fY5BOSpyZCqRo5OhCuC+XN+r/bBCmeuuJtjz+bCNIf8= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1 h1:q763qf9huN11kDQavWsoZXJNW3xEE4JJyHa5Q25/sd8= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/cilium/ebpf v0.0.0-20200110133405-4032b1d8aae3/go.mod h1:MA5e5Lr8slmEg9bt0VpxxWqJlO4iwu3FBdHUzV7wQVg= -github.com/cilium/ebpf v0.0.0-20200702112145-1c8d4c9ef775/go.mod h1:7cR51M8ViRLIdUjrmSXlK9pkrsDlLHbO8jiB8X8JnOc= -github.com/cilium/ebpf v0.2.0/go.mod h1:To2CFviqOWL/M0gIMsvSMlqe7em/l1ALkX1PyjrX2Qs= -github.com/cilium/ebpf v0.4.0/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs= -github.com/cilium/ebpf v0.6.2/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs= -github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= -github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211130200136-a8f946100490/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/cockroachdb/datadriven v0.0.0-20200714090401-bf6692d28da5/go.mod h1:h6jFvWxBdQXxjopDMZyH2UVceIRfR84bdzbkoKrsWNo= github.com/cockroachdb/errors v1.2.4/go.mod h1:rQD95gz6FARkaKkQXUksEje/d9a6wBJoCr5oaCLELYA= github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f/go.mod h1:i/u985jwjWRlyHXQbwatDASoW0RMlZ/3i9yJHE2xLkI= -github.com/containerd/aufs v0.0.0-20200908144142-dab0cbea06f4/go.mod h1:nukgQABAEopAHvB6j7cnP5zJ+/3aVcE7hCYqvIwAHyE= -github.com/containerd/aufs v0.0.0-20201003224125-76a6863f2989/go.mod h1:AkGGQs9NM2vtYHaUen+NljV0/baGCAPELGm2q9ZXpWU= -github.com/containerd/aufs v0.0.0-20210316121734-20793ff83c97/go.mod h1:kL5kd6KM5TzQjR79jljyi4olc1Vrx6XBlcyj3gNv2PU= -github.com/containerd/aufs v1.0.0/go.mod h1:kL5kd6KM5TzQjR79jljyi4olc1Vrx6XBlcyj3gNv2PU= -github.com/containerd/btrfs v0.0.0-20201111183144-404b9149801e/go.mod h1:jg2QkJcsabfHugurUvvPhS3E08Oxiuh5W/g1ybB4e0E= -github.com/containerd/btrfs v0.0.0-20210316141732-918d888fb676/go.mod h1:zMcX3qkXTAi9GI50+0HOeuV8LU2ryCE/V2vG/ZBiTss= -github.com/containerd/btrfs v1.0.0/go.mod h1:zMcX3qkXTAi9GI50+0HOeuV8LU2ryCE/V2vG/ZBiTss= -github.com/containerd/cgroups v0.0.0-20190717030353-c4b9ac5c7601/go.mod h1:X9rLEHIqSf/wfK8NsPqxJmeZgW4pcfzdXITDrUSJ6uI= -github.com/containerd/cgroups v0.0.0-20190919134610-bf292b21730f/go.mod h1:OApqhQ4XNSNC13gXIwDjhOQxjWa/NxkwZXJ1EvqT0ko= -github.com/containerd/cgroups v0.0.0-20200531161412-0dbf7f05ba59/go.mod h1:pA0z1pT8KYB3TCXK/ocprsh7MAkoW8bZVzPdih9snmM= -github.com/containerd/cgroups v0.0.0-20200710171044-318312a37340/go.mod h1:s5q4SojHctfxANBDvMeIaIovkq29IP48TKAxnhYRxvo= -github.com/containerd/cgroups v0.0.0-20200824123100-0b889c03f102/go.mod h1:s5q4SojHctfxANBDvMeIaIovkq29IP48TKAxnhYRxvo= -github.com/containerd/cgroups v0.0.0-20210114181951-8a68de567b68/go.mod h1:ZJeTFisyysqgcCdecO57Dj79RfL0LNeGiFUqLYQRYLE= -github.com/containerd/cgroups v1.0.1/go.mod h1:0SJrPIenamHDcZhEcJMNBB85rHcUsw4f25ZfBiPYRkU= -github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= -github.com/containerd/console v0.0.0-20181022165439-0650fd9eeb50/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= -github.com/containerd/console v0.0.0-20191206165004-02ecf6a7291e/go.mod h1:8Pf4gM6VEbTNRIT26AyyU7hxdQU3MvAvxVI0sc00XBE= -github.com/containerd/console v1.0.1/go.mod h1:XUsP6YE/mKtz6bxc+I8UiKKTP04qjQL4qcS3XoQ5xkw= -github.com/containerd/console v1.0.2/go.mod h1:ytZPjGgY2oeTkAONYafi2kSj0aYggsf8acV1PGKCbzQ= -github.com/containerd/containerd v1.2.10/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.3.0-beta.2.0.20190828155532-0293cbd26c69/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.3.0/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.3.1-0.20191213020239-082f7e3aed57/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.3.2/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.4.0-beta.2.0.20200729163537-40b22ef07410/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.4.1/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.4.3/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.4.9/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.5.0-beta.1/go.mod h1:5HfvG1V2FsKesEGQ17k5/T7V960Tmcumvqn8Mc+pCYQ= -github.com/containerd/containerd v1.5.0-beta.3/go.mod h1:/wr9AVtEM7x9c+n0+stptlo/uBBoBORwEx6ardVcmKU= -github.com/containerd/containerd v1.5.0-beta.4/go.mod h1:GmdgZd2zA2GYIBZ0w09ZvgqEq8EfBp/m3lcVZIvPHhI= -github.com/containerd/containerd v1.5.0-rc.0/go.mod h1:V/IXoMqNGgBlabz3tHD2TWDoTJseu1FGOKuoA4nNb2s= -github.com/containerd/containerd v1.5.8/go.mod h1:YdFSv5bTFLpG2HIYmfqDpSYYTDX+mc5qtSuYx1YUb/s= -github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= -github.com/containerd/continuity v0.0.0-20190815185530-f2a389ac0a02/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= -github.com/containerd/continuity v0.0.0-20191127005431-f65d91d395eb/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= -github.com/containerd/continuity v0.0.0-20200710164510-efbc4488d8fe/go.mod h1:cECdGN1O8G9bgKTlLhuPJimka6Xb/Gg7vYzCTNVxhvo= -github.com/containerd/continuity v0.0.0-20201208142359-180525291bb7/go.mod h1:kR3BEg7bDFaEddKm54WSmrol1fKWDU1nKYkgrcgZT7Y= -github.com/containerd/continuity v0.0.0-20210208174643-50096c924a4e/go.mod h1:EXlVlkqNba9rJe3j7w3Xa924itAMLgZH4UD/Q4PExuQ= -github.com/containerd/continuity v0.1.0/go.mod h1:ICJu0PwR54nI0yPEnJ6jcS+J7CZAUXrLh8lPo2knzsM= -github.com/containerd/fifo v0.0.0-20180307165137-3d5202aec260/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= -github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= -github.com/containerd/fifo v0.0.0-20200410184934-f15a3290365b/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0= -github.com/containerd/fifo v0.0.0-20201026212402-0724c46b320c/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0= -github.com/containerd/fifo v0.0.0-20210316144830-115abcc95a1d/go.mod h1:ocF/ME1SX5b1AOlWi9r677YJmCPSwwWnQ9O123vzpE4= -github.com/containerd/fifo v1.0.0/go.mod h1:ocF/ME1SX5b1AOlWi9r677YJmCPSwwWnQ9O123vzpE4= -github.com/containerd/go-cni v1.0.1/go.mod h1:+vUpYxKvAF72G9i1WoDOiPGRtQpqsNW/ZHtSlv++smU= -github.com/containerd/go-cni v1.0.2/go.mod h1:nrNABBHzu0ZwCug9Ije8hL2xBCYh/pjfMb1aZGrrohk= -github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= -github.com/containerd/go-runc v0.0.0-20190911050354-e029b79d8cda/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= -github.com/containerd/go-runc v0.0.0-20200220073739-7016d3ce2328/go.mod h1:PpyHrqVs8FTi9vpyHwPwiNEGaACDxT/N/pLcvMSRA9g= -github.com/containerd/go-runc v0.0.0-20201020171139-16b287bc67d0/go.mod h1:cNU0ZbCgCQVZK4lgG3P+9tn9/PaJNmoDXPpoJhDR+Ok= -github.com/containerd/go-runc v1.0.0/go.mod h1:cNU0ZbCgCQVZK4lgG3P+9tn9/PaJNmoDXPpoJhDR+Ok= -github.com/containerd/imgcrypt v1.0.1/go.mod h1:mdd8cEPW7TPgNG4FpuP3sGBiQ7Yi/zak9TYCG3juvb0= -github.com/containerd/imgcrypt v1.0.4-0.20210301171431-0ae5c75f59ba/go.mod h1:6TNsg0ctmizkrOgXRNQjAPFWpMYRWuiB6dSF4Pfa5SA= -github.com/containerd/imgcrypt v1.1.1-0.20210312161619-7ed62a527887/go.mod h1:5AZJNI6sLHJljKuI9IHnw1pWqo/F0nGDOuR9zgTs7ow= -github.com/containerd/imgcrypt v1.1.1/go.mod h1:xpLnwiQmEUJPvQoAapeb2SNCxz7Xr6PJrXQb0Dpc4ms= -github.com/containerd/nri v0.0.0-20201007170849-eb1350a75164/go.mod h1:+2wGSDGFYfE5+So4M5syatU0N0f0LbWpuqyMi4/BE8c= -github.com/containerd/nri v0.0.0-20210316161719-dbaa18c31c14/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY= -github.com/containerd/nri v0.1.0/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY= -github.com/containerd/stargz-snapshotter/estargz v0.10.1/go.mod h1:aE5PCyhFMwR8sbrErO5eM2GcvkyXTTJremG883D4qF0= -github.com/containerd/ttrpc v0.0.0-20190828154514-0e0f228740de/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= -github.com/containerd/ttrpc v0.0.0-20190828172938-92c8520ef9f8/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= -github.com/containerd/ttrpc v0.0.0-20191028202541-4f1b8fe65a5c/go.mod h1:LPm1u0xBw8r8NOKoOdNMeVHSawSsltak+Ihv+etqsE8= -github.com/containerd/ttrpc v1.0.1/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y= -github.com/containerd/ttrpc v1.0.2/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y= -github.com/containerd/ttrpc v1.1.0/go.mod h1:XX4ZTnoOId4HklF4edwc4DcqskFZuvXB1Evzy5KFQpQ= -github.com/containerd/typeurl v0.0.0-20180627222232-a93fcdb778cd/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc= -github.com/containerd/typeurl v0.0.0-20190911142611-5eb25027c9fd/go.mod h1:GeKYzf2pQcqv7tJ0AoCuuhtnqhva5LNU3U+OyKxxJpk= -github.com/containerd/typeurl v1.0.1/go.mod h1:TB1hUtrpaiO88KEK56ijojHS1+NeF0izUACaJW2mdXg= -github.com/containerd/typeurl v1.0.2/go.mod h1:9trJWW2sRlGub4wZJRTW83VtbOLS6hwcDZXTn6oPz9s= -github.com/containerd/zfs v0.0.0-20200918131355-0a33824f23a2/go.mod h1:8IgZOBdv8fAgXddBT4dBXJPtxyRsejFIpXoklgxgEjw= -github.com/containerd/zfs v0.0.0-20210301145711-11e8f1707f62/go.mod h1:A9zfAbMlQwE+/is6hi0Xw8ktpL+6glmqZYtevJgaB8Y= -github.com/containerd/zfs v0.0.0-20210315114300-dde8f0fda960/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY= -github.com/containerd/zfs v0.0.0-20210324211415-d5c4544f0433/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY= -github.com/containerd/zfs v1.0.0/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY= -github.com/containernetworking/cni v0.7.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= -github.com/containernetworking/cni v0.8.0/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= -github.com/containernetworking/cni v0.8.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= -github.com/containernetworking/plugins v0.8.6/go.mod h1:qnw5mN19D8fIwkqW7oHHYDHVlzhJpcY6TQxn/fUyDDM= -github.com/containernetworking/plugins v0.9.1/go.mod h1:xP/idU2ldlzN6m4p5LmGiwRDjeJr6FLK6vuiUwoH7P8= -github.com/containers/ocicrypt v1.0.1/go.mod h1:MeJDzk1RJHv89LjsH0Sp5KTY3ZYkjXO/C+bKAeWFIrc= -github.com/containers/ocicrypt v1.1.0/go.mod h1:b8AOe0YR67uU8OqfVNcznfFpAzu3rdgUV4GP9qXPfu4= -github.com/containers/ocicrypt v1.1.1/go.mod h1:Dm55fwWm1YZAjYRaJ94z2mfZikIyIN4B0oB3dj3jFxY= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-iptables v0.4.5/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmekav8Dbxlm1MU= -github.com/coreos/go-iptables v0.5.0/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmekav8Dbxlm1MU= github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= -github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20161114122254-48702e0da86b/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd/v22 v22.0.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= -github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.1 h1:r/myEWzV9lfsM1tFLgDyu0atFtJ1fXn261LKYj/3DxU= github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= +github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= +github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.11 h1:07n33Z8lZxZ2qwegKbObQohDhXDQxiMMz1NOUGYlesw= github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4= github.com/cyphar/filepath-securejoin v0.2.3 h1:YX6ebbZCZP7VkM3scTTokDgBL2TY741X51MTk3ycuNI= github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= -github.com/d2g/dhcp4 v0.0.0-20170904100407-a1d1b6c41b1c/go.mod h1:Ct2BUK8SB0YC1SMSibvLzxjeJLnrYEVLULFNiHY9YfQ= -github.com/d2g/dhcp4client v1.0.0/go.mod h1:j0hNfjhrt2SxUOw55nL0ATM/z4Yt3t2Kd1mW34z5W5s= -github.com/d2g/dhcp4server v0.0.0-20181031114812-7d4a0a7f59a5/go.mod h1:Eo87+Kg/IX2hfWJfwxMzLyuSZyxSoAug2nGa1G2QAi8= -github.com/d2g/hardwareaddr v0.0.0-20190221164911-e7d9fbe030e4/go.mod h1:bMl4RjIciD2oAxI7DmWRx6gbeqrkoLqv3MV0vzNad+I= -github.com/danieljoos/wincred v1.1.0/go.mod h1:XYlo+eRTsVA9aHGp7NGjFkPla4m+DCL7hqDjlFjiygg= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/daviddengcn/go-colortext v0.0.0-20160507010035-511bcaf42ccd/go.mod h1:dv4zxwHi5C/8AeI+4gX4dCWOIvNi7I6JCSX0HvlKPgE= -github.com/denverdino/aliyungo v0.0.0-20190125010748-a747050bb1ba/go.mod h1:dV8lFg6daOBZbT6/BDGIz6Y3WFGn8juu6G+CQ6LHtl0= -github.com/dgrijalva/jwt-go v0.0.0-20170104182250-a601269ab70c/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= -github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E= -github.com/docker/cli v20.10.12+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= -github.com/docker/distribution v0.0.0-20190905152932-14b96e55d84c/go.mod h1:0+TTO4EOBfRPhZXAeF1Vu+W3hHZ8eLp8PgKVZlcvtFY= -github.com/docker/distribution v2.7.1-0.20190205005809-0d3efadf0154+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v20.10.12+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker-credential-helpers v0.6.4/go.mod h1:ofX3UI0Gz1TteYBjtgs07O36Pyasyp66D2uKT7H8W1c= -github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= -github.com/docker/go-events v0.0.0-20170721190031-9461782956ad/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= -github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= -github.com/docker/go-metrics v0.0.0-20180209012529-399ea8c73916/go.mod h1:/u0gXw0Gay3ceNrsHubL3BtdOL2fHf93USgMTe0W5dI= -github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw= -github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE= -github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= +github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/drone/envsubst/v2 v2.0.0-20210730161058-179042472c46 h1:7QPwrLT79GlD5sizHf27aoY2RTvw62mO6x7mxkScNk0= github.com/drone/envsubst/v2 v2.0.0-20210730161058-179042472c46/go.mod h1:esf2rsHFNlZlxsqsZDojNBcnNs5REqIvRrWRHqX0vEU= -github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153 h1:yUdfgN0XgIJw7foRItutHYUIhlcKzcSf5vDpdhQAKTc= github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= 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 h1:spTtZBk5DYEvbxMVutUuTyh1Ao2r4iyvLdACqsl/Ljk= github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg= github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= @@ -356,12 +177,8 @@ github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5y github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= -github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= -github.com/envoyproxy/go-control-plane v0.10.1/go.mod h1:AY7fTTXNdv/aJ2O5jwpxAPOWUZ7hQAEvzN5Pf27BkQQ= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/envoyproxy/protoc-gen-validate v0.6.2/go.mod h1:2t7qjJNvHPx8IjnBOzl9E9/baC+qXE/TeeyBRzgJDws= github.com/evanphx/json-patch v0.5.2/go.mod h1:ZWS5hhDbVDyob71nXKNL0+PWn6ToqBHMikGIFbs31qQ= -github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.11.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH5pOlLGNtQ5lPWQu84= github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= @@ -369,7 +186,6 @@ github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d h1:105gxyaGwC github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d/go.mod h1:ZZMPRZwes7CROmyNKgQzC3XPs6L/G2EJLHddWejkmf4= github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= @@ -387,18 +203,18 @@ github.com/fluxcd/notification-controller/api v0.23.5 h1:yVx3AXSIL52TwqIxTki3MGR github.com/fluxcd/notification-controller/api v0.23.5/go.mod h1:+TZuRS0YbiKxVJYGWDTSG6sL8F0V8+7zK+y14EvV818= github.com/fluxcd/pkg/apis/acl v0.0.3 h1:Lw0ZHdpnO4G7Zy9KjrzwwBmDZQuy4qEjaU/RvA6k1lc= github.com/fluxcd/pkg/apis/acl v0.0.3/go.mod h1:XPts6lRJ9C9fIF9xVWofmQwftvhY25n1ps7W9xw0XLU= -github.com/fluxcd/pkg/apis/kustomize v0.3.3 h1:bPN29SdVzWl0yhgivuf/83IAe2R6vUuDVcB3LzyVU8E= -github.com/fluxcd/pkg/apis/kustomize v0.3.3/go.mod h1:5HTOFZfQFVMMqR2rvuxpbZhpb+sQpcTT6RCQZOhjFzA= -github.com/fluxcd/pkg/apis/meta v0.13.0 h1:0QuNKEExSjk+Rv0I6a85p2H3xOlWhdxZRsh10waEL/c= -github.com/fluxcd/pkg/apis/meta v0.13.0/go.mod h1:Z26X5uTU5LxAyWETGueRQY7TvdPaGfKU7Wye9bdUlho= -github.com/fluxcd/pkg/kustomize v0.4.0 h1:ct1YGrO/o++NVecAyeOxd3/YzGNvRdslaE6pmWxBt0M= -github.com/fluxcd/pkg/kustomize v0.4.0/go.mod h1:ZlTFhk6Cxtmf1T7tpYuTACmMfqDdsPcXUGRAq3t9fH8= -github.com/fluxcd/pkg/runtime v0.14.2 h1:ktyUjcX4pHoC8DRoBmhEP6eMHbmR6+/MYoARe4YulZY= -github.com/fluxcd/pkg/runtime v0.14.2/go.mod h1:NZr3PRK7xX2M1bl0LdtugvQyWkOmu2NcW3NrZH6U0is= -github.com/fluxcd/pkg/ssa v0.15.2 h1:hLEIh7Ymlt6ihfQHIEx7DjAa+FCndBpHW6wyELToVsI= -github.com/fluxcd/pkg/ssa v0.15.2/go.mod h1:wwDtLfi7a31/yQuC/oeHXZpaSHGrkZk835uhdHDNyik= -github.com/fluxcd/pkg/ssh v0.3.2 h1:HZlDF6Qu4yplsU4Tisv6hxsRIbIOwwr7rKus8/Q/Dn0= -github.com/fluxcd/pkg/ssh v0.3.2/go.mod h1:OVnuv9y2WCx7AoOIid0sxqe9lLKKfDS4PMl+4ta5DIo= +github.com/fluxcd/pkg/apis/kustomize v0.4.1 h1:YgIF9TJ23pH66W/gYlEu+DeH1pU3tS4xYlRc5AQzk58= +github.com/fluxcd/pkg/apis/kustomize v0.4.1/go.mod h1:U9rfSgDHaQd74PgPKt9DprtuzT+i1m18zlHxatq7c5Y= +github.com/fluxcd/pkg/apis/meta v0.14.1 h1:lPDs9yV67DnwalHPb13bbnDkAatALfUiAMRHjUm4UBw= +github.com/fluxcd/pkg/apis/meta v0.14.1/go.mod h1:1uJkTJGSZWrZxL5PFpx1IxGLrFmT1Cd0C2fFWrbv77I= +github.com/fluxcd/pkg/kustomize v0.5.1 h1:151Ih34ltxN2z1e2mA5AvQONyE6phc4es57oVK3+plU= +github.com/fluxcd/pkg/kustomize v0.5.1/go.mod h1:58MFITy24bIbGI6cC3JkV/YpFQj648sVvgs0K1kraJw= +github.com/fluxcd/pkg/runtime v0.15.1 h1:PKooYqlZM+KLhnNz10sQnBH0AHllS40PIDHtiRH/BGU= +github.com/fluxcd/pkg/runtime v0.15.1/go.mod h1:TPAoOEgUFG60FXBA4ID41uaPldxuXCEI4jt3qfd5i5Q= +github.com/fluxcd/pkg/ssa v0.16.1 h1:hWXMtDhiAPRPHpHiQ5NzVjqIDhOfyzWmc2zA49Wxw7E= +github.com/fluxcd/pkg/ssa v0.16.1/go.mod h1:rLqpc2CDtyZhRIMKHDRJoMHXj0MgQBpg5134zk+ARHM= +github.com/fluxcd/pkg/ssh v0.4.0 h1:2HY88irZ5BCSMlzZExR6cnhRkjxCDsK/lTHHQqCJDJQ= +github.com/fluxcd/pkg/ssh v0.4.0/go.mod h1:KGgOUOy1uI6RC6+qxIBLvP1AeOOs/nLB25Ca6TZMIXE= github.com/fluxcd/pkg/untar v0.1.0 h1:k97V/xV5hFrAkIkVPuv5AVhyxh1ZzzAKba/lbDfGo6o= github.com/fluxcd/pkg/untar v0.1.0/go.mod h1:aGswNyzB1mlz/T/kpOS58mITBMxMKc9tlJBH037A2HY= github.com/fluxcd/pkg/version v0.1.0 h1:v+SmCanmCB5Tj2Cx9TXlj+kNRfPGbAvirkeqsp7ZEAQ= @@ -409,18 +225,13 @@ github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/form3tech-oss/jwt-go v3.2.3+incompatible h1:7ZaBxOI7TMoYBfyA3cQHErNNyAWIKUMIwqxEtgHOs5c= github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= -github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpgI= github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= -github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa/go.mod h1:KnogPXtdwXqoenmZCw6S+25EAm2MkxbG0deNDu4cbSA= -github.com/fvbommel/sortorder v1.0.1 h1:dSnXLt4mJYH25uDDGa3biZNQsozaUWDSWeKJ0qqFfzE= github.com/fvbommel/sortorder v1.0.1/go.mod h1:uk88iVf1ovNn1iLfgUVU2F9o5eO30ui720w+kxuqRs0= -github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= github.com/getkin/kin-openapi v0.76.0/go.mod h1:660oXbgy5JFMKreazJaQTw7o+X00qeSyhcnluiMv+Xg= github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ= -github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gliderlabs/ssh v0.2.2 h1:6zsha5zo/TWhRhwqCD3+EarCAgZ2yN28ipRnGPnwkI0= github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= @@ -438,7 +249,6 @@ github.com/go-git/go-git/v5 v5.4.2/go.mod h1:gQ1kArt6d+n+BGd+/B/I74HwRTLhth2+zti github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-ini/ini v1.25.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= @@ -448,41 +258,28 @@ github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.2.2 h1:ahHml/yUpnlb96Rp8HCvtYVPY8ZYpxq3g7UYchIYwbs= -github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= +github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/zapr v1.2.0/go.mod h1:Qa4Bsj2Vb+FAVeAKsLD8RLQ+YRJB8YDmOAKxaBQf7Ro= github.com/go-logr/zapr v1.2.2 h1:5YNlIL6oZLydaV4dOFjL8YpgXF/tPeTbnpatnu3cq6o= -github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= github.com/go-openapi/jsonreference v0.19.5 h1:1WJP/wi4OjB4iV8KVbH73rQaoialJrqv8gitZLxGLtM= github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg= -github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= -github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.14 h1:gm3vOOXfiuw5i9p5N9xJvfjvuofpyvLA9Wr6QfK5Fng= github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/godbus/dbus v0.0.0-20151105175453-c7fdd8b5cd55/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= -github.com/godbus/dbus v0.0.0-20180201030542-885f9cc04c9c/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= -github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= -github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/gogo/googleapis v1.2.0/go.mod h1:Njal3psf3qN6dwBtQfUmBZh2ybovJ0tlu3o/AC7HYjU= -github.com/gogo/googleapis v1.4.0/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= -github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= -github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -534,7 +331,7 @@ github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Z github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4= github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= -github.com/google/cel-go v0.9.0/go.mod h1:U7ayypeSkw23szu4GaQTPJGx66c20mx8JklMSxrmI1w= +github.com/google/cel-go v0.10.1/go.mod h1:U7ayypeSkw23szu4GaQTPJGx66c20mx8JklMSxrmI1w= github.com/google/cel-spec v0.6.0/go.mod h1:Nwjgxy5CbjlPrtCWjeDjUyKMl8w41YBYGjsyDdqk0xA= github.com/google/gnostic v0.5.7-v3refs h1:FhTMOKj2VhjpouxvWJAV1TL304uMlb9zcDqkl6cEI54= github.com/google/gnostic v0.5.7-v3refs/go.mod h1:73MKFl6jIHelAJNaBGFzt3SPtZULs9dYrGFt8OiIsHQ= @@ -552,8 +349,8 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-containerregistry v0.8.0 h1:mtR24eN6rapCN+shds82qFEIWWmg64NPMuyCNT7/Ogc= -github.com/google/go-containerregistry v0.8.0/go.mod h1:wW5v71NHGnQyb4k+gSshjxidrC7lN33MdWEn+Mz9TsI= +github.com/google/go-containerregistry v0.9.0 h1:5Ths7RjxyFV0huKChQTgY6fLzvHhZMpLTFNja8U0/0w= +github.com/google/go-containerregistry v0.9.0/go.mod h1:9eq4BnSufyT1kHNffX+vSXVonaJ7yaIOulrKZejMxnQ= github.com/google/go-github/v41 v41.0.0 h1:HseJrM2JFf2vfiZJ8anY2hqBjdfY1Vlj/K27ueww4gg= github.com/google/go-github/v41 v41.0.0/go.mod h1:XgmCA5H323A9rtgExdTcnDkcqp6S30AVACCBDOonIxg= github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= @@ -583,66 +380,44 @@ github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLe github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= -github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= -github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2cUuW7uA/OeU= -github.com/googleapis/gnostic v0.5.5 h1:9fHAtK0uDfpveeqqo1hkEZJcFvYXAiCN3UutL8F9xHw= -github.com/googleapis/gnostic v0.5.5/go.mod h1:7+EbHbldMins07ALC74bsA81Ovc97DwqyJO1AENw9kA= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/handlers v0.0.0-20150720190736-60c7bfde3e33/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= -github.com/gorilla/mux v1.7.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= -github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 h1:+ngKgrYPPJrOjhax5N+uePQ0Fh1Z7PheYoUI/0nzkPA= github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= -github.com/hashicorp/consul/api v1.11.0/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= -github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= -github.com/hashicorp/errwrap v0.0.0-20141028054710-7554cd9344ce/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= +github.com/hashicorp/go-hclog v0.9.2 h1:CG6TE5H9/JXsFWJCfoIVpKFIkFe6ysEuHirp4DxCsHI= github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= -github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-hclog v1.0.0 h1:bkKf0BeBXcSYa7f5Fyi9gMuQ8gNsxeiNpZjR6VxNZeo= -github.com/hashicorp/go-hclog v1.0.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= -github.com/hashicorp/go-multierror v0.0.0-20161216184304-ed905158d874/go.mod h1:JMRHfdO9jKNzS/+BTlxCjKNQHg/jZAft8U7LloJvN7I= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= -github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= -github.com/hashicorp/go-retryablehttp v0.7.0 h1:eu1EI/mbirUgP5C8hVsTNaGZreBDlYiwC1FZWkvQPQ4= -github.com/hashicorp/go-retryablehttp v0.7.0/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= +github.com/hashicorp/go-retryablehttp v0.7.1 h1:sUiuQAnLlbvmExtFQs72iFW/HXeUn8Z1aJLQ4LJJbTQ= +github.com/hashicorp/go-retryablehttp v0.7.1/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= -github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= @@ -650,47 +425,31 @@ github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/b github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= -github.com/hashicorp/mdns v1.0.1/go.mod h1:4gW7WsVCke5TE7EPeYliwHlRUyBtfCwuFwuMg2DmyNY= -github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc= github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= -github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= -github.com/hashicorp/memberlist v0.3.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= -github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= -github.com/hashicorp/serf v0.9.6/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= -github.com/homeport/dyff v1.5.2 h1:68iA503cOu5dEnZr2HDfdVbZAmzrBsNhdFbIUhzz2/U= -github.com/homeport/dyff v1.5.2/go.mod h1:tTVEEcqIS3XPocLfR4rdgQYV1VlKMuM5R3Dx4Q0LMmU= +github.com/homeport/dyff v1.5.3 h1:42jm/nKaMCad56VDahMAZT4fuZTk0SED4oB/Ial6Ks4= +github.com/homeport/dyff v1.5.3/go.mod h1:tTVEEcqIS3XPocLfR4rdgQYV1VlKMuM5R3Dx4Q0LMmU= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= 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= -github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.10/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= -github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/j-keck/arping v0.0.0-20160618110441-2cf9dc699c56/go.mod h1:ymszkNOg6tORTn+6F6j+Jc8TOr5osrynvN6ivFWZ2GA= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= -github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jmespath/go-jmespath v0.0.0-20160803190731-bd40a432e4c7/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= @@ -706,11 +465,7 @@ github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvW github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.11.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.11.13/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= @@ -719,7 +474,6 @@ github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfn github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= @@ -728,8 +482,6 @@ github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9 github.com/lithammer/dedent v1.1.0/go.mod h1:jrXYCQtgg0nJiN+StA2KgR7w6CiQNv9Fd/Z9BP0jIOc= github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= -github.com/lyft/protoc-gen-star v0.5.3/go.mod h1:V0xaHgaf5oCCqmcxYcWiDfTiKsZsRc87/1qhoTACD8w= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= @@ -739,43 +491,29 @@ github.com/mailru/easyjson v0.7.6 h1:8yTIVnZgCoiM1TgqoeTl+LfU5Jg6/xL3QhGQnimLYnA github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/manifoldco/promptui v0.9.0 h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA= github.com/manifoldco/promptui v0.9.0/go.mod h1:ka04sppxSGFAtxX0qhlYQjISsg9mR4GWtQEhdbn6Pgg= -github.com/marstr/guid v1.1.0/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHefzho= github.com/matryer/is v1.2.0 h1:92UTHpy8CDwaJ08GqLDzhhuixiBUUD1p3AU6PHddz4A= github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= github.com/mattn/go-ciede2000 v0.0.0-20170301095244-782e8c62fec3 h1:BXxTozrOU8zgC5dkpn3J6NTRdoP+hjok/e+ACr4Hibk= github.com/mattn/go-ciede2000 v0.0.0-20170301095244-782e8c62fec3/go.mod h1:x1uk6vxTiVuNt6S5R2UYgdhpj3oKojXvOXauHZ7dEnI= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= -github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= -github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU= github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/mattn/go-shellwords v1.0.3/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o= github.com/mattn/go-shellwords v1.0.12 h1:M2zGm7EW6UQJvDeQxo4T51eKPurbeFbe8WtebGE2xrk= github.com/mattn/go-shellwords v1.0.12/go.mod h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lLtQsUlTZDWQ8Y= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= -github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= -github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= -github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= -github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= @@ -791,18 +529,10 @@ github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0Qu github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f/go.mod h1:OkQIRizQZAeMln+1tSwduZz7+Af5oFlKirV/MSYes2A= -github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc= github.com/moby/spdystream v0.2.0 h1:cjW1zVyyoiM0T7b6UoySUFqzXMoqRckQtXwGPiBhOM8= github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= -github.com/moby/sys/mountinfo v0.4.0/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A= -github.com/moby/sys/mountinfo v0.4.1/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A= -github.com/moby/sys/symlink v0.1.0/go.mod h1:GGDODQmbFOjFsXvfLVn3+ZRxkch54RkSiGqsZeMYowQ= -github.com/moby/term v0.0.0-20200312100748-672ec06f55cd/go.mod h1:DdlQx2hp0Ss5/fLikoLlEeIYiATotOjgB//nb973jeo= -github.com/moby/term v0.0.0-20201216013528-df9cb8a40635/go.mod h1:FBS0z0QWA44HXygs7VXDUOGoN/1TV3RuWkLO04am3wc= -github.com/moby/term v0.0.0-20210610120745-9d4ed1856297 h1:yH0SvLzcbZxcJXho2yh7CqdENGMQe73Cw3woZBpPli0= -github.com/moby/term v0.0.0-20210610120745-9d4ed1856297/go.mod h1:vgPCkQMyxTZ7IDy8SXRufE172gr8+K/JE/7hHFxHW3A= +github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6 h1:dcztxKSvZ4Id8iPpHERQBbIJfabdt4wUm5qy3wOL2Zc= +github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -812,75 +542,38 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 h1:n6/2gBQ3RWajuToeY6ZtZTIKv2v7ThUy5KKusIT0yc0= github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00/go.mod h1:Pm3mSP3c5uWn86xMLZ5Sa7JB9GsEZySvHYXCTK4E9q4= -github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= -github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ= github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= -github.com/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= -github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/olekukonko/tablewriter v0.0.4/go.mod h1:zq6QwlOf5SlnkVbMSr5EoBv3636FWnp+qbPhuoO21uA= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= -github.com/onsi/ginkgo v0.0.0-20151202141238-7f8ab55aaf3b/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo/v2 v2.1.3 h1:e/3Cwtogj0HA+25nMP1jCMDIf8RtRYbGwGGuBIFztkc= -github.com/onsi/gomega v0.0.0-20151007035656-2152b45fa28a/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= -github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDsH8xc= github.com/onsi/gomega v1.19.0 h1:4ieX6qQjPP/BfC3mpsAtIGGlxTWPeA3Inl/7DtXw1tw= github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= -github.com/opencontainers/go-digest v0.0.0-20170106003457-a6d0ee40d420/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= -github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= -github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= -github.com/opencontainers/go-digest v1.0.0-rc1.0.20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= -github.com/opencontainers/image-spec v1.0.0/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= -github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= -github.com/opencontainers/image-spec v1.0.2-0.20211117181255-693428a734f5/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= -github.com/opencontainers/runc v0.0.0-20190115041553-12f6a991201f/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runc v1.0.0-rc8.0.20190926000215-3e425f80a8c9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runc v1.0.0-rc9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runc v1.0.0-rc93/go.mod h1:3NOsor4w32B2tC0Zbl8Knk4Wg84SM2ImC1fxBuqJ/H0= -github.com/opencontainers/runc v1.0.2/go.mod h1:aTaHFFwQXuA71CiyxOdFFIorAoemI04suvGRQFzWTD0= -github.com/opencontainers/runtime-spec v0.1.2-0.20190507144316-5b71a03e2700/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.1/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.2-0.20190207185410-29686dbc5559/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.3-0.20200929063507-e6143ca7d51d/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-tools v0.0.0-20181011054405-1d69bd0f9c39/go.mod h1:r3f7wjNzSs2extwzU3Y+6pKfobzPh+kKFJ3ofN+3nfs= -github.com/opencontainers/selinux v1.6.0/go.mod h1:VVGKuOLlE7v4PJyT6h7mNWvq1rzqiriPsEqVhc+svHE= -github.com/opencontainers/selinux v1.8.0/go.mod h1:RScLhm78qiWa2gbVCcGkC7tCGdgk3ogry1nUQF8Evvo= -github.com/opencontainers/selinux v1.8.2/go.mod h1:MUIHuUEvKB1wtJjQdOyYRgOnLD2xAPP8dBsCoU0KuF8= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc= github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1-0.20171018195549-f15c970de5b7/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -888,45 +581,30 @@ github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= -github.com/prometheus/client_golang v0.0.0-20180209125602-c332b6f63c06/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= -github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_golang v1.12.1 h1:ZiaPsmm9uiBeaSMRznKsCDNtPCS0T3JVDGF+06gjBzk= github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= -github.com/prometheus/client_model v0.0.0-20171117100541-99fa1f4be8e5/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/common v0.0.0-20180110214958-89604d197083/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.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.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.28.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/common v0.32.1 h1:hWIdL3N2HoUx3B8j3YN9mWor0qhY/NlEKZEaXxuIRh4= github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= -github.com/prometheus/procfs v0.0.0-20180125133057-cb4147076ac7/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.0-20190522114515-bc1a522cf7b1/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= 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.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= -github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= @@ -942,17 +620,11 @@ github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQD github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/safchain/ethtool v0.0.0-20190326074333-42ed695e3de8/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4= -github.com/sagikazarmark/crypt v0.3.0/go.mod h1:uD/D+6UF4SrIR1uGEv7bBNkNqLGqUr43MRiaGWX1Nig= -github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= -github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= @@ -960,46 +632,32 @@ github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrf github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/soheilhy/cmux v0.1.5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= -github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cobra v0.0.2-0.20171109065643-2da4a54c5cee/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo= github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= -github.com/spf13/cobra v1.3.0/go.mod h1:BrRVncBjOJa/eUcVVm9CE+oC6as8k+VYr4NY7WCi9V4= github.com/spf13/cobra v1.4.0 h1:y+wJpx64xcgO1V+RcnwW0LEHxTKRi2ZDPSBjWnrg88Q= github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.1-0.20171106142849-4c012f6dcd95/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= -github.com/spf13/viper v1.10.0/go.mod h1:SoyBPwAtKDzypXNDFKN5kzH7ppppbGZtls1UpIy5AsM= -github.com/stefanberger/go-pkcs11uri v0.0.0-20201008174630-78d3cae3a980/go.mod h1:AO3tvPzVZ/ayst6UlUKUv6rcPQInYe3IknH3jYhAKu8= github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= -github.com/stretchr/objx v0.0.0-20180129172003-8a3f7159479f/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= -github.com/stretchr/testify v0.0.0-20180303142811-b89eecf5ca5d/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -1007,74 +665,40 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5 github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1 h1:5TQK59W5E3v0r2duFAb7P95B6hEeOyEnHRa8MjYSMTY= -github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= -github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/tchap/go-patricia v2.2.6+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I= github.com/texttheater/golang-levenshtein v1.0.1 h1:+cRNoVrfiwufQPhoMzB6N0Yf/Mqajr6t1lOv8GyGE2U= github.com/texttheater/golang-levenshtein v1.0.1/go.mod h1:PYAKrbF5sAiq9wd+H82hs7gNaen0CplQ9uvm6+enD/8= github.com/theckman/yacspin v0.13.12 h1:CdZ57+n0U6JMuh2xqjnjRq5Haj6v1ner2djtLQRzJr4= github.com/theckman/yacspin v0.13.12/go.mod h1:Rd2+oG2LmQi5f3zC3yeZAOl245z8QOvrH4OPOJNZxLg= -github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= -github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= -github.com/urfave/cli v0.0.0-20171014202726-7bc6a0acffa5/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= -github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= -github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/urfave/cli v1.22.4/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/vbatts/tar-split v0.11.2/go.mod h1:vV3ZuO2yWSVsz+pfFzDG/upWH1JhjOiEaWq6kXyQ3VI= github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74 h1:JwtAtbp7r/7QSyGz8mKUbYJBg2+6Cd7OjM8o/GNOcVo= github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74/go.mod h1:RmMWU37GKR2s6pgrIEB4ixgpVCt/cf7dnJv3fuH1J1c= -github.com/vishvananda/netlink v0.0.0-20181108222139-023a6dafdcdf/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk= -github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= -github.com/vishvananda/netlink v1.1.1-0.20201029203352-d40f9887b852/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhgX83tXhKS2B/PRMpOho= -github.com/vishvananda/netns v0.0.0-20180720170159-13995c7128cc/go.mod h1:ZjcWmFBXmLKZu9Nxj3WKYEafiSqer2rnvPr0en9UNpI= -github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= -github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= -github.com/willf/bitset v1.1.11-0.20200630133818-d5bec3311243/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= -github.com/willf/bitset v1.1.11/go.mod h1:83CECat5yLh5zVOf4P1ErAgKA5UDvKtgyUABdr3+MjI= github.com/xanzy/go-gitlab v0.54.3 h1:fPfZ3Jcu5dPc3xyIYtAALZsEgoyKNFNuULD+TdJ7Zvk= github.com/xanzy/go-gitlab v0.54.3/go.mod h1:F0QEXwmqiBUxCgJm8fE9S+1veX4XC9Z4cfaAbqwk4YM= github.com/xanzy/ssh-agent v0.3.0 h1:wUMzuKtKilRgBAD1sUb8gOwwRr2FGoBVumcjoOACClI= github.com/xanzy/ssh-agent v0.3.0/go.mod h1:3s9xbODqPuuhK9JV1R321M/FlMZSBvE5aY6eAcqrDh0= -github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= -github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= -github.com/xeipuuv/gojsonschema v0.0.0-20180618132009-1d523034197f/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xlab/treeprint v0.0.0-20181112141820-a009c3971eca h1:1CFlNzQhALwjS9mBAUkycX616GzgsuYUOCHA5+HSlXI= github.com/xlab/treeprint v0.0.0-20181112141820-a009c3971eca/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43/go.mod h1:aX5oPXxHm3bOH+xeAttToC8pqch2ScQN/JoXYupl6xs= -github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50/go.mod h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96TguQh0+r/ssA= -github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= -go.etcd.io/etcd v0.5.0-alpha.5.0.20200910180754-dd1b699fc489/go.mod h1:yVHk9ub3CSBatqGNg7GRmsnfLWtoW60w4eDYfh7vHDg= go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= go.etcd.io/etcd/api/v3 v3.5.1/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= go.etcd.io/etcd/client/pkg/v3 v3.5.1/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= -go.etcd.io/etcd/client/v2 v2.305.1/go.mod h1:pMEacxZW7o8pg4CrFE7pquyCJJzZvkvdD2RibOCCCGs= go.etcd.io/etcd/client/v3 v3.5.0/go.mod h1:AIKXXVX/DQXtfTEqBryiLTUXwON+GuvO6Z7lLS/oTh0= +go.etcd.io/etcd/client/v3 v3.5.1/go.mod h1:OnjH4M8OnAotwaB2l9bVgZzRFKru7/ZMoS46OtKyd3Q= go.etcd.io/etcd/pkg/v3 v3.5.0/go.mod h1:UzJGatBQ1lXChBkQF0AuAtkRQMYnHubxAEYIrC3MSsE= go.etcd.io/etcd/raft/v3 v3.5.0/go.mod h1:UFOHSIvO/nKwd4lhkwabrTD3cqW5yVyYYf/KlD00Szc= go.etcd.io/etcd/server/v3 v3.5.0/go.mod h1:3Ah5ruV+M+7RZr0+Y/5mNLwC+eQlni+mQmOVdCRJoS4= -go.mozilla.org/pkcs7 v0.0.0-20200128120323-432b2356ecb1/go.mod h1:SNgMg+EgDFwmvSmLRTNKC5fegJjB7v23qTQ0XLGUNHk= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -1096,7 +720,6 @@ go.opentelemetry.io/otel/trace v0.20.0/go.mod h1:6GjCW8zgDjwGHGa6GkyeB8+/5vjT16g go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 h1:+FNtrFTmVw0YZGpBGX56XDee331t6JAXeK2bcyhLOOc= go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5/go.mod h1:nmDLcffg48OtT/PSW0Hg7FvpRQsQh5OSqIylirxKC7o= -go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= @@ -1109,27 +732,23 @@ go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= go.uber.org/zap v1.21.0 h1:WefMeulhovoZ2sYXz7st6K0sLj7bBhpiFaud4r4zST8= -golang.org/x/crypto v0.0.0-20171113213409-9f005a07e0d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181009213950-7c1a557ab941/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20220427172511-eb4f295cb31f h1:OeJjE6G4dgCY4PIXvIRQbE8+RX+uXZyGhUy/ksMGJoc= -golang.org/x/crypto v0.0.0-20220427172511-eb4f295cb31f/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e h1:T8NU3HyQ8ClP4SEE+KbFlg6n0NhuTsN4MyznaarGsZM= +golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -1165,12 +784,10 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 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.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= -golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= +golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1181,17 +798,12 @@ golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190619014844-b5b0513f8c1b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -1207,29 +819,24 @@ golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201006153459-a7d1128ccaa0/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210326060303-6b1517762897/go.mod h1:uSPa2vr4CLtc/ILN5odXGNXS6mhrKVzTaCXzk9m6W3k= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210825183410-e898025ed96a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211209124913-491a49abca63/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211216030914-fe4d6282115f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220325170049-de3da57026de h1:pZB1TWnKi+o4bENlbzAgLrEbY4RMYmUIRobMcSmfeYc= -golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220516155154-20f960328961 h1:+W/iTMPG0EL7aW+/atntZwZrvSRIj3m3yX414dSULUU= +golang.org/x/net v0.0.0-20220516155154-20f960328961/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= 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= @@ -1246,9 +853,9 @@ golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 h1:RerP+noqYHUQ8CMRcPlC2nvTa4dcBIjegkuWdcUDuqg= golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 h1:OSnWWcOd/CtWQC2cYSBgbTSJv3ciqd8r54ySIW2y3RE= +golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= 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= @@ -1259,8 +866,9 @@ golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220513210516-0976fa681c29 h1:w8s32wxx3sY+OjLlv9qltkLU5yvJzxjjgiHWLjdIcw4= +golang.org/x/sync v0.0.0-20220513210516-0976fa681c29/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1270,47 +878,29 @@ golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190514135907-3a4b5fb9f71f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190522044717-8097e1b27ff5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190602015325-4c4f7f33c9ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190812073006-9eafafc0a87e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191002063906-3421d5a6bb1c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191210023423-ac6580df4449/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200120151820-655fe14d7479/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200217220822-9197077df867/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1321,28 +911,17 @@ golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200728102440-3e129f6d46b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200817155316-9781c653f443/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200916030750-2334cc1a136f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200922070232-aee5d888a860/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201112073958-5cba982894dd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201117170446-d9b008d0a637/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201202213521-69691e467435/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1350,7 +929,6 @@ golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210426230700-d19ff857e887/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210502180810-71e4cd670f79/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1360,24 +938,21 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211205182925-97ca703d548d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220325203850-36772127a21f h1:TrmogKRsSOxRMJbLYGrB4SBbW+LJcEllYBLME5Zk5pU= -golang.org/x/sys v0.0.0-20220325203850-36772127a21f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220513210249-45d2b4557a2a h1:N2T1jUrTQE9Re6TFF5PhvEHXHCguynGhKjWVsIUt5cY= +golang.org/x/sys v0.0.0-20220513210249-45d2b4557a2a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.0.0-20220411215600-e5f449aeb171 h1:EH1Deb8WZJ0xc0WK//leUHXcX9aLE5SymusoTmMZye8= -golang.org/x/term v0.0.0-20220411215600-e5f449aeb171/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.0.0-20220526004731-065cf7ba2467 h1:CBpWXWQpIRjzmkkA+M7q9Fqnwd2mZr3AFqexg8YTfoM= +golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1388,14 +963,12 @@ golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac h1:7zkz7BUtwNFFqcowJ+RIgu2MaV/MapERkDIy+mwPyjs= -golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 h1:vVKdlvoWBphwdxWKrFZEuM0kGgGLxUOYcY4U/2Vjg44= +golang.org/x/time v0.0.0-20220210224613-90d013bbcef8/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -1409,12 +982,10 @@ golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBn golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -1458,15 +1029,13 @@ golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= 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.6-0.20210820212750-d4cc65f0b2ff/go.mod h1:YD9qOF0M9xpSpdWTBbzEl5e/RnCefISl8E5Noe10jFM= -golang.org/x/tools v0.1.8/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= +golang.org/x/tools v0.1.10-0.20220218145154-897bd77cd717/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gomodules.xyz/jsonpatch/v2 v2.2.0 h1:4pT439QV83L+G9FkcCriY6EkpcK6r6bK+A5FBUMI7qY= gomodules.xyz/jsonpatch/v2 v2.2.0/go.mod h1:WXp+iVDkoLQqPudfQ9GBlwB2eZ5DKOnjQZCYdOS8GPY= -google.golang.org/api v0.0.0-20160322025152-9bf6e6e569ff/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= @@ -1497,9 +1066,7 @@ google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6 google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= -google.golang.org/api v0.59.0/go.mod h1:sT2boj7M9YJxZzgeZqXogmhfmRWDtPzT31xkieUbuZU= google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= -google.golang.org/api v0.62.0/go.mod h1:dKmwPCydfsad4qCH08MSdgWjfHOyfpd4VtDGgRFdavw= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1508,13 +1075,11 @@ google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCID google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/cloud v0.0.0-20151119220103-975617b05ea8/go.mod h1:0H1ncTHf11KCFhTc/+EFRbzSCOZx+VUbRMk55Yv5MYk= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190522204451-c2c4e71fbf69/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= @@ -1523,7 +1088,6 @@ google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvx google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200117163144-32f20d992d24/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= @@ -1546,7 +1110,6 @@ google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201102152239-715cce707fb0/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201110150050-8816d57aaa9a/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= @@ -1571,21 +1134,13 @@ google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEc google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211008145708-270636b82663/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211028162531-8db9c33dc351/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211129164237-f09f9a12af12/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211203200212-54befc351ae9/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/grpc v0.0.0-20160317175043-d3ddb4469d5a/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= +google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= @@ -1607,9 +1162,6 @@ google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQ google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= -google.golang.org/grpc v1.43.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= 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= @@ -1623,31 +1175,25 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= +google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= +google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= 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= -gopkg.in/check.v1 v1.0.0-20141024133853-64131543e789/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= -gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= -gopkg.in/square/go-jose.v2 v2.5.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= @@ -1662,12 +1208,8 @@ gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= 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.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= -gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= +gopkg.in/yaml.v3 v3.0.0 h1:hjy8E9ON/egN1tAYqKb61G10WtihqetD4sz2H+8nIeA= +gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= gotest.tools/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0= gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8= @@ -1678,87 +1220,63 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -k8s.io/api v0.20.1/go.mod h1:KqwcCVogGxQY3nBlRpwt+wpAMF/KjaCc7RpywacvqUo= -k8s.io/api v0.20.4/go.mod h1:++lNL1AJMkDymriNniQsWRkMDzRaX2Y/POTUi8yvqYQ= -k8s.io/api v0.20.6/go.mod h1:X9e8Qag6JV/bL5G6bU8sdVRltWKmdHsFUGS3eVndqE8= -k8s.io/api v0.23.6 h1:yOK34wbYECH4RsJbQ9sfkFK3O7f/DUHRlzFehkqZyVw= -k8s.io/api v0.23.6/go.mod h1:1kFaYxGCFHYp3qd6a85DAj/yW8aVD6XLZMqJclkoi9g= -k8s.io/apiextensions-apiserver v0.23.6 h1:v58cQ6Z0/GK1IXYr+oW0fnYl52o9LTY0WgoWvI8uv5Q= -k8s.io/apiextensions-apiserver v0.23.6/go.mod h1:YVh17Mphv183THQJA5spNFp9XfoidFyL3WoDgZxQIZU= -k8s.io/apimachinery v0.20.1/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= -k8s.io/apimachinery v0.20.4/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= -k8s.io/apimachinery v0.20.6/go.mod h1:ejZXtW1Ra6V1O5H8xPBGz+T3+4gfkTCeExAHKU57MAc= -k8s.io/apimachinery v0.23.6 h1:RH1UweWJkWNTlFx0D8uxOpaU1tjIOvVVWV/bu5b3/NQ= -k8s.io/apimachinery v0.23.6/go.mod h1:BEuFMMBaIbcOqVIJqNZJXGFTP4W6AycEpb5+m/97hrM= -k8s.io/apiserver v0.20.1/go.mod h1:ro5QHeQkgMS7ZGpvf4tSMx6bBOgPfE+f52KwvXfScaU= -k8s.io/apiserver v0.20.4/go.mod h1:Mc80thBKOyy7tbvFtB4kJv1kbdD0eIH8k8vianJcbFM= -k8s.io/apiserver v0.20.6/go.mod h1:QIJXNt6i6JB+0YQRNcS0hdRHJlMhflFmsBDeSgT1r8Q= -k8s.io/apiserver v0.23.6/go.mod h1:5PU32F82tfErXPmf7FXhd/UcuLfh97tGepjKUgJ2atg= -k8s.io/cli-runtime v0.23.6 h1:zvsGa4An+udUnznKSfD1Q17sETWHNOaMqYKHwHCvg+4= -k8s.io/cli-runtime v0.23.6/go.mod h1:0Z3VR/HRIFKiLzKIAkm1mPtcH98GT/fXu2IU0E4vFmw= -k8s.io/client-go v0.20.1/go.mod h1:/zcHdt1TeWSd5HoUe6elJmHSQ6uLLgp4bIJHVEuy+/Y= -k8s.io/client-go v0.20.4/go.mod h1:LiMv25ND1gLUdBeYxBIwKpkSC5IsozMMmOOeSJboP+k= -k8s.io/client-go v0.20.6/go.mod h1:nNQMnOvEUEsOzRRFIIkdmYOjAZrC8bgq0ExboWSU1I0= -k8s.io/client-go v0.23.6 h1:7h4SctDVQAQbkHQnR4Kzi7EyUyvla5G1pFWf4+Od7hQ= -k8s.io/client-go v0.23.6/go.mod h1:Umt5icFOMLV/+qbtZ3PR0D+JA6lvvb3syzodv4irpK4= -k8s.io/code-generator v0.23.6/go.mod h1:S0Q1JVA+kSzTI1oUvbKAxZY/DYbA/ZUb4Uknog12ETk= -k8s.io/component-base v0.20.1/go.mod h1:guxkoJnNoh8LNrbtiQOlyp2Y2XFCZQmrcg2n/DeYNLk= -k8s.io/component-base v0.20.4/go.mod h1:t4p9EdiagbVCJKrQ1RsA5/V4rFQNDfRlevJajlGwgjI= -k8s.io/component-base v0.20.6/go.mod h1:6f1MPBAeI+mvuts3sIdtpjljHWBQ2cIy38oBIWMYnrM= -k8s.io/component-base v0.23.6 h1:8dhVZ4VrRcNdV2EGjl8tj8YOHwX6ysgCGMJ2Oyy0NW8= -k8s.io/component-base v0.23.6/go.mod h1:FGMPeMrjYu0UZBSAFcfloVDplj9IvU+uRMTOdE23Fj0= -k8s.io/component-helpers v0.23.6/go.mod h1:kgvl6wvnYg9oebklLPpbW8UhvAZ9Qds26/RANEbny/8= -k8s.io/cri-api v0.17.3/go.mod h1:X1sbHmuXhwaHs9xxYffLqJogVsnI+f6cPRcgPel7ywM= -k8s.io/cri-api v0.20.1/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI= -k8s.io/cri-api v0.20.4/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI= -k8s.io/cri-api v0.20.6/go.mod h1:ew44AjNXwyn1s0U4xCKGodU7J1HzBeZ1MpGrpa5r8Yc= +k8s.io/api v0.24.0/go.mod h1:5Jl90IUrJHUJYEMANRURMiVvJ0g7Ax7r3R1bqO8zx8I= +k8s.io/api v0.24.1 h1:BjCMRDcyEYz03joa3K1+rbshwh1Ay6oB53+iUx2H8UY= +k8s.io/api v0.24.1/go.mod h1:JhoOvNiLXKTPQ60zh2g0ewpA+bnEYf5q44Flhquh4vQ= +k8s.io/apiextensions-apiserver v0.24.0 h1:JfgFqbA8gKJ/uDT++feAqk9jBIwNnL9YGdQvaI9DLtY= +k8s.io/apiextensions-apiserver v0.24.0/go.mod h1:iuVe4aEpe6827lvO6yWQVxiPSpPoSKVjkq+MIdg84cM= +k8s.io/apimachinery v0.24.0/go.mod h1:82Bi4sCzVBdpYjyI4jY6aHX+YCUchUIrZrXKedjd2UM= +k8s.io/apimachinery v0.24.1 h1:ShD4aDxTQKN5zNf8K1RQ2u98ELLdIW7jEnlO9uAMX/I= +k8s.io/apimachinery v0.24.1/go.mod h1:82Bi4sCzVBdpYjyI4jY6aHX+YCUchUIrZrXKedjd2UM= +k8s.io/apiserver v0.24.0/go.mod h1:WFx2yiOMawnogNToVvUYT9nn1jaIkMKj41ZYCVycsBA= +k8s.io/cli-runtime v0.24.0 h1:ot3Qf49T852uEyNApABO1UHHpFIckKK/NqpheZYN2gM= +k8s.io/cli-runtime v0.24.0/go.mod h1:9XxoZDsEkRFUThnwqNviqzljtT/LdHtNWvcNFrAXl0A= +k8s.io/client-go v0.24.0/go.mod h1:VFPQET+cAFpYxh6Bq6f4xyMY80G6jKKktU6G0m00VDw= +k8s.io/client-go v0.24.1 h1:w1hNdI9PFrzu3OlovVeTnf4oHDt+FJLd9Ndluvnb42E= +k8s.io/client-go v0.24.1/go.mod h1:f1kIDqcEYmwXS/vTbbhopMUbhKp2JhOeVTfxgaCIlF8= +k8s.io/code-generator v0.24.0/go.mod h1:dpVhs00hTuTdTY6jvVxvTFCk6gSMrtfRydbhZwHI15w= +k8s.io/component-base v0.24.0/go.mod h1:Dgazgon0i7KYUsS8krG8muGiMVtUZxG037l1MKyXgrA= +k8s.io/component-base v0.24.1 h1:APv6W/YmfOWZfo+XJ1mZwep/f7g7Tpwvdbo9CQLDuts= +k8s.io/component-base v0.24.1/go.mod h1:DW5vQGYVCog8WYpNob3PMmmsY8A3L9QZNg4j/dV3s38= +k8s.io/component-helpers v0.24.0/go.mod h1:Q2SlLm4h6g6lPTC9GMMfzdywfLSvJT2f1hOnnjaWD8c= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= +k8s.io/gengo v0.0.0-20211129171323-c02415ce4185/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= -k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= -k8s.io/klog/v2 v2.30.0/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= -k8s.io/klog/v2 v2.50.0 h1:2QWjlAHYTUqUM5XMSobX4mc//mXrf194+hiaZ4jy57Q= -k8s.io/klog/v2 v2.50.0/go.mod h1:N3kgBtsFxMb4nQ0eBDgbHEt/dtxBuTkSFQ+7K5OUoz4= -k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM= +k8s.io/klog/v2 v2.60.1 h1:VW25q3bZx9uE3vvdL6M8ezOX79vA2Aq1nEWLqNQclHc= +k8s.io/klog/v2 v2.60.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/kube-openapi v0.0.0-20210421082810-95288971da7e/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw= -k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65 h1:E3J9oCLlaobFUqsjG9DfKbP2BmgwBL2p7pn0A3dG9W4= -k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65/go.mod h1:sX9MT8g7NVZM5lVL/j8QyCCJe8YSMW30QvGZWaCIDIk= -k8s.io/kubectl v0.23.6 h1:ajzrqj88GqlH/gpscMCts+mKNeSJprpkWJEHO8CR2Ss= -k8s.io/kubectl v0.23.6/go.mod h1:mMtJhc2QtQiSfvIQoMEUIjGHtZuP4uxMy/ees6j6zx8= -k8s.io/kubernetes v1.13.0/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk= -k8s.io/metrics v0.23.6/go.mod h1:Fm9VzVMZ7KVEEeLStF2y3XogfcDwpGyI15o1xB6PbYk= -k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/kube-openapi v0.0.0-20220328201542-3ee0da9b0b42/go.mod h1:Z/45zLw8lUo4wdiUkI+v/ImEGAvu3WatcZl3lPMR4Rk= +k8s.io/kube-openapi v0.0.0-20220401212409-b28bf2818661 h1:nqYOUleKLC/0P1zbU29F5q6aoezM6MOAVz+iyfQbZ5M= +k8s.io/kube-openapi v0.0.0-20220401212409-b28bf2818661/go.mod h1:daOouuuwd9JXpv1L7Y34iV3yf6nxzipkKMWWlqlvK9M= +k8s.io/kubectl v0.24.0 h1:nA+WtMLVdXUs4wLogGd1mPTAesnLdBpCVgCmz3I7dXo= +k8s.io/kubectl v0.24.0/go.mod h1:pdXkmCyHiRTqjYfyUJiXtbVNURhv0/Q1TyRhy2d5ic0= +k8s.io/metrics v0.24.0/go.mod h1:jrLlFGdKl3X+szubOXPG0Lf2aVxuV3QJcbsgVRAM6fI= k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20211116205334-6203023598ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9 h1:HNSDgDCrr/6Ly3WEGKZftiE7IY19Vz2GdbOCyI4qqhc= k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.14/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= -sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.15/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.30/go.mod h1:fEO7lRTdivWO2qYVCVG7dEADOMo/MLDCVr8So2g88Uw= -sigs.k8s.io/cli-utils v0.29.4 h1:1bsZ5bE90Mbl6Jat4nmZULJCOkLQ9rwJVVrREgqtXT4= -sigs.k8s.io/cli-utils v0.29.4/go.mod h1:WDVRa5/eQBKntG++uyKdyT+xU7MLdCR4XsgseqL5uX4= +sigs.k8s.io/cli-utils v0.31.1 h1:F9WPmyF5NWdgTmzvLzeTWd1smHHi/yOWu14Ae70D++Y= +sigs.k8s.io/cli-utils v0.31.1/go.mod h1:g/zB9hJ5eUN7zIEBIxrO0CwhXU4YISJ+BkLJzvWwlEs= sigs.k8s.io/controller-runtime v0.11.2 h1:H5GTxQl0Mc9UjRJhORusqfJCIjBO8UtUxGggCwL1rLA= sigs.k8s.io/controller-runtime v0.11.2/go.mod h1:P6QCzrEjLaZGqHsfd+os7JQ+WFZhvB8MRFsn4dWF7O4= -sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6/go.mod h1:p4QtZmO4uMYipTQNzagwnNoseA6OxSUutVw05NhYDRs= sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2 h1:kDi4JBNAsJWfz1aEXhO8Jg87JJaPNLh5tIzYHgStQ9Y= sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2/go.mod h1:B+TnT182UBxE84DiCz4CVE26eOSDAeYCpfDnC2kdKMY= -sigs.k8s.io/kustomize/api v0.10.1/go.mod h1:2FigT1QN6xKdcnGS2Ppp1uIWrtWN28Ms8A3OZUZhwr8= -sigs.k8s.io/kustomize/api v0.11.4 h1:/0Mr3kfBBNcNPOW5Qwk/3eb8zkswCwnqQxxKtmrTkRo= sigs.k8s.io/kustomize/api v0.11.4/go.mod h1:k+8RsqYbgpkIrJ4p9jcdPqe8DprLxFUUO0yNOq8C+xI= -sigs.k8s.io/kustomize/cmd/config v0.10.2/go.mod h1:K2aW7nXJ0AaT+VA/eO0/dzFLxmpFcTzudmAgDwPY1HQ= -sigs.k8s.io/kustomize/kustomize/v4 v4.4.1/go.mod h1:qOKJMMz2mBP+vcS7vK+mNz4HBLjaQSWRY22EF6Tb7Io= -sigs.k8s.io/kustomize/kyaml v0.13.0/go.mod h1:FTJxEZ86ScK184NpGSAQcfEqee0nul8oLCK30D47m4E= -sigs.k8s.io/kustomize/kyaml v0.13.6 h1:eF+wsn4J7GOAXlvajv6OknSunxpcOBQQqsnPxObtkGs= +sigs.k8s.io/kustomize/api v0.11.5 h1:vLDp++YAX7iy2y2CVPJNy9pk9CY8XaUKgHkjbVtnWag= +sigs.k8s.io/kustomize/api v0.11.5/go.mod h1:2UDpxS6AonWXow2ZbySd4AjUxmdXLeTlvGBC46uSiq8= +sigs.k8s.io/kustomize/cmd/config v0.10.6/go.mod h1:/S4A4nUANUa4bZJ/Edt7ZQTyKOY9WCER0uBS1SW2Rco= +sigs.k8s.io/kustomize/kustomize/v4 v4.5.4/go.mod h1:Zo/Xc5FKD6sHl0lilbrieeGeZHVYCA4BzxeAaLI05Bg= sigs.k8s.io/kustomize/kyaml v0.13.6/go.mod h1:yHP031rn1QX1lr/Xd934Ri/xdVNG8BE2ECa78Ht/kEg= +sigs.k8s.io/kustomize/kyaml v0.13.7 h1:/EZ/nPaLUzeJKF/BuJ4QCuMVJWiEVoI8iftOHY3g3tk= +sigs.k8s.io/kustomize/kyaml v0.13.7/go.mod h1:6K+IUOuir3Y7nucPRAjw9yth04KSWBnP5pqUTGwj/qU= sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= -sigs.k8s.io/structured-merge-diff/v4 v4.0.3/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= sigs.k8s.io/structured-merge-diff/v4 v4.2.1 h1:bKCqE9GvQ5tiVHn5rfn1r+yao3aLQEaLzkkmAkf+A6Y= sigs.k8s.io/structured-merge-diff/v4 v4.2.1/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= -sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= diff --git a/pkg/manifestgen/sourcesecret/sourcesecret.go b/pkg/manifestgen/sourcesecret/sourcesecret.go index 91effffd..53806328 100644 --- a/pkg/manifestgen/sourcesecret/sourcesecret.go +++ b/pkg/manifestgen/sourcesecret/sourcesecret.go @@ -177,7 +177,7 @@ func scanHostKey(host string) ([]byte, error) { // host key scanning to work. host = fmt.Sprintf("%s:%d", host, defaultSSHPort) } - hostKey, err := ssh.ScanHostKey(host, 30*time.Second) + hostKey, err := ssh.ScanHostKey(host, 30*time.Second, []string{}, false) if err != nil { return nil, fmt.Errorf("SSH key scan for host %s failed, error: %w", host, err) } diff --git a/tests/azure/go.mod b/tests/azure/go.mod index 1bc19b0f..74fcef97 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -9,8 +9,8 @@ require ( github.com/fluxcd/image-reflector-controller/api v0.18.0 github.com/fluxcd/kustomize-controller/api v0.25.0 github.com/fluxcd/notification-controller/api v0.23.5 - github.com/fluxcd/pkg/apis/meta v0.13.0 - github.com/fluxcd/pkg/runtime v0.14.2 + github.com/fluxcd/pkg/apis/meta v0.14.1 + github.com/fluxcd/pkg/runtime v0.15.1 github.com/fluxcd/source-controller/api v0.24.4 github.com/hashicorp/terraform-exec v0.15.0 github.com/libgit2/git2go/v31 v31.7.9 @@ -18,9 +18,9 @@ require ( github.com/stretchr/testify v1.7.1 github.com/whilp/git-urls v1.0.0 go.uber.org/multierr v1.8.0 - k8s.io/api v0.23.6 - k8s.io/apimachinery v0.23.6 - k8s.io/client-go v0.23.6 + k8s.io/api v0.24.0 + k8s.io/apimachinery v0.24.0 + k8s.io/client-go v0.24.0 sigs.k8s.io/controller-runtime v0.11.2 ) @@ -38,12 +38,15 @@ require ( github.com/Azure/go-autorest/autorest/validation v0.3.1 // indirect github.com/Azure/go-autorest/logger v0.2.1 // indirect github.com/Azure/go-autorest/tracing v0.6.0 // indirect + github.com/PuerkitoBio/purell v1.1.1 // indirect + github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect github.com/aws/aws-sdk-go v1.15.78 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/devigned/tab v0.1.1 // indirect + github.com/emicklei/go-restful v2.9.5+incompatible // indirect github.com/evanphx/json-patch v4.12.0+incompatible // indirect github.com/fluxcd/pkg/apis/acl v0.0.3 // indirect github.com/fluxcd/pkg/apis/kustomize v0.3.3 // indirect @@ -51,14 +54,17 @@ require ( github.com/fsnotify/fsnotify v1.5.1 // indirect github.com/go-logr/logr v1.2.2 // indirect github.com/go-logr/zapr v1.2.0 // indirect + github.com/go-openapi/jsonpointer v0.19.5 // indirect + github.com/go-openapi/jsonreference v0.19.5 // indirect + github.com/go-openapi/swag v0.19.14 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.2 // indirect + github.com/google/gnostic v0.5.7-v3refs // indirect github.com/google/go-cmp v0.5.7 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/uuid v1.2.0 // indirect github.com/googleapis/gax-go/v2 v2.0.5 // indirect - github.com/googleapis/gnostic v0.5.5 // indirect github.com/hashicorp/go-checkpoint v0.5.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/hashicorp/go-getter v1.5.3 // indirect @@ -69,16 +75,19 @@ require ( github.com/hashicorp/terraform-json v0.13.0 // indirect github.com/imdario/mergo v0.3.12 // indirect github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8 // indirect + github.com/josharian/intern v1.0.0 // indirect github.com/jpillora/backoff v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/jstemmer/go-junit-report v0.9.1 // indirect github.com/klauspost/compress v1.11.2 // indirect + github.com/mailru/easyjson v0.7.6 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/go-testing-interface v1.0.0 // indirect github.com/mitchellh/mapstructure v1.4.1 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_golang v1.12.1 // indirect @@ -91,15 +100,15 @@ require ( go.opencensus.io v0.23.0 // indirect go.uber.org/atomic v1.7.0 // indirect go.uber.org/zap v1.21.0 // indirect - golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 // indirect + golang.org/x/crypto v0.0.0-20220214200702-86341886e292 // indirect golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 // indirect golang.org/x/mod v0.4.2 // indirect - golang.org/x/net v0.0.0-20211216030914-fe4d6282115f // indirect + golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd // indirect golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 // indirect - golang.org/x/sys v0.0.0-20220114195835-da31bd327af9 // indirect - golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b // indirect + golang.org/x/sys v0.0.0-20220209214540-3681064d5158 // indirect + golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect golang.org/x/text v0.3.7 // indirect - golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac // indirect + golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 // indirect golang.org/x/tools v0.1.6-0.20210820212750-d4cc65f0b2ff // indirect golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect @@ -113,8 +122,8 @@ require ( gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect k8s.io/apiextensions-apiserver v0.23.6 // indirect k8s.io/component-base v0.23.6 // indirect - k8s.io/klog/v2 v2.50.0 // indirect - k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65 // indirect + k8s.io/klog/v2 v2.60.1 // indirect + k8s.io/kube-openapi v0.0.0-20220328201542-3ee0da9b0b42 // indirect k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9 // indirect sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2 // indirect sigs.k8s.io/structured-merge-diff/v4 v4.2.1 // indirect diff --git a/tests/azure/go.sum b/tests/azure/go.sum index a319e93b..e1448230 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -99,7 +99,9 @@ github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMo github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7 h1:YoJbenK9C67SkzkDfmQuVln04ygHj3vjZfd9FL+GmQQ= github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= +github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/acomagu/bufpipe v1.0.3 h1:fxAGrHZTgQ9w5QqVItgzwj235/uYZYgbXitB+dLupOk= github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= @@ -176,6 +178,7 @@ github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3 github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= 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 h1:spTtZBk5DYEvbxMVutUuTyh1Ao2r4iyvLdACqsl/Ljk= github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg= github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= @@ -206,10 +209,10 @@ github.com/fluxcd/pkg/apis/acl v0.0.3 h1:Lw0ZHdpnO4G7Zy9KjrzwwBmDZQuy4qEjaU/RvA6 github.com/fluxcd/pkg/apis/acl v0.0.3/go.mod h1:XPts6lRJ9C9fIF9xVWofmQwftvhY25n1ps7W9xw0XLU= github.com/fluxcd/pkg/apis/kustomize v0.3.3 h1:bPN29SdVzWl0yhgivuf/83IAe2R6vUuDVcB3LzyVU8E= github.com/fluxcd/pkg/apis/kustomize v0.3.3/go.mod h1:5HTOFZfQFVMMqR2rvuxpbZhpb+sQpcTT6RCQZOhjFzA= -github.com/fluxcd/pkg/apis/meta v0.13.0 h1:0QuNKEExSjk+Rv0I6a85p2H3xOlWhdxZRsh10waEL/c= -github.com/fluxcd/pkg/apis/meta v0.13.0/go.mod h1:Z26X5uTU5LxAyWETGueRQY7TvdPaGfKU7Wye9bdUlho= -github.com/fluxcd/pkg/runtime v0.14.2 h1:ktyUjcX4pHoC8DRoBmhEP6eMHbmR6+/MYoARe4YulZY= -github.com/fluxcd/pkg/runtime v0.14.2/go.mod h1:NZr3PRK7xX2M1bl0LdtugvQyWkOmu2NcW3NrZH6U0is= +github.com/fluxcd/pkg/apis/meta v0.14.1 h1:lPDs9yV67DnwalHPb13bbnDkAatALfUiAMRHjUm4UBw= +github.com/fluxcd/pkg/apis/meta v0.14.1/go.mod h1:1uJkTJGSZWrZxL5PFpx1IxGLrFmT1Cd0C2fFWrbv77I= +github.com/fluxcd/pkg/runtime v0.15.1 h1:PKooYqlZM+KLhnNz10sQnBH0AHllS40PIDHtiRH/BGU= +github.com/fluxcd/pkg/runtime v0.15.1/go.mod h1:TPAoOEgUFG60FXBA4ID41uaPldxuXCEI4jt3qfd5i5Q= github.com/fluxcd/source-controller/api v0.24.4 h1:m54sS1rJlgJf5j9qDRgKLhbPJAnJ9dY+VrstPKj0aQo= github.com/fluxcd/source-controller/api v0.24.4/go.mod h1:b0MmMPGE8gcpgSyGXe5m7see77tBW26eZrvGkkPstUs= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= @@ -251,10 +254,13 @@ github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbV github.com/go-logr/zapr v1.2.0 h1:n4JnPI1T3Qq1SFEi/F8rwLrZERp2bso19PJZDB9dayk= github.com/go-logr/zapr v1.2.0/go.mod h1:Qa4Bsj2Vb+FAVeAKsLD8RLQ+YRJB8YDmOAKxaBQf7Ro= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= +github.com/go-openapi/jsonreference v0.19.5 h1:1WJP/wi4OjB4iV8KVbH73rQaoialJrqv8gitZLxGLtM= github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-openapi/swag v0.19.14 h1:gm3vOOXfiuw5i9p5N9xJvfjvuofpyvLA9Wr6QfK5Fng= github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= @@ -303,6 +309,8 @@ github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= github.com/google/cel-go v0.9.0/go.mod h1:U7ayypeSkw23szu4GaQTPJGx66c20mx8JklMSxrmI1w= github.com/google/cel-spec v0.6.0/go.mod h1:Nwjgxy5CbjlPrtCWjeDjUyKMl8w41YBYGjsyDdqk0xA= +github.com/google/gnostic v0.5.7-v3refs h1:FhTMOKj2VhjpouxvWJAV1TL304uMlb9zcDqkl6cEI54= +github.com/google/gnostic v0.5.7-v3refs/go.mod h1:73MKFl6jIHelAJNaBGFzt3SPtZULs9dYrGFt8OiIsHQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -348,7 +356,6 @@ github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+ github.com/googleapis/gax-go/v2 v2.0.5 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+Tv3SM= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2cUuW7uA/OeU= -github.com/googleapis/gnostic v0.5.5 h1:9fHAtK0uDfpveeqqo1hkEZJcFvYXAiCN3UutL8F9xHw= github.com/googleapis/gnostic v0.5.5/go.mod h1:7+EbHbldMins07ALC74bsA81Ovc97DwqyJO1AENw9kA= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= @@ -420,6 +427,7 @@ github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= +github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/jpillora/backoff v0.0.0-20180909062703-3050d21c67d7/go.mod h1:2iMrUgbbvHEiQClaW2NsSzMyGHqN+rDFqY705q49KG0= github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA= @@ -462,6 +470,7 @@ github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czP github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.7.6 h1:8yTIVnZgCoiM1TgqoeTl+LfU5Jg6/xL3QhGQnimLYnA= github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= @@ -501,6 +510,7 @@ github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3Rllmb github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= @@ -764,8 +774,8 @@ golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20210825183410-e898025ed96a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211209124913-491a49abca63/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211216030914-fe4d6282115f h1:hEYJvxw1lSnWIl8X9ofsYMklzaDs90JI2az5YMd4fPM= -golang.org/x/net v0.0.0-20211216030914-fe4d6282115f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd h1:O7DYs+zxREGLKzKoMQrtrEacpb0ZVXA5rIwylE2Xchk= +golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= 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= @@ -860,11 +870,14 @@ golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220114195835-da31bd327af9 h1:XfKQ4OlFl8okEOr5UvAqFRVj8pY/4yfcXrddB8qAbU0= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220209214540-3681064d5158 h1:rm+CHSpPEEW2IsXUib1ThaHIjuBVZjxNgSKmBLFfD4c= +golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b h1:9zKuko04nR4gjZ4+DNjHqRlAJqbJETHwiNKDqTfOjfE= golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -879,8 +892,9 @@ golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac h1:7zkz7BUtwNFFqcowJ+RIgu2MaV/MapERkDIy+mwPyjs= golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 h1:vVKdlvoWBphwdxWKrFZEuM0kGgGLxUOYcY4U/2Vjg44= +golang.org/x/time v0.0.0-20220210224613-90d013bbcef8/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -1106,15 +1120,18 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -k8s.io/api v0.23.6 h1:yOK34wbYECH4RsJbQ9sfkFK3O7f/DUHRlzFehkqZyVw= k8s.io/api v0.23.6/go.mod h1:1kFaYxGCFHYp3qd6a85DAj/yW8aVD6XLZMqJclkoi9g= +k8s.io/api v0.24.0 h1:J0hann2hfxWr1hinZIDefw7Q96wmCBx6SSB8IY0MdDg= +k8s.io/api v0.24.0/go.mod h1:5Jl90IUrJHUJYEMANRURMiVvJ0g7Ax7r3R1bqO8zx8I= k8s.io/apiextensions-apiserver v0.23.6 h1:v58cQ6Z0/GK1IXYr+oW0fnYl52o9LTY0WgoWvI8uv5Q= k8s.io/apiextensions-apiserver v0.23.6/go.mod h1:YVh17Mphv183THQJA5spNFp9XfoidFyL3WoDgZxQIZU= -k8s.io/apimachinery v0.23.6 h1:RH1UweWJkWNTlFx0D8uxOpaU1tjIOvVVWV/bu5b3/NQ= k8s.io/apimachinery v0.23.6/go.mod h1:BEuFMMBaIbcOqVIJqNZJXGFTP4W6AycEpb5+m/97hrM= +k8s.io/apimachinery v0.24.0 h1:ydFCyC/DjCvFCHK5OPMKBlxayQytB8pxy8YQInd5UyQ= +k8s.io/apimachinery v0.24.0/go.mod h1:82Bi4sCzVBdpYjyI4jY6aHX+YCUchUIrZrXKedjd2UM= k8s.io/apiserver v0.23.6/go.mod h1:5PU32F82tfErXPmf7FXhd/UcuLfh97tGepjKUgJ2atg= -k8s.io/client-go v0.23.6 h1:7h4SctDVQAQbkHQnR4Kzi7EyUyvla5G1pFWf4+Od7hQ= k8s.io/client-go v0.23.6/go.mod h1:Umt5icFOMLV/+qbtZ3PR0D+JA6lvvb3syzodv4irpK4= +k8s.io/client-go v0.24.0 h1:lbE4aB1gTHvYFSwm6eD3OF14NhFDKCejlnsGYlSJe5U= +k8s.io/client-go v0.24.0/go.mod h1:VFPQET+cAFpYxh6Bq6f4xyMY80G6jKKktU6G0m00VDw= k8s.io/code-generator v0.23.6/go.mod h1:S0Q1JVA+kSzTI1oUvbKAxZY/DYbA/ZUb4Uknog12ETk= k8s.io/component-base v0.23.6 h1:8dhVZ4VrRcNdV2EGjl8tj8YOHwX6ysgCGMJ2Oyy0NW8= k8s.io/component-base v0.23.6/go.mod h1:FGMPeMrjYu0UZBSAFcfloVDplj9IvU+uRMTOdE23Fj0= @@ -1122,10 +1139,11 @@ k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAE k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/klog/v2 v2.30.0/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= -k8s.io/klog/v2 v2.50.0 h1:2QWjlAHYTUqUM5XMSobX4mc//mXrf194+hiaZ4jy57Q= -k8s.io/klog/v2 v2.50.0/go.mod h1:N3kgBtsFxMb4nQ0eBDgbHEt/dtxBuTkSFQ+7K5OUoz4= -k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65 h1:E3J9oCLlaobFUqsjG9DfKbP2BmgwBL2p7pn0A3dG9W4= +k8s.io/klog/v2 v2.60.1 h1:VW25q3bZx9uE3vvdL6M8ezOX79vA2Aq1nEWLqNQclHc= +k8s.io/klog/v2 v2.60.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65/go.mod h1:sX9MT8g7NVZM5lVL/j8QyCCJe8YSMW30QvGZWaCIDIk= +k8s.io/kube-openapi v0.0.0-20220328201542-3ee0da9b0b42 h1:Gii5eqf+GmIEwGNKQYQClCayuJCe2/4fZUvF7VG99sU= +k8s.io/kube-openapi v0.0.0-20220328201542-3ee0da9b0b42/go.mod h1:Z/45zLw8lUo4wdiUkI+v/ImEGAvu3WatcZl3lPMR4Rk= k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20211116205334-6203023598ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9 h1:HNSDgDCrr/6Ly3WEGKZftiE7IY19Vz2GdbOCyI4qqhc= From 0b9e3d24efd76bd4879a9d4bdbfaab5947539e49 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Fri, 27 May 2022 13:35:13 +0300 Subject: [PATCH 114/818] Update GitHub actions Signed-off-by: Stefan Prodan --- .github/workflows/bootstrap.yaml | 6 +++--- .github/workflows/e2e-arm64.yaml | 4 ++-- .github/workflows/e2e-azure.yaml | 4 ++-- .github/workflows/e2e.yaml | 6 +++--- .github/workflows/release.yaml | 14 +++++++------- .github/workflows/scan.yaml | 18 +++++++++++------- .github/workflows/update.yaml | 4 ++-- 7 files changed, 30 insertions(+), 26 deletions(-) diff --git a/.github/workflows/bootstrap.yaml b/.github/workflows/bootstrap.yaml index 79c05511..f1af6800 100644 --- a/.github/workflows/bootstrap.yaml +++ b/.github/workflows/bootstrap.yaml @@ -12,16 +12,16 @@ jobs: if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Restore Go cache - uses: actions/cache@v1 + uses: actions/cache@v3 with: path: ~/go/pkg/mod key: ${{ runner.os }}-go1.18-${{ hashFiles('**/go.sum') }} restore-keys: | ${{ runner.os }}-go1.18- - name: Setup Go - uses: actions/setup-go@v2 + uses: actions/setup-go@v3 with: go-version: 1.18.x - name: Setup Kubernetes diff --git a/.github/workflows/e2e-arm64.yaml b/.github/workflows/e2e-arm64.yaml index 38460402..62a886ac 100644 --- a/.github/workflows/e2e-arm64.yaml +++ b/.github/workflows/e2e-arm64.yaml @@ -12,9 +12,9 @@ jobs: runs-on: [self-hosted, Linux, ARM64, equinix] steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Setup Go - uses: actions/setup-go@v2 + uses: actions/setup-go@v3 with: go-version: 1.18.x - name: Prepare diff --git a/.github/workflows/e2e-azure.yaml b/.github/workflows/e2e-azure.yaml index 0d5c0081..6b02880b 100644 --- a/.github/workflows/e2e-azure.yaml +++ b/.github/workflows/e2e-azure.yaml @@ -12,9 +12,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Restore Go cache - uses: actions/cache@v1 + uses: actions/cache@v3 with: path: ~/go/pkg/mod key: ${{ runner.os }}-go1.18-${{ hashFiles('**/go.sum') }} diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index 1a058668..14c38578 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -11,16 +11,16 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Restore Go cache - uses: actions/cache@v1 + uses: actions/cache@v3 with: path: ~/go/pkg/mod key: ${{ runner.os }}-go1.18-${{ hashFiles('**/go.sum') }} restore-keys: | ${{ runner.os }}-go1.18- - name: Setup Go - uses: actions/setup-go@v2 + uses: actions/setup-go@v3 with: go-version: 1.18.x - name: Setup Kubernetes diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 65a7d260..0d95facd 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -14,18 +14,18 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Unshallow run: git fetch --prune --unshallow - name: Setup Go - uses: actions/setup-go@v2 + uses: actions/setup-go@v3 with: go-version: 1.18.x - name: Setup QEMU - uses: docker/setup-qemu-action@v1 + uses: docker/setup-qemu-action@v2 - name: Setup Docker Buildx id: buildx - uses: docker/setup-buildx-action@v1 + uses: docker/setup-buildx-action@v2 - name: Setup Syft uses: anchore/sbom-action/download-syft@v0 - name: Setup Cosign @@ -33,13 +33,13 @@ jobs: - name: Setup Kustomize uses: fluxcd/pkg//actions/kustomize@main - name: Login to GitHub Container Registry - uses: docker/login-action@v1 + uses: docker/login-action@v2 with: registry: ghcr.io username: fluxcdbot password: ${{ secrets.GHCR_TOKEN }} - name: Login to Docker Hub - uses: docker/login-action@v1 + uses: docker/login-action@v2 with: username: fluxcdbot password: ${{ secrets.DOCKER_FLUXCD_PASSWORD }} @@ -73,7 +73,7 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Run GoReleaser - uses: goreleaser/goreleaser-action@v1 + uses: goreleaser/goreleaser-action@v3 with: version: latest args: release --release-notes=output/notes.md --skip-validate diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index 9e1cc45b..682c4e1b 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -1,4 +1,4 @@ -name: Scan +name: scan on: push: @@ -8,12 +8,16 @@ on: schedule: - cron: '18 10 * * 3' +permissions: + contents: read # for actions/checkout to fetch code + security-events: write # for codeQL to write security events + jobs: fossa: name: FOSSA runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Run FOSSA scan and upload build data uses: fossa-contrib/fossa-action@v1 with: @@ -26,7 +30,7 @@ jobs: runs-on: ubuntu-latest if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Setup Kustomize uses: fluxcd/pkg//actions/kustomize@main - name: Build manifests @@ -49,12 +53,12 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout repository - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Initialize CodeQL - uses: github/codeql-action/init@v1 + uses: github/codeql-action/init@v2 with: languages: go - name: Autobuild - uses: github/codeql-action/autobuild@v1 + uses: github/codeql-action/autobuild@v2 - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v1 + uses: github/codeql-action/analyze@v2 diff --git a/.github/workflows/update.yaml b/.github/workflows/update.yaml index ab5732e6..b557ffc3 100644 --- a/.github/workflows/update.yaml +++ b/.github/workflows/update.yaml @@ -12,9 +12,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out code - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Setup Go - uses: actions/setup-go@v2 + uses: actions/setup-go@v3 with: go-version: 1.18.x - name: Update component versions From 95f896e92cade2dd859922270cd2b5e7ef8df845 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Fri, 27 May 2022 14:24:25 +0300 Subject: [PATCH 115/818] Update fluxcd/pkg/ssh to v0.4.1 Signed-off-by: Stefan Prodan --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 680c5c1e..0e8d8303 100644 --- a/go.mod +++ b/go.mod @@ -16,7 +16,7 @@ require ( github.com/fluxcd/pkg/kustomize v0.5.1 github.com/fluxcd/pkg/runtime v0.15.1 github.com/fluxcd/pkg/ssa v0.16.1 - github.com/fluxcd/pkg/ssh v0.4.0 + github.com/fluxcd/pkg/ssh v0.4.1 github.com/fluxcd/pkg/untar v0.1.0 github.com/fluxcd/pkg/version v0.1.0 github.com/fluxcd/source-controller/api v0.24.4 diff --git a/go.sum b/go.sum index 32e5bc11..bc453a3f 100644 --- a/go.sum +++ b/go.sum @@ -213,8 +213,8 @@ github.com/fluxcd/pkg/runtime v0.15.1 h1:PKooYqlZM+KLhnNz10sQnBH0AHllS40PIDHtiRH github.com/fluxcd/pkg/runtime v0.15.1/go.mod h1:TPAoOEgUFG60FXBA4ID41uaPldxuXCEI4jt3qfd5i5Q= github.com/fluxcd/pkg/ssa v0.16.1 h1:hWXMtDhiAPRPHpHiQ5NzVjqIDhOfyzWmc2zA49Wxw7E= github.com/fluxcd/pkg/ssa v0.16.1/go.mod h1:rLqpc2CDtyZhRIMKHDRJoMHXj0MgQBpg5134zk+ARHM= -github.com/fluxcd/pkg/ssh v0.4.0 h1:2HY88irZ5BCSMlzZExR6cnhRkjxCDsK/lTHHQqCJDJQ= -github.com/fluxcd/pkg/ssh v0.4.0/go.mod h1:KGgOUOy1uI6RC6+qxIBLvP1AeOOs/nLB25Ca6TZMIXE= +github.com/fluxcd/pkg/ssh v0.4.1 h1:O5FCjb5NIZ9PeRjdF2iL9jaPNM+RL+IjrMBZPkqF9W4= +github.com/fluxcd/pkg/ssh v0.4.1/go.mod h1:KGgOUOy1uI6RC6+qxIBLvP1AeOOs/nLB25Ca6TZMIXE= github.com/fluxcd/pkg/untar v0.1.0 h1:k97V/xV5hFrAkIkVPuv5AVhyxh1ZzzAKba/lbDfGo6o= github.com/fluxcd/pkg/untar v0.1.0/go.mod h1:aGswNyzB1mlz/T/kpOS58mITBMxMKc9tlJBH037A2HY= github.com/fluxcd/pkg/version v0.1.0 h1:v+SmCanmCB5Tj2Cx9TXlj+kNRfPGbAvirkeqsp7ZEAQ= From 7f5f80286e249d501c981153e41ddd4309107a76 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Fri, 27 May 2022 17:17:02 +0300 Subject: [PATCH 116/818] Update go-git-providers to v0.6.0 Signed-off-by: Stefan Prodan --- go.mod | 14 ++++++------- go.sum | 30 +++++++++++++-------------- tests/azure/go.mod | 23 ++++++++++++--------- tests/azure/go.sum | 51 ++++++++++++++++++++++++++++------------------ 4 files changed, 66 insertions(+), 52 deletions(-) diff --git a/go.mod b/go.mod index 0e8d8303..891c3a17 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,7 @@ require ( github.com/Masterminds/semver/v3 v3.1.1 github.com/ProtonMail/go-crypto v0.0.0-20220517143526-88bb52951d5b github.com/cyphar/filepath-securejoin v0.2.3 - github.com/fluxcd/go-git-providers v0.5.4 + github.com/fluxcd/go-git-providers v0.6.0 github.com/fluxcd/helm-controller/api v0.21.0 github.com/fluxcd/image-automation-controller/api v0.22.1 github.com/fluxcd/image-reflector-controller/api v0.18.0 @@ -14,7 +14,7 @@ require ( github.com/fluxcd/notification-controller/api v0.23.5 github.com/fluxcd/pkg/apis/meta v0.14.1 github.com/fluxcd/pkg/kustomize v0.5.1 - github.com/fluxcd/pkg/runtime v0.15.1 + github.com/fluxcd/pkg/runtime v0.16.1 github.com/fluxcd/pkg/ssa v0.16.1 github.com/fluxcd/pkg/ssh v0.4.1 github.com/fluxcd/pkg/untar v0.1.0 @@ -99,7 +99,7 @@ require ( github.com/gonvenience/wrap v1.1.1 // indirect github.com/google/btree v1.0.1 // indirect github.com/google/gnostic v0.5.7-v3refs // indirect - github.com/google/go-github/v41 v41.0.0 // indirect + github.com/google/go-github/v42 v42.0.0 // indirect github.com/google/go-querystring v1.1.0 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect @@ -144,16 +144,16 @@ require ( github.com/sergi/go-diff v1.2.0 // indirect github.com/texttheater/golang-levenshtein v1.0.1 // indirect github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74 // indirect - github.com/xanzy/go-gitlab v0.54.3 // indirect + github.com/xanzy/go-gitlab v0.58.0 // indirect github.com/xanzy/ssh-agent v0.3.0 // indirect github.com/xlab/treeprint v0.0.0-20181112141820-a009c3971eca // indirect go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 // indirect - golang.org/x/net v0.0.0-20220516155154-20f960328961 // indirect - golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 // indirect + golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2 // indirect + golang.org/x/oauth2 v0.0.0-20220524215830-622c5d57e401 // indirect golang.org/x/sync v0.0.0-20220513210516-0976fa681c29 // indirect golang.org/x/sys v0.0.0-20220513210249-45d2b4557a2a // indirect golang.org/x/text v0.3.7 // indirect - golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 // indirect + golang.org/x/time v0.0.0-20220411224347-583f2d630306 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/protobuf v1.28.0 // indirect diff --git a/go.sum b/go.sum index bc453a3f..3ed8efc1 100644 --- a/go.sum +++ b/go.sum @@ -189,8 +189,8 @@ github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5Kwzbycv github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/fluxcd/go-git-providers v0.5.4 h1:MnByjsmXa8rMt2hTmhmtbocq7YIsTlwZKrj9lAsob4Q= -github.com/fluxcd/go-git-providers v0.5.4/go.mod h1:4jTHTmSx3rFGnG78KUVgFYeG6vWFnKwUSr2mi31tvp8= +github.com/fluxcd/go-git-providers v0.6.0 h1:XJc3MTYFpuahBSoKTVxmH9OBPCeIyvYoQkTjTqa3fH4= +github.com/fluxcd/go-git-providers v0.6.0/go.mod h1:UMFHnMCIO9CBpEln7ZsArEWyXSNxTpm76fyQxUmClrc= github.com/fluxcd/helm-controller/api v0.21.0 h1:MWvVzz6u9jR1aE7j1YaSEjBehw0zMndkODnjAE0/1nQ= github.com/fluxcd/helm-controller/api v0.21.0/go.mod h1:cgP5ZR46HIhC8phUfx4Z60He9zNuIHbH3r8YEVl5ip8= github.com/fluxcd/image-automation-controller/api v0.22.1 h1:7OtqjJU2s4GF0d6z35G+Ss4Ugvuo/vv8sQsxEX9embA= @@ -209,8 +209,8 @@ github.com/fluxcd/pkg/apis/meta v0.14.1 h1:lPDs9yV67DnwalHPb13bbnDkAatALfUiAMRHj github.com/fluxcd/pkg/apis/meta v0.14.1/go.mod h1:1uJkTJGSZWrZxL5PFpx1IxGLrFmT1Cd0C2fFWrbv77I= github.com/fluxcd/pkg/kustomize v0.5.1 h1:151Ih34ltxN2z1e2mA5AvQONyE6phc4es57oVK3+plU= github.com/fluxcd/pkg/kustomize v0.5.1/go.mod h1:58MFITy24bIbGI6cC3JkV/YpFQj648sVvgs0K1kraJw= -github.com/fluxcd/pkg/runtime v0.15.1 h1:PKooYqlZM+KLhnNz10sQnBH0AHllS40PIDHtiRH/BGU= -github.com/fluxcd/pkg/runtime v0.15.1/go.mod h1:TPAoOEgUFG60FXBA4ID41uaPldxuXCEI4jt3qfd5i5Q= +github.com/fluxcd/pkg/runtime v0.16.1 h1:WU1vNZz4TAzmATQ/tl2zB/FX6GIUTgYeBn/G5RuTA2c= +github.com/fluxcd/pkg/runtime v0.16.1/go.mod h1:cgVJkOXCg9OmrIUGklf/0UtV28MNzkuoBJhaEQICT6E= github.com/fluxcd/pkg/ssa v0.16.1 h1:hWXMtDhiAPRPHpHiQ5NzVjqIDhOfyzWmc2zA49Wxw7E= github.com/fluxcd/pkg/ssa v0.16.1/go.mod h1:rLqpc2CDtyZhRIMKHDRJoMHXj0MgQBpg5134zk+ARHM= github.com/fluxcd/pkg/ssh v0.4.1 h1:O5FCjb5NIZ9PeRjdF2iL9jaPNM+RL+IjrMBZPkqF9W4= @@ -261,7 +261,7 @@ github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbV github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/zapr v1.2.0/go.mod h1:Qa4Bsj2Vb+FAVeAKsLD8RLQ+YRJB8YDmOAKxaBQf7Ro= -github.com/go-logr/zapr v1.2.2 h1:5YNlIL6oZLydaV4dOFjL8YpgXF/tPeTbnpatnu3cq6o= +github.com/go-logr/zapr v1.2.3 h1:a9vnzlIBPQBBkeaR9IuMUfmVOrQlkoC4YfPoFkX3T7A= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= @@ -351,8 +351,8 @@ github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-containerregistry v0.9.0 h1:5Ths7RjxyFV0huKChQTgY6fLzvHhZMpLTFNja8U0/0w= github.com/google/go-containerregistry v0.9.0/go.mod h1:9eq4BnSufyT1kHNffX+vSXVonaJ7yaIOulrKZejMxnQ= -github.com/google/go-github/v41 v41.0.0 h1:HseJrM2JFf2vfiZJ8anY2hqBjdfY1Vlj/K27ueww4gg= -github.com/google/go-github/v41 v41.0.0/go.mod h1:XgmCA5H323A9rtgExdTcnDkcqp6S30AVACCBDOonIxg= +github.com/google/go-github/v42 v42.0.0 h1:YNT0FwjPrEysRkLIiKuEfSvBPCGKphW5aS5PxwaoLec= +github.com/google/go-github/v42 v42.0.0/go.mod h1:jgg/jvyI0YlDOM1/ps6XYh04HNQ3vKf0CVko62/EhRg= github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= @@ -674,8 +674,8 @@ github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1 github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74 h1:JwtAtbp7r/7QSyGz8mKUbYJBg2+6Cd7OjM8o/GNOcVo= github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74/go.mod h1:RmMWU37GKR2s6pgrIEB4ixgpVCt/cf7dnJv3fuH1J1c= -github.com/xanzy/go-gitlab v0.54.3 h1:fPfZ3Jcu5dPc3xyIYtAALZsEgoyKNFNuULD+TdJ7Zvk= -github.com/xanzy/go-gitlab v0.54.3/go.mod h1:F0QEXwmqiBUxCgJm8fE9S+1veX4XC9Z4cfaAbqwk4YM= +github.com/xanzy/go-gitlab v0.58.0 h1:Entnl8GrVDlc1jd1BlOWhNR0QVQgiO3WDom5DJbT+1s= +github.com/xanzy/go-gitlab v0.58.0/go.mod h1:F0QEXwmqiBUxCgJm8fE9S+1veX4XC9Z4cfaAbqwk4YM= github.com/xanzy/ssh-agent v0.3.0 h1:wUMzuKtKilRgBAD1sUb8gOwwRr2FGoBVumcjoOACClI= github.com/xanzy/ssh-agent v0.3.0/go.mod h1:3s9xbODqPuuhK9JV1R321M/FlMZSBvE5aY6eAcqrDh0= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= @@ -744,7 +744,6 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e h1:T8NU3HyQ8ClP4SEE+KbFlg6n0NhuTsN4MyznaarGsZM= @@ -835,8 +834,8 @@ golang.org/x/net v0.0.0-20210825183410-e898025ed96a/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220516155154-20f960328961 h1:+W/iTMPG0EL7aW+/atntZwZrvSRIj3m3yX414dSULUU= -golang.org/x/net v0.0.0-20220516155154-20f960328961/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2 h1:NWy5+hlRbC7HK+PmcXVUmW1IMyFce7to56IUvhUFm7Y= +golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= 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= @@ -854,8 +853,8 @@ golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 h1:OSnWWcOd/CtWQC2cYSBgbTSJv3ciqd8r54ySIW2y3RE= -golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220524215830-622c5d57e401 h1:zwrSfklXn0gxyLRX/aR+q6cgHbV/ItVyzbPlbA+dkAw= +golang.org/x/oauth2 v0.0.0-20220524215830-622c5d57e401/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= 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= @@ -967,8 +966,9 @@ golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 h1:vVKdlvoWBphwdxWKrFZEuM0kGgGLxUOYcY4U/2Vjg44= golang.org/x/time v0.0.0-20220210224613-90d013bbcef8/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20220411224347-583f2d630306 h1:+gHMid33q6pen7kv9xvT+JRinntgeXO2AeZVd0AWD3w= +golang.org/x/time v0.0.0-20220411224347-583f2d630306/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/tests/azure/go.mod b/tests/azure/go.mod index 74fcef97..c4968c6d 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -10,7 +10,7 @@ require ( github.com/fluxcd/kustomize-controller/api v0.25.0 github.com/fluxcd/notification-controller/api v0.23.5 github.com/fluxcd/pkg/apis/meta v0.14.1 - github.com/fluxcd/pkg/runtime v0.15.1 + github.com/fluxcd/pkg/runtime v0.16.1 github.com/fluxcd/source-controller/api v0.24.4 github.com/hashicorp/terraform-exec v0.15.0 github.com/libgit2/git2go/v31 v31.7.9 @@ -24,6 +24,9 @@ require ( sigs.k8s.io/controller-runtime v0.11.2 ) +// Fix CVE-2022-28948 +replace gopkg.in/yaml.v3 => gopkg.in/yaml.v3 v3.0.0 + require ( cloud.google.com/go v0.81.0 // indirect cloud.google.com/go/storage v1.10.0 // indirect @@ -52,7 +55,7 @@ require ( github.com/fluxcd/pkg/apis/kustomize v0.3.3 // indirect github.com/form3tech-oss/jwt-go v3.2.3+incompatible // indirect github.com/fsnotify/fsnotify v1.5.1 // indirect - github.com/go-logr/logr v1.2.2 // indirect + github.com/go-logr/logr v1.2.3 // indirect github.com/go-logr/zapr v1.2.0 // indirect github.com/go-openapi/jsonpointer v0.19.5 // indirect github.com/go-openapi/jsonreference v0.19.5 // indirect @@ -61,14 +64,14 @@ require ( github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.2 // indirect github.com/google/gnostic v0.5.7-v3refs // indirect - github.com/google/go-cmp v0.5.7 // indirect + github.com/google/go-cmp v0.5.8 // indirect github.com/google/gofuzz v1.2.0 // indirect - github.com/google/uuid v1.2.0 // indirect + github.com/google/uuid v1.3.0 // indirect github.com/googleapis/gax-go/v2 v2.0.5 // indirect github.com/hashicorp/go-checkpoint v0.5.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/hashicorp/go-getter v1.5.3 // indirect - github.com/hashicorp/go-retryablehttp v0.7.0 // indirect + github.com/hashicorp/go-retryablehttp v0.7.1 // indirect github.com/hashicorp/go-safetemp v1.0.0 // indirect github.com/hashicorp/go-uuid v1.0.1 // indirect github.com/hashicorp/go-version v1.4.0 // indirect @@ -102,26 +105,26 @@ require ( go.uber.org/zap v1.21.0 // indirect golang.org/x/crypto v0.0.0-20220214200702-86341886e292 // indirect golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 // indirect - golang.org/x/mod v0.4.2 // indirect - golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd // indirect + golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3 // indirect + golang.org/x/net v0.0.0-20220225172249-27dd8689420f // indirect golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 // indirect golang.org/x/sys v0.0.0-20220209214540-3681064d5158 // indirect golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect golang.org/x/text v0.3.7 // indirect golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 // indirect - golang.org/x/tools v0.1.6-0.20210820212750-d4cc65f0b2ff // indirect + golang.org/x/tools v0.1.10-0.20220218145154-897bd77cd717 // indirect golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/api v0.44.0 // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2 // indirect + google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368 // indirect google.golang.org/grpc v1.40.0 // indirect google.golang.org/protobuf v1.27.1 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect k8s.io/apiextensions-apiserver v0.23.6 // indirect - k8s.io/component-base v0.23.6 // indirect + k8s.io/component-base v0.24.0 // indirect k8s.io/klog/v2 v2.60.1 // indirect k8s.io/kube-openapi v0.0.0-20220328201542-3ee0da9b0b42 // indirect k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9 // indirect diff --git a/tests/azure/go.sum b/tests/azure/go.sum index e1448230..ff0335d7 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -136,6 +136,7 @@ github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kB github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/certifi/gocertifi v0.0.0-20191021191039-0944d244cd40/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= github.com/certifi/gocertifi v0.0.0-20200922220541-2c3bb06c6054/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= @@ -163,6 +164,7 @@ github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7 github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -211,8 +213,8 @@ github.com/fluxcd/pkg/apis/kustomize v0.3.3 h1:bPN29SdVzWl0yhgivuf/83IAe2R6vUuDV github.com/fluxcd/pkg/apis/kustomize v0.3.3/go.mod h1:5HTOFZfQFVMMqR2rvuxpbZhpb+sQpcTT6RCQZOhjFzA= github.com/fluxcd/pkg/apis/meta v0.14.1 h1:lPDs9yV67DnwalHPb13bbnDkAatALfUiAMRHjUm4UBw= github.com/fluxcd/pkg/apis/meta v0.14.1/go.mod h1:1uJkTJGSZWrZxL5PFpx1IxGLrFmT1Cd0C2fFWrbv77I= -github.com/fluxcd/pkg/runtime v0.15.1 h1:PKooYqlZM+KLhnNz10sQnBH0AHllS40PIDHtiRH/BGU= -github.com/fluxcd/pkg/runtime v0.15.1/go.mod h1:TPAoOEgUFG60FXBA4ID41uaPldxuXCEI4jt3qfd5i5Q= +github.com/fluxcd/pkg/runtime v0.16.1 h1:WU1vNZz4TAzmATQ/tl2zB/FX6GIUTgYeBn/G5RuTA2c= +github.com/fluxcd/pkg/runtime v0.16.1/go.mod h1:cgVJkOXCg9OmrIUGklf/0UtV28MNzkuoBJhaEQICT6E= github.com/fluxcd/source-controller/api v0.24.4 h1:m54sS1rJlgJf5j9qDRgKLhbPJAnJ9dY+VrstPKj0aQo= github.com/fluxcd/source-controller/api v0.24.4/go.mod h1:b0MmMPGE8gcpgSyGXe5m7see77tBW26eZrvGkkPstUs= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= @@ -249,8 +251,8 @@ github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.2.2 h1:ahHml/yUpnlb96Rp8HCvtYVPY8ZYpxq3g7UYchIYwbs= -github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= +github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/zapr v1.2.0 h1:n4JnPI1T3Qq1SFEi/F8rwLrZERp2bso19PJZDB9dayk= github.com/go-logr/zapr v1.2.0/go.mod h1:Qa4Bsj2Vb+FAVeAKsLD8RLQ+YRJB8YDmOAKxaBQf7Ro= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= @@ -323,8 +325,8 @@ github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.7 h1:81/ik6ipDQS2aGcBfIN5dHDB36BwrStyeAQquSYCV4o= -github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= +github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= +github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= @@ -350,8 +352,8 @@ github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaU github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.2.0 h1:qJYtXnJRWmpe7m/3XlyhrsLrEURqHRM2kxzoxXqyUDs= -github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+Tv3SM= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= @@ -382,8 +384,8 @@ github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrj github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-retryablehttp v0.7.0 h1:eu1EI/mbirUgP5C8hVsTNaGZreBDlYiwC1FZWkvQPQ4= -github.com/hashicorp/go-retryablehttp v0.7.0/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= +github.com/hashicorp/go-retryablehttp v0.7.1 h1:sUiuQAnLlbvmExtFQs72iFW/HXeUn8Z1aJLQ4LJJbTQ= +github.com/hashicorp/go-retryablehttp v0.7.1/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= github.com/hashicorp/go-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo= github.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoDHxNAB65b+Rj1I= @@ -502,6 +504,7 @@ github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= github.com/moby/term v0.0.0-20210610120745-9d4ed1856297/go.mod h1:vgPCkQMyxTZ7IDy8SXRufE172gr8+K/JE/7hHFxHW3A= +github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -527,7 +530,7 @@ github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE= +github.com/onsi/gomega v1.19.0 h1:4ieX6qQjPP/BfC3mpsAtIGGlxTWPeA3Inl/7DtXw1tw= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= @@ -574,6 +577,7 @@ github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6So github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/sebdah/goldie v1.0.0/go.mod h1:jXP4hmWywNEwZzhMuv2ccnqTSFpuq8iyQhtQdkkZBH4= @@ -600,6 +604,7 @@ github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkU github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo= github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= +github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= @@ -637,6 +642,7 @@ github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/zclconf/go-cty v1.2.0/go.mod h1:hOPWgoHbaTUnI5k4D2ld+GRpFJSCe6bCM7m1q/N4PQ8= github.com/zclconf/go-cty v1.9.1/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uUAzyuvAk= github.com/zclconf/go-cty v1.10.0 h1:mp9ZXQeIcN8kAwuqorjH+Q+njbJKjLrvB2yIh4q7U+0= @@ -723,8 +729,9 @@ golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3 h1:kQgndtyPBW/JIYERgdxfwMYh3AVStj88WQTlNDi2a+o= +golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180811021610-c39426892332/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -772,10 +779,12 @@ golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96b golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210825183410-e898025ed96a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211209124913-491a49abca63/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd h1:O7DYs+zxREGLKzKoMQrtrEacpb0ZVXA5rIwylE2Xchk= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f h1:oA4XRj0qtSt8Yo1Zms0CUlsT3KG69V2UGQWPBxujDmc= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= 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= @@ -870,6 +879,7 @@ golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220209214540-3681064d5158 h1:rm+CHSpPEEW2IsXUib1ThaHIjuBVZjxNgSKmBLFfD4c= @@ -952,8 +962,9 @@ golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.6-0.20210820212750-d4cc65f0b2ff h1:VX/uD7MK0AHXGiScH3fsieUQUcpmRERPDYtqZdJnA+Q= golang.org/x/tools v0.1.6-0.20210820212750-d4cc65f0b2ff/go.mod h1:YD9qOF0M9xpSpdWTBbzEl5e/RnCefISl8E5Noe10jFM= +golang.org/x/tools v0.1.10-0.20220218145154-897bd77cd717 h1:hI3jKY4Hpf63ns040onEbB3dAkR/H/P83hw1TG8dD3Y= +golang.org/x/tools v0.1.10-0.20220218145154-897bd77cd717/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1036,8 +1047,9 @@ google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2 h1:NHN4wOCScVzKhPenJ2dt+BTs3X/XkBVI/Rh4iDt55T8= google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368 h1:Et6SkiuvnBn+SgrSYXs/BrUpGB4mbdwt4R3vaPIlicA= +google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= 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= @@ -1107,10 +1119,8 @@ gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= 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.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0 h1:hjy8E9ON/egN1tAYqKb61G10WtihqetD4sz2H+8nIeA= +gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -1133,8 +1143,9 @@ k8s.io/client-go v0.23.6/go.mod h1:Umt5icFOMLV/+qbtZ3PR0D+JA6lvvb3syzodv4irpK4= k8s.io/client-go v0.24.0 h1:lbE4aB1gTHvYFSwm6eD3OF14NhFDKCejlnsGYlSJe5U= k8s.io/client-go v0.24.0/go.mod h1:VFPQET+cAFpYxh6Bq6f4xyMY80G6jKKktU6G0m00VDw= k8s.io/code-generator v0.23.6/go.mod h1:S0Q1JVA+kSzTI1oUvbKAxZY/DYbA/ZUb4Uknog12ETk= -k8s.io/component-base v0.23.6 h1:8dhVZ4VrRcNdV2EGjl8tj8YOHwX6ysgCGMJ2Oyy0NW8= k8s.io/component-base v0.23.6/go.mod h1:FGMPeMrjYu0UZBSAFcfloVDplj9IvU+uRMTOdE23Fj0= +k8s.io/component-base v0.24.0 h1:h5jieHZQoHrY/lHG+HyrSbJeyfuitheBvqvKwKHVC0g= +k8s.io/component-base v0.24.0/go.mod h1:Dgazgon0i7KYUsS8krG8muGiMVtUZxG037l1MKyXgrA= k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= From ed88e9dec50edcf1e07719cfdc3794cf4d7f040e Mon Sep 17 00:00:00 2001 From: Tarun Gupta Akirala Date: Tue, 24 May 2022 16:52:54 -0700 Subject: [PATCH 117/818] feat: add --ignore-paths flag to flux create source (git|bucket) A new --ignore-paths flag is added to following commands: flux create source git --ignore-paths ... flux create source bucket --ignore-paths ... A StringSliceVar is used which supports specifying the flag multiple times to populate a list or either a comma seperated string value A unit test with a golden file is added to validate the flag Signed-off-by: Tarun Gupta Akirala --- cmd/flux/create_source_bucket.go | 30 ++++++++++++------- cmd/flux/create_source_git.go | 10 +++++++ cmd/flux/create_source_git_test.go | 25 ++++++++++++++++ .../testdata/create_source_git/export.golden | 15 ++++++++++ 4 files changed, 70 insertions(+), 10 deletions(-) create mode 100644 cmd/flux/testdata/create_source_git/export.golden diff --git a/cmd/flux/create_source_bucket.go b/cmd/flux/create_source_bucket.go index 4ba4d636..e528deed 100644 --- a/cmd/flux/create_source_bucket.go +++ b/cmd/flux/create_source_bucket.go @@ -20,6 +20,7 @@ import ( "context" "fmt" "os" + "strings" "github.com/spf13/cobra" corev1 "k8s.io/api/core/v1" @@ -63,17 +64,18 @@ For Buckets with static authentication, the credentials are stored in a Kubernet } type sourceBucketFlags struct { - name string - provider flags.SourceBucketProvider - endpoint string - accessKey string - secretKey string - region string - insecure bool - secretRef string + name string + provider flags.SourceBucketProvider + endpoint string + accessKey string + secretKey string + region string + insecure bool + secretRef string + ignorePaths []string } -var sourceBucketArgs = NewSourceBucketFlags() +var sourceBucketArgs = newSourceBucketFlags() func init() { createSourceBucketCmd.Flags().Var(&sourceBucketArgs.provider, "provider", sourceBucketArgs.provider.Description()) @@ -84,11 +86,12 @@ func init() { createSourceBucketCmd.Flags().StringVar(&sourceBucketArgs.region, "region", "", "the bucket region") createSourceBucketCmd.Flags().BoolVar(&sourceBucketArgs.insecure, "insecure", false, "for when connecting to a non-TLS S3 HTTP endpoint") createSourceBucketCmd.Flags().StringVar(&sourceBucketArgs.secretRef, "secret-ref", "", "the name of an existing secret containing credentials") + createSourceBucketCmd.Flags().StringSliceVar(&sourceBucketArgs.ignorePaths, "ignore-paths", nil, "set paths to ignore in bucket resource (can specify multiple paths with commas: path1,path2)") createSourceCmd.AddCommand(createSourceBucketCmd) } -func NewSourceBucketFlags() sourceBucketFlags { +func newSourceBucketFlags() sourceBucketFlags { return sourceBucketFlags{ provider: flags.SourceBucketProvider(sourcev1.GenericBucketProvider), } @@ -116,6 +119,12 @@ func createSourceBucketCmdRun(cmd *cobra.Command, args []string) error { } defer os.RemoveAll(tmpDir) + var ignorePaths *string + if len(sourceBucketArgs.ignorePaths) > 0 { + ignorePathsStr := strings.Join(sourceBucketArgs.ignorePaths, "\n") + ignorePaths = &ignorePathsStr + } + bucket := &sourcev1.Bucket{ ObjectMeta: metav1.ObjectMeta{ Name: name, @@ -131,6 +140,7 @@ func createSourceBucketCmdRun(cmd *cobra.Command, args []string) error { Interval: metav1.Duration{ Duration: createArgs.interval, }, + Ignore: ignorePaths, }, } diff --git a/cmd/flux/create_source_git.go b/cmd/flux/create_source_git.go index a520523e..9dba83ef 100644 --- a/cmd/flux/create_source_git.go +++ b/cmd/flux/create_source_git.go @@ -22,6 +22,7 @@ import ( "fmt" "net/url" "os" + "strings" "github.com/manifoldco/promptui" "github.com/spf13/cobra" @@ -59,6 +60,7 @@ type sourceGitFlags struct { privateKeyFile string recurseSubmodules bool silent bool + ignorePaths []string } var createSourceGitCmd = &cobra.Command{ @@ -139,6 +141,7 @@ func init() { createSourceGitCmd.Flags().BoolVar(&sourceGitArgs.recurseSubmodules, "recurse-submodules", false, "when enabled, configures the GitRepository source to initialize and include Git submodules in the artifact it produces") createSourceGitCmd.Flags().BoolVarP(&sourceGitArgs.silent, "silent", "s", false, "assumes the deploy key is already setup, skips confirmation") + createSourceGitCmd.Flags().StringSliceVar(&sourceGitArgs.ignorePaths, "ignore-paths", nil, "set paths to ignore in git resource (can specify multiple paths with commas: path1,path2)") createSourceCmd.AddCommand(createSourceGitCmd) } @@ -189,6 +192,12 @@ func createSourceGitCmdRun(cmd *cobra.Command, args []string) error { return err } + var ignorePaths *string + if len(sourceGitArgs.ignorePaths) > 0 { + ignorePathsStr := strings.Join(sourceGitArgs.ignorePaths, "\n") + ignorePaths = &ignorePathsStr + } + gitRepository := sourcev1.GitRepository{ ObjectMeta: metav1.ObjectMeta{ Name: name, @@ -202,6 +211,7 @@ func createSourceGitCmdRun(cmd *cobra.Command, args []string) error { }, RecurseSubmodules: sourceGitArgs.recurseSubmodules, Reference: &sourcev1.GitRepositoryRef{}, + Ignore: ignorePaths, }, } diff --git a/cmd/flux/create_source_git_test.go b/cmd/flux/create_source_git_test.go index 6447e52e..227567b2 100644 --- a/cmd/flux/create_source_git_test.go +++ b/cmd/flux/create_source_git_test.go @@ -85,6 +85,31 @@ func (r *reconciler) conditionFunc() (bool, error) { return true, err } +func TestCreateSourceGitExport(t *testing.T) { + var command = "create source git podinfo --url=https://github.com/stefanprodan/podinfo --branch=master --ignore-paths .cosign,non-existent-dir/ -n default --interval 1m --export --timeout=" + testTimeout.String() + + cases := []struct { + name string + args string + assert assertFunc + }{ + { + "ExportSucceeded", + command, + assertGoldenFile("testdata/create_source_git/export.golden"), + }, + } + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + cmd := cmdTestCase{ + args: tc.args, + assert: tc.assert, + } + cmd.runTestCmd(t) + }) + } +} + func TestCreateSourceGit(t *testing.T) { // Default command used for multiple tests var command = "create source git podinfo --url=https://github.com/stefanprodan/podinfo --branch=master --timeout=" + testTimeout.String() diff --git a/cmd/flux/testdata/create_source_git/export.golden b/cmd/flux/testdata/create_source_git/export.golden new file mode 100644 index 00000000..2b0193df --- /dev/null +++ b/cmd/flux/testdata/create_source_git/export.golden @@ -0,0 +1,15 @@ +--- +apiVersion: source.toolkit.fluxcd.io/v1beta2 +kind: GitRepository +metadata: + name: podinfo + namespace: default +spec: + ignore: |- + .cosign + non-existent-dir/ + interval: 1m0s + ref: + branch: master + url: https://github.com/stefanprodan/podinfo + From 2ba0c4435e020d2be0cb9f3d036b13f4b4761e09 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Sun, 29 May 2022 16:09:57 +0300 Subject: [PATCH 118/818] Remove deprecated monitoring stack Signed-off-by: Stefan Prodan --- manifests/monitoring/grafana/datasources.yaml | 18 ------ manifests/monitoring/grafana/deployment.yaml | 60 ------------------- .../monitoring/grafana/kustomization.yaml | 14 ----- manifests/monitoring/grafana/providers.yaml | 17 ------ manifests/monitoring/grafana/service.yaml | 16 ----- manifests/monitoring/kustomization.yaml | 6 -- manifests/monitoring/prometheus/account.yaml | 5 -- .../monitoring/prometheus/deployment.yaml | 52 ---------------- .../monitoring/prometheus/kustomization.yaml | 12 ---- .../monitoring/prometheus/prometheus.yml | 52 ---------------- manifests/monitoring/prometheus/rbac.yaml | 32 ---------- manifests/monitoring/prometheus/service.yaml | 12 ---- 12 files changed, 296 deletions(-) delete mode 100644 manifests/monitoring/grafana/datasources.yaml delete mode 100644 manifests/monitoring/grafana/deployment.yaml delete mode 100644 manifests/monitoring/grafana/kustomization.yaml delete mode 100644 manifests/monitoring/grafana/providers.yaml delete mode 100644 manifests/monitoring/grafana/service.yaml delete mode 100644 manifests/monitoring/kustomization.yaml delete mode 100644 manifests/monitoring/prometheus/account.yaml delete mode 100644 manifests/monitoring/prometheus/deployment.yaml delete mode 100644 manifests/monitoring/prometheus/kustomization.yaml delete mode 100644 manifests/monitoring/prometheus/prometheus.yml delete mode 100644 manifests/monitoring/prometheus/rbac.yaml delete mode 100644 manifests/monitoring/prometheus/service.yaml diff --git a/manifests/monitoring/grafana/datasources.yaml b/manifests/monitoring/grafana/datasources.yaml deleted file mode 100644 index f3961d19..00000000 --- a/manifests/monitoring/grafana/datasources.yaml +++ /dev/null @@ -1,18 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: grafana-datasources - namespace: flux-system -data: - datasources.yaml: |- - apiVersion: 1 - deleteDatasources: - - name: prometheus - datasources: - - name: prometheus - type: prometheus - access: proxy - url: http://prometheus:9090 - isDefault: true - editable: true - version: 1 diff --git a/manifests/monitoring/grafana/deployment.yaml b/manifests/monitoring/grafana/deployment.yaml deleted file mode 100644 index d53d66b6..00000000 --- a/manifests/monitoring/grafana/deployment.yaml +++ /dev/null @@ -1,60 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: grafana - labels: - app: grafana -spec: - replicas: 1 - selector: - matchLabels: - app: grafana - template: - metadata: - labels: - app: grafana - annotations: - prometheus.io/scrape: 'false' - spec: - containers: - - name: grafana - image: "grafana/grafana:7.5.4" - imagePullPolicy: IfNotPresent - ports: - - name: http - containerPort: 3000 - protocol: TCP - env: - - name: GF_PATHS_PROVISIONING - value: /etc/grafana/provisioning/ - - name: GF_AUTH_BASIC_ENABLED - value: "false" - - name: GF_AUTH_ANONYMOUS_ENABLED - value: "true" - - name: GF_AUTH_ANONYMOUS_ORG_ROLE - value: Admin - - name: GF_USERS_DEFAULT_THEME - value: "light" - volumeMounts: - - name: grafana - mountPath: /var/lib/grafana - - name: dashboards - mountPath: /etc/grafana/dashboards - - name: datasources - mountPath: /etc/grafana/provisioning/datasources - - name: providers - mountPath: /etc/grafana/provisioning/dashboards - resources: - {} - volumes: - - name: grafana - emptyDir: {} - - name: dashboards - configMap: - name: grafana-dashboards - - name: providers - configMap: - name: grafana-providers - - name: datasources - configMap: - name: grafana-datasources diff --git a/manifests/monitoring/grafana/kustomization.yaml b/manifests/monitoring/grafana/kustomization.yaml deleted file mode 100644 index 13e0356a..00000000 --- a/manifests/monitoring/grafana/kustomization.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: kustomize.config.k8s.io/v1beta1 -kind: Kustomization -namespace: flux-system -resources: - - service.yaml - - deployment.yaml - - providers.yaml - - datasources.yaml -configMapGenerator: - - name: grafana-dashboards - files: - - dashboards/control-plane.json - - dashboards/cluster.json - diff --git a/manifests/monitoring/grafana/providers.yaml b/manifests/monitoring/grafana/providers.yaml deleted file mode 100644 index 4f5e23c9..00000000 --- a/manifests/monitoring/grafana/providers.yaml +++ /dev/null @@ -1,17 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: grafana-providers - namespace: flux-system -data: - providers.yaml: |+ - apiVersion: 1 - providers: - - name: 'default' - orgId: 1 - folder: '' - type: file - disableDeletion: false - editable: true - options: - path: /etc/grafana/dashboards diff --git a/manifests/monitoring/grafana/service.yaml b/manifests/monitoring/grafana/service.yaml deleted file mode 100644 index 87968d71..00000000 --- a/manifests/monitoring/grafana/service.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: grafana - namespace: flux-system - labels: - app: grafana -spec: - type: ClusterIP - ports: - - port: 3000 - targetPort: http - protocol: TCP - name: http - selector: - app: grafana diff --git a/manifests/monitoring/kustomization.yaml b/manifests/monitoring/kustomization.yaml deleted file mode 100644 index b93baa2d..00000000 --- a/manifests/monitoring/kustomization.yaml +++ /dev/null @@ -1,6 +0,0 @@ -apiVersion: kustomize.config.k8s.io/v1beta1 -kind: Kustomization -namespace: flux-system -resources: -- prometheus -- grafana diff --git a/manifests/monitoring/prometheus/account.yaml b/manifests/monitoring/prometheus/account.yaml deleted file mode 100644 index e475c196..00000000 --- a/manifests/monitoring/prometheus/account.yaml +++ /dev/null @@ -1,5 +0,0 @@ -apiVersion: v1 -kind: ServiceAccount -metadata: - name: prometheus - namespace: flux-system diff --git a/manifests/monitoring/prometheus/deployment.yaml b/manifests/monitoring/prometheus/deployment.yaml deleted file mode 100644 index 293a9353..00000000 --- a/manifests/monitoring/prometheus/deployment.yaml +++ /dev/null @@ -1,52 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: prometheus - namespace: flux-system -spec: - replicas: 1 - selector: - matchLabels: - app: prometheus - template: - metadata: - labels: - app: prometheus - annotations: - appmesh.k8s.aws/sidecarInjectorWebhook: disabled - sidecar.istio.io/inject: "false" - spec: - serviceAccountName: prometheus - containers: - - name: prometheus - image: prom/prometheus:v2.26.0 - imagePullPolicy: IfNotPresent - args: - - '--storage.tsdb.retention=2h' - - '--config.file=/etc/prometheus/prometheus.yml' - ports: - - containerPort: 9090 - name: http - livenessProbe: - httpGet: - path: /-/healthy - port: 9090 - readinessProbe: - httpGet: - path: /-/ready - port: 9090 - resources: - requests: - cpu: 10m - memory: 128Mi - volumeMounts: - - name: config-volume - mountPath: /etc/prometheus - - name: data-volume - mountPath: /prometheus/data - volumes: - - name: config-volume - configMap: - name: prometheus - - name: data-volume - emptyDir: {} \ No newline at end of file diff --git a/manifests/monitoring/prometheus/kustomization.yaml b/manifests/monitoring/prometheus/kustomization.yaml deleted file mode 100644 index b3377956..00000000 --- a/manifests/monitoring/prometheus/kustomization.yaml +++ /dev/null @@ -1,12 +0,0 @@ -apiVersion: kustomize.config.k8s.io/v1beta1 -kind: Kustomization -namespace: flux-system -resources: - - account.yaml - - rbac.yaml - - service.yaml - - deployment.yaml -configMapGenerator: - - name: prometheus - files: - - prometheus.yml diff --git a/manifests/monitoring/prometheus/prometheus.yml b/manifests/monitoring/prometheus/prometheus.yml deleted file mode 100644 index 93f35c09..00000000 --- a/manifests/monitoring/prometheus/prometheus.yml +++ /dev/null @@ -1,52 +0,0 @@ -global: - scrape_interval: 10s -scrape_configs: - -# Kubernetes API -- job_name: kubernetes-apiserver - kubernetes_sd_configs: - - role: endpoints - namespaces: - names: - - default - scheme: https - tls_config: - ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt - insecure_skip_verify: true - bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token - relabel_configs: - - source_labels: [__meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name] - action: keep - regex: kubernetes;https - -# Kubernetes pods -- job_name: kubernetes-pods - kubernetes_sd_configs: - - role: pod - relabel_configs: - - action: keep - regex: true - source_labels: - - __meta_kubernetes_pod_annotation_prometheus_io_scrape - - action: replace - regex: (.+) - source_labels: - - __meta_kubernetes_pod_annotation_prometheus_io_path - target_label: __metrics_path__ - - action: replace - regex: ([^:]+)(?::\d+)?;(\d+) - replacement: $1:$2 - source_labels: - - __address__ - - __meta_kubernetes_pod_annotation_prometheus_io_port - target_label: __address__ - - action: labelmap - regex: __meta_kubernetes_pod_label_(.+) - - action: replace - source_labels: - - __meta_kubernetes_namespace - target_label: namespace - - action: replace - source_labels: - - __meta_kubernetes_pod_name - target_label: pod diff --git a/manifests/monitoring/prometheus/rbac.yaml b/manifests/monitoring/prometheus/rbac.yaml deleted file mode 100644 index 926a6d83..00000000 --- a/manifests/monitoring/prometheus/rbac.yaml +++ /dev/null @@ -1,32 +0,0 @@ -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: prometheus-flux-system -rules: - - apiGroups: [""] - resources: - - nodes - - services - - endpoints - - pods - - nodes/proxy - verbs: ["get", "list", "watch"] - - apiGroups: [""] - resources: - - configmaps - verbs: ["get"] - - nonResourceURLs: ["/metrics"] - verbs: ["get"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: prometheus-flux-system -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: prometheus-flux-system -subjects: -- kind: ServiceAccount - name: prometheus - namespace: flux-system diff --git a/manifests/monitoring/prometheus/service.yaml b/manifests/monitoring/prometheus/service.yaml deleted file mode 100644 index 143cd9b4..00000000 --- a/manifests/monitoring/prometheus/service.yaml +++ /dev/null @@ -1,12 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: prometheus - namespace: flux-system -spec: - selector: - app: prometheus - ports: - - name: http - protocol: TCP - port: 9090 \ No newline at end of file From 8128fc190d75eeee3d8453161c7800a2e3e0fa94 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Sun, 29 May 2022 16:14:18 +0300 Subject: [PATCH 119/818] Update kube-prometheus-stack chart to v35 - Automate kube-prometheus-stack helm release upgrades for the v35.x range - Remove deprecated Grafana settings - Set Prometheus retention to 24h - Label Flux dashboards and PodMonitors with `app.kubernetes.io/component: monitoring` - Change the `podMonitorSelector` to match the label `app.kubernetes.io/component: monitoring` Signed-off-by: Stefan Prodan --- .../kube-prometheus-stack/namespace.yaml | 2 ++ .../kube-prometheus-stack/release.yaml | 17 ++++++++++------- .../kube-prometheus-stack/repository.yaml | 4 ++-- .../dashboards/cluster.json | 0 .../dashboards/control-plane.json | 0 .../monitoring-config/kustomization.yaml | 6 ++++-- .../monitoring-config/podmonitor.yaml | 1 + 7 files changed, 19 insertions(+), 11 deletions(-) rename manifests/monitoring/{grafana => monitoring-config}/dashboards/cluster.json (100%) rename manifests/monitoring/{grafana => monitoring-config}/dashboards/control-plane.json (100%) diff --git a/manifests/monitoring/kube-prometheus-stack/namespace.yaml b/manifests/monitoring/kube-prometheus-stack/namespace.yaml index d3252360..78abcfce 100644 --- a/manifests/monitoring/kube-prometheus-stack/namespace.yaml +++ b/manifests/monitoring/kube-prometheus-stack/namespace.yaml @@ -2,3 +2,5 @@ apiVersion: v1 kind: Namespace metadata: name: monitoring + labels: + app.kubernetes.io/component: monitoring diff --git a/manifests/monitoring/kube-prometheus-stack/release.yaml b/manifests/monitoring/kube-prometheus-stack/release.yaml index d5985433..13aa4952 100644 --- a/manifests/monitoring/kube-prometheus-stack/release.yaml +++ b/manifests/monitoring/kube-prometheus-stack/release.yaml @@ -6,25 +6,28 @@ spec: interval: 5m chart: spec: - version: 34.7.0 + version: "35.x" chart: kube-prometheus-stack sourceRef: kind: HelmRepository name: prometheus-community - interval: 1m + interval: 60m install: crds: Create upgrade: crds: CreateReplace + # https://github.com/prometheus-community/helm-charts/blob/main/charts/kube-prometheus-stack/values.yaml values: alertmanager: enabled: false - grafana: - sidecar: - dashboards: - searchNamespace: ALL prometheus: prometheusSpec: + retention: 24h + resources: + requests: + cpu: 200m + memory: 200Mi + podMonitorNamespaceSelector: {} podMonitorSelector: matchLabels: - app.kubernetes.io/part-of: flux + app.kubernetes.io/component: monitoring diff --git a/manifests/monitoring/kube-prometheus-stack/repository.yaml b/manifests/monitoring/kube-prometheus-stack/repository.yaml index 258f4087..49355b53 100644 --- a/manifests/monitoring/kube-prometheus-stack/repository.yaml +++ b/manifests/monitoring/kube-prometheus-stack/repository.yaml @@ -1,7 +1,7 @@ -apiVersion: source.toolkit.fluxcd.io/v1beta1 +apiVersion: source.toolkit.fluxcd.io/v1beta2 kind: HelmRepository metadata: name: prometheus-community spec: - interval: 1m + interval: 120m url: https://prometheus-community.github.io/helm-charts diff --git a/manifests/monitoring/grafana/dashboards/cluster.json b/manifests/monitoring/monitoring-config/dashboards/cluster.json similarity index 100% rename from manifests/monitoring/grafana/dashboards/cluster.json rename to manifests/monitoring/monitoring-config/dashboards/cluster.json diff --git a/manifests/monitoring/grafana/dashboards/control-plane.json b/manifests/monitoring/monitoring-config/dashboards/control-plane.json similarity index 100% rename from manifests/monitoring/grafana/dashboards/control-plane.json rename to manifests/monitoring/monitoring-config/dashboards/control-plane.json diff --git a/manifests/monitoring/monitoring-config/kustomization.yaml b/manifests/monitoring/monitoring-config/kustomization.yaml index 11467e33..9f036a57 100644 --- a/manifests/monitoring/monitoring-config/kustomization.yaml +++ b/manifests/monitoring/monitoring-config/kustomization.yaml @@ -6,8 +6,10 @@ resources: configMapGenerator: - name: flux-grafana-dashboards files: - - ../grafana/dashboards/control-plane.json - - ../grafana/dashboards/cluster.json + - dashboards/control-plane.json + - dashboards/cluster.json options: labels: grafana_dashboard: "1" + app.kubernetes.io/part-of: flux + app.kubernetes.io/component: monitoring diff --git a/manifests/monitoring/monitoring-config/podmonitor.yaml b/manifests/monitoring/monitoring-config/podmonitor.yaml index 7838272a..d375e0d9 100644 --- a/manifests/monitoring/monitoring-config/podmonitor.yaml +++ b/manifests/monitoring/monitoring-config/podmonitor.yaml @@ -5,6 +5,7 @@ metadata: namespace: flux-system labels: app.kubernetes.io/part-of: flux + app.kubernetes.io/component: monitoring spec: namespaceSelector: matchNames: From 4acef9d508bb50cc5647237f39e1a25b69cad451 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Sun, 29 May 2022 17:46:02 +0300 Subject: [PATCH 120/818] Add Flux events to dashboard annotations Signed-off-by: Stefan Prodan --- .../monitoring-config/dashboards/cluster.json | 17 +++++++++++++++++ .../dashboards/control-plane.json | 17 +++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/manifests/monitoring/monitoring-config/dashboards/cluster.json b/manifests/monitoring/monitoring-config/dashboards/cluster.json index d9960b7b..1d493586 100644 --- a/manifests/monitoring/monitoring-config/dashboards/cluster.json +++ b/manifests/monitoring/monitoring-config/dashboards/cluster.json @@ -9,6 +9,23 @@ "iconColor": "rgba(0, 211, 255, 1)", "name": "Annotations & Alerts", "type": "dashboard" + }, + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "enable": true, + "iconColor": "red", + "name": "flux events", + "target": { + "limit": 100, + "matchAny": false, + "tags": [ + "flux" + ], + "type": "tags" + } } ] }, diff --git a/manifests/monitoring/monitoring-config/dashboards/control-plane.json b/manifests/monitoring/monitoring-config/dashboards/control-plane.json index 3eff4d57..3f03d300 100644 --- a/manifests/monitoring/monitoring-config/dashboards/control-plane.json +++ b/manifests/monitoring/monitoring-config/dashboards/control-plane.json @@ -15,6 +15,23 @@ "type": "dashboard" }, "type": "dashboard" + }, + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "enable": true, + "iconColor": "red", + "name": "flux events", + "target": { + "limit": 100, + "matchAny": false, + "tags": [ + "flux" + ], + "type": "tags" + } } ] }, From e19ea796b1a4ad198c020900950b1a9790ead85b Mon Sep 17 00:00:00 2001 From: Max Jonas Werner Date: Sat, 28 May 2022 18:40:18 +0200 Subject: [PATCH 121/818] Add OCI support to `create source helm` closes #2774 Signed-off-by: Max Jonas Werner --- cmd/flux/create_source_helm.go | 34 ++++++-- cmd/flux/create_source_helm_test.go | 81 +++++++++++++++++++ cmd/flux/main_test.go | 1 + .../testdata/create_source_helm/https.golden | 10 +++ .../create_source_helm/oci-with-secret.golden | 13 +++ .../testdata/create_source_helm/oci.golden | 11 +++ go.mod | 2 +- go.sum | 4 +- .../source-controller/kustomization.yaml | 4 +- 9 files changed, 150 insertions(+), 10 deletions(-) create mode 100644 cmd/flux/create_source_helm_test.go create mode 100644 cmd/flux/testdata/create_source_helm/https.golden create mode 100644 cmd/flux/testdata/create_source_helm/oci-with-secret.golden create mode 100644 cmd/flux/testdata/create_source_helm/oci.golden diff --git a/cmd/flux/create_source_helm.go b/cmd/flux/create_source_helm.go index d294aace..4b56f37a 100644 --- a/cmd/flux/create_source_helm.go +++ b/cmd/flux/create_source_helm.go @@ -44,23 +44,34 @@ var createSourceHelmCmd = &cobra.Command{ Short: "Create or update a HelmRepository source", Long: `The create source helm command generates a HelmRepository resource and waits for it to fetch the index. For private Helm repositories, the basic authentication credentials are stored in a Kubernetes secret.`, - Example: ` # Create a source for a public Helm repository + Example: ` # Create a source for an HTTPS public Helm repository flux create source helm podinfo \ --url=https://stefanprodan.github.io/podinfo \ --interval=10m - # Create a source for a Helm repository using basic authentication + # Create a source for an HTTPS Helm repository using basic authentication flux create source helm podinfo \ --url=https://stefanprodan.github.io/podinfo \ --username=username \ --password=password - # Create a source for a Helm repository using TLS authentication + # Create a source for an HTTPS Helm repository using TLS authentication flux create source helm podinfo \ --url=https://stefanprodan.github.io/podinfo \ --cert-file=./cert.crt \ --key-file=./key.crt \ - --ca-file=./ca.crt`, + --ca-file=./ca.crt + + # Create a source for an OCI Helm repository + flux create source helm podinfo \ + --url=oci://ghcr.io/stefanprodan/charts/podinfo + --username=username \ + --password=password + + # Create a source for an OCI Helm repository using an existing secret with basic auth or dockerconfig credentials + flux create source helm podinfo \ + --url=oci://ghcr.io/stefanprodan/charts/podinfo + --secret-ref=docker-config`, RunE: createSourceHelmCmdRun, } @@ -84,7 +95,7 @@ func init() { createSourceHelmCmd.Flags().StringVar(&sourceHelmArgs.certFile, "cert-file", "", "TLS authentication cert file path") createSourceHelmCmd.Flags().StringVar(&sourceHelmArgs.keyFile, "key-file", "", "TLS authentication key file path") createSourceHelmCmd.Flags().StringVar(&sourceHelmArgs.caFile, "ca-file", "", "TLS authentication CA file path") - createSourceHelmCmd.Flags().StringVarP(&sourceHelmArgs.secretRef, "secret-ref", "", "", "the name of an existing secret containing TLS or basic auth credentials") + createSourceHelmCmd.Flags().StringVarP(&sourceHelmArgs.secretRef, "secret-ref", "", "", "the name of an existing secret containing TLS, basic auth or docker-config credentials") createSourceHelmCmd.Flags().BoolVarP(&sourceHelmArgs.passCredentials, "pass-credentials", "", false, "pass credentials to all domains") createSourceCmd.AddCommand(createSourceHelmCmd) @@ -126,6 +137,14 @@ func createSourceHelmCmdRun(cmd *cobra.Command, args []string) error { }, } + url, err := url.Parse(sourceHelmArgs.url) + if err != nil { + return fmt.Errorf("failed to parse URL: %w", err) + } + if url.Scheme == sourcev1.HelmRepositoryTypeOCI { + helmRepository.Spec.Type = sourcev1.HelmRepositoryTypeOCI + } + if createSourceArgs.fetchTimeout > 0 { helmRepository.Spec.Timeout = &metav1.Duration{Duration: createSourceArgs.fetchTimeout} } @@ -196,6 +215,11 @@ func createSourceHelmCmdRun(cmd *cobra.Command, args []string) error { } logger.Successf("HelmRepository source reconciliation completed") + if helmRepository.Spec.Type == sourcev1.HelmRepositoryTypeOCI { + // OCI repos don't expose any artifact so we just return early here + return nil + } + if helmRepository.Status.Artifact == nil { return fmt.Errorf("HelmRepository source reconciliation completed but no artifact was found") } diff --git a/cmd/flux/create_source_helm_test.go b/cmd/flux/create_source_helm_test.go new file mode 100644 index 00000000..ceaa959f --- /dev/null +++ b/cmd/flux/create_source_helm_test.go @@ -0,0 +1,81 @@ +//go:build unit +// +build unit + +/* +Copyright 2022 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "testing" +) + +func TestCreateSourceHelm(t *testing.T) { + tests := []struct { + name string + args string + resultFile string + assertFunc string + }{ + { + name: "no args", + args: "create source helm", + resultFile: "name is required", + assertFunc: "assertError", + }, + { + name: "OCI repo", + args: "create source helm podinfo --url=oci://ghcr.io/stefanprodan/charts/podinfo --interval 5m --export", + resultFile: "./testdata/create_source_helm/oci.golden", + assertFunc: "assertGoldenTemplateFile", + }, + { + name: "OCI repo with Secret ref", + args: "create source helm podinfo --url=oci://ghcr.io/stefanprodan/charts/podinfo --interval 5m --secret-ref=creds --export", + resultFile: "./testdata/create_source_helm/oci-with-secret.golden", + assertFunc: "assertGoldenTemplateFile", + }, + { + name: "HTTPS repo", + args: "create source helm podinfo --url=https://stefanprodan.github.io/charts/podinfo --interval 5m --export", + resultFile: "./testdata/create_source_helm/https.golden", + assertFunc: "assertGoldenTemplateFile", + }, + } + + tmpl := map[string]string{ + "fluxns": allocateNamespace("flux-system"), + } + setup(t, tmpl) + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + var assert assertFunc + switch tt.assertFunc { + case "assertGoldenTemplateFile": + assert = assertGoldenTemplateFile(tt.resultFile, tmpl) + case "assertError": + assert = assertError(tt.resultFile) + } + + cmd := cmdTestCase{ + args: tt.args + " -n " + tmpl["fluxns"], + assert: assert, + } + cmd.runTestCmd(t) + }) + } +} diff --git a/cmd/flux/main_test.go b/cmd/flux/main_test.go index 23d9d58f..50127de7 100644 --- a/cmd/flux/main_test.go +++ b/cmd/flux/main_test.go @@ -386,6 +386,7 @@ func executeCommand(cmd string) (string, error) { func resetCmdArgs() { createArgs = createFlags{} getArgs = GetFlags{} + sourceHelmArgs = sourceHelmFlags{} secretGitArgs = NewSecretGitFlags() } diff --git a/cmd/flux/testdata/create_source_helm/https.golden b/cmd/flux/testdata/create_source_helm/https.golden new file mode 100644 index 00000000..a0aad146 --- /dev/null +++ b/cmd/flux/testdata/create_source_helm/https.golden @@ -0,0 +1,10 @@ +--- +apiVersion: source.toolkit.fluxcd.io/v1beta2 +kind: HelmRepository +metadata: + name: podinfo + namespace: {{ .fluxns }} +spec: + interval: 5m0s + url: https://stefanprodan.github.io/charts/podinfo + diff --git a/cmd/flux/testdata/create_source_helm/oci-with-secret.golden b/cmd/flux/testdata/create_source_helm/oci-with-secret.golden new file mode 100644 index 00000000..0c182048 --- /dev/null +++ b/cmd/flux/testdata/create_source_helm/oci-with-secret.golden @@ -0,0 +1,13 @@ +--- +apiVersion: source.toolkit.fluxcd.io/v1beta2 +kind: HelmRepository +metadata: + name: podinfo + namespace: {{ .fluxns }} +spec: + interval: 5m0s + secretRef: + name: creds + type: oci + url: oci://ghcr.io/stefanprodan/charts/podinfo + diff --git a/cmd/flux/testdata/create_source_helm/oci.golden b/cmd/flux/testdata/create_source_helm/oci.golden new file mode 100644 index 00000000..af361810 --- /dev/null +++ b/cmd/flux/testdata/create_source_helm/oci.golden @@ -0,0 +1,11 @@ +--- +apiVersion: source.toolkit.fluxcd.io/v1beta2 +kind: HelmRepository +metadata: + name: podinfo + namespace: {{ .fluxns }} +spec: + interval: 5m0s + type: oci + url: oci://ghcr.io/stefanprodan/charts/podinfo + diff --git a/go.mod b/go.mod index 891c3a17..67ed89dd 100644 --- a/go.mod +++ b/go.mod @@ -19,7 +19,7 @@ require ( github.com/fluxcd/pkg/ssh v0.4.1 github.com/fluxcd/pkg/untar v0.1.0 github.com/fluxcd/pkg/version v0.1.0 - github.com/fluxcd/source-controller/api v0.24.4 + github.com/fluxcd/source-controller/api v0.25.0 github.com/go-git/go-git/v5 v5.4.2 github.com/gonvenience/bunt v1.3.3 github.com/gonvenience/ytbx v1.4.4 diff --git a/go.sum b/go.sum index 3ed8efc1..b99be204 100644 --- a/go.sum +++ b/go.sum @@ -219,8 +219,8 @@ github.com/fluxcd/pkg/untar v0.1.0 h1:k97V/xV5hFrAkIkVPuv5AVhyxh1ZzzAKba/lbDfGo6 github.com/fluxcd/pkg/untar v0.1.0/go.mod h1:aGswNyzB1mlz/T/kpOS58mITBMxMKc9tlJBH037A2HY= github.com/fluxcd/pkg/version v0.1.0 h1:v+SmCanmCB5Tj2Cx9TXlj+kNRfPGbAvirkeqsp7ZEAQ= github.com/fluxcd/pkg/version v0.1.0/go.mod h1:V7Z/w8dxLQzv0FHqa5ox5TeyOd2zOd49EeuWFgnwyj4= -github.com/fluxcd/source-controller/api v0.24.4 h1:m54sS1rJlgJf5j9qDRgKLhbPJAnJ9dY+VrstPKj0aQo= -github.com/fluxcd/source-controller/api v0.24.4/go.mod h1:b0MmMPGE8gcpgSyGXe5m7see77tBW26eZrvGkkPstUs= +github.com/fluxcd/source-controller/api v0.25.0 h1:+uL+hQb/6h2MHuE9/Iq054TrDWF70puAuWBcoBrZK5M= +github.com/fluxcd/source-controller/api v0.25.0/go.mod h1:tuMrqHHpRt7mxdLeRXGIMtTKAMufLwLTm5uXkEOJWFw= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/form3tech-oss/jwt-go v3.2.3+incompatible h1:7ZaBxOI7TMoYBfyA3cQHErNNyAWIKUMIwqxEtgHOs5c= diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index dbb9714e..72ce57dc 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.24.4/source-controller.crds.yaml -- https://github.com/fluxcd/source-controller/releases/download/v0.24.4/source-controller.deployment.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.25.0/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.25.0/source-controller.deployment.yaml - account.yaml patchesJson6902: - target: From 7d742924f6c26dff0162267a946802aae9579b14 Mon Sep 17 00:00:00 2001 From: Max Jonas Werner Date: Wed, 1 Jun 2022 16:06:45 +0200 Subject: [PATCH 122/818] bump SC version in azure test module Signed-off-by: Max Jonas Werner --- tests/azure/go.mod | 2 +- tests/azure/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/azure/go.mod b/tests/azure/go.mod index c4968c6d..4dd33808 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -11,7 +11,7 @@ require ( github.com/fluxcd/notification-controller/api v0.23.5 github.com/fluxcd/pkg/apis/meta v0.14.1 github.com/fluxcd/pkg/runtime v0.16.1 - github.com/fluxcd/source-controller/api v0.24.4 + github.com/fluxcd/source-controller/api v0.25.0 github.com/hashicorp/terraform-exec v0.15.0 github.com/libgit2/git2go/v31 v31.7.9 github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 diff --git a/tests/azure/go.sum b/tests/azure/go.sum index ff0335d7..1c648cae 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -215,8 +215,8 @@ github.com/fluxcd/pkg/apis/meta v0.14.1 h1:lPDs9yV67DnwalHPb13bbnDkAatALfUiAMRHj github.com/fluxcd/pkg/apis/meta v0.14.1/go.mod h1:1uJkTJGSZWrZxL5PFpx1IxGLrFmT1Cd0C2fFWrbv77I= github.com/fluxcd/pkg/runtime v0.16.1 h1:WU1vNZz4TAzmATQ/tl2zB/FX6GIUTgYeBn/G5RuTA2c= github.com/fluxcd/pkg/runtime v0.16.1/go.mod h1:cgVJkOXCg9OmrIUGklf/0UtV28MNzkuoBJhaEQICT6E= -github.com/fluxcd/source-controller/api v0.24.4 h1:m54sS1rJlgJf5j9qDRgKLhbPJAnJ9dY+VrstPKj0aQo= -github.com/fluxcd/source-controller/api v0.24.4/go.mod h1:b0MmMPGE8gcpgSyGXe5m7see77tBW26eZrvGkkPstUs= +github.com/fluxcd/source-controller/api v0.25.0 h1:+uL+hQb/6h2MHuE9/Iq054TrDWF70puAuWBcoBrZK5M= +github.com/fluxcd/source-controller/api v0.25.0/go.mod h1:tuMrqHHpRt7mxdLeRXGIMtTKAMufLwLTm5uXkEOJWFw= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/form3tech-oss/jwt-go v3.2.3+incompatible h1:7ZaBxOI7TMoYBfyA3cQHErNNyAWIKUMIwqxEtgHOs5c= From 797352e4fa13b71e29e1c86800ce5a63a77c4c19 Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Wed, 1 Jun 2022 14:08:16 +0000 Subject: [PATCH 123/818] Update toolkit components - kustomize-controller to v0.26.0 https://github.com/fluxcd/kustomize-controller/blob/v0.26.0/CHANGELOG.md - source-controller to v0.25.0 https://github.com/fluxcd/source-controller/blob/v0.25.0/CHANGELOG.md - notification-controller to v0.24.0 https://github.com/fluxcd/notification-controller/blob/v0.24.0/CHANGELOG.md - image-reflector-controller to v0.19.0 https://github.com/fluxcd/image-reflector-controller/blob/v0.19.0/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 8 ++++---- go.sum | 16 ++++++++-------- .../kustomization.yaml | 4 ++-- .../kustomize-controller/kustomization.yaml | 4 ++-- .../notification-controller/kustomization.yaml | 4 ++-- .../bases/source-controller/kustomization.yaml | 4 ++-- manifests/crds/kustomization.yaml | 8 ++++---- 7 files changed, 24 insertions(+), 24 deletions(-) diff --git a/go.mod b/go.mod index 891c3a17..bc1f13e5 100644 --- a/go.mod +++ b/go.mod @@ -9,9 +9,9 @@ require ( github.com/fluxcd/go-git-providers v0.6.0 github.com/fluxcd/helm-controller/api v0.21.0 github.com/fluxcd/image-automation-controller/api v0.22.1 - github.com/fluxcd/image-reflector-controller/api v0.18.0 - github.com/fluxcd/kustomize-controller/api v0.25.0 - github.com/fluxcd/notification-controller/api v0.23.5 + github.com/fluxcd/image-reflector-controller/api v0.19.0 + github.com/fluxcd/kustomize-controller/api v0.26.0 + github.com/fluxcd/notification-controller/api v0.24.0 github.com/fluxcd/pkg/apis/meta v0.14.1 github.com/fluxcd/pkg/kustomize v0.5.1 github.com/fluxcd/pkg/runtime v0.16.1 @@ -19,7 +19,7 @@ require ( github.com/fluxcd/pkg/ssh v0.4.1 github.com/fluxcd/pkg/untar v0.1.0 github.com/fluxcd/pkg/version v0.1.0 - github.com/fluxcd/source-controller/api v0.24.4 + github.com/fluxcd/source-controller/api v0.25.0 github.com/go-git/go-git/v5 v5.4.2 github.com/gonvenience/bunt v1.3.3 github.com/gonvenience/ytbx v1.4.4 diff --git a/go.sum b/go.sum index 3ed8efc1..c895b3ae 100644 --- a/go.sum +++ b/go.sum @@ -195,12 +195,12 @@ github.com/fluxcd/helm-controller/api v0.21.0 h1:MWvVzz6u9jR1aE7j1YaSEjBehw0zMnd github.com/fluxcd/helm-controller/api v0.21.0/go.mod h1:cgP5ZR46HIhC8phUfx4Z60He9zNuIHbH3r8YEVl5ip8= github.com/fluxcd/image-automation-controller/api v0.22.1 h1:7OtqjJU2s4GF0d6z35G+Ss4Ugvuo/vv8sQsxEX9embA= github.com/fluxcd/image-automation-controller/api v0.22.1/go.mod h1:SKasiuSIW7+NKi6Sb4iuDa+AJR8wJS8mapZETR/PGTI= -github.com/fluxcd/image-reflector-controller/api v0.18.0 h1:31KhS4IXIcTIK1lrSgsLZTmstM2uMZj9PTUqiWAoVcY= -github.com/fluxcd/image-reflector-controller/api v0.18.0/go.mod h1:ilumM3a/k0+7Xpq13fsh5zVmDLy7du61j37NAEuKOI0= -github.com/fluxcd/kustomize-controller/api v0.25.0 h1:/qQ+4Yy1/H9Z1N/AEBIVEHy180WGTPL9UKDICMdxbjg= -github.com/fluxcd/kustomize-controller/api v0.25.0/go.mod h1:W9EDKlibtbGyF3lUnb16u3eXHYZ2awAvyR8b/PPrNkY= -github.com/fluxcd/notification-controller/api v0.23.5 h1:yVx3AXSIL52TwqIxTki3MGRPFLsnBW5ozNMCIX0uRKQ= -github.com/fluxcd/notification-controller/api v0.23.5/go.mod h1:+TZuRS0YbiKxVJYGWDTSG6sL8F0V8+7zK+y14EvV818= +github.com/fluxcd/image-reflector-controller/api v0.19.0 h1:8R9ppgKzagFKy04Z/+IG8fjQrPn71xet+w7sTXPudpc= +github.com/fluxcd/image-reflector-controller/api v0.19.0/go.mod h1:7eyHh5yq/2vm6eg70tfeSn7ZfbgMrrmoSJEeBMNGDDs= +github.com/fluxcd/kustomize-controller/api v0.26.0 h1:B/KQKzMXte0nj3P1D5whQTb5btpuHfcHV4J25eyqbIM= +github.com/fluxcd/kustomize-controller/api v0.26.0/go.mod h1:ybeF/mSNgAL1sgXav1+Z5zDHfnisOA8Re3hgjHWhcJ8= +github.com/fluxcd/notification-controller/api v0.24.0 h1:pvLcCD1HT+x0Hup8VLfDrVGFDK33oJKNC7WX6mtEEh0= +github.com/fluxcd/notification-controller/api v0.24.0/go.mod h1:pld1fyodxqdWPBr+Ez+kTixmtmO2o3o0I5Zf5wQDHGM= github.com/fluxcd/pkg/apis/acl v0.0.3 h1:Lw0ZHdpnO4G7Zy9KjrzwwBmDZQuy4qEjaU/RvA6k1lc= github.com/fluxcd/pkg/apis/acl v0.0.3/go.mod h1:XPts6lRJ9C9fIF9xVWofmQwftvhY25n1ps7W9xw0XLU= github.com/fluxcd/pkg/apis/kustomize v0.4.1 h1:YgIF9TJ23pH66W/gYlEu+DeH1pU3tS4xYlRc5AQzk58= @@ -219,8 +219,8 @@ github.com/fluxcd/pkg/untar v0.1.0 h1:k97V/xV5hFrAkIkVPuv5AVhyxh1ZzzAKba/lbDfGo6 github.com/fluxcd/pkg/untar v0.1.0/go.mod h1:aGswNyzB1mlz/T/kpOS58mITBMxMKc9tlJBH037A2HY= github.com/fluxcd/pkg/version v0.1.0 h1:v+SmCanmCB5Tj2Cx9TXlj+kNRfPGbAvirkeqsp7ZEAQ= github.com/fluxcd/pkg/version v0.1.0/go.mod h1:V7Z/w8dxLQzv0FHqa5ox5TeyOd2zOd49EeuWFgnwyj4= -github.com/fluxcd/source-controller/api v0.24.4 h1:m54sS1rJlgJf5j9qDRgKLhbPJAnJ9dY+VrstPKj0aQo= -github.com/fluxcd/source-controller/api v0.24.4/go.mod h1:b0MmMPGE8gcpgSyGXe5m7see77tBW26eZrvGkkPstUs= +github.com/fluxcd/source-controller/api v0.25.0 h1:+uL+hQb/6h2MHuE9/Iq054TrDWF70puAuWBcoBrZK5M= +github.com/fluxcd/source-controller/api v0.25.0/go.mod h1:tuMrqHHpRt7mxdLeRXGIMtTKAMufLwLTm5uXkEOJWFw= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/form3tech-oss/jwt-go v3.2.3+incompatible h1:7ZaBxOI7TMoYBfyA3cQHErNNyAWIKUMIwqxEtgHOs5c= diff --git a/manifests/bases/image-reflector-controller/kustomization.yaml b/manifests/bases/image-reflector-controller/kustomization.yaml index 739879d6..27726de5 100644 --- a/manifests/bases/image-reflector-controller/kustomization.yaml +++ b/manifests/bases/image-reflector-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.18.0/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.18.0/image-reflector-controller.deployment.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.19.0/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.19.0/image-reflector-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/kustomize-controller/kustomization.yaml b/manifests/bases/kustomize-controller/kustomization.yaml index 1a34fac7..60c48bd0 100644 --- a/manifests/bases/kustomize-controller/kustomization.yaml +++ b/manifests/bases/kustomize-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.25.0/kustomize-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.25.0/kustomize-controller.deployment.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.26.0/kustomize-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.26.0/kustomize-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/notification-controller/kustomization.yaml b/manifests/bases/notification-controller/kustomization.yaml index 945f8466..73cd6eb4 100644 --- a/manifests/bases/notification-controller/kustomization.yaml +++ b/manifests/bases/notification-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/notification-controller/releases/download/v0.23.5/notification-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v0.23.5/notification-controller.deployment.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.24.0/notification-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.24.0/notification-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index dbb9714e..72ce57dc 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.24.4/source-controller.crds.yaml -- https://github.com/fluxcd/source-controller/releases/download/v0.24.4/source-controller.deployment.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.25.0/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.25.0/source-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index afac6087..771ac842 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -1,9 +1,9 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.24.4/source-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.25.0/kustomize-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.25.0/source-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.26.0/kustomize-controller.crds.yaml - https://github.com/fluxcd/helm-controller/releases/download/v0.21.0/helm-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v0.23.5/notification-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.18.0/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.24.0/notification-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.19.0/image-reflector-controller.crds.yaml - https://github.com/fluxcd/image-automation-controller/releases/download/v0.22.1/image-automation-controller.crds.yaml From a55548de076f396580bd0aa1196553f5eae61976 Mon Sep 17 00:00:00 2001 From: Vipul Newaskar Date: Mon, 30 May 2022 23:23:40 +0530 Subject: [PATCH 124/818] allow http git repos connections while bootstrap This change will allow user to bootstrap with http git urls But user must explicitely set --allow-insecure-http=true Signed-off-by: Vipul Newaskar --- cmd/flux/bootstrap_git.go | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/cmd/flux/bootstrap_git.go b/cmd/flux/bootstrap_git.go index f3005107..6f540fe5 100644 --- a/cmd/flux/bootstrap_git.go +++ b/cmd/flux/bootstrap_git.go @@ -67,12 +67,13 @@ command will perform an upgrade if needed.`, } type gitFlags struct { - url string - interval time.Duration - path flags.SafeRelativePath - username string - password string - silent bool + url string + interval time.Duration + path flags.SafeRelativePath + username string + password string + silent bool + insecureHttpAllowed bool } const ( @@ -88,6 +89,7 @@ func init() { bootstrapGitCmd.Flags().StringVarP(&gitArgs.username, "username", "u", "git", "basic authentication username") bootstrapGitCmd.Flags().StringVarP(&gitArgs.password, "password", "p", "", "basic authentication password") bootstrapGitCmd.Flags().BoolVarP(&gitArgs.silent, "silent", "s", false, "assumes the deploy key is already setup, skips confirmation") + bootstrapGitCmd.Flags().BoolVar(&gitArgs.insecureHttpAllowed, "allow-insecure-http", false, "allows http git url connections") bootstrapCmd.AddCommand(bootstrapGitCmd) } @@ -269,6 +271,14 @@ func bootstrapGitCmdRun(cmd *cobra.Command, args []string) error { // SSH-agent is attempted. func transportForURL(u *url.URL) (transport.AuthMethod, error) { switch u.Scheme { + case "http": + if !gitArgs.insecureHttpAllowed { + return nil, fmt.Errorf("scheme http is not supported") + } + return &http.BasicAuth{ + Username: gitArgs.username, + Password: gitArgs.password, + }, nil case "https": return &http.BasicAuth{ Username: gitArgs.username, From 0a30bc1024f427e4688af45441bf1b27f3b87e55 Mon Sep 17 00:00:00 2001 From: Vipul Newaskar Date: Thu, 2 Jun 2022 10:27:58 +0530 Subject: [PATCH 125/818] allow http git repos connections while bootstrap Updated misleading error message Signed-off-by: Vipul Newaskar --- cmd/flux/bootstrap_git.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/flux/bootstrap_git.go b/cmd/flux/bootstrap_git.go index 6f540fe5..27515775 100644 --- a/cmd/flux/bootstrap_git.go +++ b/cmd/flux/bootstrap_git.go @@ -273,7 +273,7 @@ func transportForURL(u *url.URL) (transport.AuthMethod, error) { switch u.Scheme { case "http": if !gitArgs.insecureHttpAllowed { - return nil, fmt.Errorf("scheme http is not supported") + return nil, fmt.Errorf("scheme http is insecure, pass --allow-insecure-http=true to allow it") } return &http.BasicAuth{ Username: gitArgs.username, From 355ed94852fb4455090a1c032c293f0736bed479 Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Wed, 1 Jun 2022 11:26:01 +0100 Subject: [PATCH 126/818] check for correct kustomization in multi-doc yaml Signed-off-by: Somtochi Onyekwere --- internal/build/build.go | 16 +++-- internal/build/build_test.go | 58 +++++++++++++++++++ .../local-kustomization/different-name.yaml | 7 +++ .../local-kustomization/multi-doc-valid.yaml | 32 ++++++++++ .../testdata/local-kustomization/no-ns.yaml | 6 ++ .../testdata/local-kustomization/valid.yaml | 7 +++ 6 files changed, 122 insertions(+), 4 deletions(-) create mode 100644 internal/build/testdata/local-kustomization/different-name.yaml create mode 100644 internal/build/testdata/local-kustomization/multi-doc-valid.yaml create mode 100644 internal/build/testdata/local-kustomization/no-ns.yaml create mode 100644 internal/build/testdata/local-kustomization/valid.yaml diff --git a/internal/build/build.go b/internal/build/build.go index 74fd34d7..02a97c30 100644 --- a/internal/build/build.go +++ b/internal/build/build.go @@ -23,6 +23,7 @@ import ( "encoding/json" "errors" "fmt" + "io" "os" "sync" "time" @@ -250,12 +251,19 @@ func (b *Builder) unMarshallKustomization() (*kustomizev1.Kustomization, error) if err != nil { return nil, fmt.Errorf("failed to read kustomization file %s: %w", b.kustomizationFile, err) } - k := &kustomizev1.Kustomization{} decoder := k8syaml.NewYAMLOrJSONDecoder(bytes.NewBuffer(data), len(data)) - err = decoder.Decode(k) - if err != nil { - return nil, fmt.Errorf("failed to unmarshall kustomization file %s: %w", b.kustomizationFile, err) + // check for kustomization in yaml with the same name and namespace + for !(k.Name == b.name && (k.Namespace == b.namespace || k.Namespace == "")) { + err = decoder.Decode(k) + if err != nil { + if err == io.EOF { + return nil, fmt.Errorf("failed find kustomization with name '%s' and namespace '%s' in file '%s'", + b.name, b.namespace, b.kustomizationFile) + } else { + return nil, fmt.Errorf("failed to unmarshall kustomization file %s: %w", b.kustomizationFile, err) + } + } } return k, nil } diff --git a/internal/build/build_test.go b/internal/build/build_test.go index 5e1cfffd..df4a7099 100644 --- a/internal/build/build_test.go +++ b/internal/build/build_test.go @@ -17,6 +17,7 @@ limitations under the License. package build import ( + "strings" "testing" "github.com/google/go-cmp/cmp" @@ -157,3 +158,60 @@ type: kubernetes.io/dockerconfigjson }) } } + +func Test_unMarshallKustomization(t *testing.T) { + tests := []struct { + name string + localKsFile string + wantErr bool + errString string + }{ + { + name: "valid kustomization", + localKsFile: "testdata/local-kustomization/valid.yaml", + }, + { + name: "Multi-doc yaml containing kustomization and other resources", + localKsFile: "testdata/local-kustomization/multi-doc-valid.yaml", + }, + { + name: "no namespace", + localKsFile: "testdata/local-kustomization/no-ns.yaml", + }, + { + name: "kustomization with a different name", + localKsFile: "testdata/local-kustomization/different-name.yaml", + wantErr: true, + errString: "failed find kustomization with name", + }, + } + + b := &Builder{ + name: "podinfo", + namespace: "flux-system", + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + b.kustomizationFile = tt.localKsFile + ks, err := b.unMarshallKustomization() + if !tt.wantErr { + if err != nil { + t.Fatalf("unexpected err '%s'", err) + } + + if ks.Name != b.name && ks.Namespace != b.namespace { + t.Errorf("expected kustomization '%s/%s' to match '%s/%s'", + ks.Name, ks.Namespace, b.name, b.namespace) + } + } else { + if err == nil { + t.Fatal("expected error but got nil") + } + + if !strings.Contains(err.Error(), tt.errString) { + t.Errorf("expected error '%s' to contain string '%s'", err.Error(), tt.errString) + } + } + }) + } +} diff --git a/internal/build/testdata/local-kustomization/different-name.yaml b/internal/build/testdata/local-kustomization/different-name.yaml new file mode 100644 index 00000000..d2c675e8 --- /dev/null +++ b/internal/build/testdata/local-kustomization/different-name.yaml @@ -0,0 +1,7 @@ +apiVersion: kustomize.toolkit.fluxcd.io/v1beta2 +kind: Kustomization +metadata: + name: infra + namespace: flux-system +spec: + path: "./clusters/test-build" diff --git a/internal/build/testdata/local-kustomization/multi-doc-valid.yaml b/internal/build/testdata/local-kustomization/multi-doc-valid.yaml new file mode 100644 index 00000000..d5928463 --- /dev/null +++ b/internal/build/testdata/local-kustomization/multi-doc-valid.yaml @@ -0,0 +1,32 @@ +--- +apiVersion: kustomize.toolkit.fluxcd.io/v1beta2 +kind: Kustomization +metadata: + name: infra-namespace + namespace: flux-system + labels: + component.kutara.io/part-of: definitions +spec: + path: "./k8s/base/infra" + prune: true +--- +--- +apiVersion: source.toolkit.fluxcd.io/v1beta2 +kind: GitRepository +metadata: + name: podinfo + namespace: flux-system +spec: + interval: 30s + ref: + branch: master + url: https://github.com/stefanprodan/podinfo +--- +apiVersion: kustomize.toolkit.fluxcd.io/v1beta2 +kind: Kustomization +metadata: + name: podinfo + namespace: flux-system +spec: + path: "./clusters/test-build" +--- \ No newline at end of file diff --git a/internal/build/testdata/local-kustomization/no-ns.yaml b/internal/build/testdata/local-kustomization/no-ns.yaml new file mode 100644 index 00000000..d7292d24 --- /dev/null +++ b/internal/build/testdata/local-kustomization/no-ns.yaml @@ -0,0 +1,6 @@ +apiVersion: kustomize.toolkit.fluxcd.io/v1beta2 +kind: Kustomization +metadata: + name: podinfo +spec: + path: "./clusters/test-build" diff --git a/internal/build/testdata/local-kustomization/valid.yaml b/internal/build/testdata/local-kustomization/valid.yaml new file mode 100644 index 00000000..41adab26 --- /dev/null +++ b/internal/build/testdata/local-kustomization/valid.yaml @@ -0,0 +1,7 @@ +apiVersion: kustomize.toolkit.fluxcd.io/v1beta2 +kind: Kustomization +metadata: + name: podinfo + namespace: flux-system +spec: + path: "./clusters/test-build" From 9aee262054ba33ec7eed968ed8fddb897aaa5e5e Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Thu, 2 Jun 2022 15:16:02 +0300 Subject: [PATCH 127/818] e2e: Update ARM64 runners to Kubernetes 1.24 Signed-off-by: Stefan Prodan --- .github/runners/prereq.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/runners/prereq.sh b/.github/runners/prereq.sh index 6c20ec3d..186adb8e 100755 --- a/.github/runners/prereq.sh +++ b/.github/runners/prereq.sh @@ -18,8 +18,8 @@ set -eu -KIND_VERSION=0.12.0 -KUBECTL_VERSION=1.23.6 +KIND_VERSION=0.14.0 +KUBECTL_VERSION=1.24.0 KUSTOMIZE_VERSION=4.5.4 HELM_VERSION=3.8.2 GITHUB_RUNNER_VERSION=2.291.1 From 998b763cf955ff47451a5ada64de8be223a9bee8 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Thu, 2 Jun 2022 16:10:31 +0300 Subject: [PATCH 128/818] Add `--kubeconfig-secret-ref` to `flux create ks|hr` Allow specifying the name of the Kubernetes Secret that contains a key with the kubeconfig file for connecting to a remote cluster. Signed-off-by: Stefan Prodan --- cmd/flux/.create_helmrelease.go.swp | Bin 16384 -> 0 bytes cmd/flux/create_helmrelease.go | 36 +++++++++++------- cmd/flux/create_kustomization.go | 57 ++++++++++++++++------------ 3 files changed, 56 insertions(+), 37 deletions(-) delete mode 100644 cmd/flux/.create_helmrelease.go.swp diff --git a/cmd/flux/.create_helmrelease.go.swp b/cmd/flux/.create_helmrelease.go.swp deleted file mode 100644 index d42c707c4f43f19c29f11e07724beb5f80e304ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16384 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 diff --git a/cmd/flux/create_helmrelease.go b/cmd/flux/create_helmrelease.go index 5a5f2c84..b4fdcdf1 100644 --- a/cmd/flux/create_helmrelease.go +++ b/cmd/flux/create_helmrelease.go @@ -109,19 +109,20 @@ var createHelmReleaseCmd = &cobra.Command{ } type helmReleaseFlags struct { - name string - source flags.HelmChartSource - dependsOn []string - chart string - chartVersion string - targetNamespace string - createNamespace bool - valuesFiles []string - valuesFrom flags.HelmReleaseValuesFrom - saName string - crds flags.CRDsPolicy - reconcileStrategy string - chartInterval time.Duration + name string + source flags.HelmChartSource + dependsOn []string + chart string + chartVersion string + targetNamespace string + createNamespace bool + valuesFiles []string + valuesFrom flags.HelmReleaseValuesFrom + saName string + crds flags.CRDsPolicy + reconcileStrategy string + chartInterval time.Duration + kubeConfigSecretRef string } var helmReleaseArgs helmReleaseFlags @@ -140,6 +141,7 @@ func init() { createHelmReleaseCmd.Flags().StringSliceVar(&helmReleaseArgs.valuesFiles, "values", nil, "local path to values.yaml files, also accepts comma-separated values") createHelmReleaseCmd.Flags().Var(&helmReleaseArgs.valuesFrom, "values-from", helmReleaseArgs.valuesFrom.Description()) createHelmReleaseCmd.Flags().Var(&helmReleaseArgs.crds, "crds", helmReleaseArgs.crds.Description()) + createHelmReleaseCmd.Flags().StringVar(&helmReleaseArgs.kubeConfigSecretRef, "kubeconfig-secret-ref", "", "the name of the Kubernetes Secret that contains a key with the kubeconfig file for connecting to a remote cluster") createCmd.AddCommand(createHelmReleaseCmd) } @@ -194,6 +196,14 @@ func createHelmReleaseCmdRun(cmd *cobra.Command, args []string) error { }, } + if helmReleaseArgs.kubeConfigSecretRef != "" { + helmRelease.Spec.KubeConfig = &helmv2.KubeConfig{ + SecretRef: meta.SecretKeyReference{ + Name: helmReleaseArgs.kubeConfigSecretRef, + }, + } + } + if helmReleaseArgs.chartInterval != 0 { helmRelease.Spec.Chart.Spec.Interval = &metav1.Duration{ Duration: helmReleaseArgs.chartInterval, diff --git a/cmd/flux/create_kustomization.go b/cmd/flux/create_kustomization.go index ef55c23c..f808a99f 100644 --- a/cmd/flux/create_kustomization.go +++ b/cmd/flux/create_kustomization.go @@ -42,22 +42,21 @@ var createKsCmd = &cobra.Command{ Use: "kustomization [name]", Aliases: []string{"ks"}, Short: "Create or update a Kustomization resource", - Long: "The kustomization source create command generates a Kustomize resource for a given source.", + Long: "The create command generates a Kustomization resource for a given source.", Example: ` # Create a Kustomization resource from a source at a given path - flux create kustomization contour \ - --source=GitRepository/contour \ - --path="./examples/contour/" \ + flux create kustomization kyverno \ + --source=GitRepository/kyverno \ + --path="./config/release" \ --prune=true \ - --interval=10m \ - --health-check="Deployment/contour.projectcontour" \ - --health-check="DaemonSet/envoy.projectcontour" \ + --interval=60m \ + --wait=true \ --health-check-timeout=3m # Create a Kustomization resource that depends on the previous one - flux create kustomization webapp \ - --depends-on=contour \ - --source=GitRepository/webapp \ - --path="./deploy/overlays/dev" \ + flux create kustomization kyverno-policies \ + --depends-on=kyverno \ + --source=GitRepository/kyverno-policies \ + --path="./policies/flux" \ --prune=true \ --interval=5m @@ -65,7 +64,7 @@ var createKsCmd = &cobra.Command{ flux create kustomization podinfo \ --namespace=default \ --source=GitRepository/podinfo.flux-system \ - --path="./deploy/overlays/dev" \ + --path="./kustomize" \ --prune=true \ --interval=5m @@ -78,18 +77,19 @@ var createKsCmd = &cobra.Command{ } type kustomizationFlags struct { - source flags.KustomizationSource - path flags.SafeRelativePath - prune bool - dependsOn []string - validation string - healthCheck []string - healthTimeout time.Duration - saName string - decryptionProvider flags.DecryptionProvider - decryptionSecret string - targetNamespace string - wait bool + source flags.KustomizationSource + path flags.SafeRelativePath + prune bool + dependsOn []string + validation string + healthCheck []string + healthTimeout time.Duration + saName string + decryptionProvider flags.DecryptionProvider + decryptionSecret string + targetNamespace string + wait bool + kubeConfigSecretRef string } var kustomizationArgs = NewKustomizationFlags() @@ -107,6 +107,7 @@ func init() { createKsCmd.Flags().Var(&kustomizationArgs.decryptionProvider, "decryption-provider", kustomizationArgs.decryptionProvider.Description()) createKsCmd.Flags().StringVar(&kustomizationArgs.decryptionSecret, "decryption-secret", "", "set the Kubernetes secret name that contains the OpenPGP private keys used for sops decryption") createKsCmd.Flags().StringVar(&kustomizationArgs.targetNamespace, "target-namespace", "", "overrides the namespace of all Kustomization objects reconciled by this Kustomization") + createKsCmd.Flags().StringVar(&kustomizationArgs.kubeConfigSecretRef, "kubeconfig-secret-ref", "", "the name of the Kubernetes Secret that contains a key with the kubeconfig file for connecting to a remote cluster") createKsCmd.Flags().MarkDeprecated("validation", "this arg is no longer used, all resources are validated using server-side apply dry-run") createCmd.AddCommand(createKsCmd) @@ -160,6 +161,14 @@ func createKsCmdRun(cmd *cobra.Command, args []string) error { }, } + if kustomizationArgs.kubeConfigSecretRef != "" { + kustomization.Spec.KubeConfig = &kustomizev1.KubeConfig{ + SecretRef: meta.SecretKeyReference{ + Name: kustomizationArgs.kubeConfigSecretRef, + }, + } + } + if len(kustomizationArgs.healthCheck) > 0 && !kustomizationArgs.wait { healthChecks := make([]meta.NamespacedObjectKindReference, 0) for _, w := range kustomizationArgs.healthCheck { From 8576073b9d55c9d47ffec1ac78ec9ad6ec1074c6 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Fri, 3 Jun 2022 12:50:41 +0300 Subject: [PATCH 129/818] monitoring: Add Grafana Loki HR and Flux logs dashboard - add loki-stack HelmRelease to install Loki and Promtail in the monitoring namespace - make the loki-stack HelmRelease depend on kube-prometheus-stack to install Loki's datasource and service monitors in the correct order - add a Grafana dashboard for displaying and filtering the Flux controllers JSON logs Signed-off-by: Stefan Prodan --- .../monitoring/loki-stack/kustomization.yaml | 6 + manifests/monitoring/loki-stack/release.yaml | 40 +++ .../monitoring/loki-stack/repository.yaml | 7 + .../monitoring-config/dashboards/logs.json | 332 ++++++++++++++++++ .../monitoring-config/kustomization.yaml | 1 + 5 files changed, 386 insertions(+) create mode 100644 manifests/monitoring/loki-stack/kustomization.yaml create mode 100644 manifests/monitoring/loki-stack/release.yaml create mode 100644 manifests/monitoring/loki-stack/repository.yaml create mode 100644 manifests/monitoring/monitoring-config/dashboards/logs.json diff --git a/manifests/monitoring/loki-stack/kustomization.yaml b/manifests/monitoring/loki-stack/kustomization.yaml new file mode 100644 index 00000000..d6d43382 --- /dev/null +++ b/manifests/monitoring/loki-stack/kustomization.yaml @@ -0,0 +1,6 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +namespace: monitoring +resources: + - repository.yaml + - release.yaml diff --git a/manifests/monitoring/loki-stack/release.yaml b/manifests/monitoring/loki-stack/release.yaml new file mode 100644 index 00000000..fac56914 --- /dev/null +++ b/manifests/monitoring/loki-stack/release.yaml @@ -0,0 +1,40 @@ +apiVersion: helm.toolkit.fluxcd.io/v2beta1 +kind: HelmRelease +metadata: + name: loki-stack +spec: + interval: 5m + dependsOn: + - name: kube-prometheus-stack + chart: + spec: + version: "2.x" + chart: loki-stack + sourceRef: + kind: HelmRepository + name: grafana-charts + interval: 60m + # https://github.com/grafana/helm-charts/blob/main/charts/loki-stack/values.yaml + # https://github.com/grafana/helm-charts/blob/main/charts/loki/values.yaml + values: + grafana: + enabled: false + sidecar: + datasources: + enabled: true + maxLines: 1000 + promtail: + enabled: true + loki: + enabled: true + isDefault: false + serviceMonitor: + enabled: true + additionalLabels: + app.kubernetes.io/part-of: kube-prometheus-stack + config: + chunk_store_config: + max_look_back_period: 0s + table_manager: + retention_deletes_enabled: true + retention_period: 12h diff --git a/manifests/monitoring/loki-stack/repository.yaml b/manifests/monitoring/loki-stack/repository.yaml new file mode 100644 index 00000000..49f58cdd --- /dev/null +++ b/manifests/monitoring/loki-stack/repository.yaml @@ -0,0 +1,7 @@ +apiVersion: source.toolkit.fluxcd.io/v1beta2 +kind: HelmRepository +metadata: + name: grafana-charts +spec: + interval: 120m0s + url: https://grafana.github.io/helm-charts diff --git a/manifests/monitoring/monitoring-config/dashboards/logs.json b/manifests/monitoring/monitoring-config/dashboards/logs.json new file mode 100644 index 00000000..4d9f58da --- /dev/null +++ b/manifests/monitoring/monitoring-config/dashboards/logs.json @@ -0,0 +1,332 @@ +{ + "__inputs": [ + { + "name": "DS_LOKI", + "label": "Loki", + "description": "", + "type": "datasource", + "pluginId": "loki", + "pluginName": "Loki" + } + ], + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": "-- Grafana --", + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + }, + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "enable": true, + "iconColor": "red", + "name": "flux events", + "target": { + "limit": 100, + "matchAny": false, + "tags": [ + "flux" + ], + "type": "tags" + } + } + ] + }, + "description": "Flux logs collected from Kubernetes, stored in Loki", + "editable": true, + "gnetId": null, + "graphTooltip": 0, + "id": 29, + "iteration": 1653748775696, + "links": [], + "liveNow": false, + "panels": [ + { + "datasource": "${DS_LOKI}", + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "bars", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 4, + "options": { + "legend": { + "calcs": [], + "displayMode": "hidden", + "placement": "bottom" + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": "${DS_LOKI}", + "expr": "sum(count_over_time({namespace=~\"$namespace\", stream=~\"$stream\", app =~\"$controller\"} | json | __error__!=\"JSONParserErr\" | level=~\"$level\" |= \"$query\" [$__interval]))", + "instant": false, + "legendFormat": "Log count", + "range": true, + "refId": "A" + } + ], + "type": "timeseries" + }, + { + "datasource": "${DS_LOKI}", + "description": "Logs from services running in Kubernetes", + "gridPos": { + "h": 25, + "w": 24, + "x": 0, + "y": 4 + }, + "id": 2, + "options": { + "dedupStrategy": "numbers", + "enableLogDetails": false, + "prettifyLogMessage": true, + "showCommonLabels": false, + "showLabels": false, + "showTime": false, + "sortOrder": "Descending", + "wrapLogMessage": false + }, + "targets": [ + { + "datasource": "${DS_LOKI}", + "expr": "{namespace=~\"$namespace\", stream=~\"$stream\", app =~\"$controller\"} | json | __error__!=\"JSONParserErr\" | level=~\"$level\" |= \"$query\"", + "refId": "A" + } + ], + "type": "logs" + } + ], + "refresh": "10s", + "schemaVersion": 36, + "style": "light", + "tags": [ + "flux" + ], + "templating": { + "list": [ + { + "current": { + "selected": false, + "text": "", + "value": "" + }, + "description": "String to search for", + "hide": 0, + "label": "Search Query", + "name": "query", + "options": [ + { + "selected": true, + "text": "", + "value": "" + } + ], + "query": "", + "skipUrlSync": false, + "type": "textbox" + }, + { + "allValue": "info|error", + "current": { + "selected": false, + "text": "All", + "value": "$__all" + }, + "hide": 0, + "includeAll": true, + "multi": false, + "name": "level", + "options": [ + { + "selected": true, + "text": "All", + "value": "$__all" + }, + { + "selected": false, + "text": "info", + "value": "info" + }, + { + "selected": false, + "text": "error", + "value": "error" + } + ], + "query": "info,error", + "queryValue": "", + "skipUrlSync": false, + "type": "custom" + }, + { + "allValue": ".+", + "current": { + "selected": true, + "text": [ + "All" + ], + "value": [ + "$__all" + ] + }, + "datasource": "${DS_LOKI}", + "definition": "label_values(app)", + "hide": 0, + "includeAll": true, + "multi": true, + "name": "controller", + "options": [], + "query": "label_values(app)", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "allValue": ".+", + "current": { + "selected": true, + "text": [ + "flux-system" + ], + "value": [ + "flux-system" + ] + }, + "datasource": "${DS_LOKI}", + "definition": "label_values(namespace)", + "hide": 0, + "includeAll": true, + "multi": true, + "name": "namespace", + "options": [], + "query": "label_values(namespace)", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "allValue": ".+", + "current": { + "selected": false, + "text": "All", + "value": "$__all" + }, + "datasource": "${DS_LOKI}", + "definition": "label_values(stream)", + "hide": 0, + "includeAll": true, + "multi": true, + "name": "stream", + "options": [], + "query": "label_values(stream)", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "Loki", + "value": "Loki" + }, + "hide": 0, + "includeAll": false, + "label": "Datasource", + "multi": false, + "name": "DS_LOKI", + "options": [], + "query": "loki", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "type": "datasource" + } + ] + }, + "time": { + "from": "now-6h", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "Flux Logs", + "uid": "flux-logs", + "version": 2 +} diff --git a/manifests/monitoring/monitoring-config/kustomization.yaml b/manifests/monitoring/monitoring-config/kustomization.yaml index 9f036a57..f35f7dbb 100644 --- a/manifests/monitoring/monitoring-config/kustomization.yaml +++ b/manifests/monitoring/monitoring-config/kustomization.yaml @@ -8,6 +8,7 @@ configMapGenerator: files: - dashboards/control-plane.json - dashboards/cluster.json + - dashboards/logs.json options: labels: grafana_dashboard: "1" From 25d065c21177a9a8474ebcc527531439723035f5 Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Fri, 3 Jun 2022 14:01:51 +0000 Subject: [PATCH 130/818] Update toolkit components - helm-controller to v0.22.0 https://github.com/fluxcd/helm-controller/blob/v0.22.0/CHANGELOG.md - source-controller to v0.25.2 https://github.com/fluxcd/source-controller/blob/v0.25.2/CHANGELOG.md - image-automation-controller to v0.23.0 https://github.com/fluxcd/image-automation-controller/blob/v0.23.0/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 6 +++--- go.sum | 12 ++++++------ manifests/bases/helm-controller/kustomization.yaml | 4 ++-- .../image-automation-controller/kustomization.yaml | 4 ++-- manifests/bases/source-controller/kustomization.yaml | 4 ++-- manifests/crds/kustomization.yaml | 6 +++--- 6 files changed, 18 insertions(+), 18 deletions(-) diff --git a/go.mod b/go.mod index bc1f13e5..7f3872e1 100644 --- a/go.mod +++ b/go.mod @@ -7,8 +7,8 @@ require ( github.com/ProtonMail/go-crypto v0.0.0-20220517143526-88bb52951d5b github.com/cyphar/filepath-securejoin v0.2.3 github.com/fluxcd/go-git-providers v0.6.0 - github.com/fluxcd/helm-controller/api v0.21.0 - github.com/fluxcd/image-automation-controller/api v0.22.1 + github.com/fluxcd/helm-controller/api v0.22.0 + github.com/fluxcd/image-automation-controller/api v0.23.0 github.com/fluxcd/image-reflector-controller/api v0.19.0 github.com/fluxcd/kustomize-controller/api v0.26.0 github.com/fluxcd/notification-controller/api v0.24.0 @@ -19,7 +19,7 @@ require ( github.com/fluxcd/pkg/ssh v0.4.1 github.com/fluxcd/pkg/untar v0.1.0 github.com/fluxcd/pkg/version v0.1.0 - github.com/fluxcd/source-controller/api v0.25.0 + github.com/fluxcd/source-controller/api v0.25.2 github.com/go-git/go-git/v5 v5.4.2 github.com/gonvenience/bunt v1.3.3 github.com/gonvenience/ytbx v1.4.4 diff --git a/go.sum b/go.sum index c895b3ae..6fe2cd85 100644 --- a/go.sum +++ b/go.sum @@ -191,10 +191,10 @@ github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYF github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fluxcd/go-git-providers v0.6.0 h1:XJc3MTYFpuahBSoKTVxmH9OBPCeIyvYoQkTjTqa3fH4= github.com/fluxcd/go-git-providers v0.6.0/go.mod h1:UMFHnMCIO9CBpEln7ZsArEWyXSNxTpm76fyQxUmClrc= -github.com/fluxcd/helm-controller/api v0.21.0 h1:MWvVzz6u9jR1aE7j1YaSEjBehw0zMndkODnjAE0/1nQ= -github.com/fluxcd/helm-controller/api v0.21.0/go.mod h1:cgP5ZR46HIhC8phUfx4Z60He9zNuIHbH3r8YEVl5ip8= -github.com/fluxcd/image-automation-controller/api v0.22.1 h1:7OtqjJU2s4GF0d6z35G+Ss4Ugvuo/vv8sQsxEX9embA= -github.com/fluxcd/image-automation-controller/api v0.22.1/go.mod h1:SKasiuSIW7+NKi6Sb4iuDa+AJR8wJS8mapZETR/PGTI= +github.com/fluxcd/helm-controller/api v0.22.0 h1:e6yW+TV+UKssXaYCyoDKzXpNuFDy5TiHxj+9OJ714cw= +github.com/fluxcd/helm-controller/api v0.22.0/go.mod h1:YpRB4ycayD4ryDKxNZU3Y+lydvFr4HZsgh0b28xJcZc= +github.com/fluxcd/image-automation-controller/api v0.23.0 h1:cIKb//6VeAUGMz0A7ugbCWkOvpXFWhEZj2PH/eEzbTQ= +github.com/fluxcd/image-automation-controller/api v0.23.0/go.mod h1:YnvSmTzFFleSAkZJ9qOqmYQERmDHHrzB9KJ55Qfghvg= github.com/fluxcd/image-reflector-controller/api v0.19.0 h1:8R9ppgKzagFKy04Z/+IG8fjQrPn71xet+w7sTXPudpc= github.com/fluxcd/image-reflector-controller/api v0.19.0/go.mod h1:7eyHh5yq/2vm6eg70tfeSn7ZfbgMrrmoSJEeBMNGDDs= github.com/fluxcd/kustomize-controller/api v0.26.0 h1:B/KQKzMXte0nj3P1D5whQTb5btpuHfcHV4J25eyqbIM= @@ -219,8 +219,8 @@ github.com/fluxcd/pkg/untar v0.1.0 h1:k97V/xV5hFrAkIkVPuv5AVhyxh1ZzzAKba/lbDfGo6 github.com/fluxcd/pkg/untar v0.1.0/go.mod h1:aGswNyzB1mlz/T/kpOS58mITBMxMKc9tlJBH037A2HY= github.com/fluxcd/pkg/version v0.1.0 h1:v+SmCanmCB5Tj2Cx9TXlj+kNRfPGbAvirkeqsp7ZEAQ= github.com/fluxcd/pkg/version v0.1.0/go.mod h1:V7Z/w8dxLQzv0FHqa5ox5TeyOd2zOd49EeuWFgnwyj4= -github.com/fluxcd/source-controller/api v0.25.0 h1:+uL+hQb/6h2MHuE9/Iq054TrDWF70puAuWBcoBrZK5M= -github.com/fluxcd/source-controller/api v0.25.0/go.mod h1:tuMrqHHpRt7mxdLeRXGIMtTKAMufLwLTm5uXkEOJWFw= +github.com/fluxcd/source-controller/api v0.25.2 h1:RqCOlqLixPkdGzR8MwSZwp7FK60kZZY/632ohQM9baQ= +github.com/fluxcd/source-controller/api v0.25.2/go.mod h1:tuMrqHHpRt7mxdLeRXGIMtTKAMufLwLTm5uXkEOJWFw= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/form3tech-oss/jwt-go v3.2.3+incompatible h1:7ZaBxOI7TMoYBfyA3cQHErNNyAWIKUMIwqxEtgHOs5c= diff --git a/manifests/bases/helm-controller/kustomization.yaml b/manifests/bases/helm-controller/kustomization.yaml index 9c4ecaae..5ba1ecc9 100644 --- a/manifests/bases/helm-controller/kustomization.yaml +++ b/manifests/bases/helm-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/helm-controller/releases/download/v0.21.0/helm-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.21.0/helm-controller.deployment.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.22.0/helm-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.22.0/helm-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/image-automation-controller/kustomization.yaml b/manifests/bases/image-automation-controller/kustomization.yaml index 151efaaf..4d4d436c 100644 --- a/manifests/bases/image-automation-controller/kustomization.yaml +++ b/manifests/bases/image-automation-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.22.1/image-automation-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.22.1/image-automation-controller.deployment.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.23.0/image-automation-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.23.0/image-automation-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index 72ce57dc..15f4a584 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.25.0/source-controller.crds.yaml -- https://github.com/fluxcd/source-controller/releases/download/v0.25.0/source-controller.deployment.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.25.2/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.25.2/source-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index 771ac842..26e16178 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -1,9 +1,9 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.25.0/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.25.2/source-controller.crds.yaml - https://github.com/fluxcd/kustomize-controller/releases/download/v0.26.0/kustomize-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.21.0/helm-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.22.0/helm-controller.crds.yaml - https://github.com/fluxcd/notification-controller/releases/download/v0.24.0/notification-controller.crds.yaml - https://github.com/fluxcd/image-reflector-controller/releases/download/v0.19.0/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.22.1/image-automation-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.23.0/image-automation-controller.crds.yaml From f1f4cc007aadf645af48504a4551e0bba8b6ce47 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Fri, 3 Jun 2022 17:51:43 +0300 Subject: [PATCH 131/818] Update dependencies - sync tests/azure with main go.mod - update homeport/dyff to v1.5.4 - update k8s.io/apiextensions-apiserver to v0.24.1 Signed-off-by: Stefan Prodan --- go.mod | 14 ++++---- go.sum | 36 +++++++++---------- tests/azure/go.mod | 24 ++++++------- tests/azure/go.sum | 86 +++++++++++++++++----------------------------- 4 files changed, 66 insertions(+), 94 deletions(-) diff --git a/go.mod b/go.mod index 7f3872e1..1e37eaf0 100644 --- a/go.mod +++ b/go.mod @@ -21,12 +21,12 @@ require ( github.com/fluxcd/pkg/version v0.1.0 github.com/fluxcd/source-controller/api v0.25.2 github.com/go-git/go-git/v5 v5.4.2 - github.com/gonvenience/bunt v1.3.3 + github.com/gonvenience/bunt v1.3.4 github.com/gonvenience/ytbx v1.4.4 github.com/google/go-cmp v0.5.8 github.com/google/go-containerregistry v0.9.0 github.com/hashicorp/go-multierror v1.1.1 - github.com/homeport/dyff v1.5.3 + github.com/homeport/dyff v1.5.4 github.com/lucasb-eyer/go-colorful v1.2.0 github.com/manifoldco/promptui v0.9.0 github.com/mattn/go-shellwords v1.0.12 @@ -37,11 +37,11 @@ require ( golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e golang.org/x/term v0.0.0-20220526004731-065cf7ba2467 k8s.io/api v0.24.1 - k8s.io/apiextensions-apiserver v0.24.0 + k8s.io/apiextensions-apiserver v0.24.1 k8s.io/apimachinery v0.24.1 - k8s.io/cli-runtime v0.24.0 + k8s.io/cli-runtime v0.24.1 k8s.io/client-go v0.24.1 - k8s.io/kubectl v0.24.0 + k8s.io/kubectl v0.24.1 sigs.k8s.io/cli-utils v0.31.1 sigs.k8s.io/controller-runtime v0.11.2 sigs.k8s.io/kustomize/api v0.11.5 @@ -50,7 +50,7 @@ require ( ) // Fix CVE-2022-28948 -replace gopkg.in/yaml.v3 => gopkg.in/yaml.v3 v3.0.0 +replace gopkg.in/yaml.v3 => gopkg.in/yaml.v3 v3.0.1 require ( cloud.google.com/go v0.99.0 // indirect @@ -160,7 +160,7 @@ require ( gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect - gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect k8s.io/component-base v0.24.1 // indirect k8s.io/klog/v2 v2.60.1 // indirect k8s.io/kube-openapi v0.0.0-20220401212409-b28bf2818661 // indirect diff --git a/go.sum b/go.sum index 6fe2cd85..ac75f9f9 100644 --- a/go.sum +++ b/go.sum @@ -315,8 +315,8 @@ github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golangplus/testing v0.0.0-20180327235837-af21d9c3145e/go.mod h1:0AA//k/eakGydO4jKRoRL2j92ZKSzTgj9tclaCrvXHk= -github.com/gonvenience/bunt v1.3.3 h1:a751qSbJIgWGbazGYr9hyuudOg7wMHh2m4JjE3tfURE= -github.com/gonvenience/bunt v1.3.3/go.mod h1:XjlODZ8sTL9jQs9c4Kj1ZBTrHSsbUGdoRy7ROCtw8nU= +github.com/gonvenience/bunt v1.3.4 h1:Row599Ohja2BPooaqd1tHYdTAKu6SWq7W/UeakTXddM= +github.com/gonvenience/bunt v1.3.4/go.mod h1:j8eqHLBo8eWCCYuc34oFdlgyxL1rZ4ywYz4BZa4b09w= github.com/gonvenience/neat v1.3.10 h1:gHrVkQAvbUsZgnpEglPwsAJLPqSFQxOgfbB3FWLhmUo= github.com/gonvenience/neat v1.3.10/go.mod h1:SenKN3l5LkhNYKXTq6Ibvq64wE9O2rxir+YEtqdi4jc= github.com/gonvenience/term v1.0.2 h1:qKa2RydbWIrabGjR/fegJwpW5m+JvUwFL8mLhHzDXn0= @@ -430,8 +430,8 @@ github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= -github.com/homeport/dyff v1.5.3 h1:42jm/nKaMCad56VDahMAZT4fuZTk0SED4oB/Ial6Ks4= -github.com/homeport/dyff v1.5.3/go.mod h1:tTVEEcqIS3XPocLfR4rdgQYV1VlKMuM5R3Dx4Q0LMmU= +github.com/homeport/dyff v1.5.4 h1:v+C6EcBQYMWXfeDRPcQhImxQy0CdbRENWPEcHX39HJ0= +github.com/homeport/dyff v1.5.4/go.mod h1:bWhjPpTUbco6MxEqTB5qrYtvX+Y59ZIPh9K1N4cUwh0= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= 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= @@ -1208,8 +1208,8 @@ gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -gopkg.in/yaml.v3 v3.0.0 h1:hjy8E9ON/egN1tAYqKb61G10WtihqetD4sz2H+8nIeA= -gopkg.in/yaml.v3 v3.0.0/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= gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= gotest.tools/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0= gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8= @@ -1220,25 +1220,21 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -k8s.io/api v0.24.0/go.mod h1:5Jl90IUrJHUJYEMANRURMiVvJ0g7Ax7r3R1bqO8zx8I= k8s.io/api v0.24.1 h1:BjCMRDcyEYz03joa3K1+rbshwh1Ay6oB53+iUx2H8UY= k8s.io/api v0.24.1/go.mod h1:JhoOvNiLXKTPQ60zh2g0ewpA+bnEYf5q44Flhquh4vQ= -k8s.io/apiextensions-apiserver v0.24.0 h1:JfgFqbA8gKJ/uDT++feAqk9jBIwNnL9YGdQvaI9DLtY= -k8s.io/apiextensions-apiserver v0.24.0/go.mod h1:iuVe4aEpe6827lvO6yWQVxiPSpPoSKVjkq+MIdg84cM= -k8s.io/apimachinery v0.24.0/go.mod h1:82Bi4sCzVBdpYjyI4jY6aHX+YCUchUIrZrXKedjd2UM= +k8s.io/apiextensions-apiserver v0.24.1 h1:5yBh9+ueTq/kfnHQZa0MAo6uNcPrtxPMpNQgorBaKS0= +k8s.io/apiextensions-apiserver v0.24.1/go.mod h1:A6MHfaLDGfjOc/We2nM7uewD5Oa/FnEbZ6cD7g2ca4Q= k8s.io/apimachinery v0.24.1 h1:ShD4aDxTQKN5zNf8K1RQ2u98ELLdIW7jEnlO9uAMX/I= k8s.io/apimachinery v0.24.1/go.mod h1:82Bi4sCzVBdpYjyI4jY6aHX+YCUchUIrZrXKedjd2UM= -k8s.io/apiserver v0.24.0/go.mod h1:WFx2yiOMawnogNToVvUYT9nn1jaIkMKj41ZYCVycsBA= -k8s.io/cli-runtime v0.24.0 h1:ot3Qf49T852uEyNApABO1UHHpFIckKK/NqpheZYN2gM= -k8s.io/cli-runtime v0.24.0/go.mod h1:9XxoZDsEkRFUThnwqNviqzljtT/LdHtNWvcNFrAXl0A= -k8s.io/client-go v0.24.0/go.mod h1:VFPQET+cAFpYxh6Bq6f4xyMY80G6jKKktU6G0m00VDw= +k8s.io/apiserver v0.24.1/go.mod h1:dQWNMx15S8NqJMp0gpYfssyvhYnkilc1LpExd/dkLh0= +k8s.io/cli-runtime v0.24.1 h1:IW6L8dRBq+pPTzvXcB+m/hOabzbqXy57Bqo4XxmW7DY= +k8s.io/cli-runtime v0.24.1/go.mod h1:14aVvCTqkA7dNXY51N/6hRY3GUjchyWDOwW84qmR3bs= k8s.io/client-go v0.24.1 h1:w1hNdI9PFrzu3OlovVeTnf4oHDt+FJLd9Ndluvnb42E= k8s.io/client-go v0.24.1/go.mod h1:f1kIDqcEYmwXS/vTbbhopMUbhKp2JhOeVTfxgaCIlF8= -k8s.io/code-generator v0.24.0/go.mod h1:dpVhs00hTuTdTY6jvVxvTFCk6gSMrtfRydbhZwHI15w= -k8s.io/component-base v0.24.0/go.mod h1:Dgazgon0i7KYUsS8krG8muGiMVtUZxG037l1MKyXgrA= +k8s.io/code-generator v0.24.1/go.mod h1:dpVhs00hTuTdTY6jvVxvTFCk6gSMrtfRydbhZwHI15w= k8s.io/component-base v0.24.1 h1:APv6W/YmfOWZfo+XJ1mZwep/f7g7Tpwvdbo9CQLDuts= k8s.io/component-base v0.24.1/go.mod h1:DW5vQGYVCog8WYpNob3PMmmsY8A3L9QZNg4j/dV3s38= -k8s.io/component-helpers v0.24.0/go.mod h1:Q2SlLm4h6g6lPTC9GMMfzdywfLSvJT2f1hOnnjaWD8c= +k8s.io/component-helpers v0.24.1/go.mod h1:q5Z1pWV/QfX9ThuNeywxasiwkLw9KsR4Q9TAOdb/Y3s= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= k8s.io/gengo v0.0.0-20211129171323-c02415ce4185/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= @@ -1250,9 +1246,9 @@ k8s.io/kube-openapi v0.0.0-20210421082810-95288971da7e/go.mod h1:vHXdDvt9+2spS2R k8s.io/kube-openapi v0.0.0-20220328201542-3ee0da9b0b42/go.mod h1:Z/45zLw8lUo4wdiUkI+v/ImEGAvu3WatcZl3lPMR4Rk= k8s.io/kube-openapi v0.0.0-20220401212409-b28bf2818661 h1:nqYOUleKLC/0P1zbU29F5q6aoezM6MOAVz+iyfQbZ5M= k8s.io/kube-openapi v0.0.0-20220401212409-b28bf2818661/go.mod h1:daOouuuwd9JXpv1L7Y34iV3yf6nxzipkKMWWlqlvK9M= -k8s.io/kubectl v0.24.0 h1:nA+WtMLVdXUs4wLogGd1mPTAesnLdBpCVgCmz3I7dXo= -k8s.io/kubectl v0.24.0/go.mod h1:pdXkmCyHiRTqjYfyUJiXtbVNURhv0/Q1TyRhy2d5ic0= -k8s.io/metrics v0.24.0/go.mod h1:jrLlFGdKl3X+szubOXPG0Lf2aVxuV3QJcbsgVRAM6fI= +k8s.io/kubectl v0.24.1 h1:gxcjHrnwntV1c+G/BHWVv4Mtk8CQJ0WTraElLBG+ddk= +k8s.io/kubectl v0.24.1/go.mod h1:NzFqQ50B004fHYWOfhHTrAm4TY6oGF5FAAL13LEaeUI= +k8s.io/metrics v0.24.1/go.mod h1:vMs5xpcOyY9D+/XVwlaw8oUHYCo6JTGBCZfyXOOkAhE= k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9 h1:HNSDgDCrr/6Ly3WEGKZftiE7IY19Vz2GdbOCyI4qqhc= k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= diff --git a/tests/azure/go.mod b/tests/azure/go.mod index 4dd33808..4d058c51 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -4,28 +4,28 @@ go 1.17 require ( github.com/Azure/azure-event-hubs-go/v3 v3.3.18 - github.com/fluxcd/helm-controller/api v0.21.0 - github.com/fluxcd/image-automation-controller/api v0.22.1 - github.com/fluxcd/image-reflector-controller/api v0.18.0 - github.com/fluxcd/kustomize-controller/api v0.25.0 - github.com/fluxcd/notification-controller/api v0.23.5 + github.com/fluxcd/helm-controller/api v0.22.0 + github.com/fluxcd/image-automation-controller/api v0.23.0 + github.com/fluxcd/image-reflector-controller/api v0.19.0 + github.com/fluxcd/kustomize-controller/api v0.26.0 + github.com/fluxcd/notification-controller/api v0.24.0 github.com/fluxcd/pkg/apis/meta v0.14.1 github.com/fluxcd/pkg/runtime v0.16.1 - github.com/fluxcd/source-controller/api v0.25.0 + github.com/fluxcd/source-controller/api v0.25.2 github.com/hashicorp/terraform-exec v0.15.0 github.com/libgit2/git2go/v31 v31.7.9 github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 github.com/stretchr/testify v1.7.1 github.com/whilp/git-urls v1.0.0 go.uber.org/multierr v1.8.0 - k8s.io/api v0.24.0 - k8s.io/apimachinery v0.24.0 - k8s.io/client-go v0.24.0 + k8s.io/api v0.24.1 + k8s.io/apimachinery v0.24.1 + k8s.io/client-go v0.24.1 sigs.k8s.io/controller-runtime v0.11.2 ) // Fix CVE-2022-28948 -replace gopkg.in/yaml.v3 => gopkg.in/yaml.v3 v3.0.0 +replace gopkg.in/yaml.v3 => gopkg.in/yaml.v3 v3.0.1 require ( cloud.google.com/go v0.81.0 // indirect @@ -52,7 +52,7 @@ require ( github.com/emicklei/go-restful v2.9.5+incompatible // indirect github.com/evanphx/json-patch v4.12.0+incompatible // indirect github.com/fluxcd/pkg/apis/acl v0.0.3 // indirect - github.com/fluxcd/pkg/apis/kustomize v0.3.3 // indirect + github.com/fluxcd/pkg/apis/kustomize v0.4.1 // indirect github.com/form3tech-oss/jwt-go v3.2.3+incompatible // indirect github.com/fsnotify/fsnotify v1.5.1 // indirect github.com/go-logr/logr v1.2.3 // indirect @@ -123,7 +123,7 @@ require ( gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect - k8s.io/apiextensions-apiserver v0.23.6 // indirect + k8s.io/apiextensions-apiserver v0.24.0 // indirect k8s.io/component-base v0.24.0 // indirect k8s.io/klog/v2 v2.60.1 // indirect k8s.io/kube-openapi v0.0.0-20220328201542-3ee0da9b0b42 // indirect diff --git a/tests/azure/go.sum b/tests/azure/go.sum index 1c648cae..fde6ef34 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -50,7 +50,6 @@ github.com/Azure/azure-sdk-for-go v51.1.0+incompatible/go.mod h1:9XXNKU+eRnpl9mo github.com/Azure/azure-storage-blob-go v0.6.0/go.mod h1:oGfmITT1V6x//CswqY2gtAHND+xIP64/qL7a5QJix0Y= github.com/Azure/go-amqp v0.17.0 h1:HHXa3149nKrI0IZwyM7DRcRy5810t9ZICDutn4BYzj4= github.com/Azure/go-amqp v0.17.0/go.mod h1:9YJ3RhxRT1gquYnzpZO1vcYMMpAdJT+QEg6fwmw9Zlg= -github.com/Azure/go-ansiterm v0.0.0-20210608223527-2377c96fe795/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs= github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= @@ -134,8 +133,6 @@ github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1U github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= -github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= -github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/certifi/gocertifi v0.0.0-20191021191039-0944d244cd40/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= @@ -197,26 +194,26 @@ github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/fluxcd/helm-controller/api v0.21.0 h1:MWvVzz6u9jR1aE7j1YaSEjBehw0zMndkODnjAE0/1nQ= -github.com/fluxcd/helm-controller/api v0.21.0/go.mod h1:cgP5ZR46HIhC8phUfx4Z60He9zNuIHbH3r8YEVl5ip8= -github.com/fluxcd/image-automation-controller/api v0.22.1 h1:7OtqjJU2s4GF0d6z35G+Ss4Ugvuo/vv8sQsxEX9embA= -github.com/fluxcd/image-automation-controller/api v0.22.1/go.mod h1:SKasiuSIW7+NKi6Sb4iuDa+AJR8wJS8mapZETR/PGTI= -github.com/fluxcd/image-reflector-controller/api v0.18.0 h1:31KhS4IXIcTIK1lrSgsLZTmstM2uMZj9PTUqiWAoVcY= -github.com/fluxcd/image-reflector-controller/api v0.18.0/go.mod h1:ilumM3a/k0+7Xpq13fsh5zVmDLy7du61j37NAEuKOI0= -github.com/fluxcd/kustomize-controller/api v0.25.0 h1:/qQ+4Yy1/H9Z1N/AEBIVEHy180WGTPL9UKDICMdxbjg= -github.com/fluxcd/kustomize-controller/api v0.25.0/go.mod h1:W9EDKlibtbGyF3lUnb16u3eXHYZ2awAvyR8b/PPrNkY= -github.com/fluxcd/notification-controller/api v0.23.5 h1:yVx3AXSIL52TwqIxTki3MGRPFLsnBW5ozNMCIX0uRKQ= -github.com/fluxcd/notification-controller/api v0.23.5/go.mod h1:+TZuRS0YbiKxVJYGWDTSG6sL8F0V8+7zK+y14EvV818= +github.com/fluxcd/helm-controller/api v0.22.0 h1:e6yW+TV+UKssXaYCyoDKzXpNuFDy5TiHxj+9OJ714cw= +github.com/fluxcd/helm-controller/api v0.22.0/go.mod h1:YpRB4ycayD4ryDKxNZU3Y+lydvFr4HZsgh0b28xJcZc= +github.com/fluxcd/image-automation-controller/api v0.23.0 h1:cIKb//6VeAUGMz0A7ugbCWkOvpXFWhEZj2PH/eEzbTQ= +github.com/fluxcd/image-automation-controller/api v0.23.0/go.mod h1:YnvSmTzFFleSAkZJ9qOqmYQERmDHHrzB9KJ55Qfghvg= +github.com/fluxcd/image-reflector-controller/api v0.19.0 h1:8R9ppgKzagFKy04Z/+IG8fjQrPn71xet+w7sTXPudpc= +github.com/fluxcd/image-reflector-controller/api v0.19.0/go.mod h1:7eyHh5yq/2vm6eg70tfeSn7ZfbgMrrmoSJEeBMNGDDs= +github.com/fluxcd/kustomize-controller/api v0.26.0 h1:B/KQKzMXte0nj3P1D5whQTb5btpuHfcHV4J25eyqbIM= +github.com/fluxcd/kustomize-controller/api v0.26.0/go.mod h1:ybeF/mSNgAL1sgXav1+Z5zDHfnisOA8Re3hgjHWhcJ8= +github.com/fluxcd/notification-controller/api v0.24.0 h1:pvLcCD1HT+x0Hup8VLfDrVGFDK33oJKNC7WX6mtEEh0= +github.com/fluxcd/notification-controller/api v0.24.0/go.mod h1:pld1fyodxqdWPBr+Ez+kTixmtmO2o3o0I5Zf5wQDHGM= github.com/fluxcd/pkg/apis/acl v0.0.3 h1:Lw0ZHdpnO4G7Zy9KjrzwwBmDZQuy4qEjaU/RvA6k1lc= github.com/fluxcd/pkg/apis/acl v0.0.3/go.mod h1:XPts6lRJ9C9fIF9xVWofmQwftvhY25n1ps7W9xw0XLU= -github.com/fluxcd/pkg/apis/kustomize v0.3.3 h1:bPN29SdVzWl0yhgivuf/83IAe2R6vUuDVcB3LzyVU8E= -github.com/fluxcd/pkg/apis/kustomize v0.3.3/go.mod h1:5HTOFZfQFVMMqR2rvuxpbZhpb+sQpcTT6RCQZOhjFzA= +github.com/fluxcd/pkg/apis/kustomize v0.4.1 h1:YgIF9TJ23pH66W/gYlEu+DeH1pU3tS4xYlRc5AQzk58= +github.com/fluxcd/pkg/apis/kustomize v0.4.1/go.mod h1:U9rfSgDHaQd74PgPKt9DprtuzT+i1m18zlHxatq7c5Y= github.com/fluxcd/pkg/apis/meta v0.14.1 h1:lPDs9yV67DnwalHPb13bbnDkAatALfUiAMRHjUm4UBw= github.com/fluxcd/pkg/apis/meta v0.14.1/go.mod h1:1uJkTJGSZWrZxL5PFpx1IxGLrFmT1Cd0C2fFWrbv77I= github.com/fluxcd/pkg/runtime v0.16.1 h1:WU1vNZz4TAzmATQ/tl2zB/FX6GIUTgYeBn/G5RuTA2c= github.com/fluxcd/pkg/runtime v0.16.1/go.mod h1:cgVJkOXCg9OmrIUGklf/0UtV28MNzkuoBJhaEQICT6E= -github.com/fluxcd/source-controller/api v0.25.0 h1:+uL+hQb/6h2MHuE9/Iq054TrDWF70puAuWBcoBrZK5M= -github.com/fluxcd/source-controller/api v0.25.0/go.mod h1:tuMrqHHpRt7mxdLeRXGIMtTKAMufLwLTm5uXkEOJWFw= +github.com/fluxcd/source-controller/api v0.25.2 h1:RqCOlqLixPkdGzR8MwSZwp7FK60kZZY/632ohQM9baQ= +github.com/fluxcd/source-controller/api v0.25.2/go.mod h1:tuMrqHHpRt7mxdLeRXGIMtTKAMufLwLTm5uXkEOJWFw= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/form3tech-oss/jwt-go v3.2.3+incompatible h1:7ZaBxOI7TMoYBfyA3cQHErNNyAWIKUMIwqxEtgHOs5c= @@ -309,7 +306,7 @@ github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiu github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= -github.com/google/cel-go v0.9.0/go.mod h1:U7ayypeSkw23szu4GaQTPJGx66c20mx8JklMSxrmI1w= +github.com/google/cel-go v0.10.1/go.mod h1:U7ayypeSkw23szu4GaQTPJGx66c20mx8JklMSxrmI1w= github.com/google/cel-spec v0.6.0/go.mod h1:Nwjgxy5CbjlPrtCWjeDjUyKMl8w41YBYGjsyDdqk0xA= github.com/google/gnostic v0.5.7-v3refs h1:FhTMOKj2VhjpouxvWJAV1TL304uMlb9zcDqkl6cEI54= github.com/google/gnostic v0.5.7-v3refs/go.mod h1:73MKFl6jIHelAJNaBGFzt3SPtZULs9dYrGFt8OiIsHQ= @@ -357,8 +354,6 @@ github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+ github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+Tv3SM= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2cUuW7uA/OeU= -github.com/googleapis/gnostic v0.5.5/go.mod h1:7+EbHbldMins07ALC74bsA81Ovc97DwqyJO1AENw9kA= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= @@ -469,7 +464,6 @@ github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LE github.com/libgit2/git2go/v31 v31.7.9 h1:RUDiYm7+i3GY414acI31oDD8x5P0PZyWeZZfwpPuynE= github.com/libgit2/git2go/v31 v31.7.9/go.mod h1:c/rkJcBcUFx6wHaT++UwNpKvIsmPNqCeQ/vzO4DrEec= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.7.6 h1:8yTIVnZgCoiM1TgqoeTl+LfU5Jg6/xL3QhGQnimLYnA= @@ -503,7 +497,6 @@ github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RR github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= -github.com/moby/term v0.0.0-20210610120745-9d4ed1856297/go.mod h1:vgPCkQMyxTZ7IDy8SXRufE172gr8+K/JE/7hHFxHW3A= github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= @@ -534,7 +527,6 @@ github.com/onsi/gomega v1.19.0 h1:4ieX6qQjPP/BfC3mpsAtIGGlxTWPeA3Inl/7DtXw1tw= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -562,7 +554,6 @@ github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y8 github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.28.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/common v0.32.1 h1:hWIdL3N2HoUx3B8j3YN9mWor0qhY/NlEKZEaXxuIRh4= github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= @@ -601,17 +592,13 @@ github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo= -github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= -github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -641,7 +628,6 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/zclconf/go-cty v1.2.0/go.mod h1:hOPWgoHbaTUnI5k4D2ld+GRpFJSCe6bCM7m1q/N4PQ8= github.com/zclconf/go-cty v1.9.1/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uUAzyuvAk= @@ -651,9 +637,12 @@ github.com/zclconf/go-cty-debug v0.0.0-20191215020915-b22d67c1ba0b/go.mod h1:ZRK go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= +go.etcd.io/etcd/api/v3 v3.5.1/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= +go.etcd.io/etcd/client/pkg/v3 v3.5.1/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= go.etcd.io/etcd/client/v3 v3.5.0/go.mod h1:AIKXXVX/DQXtfTEqBryiLTUXwON+GuvO6Z7lLS/oTh0= +go.etcd.io/etcd/client/v3 v3.5.1/go.mod h1:OnjH4M8OnAotwaB2l9bVgZzRFKru7/ZMoS46OtKyd3Q= go.etcd.io/etcd/pkg/v3 v3.5.0/go.mod h1:UzJGatBQ1lXChBkQF0AuAtkRQMYnHubxAEYIrC3MSsE= go.etcd.io/etcd/raft/v3 v3.5.0/go.mod h1:UFOHSIvO/nKwd4lhkwabrTD3cqW5yVyYYf/KlD00Szc= go.etcd.io/etcd/server/v3 v3.5.0/go.mod h1:3Ah5ruV+M+7RZr0+Y/5mNLwC+eQlni+mQmOVdCRJoS4= @@ -777,11 +766,9 @@ golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLd golang.org/x/net v0.0.0-20210326060303-6b1517762897/go.mod h1:uSPa2vr4CLtc/ILN5odXGNXS6mhrKVzTaCXzk9m6W3k= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210825183410-e898025ed96a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211209124913-491a49abca63/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220225172249-27dd8689420f h1:oA4XRj0qtSt8Yo1Zms0CUlsT3KG69V2UGQWPBxujDmc= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= @@ -798,7 +785,6 @@ golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 h1:RerP+noqYHUQ8CMRcPlC2nvTa4dcBIjegkuWdcUDuqg= golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -853,7 +839,6 @@ golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -877,7 +862,6 @@ golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -885,7 +869,6 @@ golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220209214540-3681064d5158 h1:rm+CHSpPEEW2IsXUib1ThaHIjuBVZjxNgSKmBLFfD4c= golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -902,7 +885,6 @@ golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 h1:vVKdlvoWBphwdxWKrFZEuM0kGgGLxUOYcY4U/2Vjg44= golang.org/x/time v0.0.0-20220210224613-90d013bbcef8/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -962,7 +944,6 @@ golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.6-0.20210820212750-d4cc65f0b2ff/go.mod h1:YD9qOF0M9xpSpdWTBbzEl5e/RnCefISl8E5Noe10jFM= golang.org/x/tools v0.1.10-0.20220218145154-897bd77cd717 h1:hI3jKY4Hpf63ns040onEbB3dAkR/H/P83hw1TG8dD3Y= golang.org/x/tools v0.1.10-0.20220218145154-897bd77cd717/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1101,7 +1082,6 @@ gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMy gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= @@ -1119,8 +1099,8 @@ gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -gopkg.in/yaml.v3 v3.0.0 h1:hjy8E9ON/egN1tAYqKb61G10WtihqetD4sz2H+8nIeA= -gopkg.in/yaml.v3 v3.0.0/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= gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -1130,33 +1110,30 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -k8s.io/api v0.23.6/go.mod h1:1kFaYxGCFHYp3qd6a85DAj/yW8aVD6XLZMqJclkoi9g= -k8s.io/api v0.24.0 h1:J0hann2hfxWr1hinZIDefw7Q96wmCBx6SSB8IY0MdDg= k8s.io/api v0.24.0/go.mod h1:5Jl90IUrJHUJYEMANRURMiVvJ0g7Ax7r3R1bqO8zx8I= -k8s.io/apiextensions-apiserver v0.23.6 h1:v58cQ6Z0/GK1IXYr+oW0fnYl52o9LTY0WgoWvI8uv5Q= -k8s.io/apiextensions-apiserver v0.23.6/go.mod h1:YVh17Mphv183THQJA5spNFp9XfoidFyL3WoDgZxQIZU= -k8s.io/apimachinery v0.23.6/go.mod h1:BEuFMMBaIbcOqVIJqNZJXGFTP4W6AycEpb5+m/97hrM= -k8s.io/apimachinery v0.24.0 h1:ydFCyC/DjCvFCHK5OPMKBlxayQytB8pxy8YQInd5UyQ= +k8s.io/api v0.24.1 h1:BjCMRDcyEYz03joa3K1+rbshwh1Ay6oB53+iUx2H8UY= +k8s.io/api v0.24.1/go.mod h1:JhoOvNiLXKTPQ60zh2g0ewpA+bnEYf5q44Flhquh4vQ= +k8s.io/apiextensions-apiserver v0.24.0 h1:JfgFqbA8gKJ/uDT++feAqk9jBIwNnL9YGdQvaI9DLtY= +k8s.io/apiextensions-apiserver v0.24.0/go.mod h1:iuVe4aEpe6827lvO6yWQVxiPSpPoSKVjkq+MIdg84cM= k8s.io/apimachinery v0.24.0/go.mod h1:82Bi4sCzVBdpYjyI4jY6aHX+YCUchUIrZrXKedjd2UM= -k8s.io/apiserver v0.23.6/go.mod h1:5PU32F82tfErXPmf7FXhd/UcuLfh97tGepjKUgJ2atg= -k8s.io/client-go v0.23.6/go.mod h1:Umt5icFOMLV/+qbtZ3PR0D+JA6lvvb3syzodv4irpK4= -k8s.io/client-go v0.24.0 h1:lbE4aB1gTHvYFSwm6eD3OF14NhFDKCejlnsGYlSJe5U= +k8s.io/apimachinery v0.24.1 h1:ShD4aDxTQKN5zNf8K1RQ2u98ELLdIW7jEnlO9uAMX/I= +k8s.io/apimachinery v0.24.1/go.mod h1:82Bi4sCzVBdpYjyI4jY6aHX+YCUchUIrZrXKedjd2UM= +k8s.io/apiserver v0.24.0/go.mod h1:WFx2yiOMawnogNToVvUYT9nn1jaIkMKj41ZYCVycsBA= k8s.io/client-go v0.24.0/go.mod h1:VFPQET+cAFpYxh6Bq6f4xyMY80G6jKKktU6G0m00VDw= -k8s.io/code-generator v0.23.6/go.mod h1:S0Q1JVA+kSzTI1oUvbKAxZY/DYbA/ZUb4Uknog12ETk= -k8s.io/component-base v0.23.6/go.mod h1:FGMPeMrjYu0UZBSAFcfloVDplj9IvU+uRMTOdE23Fj0= +k8s.io/client-go v0.24.1 h1:w1hNdI9PFrzu3OlovVeTnf4oHDt+FJLd9Ndluvnb42E= +k8s.io/client-go v0.24.1/go.mod h1:f1kIDqcEYmwXS/vTbbhopMUbhKp2JhOeVTfxgaCIlF8= +k8s.io/code-generator v0.24.0/go.mod h1:dpVhs00hTuTdTY6jvVxvTFCk6gSMrtfRydbhZwHI15w= k8s.io/component-base v0.24.0 h1:h5jieHZQoHrY/lHG+HyrSbJeyfuitheBvqvKwKHVC0g= k8s.io/component-base v0.24.0/go.mod h1:Dgazgon0i7KYUsS8krG8muGiMVtUZxG037l1MKyXgrA= k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= +k8s.io/gengo v0.0.0-20211129171323-c02415ce4185/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= -k8s.io/klog/v2 v2.30.0/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/klog/v2 v2.60.1 h1:VW25q3bZx9uE3vvdL6M8ezOX79vA2Aq1nEWLqNQclHc= k8s.io/klog/v2 v2.60.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= -k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65/go.mod h1:sX9MT8g7NVZM5lVL/j8QyCCJe8YSMW30QvGZWaCIDIk= k8s.io/kube-openapi v0.0.0-20220328201542-3ee0da9b0b42 h1:Gii5eqf+GmIEwGNKQYQClCayuJCe2/4fZUvF7VG99sU= k8s.io/kube-openapi v0.0.0-20220328201542-3ee0da9b0b42/go.mod h1:Z/45zLw8lUo4wdiUkI+v/ImEGAvu3WatcZl3lPMR4Rk= k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20211116205334-6203023598ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9 h1:HNSDgDCrr/6Ly3WEGKZftiE7IY19Vz2GdbOCyI4qqhc= k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= @@ -1165,7 +1142,6 @@ rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.30/go.mod h1:fEO7lRTdivWO2qYVCVG7dEADOMo/MLDCVr8So2g88Uw= sigs.k8s.io/controller-runtime v0.11.2 h1:H5GTxQl0Mc9UjRJhORusqfJCIjBO8UtUxGggCwL1rLA= sigs.k8s.io/controller-runtime v0.11.2/go.mod h1:P6QCzrEjLaZGqHsfd+os7JQ+WFZhvB8MRFsn4dWF7O4= -sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6/go.mod h1:p4QtZmO4uMYipTQNzagwnNoseA6OxSUutVw05NhYDRs= sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2 h1:kDi4JBNAsJWfz1aEXhO8Jg87JJaPNLh5tIzYHgStQ9Y= sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2/go.mod h1:B+TnT182UBxE84DiCz4CVE26eOSDAeYCpfDnC2kdKMY= sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= From 6f85363e589a14013b161342ea05572613022f17 Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Mon, 6 Jun 2022 12:39:05 +0000 Subject: [PATCH 132/818] Update toolkit components - source-controller to v0.25.3 https://github.com/fluxcd/source-controller/blob/v0.25.3/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 2 +- go.sum | 4 ++-- manifests/bases/source-controller/kustomization.yaml | 4 ++-- manifests/crds/kustomization.yaml | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index 1e37eaf0..8044d882 100644 --- a/go.mod +++ b/go.mod @@ -19,7 +19,7 @@ require ( github.com/fluxcd/pkg/ssh v0.4.1 github.com/fluxcd/pkg/untar v0.1.0 github.com/fluxcd/pkg/version v0.1.0 - github.com/fluxcd/source-controller/api v0.25.2 + github.com/fluxcd/source-controller/api v0.25.3 github.com/go-git/go-git/v5 v5.4.2 github.com/gonvenience/bunt v1.3.4 github.com/gonvenience/ytbx v1.4.4 diff --git a/go.sum b/go.sum index ac75f9f9..28f16ce0 100644 --- a/go.sum +++ b/go.sum @@ -219,8 +219,8 @@ github.com/fluxcd/pkg/untar v0.1.0 h1:k97V/xV5hFrAkIkVPuv5AVhyxh1ZzzAKba/lbDfGo6 github.com/fluxcd/pkg/untar v0.1.0/go.mod h1:aGswNyzB1mlz/T/kpOS58mITBMxMKc9tlJBH037A2HY= github.com/fluxcd/pkg/version v0.1.0 h1:v+SmCanmCB5Tj2Cx9TXlj+kNRfPGbAvirkeqsp7ZEAQ= github.com/fluxcd/pkg/version v0.1.0/go.mod h1:V7Z/w8dxLQzv0FHqa5ox5TeyOd2zOd49EeuWFgnwyj4= -github.com/fluxcd/source-controller/api v0.25.2 h1:RqCOlqLixPkdGzR8MwSZwp7FK60kZZY/632ohQM9baQ= -github.com/fluxcd/source-controller/api v0.25.2/go.mod h1:tuMrqHHpRt7mxdLeRXGIMtTKAMufLwLTm5uXkEOJWFw= +github.com/fluxcd/source-controller/api v0.25.3 h1:ReIlQo/7hZ9T+otmg/2XkRkvGEd07aBrU4qPgskSNxg= +github.com/fluxcd/source-controller/api v0.25.3/go.mod h1:tuMrqHHpRt7mxdLeRXGIMtTKAMufLwLTm5uXkEOJWFw= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/form3tech-oss/jwt-go v3.2.3+incompatible h1:7ZaBxOI7TMoYBfyA3cQHErNNyAWIKUMIwqxEtgHOs5c= diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index 15f4a584..6046593c 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.25.2/source-controller.crds.yaml -- https://github.com/fluxcd/source-controller/releases/download/v0.25.2/source-controller.deployment.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.25.3/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.25.3/source-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index 26e16178..a9f41922 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -1,7 +1,7 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.25.2/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.25.3/source-controller.crds.yaml - https://github.com/fluxcd/kustomize-controller/releases/download/v0.26.0/kustomize-controller.crds.yaml - https://github.com/fluxcd/helm-controller/releases/download/v0.22.0/helm-controller.crds.yaml - https://github.com/fluxcd/notification-controller/releases/download/v0.24.0/notification-controller.crds.yaml From 2fe3362c3d37425bdcd30b69e0796ac67e4adf8e Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Tue, 7 Jun 2022 12:02:11 +0300 Subject: [PATCH 133/818] [RFC-0002] Update status and implementation history Signed-off-by: Stefan Prodan --- rfcs/0002-helm-oci/README.md | 39 ++++++++++++++++++++++-------------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/rfcs/0002-helm-oci/README.md b/rfcs/0002-helm-oci/README.md index 878055fc..8ea8b03d 100644 --- a/rfcs/0002-helm-oci/README.md +++ b/rfcs/0002-helm-oci/README.md @@ -1,10 +1,10 @@ # RFC-0002 Flux OCI support for Helm -**Status:** implementable +**Status:** implemented (partially) **Creation date:** 2022-03-30 -**Last update:** 2022-04-13 +**Last update:** 2022-06-07 ## Summary @@ -33,9 +33,9 @@ they do today for container images. Introduce an optional field called `type` to the `HelmRepository` spec. -When not specified, the `spec.type` field defaults to `Default` which preserve the current `HelmRepository` API behaviour. +When not specified, the `spec.type` field defaults to `default` which preserve the current `HelmRepository` API behaviour. -When the `spec.type` field is set to `OCI`, the `spec.url` field must be prefixed with `oci://` (to follow the Helm conventions). +When the `spec.type` field is set to `oci`, the `spec.url` field must be prefixed with `oci://` (to follow the Helm conventions). For `oci://` URLs, source-controller will use the Helm SDK and the `oras` library to connect to the OCI remote storage. For authentication, the controller will use Kubernetes secrets of `kubernetes.io/dockerconfigjson` type. @@ -55,7 +55,7 @@ kubectl create secret docker-registry ghcr-charts \ --docker-password=$GITHUB_TOKEN ``` -Then define a `HelmRepository` of type `OCI` and reference the `dockerconfig` secret: +Then define a `HelmRepository` of type `oci` and reference the `dockerconfig` secret: ```yaml apiVersion: source.toolkit.fluxcd.io/v1beta2 @@ -64,7 +64,7 @@ metadata: name: ghcr-charts namespace: default spec: - type: OCI + type: oci url: oci://ghcr.io/my-org/charts/ secretRef: name: ghcr-charts @@ -156,19 +156,28 @@ Bucket API design, where the same Kind servers different implementations: AWS S3 In source-controller we'll add a new predicate for filtering `HelmRepositories` based on the `spec.type` field. -The current `HelmRepositoryReconciler` will be renamed to `HelmRepositoryDefaultReconciler`, -it's scope remains unchanged, and it will handle only objects with `type: Default`. +The current `HelmRepositoryReconciler` will handle only objects with `type: default`, +it's scope remains unchanged. We'll introduce a new reconciler named `HelmRepositoryOCIReconciler`, that will handle -objects with `type: OCI`. This reconciler will set the `HelmRepository` Ready status to -`False` if the URL is not prefixed with `oci://`, otherwise the Ready status will be set to `True`. +objects with `type: oci`. This reconciler will set the `HelmRepository` Ready status to +`False` if: +- the URL is not prefixed with `oci://` +- the URL is malformed and can't be parsed +- the specified credentials result in an authentication error -The current `HelmChartReconciler` will be renamed to `HelmChartDefaultReconciler`, -it's scope remains unchanged, and it will handle only objects that refer to `HelmRepositories` with `type: Default`. - -For `type: OCI` we'll introduce a new reconciler `HelmChartOCIReconciler` that uses `oras` to download charts -and their dependencies. +The current `HelmChartReconciler` will be adapted to handle both types. ### Enabling the feature The feature is enabled by default. + +## Implementation History + +* **2022-05-19** Partially implemented by [source-controller#690](https://github.com/fluxcd/source-controller/pull/690) +* **2022-06-06** First implementation released with [flux2 v0.31.0](https://github.com/fluxcd/flux2/releases/tag/v0.31.0) + +### TODOs + +* [Resolve chart dependencies from OCI](https://github.com/fluxcd/source-controller/issues/722) +* [Add support for container registries with self-signed TLS certs](https://github.com/fluxcd/source-controller/issues/723) From efb0ecb4f9cc2b7ed9f78eac472bb1db5ccd4cc7 Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Wed, 8 Jun 2022 12:02:56 +0000 Subject: [PATCH 134/818] Update toolkit components - helm-controller to v0.22.1 https://github.com/fluxcd/helm-controller/blob/v0.22.1/CHANGELOG.md - kustomize-controller to v0.26.1 https://github.com/fluxcd/kustomize-controller/blob/v0.26.1/CHANGELOG.md - source-controller to v0.25.5 https://github.com/fluxcd/source-controller/blob/v0.25.5/CHANGELOG.md - image-reflector-controller to v0.19.1 https://github.com/fluxcd/image-reflector-controller/blob/v0.19.1/CHANGELOG.md - image-automation-controller to v0.23.2 https://github.com/fluxcd/image-automation-controller/blob/v0.23.2/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 14 +++++----- go.sum | 28 +++++++++---------- .../bases/helm-controller/kustomization.yaml | 4 +-- .../kustomization.yaml | 4 +-- .../kustomization.yaml | 4 +-- .../kustomize-controller/kustomization.yaml | 4 +-- .../source-controller/kustomization.yaml | 4 +-- manifests/crds/kustomization.yaml | 10 +++---- 8 files changed, 36 insertions(+), 36 deletions(-) diff --git a/go.mod b/go.mod index 8044d882..5aa51ce5 100644 --- a/go.mod +++ b/go.mod @@ -7,19 +7,19 @@ require ( github.com/ProtonMail/go-crypto v0.0.0-20220517143526-88bb52951d5b github.com/cyphar/filepath-securejoin v0.2.3 github.com/fluxcd/go-git-providers v0.6.0 - github.com/fluxcd/helm-controller/api v0.22.0 - github.com/fluxcd/image-automation-controller/api v0.23.0 - github.com/fluxcd/image-reflector-controller/api v0.19.0 - github.com/fluxcd/kustomize-controller/api v0.26.0 + github.com/fluxcd/helm-controller/api v0.22.1 + github.com/fluxcd/image-automation-controller/api v0.23.2 + github.com/fluxcd/image-reflector-controller/api v0.19.1 + github.com/fluxcd/kustomize-controller/api v0.26.1 github.com/fluxcd/notification-controller/api v0.24.0 - github.com/fluxcd/pkg/apis/meta v0.14.1 + github.com/fluxcd/pkg/apis/meta v0.14.2 github.com/fluxcd/pkg/kustomize v0.5.1 github.com/fluxcd/pkg/runtime v0.16.1 github.com/fluxcd/pkg/ssa v0.16.1 github.com/fluxcd/pkg/ssh v0.4.1 github.com/fluxcd/pkg/untar v0.1.0 github.com/fluxcd/pkg/version v0.1.0 - github.com/fluxcd/source-controller/api v0.25.3 + github.com/fluxcd/source-controller/api v0.25.5 github.com/go-git/go-git/v5 v5.4.2 github.com/gonvenience/bunt v1.3.4 github.com/gonvenience/ytbx v1.4.4 @@ -80,7 +80,7 @@ require ( github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d // indirect github.com/fatih/color v1.13.0 // indirect github.com/fluxcd/pkg/apis/acl v0.0.3 // indirect - github.com/fluxcd/pkg/apis/kustomize v0.4.1 // indirect + github.com/fluxcd/pkg/apis/kustomize v0.4.2 // indirect github.com/form3tech-oss/jwt-go v3.2.3+incompatible // indirect github.com/fsnotify/fsnotify v1.5.1 // indirect github.com/go-errors/errors v1.0.1 // indirect diff --git a/go.sum b/go.sum index 28f16ce0..5d513598 100644 --- a/go.sum +++ b/go.sum @@ -191,22 +191,22 @@ github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYF github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fluxcd/go-git-providers v0.6.0 h1:XJc3MTYFpuahBSoKTVxmH9OBPCeIyvYoQkTjTqa3fH4= github.com/fluxcd/go-git-providers v0.6.0/go.mod h1:UMFHnMCIO9CBpEln7ZsArEWyXSNxTpm76fyQxUmClrc= -github.com/fluxcd/helm-controller/api v0.22.0 h1:e6yW+TV+UKssXaYCyoDKzXpNuFDy5TiHxj+9OJ714cw= -github.com/fluxcd/helm-controller/api v0.22.0/go.mod h1:YpRB4ycayD4ryDKxNZU3Y+lydvFr4HZsgh0b28xJcZc= -github.com/fluxcd/image-automation-controller/api v0.23.0 h1:cIKb//6VeAUGMz0A7ugbCWkOvpXFWhEZj2PH/eEzbTQ= -github.com/fluxcd/image-automation-controller/api v0.23.0/go.mod h1:YnvSmTzFFleSAkZJ9qOqmYQERmDHHrzB9KJ55Qfghvg= -github.com/fluxcd/image-reflector-controller/api v0.19.0 h1:8R9ppgKzagFKy04Z/+IG8fjQrPn71xet+w7sTXPudpc= -github.com/fluxcd/image-reflector-controller/api v0.19.0/go.mod h1:7eyHh5yq/2vm6eg70tfeSn7ZfbgMrrmoSJEeBMNGDDs= -github.com/fluxcd/kustomize-controller/api v0.26.0 h1:B/KQKzMXte0nj3P1D5whQTb5btpuHfcHV4J25eyqbIM= -github.com/fluxcd/kustomize-controller/api v0.26.0/go.mod h1:ybeF/mSNgAL1sgXav1+Z5zDHfnisOA8Re3hgjHWhcJ8= +github.com/fluxcd/helm-controller/api v0.22.1 h1:J+i6AZMj0SCuQxcpHmyf1qmPdgDKP0nTkyS4/oLHx0M= +github.com/fluxcd/helm-controller/api v0.22.1/go.mod h1:2xuHOYjbRv86ekTYkF7VzTwu5hEHYawrdi7FZrvpr4g= +github.com/fluxcd/image-automation-controller/api v0.23.2 h1:2e5ZWaKUGzCD7ItxQDbrO6OXHMYoSHV1drCwFIh8DMQ= +github.com/fluxcd/image-automation-controller/api v0.23.2/go.mod h1:HhjBfqtjsb+Pe5S4ig2cq3n25Rifs8NJ+bppf++Bmb8= +github.com/fluxcd/image-reflector-controller/api v0.19.1 h1:5vEHLVhgxdznn6AfwMea5Bi/qsuIsjiV3goj3pg4FcI= +github.com/fluxcd/image-reflector-controller/api v0.19.1/go.mod h1:WvPujFOXzWttkETUxkCgP9BesCTAfVYzgCeZXu43nY4= +github.com/fluxcd/kustomize-controller/api v0.26.1 h1:hX8vPe49/ytKzSAO8Qewb/Cmswt8oit/JNIQ9h5l+xQ= +github.com/fluxcd/kustomize-controller/api v0.26.1/go.mod h1:f16v3IErWGQJ0WXtpOW3ATjFukz/KhbkanqS9ZTM8ks= github.com/fluxcd/notification-controller/api v0.24.0 h1:pvLcCD1HT+x0Hup8VLfDrVGFDK33oJKNC7WX6mtEEh0= github.com/fluxcd/notification-controller/api v0.24.0/go.mod h1:pld1fyodxqdWPBr+Ez+kTixmtmO2o3o0I5Zf5wQDHGM= github.com/fluxcd/pkg/apis/acl v0.0.3 h1:Lw0ZHdpnO4G7Zy9KjrzwwBmDZQuy4qEjaU/RvA6k1lc= github.com/fluxcd/pkg/apis/acl v0.0.3/go.mod h1:XPts6lRJ9C9fIF9xVWofmQwftvhY25n1ps7W9xw0XLU= -github.com/fluxcd/pkg/apis/kustomize v0.4.1 h1:YgIF9TJ23pH66W/gYlEu+DeH1pU3tS4xYlRc5AQzk58= -github.com/fluxcd/pkg/apis/kustomize v0.4.1/go.mod h1:U9rfSgDHaQd74PgPKt9DprtuzT+i1m18zlHxatq7c5Y= -github.com/fluxcd/pkg/apis/meta v0.14.1 h1:lPDs9yV67DnwalHPb13bbnDkAatALfUiAMRHjUm4UBw= -github.com/fluxcd/pkg/apis/meta v0.14.1/go.mod h1:1uJkTJGSZWrZxL5PFpx1IxGLrFmT1Cd0C2fFWrbv77I= +github.com/fluxcd/pkg/apis/kustomize v0.4.2 h1:5mC/t+OndouK7poFaG4soWLqvHqOxJ3HCsbxu8qyt30= +github.com/fluxcd/pkg/apis/kustomize v0.4.2/go.mod h1:y/TpJvnhR08BRt3E7oLpDPvx0/J/2AS8tOiAFJpctu8= +github.com/fluxcd/pkg/apis/meta v0.14.2 h1:/Hf7I/Vz01vv3m7Qx7DtQvrzAL1oVt0MJcLb/I1Y1HE= +github.com/fluxcd/pkg/apis/meta v0.14.2/go.mod h1:ijZ61VG/8T3U17gj0aFL3fdtZL+mulD6V8VrLLUCAgM= github.com/fluxcd/pkg/kustomize v0.5.1 h1:151Ih34ltxN2z1e2mA5AvQONyE6phc4es57oVK3+plU= github.com/fluxcd/pkg/kustomize v0.5.1/go.mod h1:58MFITy24bIbGI6cC3JkV/YpFQj648sVvgs0K1kraJw= github.com/fluxcd/pkg/runtime v0.16.1 h1:WU1vNZz4TAzmATQ/tl2zB/FX6GIUTgYeBn/G5RuTA2c= @@ -219,8 +219,8 @@ github.com/fluxcd/pkg/untar v0.1.0 h1:k97V/xV5hFrAkIkVPuv5AVhyxh1ZzzAKba/lbDfGo6 github.com/fluxcd/pkg/untar v0.1.0/go.mod h1:aGswNyzB1mlz/T/kpOS58mITBMxMKc9tlJBH037A2HY= github.com/fluxcd/pkg/version v0.1.0 h1:v+SmCanmCB5Tj2Cx9TXlj+kNRfPGbAvirkeqsp7ZEAQ= github.com/fluxcd/pkg/version v0.1.0/go.mod h1:V7Z/w8dxLQzv0FHqa5ox5TeyOd2zOd49EeuWFgnwyj4= -github.com/fluxcd/source-controller/api v0.25.3 h1:ReIlQo/7hZ9T+otmg/2XkRkvGEd07aBrU4qPgskSNxg= -github.com/fluxcd/source-controller/api v0.25.3/go.mod h1:tuMrqHHpRt7mxdLeRXGIMtTKAMufLwLTm5uXkEOJWFw= +github.com/fluxcd/source-controller/api v0.25.5 h1:64rLb5cuHhZ3LcRIxkp+/oAVCyVtjOhQ9kbphdFfR/s= +github.com/fluxcd/source-controller/api v0.25.5/go.mod h1:/e7YRDOqb8z8I3N8ifbDF1mknf8zFsoADtS/Q93iWPs= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/form3tech-oss/jwt-go v3.2.3+incompatible h1:7ZaBxOI7TMoYBfyA3cQHErNNyAWIKUMIwqxEtgHOs5c= diff --git a/manifests/bases/helm-controller/kustomization.yaml b/manifests/bases/helm-controller/kustomization.yaml index 5ba1ecc9..9f23c54d 100644 --- a/manifests/bases/helm-controller/kustomization.yaml +++ b/manifests/bases/helm-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/helm-controller/releases/download/v0.22.0/helm-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.22.0/helm-controller.deployment.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.22.1/helm-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.22.1/helm-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/image-automation-controller/kustomization.yaml b/manifests/bases/image-automation-controller/kustomization.yaml index 4d4d436c..468e4a32 100644 --- a/manifests/bases/image-automation-controller/kustomization.yaml +++ b/manifests/bases/image-automation-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.23.0/image-automation-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.23.0/image-automation-controller.deployment.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.23.2/image-automation-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.23.2/image-automation-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/image-reflector-controller/kustomization.yaml b/manifests/bases/image-reflector-controller/kustomization.yaml index 27726de5..d95fc086 100644 --- a/manifests/bases/image-reflector-controller/kustomization.yaml +++ b/manifests/bases/image-reflector-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.19.0/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.19.0/image-reflector-controller.deployment.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.19.1/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.19.1/image-reflector-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/kustomize-controller/kustomization.yaml b/manifests/bases/kustomize-controller/kustomization.yaml index 60c48bd0..1b8b28ed 100644 --- a/manifests/bases/kustomize-controller/kustomization.yaml +++ b/manifests/bases/kustomize-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.26.0/kustomize-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.26.0/kustomize-controller.deployment.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.26.1/kustomize-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.26.1/kustomize-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index 6046593c..b05e6a82 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.25.3/source-controller.crds.yaml -- https://github.com/fluxcd/source-controller/releases/download/v0.25.3/source-controller.deployment.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.25.5/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.25.5/source-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index a9f41922..6b5f4067 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -1,9 +1,9 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.25.3/source-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.26.0/kustomize-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.22.0/helm-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.25.5/source-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.26.1/kustomize-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.22.1/helm-controller.crds.yaml - https://github.com/fluxcd/notification-controller/releases/download/v0.24.0/notification-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.19.0/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.23.0/image-automation-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.19.1/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.23.2/image-automation-controller.crds.yaml From 04b0a0a7ae3c8c0c39a7a7203772bb7b093d57f8 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 8 Jun 2022 15:26:33 +0300 Subject: [PATCH 135/818] Update dependencies - fluxcd/pkg/kustomize v0.5.2 - fluxcd/pkg/runtime v0.16.2 - fluxcd/pkg/ssa v0.17.0 - fluxcd/pkg/ssh v0.5.0 - cli-utils v0.31.2 Signed-off-by: Stefan Prodan --- go.mod | 10 +++++----- go.sum | 20 ++++++++++---------- tests/azure/go.mod | 20 ++++++++++---------- tests/azure/go.sum | 47 ++++++++++++++++++++++------------------------ 4 files changed, 47 insertions(+), 50 deletions(-) diff --git a/go.mod b/go.mod index 5aa51ce5..cd12e4ee 100644 --- a/go.mod +++ b/go.mod @@ -13,10 +13,10 @@ require ( github.com/fluxcd/kustomize-controller/api v0.26.1 github.com/fluxcd/notification-controller/api v0.24.0 github.com/fluxcd/pkg/apis/meta v0.14.2 - github.com/fluxcd/pkg/kustomize v0.5.1 - github.com/fluxcd/pkg/runtime v0.16.1 - github.com/fluxcd/pkg/ssa v0.16.1 - github.com/fluxcd/pkg/ssh v0.4.1 + github.com/fluxcd/pkg/kustomize v0.5.2 + github.com/fluxcd/pkg/runtime v0.16.2 + github.com/fluxcd/pkg/ssa v0.17.0 + github.com/fluxcd/pkg/ssh v0.5.0 github.com/fluxcd/pkg/untar v0.1.0 github.com/fluxcd/pkg/version v0.1.0 github.com/fluxcd/source-controller/api v0.25.5 @@ -42,7 +42,7 @@ require ( k8s.io/cli-runtime v0.24.1 k8s.io/client-go v0.24.1 k8s.io/kubectl v0.24.1 - sigs.k8s.io/cli-utils v0.31.1 + sigs.k8s.io/cli-utils v0.31.2 sigs.k8s.io/controller-runtime v0.11.2 sigs.k8s.io/kustomize/api v0.11.5 sigs.k8s.io/kustomize/kyaml v0.13.7 diff --git a/go.sum b/go.sum index 5d513598..d5a9e93f 100644 --- a/go.sum +++ b/go.sum @@ -207,14 +207,14 @@ github.com/fluxcd/pkg/apis/kustomize v0.4.2 h1:5mC/t+OndouK7poFaG4soWLqvHqOxJ3HC github.com/fluxcd/pkg/apis/kustomize v0.4.2/go.mod h1:y/TpJvnhR08BRt3E7oLpDPvx0/J/2AS8tOiAFJpctu8= github.com/fluxcd/pkg/apis/meta v0.14.2 h1:/Hf7I/Vz01vv3m7Qx7DtQvrzAL1oVt0MJcLb/I1Y1HE= github.com/fluxcd/pkg/apis/meta v0.14.2/go.mod h1:ijZ61VG/8T3U17gj0aFL3fdtZL+mulD6V8VrLLUCAgM= -github.com/fluxcd/pkg/kustomize v0.5.1 h1:151Ih34ltxN2z1e2mA5AvQONyE6phc4es57oVK3+plU= -github.com/fluxcd/pkg/kustomize v0.5.1/go.mod h1:58MFITy24bIbGI6cC3JkV/YpFQj648sVvgs0K1kraJw= -github.com/fluxcd/pkg/runtime v0.16.1 h1:WU1vNZz4TAzmATQ/tl2zB/FX6GIUTgYeBn/G5RuTA2c= -github.com/fluxcd/pkg/runtime v0.16.1/go.mod h1:cgVJkOXCg9OmrIUGklf/0UtV28MNzkuoBJhaEQICT6E= -github.com/fluxcd/pkg/ssa v0.16.1 h1:hWXMtDhiAPRPHpHiQ5NzVjqIDhOfyzWmc2zA49Wxw7E= -github.com/fluxcd/pkg/ssa v0.16.1/go.mod h1:rLqpc2CDtyZhRIMKHDRJoMHXj0MgQBpg5134zk+ARHM= -github.com/fluxcd/pkg/ssh v0.4.1 h1:O5FCjb5NIZ9PeRjdF2iL9jaPNM+RL+IjrMBZPkqF9W4= -github.com/fluxcd/pkg/ssh v0.4.1/go.mod h1:KGgOUOy1uI6RC6+qxIBLvP1AeOOs/nLB25Ca6TZMIXE= +github.com/fluxcd/pkg/kustomize v0.5.2 h1:Nhaw/Tqwt588Cp4PYa83nj45t3mGgojMl23zhq/t/fM= +github.com/fluxcd/pkg/kustomize v0.5.2/go.mod h1:X3Uls1l13giFPwig1NDoXvrF53yyXUemSyR3nYGw28s= +github.com/fluxcd/pkg/runtime v0.16.2 h1:CexfMmJK+r12sHTvKWyAax0pcPomjd6VnaHXcxjUrRY= +github.com/fluxcd/pkg/runtime v0.16.2/go.mod h1:OHSKsrO+T+Ym8WZRS2oidrnauWRARuE2nfm8ewevm7M= +github.com/fluxcd/pkg/ssa v0.17.0 h1:iO4EQ+/xIbd79VKrh+8fvsAvq3RlmgAdWtnzOAUxD5s= +github.com/fluxcd/pkg/ssa v0.17.0/go.mod h1:UZkF5CwbDuvWPXnISoaXWlc0JPbHh8BKfa4ExeTtWgY= +github.com/fluxcd/pkg/ssh v0.5.0 h1:jE9F2XvUXC2mgseeXMATvO014fLqdB30/VzlPLKsk20= +github.com/fluxcd/pkg/ssh v0.5.0/go.mod h1:KGgOUOy1uI6RC6+qxIBLvP1AeOOs/nLB25Ca6TZMIXE= github.com/fluxcd/pkg/untar v0.1.0 h1:k97V/xV5hFrAkIkVPuv5AVhyxh1ZzzAKba/lbDfGo6o= github.com/fluxcd/pkg/untar v0.1.0/go.mod h1:aGswNyzB1mlz/T/kpOS58mITBMxMKc9tlJBH037A2HY= github.com/fluxcd/pkg/version v0.1.0 h1:v+SmCanmCB5Tj2Cx9TXlj+kNRfPGbAvirkeqsp7ZEAQ= @@ -1256,8 +1256,8 @@ rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8 rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.30/go.mod h1:fEO7lRTdivWO2qYVCVG7dEADOMo/MLDCVr8So2g88Uw= -sigs.k8s.io/cli-utils v0.31.1 h1:F9WPmyF5NWdgTmzvLzeTWd1smHHi/yOWu14Ae70D++Y= -sigs.k8s.io/cli-utils v0.31.1/go.mod h1:g/zB9hJ5eUN7zIEBIxrO0CwhXU4YISJ+BkLJzvWwlEs= +sigs.k8s.io/cli-utils v0.31.2 h1:0yX0GPyvbc+yAEWwWlhgHlPF7JtvlLco6HjolSWewt4= +sigs.k8s.io/cli-utils v0.31.2/go.mod h1:g/zB9hJ5eUN7zIEBIxrO0CwhXU4YISJ+BkLJzvWwlEs= sigs.k8s.io/controller-runtime v0.11.2 h1:H5GTxQl0Mc9UjRJhORusqfJCIjBO8UtUxGggCwL1rLA= sigs.k8s.io/controller-runtime v0.11.2/go.mod h1:P6QCzrEjLaZGqHsfd+os7JQ+WFZhvB8MRFsn4dWF7O4= sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2 h1:kDi4JBNAsJWfz1aEXhO8Jg87JJaPNLh5tIzYHgStQ9Y= diff --git a/tests/azure/go.mod b/tests/azure/go.mod index 4d058c51..fbb7624a 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -4,14 +4,14 @@ go 1.17 require ( github.com/Azure/azure-event-hubs-go/v3 v3.3.18 - github.com/fluxcd/helm-controller/api v0.22.0 - github.com/fluxcd/image-automation-controller/api v0.23.0 - github.com/fluxcd/image-reflector-controller/api v0.19.0 - github.com/fluxcd/kustomize-controller/api v0.26.0 + github.com/fluxcd/helm-controller/api v0.22.1 + github.com/fluxcd/image-automation-controller/api v0.23.2 + github.com/fluxcd/image-reflector-controller/api v0.19.1 + github.com/fluxcd/kustomize-controller/api v0.26.1 github.com/fluxcd/notification-controller/api v0.24.0 - github.com/fluxcd/pkg/apis/meta v0.14.1 - github.com/fluxcd/pkg/runtime v0.16.1 - github.com/fluxcd/source-controller/api v0.25.2 + github.com/fluxcd/pkg/apis/meta v0.14.2 + github.com/fluxcd/pkg/runtime v0.16.2 + github.com/fluxcd/source-controller/api v0.25.5 github.com/hashicorp/terraform-exec v0.15.0 github.com/libgit2/git2go/v31 v31.7.9 github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 @@ -52,7 +52,7 @@ require ( github.com/emicklei/go-restful v2.9.5+incompatible // indirect github.com/evanphx/json-patch v4.12.0+incompatible // indirect github.com/fluxcd/pkg/apis/acl v0.0.3 // indirect - github.com/fluxcd/pkg/apis/kustomize v0.4.1 // indirect + github.com/fluxcd/pkg/apis/kustomize v0.4.2 // indirect github.com/form3tech-oss/jwt-go v3.2.3+incompatible // indirect github.com/fsnotify/fsnotify v1.5.1 // indirect github.com/go-logr/logr v1.2.3 // indirect @@ -123,8 +123,8 @@ require ( gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect - k8s.io/apiextensions-apiserver v0.24.0 // indirect - k8s.io/component-base v0.24.0 // indirect + k8s.io/apiextensions-apiserver v0.24.1 // indirect + k8s.io/component-base v0.24.1 // indirect k8s.io/klog/v2 v2.60.1 // indirect k8s.io/kube-openapi v0.0.0-20220328201542-3ee0da9b0b42 // indirect k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9 // indirect diff --git a/tests/azure/go.sum b/tests/azure/go.sum index fde6ef34..50b4c0a4 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -194,26 +194,26 @@ github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/fluxcd/helm-controller/api v0.22.0 h1:e6yW+TV+UKssXaYCyoDKzXpNuFDy5TiHxj+9OJ714cw= -github.com/fluxcd/helm-controller/api v0.22.0/go.mod h1:YpRB4ycayD4ryDKxNZU3Y+lydvFr4HZsgh0b28xJcZc= -github.com/fluxcd/image-automation-controller/api v0.23.0 h1:cIKb//6VeAUGMz0A7ugbCWkOvpXFWhEZj2PH/eEzbTQ= -github.com/fluxcd/image-automation-controller/api v0.23.0/go.mod h1:YnvSmTzFFleSAkZJ9qOqmYQERmDHHrzB9KJ55Qfghvg= -github.com/fluxcd/image-reflector-controller/api v0.19.0 h1:8R9ppgKzagFKy04Z/+IG8fjQrPn71xet+w7sTXPudpc= -github.com/fluxcd/image-reflector-controller/api v0.19.0/go.mod h1:7eyHh5yq/2vm6eg70tfeSn7ZfbgMrrmoSJEeBMNGDDs= -github.com/fluxcd/kustomize-controller/api v0.26.0 h1:B/KQKzMXte0nj3P1D5whQTb5btpuHfcHV4J25eyqbIM= -github.com/fluxcd/kustomize-controller/api v0.26.0/go.mod h1:ybeF/mSNgAL1sgXav1+Z5zDHfnisOA8Re3hgjHWhcJ8= +github.com/fluxcd/helm-controller/api v0.22.1 h1:J+i6AZMj0SCuQxcpHmyf1qmPdgDKP0nTkyS4/oLHx0M= +github.com/fluxcd/helm-controller/api v0.22.1/go.mod h1:2xuHOYjbRv86ekTYkF7VzTwu5hEHYawrdi7FZrvpr4g= +github.com/fluxcd/image-automation-controller/api v0.23.2 h1:2e5ZWaKUGzCD7ItxQDbrO6OXHMYoSHV1drCwFIh8DMQ= +github.com/fluxcd/image-automation-controller/api v0.23.2/go.mod h1:HhjBfqtjsb+Pe5S4ig2cq3n25Rifs8NJ+bppf++Bmb8= +github.com/fluxcd/image-reflector-controller/api v0.19.1 h1:5vEHLVhgxdznn6AfwMea5Bi/qsuIsjiV3goj3pg4FcI= +github.com/fluxcd/image-reflector-controller/api v0.19.1/go.mod h1:WvPujFOXzWttkETUxkCgP9BesCTAfVYzgCeZXu43nY4= +github.com/fluxcd/kustomize-controller/api v0.26.1 h1:hX8vPe49/ytKzSAO8Qewb/Cmswt8oit/JNIQ9h5l+xQ= +github.com/fluxcd/kustomize-controller/api v0.26.1/go.mod h1:f16v3IErWGQJ0WXtpOW3ATjFukz/KhbkanqS9ZTM8ks= github.com/fluxcd/notification-controller/api v0.24.0 h1:pvLcCD1HT+x0Hup8VLfDrVGFDK33oJKNC7WX6mtEEh0= github.com/fluxcd/notification-controller/api v0.24.0/go.mod h1:pld1fyodxqdWPBr+Ez+kTixmtmO2o3o0I5Zf5wQDHGM= github.com/fluxcd/pkg/apis/acl v0.0.3 h1:Lw0ZHdpnO4G7Zy9KjrzwwBmDZQuy4qEjaU/RvA6k1lc= github.com/fluxcd/pkg/apis/acl v0.0.3/go.mod h1:XPts6lRJ9C9fIF9xVWofmQwftvhY25n1ps7W9xw0XLU= -github.com/fluxcd/pkg/apis/kustomize v0.4.1 h1:YgIF9TJ23pH66W/gYlEu+DeH1pU3tS4xYlRc5AQzk58= -github.com/fluxcd/pkg/apis/kustomize v0.4.1/go.mod h1:U9rfSgDHaQd74PgPKt9DprtuzT+i1m18zlHxatq7c5Y= -github.com/fluxcd/pkg/apis/meta v0.14.1 h1:lPDs9yV67DnwalHPb13bbnDkAatALfUiAMRHjUm4UBw= -github.com/fluxcd/pkg/apis/meta v0.14.1/go.mod h1:1uJkTJGSZWrZxL5PFpx1IxGLrFmT1Cd0C2fFWrbv77I= -github.com/fluxcd/pkg/runtime v0.16.1 h1:WU1vNZz4TAzmATQ/tl2zB/FX6GIUTgYeBn/G5RuTA2c= -github.com/fluxcd/pkg/runtime v0.16.1/go.mod h1:cgVJkOXCg9OmrIUGklf/0UtV28MNzkuoBJhaEQICT6E= -github.com/fluxcd/source-controller/api v0.25.2 h1:RqCOlqLixPkdGzR8MwSZwp7FK60kZZY/632ohQM9baQ= -github.com/fluxcd/source-controller/api v0.25.2/go.mod h1:tuMrqHHpRt7mxdLeRXGIMtTKAMufLwLTm5uXkEOJWFw= +github.com/fluxcd/pkg/apis/kustomize v0.4.2 h1:5mC/t+OndouK7poFaG4soWLqvHqOxJ3HCsbxu8qyt30= +github.com/fluxcd/pkg/apis/kustomize v0.4.2/go.mod h1:y/TpJvnhR08BRt3E7oLpDPvx0/J/2AS8tOiAFJpctu8= +github.com/fluxcd/pkg/apis/meta v0.14.2 h1:/Hf7I/Vz01vv3m7Qx7DtQvrzAL1oVt0MJcLb/I1Y1HE= +github.com/fluxcd/pkg/apis/meta v0.14.2/go.mod h1:ijZ61VG/8T3U17gj0aFL3fdtZL+mulD6V8VrLLUCAgM= +github.com/fluxcd/pkg/runtime v0.16.2 h1:CexfMmJK+r12sHTvKWyAax0pcPomjd6VnaHXcxjUrRY= +github.com/fluxcd/pkg/runtime v0.16.2/go.mod h1:OHSKsrO+T+Ym8WZRS2oidrnauWRARuE2nfm8ewevm7M= +github.com/fluxcd/source-controller/api v0.25.5 h1:64rLb5cuHhZ3LcRIxkp+/oAVCyVtjOhQ9kbphdFfR/s= +github.com/fluxcd/source-controller/api v0.25.5/go.mod h1:/e7YRDOqb8z8I3N8ifbDF1mknf8zFsoADtS/Q93iWPs= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/form3tech-oss/jwt-go v3.2.3+incompatible h1:7ZaBxOI7TMoYBfyA3cQHErNNyAWIKUMIwqxEtgHOs5c= @@ -1110,21 +1110,18 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -k8s.io/api v0.24.0/go.mod h1:5Jl90IUrJHUJYEMANRURMiVvJ0g7Ax7r3R1bqO8zx8I= k8s.io/api v0.24.1 h1:BjCMRDcyEYz03joa3K1+rbshwh1Ay6oB53+iUx2H8UY= k8s.io/api v0.24.1/go.mod h1:JhoOvNiLXKTPQ60zh2g0ewpA+bnEYf5q44Flhquh4vQ= -k8s.io/apiextensions-apiserver v0.24.0 h1:JfgFqbA8gKJ/uDT++feAqk9jBIwNnL9YGdQvaI9DLtY= -k8s.io/apiextensions-apiserver v0.24.0/go.mod h1:iuVe4aEpe6827lvO6yWQVxiPSpPoSKVjkq+MIdg84cM= -k8s.io/apimachinery v0.24.0/go.mod h1:82Bi4sCzVBdpYjyI4jY6aHX+YCUchUIrZrXKedjd2UM= +k8s.io/apiextensions-apiserver v0.24.1 h1:5yBh9+ueTq/kfnHQZa0MAo6uNcPrtxPMpNQgorBaKS0= +k8s.io/apiextensions-apiserver v0.24.1/go.mod h1:A6MHfaLDGfjOc/We2nM7uewD5Oa/FnEbZ6cD7g2ca4Q= k8s.io/apimachinery v0.24.1 h1:ShD4aDxTQKN5zNf8K1RQ2u98ELLdIW7jEnlO9uAMX/I= k8s.io/apimachinery v0.24.1/go.mod h1:82Bi4sCzVBdpYjyI4jY6aHX+YCUchUIrZrXKedjd2UM= -k8s.io/apiserver v0.24.0/go.mod h1:WFx2yiOMawnogNToVvUYT9nn1jaIkMKj41ZYCVycsBA= -k8s.io/client-go v0.24.0/go.mod h1:VFPQET+cAFpYxh6Bq6f4xyMY80G6jKKktU6G0m00VDw= +k8s.io/apiserver v0.24.1/go.mod h1:dQWNMx15S8NqJMp0gpYfssyvhYnkilc1LpExd/dkLh0= k8s.io/client-go v0.24.1 h1:w1hNdI9PFrzu3OlovVeTnf4oHDt+FJLd9Ndluvnb42E= k8s.io/client-go v0.24.1/go.mod h1:f1kIDqcEYmwXS/vTbbhopMUbhKp2JhOeVTfxgaCIlF8= -k8s.io/code-generator v0.24.0/go.mod h1:dpVhs00hTuTdTY6jvVxvTFCk6gSMrtfRydbhZwHI15w= -k8s.io/component-base v0.24.0 h1:h5jieHZQoHrY/lHG+HyrSbJeyfuitheBvqvKwKHVC0g= -k8s.io/component-base v0.24.0/go.mod h1:Dgazgon0i7KYUsS8krG8muGiMVtUZxG037l1MKyXgrA= +k8s.io/code-generator v0.24.1/go.mod h1:dpVhs00hTuTdTY6jvVxvTFCk6gSMrtfRydbhZwHI15w= +k8s.io/component-base v0.24.1 h1:APv6W/YmfOWZfo+XJ1mZwep/f7g7Tpwvdbo9CQLDuts= +k8s.io/component-base v0.24.1/go.mod h1:DW5vQGYVCog8WYpNob3PMmmsY8A3L9QZNg4j/dV3s38= k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= k8s.io/gengo v0.0.0-20211129171323-c02415ce4185/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= From cfdd5f028442cff2fa943e0e5955da113601acec Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 8 Jun 2022 15:27:08 +0300 Subject: [PATCH 136/818] Update kubectl to v1.24.1 in flux-cli image Signed-off-by: Stefan Prodan --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index b992cf71..09435c05 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ FROM alpine:3.16 as builder RUN apk add --no-cache ca-certificates curl ARG ARCH=linux/amd64 -ARG KUBECTL_VER=1.24.0 +ARG KUBECTL_VER=1.24.1 RUN curl -sL https://storage.googleapis.com/kubernetes-release/release/v${KUBECTL_VER}/bin/${ARCH}/kubectl \ -o /usr/local/bin/kubectl && chmod +x /usr/local/bin/kubectl && \ From 9ae41899a86354956b7010c8c2e00fe907bb05d1 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 8 Jun 2022 15:33:47 +0300 Subject: [PATCH 137/818] Update go-getter to fix CVEs Signed-off-by: Stefan Prodan --- tests/azure/go.mod | 5 ++++- tests/azure/go.sum | 7 ++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/tests/azure/go.mod b/tests/azure/go.mod index fbb7624a..ecdf8d5f 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -27,6 +27,9 @@ require ( // Fix CVE-2022-28948 replace gopkg.in/yaml.v3 => gopkg.in/yaml.v3 v3.0.1 +// Fix CVE-2022-26945 +replace github.com/hashicorp/go-getter => github.com/hashicorp/go-getter v1.6.1 + require ( cloud.google.com/go v0.81.0 // indirect cloud.google.com/go/storage v1.10.0 // indirect @@ -108,7 +111,7 @@ require ( golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3 // indirect golang.org/x/net v0.0.0-20220225172249-27dd8689420f // indirect golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 // indirect - golang.org/x/sys v0.0.0-20220209214540-3681064d5158 // indirect + golang.org/x/sys v0.0.0-20220517195934-5e4e11fc645e // indirect golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect golang.org/x/text v0.3.7 // indirect golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 // indirect diff --git a/tests/azure/go.sum b/tests/azure/go.sum index 50b4c0a4..2ced1380 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -372,8 +372,8 @@ github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtng github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= -github.com/hashicorp/go-getter v1.5.3 h1:NF5+zOlQegim+w/EUhSLh6QhXHmZMEeHLQzllkQ3ROU= -github.com/hashicorp/go-getter v1.5.3/go.mod h1:BrrV/1clo8cCYu6mxvboYg+KutTiFnXjMEgDD8+i7ZI= +github.com/hashicorp/go-getter v1.6.1 h1:NASsgP4q6tL94WH6nJxKWj8As2H/2kop/bB1d8JMyRY= +github.com/hashicorp/go-getter v1.6.1/go.mod h1:IZCrswsZPeWv9IkVnLElzRU/gz/QPi6pZHn4tv6vbwA= github.com/hashicorp/go-hclog v0.9.2 h1:CG6TE5H9/JXsFWJCfoIVpKFIkFe6ysEuHirp4DxCsHI= github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= @@ -866,8 +866,9 @@ golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220209214540-3681064d5158 h1:rm+CHSpPEEW2IsXUib1ThaHIjuBVZjxNgSKmBLFfD4c= golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220517195934-5e4e11fc645e h1:w36l2Uw3dRan1K3TyXriXvY+6T56GNmlKGcqiQUJDfM= +golang.org/x/sys v0.0.0-20220517195934-5e4e11fc645e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= From f6c14c939d9484fc13dd3c25ccbeeb65f545fc29 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 8 Jun 2022 17:36:16 +0300 Subject: [PATCH 138/818] Add CRDs to `flux check` command Verify that the Flux CRDs are registered on the cluster and print their version. Signed-off-by: Stefan Prodan --- cmd/flux/check.go | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/cmd/flux/check.go b/cmd/flux/check.go index 5ad70f9b..05b69e14 100644 --- a/cmd/flux/check.go +++ b/cmd/flux/check.go @@ -24,6 +24,7 @@ import ( "github.com/Masterminds/semver/v3" "github.com/spf13/cobra" v1 "k8s.io/api/apps/v1" + apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" "k8s.io/client-go/kubernetes" "sigs.k8s.io/controller-runtime/pkg/client" @@ -95,9 +96,16 @@ func runCheckCmd(cmd *cobra.Command, args []string) error { if !componentsCheck() { checkFailed = true } + + logger.Actionf("checking crds") + if !crdsCheck() { + checkFailed = true + } + if checkFailed { os.Exit(1) } + logger.Successf("all checks passed") return nil } @@ -205,3 +213,28 @@ func componentsCheck() bool { } return ok } + +func crdsCheck() bool { + ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) + defer cancel() + + kubeClient, err := utils.KubeClient(kubeconfigArgs, kubeclientOptions) + if err != nil { + return false + } + + ok := true + selector := client.MatchingLabels{manifestgen.PartOfLabelKey: manifestgen.PartOfLabelValue} + var list apiextensionsv1.CustomResourceDefinitionList + if err := kubeClient.List(ctx, &list, client.InNamespace(*kubeconfigArgs.Namespace), selector); err == nil { + for _, crd := range list.Items { + if len(crd.Status.StoredVersions) > 0 { + logger.Successf(crd.Name + "/" + crd.Status.StoredVersions[0]) + } else { + ok = false + logger.Failuref("no stored versions for %s", crd.Name) + } + } + } + return ok +} From 443e5b5539c0d99b14acf7ec2c215a3b573c3be9 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Thu, 9 Jun 2022 09:27:27 +0300 Subject: [PATCH 139/818] Fail check if no controllers or crds are found Signed-off-by: Stefan Prodan --- cmd/flux/check.go | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/cmd/flux/check.go b/cmd/flux/check.go index 05b69e14..cf43654a 100644 --- a/cmd/flux/check.go +++ b/cmd/flux/check.go @@ -103,6 +103,7 @@ func runCheckCmd(cmd *cobra.Command, args []string) error { } if checkFailed { + logger.Failuref("check failed") os.Exit(1) } @@ -199,7 +200,14 @@ func componentsCheck() bool { ok := true selector := client.MatchingLabels{manifestgen.PartOfLabelKey: manifestgen.PartOfLabelValue} var list v1.DeploymentList - if err := kubeClient.List(ctx, &list, client.InNamespace(*kubeconfigArgs.Namespace), selector); err == nil { + ns := *kubeconfigArgs.Namespace + if err := kubeClient.List(ctx, &list, client.InNamespace(ns), selector); err == nil { + if len(list.Items) == 0 { + logger.Failuref("no controllers found in the '%s' namespace with the label selector '%s=%s'", + ns, manifestgen.PartOfLabelKey, manifestgen.PartOfLabelValue) + return false + } + for _, d := range list.Items { if ref, err := buildComponentObjectRefs(d.Name); err == nil { if err := statusChecker.Assess(ref...); err != nil { @@ -227,6 +235,12 @@ func crdsCheck() bool { selector := client.MatchingLabels{manifestgen.PartOfLabelKey: manifestgen.PartOfLabelValue} var list apiextensionsv1.CustomResourceDefinitionList if err := kubeClient.List(ctx, &list, client.InNamespace(*kubeconfigArgs.Namespace), selector); err == nil { + if len(list.Items) == 0 { + logger.Failuref("no crds found with the label selector '%s=%s'", + manifestgen.PartOfLabelKey, manifestgen.PartOfLabelValue) + return false + } + for _, crd := range list.Items { if len(crd.Status.StoredVersions) > 0 { logger.Successf(crd.Name + "/" + crd.Status.StoredVersions[0]) From 7346b1a762a0884c9a73045d6301c836f2a46632 Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Wed, 22 Jun 2022 08:58:48 +0100 Subject: [PATCH 140/818] Return a different success message for helm oci Signed-off-by: Somtochi Onyekwere --- cmd/flux/reconcile_source_helm.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/cmd/flux/reconcile_source_helm.go b/cmd/flux/reconcile_source_helm.go index be27cf82..f559a5e4 100644 --- a/cmd/flux/reconcile_source_helm.go +++ b/cmd/flux/reconcile_source_helm.go @@ -21,6 +21,8 @@ import ( "github.com/spf13/cobra" + "github.com/fluxcd/pkg/apis/meta" + "github.com/fluxcd/pkg/runtime/conditions" sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" ) @@ -46,5 +48,15 @@ func (obj helmRepositoryAdapter) lastHandledReconcileRequest() string { } func (obj helmRepositoryAdapter) successMessage() string { + // HelmRepository of type OCI don't set an Artifact + if obj.Spec.Type == sourcev1.HelmRepositoryTypeOCI { + readyCondition := conditions.Get(obj.HelmRepository, meta.ReadyCondition) + // This shouldn't happen, successMessage shouldn't be called if + // object isn't ready + if readyCondition == nil { + return "" + } + return readyCondition.Message + } return fmt.Sprintf("fetched revision %s", obj.Status.Artifact.Revision) } From 5f35bd4e00406e352e316382ca9ef1fbfbc97203 Mon Sep 17 00:00:00 2001 From: bart-plasmeijer Date: Wed, 22 Jun 2022 16:19:31 +0200 Subject: [PATCH 141/818] put the dashboard config map in the right namespace Signed-off-by: Bart Plasmeijer --- manifests/monitoring/monitoring-config/kustomization.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifests/monitoring/monitoring-config/kustomization.yaml b/manifests/monitoring/monitoring-config/kustomization.yaml index f35f7dbb..29dcad85 100644 --- a/manifests/monitoring/monitoring-config/kustomization.yaml +++ b/manifests/monitoring/monitoring-config/kustomization.yaml @@ -1,6 +1,6 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization -namespace: flux-system +namespace: monitoring resources: - podmonitor.yaml configMapGenerator: From 1894b90d84781e29a191b6b21013640c5f3e7eca Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Thu, 9 Jun 2022 21:42:15 +0100 Subject: [PATCH 142/818] Accept multiple valuesFrom for create_helmrelease Signed-off-by: Somtochi Onyekwere --- cmd/flux/create_helmrelease.go | 31 +++++++--- internal/flags/helm_release_values.go | 72 ---------------------- internal/flags/helm_release_values_test.go | 50 --------------- 3 files changed, 24 insertions(+), 129 deletions(-) delete mode 100644 internal/flags/helm_release_values.go delete mode 100644 internal/flags/helm_release_values_test.go diff --git a/cmd/flux/create_helmrelease.go b/cmd/flux/create_helmrelease.go index b4fdcdf1..24b5f8c0 100644 --- a/cmd/flux/create_helmrelease.go +++ b/cmd/flux/create_helmrelease.go @@ -21,6 +21,7 @@ import ( "encoding/json" "fmt" "os" + "strings" "time" "github.com/fluxcd/flux2/internal/flags" @@ -117,7 +118,7 @@ type helmReleaseFlags struct { targetNamespace string createNamespace bool valuesFiles []string - valuesFrom flags.HelmReleaseValuesFrom + valuesFrom []string saName string crds flags.CRDsPolicy reconcileStrategy string @@ -127,6 +128,8 @@ type helmReleaseFlags struct { var helmReleaseArgs helmReleaseFlags +var supportedHelmReleaseValuesFromKinds = []string{"Secret", "ConfigMap"} + func init() { createHelmReleaseCmd.Flags().StringVar(&helmReleaseArgs.name, "release-name", "", "name used for the Helm release, defaults to a composition of '[-]'") createHelmReleaseCmd.Flags().Var(&helmReleaseArgs.source, "source", helmReleaseArgs.source.Description()) @@ -139,7 +142,7 @@ func init() { createHelmReleaseCmd.Flags().StringVar(&helmReleaseArgs.reconcileStrategy, "reconcile-strategy", "ChartVersion", "the reconcile strategy for helm chart created by the helm release(accepted values: Revision and ChartRevision)") createHelmReleaseCmd.Flags().DurationVarP(&helmReleaseArgs.chartInterval, "chart-interval", "", 0, "the interval of which to check for new chart versions") createHelmReleaseCmd.Flags().StringSliceVar(&helmReleaseArgs.valuesFiles, "values", nil, "local path to values.yaml files, also accepts comma-separated values") - createHelmReleaseCmd.Flags().Var(&helmReleaseArgs.valuesFrom, "values-from", helmReleaseArgs.valuesFrom.Description()) + createHelmReleaseCmd.Flags().StringSliceVar(&helmReleaseArgs.valuesFrom, "values-from", nil, "a Kubernetes object reference that contains the values.yaml data key in the format '/', where kind must be one of: (Secret,ConfigMap)") createHelmReleaseCmd.Flags().Var(&helmReleaseArgs.crds, "crds", helmReleaseArgs.crds.Description()) createHelmReleaseCmd.Flags().StringVar(&helmReleaseArgs.kubeConfigSecretRef, "kubeconfig-secret-ref", "", "the name of the Kubernetes Secret that contains a key with the kubeconfig file for connecting to a remote cluster") createCmd.AddCommand(createHelmReleaseCmd) @@ -260,11 +263,25 @@ func createHelmReleaseCmdRun(cmd *cobra.Command, args []string) error { helmRelease.Spec.Values = &apiextensionsv1.JSON{Raw: jsonRaw} } - if helmReleaseArgs.valuesFrom.String() != "" { - helmRelease.Spec.ValuesFrom = []helmv2.ValuesReference{{ - Kind: helmReleaseArgs.valuesFrom.Kind, - Name: helmReleaseArgs.valuesFrom.Name, - }} + if len(helmReleaseArgs.valuesFrom) != 0 { + values := []helmv2.ValuesReference{} + for _, value := range helmReleaseArgs.valuesFrom { + sourceKind, sourceName := utils.ParseObjectKindName(value) + if sourceKind == "" { + return fmt.Errorf("invalid Kubernetes object reference '%s', must be in format /", value) + } + cleanSourceKind, ok := utils.ContainsEqualFoldItemString(supportedHelmReleaseValuesFromKinds, sourceKind) + if !ok { + return fmt.Errorf("reference kind '%s' is not supported, must be one of: %s", + sourceKind, strings.Join(supportedHelmReleaseValuesFromKinds, ", ")) + } + + values = append(values, helmv2.ValuesReference{ + Name: sourceName, + Kind: cleanSourceKind, + }) + } + helmRelease.Spec.ValuesFrom = values } if createArgs.export { diff --git a/internal/flags/helm_release_values.go b/internal/flags/helm_release_values.go deleted file mode 100644 index 62035be8..00000000 --- a/internal/flags/helm_release_values.go +++ /dev/null @@ -1,72 +0,0 @@ -/* -Copyright 2020 The Flux authors - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package flags - -import ( - "fmt" - "strings" - - "github.com/fluxcd/flux2/internal/utils" -) - -var supportedHelmReleaseValuesFromKinds = []string{"Secret", "ConfigMap"} - -type HelmReleaseValuesFrom struct { - Kind string - Name string -} - -func (v *HelmReleaseValuesFrom) String() string { - if v.Name == "" { - return "" - } - return fmt.Sprintf("%s/%s", v.Kind, v.Name) -} - -func (v *HelmReleaseValuesFrom) Set(str string) error { - if strings.TrimSpace(str) == "" { - return fmt.Errorf("no values given, please specify %s", - v.Description()) - } - - sourceKind, sourceName := utils.ParseObjectKindName(str) - if sourceKind == "" { - return fmt.Errorf("invalid Kubernetes object reference '%s', must be in format /", str) - } - cleanSourceKind, ok := utils.ContainsEqualFoldItemString(supportedHelmReleaseValuesFromKinds, sourceKind) - if !ok { - return fmt.Errorf("reference kind '%s' is not supported, must be one of: %s", - sourceKind, strings.Join(supportedHelmReleaseValuesFromKinds, ", ")) - } - - v.Name = sourceName - v.Kind = cleanSourceKind - - return nil -} - -func (v *HelmReleaseValuesFrom) Type() string { - return "helmReleaseValuesFrom" -} - -func (v *HelmReleaseValuesFrom) Description() string { - return fmt.Sprintf( - "Kubernetes object reference that contains the values.yaml data key in the format '/', "+ - "where kind must be one of: (%s)", - strings.Join(supportedHelmReleaseValuesFromKinds, ", "), - ) -} diff --git a/internal/flags/helm_release_values_test.go b/internal/flags/helm_release_values_test.go deleted file mode 100644 index 369f64bb..00000000 --- a/internal/flags/helm_release_values_test.go +++ /dev/null @@ -1,50 +0,0 @@ -//go:build !e2e -// +build !e2e - -/* -Copyright 2020 The Flux authors - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package flags - -import ( - "testing" -) - -func TestHelmReleaseValuesFrom_Set(t *testing.T) { - tests := []struct { - name string - str string - expect string - expectErr bool - }{ - {"supported", "Secret/foo", "Secret/foo", false}, - {"lower case kind", "secret/foo", "Secret/foo", false}, - {"unsupported", "Unsupported/kind", "", true}, - {"invalid format", "Secret", "", true}, - {"empty", "", "", true}, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - var h HelmReleaseValuesFrom - if err := h.Set(tt.str); (err != nil) != tt.expectErr { - t.Errorf("Set() error = %v, expectErr %v", err, tt.expectErr) - } - if str := h.String(); str != tt.expect { - t.Errorf("Set() = %v, expect %v", str, tt.expect) - } - }) - } -} From d12e6977695a66a1fb1269c4f27f0ed52b731820 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Wed, 15 Jun 2022 13:20:05 +0200 Subject: [PATCH 143/818] logs: select manager container when multiple exist This sets the container to `manager` which is used by all Flux controllers as the container name. The other options I thought about were selecting the first, or doing something with image detection. But both can be sensitive to either users adding their patch as a first entry, or e.g. mirroring the image to a different name. Signed-off-by: Hidde Beydals --- cmd/flux/logs.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/cmd/flux/logs.go b/cmd/flux/logs.go index 50cf96af..f981031f 100644 --- a/cmd/flux/logs.go +++ b/cmd/flux/logs.go @@ -80,6 +80,8 @@ var logsArgs = &logsFlags{ tail: -1, } +const controllerContainer = "manager" + func init() { logsCmd.Flags().Var(&logsArgs.logLevel, "level", logsArgs.logLevel.Description()) logsCmd.Flags().StringVarP(&logsArgs.kind, "kind", "", logsArgs.kind, "displays errors of a particular toolkit kind e.g GitRepository") @@ -146,6 +148,10 @@ func logsCmdRun(cmd *cobra.Command, args []string) error { var requests []rest.ResponseWrapper for _, pod := range pods { + logOpts := logOpts.DeepCopy() + if len(pod.Spec.Containers) > 1 { + logOpts.Container = controllerContainer + } req := clientset.CoreV1().Pods(logsArgs.fluxNamespace).GetLogs(pod.Name, logOpts) requests = append(requests, req) } From 724c93c23dbf32ab61eb7977643525c7455dbc02 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Fri, 24 Jun 2022 11:14:32 +0300 Subject: [PATCH 144/818] Remove image finalizers on uninstall Signed-off-by: Stefan Prodan --- cmd/flux/uninstall.go | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/cmd/flux/uninstall.go b/cmd/flux/uninstall.go index d982ed5b..e16552df 100644 --- a/cmd/flux/uninstall.go +++ b/cmd/flux/uninstall.go @@ -33,6 +33,8 @@ import ( "github.com/fluxcd/flux2/internal/utils" "github.com/fluxcd/flux2/pkg/manifestgen" helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" + autov1 "github.com/fluxcd/image-automation-controller/api/v1beta1" + imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta1" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" ) @@ -261,6 +263,45 @@ func uninstallFinalizers(ctx context.Context, kubeClient client.Client, dryRun b } } } + { + var list imagev1.ImagePolicyList + if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { + for _, r := range list.Items { + r.Finalizers = []string{} + if err := kubeClient.Update(ctx, &r, opts); err != nil { + logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) + } else { + logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) + } + } + } + } + { + var list imagev1.ImageRepositoryList + if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { + for _, r := range list.Items { + r.Finalizers = []string{} + if err := kubeClient.Update(ctx, &r, opts); err != nil { + logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) + } else { + logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) + } + } + } + } + { + var list autov1.ImageUpdateAutomationList + if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { + for _, r := range list.Items { + r.Finalizers = []string{} + if err := kubeClient.Update(ctx, &r, opts); err != nil { + logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) + } else { + logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) + } + } + } + } } func uninstallCustomResourceDefinitions(ctx context.Context, kubeClient client.Client, dryRun bool) { From c430556498e17634fd9c12c80293ce99ce4d95ef Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Fri, 24 Jun 2022 12:29:23 +0000 Subject: [PATCH 145/818] Update toolkit components - source-controller to v0.25.8 https://github.com/fluxcd/source-controller/blob/v0.25.8/CHANGELOG.md - image-reflector-controller to v0.19.2 https://github.com/fluxcd/image-reflector-controller/blob/v0.19.2/CHANGELOG.md - image-automation-controller to v0.23.4 https://github.com/fluxcd/image-automation-controller/blob/v0.23.4/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 6 +++--- go.sum | 12 ++++++------ .../image-automation-controller/kustomization.yaml | 4 ++-- .../image-reflector-controller/kustomization.yaml | 4 ++-- manifests/bases/source-controller/kustomization.yaml | 4 ++-- manifests/crds/kustomization.yaml | 6 +++--- 6 files changed, 18 insertions(+), 18 deletions(-) diff --git a/go.mod b/go.mod index cd12e4ee..6e8f5a18 100644 --- a/go.mod +++ b/go.mod @@ -8,8 +8,8 @@ require ( github.com/cyphar/filepath-securejoin v0.2.3 github.com/fluxcd/go-git-providers v0.6.0 github.com/fluxcd/helm-controller/api v0.22.1 - github.com/fluxcd/image-automation-controller/api v0.23.2 - github.com/fluxcd/image-reflector-controller/api v0.19.1 + github.com/fluxcd/image-automation-controller/api v0.23.4 + github.com/fluxcd/image-reflector-controller/api v0.19.2 github.com/fluxcd/kustomize-controller/api v0.26.1 github.com/fluxcd/notification-controller/api v0.24.0 github.com/fluxcd/pkg/apis/meta v0.14.2 @@ -19,7 +19,7 @@ require ( github.com/fluxcd/pkg/ssh v0.5.0 github.com/fluxcd/pkg/untar v0.1.0 github.com/fluxcd/pkg/version v0.1.0 - github.com/fluxcd/source-controller/api v0.25.5 + github.com/fluxcd/source-controller/api v0.25.8 github.com/go-git/go-git/v5 v5.4.2 github.com/gonvenience/bunt v1.3.4 github.com/gonvenience/ytbx v1.4.4 diff --git a/go.sum b/go.sum index d5a9e93f..5b42fa78 100644 --- a/go.sum +++ b/go.sum @@ -193,10 +193,10 @@ github.com/fluxcd/go-git-providers v0.6.0 h1:XJc3MTYFpuahBSoKTVxmH9OBPCeIyvYoQkT github.com/fluxcd/go-git-providers v0.6.0/go.mod h1:UMFHnMCIO9CBpEln7ZsArEWyXSNxTpm76fyQxUmClrc= github.com/fluxcd/helm-controller/api v0.22.1 h1:J+i6AZMj0SCuQxcpHmyf1qmPdgDKP0nTkyS4/oLHx0M= github.com/fluxcd/helm-controller/api v0.22.1/go.mod h1:2xuHOYjbRv86ekTYkF7VzTwu5hEHYawrdi7FZrvpr4g= -github.com/fluxcd/image-automation-controller/api v0.23.2 h1:2e5ZWaKUGzCD7ItxQDbrO6OXHMYoSHV1drCwFIh8DMQ= -github.com/fluxcd/image-automation-controller/api v0.23.2/go.mod h1:HhjBfqtjsb+Pe5S4ig2cq3n25Rifs8NJ+bppf++Bmb8= -github.com/fluxcd/image-reflector-controller/api v0.19.1 h1:5vEHLVhgxdznn6AfwMea5Bi/qsuIsjiV3goj3pg4FcI= -github.com/fluxcd/image-reflector-controller/api v0.19.1/go.mod h1:WvPujFOXzWttkETUxkCgP9BesCTAfVYzgCeZXu43nY4= +github.com/fluxcd/image-automation-controller/api v0.23.4 h1:MR7TKGxTaFBObyul7ww7YW3DVgtm3eVAcyBGrcvOXIA= +github.com/fluxcd/image-automation-controller/api v0.23.4/go.mod h1:wTxI65xywGEULsKR+eCw0H9uNHqSlISYYeozYIRPPx8= +github.com/fluxcd/image-reflector-controller/api v0.19.2 h1:ZWM+v05M/f01Q/MHuasQWYY2EtD9B/q4CsewK01ROrU= +github.com/fluxcd/image-reflector-controller/api v0.19.2/go.mod h1:WvPujFOXzWttkETUxkCgP9BesCTAfVYzgCeZXu43nY4= github.com/fluxcd/kustomize-controller/api v0.26.1 h1:hX8vPe49/ytKzSAO8Qewb/Cmswt8oit/JNIQ9h5l+xQ= github.com/fluxcd/kustomize-controller/api v0.26.1/go.mod h1:f16v3IErWGQJ0WXtpOW3ATjFukz/KhbkanqS9ZTM8ks= github.com/fluxcd/notification-controller/api v0.24.0 h1:pvLcCD1HT+x0Hup8VLfDrVGFDK33oJKNC7WX6mtEEh0= @@ -219,8 +219,8 @@ github.com/fluxcd/pkg/untar v0.1.0 h1:k97V/xV5hFrAkIkVPuv5AVhyxh1ZzzAKba/lbDfGo6 github.com/fluxcd/pkg/untar v0.1.0/go.mod h1:aGswNyzB1mlz/T/kpOS58mITBMxMKc9tlJBH037A2HY= github.com/fluxcd/pkg/version v0.1.0 h1:v+SmCanmCB5Tj2Cx9TXlj+kNRfPGbAvirkeqsp7ZEAQ= github.com/fluxcd/pkg/version v0.1.0/go.mod h1:V7Z/w8dxLQzv0FHqa5ox5TeyOd2zOd49EeuWFgnwyj4= -github.com/fluxcd/source-controller/api v0.25.5 h1:64rLb5cuHhZ3LcRIxkp+/oAVCyVtjOhQ9kbphdFfR/s= -github.com/fluxcd/source-controller/api v0.25.5/go.mod h1:/e7YRDOqb8z8I3N8ifbDF1mknf8zFsoADtS/Q93iWPs= +github.com/fluxcd/source-controller/api v0.25.8 h1:5/zxan8aWP03Pfk4Mj1YvFE55s6+TmohVDs1UQFdd9c= +github.com/fluxcd/source-controller/api v0.25.8/go.mod h1:/e7YRDOqb8z8I3N8ifbDF1mknf8zFsoADtS/Q93iWPs= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/form3tech-oss/jwt-go v3.2.3+incompatible h1:7ZaBxOI7TMoYBfyA3cQHErNNyAWIKUMIwqxEtgHOs5c= diff --git a/manifests/bases/image-automation-controller/kustomization.yaml b/manifests/bases/image-automation-controller/kustomization.yaml index 468e4a32..ccc8e470 100644 --- a/manifests/bases/image-automation-controller/kustomization.yaml +++ b/manifests/bases/image-automation-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.23.2/image-automation-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.23.2/image-automation-controller.deployment.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.23.4/image-automation-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.23.4/image-automation-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/image-reflector-controller/kustomization.yaml b/manifests/bases/image-reflector-controller/kustomization.yaml index d95fc086..24f8e945 100644 --- a/manifests/bases/image-reflector-controller/kustomization.yaml +++ b/manifests/bases/image-reflector-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.19.1/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.19.1/image-reflector-controller.deployment.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.19.2/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.19.2/image-reflector-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index b05e6a82..ee773ada 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.25.5/source-controller.crds.yaml -- https://github.com/fluxcd/source-controller/releases/download/v0.25.5/source-controller.deployment.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.25.8/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.25.8/source-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index 6b5f4067..579c7a7a 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -1,9 +1,9 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.25.5/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.25.8/source-controller.crds.yaml - https://github.com/fluxcd/kustomize-controller/releases/download/v0.26.1/kustomize-controller.crds.yaml - https://github.com/fluxcd/helm-controller/releases/download/v0.22.1/helm-controller.crds.yaml - https://github.com/fluxcd/notification-controller/releases/download/v0.24.0/notification-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.19.1/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.23.2/image-automation-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.19.2/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.23.4/image-automation-controller.crds.yaml From 95eb7aede0ec644b0b74a8e561a99ab419b07e33 Mon Sep 17 00:00:00 2001 From: David Harris Date: Mon, 27 Jun 2022 21:08:48 +0100 Subject: [PATCH 146/818] add branch to basic auth example Without a reference specified, the create command will fail. Signed-off-by: David Harris --- cmd/flux/create_source_git.go | 1 + 1 file changed, 1 insertion(+) diff --git a/cmd/flux/create_source_git.go b/cmd/flux/create_source_git.go index 9dba83ef..c5cb9e1a 100644 --- a/cmd/flux/create_source_git.go +++ b/cmd/flux/create_source_git.go @@ -117,6 +117,7 @@ For private Git repositories, the basic authentication credentials are stored in # Create a source for a Git repository using basic authentication flux create source git podinfo \ --url=https://github.com/stefanprodan/podinfo \ + --branch=master \ --username=username \ --password=password`, RunE: createSourceGitCmdRun, From c24e73897307bd9f06fddb026cca82d06d55bf26 Mon Sep 17 00:00:00 2001 From: TianZong48 Date: Tue, 28 Jun 2022 23:27:32 +0800 Subject: [PATCH 147/818] logs: write into writer from io.Pipe instead os.Stdout Signed-off-by: TianZong48 --- cmd/flux/logs.go | 27 +++++++++++---------------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/cmd/flux/logs.go b/cmd/flux/logs.go index f981031f..90ee8fbe 100644 --- a/cmd/flux/logs.go +++ b/cmd/flux/logs.go @@ -204,12 +204,10 @@ func parallelPodLogs(ctx context.Context, requests []rest.ResponseWrapper) error wg := &sync.WaitGroup{} wg.Add(len(requests)) - var mutex = &sync.Mutex{} - for _, request := range requests { go func(req rest.ResponseWrapper) { defer wg.Done() - if err := logRequest(mutex, ctx, req, os.Stdout); err != nil { + if err := logRequest(ctx, req, writer); err != nil { writer.CloseWithError(err) return } @@ -226,9 +224,8 @@ func parallelPodLogs(ctx context.Context, requests []rest.ResponseWrapper) error } func podLogs(ctx context.Context, requests []rest.ResponseWrapper) error { - mutex := &sync.Mutex{} for _, req := range requests { - if err := logRequest(mutex, ctx, req, os.Stdout); err != nil { + if err := logRequest(ctx, req, os.Stdout); err != nil { return err } } @@ -246,7 +243,7 @@ func createLabelStringFromMap(m map[string]string) string { return strings.Join(strArr, ",") } -func logRequest(mu *sync.Mutex, ctx context.Context, request rest.ResponseWrapper, w io.Writer) error { +func logRequest(ctx context.Context, request rest.ResponseWrapper, w io.Writer) error { stream, err := request.Stream(ctx) if err != nil { return err @@ -261,6 +258,7 @@ func logRequest(mu *sync.Mutex, ctx context.Context, request rest.ResponseWrappe return fmt.Errorf("unable to create template, err: %s", err) } + bw := bufio.NewWriter(w) for scanner.Scan() { line := scanner.Text() if !strings.HasPrefix(line, "{") { @@ -271,24 +269,21 @@ func logRequest(mu *sync.Mutex, ctx context.Context, request rest.ResponseWrappe logger.Failuref("parse error: %s", err) break } - - mu.Lock() - filterPrintLog(t, &l) - mu.Unlock() + filterPrintLog(t, &l, bw) + bw.Flush() } return nil } -func filterPrintLog(t *template.Template, l *ControllerLogEntry) { +func filterPrintLog(t *template.Template, l *ControllerLogEntry, w io.Writer) { if logsArgs.logLevel != "" && logsArgs.logLevel != l.Level || - logsArgs.kind != "" && strings.ToLower(logsArgs.kind) != strings.ToLower(l.Kind) || - logsArgs.name != "" && strings.ToLower(logsArgs.name) != strings.ToLower(l.Name) || - !logsArgs.allNamespaces && strings.ToLower(*kubeconfigArgs.Namespace) != strings.ToLower(l.Namespace) { + logsArgs.kind != "" && strings.EqualFold(logsArgs.kind, l.Kind) || + logsArgs.name != "" && strings.EqualFold(logsArgs.name, l.Name) || + !logsArgs.allNamespaces && strings.EqualFold(*kubeconfigArgs.Namespace, l.Namespace) { return } - - err := t.Execute(os.Stdout, l) + err := t.Execute(w, l) if err != nil { logger.Failuref("log template error: %s", err) } From 115b58fe49dccfde49bbcde1e75b2f594a6724dd Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Wed, 29 Jun 2022 13:14:11 +0000 Subject: [PATCH 148/818] Update toolkit components - kustomize-controller to v0.26.2 https://github.com/fluxcd/kustomize-controller/blob/v0.26.2/CHANGELOG.md - source-controller to v0.25.9 https://github.com/fluxcd/source-controller/blob/v0.25.9/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 4 ++-- go.sum | 8 ++++---- manifests/bases/kustomize-controller/kustomization.yaml | 4 ++-- manifests/bases/source-controller/kustomization.yaml | 4 ++-- manifests/crds/kustomization.yaml | 4 ++-- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/go.mod b/go.mod index 6e8f5a18..f3bbec26 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/fluxcd/helm-controller/api v0.22.1 github.com/fluxcd/image-automation-controller/api v0.23.4 github.com/fluxcd/image-reflector-controller/api v0.19.2 - github.com/fluxcd/kustomize-controller/api v0.26.1 + github.com/fluxcd/kustomize-controller/api v0.26.2 github.com/fluxcd/notification-controller/api v0.24.0 github.com/fluxcd/pkg/apis/meta v0.14.2 github.com/fluxcd/pkg/kustomize v0.5.2 @@ -19,7 +19,7 @@ require ( github.com/fluxcd/pkg/ssh v0.5.0 github.com/fluxcd/pkg/untar v0.1.0 github.com/fluxcd/pkg/version v0.1.0 - github.com/fluxcd/source-controller/api v0.25.8 + github.com/fluxcd/source-controller/api v0.25.9 github.com/go-git/go-git/v5 v5.4.2 github.com/gonvenience/bunt v1.3.4 github.com/gonvenience/ytbx v1.4.4 diff --git a/go.sum b/go.sum index 5b42fa78..8767b9bf 100644 --- a/go.sum +++ b/go.sum @@ -197,8 +197,8 @@ github.com/fluxcd/image-automation-controller/api v0.23.4 h1:MR7TKGxTaFBObyul7ww github.com/fluxcd/image-automation-controller/api v0.23.4/go.mod h1:wTxI65xywGEULsKR+eCw0H9uNHqSlISYYeozYIRPPx8= github.com/fluxcd/image-reflector-controller/api v0.19.2 h1:ZWM+v05M/f01Q/MHuasQWYY2EtD9B/q4CsewK01ROrU= github.com/fluxcd/image-reflector-controller/api v0.19.2/go.mod h1:WvPujFOXzWttkETUxkCgP9BesCTAfVYzgCeZXu43nY4= -github.com/fluxcd/kustomize-controller/api v0.26.1 h1:hX8vPe49/ytKzSAO8Qewb/Cmswt8oit/JNIQ9h5l+xQ= -github.com/fluxcd/kustomize-controller/api v0.26.1/go.mod h1:f16v3IErWGQJ0WXtpOW3ATjFukz/KhbkanqS9ZTM8ks= +github.com/fluxcd/kustomize-controller/api v0.26.2 h1:ll54Lhc/8mWQmyveLZvlo/aMgBrdctO3dL/EivT5Qik= +github.com/fluxcd/kustomize-controller/api v0.26.2/go.mod h1:f16v3IErWGQJ0WXtpOW3ATjFukz/KhbkanqS9ZTM8ks= github.com/fluxcd/notification-controller/api v0.24.0 h1:pvLcCD1HT+x0Hup8VLfDrVGFDK33oJKNC7WX6mtEEh0= github.com/fluxcd/notification-controller/api v0.24.0/go.mod h1:pld1fyodxqdWPBr+Ez+kTixmtmO2o3o0I5Zf5wQDHGM= github.com/fluxcd/pkg/apis/acl v0.0.3 h1:Lw0ZHdpnO4G7Zy9KjrzwwBmDZQuy4qEjaU/RvA6k1lc= @@ -219,8 +219,8 @@ github.com/fluxcd/pkg/untar v0.1.0 h1:k97V/xV5hFrAkIkVPuv5AVhyxh1ZzzAKba/lbDfGo6 github.com/fluxcd/pkg/untar v0.1.0/go.mod h1:aGswNyzB1mlz/T/kpOS58mITBMxMKc9tlJBH037A2HY= github.com/fluxcd/pkg/version v0.1.0 h1:v+SmCanmCB5Tj2Cx9TXlj+kNRfPGbAvirkeqsp7ZEAQ= github.com/fluxcd/pkg/version v0.1.0/go.mod h1:V7Z/w8dxLQzv0FHqa5ox5TeyOd2zOd49EeuWFgnwyj4= -github.com/fluxcd/source-controller/api v0.25.8 h1:5/zxan8aWP03Pfk4Mj1YvFE55s6+TmohVDs1UQFdd9c= -github.com/fluxcd/source-controller/api v0.25.8/go.mod h1:/e7YRDOqb8z8I3N8ifbDF1mknf8zFsoADtS/Q93iWPs= +github.com/fluxcd/source-controller/api v0.25.9 h1:hdaBYYNuW3qTcXRMfrxO5paK+UVFL9ApZS495nd7K2w= +github.com/fluxcd/source-controller/api v0.25.9/go.mod h1:/e7YRDOqb8z8I3N8ifbDF1mknf8zFsoADtS/Q93iWPs= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/form3tech-oss/jwt-go v3.2.3+incompatible h1:7ZaBxOI7TMoYBfyA3cQHErNNyAWIKUMIwqxEtgHOs5c= diff --git a/manifests/bases/kustomize-controller/kustomization.yaml b/manifests/bases/kustomize-controller/kustomization.yaml index 1b8b28ed..47f182a3 100644 --- a/manifests/bases/kustomize-controller/kustomization.yaml +++ b/manifests/bases/kustomize-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.26.1/kustomize-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.26.1/kustomize-controller.deployment.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.26.2/kustomize-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.26.2/kustomize-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index ee773ada..00ef3d73 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.25.8/source-controller.crds.yaml -- https://github.com/fluxcd/source-controller/releases/download/v0.25.8/source-controller.deployment.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.25.9/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.25.9/source-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index 579c7a7a..f8fac70a 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.25.8/source-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.26.1/kustomize-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.25.9/source-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.26.2/kustomize-controller.crds.yaml - https://github.com/fluxcd/helm-controller/releases/download/v0.22.1/helm-controller.crds.yaml - https://github.com/fluxcd/notification-controller/releases/download/v0.24.0/notification-controller.crds.yaml - https://github.com/fluxcd/image-reflector-controller/releases/download/v0.19.2/image-reflector-controller.crds.yaml From c7a6ed53ca4bcc722acc4e712bbeb70027661896 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Thu, 31 Mar 2022 11:08:28 +0300 Subject: [PATCH 149/818] Add proposal for adding OCI support for Kubernetes manifests to Flux Signed-off-by: Stefan Prodan --- rfcs/kubernetes-oci/README.md | 140 ++++++++++++++++++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 rfcs/kubernetes-oci/README.md diff --git a/rfcs/kubernetes-oci/README.md b/rfcs/kubernetes-oci/README.md new file mode 100644 index 00000000..65b0737e --- /dev/null +++ b/rfcs/kubernetes-oci/README.md @@ -0,0 +1,140 @@ +# RFC-xxxx Flux OCI support for Kubernetes manifests + +**Status:** provisional + +**Creation date:** 2022-03-31 + +**Last update:** 2022-03-31 + +## Summary + +Flux should be able to distribute and reconcile Kubernetes configuration packaged as OCI artifacts. + +On the client-side, the Flux CLI should offer a command for packaging Kubernetes configs into +an OCI artifact and pushing the artifact to a container registry using the Docker config file +and the Docker credential helpers for authentication. + +On the server-side, the Flux source-controller should offer a dedicated API Kind for defining +how OCI artifacts are pulled from container registries and how the artifact's authenticity can be verified. +Flux should be able to work with any type of artifact even if it's not created with the Flux CLI. + +## Motivation + +Given that OCI registries are evolving into a generic artifact storage solution, +we should extend Flux to allow fetching Kubernetes manifests and related configs +from container registries similar to how Flux works with Git and Bucket storage. + +With OCI support, Flux users can automate artifact updates to Git in the same way +they do today for container images. + +### Goals + +- Add support to the Flux CLI for packaging Kubernetes manifests and related configs into OCI artifacts. +- Add support to Flux source-controller for fetching configs stored as OCI artifacts. +- Make it easy for users to switch from Git repositories and Buckets to OCI repositories. + +### Non-Goals + +- Introduce a new OCI media type for artifacts containing Kubernetes manifests. + +## Proposal + +### Push artifacts + +Flux users should be able to package a local directory containing Kubernetes configs into a tarball +and push the archive to a container registry as an OCI artifact. + +```sh +flux push artifact docker.io/org/app-config:v1.0.0 -f ./deploy +``` + +Flux CLI with produce artifacts of type `application/vnd.oci.image.config.v1+json`. +The directory pointed to by `-f` is archived and compressed in the `tar+gzip` format +and the layer media type is set to `application/vnd.oci.image.layer.v1.tar+gzip`. + +> A proof-of-concept CLI implementation for distributing Kubernetes configs as OCI artifacts +> is available at [kustomizer.dev](https://github.com/stefanprodan/kustomizer). + +### Pull artifacts + +Flux users should be able to define a source for pulling manifests inside the cluster from an OCI repository. + +```yaml +apiVersion: source.toolkit.fluxcd.io/v1beta2 +kind: OCIRepository +metadata: + name: app-config + namespace: flux-system +spec: + interval: 10m + url: docker.io/org/app-config + ref: + tag: v1.0.0 +``` + +An `OCIRepository` can refer to an artifact by tag, digest or semver range: + +```yaml +spec: + ref: + # one of + tag: "latest" + digest: "sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2" + semver: "6.0.x" +``` + +For private repositories, the credentials can be supplied with: + +```yaml +spec: + secretRef: + name: regcred +``` + +The `secretRef` points to a Kubernetes secret in the same namespace as the `OCIRepository`, +the secret type must be `kubernetes.io/dockerconfigjson`. + +To verify the authenticity of an artifact, the Sigstore cosign public key can be supplied with: + +```yaml +spec: + verify: + provider: cosign + secretRef: + name: cosign-key +``` + +### Reconcile artifacts + +The `OCIRepository` can be used as a drop-in replacement for `GitRepository` and `Bucket` sources. +For example a Flux Kustomization can refer to an `OCIRepository` and reconcile the manifests found in the OCI artifact: + +```yaml +apiVersion: kustomize.toolkit.fluxcd.io/v1beta2 +kind: Kustomization +metadata: + name: app + namespace: flux-system +spec: + interval: 10m + sourceRef: + kind: OCIRepository + name: app-config + path: ./ +``` + +### User Stories + +TODO + +### Alternatives + +TODO + +## Design Details + +TODO + +### Enabling the feature + +The feature is enabled by default. From 0fc582d6fde584ec25db6080c15533f9b6594cc6 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Thu, 31 Mar 2022 11:42:58 +0300 Subject: [PATCH 150/818] Add user stories for publishing and reconciling OCI artifacts Signed-off-by: Stefan Prodan --- rfcs/kubernetes-oci/README.md | 91 ++++++++++++++++++++++++++++++++++- 1 file changed, 90 insertions(+), 1 deletion(-) diff --git a/rfcs/kubernetes-oci/README.md b/rfcs/kubernetes-oci/README.md index 65b0737e..d528fa1f 100644 --- a/rfcs/kubernetes-oci/README.md +++ b/rfcs/kubernetes-oci/README.md @@ -125,7 +125,96 @@ spec: ### User Stories -TODO +#### Story 1 + +> As a developer I want to publish my app Kubernetes manifests to the same GHCR registry +> where I publish my app containers. + +First login to GHCR with Docker: + +```sh +docker login ghcr.io -u ${GITHUB_USER} -p ${GITHUB_TOKEN} +``` + +Build your app container image and push it to GHCR: + +```sh +docker build -t ghcr.io/org/my-app:v1.0.0 . +docker push ghcr.io/org/my-app:v1.0.0 +``` + +Edit the app deployment manifest and set the new image tag. +Then push the Kubernetes manifests to GHCR: + +```sh +flux push artifact ghcr.io/org/my-app-config:v1.0.0 -f ./deploy +``` + +Sign the config image with cosign: + +```sh +cosign sign --key cosign.key ghcr.io/org/my-app-config:v1.0.0 +``` + +#### Story 2 + +> As a developer I want to deploy my app using Kubernetes manifests published as OCI artifacts to GHCR. + +First create a secret using a GitHub token that allows access to GHCR: + +```sh +kubectl create secret docker-registry my-app-regcred \ + --docker-server=ghcr.io \ + --docker-username=$GITHUB_USER \ + --docker-password=$GITHUB_TOKEN +``` + +Then create a secret with your cosgin public key: + +```sh +kubectl create secret generic my-app-cosgin-key \ + --from-file=cosign.pub=cosign/my-key.pub +``` + +Then define an `OCIRepository` to fetch and verify the latest app config version: + +```yaml +apiVersion: source.toolkit.fluxcd.io/v1beta2 +kind: OCIRepository +metadata: + name: app-config + namespace: default +spec: + interval: 10m + url: ghcr.io/org/my-app-config + ref: + semver: "1.x" + secretRef: + name: my-app-regcred + verify: + provider: cosign + secretRef: + name: my-app-cosgin-key +``` + +And finally, create a Flux Kustomization to reconcile the app on the cluster: + +```yaml +apiVersion: kustomize.toolkit.fluxcd.io/v1beta2 +kind: Kustomization +metadata: + name: app + namespace: default +spec: + interval: 10m + sourceRef: + kind: OCIRepository + name: app-config + path: ./ + prune: true + wait: true + timeout: 2m +``` ### Alternatives From 183b9a7ee013a76109fef59b2906298f35a8cf84 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Fri, 1 Apr 2022 11:12:26 +0300 Subject: [PATCH 151/818] Add auto-login feature Signed-off-by: Stefan Prodan --- rfcs/kubernetes-oci/README.md | 38 +++++++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/rfcs/kubernetes-oci/README.md b/rfcs/kubernetes-oci/README.md index d528fa1f..12db4e85 100644 --- a/rfcs/kubernetes-oci/README.md +++ b/rfcs/kubernetes-oci/README.md @@ -83,7 +83,23 @@ spec: semver: "6.0.x" ``` -For private repositories, the credentials can be supplied with: +To verify the authenticity of an artifact, the Sigstore cosign public key can be supplied with: + +```yaml +spec: + verify: + provider: cosign + secretRef: + name: cosign-key +``` + +### Pull artifacts from private repositories + +For authentication purposes, Flux users can choose between supplying static credentials with Kubernetes secrets +and cloud-based OIDC using an IAM role binding to the source-controller Kubernetes service account. + +For private repositories hosted on DockerHub, GitHub, Quay, self-hosted Docker Registry and others, +the credentials can be supplied with: ```yaml spec: @@ -94,16 +110,22 @@ spec: The `secretRef` points to a Kubernetes secret in the same namespace as the `OCIRepository`, the secret type must be `kubernetes.io/dockerconfigjson`. -To verify the authenticity of an artifact, the Sigstore cosign public key can be supplied with: +When Flux runs on EKS or GKE, an IAM role (that grants read-only access to ACR, ECR or GCR) +can be used to bind the `source-controller` to the IAM role. -```yaml -spec: - verify: - provider: cosign - secretRef: - name: cosign-key +Similar to image-reflector-controller +[auto-login feature](https://fluxcd.io/docs/guides/image-update/#imagerepository-cloud-providers-authentication), +source-controller will expose dedicated flags for each cloud provider: + +```sh +--aws-autologin-for-ecr +--azure-autologin-for-acr +--gcp-autologin-for-gcr ``` +We should extract the flags and the AWS, Azure and GCP auth implementations from image-reflector-controller into +`fluxcd/pkg/oci/auth` to reuses the code in source-controller. + ### Reconcile artifacts The `OCIRepository` can be used as a drop-in replacement for `GitRepository` and `Bucket` sources. From 8a7c94180b022fe1aa49bccbab941d7bd1a1d8b6 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Tue, 12 Apr 2022 17:53:08 +0300 Subject: [PATCH 152/818] Add client certificate authentication Signed-off-by: Stefan Prodan --- rfcs/kubernetes-oci/README.md | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/rfcs/kubernetes-oci/README.md b/rfcs/kubernetes-oci/README.md index 12db4e85..d96d1def 100644 --- a/rfcs/kubernetes-oci/README.md +++ b/rfcs/kubernetes-oci/README.md @@ -110,7 +110,25 @@ spec: The `secretRef` points to a Kubernetes secret in the same namespace as the `OCIRepository`, the secret type must be `kubernetes.io/dockerconfigjson`. -When Flux runs on EKS or GKE, an IAM role (that grants read-only access to ACR, ECR or GCR) +For private repositories which require a certificate to authenticate, +the client certificate, private key and the CA certificate (if self-signed), can be provided with: + +```yaml +spec: + certSecretRef: + name: regcert +``` + +The `certSecretRef` points to a Kubernetes secret in the same namespace as the `OCIRepository`: + +```shell +kubectl create secret generic regcert \ + --from-file=certFile=client.crt \ + --from-file=keyFile=client.key \ + --from-file=caFile=ca.crt +``` + +When Flux runs on AKS, EKS or GKE, an IAM role (that grants read-only access to ACR, ECR or GCR) can be used to bind the `source-controller` to the IAM role. Similar to image-reflector-controller @@ -126,6 +144,19 @@ source-controller will expose dedicated flags for each cloud provider: We should extract the flags and the AWS, Azure and GCP auth implementations from image-reflector-controller into `fluxcd/pkg/oci/auth` to reuses the code in source-controller. +### Pull artifacts from self-hosted repositories + +For self-hosted Docker registries where the API is exposed with a self-signed TLS certificate, +the CA certificate and private key can be provided with: + +```yaml +spec: + secretRef: + name: regcred + +``` + + ### Reconcile artifacts The `OCIRepository` can be used as a drop-in replacement for `GitRepository` and `Bucket` sources. From 4885278691355ec0ab141bc5c7c9c6852e8d0f68 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 13 Apr 2022 12:07:53 +0300 Subject: [PATCH 153/818] Restructure the OCI auth spec Signed-off-by: Stefan Prodan --- rfcs/kubernetes-oci/README.md | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/rfcs/kubernetes-oci/README.md b/rfcs/kubernetes-oci/README.md index d96d1def..40388236 100644 --- a/rfcs/kubernetes-oci/README.md +++ b/rfcs/kubernetes-oci/README.md @@ -4,7 +4,7 @@ **Creation date:** 2022-03-31 -**Last update:** 2022-03-31 +**Last update:** 2022-04-13 ## Summary @@ -98,6 +98,8 @@ spec: For authentication purposes, Flux users can choose between supplying static credentials with Kubernetes secrets and cloud-based OIDC using an IAM role binding to the source-controller Kubernetes service account. +#### Basic auth + For private repositories hosted on DockerHub, GitHub, Quay, self-hosted Docker Registry and others, the credentials can be supplied with: @@ -108,7 +110,16 @@ spec: ``` The `secretRef` points to a Kubernetes secret in the same namespace as the `OCIRepository`, -the secret type must be `kubernetes.io/dockerconfigjson`. +the secret type must be `kubernetes.io/dockerconfigjson`: + +```shell +kubectl create secret docker-registry regcred \ + --docker-server= \ + --docker-username= \ + --docker-password= +``` + +#### Client cert auth For private repositories which require a certificate to authenticate, the client certificate, private key and the CA certificate (if self-signed), can be provided with: @@ -128,6 +139,8 @@ kubectl create secret generic regcert \ --from-file=caFile=ca.crt ``` +#### OIDC auth + When Flux runs on AKS, EKS or GKE, an IAM role (that grants read-only access to ACR, ECR or GCR) can be used to bind the `source-controller` to the IAM role. @@ -144,19 +157,6 @@ source-controller will expose dedicated flags for each cloud provider: We should extract the flags and the AWS, Azure and GCP auth implementations from image-reflector-controller into `fluxcd/pkg/oci/auth` to reuses the code in source-controller. -### Pull artifacts from self-hosted repositories - -For self-hosted Docker registries where the API is exposed with a self-signed TLS certificate, -the CA certificate and private key can be provided with: - -```yaml -spec: - secretRef: - name: regcred - -``` - - ### Reconcile artifacts The `OCIRepository` can be used as a drop-in replacement for `GitRepository` and `Bucket` sources. From 2912d1d4375f9429ac44278198f6db1ee59e505e Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Tue, 3 May 2022 15:17:49 +0300 Subject: [PATCH 154/818] Add serviceAccountName to auth spec Signed-off-by: Stefan Prodan --- rfcs/kubernetes-oci/README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/rfcs/kubernetes-oci/README.md b/rfcs/kubernetes-oci/README.md index 40388236..27710d4b 100644 --- a/rfcs/kubernetes-oci/README.md +++ b/rfcs/kubernetes-oci/README.md @@ -119,6 +119,13 @@ kubectl create secret docker-registry regcred \ --docker-password= ``` +For image pull secrets attached to a service account, the account name can be specified with: + +```yaml +spec: + serviceAccountName: regsa +``` + #### Client cert auth For private repositories which require a certificate to authenticate, From 44762933b3e6ab9988d916da1a29fccec6986757 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Tue, 7 Jun 2022 11:10:56 +0300 Subject: [PATCH 155/818] Add `flux tag artifact` command Signed-off-by: Stefan Prodan --- rfcs/kubernetes-oci/README.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/rfcs/kubernetes-oci/README.md b/rfcs/kubernetes-oci/README.md index 27710d4b..1d2ae937 100644 --- a/rfcs/kubernetes-oci/README.md +++ b/rfcs/kubernetes-oci/README.md @@ -48,6 +48,13 @@ and push the archive to a container registry as an OCI artifact. flux push artifact docker.io/org/app-config:v1.0.0 -f ./deploy ``` +To ease the promotion workflow of a specific version from one environment to another, the CLI +should offer a tagging command. + +```sh +flux tag artifact docker.io/org/app-config:v1.0.0 latest +``` + Flux CLI with produce artifacts of type `application/vnd.oci.image.config.v1+json`. The directory pointed to by `-f` is archived and compressed in the `tar+gzip` format and the layer media type is set to `application/vnd.oci.image.layer.v1.tar+gzip`. @@ -216,6 +223,12 @@ Sign the config image with cosign: cosign sign --key cosign.key ghcr.io/org/my-app-config:v1.0.0 ``` +Mark v1.0.0 as latest: + +```sh +flux tag artifact ghcr.io/org/my-app-config:v1.0.0 latest +``` + #### Story 2 > As a developer I want to deploy my app using Kubernetes manifests published as OCI artifacts to GHCR. From 34321983e7e8c6dce6108d0f0b1db35bf92fc74c Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Tue, 7 Jun 2022 11:32:55 +0300 Subject: [PATCH 156/818] Add OCI artifact type to alternatives Signed-off-by: Stefan Prodan --- rfcs/kubernetes-oci/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/rfcs/kubernetes-oci/README.md b/rfcs/kubernetes-oci/README.md index 1d2ae937..ad82c7fd 100644 --- a/rfcs/kubernetes-oci/README.md +++ b/rfcs/kubernetes-oci/README.md @@ -291,7 +291,9 @@ spec: ### Alternatives -TODO +An alternative solution is to introduce an OCI artifact type especially made for Kubernetes configuration. +That is considered unpractical, as introducing an OCI type has to go through the +IANA process and Flux is not the owner of those type as Helm is for Helm artifact for example. ## Design Details From a22438b7fa85c914ea38854fa26067f486c04d37 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 22 Jun 2022 12:27:44 +0300 Subject: [PATCH 157/818] Add design details Signed-off-by: Stefan Prodan --- rfcs/kubernetes-oci/README.md | 121 ++++++++++++++++++++++++++++++---- 1 file changed, 110 insertions(+), 11 deletions(-) diff --git a/rfcs/kubernetes-oci/README.md b/rfcs/kubernetes-oci/README.md index ad82c7fd..4b581923 100644 --- a/rfcs/kubernetes-oci/README.md +++ b/rfcs/kubernetes-oci/README.md @@ -4,7 +4,7 @@ **Creation date:** 2022-03-31 -**Last update:** 2022-04-13 +**Last update:** 2022-06-22 ## Summary @@ -45,19 +45,40 @@ Flux users should be able to package a local directory containing Kubernetes con and push the archive to a container registry as an OCI artifact. ```sh -flux push artifact docker.io/org/app-config:v1.0.0 -f ./deploy +flux push artifact docker.io/org/app-config:v1.0.0 \ + --path="./deploy" \ + --source="$(git config --get remote.origin.url)" \ + --revision="$(git branch --show-current)/$(git rev-parse HEAD)" +``` + +The Flux CLI with produce artifacts of type `"application/vnd.docker.distribution.manifest.v2+json` +which ensures compatibility with container registries that don't support custom OCI media types. + +The directory pointed to by `--path` is archived and compressed in the `tar+gzip` format +and the layer media type is set to `application/vnd.docker.image.rootfs.diff.tar.gzip`. + +The source URL and revision are added to the OCI artifact as annotations in the format: + +```json +{ + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.v2+json", + "annotations": { + "source.toolkit.fluxcd.io/url": "https://github.com/org/app.git", + "source.toolkit.fluxcd.io/revision": "main/450796ddb2ab6724ee1cc32a4be56da032d1cca0" + } +} ``` To ease the promotion workflow of a specific version from one environment to another, the CLI should offer a tagging command. ```sh -flux tag artifact docker.io/org/app-config:v1.0.0 latest +flux tag artifact docker.io/org/app-config:v1.0.0 --tag=latest --tag=production ``` -Flux CLI with produce artifacts of type `application/vnd.oci.image.config.v1+json`. -The directory pointed to by `-f` is archived and compressed in the `tar+gzip` format -and the layer media type is set to `application/vnd.oci.image.layer.v1.tar+gzip`. +To help inspect artifacts, the Flux CLI will offer a `build` and a `pull` command for generating +tarballs locally and for downloading the tarballs from remote container registries. > A proof-of-concept CLI implementation for distributing Kubernetes configs as OCI artifacts > is available at [kustomizer.dev](https://github.com/stefanprodan/kustomizer). @@ -214,7 +235,7 @@ Edit the app deployment manifest and set the new image tag. Then push the Kubernetes manifests to GHCR: ```sh -flux push artifact ghcr.io/org/my-app-config:v1.0.0 -f ./deploy +flux push artifact ghcr.io/org/my-app-config:v1.0.0 --path ./deploy ``` Sign the config image with cosign: @@ -223,10 +244,10 @@ Sign the config image with cosign: cosign sign --key cosign.key ghcr.io/org/my-app-config:v1.0.0 ``` -Mark v1.0.0 as latest: +Mark `v1.0.0` as latest: ```sh -flux tag artifact ghcr.io/org/my-app-config:v1.0.0 latest +flux tag artifact ghcr.io/org/my-app-config:v1.0.0 --tag latest ``` #### Story 2 @@ -283,7 +304,7 @@ spec: sourceRef: kind: OCIRepository name: app-config - path: ./ + path: ./deploy prune: true wait: true timeout: 2m @@ -297,7 +318,85 @@ IANA process and Flux is not the owner of those type as Helm is for Helm artifac ## Design Details -TODO +Both the Flux CLI and source-controller will use the [go-containerregistry](https://github.com/google/go-containerregistry) +library for OCI operations such as push, pull, tag, list tags, etc. + +For authentication purposes, the `flux artifact` commands will use the `~/.docker/config.json` +config file and the Docker credential helpers. + +The source-controller will reuse the authentication library from +[image-reflector-controller](https://github.com/fluxcd/image-reflector-controller). + +The Flux CLI will produce OCI artifacts with the following format: + +```json +{ + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.v2+json", + "config": { + "mediaType": "application/vnd.docker.container.image.v1+json", + "size": 233, + "digest": "sha256:e7c52109f8e375176a888fd571dc0e0b40ed8a80d9301208474a2a906b0a2dcc" + }, + "layers": [ + { + "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", + "size": 1091, + "digest": "sha256:ad804afeae14a8a5c9a45b29f4931104a887844691d040c8737ee3cce6fd6735" + } + ], + "annotations": { + "source.toolkit.fluxcd.io/revision": "6.1.6/450796ddb2ab6724ee1cc32a4be56da032d1cca0", + "source.toolkit.fluxcd.io/url": "https://github.com/stefanprodan/podinfo.git" + } +} +``` + +The source-controller will extract the first layer from the OCI artifact, and will repackage it +as an internal `sourcev1.Artifact`. The internal artifact revision will be set to the OCI SHA256 digest: + +```yaml +apiVersion: source.toolkit.fluxcd.io/v1beta2 +kind: OCIRepository +metadata: + creationTimestamp: "2022-06-22T09:14:19Z" + finalizers: + - finalizers.fluxcd.io + generation: 1 + name: podinfo + namespace: oci + resourceVersion: "6603" + uid: 42e0b9f0-021c-476d-86c7-2cd20747bfff +spec: + interval: 10m + ref: + tag: 6.1.6 + timeout: 60s + url: ghcr.io/stefanprodan/manifests/podinfo +status: + artifact: + checksum: d7e924b4882e55b97627355c7b3d2e711e9b54303afa2f50c25377f4df66a83b + lastUpdateTime: "2022-06-22T09:14:21Z" + path: ocirepository/oci/podinfo/3b6cdcc7adcc9a84d3214ee1c029543789d90b5ae69debe9efa3f66e982875de.tar.gz + revision: 3b6cdcc7adcc9a84d3214ee1c029543789d90b5ae69debe9efa3f66e982875de + size: 1105 + url: http://source-controller.flux-system.svc.cluster.local./ocirepository/oci/podinfo/3b6cdcc7adcc9a84d3214ee1c029543789d90b5ae69debe9efa3f66e982875de.tar.gz + conditions: + - lastTransitionTime: "2022-06-22T09:14:21Z" + message: stored artifact for revision '3b6cdcc7adcc9a84d3214ee1c029543789d90b5ae69debe9efa3f66e982875de' + observedGeneration: 1 + reason: Succeeded + status: "True" + type: Ready + - lastTransitionTime: "2022-06-22T09:14:21Z" + message: stored artifact for revision '3b6cdcc7adcc9a84d3214ee1c029543789d90b5ae69debe9efa3f66e982875de' + observedGeneration: 1 + reason: Succeeded + status: "True" + type: ArtifactInStorage + observedGeneration: 1 + url: http://source-controller.flux-system.svc.cluster.local./ocirepository/oci/podinfo/latest.tar.gz +``` ### Enabling the feature From 143609b9fb8f18553f1d6bd3427114509117f284 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Mon, 27 Jun 2022 16:26:07 +0300 Subject: [PATCH 158/818] Add specification for `spec.url` Signed-off-by: Stefan Prodan --- rfcs/kubernetes-oci/README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/rfcs/kubernetes-oci/README.md b/rfcs/kubernetes-oci/README.md index 4b581923..321d4ce3 100644 --- a/rfcs/kubernetes-oci/README.md +++ b/rfcs/kubernetes-oci/README.md @@ -51,7 +51,7 @@ flux push artifact docker.io/org/app-config:v1.0.0 \ --revision="$(git branch --show-current)/$(git rev-parse HEAD)" ``` -The Flux CLI with produce artifacts of type `"application/vnd.docker.distribution.manifest.v2+json` +The Flux CLI will produce artifacts of type `application/vnd.docker.distribution.manifest.v2+json` which ensures compatibility with container registries that don't support custom OCI media types. The directory pointed to by `--path` is archived and compressed in the `tar+gzip` format @@ -100,6 +100,10 @@ spec: tag: v1.0.0 ``` +The `spec.url` field points to the container image repository in the format `://`. +Note that specifying a tag or digest is not in accepted for this field. The `spec.url` value is used by the controller +to fetch the list of tags from the remote OCI repository. + An `OCIRepository` can refer to an artifact by tag, digest or semver range: ```yaml From e060873246f583341d08352ea1cbdaae807d8076 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Tue, 28 Jun 2022 17:26:01 +0300 Subject: [PATCH 159/818] Add examples for flux build, push and list commands Signed-off-by: Stefan Prodan --- rfcs/kubernetes-oci/README.md | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/rfcs/kubernetes-oci/README.md b/rfcs/kubernetes-oci/README.md index 321d4ce3..839f0174 100644 --- a/rfcs/kubernetes-oci/README.md +++ b/rfcs/kubernetes-oci/README.md @@ -46,9 +46,9 @@ and push the archive to a container registry as an OCI artifact. ```sh flux push artifact docker.io/org/app-config:v1.0.0 \ - --path="./deploy" \ --source="$(git config --get remote.origin.url)" \ - --revision="$(git branch --show-current)/$(git rev-parse HEAD)" + --revision="$(git branch --show-current)/$(git rev-parse HEAD)" \ + --path="./deploy" ``` The Flux CLI will produce artifacts of type `application/vnd.docker.distribution.manifest.v2+json` @@ -77,11 +77,20 @@ should offer a tagging command. flux tag artifact docker.io/org/app-config:v1.0.0 --tag=latest --tag=production ``` +To view all the available artifacts in a repository and their metadata, the CLI should +offer a list command. + +```sh +flux list artifacts docker.io/org/app-config +``` + To help inspect artifacts, the Flux CLI will offer a `build` and a `pull` command for generating tarballs locally and for downloading the tarballs from remote container registries. -> A proof-of-concept CLI implementation for distributing Kubernetes configs as OCI artifacts -> is available at [kustomizer.dev](https://github.com/stefanprodan/kustomizer). +```sh +flux build artifact --path ./deploy --output tmp/artifact.tgz +flux pull artifact docker.io/org/app-config:v1.0.0 --output ./manifests +``` ### Pull artifacts @@ -239,7 +248,10 @@ Edit the app deployment manifest and set the new image tag. Then push the Kubernetes manifests to GHCR: ```sh -flux push artifact ghcr.io/org/my-app-config:v1.0.0 --path ./deploy +flux push artifact ghcr.io/org/my-app-config:v1.0.0 \ + --source="$(git config --get remote.origin.url)" \ + --revision="$(git tag --points-at HEAD)/$(git rev-parse HEAD)"\ + --path="./deploy" ``` Sign the config image with cosign: @@ -254,6 +266,15 @@ Mark `v1.0.0` as latest: flux tag artifact ghcr.io/org/my-app-config:v1.0.0 --tag latest ``` +List the artifacts and their metadata with: + +```console +$ flux list artifacts ghcr.io/org/my-app-config +ARTIFACT DIGEST SOURCE REVISION +ghcr.io/org/my-app-config:latest sha256:45b95019d30af335137977a369ad56e9ea9e9c75bb01afb081a629ba789b890c https://github.com/org/my-app-config.git v1.0.0/20b3a674391df53f05e59a33554973d1cbd4d549 +ghcr.io/org/my-app-config:v1.0.0 sha256:45b95019d30af335137977a369ad56e9ea9e9c75bb01afb081a629ba789b890c https://github.com/org/my-app-config.git v1.0.0/3f45e72f0d3457e91e3c530c346d86969f9f4034 +``` + #### Story 2 > As a developer I want to deploy my app using Kubernetes manifests published as OCI artifacts to GHCR. From 6b9c0a5e4897c46500753076a7d71946b52fefd1 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Fri, 1 Jul 2022 15:49:26 +0300 Subject: [PATCH 160/818] Add `oci://` proto to the spec Signed-off-by: Stefan Prodan --- rfcs/kubernetes-oci/README.md | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/rfcs/kubernetes-oci/README.md b/rfcs/kubernetes-oci/README.md index 839f0174..90fd9137 100644 --- a/rfcs/kubernetes-oci/README.md +++ b/rfcs/kubernetes-oci/README.md @@ -45,7 +45,7 @@ Flux users should be able to package a local directory containing Kubernetes con and push the archive to a container registry as an OCI artifact. ```sh -flux push artifact docker.io/org/app-config:v1.0.0 \ +flux push artifact oci://docker.io/org/app-config:v1.0.0 \ --source="$(git config --get remote.origin.url)" \ --revision="$(git branch --show-current)/$(git rev-parse HEAD)" \ --path="./deploy" @@ -74,14 +74,14 @@ To ease the promotion workflow of a specific version from one environment to ano should offer a tagging command. ```sh -flux tag artifact docker.io/org/app-config:v1.0.0 --tag=latest --tag=production +flux tag artifact oci://docker.io/org/app-config:v1.0.0 --tag=latest --tag=production ``` To view all the available artifacts in a repository and their metadata, the CLI should offer a list command. ```sh -flux list artifacts docker.io/org/app-config +flux list artifacts oci://docker.io/org/app-config ``` To help inspect artifacts, the Flux CLI will offer a `build` and a `pull` command for generating @@ -89,7 +89,7 @@ tarballs locally and for downloading the tarballs from remote container registri ```sh flux build artifact --path ./deploy --output tmp/artifact.tgz -flux pull artifact docker.io/org/app-config:v1.0.0 --output ./manifests +flux pull artifact oci://docker.io/org/app-config:v1.0.0 --output ./manifests ``` ### Pull artifacts @@ -104,12 +104,12 @@ metadata: namespace: flux-system spec: interval: 10m - url: docker.io/org/app-config + url: oci://docker.io/org/app-config ref: tag: v1.0.0 ``` -The `spec.url` field points to the container image repository in the format `://`. +The `spec.url` field points to the container image repository in the format `oci://://`. Note that specifying a tag or digest is not in accepted for this field. The `spec.url` value is used by the controller to fetch the list of tags from the remote OCI repository. @@ -202,13 +202,10 @@ source-controller will expose dedicated flags for each cloud provider: --gcp-autologin-for-gcr ``` -We should extract the flags and the AWS, Azure and GCP auth implementations from image-reflector-controller into -`fluxcd/pkg/oci/auth` to reuses the code in source-controller. - ### Reconcile artifacts The `OCIRepository` can be used as a drop-in replacement for `GitRepository` and `Bucket` sources. -For example a Flux Kustomization can refer to an `OCIRepository` and reconcile the manifests found in the OCI artifact: +For example, a Flux Kustomization can refer to an `OCIRepository` and reconcile the manifests found in the OCI artifact: ```yaml apiVersion: kustomize.toolkit.fluxcd.io/v1beta2 @@ -248,7 +245,7 @@ Edit the app deployment manifest and set the new image tag. Then push the Kubernetes manifests to GHCR: ```sh -flux push artifact ghcr.io/org/my-app-config:v1.0.0 \ +flux push artifact oci://ghcr.io/org/my-app-config:v1.0.0 \ --source="$(git config --get remote.origin.url)" \ --revision="$(git tag --points-at HEAD)/$(git rev-parse HEAD)"\ --path="./deploy" @@ -263,13 +260,13 @@ cosign sign --key cosign.key ghcr.io/org/my-app-config:v1.0.0 Mark `v1.0.0` as latest: ```sh -flux tag artifact ghcr.io/org/my-app-config:v1.0.0 --tag latest +flux tag artifact oci://ghcr.io/org/my-app-config:v1.0.0 --tag latest ``` List the artifacts and their metadata with: ```console -$ flux list artifacts ghcr.io/org/my-app-config +$ flux list artifacts oci://ghcr.io/org/my-app-config ARTIFACT DIGEST SOURCE REVISION ghcr.io/org/my-app-config:latest sha256:45b95019d30af335137977a369ad56e9ea9e9c75bb01afb081a629ba789b890c https://github.com/org/my-app-config.git v1.0.0/20b3a674391df53f05e59a33554973d1cbd4d549 ghcr.io/org/my-app-config:v1.0.0 sha256:45b95019d30af335137977a369ad56e9ea9e9c75bb01afb081a629ba789b890c https://github.com/org/my-app-config.git v1.0.0/3f45e72f0d3457e91e3c530c346d86969f9f4034 @@ -305,7 +302,7 @@ metadata: namespace: default spec: interval: 10m - url: ghcr.io/org/my-app-config + url: oci://ghcr.io/org/my-app-config ref: semver: "1.x" secretRef: @@ -397,7 +394,7 @@ spec: ref: tag: 6.1.6 timeout: 60s - url: ghcr.io/stefanprodan/manifests/podinfo + url: oci://ghcr.io/stefanprodan/manifests/podinfo status: artifact: checksum: d7e924b4882e55b97627355c7b3d2e711e9b54303afa2f50c25377f4df66a83b From 4a55b828b1b7ebe962319705c8b167c7acdceaab Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 6 Jul 2022 17:02:19 +0300 Subject: [PATCH 161/818] Mark RFC-0003 as implementable Signed-off-by: Stefan Prodan --- rfcs/{kubernetes-oci => 0003-kubernetes-oci}/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) rename rfcs/{kubernetes-oci => 0003-kubernetes-oci}/README.md (99%) diff --git a/rfcs/kubernetes-oci/README.md b/rfcs/0003-kubernetes-oci/README.md similarity index 99% rename from rfcs/kubernetes-oci/README.md rename to rfcs/0003-kubernetes-oci/README.md index 90fd9137..4494b195 100644 --- a/rfcs/kubernetes-oci/README.md +++ b/rfcs/0003-kubernetes-oci/README.md @@ -1,10 +1,10 @@ -# RFC-xxxx Flux OCI support for Kubernetes manifests +# RFC-0003 Flux OCI support for Kubernetes manifests -**Status:** provisional +**Status:** implementable **Creation date:** 2022-03-31 -**Last update:** 2022-06-22 +**Last update:** 2022-07-06 ## Summary From 7aeec0a0c4ce6a8fc88d91d623559fafe32817f3 Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Fri, 15 Jul 2022 18:02:07 +0000 Subject: [PATCH 162/818] Update toolkit components - helm-controller to v0.22.2 https://github.com/fluxcd/helm-controller/blob/v0.22.2/CHANGELOG.md - kustomize-controller to v0.26.3 https://github.com/fluxcd/kustomize-controller/blob/v0.26.3/CHANGELOG.md - source-controller to v0.25.10 https://github.com/fluxcd/source-controller/blob/v0.25.10/CHANGELOG.md - notification-controller to v0.24.1 https://github.com/fluxcd/notification-controller/blob/v0.24.1/CHANGELOG.md - image-reflector-controller to v0.19.3 https://github.com/fluxcd/image-reflector-controller/blob/v0.19.3/CHANGELOG.md - image-automation-controller to v0.23.5 https://github.com/fluxcd/image-automation-controller/blob/v0.23.5/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 12 +++++----- go.sum | 24 +++++++++---------- .../bases/helm-controller/kustomization.yaml | 4 ++-- .../kustomization.yaml | 4 ++-- .../kustomization.yaml | 4 ++-- .../kustomize-controller/kustomization.yaml | 4 ++-- .../kustomization.yaml | 4 ++-- .../source-controller/kustomization.yaml | 4 ++-- manifests/crds/kustomization.yaml | 12 +++++----- 9 files changed, 36 insertions(+), 36 deletions(-) diff --git a/go.mod b/go.mod index f3bbec26..0064f43a 100644 --- a/go.mod +++ b/go.mod @@ -7,11 +7,11 @@ require ( github.com/ProtonMail/go-crypto v0.0.0-20220517143526-88bb52951d5b github.com/cyphar/filepath-securejoin v0.2.3 github.com/fluxcd/go-git-providers v0.6.0 - github.com/fluxcd/helm-controller/api v0.22.1 - github.com/fluxcd/image-automation-controller/api v0.23.4 - github.com/fluxcd/image-reflector-controller/api v0.19.2 - github.com/fluxcd/kustomize-controller/api v0.26.2 - github.com/fluxcd/notification-controller/api v0.24.0 + github.com/fluxcd/helm-controller/api v0.22.2 + github.com/fluxcd/image-automation-controller/api v0.23.5 + github.com/fluxcd/image-reflector-controller/api v0.19.3 + github.com/fluxcd/kustomize-controller/api v0.26.3 + github.com/fluxcd/notification-controller/api v0.24.1 github.com/fluxcd/pkg/apis/meta v0.14.2 github.com/fluxcd/pkg/kustomize v0.5.2 github.com/fluxcd/pkg/runtime v0.16.2 @@ -19,7 +19,7 @@ require ( github.com/fluxcd/pkg/ssh v0.5.0 github.com/fluxcd/pkg/untar v0.1.0 github.com/fluxcd/pkg/version v0.1.0 - github.com/fluxcd/source-controller/api v0.25.9 + github.com/fluxcd/source-controller/api v0.25.10 github.com/go-git/go-git/v5 v5.4.2 github.com/gonvenience/bunt v1.3.4 github.com/gonvenience/ytbx v1.4.4 diff --git a/go.sum b/go.sum index 8767b9bf..fce1ee79 100644 --- a/go.sum +++ b/go.sum @@ -191,16 +191,16 @@ github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYF github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fluxcd/go-git-providers v0.6.0 h1:XJc3MTYFpuahBSoKTVxmH9OBPCeIyvYoQkTjTqa3fH4= github.com/fluxcd/go-git-providers v0.6.0/go.mod h1:UMFHnMCIO9CBpEln7ZsArEWyXSNxTpm76fyQxUmClrc= -github.com/fluxcd/helm-controller/api v0.22.1 h1:J+i6AZMj0SCuQxcpHmyf1qmPdgDKP0nTkyS4/oLHx0M= -github.com/fluxcd/helm-controller/api v0.22.1/go.mod h1:2xuHOYjbRv86ekTYkF7VzTwu5hEHYawrdi7FZrvpr4g= -github.com/fluxcd/image-automation-controller/api v0.23.4 h1:MR7TKGxTaFBObyul7ww7YW3DVgtm3eVAcyBGrcvOXIA= -github.com/fluxcd/image-automation-controller/api v0.23.4/go.mod h1:wTxI65xywGEULsKR+eCw0H9uNHqSlISYYeozYIRPPx8= -github.com/fluxcd/image-reflector-controller/api v0.19.2 h1:ZWM+v05M/f01Q/MHuasQWYY2EtD9B/q4CsewK01ROrU= -github.com/fluxcd/image-reflector-controller/api v0.19.2/go.mod h1:WvPujFOXzWttkETUxkCgP9BesCTAfVYzgCeZXu43nY4= -github.com/fluxcd/kustomize-controller/api v0.26.2 h1:ll54Lhc/8mWQmyveLZvlo/aMgBrdctO3dL/EivT5Qik= -github.com/fluxcd/kustomize-controller/api v0.26.2/go.mod h1:f16v3IErWGQJ0WXtpOW3ATjFukz/KhbkanqS9ZTM8ks= -github.com/fluxcd/notification-controller/api v0.24.0 h1:pvLcCD1HT+x0Hup8VLfDrVGFDK33oJKNC7WX6mtEEh0= -github.com/fluxcd/notification-controller/api v0.24.0/go.mod h1:pld1fyodxqdWPBr+Ez+kTixmtmO2o3o0I5Zf5wQDHGM= +github.com/fluxcd/helm-controller/api v0.22.2 h1:nh0GZBsUE0gNzm4PmPa4aOoqYlbZbpGt2pcIL9S2184= +github.com/fluxcd/helm-controller/api v0.22.2/go.mod h1:GfD9TFgLyn81VgwZN1yM47/aUdz0SwTSyRAGmC8xZ+c= +github.com/fluxcd/image-automation-controller/api v0.23.5 h1:haMWilXLHXQGn4YXwm70kYvU+7QU5iNoS+0Ybm+4Gac= +github.com/fluxcd/image-automation-controller/api v0.23.5/go.mod h1:v/sRqXwo0jNyXK0f4oUY7GZt8NgcNy5twP3OVEsoAt0= +github.com/fluxcd/image-reflector-controller/api v0.19.3 h1:mgKNHZL8AAvqzBdiuVNQtOVlEijgFyGvTr4A6vuNVgc= +github.com/fluxcd/image-reflector-controller/api v0.19.3/go.mod h1:QFRYeJTfUQY9l3r+PqGGAlr7KzJRCKN7Lsvg9nXaWHk= +github.com/fluxcd/kustomize-controller/api v0.26.3 h1:RTrRM9N+YWIX8M690x/rDq/ryiEkhnOaq9Sj1AeWcNQ= +github.com/fluxcd/kustomize-controller/api v0.26.3/go.mod h1:Zwvl6iBKbR6SKl5W8APK5hvHfH55S50zAqFLJ/188LQ= +github.com/fluxcd/notification-controller/api v0.24.1 h1:aGe4AEPmCW/8gIRCRhOosppXb2mqZYgfftt16Q05/30= +github.com/fluxcd/notification-controller/api v0.24.1/go.mod h1:hqn/1JsYiv8Gg3xjBYkLJQhez3hbYj2v57ATfSo637M= github.com/fluxcd/pkg/apis/acl v0.0.3 h1:Lw0ZHdpnO4G7Zy9KjrzwwBmDZQuy4qEjaU/RvA6k1lc= github.com/fluxcd/pkg/apis/acl v0.0.3/go.mod h1:XPts6lRJ9C9fIF9xVWofmQwftvhY25n1ps7W9xw0XLU= github.com/fluxcd/pkg/apis/kustomize v0.4.2 h1:5mC/t+OndouK7poFaG4soWLqvHqOxJ3HCsbxu8qyt30= @@ -219,8 +219,8 @@ github.com/fluxcd/pkg/untar v0.1.0 h1:k97V/xV5hFrAkIkVPuv5AVhyxh1ZzzAKba/lbDfGo6 github.com/fluxcd/pkg/untar v0.1.0/go.mod h1:aGswNyzB1mlz/T/kpOS58mITBMxMKc9tlJBH037A2HY= github.com/fluxcd/pkg/version v0.1.0 h1:v+SmCanmCB5Tj2Cx9TXlj+kNRfPGbAvirkeqsp7ZEAQ= github.com/fluxcd/pkg/version v0.1.0/go.mod h1:V7Z/w8dxLQzv0FHqa5ox5TeyOd2zOd49EeuWFgnwyj4= -github.com/fluxcd/source-controller/api v0.25.9 h1:hdaBYYNuW3qTcXRMfrxO5paK+UVFL9ApZS495nd7K2w= -github.com/fluxcd/source-controller/api v0.25.9/go.mod h1:/e7YRDOqb8z8I3N8ifbDF1mknf8zFsoADtS/Q93iWPs= +github.com/fluxcd/source-controller/api v0.25.10 h1:nwOB6Awy6mLlysEHfmqmk6Ek5yebYQ8kYq0lv+bSKb8= +github.com/fluxcd/source-controller/api v0.25.10/go.mod h1:5kihSWjg+gIXLPTTXbe6AnY+g+iDmP+CY4g6nFqublc= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/form3tech-oss/jwt-go v3.2.3+incompatible h1:7ZaBxOI7TMoYBfyA3cQHErNNyAWIKUMIwqxEtgHOs5c= diff --git a/manifests/bases/helm-controller/kustomization.yaml b/manifests/bases/helm-controller/kustomization.yaml index 9f23c54d..5099e3c3 100644 --- a/manifests/bases/helm-controller/kustomization.yaml +++ b/manifests/bases/helm-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/helm-controller/releases/download/v0.22.1/helm-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.22.1/helm-controller.deployment.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.22.2/helm-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.22.2/helm-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/image-automation-controller/kustomization.yaml b/manifests/bases/image-automation-controller/kustomization.yaml index ccc8e470..db716b5a 100644 --- a/manifests/bases/image-automation-controller/kustomization.yaml +++ b/manifests/bases/image-automation-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.23.4/image-automation-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.23.4/image-automation-controller.deployment.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.23.5/image-automation-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.23.5/image-automation-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/image-reflector-controller/kustomization.yaml b/manifests/bases/image-reflector-controller/kustomization.yaml index 24f8e945..a10d020c 100644 --- a/manifests/bases/image-reflector-controller/kustomization.yaml +++ b/manifests/bases/image-reflector-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.19.2/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.19.2/image-reflector-controller.deployment.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.19.3/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.19.3/image-reflector-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/kustomize-controller/kustomization.yaml b/manifests/bases/kustomize-controller/kustomization.yaml index 47f182a3..db3ecfc6 100644 --- a/manifests/bases/kustomize-controller/kustomization.yaml +++ b/manifests/bases/kustomize-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.26.2/kustomize-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.26.2/kustomize-controller.deployment.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.26.3/kustomize-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.26.3/kustomize-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/notification-controller/kustomization.yaml b/manifests/bases/notification-controller/kustomization.yaml index 73cd6eb4..febba4e0 100644 --- a/manifests/bases/notification-controller/kustomization.yaml +++ b/manifests/bases/notification-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/notification-controller/releases/download/v0.24.0/notification-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v0.24.0/notification-controller.deployment.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.24.1/notification-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.24.1/notification-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index 00ef3d73..97485eb6 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.25.9/source-controller.crds.yaml -- https://github.com/fluxcd/source-controller/releases/download/v0.25.9/source-controller.deployment.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.25.10/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.25.10/source-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index f8fac70a..0add1a4e 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -1,9 +1,9 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.25.9/source-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.26.2/kustomize-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.22.1/helm-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v0.24.0/notification-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.19.2/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.23.4/image-automation-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.25.10/source-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.26.3/kustomize-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.22.2/helm-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.24.1/notification-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.19.3/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.23.5/image-automation-controller.crds.yaml From feaab54f706a31c7a16b9d447dd59bc76934cca4 Mon Sep 17 00:00:00 2001 From: Ciaran Moran Date: Mon, 18 Jul 2022 11:23:04 +0100 Subject: [PATCH 163/818] SRCINFO: fix path Signed-off-by: Ciaran Moran --- .github/aur/flux-bin/.SRCINFO.template | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/aur/flux-bin/.SRCINFO.template b/.github/aur/flux-bin/.SRCINFO.template index 5a4e706e..cfdd90b3 100644 --- a/.github/aur/flux-bin/.SRCINFO.template +++ b/.github/aur/flux-bin/.SRCINFO.template @@ -8,9 +8,9 @@ pkgbase = flux-bin arch = armv7h arch = aarch64 license = APACHE - source_x86_64 = flux-bin-${PKGVER}.tar.gz::https://github.com/fluxcd/flux2/releases/download/v1/flux_${PKGVER}_linux_amd64.tar.gz - source_armv6h = flux-bin-${PKGVER}.tar.gz::https://github.com/fluxcd/flux2/releases/download/v1/flux_${PKGVER}_linux_arm.tar.gz - source_armv7h = flux-bin-${PKGVER}.tar.gz::https://github.com/fluxcd/flux2/releases/download/v1/flux_${PKGVER}_linux_arm.tar.gz - source_aarch64 = flux-bin-${PKGVER}.tar.gz::https://github.com/fluxcd/flux2/releases/download/v1/flux_${PKGVER}_linux_arm64.tar.gz + source_x86_64 = flux-bin-${PKGVER}.tar.gz::https://github.com/fluxcd/flux2/releases/download/v${pkgver}/flux_${PKGVER}_linux_amd64.tar.gz + source_armv6h = flux-bin-${PKGVER}.tar.gz::https://github.com/fluxcd/flux2/releases/download/v${pkgver}/flux_${PKGVER}_linux_arm.tar.gz + source_armv7h = flux-bin-${PKGVER}.tar.gz::https://github.com/fluxcd/flux2/releases/download/v${pkgver}/flux_${PKGVER}_linux_arm.tar.gz + source_aarch64 = flux-bin-${PKGVER}.tar.gz::https://github.com/fluxcd/flux2/releases/download/v${pkgver}/flux_${PKGVER}_linux_arm64.tar.gz pkgname = flux-bin From cbecd8ab56bcd88feb630d162d6a3f3769e66b78 Mon Sep 17 00:00:00 2001 From: Ciaran Moran Date: Mon, 18 Jul 2022 11:33:51 +0100 Subject: [PATCH 164/818] SRCINFO: consistent style Signed-off-by: Ciaran Moran --- .github/aur/flux-bin/.SRCINFO.template | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/.github/aur/flux-bin/.SRCINFO.template b/.github/aur/flux-bin/.SRCINFO.template index cfdd90b3..25c3c822 100644 --- a/.github/aur/flux-bin/.SRCINFO.template +++ b/.github/aur/flux-bin/.SRCINFO.template @@ -1,4 +1,5 @@ pkgbase = flux-bin +pkgname = flux-bin pkgdesc = Open and extensible continuous delivery solution for Kubernetes pkgver = ${PKGVER} pkgrel = ${PKGREL} @@ -8,9 +9,7 @@ pkgbase = flux-bin arch = armv7h arch = aarch64 license = APACHE - source_x86_64 = flux-bin-${PKGVER}.tar.gz::https://github.com/fluxcd/flux2/releases/download/v${pkgver}/flux_${PKGVER}_linux_amd64.tar.gz - source_armv6h = flux-bin-${PKGVER}.tar.gz::https://github.com/fluxcd/flux2/releases/download/v${pkgver}/flux_${PKGVER}_linux_arm.tar.gz - source_armv7h = flux-bin-${PKGVER}.tar.gz::https://github.com/fluxcd/flux2/releases/download/v${pkgver}/flux_${PKGVER}_linux_arm.tar.gz - source_aarch64 = flux-bin-${PKGVER}.tar.gz::https://github.com/fluxcd/flux2/releases/download/v${pkgver}/flux_${PKGVER}_linux_arm64.tar.gz - -pkgname = flux-bin + source_x86_64 = ${pkgname}-${pkgver}.tar.gz::https://github.com/fluxcd/flux2/releases/download/v${pkgver}/flux_${pkgver}_linux_amd64.tar.gz + source_armv6h = ${pkgname}-${pkgver}.tar.gz::https://github.com/fluxcd/flux2/releases/download/v${pkgver}/flux_${pkgver}_linux_arm.tar.gz + source_armv7h = ${pkgname}-${pkgver}.tar.gz::https://github.com/fluxcd/flux2/releases/download/v${pkgver}/flux_${pkgver}_linux_arm.tar.gz + source_aarch64 = ${pkgname}-${pkgver}.tar.gz::https://github.com/fluxcd/flux2/releases/download/v${pkgver}/flux_${pkgver}_linux_arm64.tar.gz From ed7a8802875a9cb80216ec6d52eb4ab89683e010 Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Wed, 27 Jul 2022 15:47:46 +0000 Subject: [PATCH 165/818] Update toolkit components - source-controller to v0.25.11 https://github.com/fluxcd/source-controller/blob/v0.25.11/CHANGELOG.md - image-reflector-controller to v0.19.4 https://github.com/fluxcd/image-reflector-controller/blob/v0.19.4/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 4 ++-- go.sum | 8 ++++---- .../bases/image-reflector-controller/kustomization.yaml | 4 ++-- manifests/bases/source-controller/kustomization.yaml | 4 ++-- manifests/crds/kustomization.yaml | 4 ++-- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/go.mod b/go.mod index 0064f43a..fce50c32 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/fluxcd/go-git-providers v0.6.0 github.com/fluxcd/helm-controller/api v0.22.2 github.com/fluxcd/image-automation-controller/api v0.23.5 - github.com/fluxcd/image-reflector-controller/api v0.19.3 + github.com/fluxcd/image-reflector-controller/api v0.19.4 github.com/fluxcd/kustomize-controller/api v0.26.3 github.com/fluxcd/notification-controller/api v0.24.1 github.com/fluxcd/pkg/apis/meta v0.14.2 @@ -19,7 +19,7 @@ require ( github.com/fluxcd/pkg/ssh v0.5.0 github.com/fluxcd/pkg/untar v0.1.0 github.com/fluxcd/pkg/version v0.1.0 - github.com/fluxcd/source-controller/api v0.25.10 + github.com/fluxcd/source-controller/api v0.25.11 github.com/go-git/go-git/v5 v5.4.2 github.com/gonvenience/bunt v1.3.4 github.com/gonvenience/ytbx v1.4.4 diff --git a/go.sum b/go.sum index fce1ee79..9998ddce 100644 --- a/go.sum +++ b/go.sum @@ -195,8 +195,8 @@ github.com/fluxcd/helm-controller/api v0.22.2 h1:nh0GZBsUE0gNzm4PmPa4aOoqYlbZbpG github.com/fluxcd/helm-controller/api v0.22.2/go.mod h1:GfD9TFgLyn81VgwZN1yM47/aUdz0SwTSyRAGmC8xZ+c= github.com/fluxcd/image-automation-controller/api v0.23.5 h1:haMWilXLHXQGn4YXwm70kYvU+7QU5iNoS+0Ybm+4Gac= github.com/fluxcd/image-automation-controller/api v0.23.5/go.mod h1:v/sRqXwo0jNyXK0f4oUY7GZt8NgcNy5twP3OVEsoAt0= -github.com/fluxcd/image-reflector-controller/api v0.19.3 h1:mgKNHZL8AAvqzBdiuVNQtOVlEijgFyGvTr4A6vuNVgc= -github.com/fluxcd/image-reflector-controller/api v0.19.3/go.mod h1:QFRYeJTfUQY9l3r+PqGGAlr7KzJRCKN7Lsvg9nXaWHk= +github.com/fluxcd/image-reflector-controller/api v0.19.4 h1:SnqJS7vhm+jWHsArjMluCdVydu6jY+m3M2mi+oSHh94= +github.com/fluxcd/image-reflector-controller/api v0.19.4/go.mod h1:QFRYeJTfUQY9l3r+PqGGAlr7KzJRCKN7Lsvg9nXaWHk= github.com/fluxcd/kustomize-controller/api v0.26.3 h1:RTrRM9N+YWIX8M690x/rDq/ryiEkhnOaq9Sj1AeWcNQ= github.com/fluxcd/kustomize-controller/api v0.26.3/go.mod h1:Zwvl6iBKbR6SKl5W8APK5hvHfH55S50zAqFLJ/188LQ= github.com/fluxcd/notification-controller/api v0.24.1 h1:aGe4AEPmCW/8gIRCRhOosppXb2mqZYgfftt16Q05/30= @@ -219,8 +219,8 @@ github.com/fluxcd/pkg/untar v0.1.0 h1:k97V/xV5hFrAkIkVPuv5AVhyxh1ZzzAKba/lbDfGo6 github.com/fluxcd/pkg/untar v0.1.0/go.mod h1:aGswNyzB1mlz/T/kpOS58mITBMxMKc9tlJBH037A2HY= github.com/fluxcd/pkg/version v0.1.0 h1:v+SmCanmCB5Tj2Cx9TXlj+kNRfPGbAvirkeqsp7ZEAQ= github.com/fluxcd/pkg/version v0.1.0/go.mod h1:V7Z/w8dxLQzv0FHqa5ox5TeyOd2zOd49EeuWFgnwyj4= -github.com/fluxcd/source-controller/api v0.25.10 h1:nwOB6Awy6mLlysEHfmqmk6Ek5yebYQ8kYq0lv+bSKb8= -github.com/fluxcd/source-controller/api v0.25.10/go.mod h1:5kihSWjg+gIXLPTTXbe6AnY+g+iDmP+CY4g6nFqublc= +github.com/fluxcd/source-controller/api v0.25.11 h1:1YbH5vlQ1k96tbRKTdQHCBsBVMgpp/QaRpKG/r29koQ= +github.com/fluxcd/source-controller/api v0.25.11/go.mod h1:5kihSWjg+gIXLPTTXbe6AnY+g+iDmP+CY4g6nFqublc= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/form3tech-oss/jwt-go v3.2.3+incompatible h1:7ZaBxOI7TMoYBfyA3cQHErNNyAWIKUMIwqxEtgHOs5c= diff --git a/manifests/bases/image-reflector-controller/kustomization.yaml b/manifests/bases/image-reflector-controller/kustomization.yaml index a10d020c..6154b83d 100644 --- a/manifests/bases/image-reflector-controller/kustomization.yaml +++ b/manifests/bases/image-reflector-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.19.3/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.19.3/image-reflector-controller.deployment.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.19.4/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.19.4/image-reflector-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index 97485eb6..20c65d32 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.25.10/source-controller.crds.yaml -- https://github.com/fluxcd/source-controller/releases/download/v0.25.10/source-controller.deployment.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.25.11/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.25.11/source-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index 0add1a4e..eeaa27b9 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -1,9 +1,9 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.25.10/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.25.11/source-controller.crds.yaml - https://github.com/fluxcd/kustomize-controller/releases/download/v0.26.3/kustomize-controller.crds.yaml - https://github.com/fluxcd/helm-controller/releases/download/v0.22.2/helm-controller.crds.yaml - https://github.com/fluxcd/notification-controller/releases/download/v0.24.1/notification-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.19.3/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.19.4/image-reflector-controller.crds.yaml - https://github.com/fluxcd/image-automation-controller/releases/download/v0.23.5/image-automation-controller.crds.yaml From ca212ac592d4c2e953d94a1bb60bb3b6ccd0a108 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Thu, 28 Jul 2022 07:13:34 +0000 Subject: [PATCH 166/818] AUR: ensure `pkgname` is bottom entry in .SRCINFO Signed-off-by: Hidde Beydals --- .github/aur/flux-bin/.SRCINFO.template | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/aur/flux-bin/.SRCINFO.template b/.github/aur/flux-bin/.SRCINFO.template index 25c3c822..4cf609ce 100644 --- a/.github/aur/flux-bin/.SRCINFO.template +++ b/.github/aur/flux-bin/.SRCINFO.template @@ -1,5 +1,4 @@ pkgbase = flux-bin -pkgname = flux-bin pkgdesc = Open and extensible continuous delivery solution for Kubernetes pkgver = ${PKGVER} pkgrel = ${PKGREL} @@ -13,3 +12,5 @@ pkgname = flux-bin source_armv6h = ${pkgname}-${pkgver}.tar.gz::https://github.com/fluxcd/flux2/releases/download/v${pkgver}/flux_${pkgver}_linux_arm.tar.gz source_armv7h = ${pkgname}-${pkgver}.tar.gz::https://github.com/fluxcd/flux2/releases/download/v${pkgver}/flux_${pkgver}_linux_arm.tar.gz source_aarch64 = ${pkgname}-${pkgver}.tar.gz::https://github.com/fluxcd/flux2/releases/download/v${pkgver}/flux_${pkgver}_linux_arm64.tar.gz + +pkgname = flux-bin From f01911d0e2811ff270a9bb7e1bf976f6b99cbab6 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Thu, 28 Jul 2022 15:38:45 +0000 Subject: [PATCH 167/818] AUR: further solve `.SRCINFO` issues Due to the release CI job running on an Ubuntu machine, we do not have easy access to `makepkg` to generate the `.SRCINFO` using `--printsrcinfo` as this is a `pacman` specific utility, and instead we maintain a template. Historically seen, something went wrong here while the `PKGBUILD` file became more complex and certain fields added there were not _also_ included in the `.SRCINFO` template. This commit ensures everything is restored to working state, and provides the proper fix for what was attempted in #2917. In addition, checksums are now included in the file. Signed-off-by: Hidde Beydals --- .github/aur/flux-bin/.SRCINFO.template | 14 ++++++++++---- .github/aur/flux-bin/PKGBUILD.template | 4 ++-- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/.github/aur/flux-bin/.SRCINFO.template b/.github/aur/flux-bin/.SRCINFO.template index 4cf609ce..10aafed7 100644 --- a/.github/aur/flux-bin/.SRCINFO.template +++ b/.github/aur/flux-bin/.SRCINFO.template @@ -8,9 +8,15 @@ pkgbase = flux-bin arch = armv7h arch = aarch64 license = APACHE - source_x86_64 = ${pkgname}-${pkgver}.tar.gz::https://github.com/fluxcd/flux2/releases/download/v${pkgver}/flux_${pkgver}_linux_amd64.tar.gz - source_armv6h = ${pkgname}-${pkgver}.tar.gz::https://github.com/fluxcd/flux2/releases/download/v${pkgver}/flux_${pkgver}_linux_arm.tar.gz - source_armv7h = ${pkgname}-${pkgver}.tar.gz::https://github.com/fluxcd/flux2/releases/download/v${pkgver}/flux_${pkgver}_linux_arm.tar.gz - source_aarch64 = ${pkgname}-${pkgver}.tar.gz::https://github.com/fluxcd/flux2/releases/download/v${pkgver}/flux_${pkgver}_linux_arm64.tar.gz + optdepends = bash-completion: auto-completion for flux in Bash + optdepends = zsh-completions: auto-completion for flux in ZSH + source_x86_64 = ${PKGNAME}-${PKGVER}.tar.gz::https://github.com/fluxcd/flux2/releases/download/v${PKGVER}/flux_${PKGVER}_linux_amd64.tar.gz + sha256sums_x86_64 = ${SHA256SUM_AMD64} + source_armv6h = ${PKGNAME}-${PKGVER}.tar.gz::https://github.com/fluxcd/flux2/releases/download/v${PKGVER}/flux_${PKGVER}_linux_arm.tar.gz + sha256sums_armv6h = ${SHA256SUM_ARM} + source_armv7h = ${PKGNAME}-${PKGVER}.tar.gz::https://github.com/fluxcd/flux2/releases/download/v${PKGVER}/flux_${PKGVER}_linux_arm.tar.gz + sha256sums_armv7h = ${SHA256SUM_ARM} + source_aarch64 = ${PKGNAME}-${PKGVER}.tar.gz::https://github.com/fluxcd/flux2/releases/download/v${PKGVER}/flux_${PKGVER}_linux_arm64.tar.gz + sha256sums_aarch64 = ${SHA256SUM_ARM64} pkgname = flux-bin diff --git a/.github/aur/flux-bin/PKGBUILD.template b/.github/aur/flux-bin/PKGBUILD.template index f3106d1c..df4272d7 100644 --- a/.github/aur/flux-bin/PKGBUILD.template +++ b/.github/aur/flux-bin/PKGBUILD.template @@ -8,8 +8,8 @@ pkgdesc="Open and extensible continuous delivery solution for Kubernetes" url="https://fluxcd.io/" arch=("x86_64" "armv6h" "armv7h" "aarch64") license=("APACHE") -optdepends=('bash-completion: auto-completion for flux in Bash', -'zsh-completions: auto-completion for flux in ZSH') +optdepends=('bash-completion: auto-completion for flux in Bash' + 'zsh-completions: auto-completion for flux in ZSH') source_x86_64=( "${pkgname}-${pkgver}.tar.gz::https://github.com/fluxcd/flux2/releases/download/v${pkgver}/flux_${pkgver}_linux_amd64.tar.gz" ) From 36d219e05cd084e819ca3cabff3cf5bfa3bfdd8e Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Tue, 2 Aug 2022 11:45:44 +0300 Subject: [PATCH 168/818] [RFC-0003] Add the provider field for OIDC auth Signed-off-by: Stefan Prodan --- rfcs/0003-kubernetes-oci/README.md | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/rfcs/0003-kubernetes-oci/README.md b/rfcs/0003-kubernetes-oci/README.md index 4494b195..e2960f50 100644 --- a/rfcs/0003-kubernetes-oci/README.md +++ b/rfcs/0003-kubernetes-oci/README.md @@ -4,7 +4,7 @@ **Creation date:** 2022-03-31 -**Last update:** 2022-07-06 +**Last update:** 2022-08-02 ## Summary @@ -192,16 +192,17 @@ kubectl create secret generic regcert \ When Flux runs on AKS, EKS or GKE, an IAM role (that grants read-only access to ACR, ECR or GCR) can be used to bind the `source-controller` to the IAM role. -Similar to image-reflector-controller -[auto-login feature](https://fluxcd.io/docs/guides/image-update/#imagerepository-cloud-providers-authentication), -source-controller will expose dedicated flags for each cloud provider: - -```sh ---aws-autologin-for-ecr ---azure-autologin-for-acr ---gcp-autologin-for-gcr +```yaml +spec: + provider: aws ``` +The provider accepts the following values: `generic`, `aws`, `azure` and `gcp`. When the provider is +not specified, it defaults to `generic`. When the provider is set to `aws`, `azure` or `gcp`, the +controller will use a specific cloud SDK for authentication purposes. If both `spec.secretRef` and +a non-generic provider are present in the definition, the controller will use the static credentials +from the referenced secret. + ### Reconcile artifacts The `OCIRepository` can be used as a drop-in replacement for `GitRepository` and `Bucket` sources. From 96afee996aed596789a1b718417fc9d748f73da7 Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Tue, 2 Aug 2022 19:40:48 +0100 Subject: [PATCH 169/818] Add unit tests for flux logs Signed-off-by: Somtochi Onyekwere --- cmd/flux/logs.go | 18 ++-- cmd/flux/logs_test.go | 111 ++++++++++++++++++++ cmd/flux/testdata/logs/all-logs.txt | 6 ++ cmd/flux/testdata/logs/kind.txt | 2 + cmd/flux/testdata/logs/log-level.txt | 3 + cmd/flux/testdata/logs/multiple-filters.txt | 1 + cmd/flux/testdata/logs/namespace.txt | 3 + go.mod | 2 +- 8 files changed, 136 insertions(+), 10 deletions(-) create mode 100644 cmd/flux/testdata/logs/all-logs.txt create mode 100644 cmd/flux/testdata/logs/kind.txt create mode 100644 cmd/flux/testdata/logs/log-level.txt create mode 100644 cmd/flux/testdata/logs/multiple-filters.txt create mode 100644 cmd/flux/testdata/logs/namespace.txt diff --git a/cmd/flux/logs.go b/cmd/flux/logs.go index 90ee8fbe..ff00a913 100644 --- a/cmd/flux/logs.go +++ b/cmd/flux/logs.go @@ -277,15 +277,15 @@ func logRequest(ctx context.Context, request rest.ResponseWrapper, w io.Writer) } func filterPrintLog(t *template.Template, l *ControllerLogEntry, w io.Writer) { - if logsArgs.logLevel != "" && logsArgs.logLevel != l.Level || - logsArgs.kind != "" && strings.EqualFold(logsArgs.kind, l.Kind) || - logsArgs.name != "" && strings.EqualFold(logsArgs.name, l.Name) || - !logsArgs.allNamespaces && strings.EqualFold(*kubeconfigArgs.Namespace, l.Namespace) { - return - } - err := t.Execute(w, l) - if err != nil { - logger.Failuref("log template error: %s", err) + //fmt. + if (logsArgs.logLevel == "" || logsArgs.logLevel == l.Level) && + (logsArgs.kind == "" || strings.EqualFold(logsArgs.kind, l.Kind)) && + (logsArgs.name == "" || strings.EqualFold(logsArgs.name, l.Name)) && + (logsArgs.allNamespaces || strings.EqualFold(*kubeconfigArgs.Namespace, l.Namespace)) { + err := t.Execute(w, l) + if err != nil { + logger.Failuref("log template error: %s", err) + } } } diff --git a/cmd/flux/logs_test.go b/cmd/flux/logs_test.go index 9355e37b..88a61dfe 100644 --- a/cmd/flux/logs_test.go +++ b/cmd/flux/logs_test.go @@ -20,7 +20,15 @@ limitations under the License. package main import ( + "bytes" + "context" + "fmt" + "io" + "os" + "strings" "testing" + + . "github.com/onsi/gomega" ) func TestLogsNoArgs(t *testing.T) { @@ -78,3 +86,106 @@ func TestLogsSinceOnlyOneAllowed(t *testing.T) { } cmd.runTestCmd(t) } + +var testPodLogs = `{"level":"info","ts":"2022-08-02T12:55:34.419Z","logger":"controller.gitrepository","msg":"no changes since last reconcilation: observed revision","reconciler group":"source.toolkit.fluxcd.io","reconciler kind":"GitRepository","name":"podinfo","namespace":"default"} +{"level":"error","ts":"2022-08-02T12:56:04.679Z","logger":"controller.gitrepository","msg":"no changes since last reconcilation: observed revision","reconciler group":"source.toolkit.fluxcd.io","reconciler kind":"GitRepository","name":"flux-system","namespace":"flux-system"} +{"level":"error","ts":"2022-08-02T12:56:34.961Z","logger":"controller.kustomization","msg":"no changes since last reconcilation: observed revision","reconciler group":"kustomize.toolkit.fluxcd.io","reconciler kind":"Kustomization","name":"flux-system","namespace":"flux-system"} +{"level":"info","ts":"2022-08-02T12:56:34.961Z","logger":"controller.kustomization","msg":"no changes since last reconcilation: observed revision","reconciler group":"kustomize.toolkit.fluxcd.io","reconciler kind":"Kustomization","name":"podinfo","namespace":"default"} +{"level":"info","ts":"2022-08-02T12:56:34.961Z","logger":"controller.gitrepository","msg":"no changes since last reconcilation: observed revision","reconciler group":"source.toolkit.fluxcd.io","reconciler kind":"GitRepository","name":"podinfo","namespace":"default"} +{"level":"error","ts":"2022-08-02T12:56:34.961Z","logger":"controller.kustomization","msg":"no changes since last reconcilation: observed revision","reconciler group":"kustomize.toolkit.fluxcd.io","reconciler kind":"Kustomization","name":"podinfo","namespace":"flux-system"}` + +type testResponseMapper struct { +} + +func (t *testResponseMapper) DoRaw(_ context.Context) ([]byte, error) { + return nil, nil +} + +func (t *testResponseMapper) Stream(_ context.Context) (io.ReadCloser, error) { + return io.NopCloser(strings.NewReader(testPodLogs)), nil +} + +func TestLogRequest(t *testing.T) { + mapper := &testResponseMapper{} + tests := []struct { + name string + namespace string + flags *logsFlags + assertFile string + }{ + { + name: "all logs", + flags: &logsFlags{ + tail: -1, + allNamespaces: true, + }, + assertFile: "testdata/logs/all-logs.txt", + }, + { + name: "filter by namespace", + namespace: "default", + flags: &logsFlags{ + tail: -1, + }, + assertFile: "testdata/logs/namespace.txt", + }, + { + name: "filter by kind and namespace", + flags: &logsFlags{ + tail: -1, + kind: "Kustomization", + }, + assertFile: "testdata/logs/kind.txt", + }, + { + name: "filter by loglevel", + flags: &logsFlags{ + tail: -1, + logLevel: "error", + allNamespaces: true, + }, + assertFile: "testdata/logs/log-level.txt", + }, + { + name: "filter by namespace, name, loglevel and kind", + namespace: "flux-system", + flags: &logsFlags{ + tail: -1, + logLevel: "error", + kind: "Kustomization", + name: "podinfo", + }, + assertFile: "testdata/logs/multiple-filters.txt", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + g := NewWithT(t) + + logsArgs = tt.flags + if tt.namespace != "" { + *kubeconfigArgs.Namespace = tt.namespace + } + w := bytes.NewBuffer([]byte{}) + err := logRequest(context.Background(), mapper, w) + g.Expect(err).To(BeNil()) + + got := make([]byte, w.Len()) + _, err = w.Read(got) + g.Expect(err).To(BeNil()) + + expected, err := os.ReadFile(tt.assertFile) + g.Expect(err).To(BeNil()) + + fmt.Printf("'%s'\n", got) + g.Expect(string(got)).To(Equal(string(expected))) + + // reset flags to default + *kubeconfigArgs.Namespace = rootArgs.defaults.Namespace + logsArgs = &logsFlags{ + tail: -1, + } + }) + } +} diff --git a/cmd/flux/testdata/logs/all-logs.txt b/cmd/flux/testdata/logs/all-logs.txt new file mode 100644 index 00000000..ca4d5f0f --- /dev/null +++ b/cmd/flux/testdata/logs/all-logs.txt @@ -0,0 +1,6 @@ +2022-08-02T12:55:34.419Z info GitRepository/podinfo.default - no changes since last reconcilation: observed revision +2022-08-02T12:56:04.679Z error GitRepository/flux-system.flux-system - no changes since last reconcilation: observed revision +2022-08-02T12:56:34.961Z error Kustomization/flux-system.flux-system - no changes since last reconcilation: observed revision +2022-08-02T12:56:34.961Z info Kustomization/podinfo.default - no changes since last reconcilation: observed revision +2022-08-02T12:56:34.961Z info GitRepository/podinfo.default - no changes since last reconcilation: observed revision +2022-08-02T12:56:34.961Z error Kustomization/podinfo.flux-system - no changes since last reconcilation: observed revision diff --git a/cmd/flux/testdata/logs/kind.txt b/cmd/flux/testdata/logs/kind.txt new file mode 100644 index 00000000..77c3cdd6 --- /dev/null +++ b/cmd/flux/testdata/logs/kind.txt @@ -0,0 +1,2 @@ +2022-08-02T12:56:34.961Z error Kustomization/flux-system.flux-system - no changes since last reconcilation: observed revision +2022-08-02T12:56:34.961Z error Kustomization/podinfo.flux-system - no changes since last reconcilation: observed revision diff --git a/cmd/flux/testdata/logs/log-level.txt b/cmd/flux/testdata/logs/log-level.txt new file mode 100644 index 00000000..070867ae --- /dev/null +++ b/cmd/flux/testdata/logs/log-level.txt @@ -0,0 +1,3 @@ +2022-08-02T12:56:04.679Z error GitRepository/flux-system.flux-system - no changes since last reconcilation: observed revision +2022-08-02T12:56:34.961Z error Kustomization/flux-system.flux-system - no changes since last reconcilation: observed revision +2022-08-02T12:56:34.961Z error Kustomization/podinfo.flux-system - no changes since last reconcilation: observed revision diff --git a/cmd/flux/testdata/logs/multiple-filters.txt b/cmd/flux/testdata/logs/multiple-filters.txt new file mode 100644 index 00000000..c82cf09c --- /dev/null +++ b/cmd/flux/testdata/logs/multiple-filters.txt @@ -0,0 +1 @@ +2022-08-02T12:56:34.961Z error Kustomization/podinfo.flux-system - no changes since last reconcilation: observed revision diff --git a/cmd/flux/testdata/logs/namespace.txt b/cmd/flux/testdata/logs/namespace.txt new file mode 100644 index 00000000..e5c4450f --- /dev/null +++ b/cmd/flux/testdata/logs/namespace.txt @@ -0,0 +1,3 @@ +2022-08-02T12:55:34.419Z info GitRepository/podinfo.default - no changes since last reconcilation: observed revision +2022-08-02T12:56:34.961Z info Kustomization/podinfo.default - no changes since last reconcilation: observed revision +2022-08-02T12:56:34.961Z info GitRepository/podinfo.default - no changes since last reconcilation: observed revision diff --git a/go.mod b/go.mod index fce50c32..190a5ba0 100644 --- a/go.mod +++ b/go.mod @@ -31,6 +31,7 @@ require ( github.com/manifoldco/promptui v0.9.0 github.com/mattn/go-shellwords v1.0.12 github.com/olekukonko/tablewriter v0.0.5 + github.com/onsi/gomega v1.19.0 github.com/spf13/cobra v1.4.0 github.com/spf13/pflag v1.0.5 github.com/theckman/yacspin v0.13.12 @@ -131,7 +132,6 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect - github.com/onsi/gomega v1.19.0 // indirect github.com/peterbourgon/diskv v2.0.1+incompatible // indirect github.com/pkg/errors v0.9.1 // indirect github.com/prometheus/client_golang v1.12.1 // indirect From 0cfdc5d6741f29f3a60f2f97de6d5b5aa67e6d16 Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Tue, 2 Aug 2022 19:46:19 +0100 Subject: [PATCH 170/818] move struct definition Signed-off-by: Somtochi Onyekwere --- cmd/flux/logs.go | 1 - cmd/flux/logs_test.go | 22 +++++++++++----------- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/cmd/flux/logs.go b/cmd/flux/logs.go index ff00a913..c9f78239 100644 --- a/cmd/flux/logs.go +++ b/cmd/flux/logs.go @@ -277,7 +277,6 @@ func logRequest(ctx context.Context, request rest.ResponseWrapper, w io.Writer) } func filterPrintLog(t *template.Template, l *ControllerLogEntry, w io.Writer) { - //fmt. if (logsArgs.logLevel == "" || logsArgs.logLevel == l.Level) && (logsArgs.kind == "" || strings.EqualFold(logsArgs.kind, l.Kind)) && (logsArgs.name == "" || strings.EqualFold(logsArgs.name, l.Name)) && diff --git a/cmd/flux/logs_test.go b/cmd/flux/logs_test.go index 88a61dfe..4e495370 100644 --- a/cmd/flux/logs_test.go +++ b/cmd/flux/logs_test.go @@ -94,17 +94,6 @@ var testPodLogs = `{"level":"info","ts":"2022-08-02T12:55:34.419Z","logger":"con {"level":"info","ts":"2022-08-02T12:56:34.961Z","logger":"controller.gitrepository","msg":"no changes since last reconcilation: observed revision","reconciler group":"source.toolkit.fluxcd.io","reconciler kind":"GitRepository","name":"podinfo","namespace":"default"} {"level":"error","ts":"2022-08-02T12:56:34.961Z","logger":"controller.kustomization","msg":"no changes since last reconcilation: observed revision","reconciler group":"kustomize.toolkit.fluxcd.io","reconciler kind":"Kustomization","name":"podinfo","namespace":"flux-system"}` -type testResponseMapper struct { -} - -func (t *testResponseMapper) DoRaw(_ context.Context) ([]byte, error) { - return nil, nil -} - -func (t *testResponseMapper) Stream(_ context.Context) (io.ReadCloser, error) { - return io.NopCloser(strings.NewReader(testPodLogs)), nil -} - func TestLogRequest(t *testing.T) { mapper := &testResponseMapper{} tests := []struct { @@ -189,3 +178,14 @@ func TestLogRequest(t *testing.T) { }) } } + +type testResponseMapper struct { +} + +func (t *testResponseMapper) DoRaw(_ context.Context) ([]byte, error) { + return nil, nil +} + +func (t *testResponseMapper) Stream(_ context.Context) (io.ReadCloser, error) { + return io.NopCloser(strings.NewReader(testPodLogs)), nil +} From 1889b64b4e24da4319d65b2158b7561ac38fd699 Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Tue, 2 Aug 2022 19:55:52 +0100 Subject: [PATCH 171/818] remove print statement Signed-off-by: Somtochi Onyekwere --- cmd/flux/logs_test.go | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/cmd/flux/logs_test.go b/cmd/flux/logs_test.go index 4e495370..ba63f051 100644 --- a/cmd/flux/logs_test.go +++ b/cmd/flux/logs_test.go @@ -22,7 +22,6 @@ package main import ( "bytes" "context" - "fmt" "io" "os" "strings" @@ -87,13 +86,6 @@ func TestLogsSinceOnlyOneAllowed(t *testing.T) { cmd.runTestCmd(t) } -var testPodLogs = `{"level":"info","ts":"2022-08-02T12:55:34.419Z","logger":"controller.gitrepository","msg":"no changes since last reconcilation: observed revision","reconciler group":"source.toolkit.fluxcd.io","reconciler kind":"GitRepository","name":"podinfo","namespace":"default"} -{"level":"error","ts":"2022-08-02T12:56:04.679Z","logger":"controller.gitrepository","msg":"no changes since last reconcilation: observed revision","reconciler group":"source.toolkit.fluxcd.io","reconciler kind":"GitRepository","name":"flux-system","namespace":"flux-system"} -{"level":"error","ts":"2022-08-02T12:56:34.961Z","logger":"controller.kustomization","msg":"no changes since last reconcilation: observed revision","reconciler group":"kustomize.toolkit.fluxcd.io","reconciler kind":"Kustomization","name":"flux-system","namespace":"flux-system"} -{"level":"info","ts":"2022-08-02T12:56:34.961Z","logger":"controller.kustomization","msg":"no changes since last reconcilation: observed revision","reconciler group":"kustomize.toolkit.fluxcd.io","reconciler kind":"Kustomization","name":"podinfo","namespace":"default"} -{"level":"info","ts":"2022-08-02T12:56:34.961Z","logger":"controller.gitrepository","msg":"no changes since last reconcilation: observed revision","reconciler group":"source.toolkit.fluxcd.io","reconciler kind":"GitRepository","name":"podinfo","namespace":"default"} -{"level":"error","ts":"2022-08-02T12:56:34.961Z","logger":"controller.kustomization","msg":"no changes since last reconcilation: observed revision","reconciler group":"kustomize.toolkit.fluxcd.io","reconciler kind":"Kustomization","name":"podinfo","namespace":"flux-system"}` - func TestLogRequest(t *testing.T) { mapper := &testResponseMapper{} tests := []struct { @@ -167,7 +159,6 @@ func TestLogRequest(t *testing.T) { expected, err := os.ReadFile(tt.assertFile) g.Expect(err).To(BeNil()) - fmt.Printf("'%s'\n", got) g.Expect(string(got)).To(Equal(string(expected))) // reset flags to default @@ -179,6 +170,13 @@ func TestLogRequest(t *testing.T) { } } +var testPodLogs = `{"level":"info","ts":"2022-08-02T12:55:34.419Z","logger":"controller.gitrepository","msg":"no changes since last reconcilation: observed revision","reconciler group":"source.toolkit.fluxcd.io","reconciler kind":"GitRepository","name":"podinfo","namespace":"default"} +{"level":"error","ts":"2022-08-02T12:56:04.679Z","logger":"controller.gitrepository","msg":"no changes since last reconcilation: observed revision","reconciler group":"source.toolkit.fluxcd.io","reconciler kind":"GitRepository","name":"flux-system","namespace":"flux-system"} +{"level":"error","ts":"2022-08-02T12:56:34.961Z","logger":"controller.kustomization","msg":"no changes since last reconcilation: observed revision","reconciler group":"kustomize.toolkit.fluxcd.io","reconciler kind":"Kustomization","name":"flux-system","namespace":"flux-system"} +{"level":"info","ts":"2022-08-02T12:56:34.961Z","logger":"controller.kustomization","msg":"no changes since last reconcilation: observed revision","reconciler group":"kustomize.toolkit.fluxcd.io","reconciler kind":"Kustomization","name":"podinfo","namespace":"default"} +{"level":"info","ts":"2022-08-02T12:56:34.961Z","logger":"controller.gitrepository","msg":"no changes since last reconcilation: observed revision","reconciler group":"source.toolkit.fluxcd.io","reconciler kind":"GitRepository","name":"podinfo","namespace":"default"} +{"level":"error","ts":"2022-08-02T12:56:34.961Z","logger":"controller.kustomization","msg":"no changes since last reconcilation: observed revision","reconciler group":"kustomize.toolkit.fluxcd.io","reconciler kind":"Kustomization","name":"podinfo","namespace":"flux-system"}` + type testResponseMapper struct { } From fb1de8c6495ded3dfdb9133e8a547ee5e378151f Mon Sep 17 00:00:00 2001 From: Paulo Gomes Date: Fri, 5 Aug 2022 19:07:04 +0100 Subject: [PATCH 172/818] remove unused func Signed-off-by: Paulo Gomes --- cmd/flux/main.go | 7 ------- 1 file changed, 7 deletions(-) diff --git a/cmd/flux/main.go b/cmd/flux/main.go index 9c49b3c5..010ca7ad 100644 --- a/cmd/flux/main.go +++ b/cmd/flux/main.go @@ -182,13 +182,6 @@ func configureDefaultNamespace() { } } -func homeDir() string { - if h := os.Getenv("HOME"); h != "" { - return h - } - return os.Getenv("USERPROFILE") // windows -} - // readPasswordFromStdin reads a password from stdin and returns the input // with trailing newline and/or carriage return removed. It also makes sure that terminal // echoing is turned off if stdin is a terminal. From c45536723c608cf4cd9ab444eed09ed1bd99e07e Mon Sep 17 00:00:00 2001 From: Paulo Gomes Date: Mon, 8 Aug 2022 12:52:02 +0100 Subject: [PATCH 173/818] add validation to namespace flag Signed-off-by: Paulo Gomes --- cmd/flux/install_test.go | 53 ++++++++++++++++++++++++++++++++++++++++ cmd/flux/main.go | 21 ++++++++++++++++ 2 files changed, 74 insertions(+) create mode 100644 cmd/flux/install_test.go diff --git a/cmd/flux/install_test.go b/cmd/flux/install_test.go new file mode 100644 index 00000000..a0251206 --- /dev/null +++ b/cmd/flux/install_test.go @@ -0,0 +1,53 @@ +/* +Copyright 2022 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import "testing" + +func TestInstall(t *testing.T) { + // The pointer to kubeconfigArgs.Namespace is shared across + // the tests. When a new value is set, it will linger and + // impact subsequent tests. + // Given that this test uses an invalid namespace, it ensures + // to restore whatever value it had previously. + currentNamespace := *kubeconfigArgs.Namespace + defer func() { + *kubeconfigArgs.Namespace = currentNamespace + }() + + tests := []struct { + name string + args string + assert assertFunc + }{ + { + name: "invalid namespace", + args: "install --namespace='@#[]'", + assert: assertError("namespace must be a valid DNS label: \"@#[]\""), + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + cmd := cmdTestCase{ + args: tt.args, + assert: tt.assert, + } + cmd.runTestCmd(t) + }) + } +} diff --git a/cmd/flux/main.go b/cmd/flux/main.go index 010ca7ad..cc3d9553 100644 --- a/cmd/flux/main.go +++ b/cmd/flux/main.go @@ -27,6 +27,7 @@ import ( "github.com/spf13/cobra" "golang.org/x/term" corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/util/validation" "k8s.io/cli-runtime/pkg/genericclioptions" _ "k8s.io/client-go/plugin/pkg/client/auth" @@ -96,6 +97,18 @@ Command line utility for assembling Kubernetes CD pipelines the GitOps way.`, # Uninstall Flux and delete CRDs flux uninstall`, + PersistentPreRunE: func(cmd *cobra.Command, args []string) error { + ns, err := cmd.Flags().GetString("namespace") + if err != nil { + return fmt.Errorf("error getting namespace: %w", err) + } + + if e := validation.IsDNS1123Label(ns); len(e) > 0 { + return fmt.Errorf("namespace must be a valid DNS label: %q", ns) + } + + return nil + }, } var logger = stderrLogger{stderr: os.Stderr} @@ -178,6 +191,14 @@ func configureDefaultNamespace() { *kubeconfigArgs.Namespace = rootArgs.defaults.Namespace fromEnv := os.Getenv("FLUX_SYSTEM_NAMESPACE") if fromEnv != "" { + // namespace must be a valid DNS label. Assess against validation + // used upstream, and ignore invalid values as environment vars + // may not be actively provided by end-user. + if e := validation.IsDNS1123Label(fromEnv); len(e) > 0 { + logger.Warningf(" ignoring invalid FLUX_SYSTEM_NAMESPACE: %q", fromEnv) + return + } + kubeconfigArgs.Namespace = &fromEnv } } From e927d39a278cca8b11b6f332e48986ca62f1fc0a Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Tue, 21 Jun 2022 12:33:50 +0300 Subject: [PATCH 174/818] Add OCI internal package Implement OCI artifacts operations using crane Signed-off-by: Stefan Prodan --- go.mod | 12 +- go.sum | 426 +++++++++++++++++++++++++++++++++++++++++- internal/oci/build.go | 139 ++++++++++++++ internal/oci/meta.go | 60 ++++++ internal/oci/pull.go | 75 ++++++++ internal/oci/push.go | 81 ++++++++ internal/oci/tag.go | 40 ++++ 7 files changed, 829 insertions(+), 4 deletions(-) create mode 100644 internal/oci/build.go create mode 100644 internal/oci/meta.go create mode 100644 internal/oci/pull.go create mode 100644 internal/oci/push.go create mode 100644 internal/oci/tag.go diff --git a/go.mod b/go.mod index 190a5ba0..cbd12b61 100644 --- a/go.mod +++ b/go.mod @@ -72,8 +72,13 @@ require ( github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5 // indirect github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e // indirect + github.com/containerd/stargz-snapshotter/estargz v0.11.4 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect + github.com/docker/cli v20.10.16+incompatible // indirect + github.com/docker/distribution v2.8.1+incompatible // indirect + github.com/docker/docker v20.10.16+incompatible // indirect + github.com/docker/docker-credential-helpers v0.6.4 // indirect github.com/drone/envsubst/v2 v2.0.0-20210730161058-179042472c46 // indirect github.com/emicklei/go-restful v2.9.5+incompatible // indirect github.com/emirpasic/gods v1.12.0 // indirect @@ -115,6 +120,7 @@ require ( github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351 // indirect + github.com/klauspost/compress v1.15.4 // indirect github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect github.com/mailru/easyjson v0.7.6 // indirect github.com/mattn/go-ciede2000 v0.0.0-20170301095244-782e8c62fec3 // indirect @@ -132,6 +138,8 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect + github.com/opencontainers/go-digest v1.0.0 // indirect + github.com/opencontainers/image-spec v1.0.3-0.20220114050600-8b9d41f48198 // indirect github.com/peterbourgon/diskv v2.0.1+incompatible // indirect github.com/pkg/errors v0.9.1 // indirect github.com/prometheus/client_golang v1.12.1 // indirect @@ -139,10 +147,12 @@ require ( github.com/prometheus/common v0.32.1 // indirect github.com/prometheus/procfs v0.7.3 // indirect github.com/rivo/uniseg v0.2.0 // indirect - github.com/russross/blackfriday v1.5.2 // indirect + github.com/russross/blackfriday v1.6.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/sergi/go-diff v1.2.0 // indirect + github.com/sirupsen/logrus v1.8.1 // indirect github.com/texttheater/golang-levenshtein v1.0.1 // indirect + github.com/vbatts/tar-split v0.11.2 // indirect github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74 // indirect github.com/xanzy/go-gitlab v0.58.0 // indirect github.com/xanzy/ssh-agent v0.3.0 // indirect diff --git a/go.sum b/go.sum index 9998ddce..e57cb655 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,5 @@ +4d63.com/gochecknoglobals v0.1.0/go.mod h1:wfdC5ZjKSPr7CybKEcgJhUOgeAQW1+7WcyK8OvUilfo= +bitbucket.org/creachadair/shell v0.0.6/go.mod h1:8Qqi/cYk7vPnsOePHroKXDJYmb5x7ENhtiFtfZq8K+M= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= @@ -11,6 +13,7 @@ cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6 cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.60.0/go.mod h1:yw2G51M9IfRboUH61Us8GqCeF1PzPblB823Mn2q2eAU= cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= @@ -36,16 +39,22 @@ cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM7 cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= +cloud.google.com/go/firestore v1.6.0/go.mod h1:afJwI0vaXwAG54kI7A//lP/lSPDkQORQuMkv56TxEPU= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/pubsub v1.5.0/go.mod h1:ZEwJccE3z93Z2HWvstpri00jOg7oO4UZDtKhwDwqF0w= +cloud.google.com/go/spanner v1.7.0/go.mod h1:sd3K2gZ9Fd0vMPLXzeCrF6fq4i63Q7aTLW/lBIfBkIk= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +contrib.go.opencensus.io/exporter/stackdriver v0.13.4/go.mod h1:aXENhDJ1Y4lIg4EUaVTwzvYETVNZk10Pu26tevFKLUc= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/Antonboom/errname v0.1.5/go.mod h1:DugbBstvPFQbv/5uLcRRzfrNqKE9tVdVCqWCLp6Cifo= +github.com/Antonboom/nilnil v0.1.0/go.mod h1:PhHLvRPSghY5Y7mX4TW+BHZQYo1A8flE5H20D3IPZBo= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs= @@ -63,14 +72,21 @@ github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZ github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo= github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/toml v0.4.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/toml v1.0.0 h1:dtDWrepsVPfW9H/4y7dDgFc2MBUSeJhlaDtK13CxFlU= github.com/BurntSushi/toml v1.0.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd h1:sjQovDkwrZp8u+gxLtPgKGjk5hCxuy2hrRejBTA9xFU= github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd/go.mod h1:64YHyfSL2R96J44Nlwm39UHepQbyR5q10x7iYa1ks2E= +github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= +github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= +github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= github.com/Masterminds/semver/v3 v3.1.0/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030IGemrRc= github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= +github.com/Masterminds/sprig v2.15.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= +github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= github.com/Microsoft/go-winio v0.5.2 h1:a9IhgEQBCUEk6QCdml9CiJGhAws+YwffDHEMp1VMrpA= @@ -78,6 +94,7 @@ github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/OpenPeeDeeP/depguard v1.0.1/go.mod h1:xsIw86fROiiwelg+jB2uM9PiKihMMmUx/1V+TNhjQvM= github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= github.com/ProtonMail/go-crypto v0.0.0-20220517143526-88bb52951d5b h1:lcbBNuQhppsc7A5gjdHmdlqUqJfgGMylBdGyDs0j7G8= github.com/ProtonMail/go-crypto v0.0.0-20220517143526-88bb52951d5b/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= @@ -85,6 +102,7 @@ github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tN github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/StackExchange/wmi v1.2.1/go.mod h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8= github.com/acomagu/bufpipe v1.0.3 h1:fxAGrHZTgQ9w5QqVItgzwj235/uYZYgbXitB+dLupOk= github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -92,16 +110,28 @@ github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuy github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= +github.com/alexkohler/prealloc v1.0.0/go.mod h1:VetnK3dIgFBBKmg0YnD9F9x6Icjd+9cvfHR56wJVlKE= +github.com/andybalholm/brotli v1.0.2/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= +github.com/andybalholm/brotli v1.0.3/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo4JG6LR5AXSUEsOjtdm0kw0FtQtMJA= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= +github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20210826220005-b48c857c3a0e/go.mod h1:F7bn7fEU90QkQ3tnmaTx3LTKLEDqnwWODIYppRQ5hnY= +github.com/aokoli/goutils v1.0.1/go.mod h1:SijmP0QR8LtwsmDs8Yii5Z/S4trXFGFC2oO5g9DP+DQ= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= +github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= +github.com/ashanbrown/forbidigo v1.2.0/go.mod h1:vVW7PEdqEFqapJe95xHkTfB1+XvZXBFg8t0sG2FIxmI= +github.com/ashanbrown/makezero v0.0.0-20210520155254-b6261585ddde/go.mod h1:oG9Dnez7/ESBqc4EdrdNlryeo7d0KcW1ftXHm7nU/UU= +github.com/aws/aws-sdk-go v1.23.20/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.25.37/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.36.30/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= @@ -112,7 +142,12 @@ github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6r github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= +github.com/bkielbasa/cyclop v1.2.0/go.mod h1:qOI0yy6A7dYC4Zgsa72Ppm9kONl0RoIlPbzot9mhmeI= github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= +github.com/blizzy78/varnamelen v0.3.0/go.mod h1:hbwRdBvoBqxk34XyQ6HA0UH3G0/1TKuv5AC4eaBT0Ec= +github.com/bombsimon/wsl/v3 v3.3.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc= +github.com/breml/bidichk v0.1.1/go.mod h1:zbfeitpevDUGI7V91Uzzuwrn4Vls8MoBMrwtt78jmso= +github.com/butuzov/ireturn v0.1.1/go.mod h1:Wh6Zl3IMtTpaIKbmwzqi6olnM9ptYQxxVacMsOEFPoc= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/certifi/gocertifi v0.0.0-20191021191039-0944d244cd40/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= github.com/certifi/gocertifi v0.0.0-20200922220541-2c3bb06c6054/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= @@ -122,6 +157,8 @@ github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cb github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5 h1:7aWHqerlJ41y6FOsEUvknqgXnGmJyJSbjhAWq5pO4F8= github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5/go.mod h1:/iP1qXHoty45bqomnu2LM+VVyAEdWN+vtSHGlQgyxbw= +github.com/charithe/durationcheck v0.0.9/go.mod h1:SSbRIBVfMjCi/kEB6K65XEA83D6prSM8ap1UCpNKtgg= +github.com/chavacava/garif v0.0.0-20210405164556-e8a0a408d6af/go.mod h1:Qjyv4H3//PWVzTeCezG2b9IRn6myJxJSr4TD/xo6ojU= github.com/chzyer/logex v1.1.10 h1:Swpa1K6QvQznwJRcfTfQJmTE72DqScAa40E+fbHEXEE= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e h1:fY5BOSpyZCqRo5OhCuC+XN+r/bBCmeuuJtjz+bCNIf8= @@ -133,35 +170,59 @@ github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGX github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/cockroachdb/datadriven v0.0.0-20200714090401-bf6692d28da5/go.mod h1:h6jFvWxBdQXxjopDMZyH2UVceIRfR84bdzbkoKrsWNo= github.com/cockroachdb/errors v1.2.4/go.mod h1:rQD95gz6FARkaKkQXUksEje/d9a6wBJoCr5oaCLELYA= github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f/go.mod h1:i/u985jwjWRlyHXQbwatDASoW0RMlZ/3i9yJHE2xLkI= +github.com/containerd/stargz-snapshotter/estargz v0.11.4 h1:LjrYUZpyOhiSaU7hHrdR82/RBoxfGWSaC0VeSSMXqnk= +github.com/containerd/stargz-snapshotter/estargz v0.11.4/go.mod h1:7vRJIcImfY8bpifnMjt+HTJoQxASq7T28MYbP15/Nf0= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= +github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= +github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd v0.0.0-20190620071333-e64a0ec8b42a/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.11 h1:07n33Z8lZxZ2qwegKbObQohDhXDQxiMMz1NOUGYlesw= github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cyphar/filepath-securejoin v0.2.3 h1:YX6ebbZCZP7VkM3scTTokDgBL2TY741X51MTk3ycuNI= github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= +github.com/daixiang0/gci v0.2.9/go.mod h1:+4dZ7TISfSmqfAGv59ePaHfNzgGtIkHAhhdKggP1JAc= +github.com/danieljoos/wincred v1.1.0/go.mod h1:XYlo+eRTsVA9aHGp7NGjFkPla4m+DCL7hqDjlFjiygg= +github.com/davecgh/go-spew v0.0.0-20161028175848-04cdfd42973b/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/daviddengcn/go-colortext v0.0.0-20160507010035-511bcaf42ccd/go.mod h1:dv4zxwHi5C/8AeI+4gX4dCWOIvNi7I6JCSX0HvlKPgE= +github.com/denis-tingajkin/go-header v0.4.2/go.mod h1:eLRHAVXzE5atsKAnNRDB90WHCFFnBUn4RN0nRcs1LJA= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/docker/cli v20.10.16+incompatible h1:aLQ8XowgKpR3/IysPj8qZQJBVQ+Qws61icFuZl6iKYs= +github.com/docker/cli v20.10.16+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68= github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/docker v20.10.16+incompatible h1:2Db6ZR/+FUR3hqPMwnogOPHFn405crbpxvWzKovETOQ= +github.com/docker/docker v20.10.16+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker-credential-helpers v0.6.4 h1:axCks+yV+2MR3/kZhAmy07yC56WZ2Pwu/fKWtKuZB0o= +github.com/docker/docker-credential-helpers v0.6.4/go.mod h1:ofX3UI0Gz1TteYBjtgs07O36Pyasyp66D2uKT7H8W1c= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/drone/envsubst/v2 v2.0.0-20210730161058-179042472c46 h1:7QPwrLT79GlD5sizHf27aoY2RTvw62mO6x7mxkScNk0= github.com/drone/envsubst/v2 v2.0.0-20210730161058-179042472c46/go.mod h1:esf2rsHFNlZlxsqsZDojNBcnNs5REqIvRrWRHqX0vEU= +github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153 h1:yUdfgN0XgIJw7foRItutHYUIhlcKzcSf5vDpdhQAKTc= github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= @@ -177,7 +238,10 @@ github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5y github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= +github.com/envoyproxy/protoc-gen-validate v0.0.14/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/esimonov/ifshort v1.0.3/go.mod h1:yZqNJUrNn20K8Q9n2CrjTKYyVEmX209Hgu+M1LBpeZE= +github.com/ettle/strcase v0.1.1/go.mod h1:hzDLsPC7/lwKyBOywSHEP89nt2pDgdy+No1NBA9o9VY= github.com/evanphx/json-patch v0.5.2/go.mod h1:ZWS5hhDbVDyob71nXKNL0+PWn6ToqBHMikGIFbs31qQ= github.com/evanphx/json-patch v4.11.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH5pOlLGNtQ5lPWQu84= @@ -186,8 +250,11 @@ github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d h1:105gxyaGwC github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d/go.mod h1:ZZMPRZwes7CROmyNKgQzC3XPs6L/G2EJLHddWejkmf4= github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= +github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= +github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fluxcd/go-git-providers v0.6.0 h1:XJc3MTYFpuahBSoKTVxmH9OBPCeIyvYoQkTjTqa3fH4= github.com/fluxcd/go-git-providers v0.6.0/go.mod h1:UMFHnMCIO9CBpEln7ZsArEWyXSNxTpm76fyQxUmClrc= @@ -229,12 +296,15 @@ github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMo github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpgI= github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= +github.com/fullstorydev/grpcurl v1.6.0/go.mod h1:ZQ+ayqbKMJNhzLmbpCiurTVlaK2M/3nqZCxaQ2Ze/sM= github.com/fvbommel/sortorder v1.0.1/go.mod h1:uk88iVf1ovNn1iLfgUVU2F9o5eO30ui720w+kxuqRs0= +github.com/fzipp/gocyclo v0.3.1/go.mod h1:DJHO6AUmbdqj2ET4Z9iArSuwWgYDRryYt2wASxc7x3E= github.com/getkin/kin-openapi v0.76.0/go.mod h1:660oXbgy5JFMKreazJaQTw7o+X00qeSyhcnluiMv+Xg= github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gliderlabs/ssh v0.2.2 h1:6zsha5zo/TWhRhwqCD3+EarCAgZ2yN28ipRnGPnwkI0= github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= +github.com/go-critic/go-critic v0.6.1/go.mod h1:SdNCfU0yF3UBjtaZGw6586/WocupMOJuiqgom5DsQxM= github.com/go-errors/errors v1.0.1 h1:LUHzmkK3GUKUrL/1gfBUxAHzcev3apQlezX/+O7ma6w= github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4= @@ -262,6 +332,8 @@ github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/zapr v1.2.0/go.mod h1:Qa4Bsj2Vb+FAVeAKsLD8RLQ+YRJB8YDmOAKxaBQf7Ro= github.com/go-logr/zapr v1.2.3 h1:a9vnzlIBPQBBkeaR9IuMUfmVOrQlkoC4YfPoFkX3T7A= +github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= @@ -271,15 +343,35 @@ github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.14 h1:gm3vOOXfiuw5i9p5N9xJvfjvuofpyvLA9Wr6QfK5Fng= github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= +github.com/go-redis/redis v6.15.8+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= +github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= +github.com/go-toolsmith/astcast v1.0.0/go.mod h1:mt2OdQTeAQcY4DQgPSArJjHCcOwlX+Wl/kwN+LbLGQ4= +github.com/go-toolsmith/astcopy v1.0.0/go.mod h1:vrgyG+5Bxrnz4MZWPF+pI4R8h3qKRjjyvV/DSez4WVQ= +github.com/go-toolsmith/astequal v1.0.0/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= +github.com/go-toolsmith/astequal v1.0.1/go.mod h1:4oGA3EZXTVItV/ipGiOx7NWkY5veFfcsOJVS2YxltLw= +github.com/go-toolsmith/astfmt v1.0.0/go.mod h1:cnWmsOAuq4jJY6Ct5YWlVLmcmLMn1JUPuQIHCY7CJDw= +github.com/go-toolsmith/astinfo v0.0.0-20180906194353-9809ff7efb21/go.mod h1:dDStQCHtmZpYOmjRP/8gHHnCCch3Zz3oEgCdZVdtweU= +github.com/go-toolsmith/astp v1.0.0/go.mod h1:RSyrtpVlfTFGDYRbrjyWP1pYu//tSFcvdYrA8meBmLI= +github.com/go-toolsmith/pkgload v1.0.0/go.mod h1:5eFArkbO80v7Z0kdngIxsRXRMTaX4Ilcwuh3clNrQJc= +github.com/go-toolsmith/strparse v1.0.0/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8= +github.com/go-toolsmith/typep v1.0.0/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= +github.com/go-toolsmith/typep v1.0.2/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= +github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM= +github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= +github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -295,6 +387,7 @@ github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= +github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -314,6 +407,16 @@ github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4= +github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk= +github.com/golangci/go-misc v0.0.0-20180628070357-927a3d87b613/go.mod h1:SyvUF2NxV+sN8upjjeVYr5W7tyxaT1JVtvhKhOn2ii8= +github.com/golangci/gofmt v0.0.0-20190930125516-244bba706f1a/go.mod h1:9qCChq59u/eW8im404Q2WWTrnBUQKjpNYKMbU4M7EFU= +github.com/golangci/golangci-lint v1.43.0/go.mod h1:VIFlUqidx5ggxDfQagdvd9E67UjMXtTHBkBQ7sHoC5Q= +github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg= +github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod h1:tvlJhZqDe4LMs4ZHD0oMUlt9G2LWuDGoisJTBzLMV9o= +github.com/golangci/misspell v0.3.5/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA= +github.com/golangci/revgrep v0.0.0-20210930125155-c22e5001d4f2/go.mod h1:LK+zW4MpyytAWQRz0M4xnzEk50lSvqDQKfx304apFkY= +github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ= github.com/golangplus/testing v0.0.0-20180327235837-af21d9c3145e/go.mod h1:0AA//k/eakGydO4jKRoRL2j92ZKSzTgj9tclaCrvXHk= github.com/gonvenience/bunt v1.3.4 h1:Row599Ohja2BPooaqd1tHYdTAKu6SWq7W/UeakTXddM= github.com/gonvenience/bunt v1.3.4/go.mod h1:j8eqHLBo8eWCCYuc34oFdlgyxL1rZ4ywYz4BZa4b09w= @@ -333,6 +436,8 @@ github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4= github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= github.com/google/cel-go v0.10.1/go.mod h1:U7ayypeSkw23szu4GaQTPJGx66c20mx8JklMSxrmI1w= github.com/google/cel-spec v0.6.0/go.mod h1:Nwjgxy5CbjlPrtCWjeDjUyKMl8w41YBYGjsyDdqk0xA= +github.com/google/certificate-transparency-go v1.0.21/go.mod h1:QeJfpSbVSfYc7RgB3gJFj9cbuQMMchQxrWXz8Ruopmg= +github.com/google/certificate-transparency-go v1.1.1/go.mod h1:FDKqPvSXawb2ecErVRrD+nfy23RCzyl7eqVCEmlT1Zs= github.com/google/gnostic v0.5.7-v3refs h1:FhTMOKj2VhjpouxvWJAV1TL304uMlb9zcDqkl6cEI54= github.com/google/gnostic v0.5.7-v3refs/go.mod h1:73MKFl6jIHelAJNaBGFzt3SPtZULs9dYrGFt8OiIsHQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -369,6 +474,7 @@ github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200507031123-427632fa3b1c/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= @@ -380,6 +486,9 @@ github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLe github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= +github.com/google/trillian v1.3.11/go.mod h1:0tPraVHrSDkA3BO6vKX67zgLXs6SsOAbHEivX+9mPgw= +github.com/google/uuid v0.0.0-20161128191214-064e2069ce9c/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= @@ -389,53 +498,89 @@ github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5m github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2cUuW7uA/OeU= +github.com/gookit/color v1.4.2/go.mod h1:fqRyamkC1W8uxl+lxCQxOT09l/vYfZ+QeiX3rKQHCoQ= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gordonklaus/ineffassign v0.0.0-20200309095847-7953dde2c7bf/go.mod h1:cuNKsD1zp2v6XfE/orVX2QE1LC+i254ceGcVeDT3pTU= +github.com/gordonklaus/ineffassign v0.0.0-20210225214923-2e10b2664254/go.mod h1:M9mZEtGIsR1oDaZagNPNG9iq9n2HrhZ17dsXk73V3Lw= +github.com/gorhill/cronexpr v0.0.0-20180427100037-88b0669f7d75/go.mod h1:g2644b03hfBX9Ov0ZBDgXXens4rxSxmqFBbhvKv2yVA= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= +github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= +github.com/gostaticanalysis/analysisutil v0.0.3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= +github.com/gostaticanalysis/analysisutil v0.1.0/go.mod h1:dMhHRU9KTiDcuLGdy87/2gTR8WruwYZrKdRq9m1O6uw= +github.com/gostaticanalysis/analysisutil v0.4.1/go.mod h1:18U/DLpRgIUd459wGxVHE0fRgmo1UgHDcbw7F5idXu0= +github.com/gostaticanalysis/analysisutil v0.7.1/go.mod h1:v21E3hY37WKMGSnbsw2S/ojApNWb6C1//mXO48CXbVc= +github.com/gostaticanalysis/comment v1.3.0/go.mod h1:xMicKDx7XRXYdVwY9f9wQpDJVnqWxw9wCauCMKp+IBI= +github.com/gostaticanalysis/comment v1.4.1/go.mod h1:ih6ZxzTHLdadaiSnF5WY3dxUoXfXAlTaRzuaNDlSado= +github.com/gostaticanalysis/comment v1.4.2/go.mod h1:KLUTGDv6HOCotCH8h2erHKmpci2ZoR8VPu34YA2uzdM= +github.com/gostaticanalysis/forcetypeassert v0.0.0-20200621232751-01d4955beaa5/go.mod h1:qZEedyP/sY1lTGV1uJ3VhWZ2mqag3IkWsDHVbplHXak= +github.com/gostaticanalysis/nilerr v0.1.1/go.mod h1:wZYb6YI5YAxxq0i1+VJbY0s2YONW0HU0GPE3+5PWN4A= +github.com/gostaticanalysis/testutil v0.3.1-0.20210208050101-bfb5c8eec0e4/go.mod h1:D+FIZ+7OahH3ePw/izIEeH5I06eKs1IKI4Xr64/Am3M= +github.com/gostaticanalysis/testutil v0.4.0/go.mod h1:bLIoPefWXrRi/ssLFWX1dx7Repi5x3CuviD3dgAZaBU= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 h1:+ngKgrYPPJrOjhax5N+uePQ0Fh1Z7PheYoUI/0nzkPA= github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-gateway v1.12.1/go.mod h1:8XEsbTttt/W+VvjtQhLACqCisSPWTxCZ7sBRjU6iH9c= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= +github.com/hashicorp/consul/api v1.10.1/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= -github.com/hashicorp/go-hclog v0.9.2 h1:CG6TE5H9/JXsFWJCfoIVpKFIkFe6ysEuHirp4DxCsHI= github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= +github.com/hashicorp/go-hclog v0.12.0 h1:d4QkX8FRTYaKaCZBoXYY8zJX2BXjWxurN/GA2tkrmZM= +github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-retryablehttp v0.7.1 h1:sUiuQAnLlbvmExtFQs72iFW/HXeUn8Z1aJLQ4LJJbTQ= github.com/hashicorp/go-retryablehttp v0.7.1/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= +github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-version v1.2.1/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= +github.com/hashicorp/mdns v1.0.1/go.mod h1:4gW7WsVCke5TE7EPeYliwHlRUyBtfCwuFwuMg2DmyNY= github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= +github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= +github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= github.com/homeport/dyff v1.5.4 h1:v+C6EcBQYMWXfeDRPcQhImxQy0CdbRENWPEcHX39HJ0= github.com/homeport/dyff v1.5.4/go.mod h1:bWhjPpTUbco6MxEqTB5qrYtvX+Y59ZIPh9K1N4cUwh0= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/huandu/xstrings v1.0.0/go.mod h1:4qWG/gcEcfX4z/mBDHJ++3ReCw9ibxbsNJbcucJdbSo= +github.com/huandu/xstrings v1.2.0/go.mod h1:DvyZB1rfVYsBIigL8HwpZgxHwXozlTgGqn63UyNX5k4= 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.4/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= @@ -444,12 +589,23 @@ github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOl github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= +github.com/jgautheron/goconst v1.5.1/go.mod h1:aAosetZ5zaeC/2EfMeRswtxUFBpe2Hr7HzkgX4fanO4= +github.com/jhump/protoreflect v1.6.1/go.mod h1:RZQ/lnuN+zqeRVpQigTwO6o0AJUkxbnSnpuG7toUTG4= +github.com/jingyugao/rowserrcheck v1.1.1/go.mod h1:4yvlZSDb3IyDTUZJUmpZfm2Hwok+Dtp+nu2qOq+er9c= +github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af/go.mod h1:HEWGJkRDzjJY2sqdDwxccsGicWEf9BQOZsq2tV+xzM0= +github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= +github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= +github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/jonboulle/clockwork v0.2.0/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= +github.com/josharian/txtarfs v0.0.0-20210218200122-0702f000015a/go.mod h1:izVPOvVRsHiKkeGCT6tYBNWyDVuzj9wAaBb5R9qamfw= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= @@ -457,15 +613,25 @@ github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHm github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/juju/ratelimit v1.0.1/go.mod h1:qapgC/Gy+xNh9UxzV13HGGl/6UXNN+ct+vwSgWNm/qk= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= +github.com/julz/importas v0.0.0-20210419104244-841f0c0fe66d/go.mod h1:oSFU2R4XK/P7kNBrnL/FEQlDGN1/6WoxXEjSSXO0DV0= +github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351 h1:DowS9hvgyYSX4TO5NpyC606/Z4SxnNYbT+WX27or6Ck= github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/errcheck v1.6.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.13.4/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= +github.com/klauspost/compress v1.13.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.15.1/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.15.4 h1:1kn4/7MepF/CHmYub99/nNX8az0IJjfSOU/jbnTVfqQ= +github.com/klauspost/compress v1.15.4/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= @@ -477,11 +643,25 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kulti/thelper v0.4.0/go.mod h1:vMu2Cizjy/grP+jmsvOFDx1kYP6+PD1lqg4Yu5exl2U= +github.com/kunwardeep/paralleltest v1.0.3/go.mod h1:vLydzomDFpk7yu5UX02RmP0H8QfRPOV/oFhWN85Mjb4= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/kyoh86/exportloopref v0.1.8/go.mod h1:1tUcJeiioIs7VWe5gcOObrux3lb66+sBqGZrRkMwPgg= +github.com/ldez/gomoddirectives v0.2.2/go.mod h1:cpgBogWITnCfRq2qGoDkKMEVSaarhdBr6g8G04uz6d0= +github.com/ldez/tagliatelle v0.2.0/go.mod h1:8s6WJQwEYHbKZDsp/LjArytKOG8qaMrKQQ3mFukHs88= +github.com/letsencrypt/pkcs11key/v4 v4.0.0/go.mod h1:EFUvBDay26dErnNb70Nd0/VW3tJiIbETBPTl9ATXQag= +github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.8.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lib/pq v1.9.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lib/pq v1.10.3/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de h1:9TO3cAIGXtEhnIaL+V+BEER86oLrvS+kWobKpbJuye0= github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9B/r2mtpb6U+EI2rYA5OAXxsYw6wTamcNW+zcE= github.com/lithammer/dedent v1.1.0/go.mod h1:jrXYCQtgg0nJiN+StA2KgR7w6CiQNv9Fd/Z9BP0jIOc= +github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= +github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= +github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= @@ -491,29 +671,54 @@ github.com/mailru/easyjson v0.7.6 h1:8yTIVnZgCoiM1TgqoeTl+LfU5Jg6/xL3QhGQnimLYnA github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/manifoldco/promptui v0.9.0 h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA= github.com/manifoldco/promptui v0.9.0/go.mod h1:ka04sppxSGFAtxX0qhlYQjISsg9mR4GWtQEhdbn6Pgg= -github.com/matryer/is v1.2.0 h1:92UTHpy8CDwaJ08GqLDzhhuixiBUUD1p3AU6PHddz4A= +github.com/maratori/testpackage v1.0.1/go.mod h1:ddKdw+XG0Phzhx8BFDTKgpWP4i7MpApTE5fXSKAqwDU= +github.com/matoous/godox v0.0.0-20210227103229-6504466cf951/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= +github.com/matryer/is v1.4.0 h1:sosSmIWwkYITGrxZ25ULNDeKiMNzFSr4V/eqBQP0PeE= +github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= github.com/mattn/go-ciede2000 v0.0.0-20170301095244-782e8c62fec3 h1:BXxTozrOU8zgC5dkpn3J6NTRdoP+hjok/e+ACr4Hibk= github.com/mattn/go-ciede2000 v0.0.0-20170301095244-782e8c62fec3/go.mod h1:x1uk6vxTiVuNt6S5R2UYgdhpj3oKojXvOXauHZ7dEnI= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= +github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.6/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU= github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-shellwords v1.0.12 h1:M2zGm7EW6UQJvDeQxo4T51eKPurbeFbe8WtebGE2xrk= github.com/mattn/go-shellwords v1.0.12/go.mod h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lLtQsUlTZDWQ8Y= +github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= +github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/mbilski/exhaustivestruct v1.2.0/go.mod h1:OeTBVxQWoEmB2J2JCHmXWPJ0aksxSUOUy+nvtVEfzXc= +github.com/mgechev/dots v0.0.0-20210922191527-e955255bf517/go.mod h1:KQ7+USdGKfpPjXk4Ga+5XxQM4Lm4e3gAogrreFAYpOg= +github.com/mgechev/revive v1.1.2/go.mod h1:bnXsMr+ZTH09V5rssEI+jHAZ4z+ZdyhgO/zsy3EhK+0= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= +github.com/miekg/dns v1.1.35/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= +github.com/miekg/pkcs11 v1.0.2/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= +github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= +github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= +github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= @@ -529,6 +734,9 @@ github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0Qu github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.4.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/moby/spdystream v0.2.0 h1:cjW1zVyyoiM0T7b6UoySUFqzXMoqRckQtXwGPiBhOM8= github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6 h1:dcztxKSvZ4Id8iPpHERQBbIJfabdt4wUm5qy3wOL2Zc= @@ -540,47 +748,79 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 h1:n6/2gBQ3RWajuToeY6ZtZTIKv2v7ThUy5KKusIT0yc0= github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00/go.mod h1:Pm3mSP3c5uWn86xMLZ5Sa7JB9GsEZySvHYXCTK4E9q4= +github.com/moricho/tparallel v0.2.1/go.mod h1:fXEIZxG2vdfl0ZF8b42f5a78EhjjD5mX8qUplsoSU4k= +github.com/mozilla/scribe v0.0.0-20180711195314-fb71baf557c1/go.mod h1:FIczTrinKo8VaLxe6PWTPEXRXDIHz2QAwiaBaP5/4a8= +github.com/mozilla/tls-observatory v0.0.0-20210609171429-7bc42856d2e5/go.mod h1:FUqVoUPHSEdDR0MnFM3Dh8AU0pZHLXUD127SAJGER/s= github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mwitkow/go-proto-validators v0.0.0-20180403085117-0950a7990007/go.mod h1:m2XC9Qq0AlmmVksL6FktJCdTYyLk7V3fKyp0sl1yWQo= +github.com/mwitkow/go-proto-validators v0.2.0/go.mod h1:ZfA1hW+UH/2ZHOWvQ3HnQaU0DtnpXu850MZiy+YUgcc= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= +github.com/nakabonne/nestif v0.3.1/go.mod h1:9EtoZochLn5iUprVDmDjqGKPofoUEBL8U4Ngq6aY7OE= +github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354/go.mod h1:KSVJerMDfblTH7p5MZaTt+8zaT2iEk3AkVb9PQdZuE8= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/nishanths/exhaustive v0.2.3/go.mod h1:bhIX678Nx8inLM9PbpvK1yv6oGtoP8BfaIeMzgBNKvc= +github.com/nishanths/predeclared v0.0.0-20190419143655-18a43bb90ffc/go.mod h1:62PewwiQTlm/7Rj+cxVYqZvDIUc+JjZq6GHAC1fsObQ= +github.com/nishanths/predeclared v0.2.1/go.mod h1:HvkGJcA3naj4lOwnFXFDkFxVtSqQMB9sbB1usJ+xjQE= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= +github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= +github.com/olekukonko/tablewriter v0.0.2/go.mod h1:rSAaSIOAGT9odnlyGlUfAJaoc5w2fSBUmeGDbRWPxyQ= github.com/olekukonko/tablewriter v0.0.4/go.mod h1:zq6QwlOf5SlnkVbMSr5EoBv3636FWnp+qbPhuoO21uA= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= +github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo/v2 v2.1.3 h1:e/3Cwtogj0HA+25nMP1jCMDIf8RtRYbGwGGuBIFztkc= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/onsi/gomega v1.16.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= github.com/onsi/gomega v1.19.0 h1:4ieX6qQjPP/BfC3mpsAtIGGlxTWPeA3Inl/7DtXw1tw= github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= +github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= +github.com/opencontainers/image-spec v1.0.3-0.20220114050600-8b9d41f48198 h1:+czc/J8SlhPKLOtVLMQc+xDCFBT73ZStMsRhSsUhsSg= +github.com/opencontainers/image-spec v1.0.3-0.20220114050600-8b9d41f48198/go.mod h1:j4h1pJW6ZcJTgMZWP3+7RlG3zTaP02aDZ/Qw0sppK7Q= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/otiai10/copy v1.2.0/go.mod h1:rrF5dJ5F0t/EWSYODDu4j9/vEeYHMkc8jt0zJChqQWw= +github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= +github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs= +github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= +github.com/otiai10/mint v1.3.1/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= +github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= +github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d/go.mod h1:3OzsM7FXDQlpCiw2j81fOmAwQLnZnLGXVKUzeKQXIAw= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= +github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/polyfloyd/go-errorlint v0.0.0-20210722154253-910bb7978349/go.mod h1:wi9BfjxjF/bwiZ701TzmfKu6UKC357IOAtNr0Td0Lvw= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= @@ -609,38 +849,67 @@ github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1 github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/pseudomuto/protoc-gen-doc v1.3.2/go.mod h1:y5+P6n3iGrbKG+9O04V5ld71in3v/bX88wUwgt+U8EA= +github.com/pseudomuto/protokit v0.2.0/go.mod h1:2PdH30hxVHsup8KpBTOXTBeMVhJZVio3Q8ViKSAXT0Q= +github.com/quasilyte/go-consistent v0.0.0-20190521200055-c6f3937de18c/go.mod h1:5STLWrekHfjyYwxBRVRXNOSewLJ3PWfDJd1VyTS21fI= +github.com/quasilyte/go-ruleguard v0.3.1-0.20210203134552-1b5a410e1cc8/go.mod h1:KsAh3x0e7Fkpgs+Q9pNLS5XpFSvYCEVl5gP9Pp1xp30= +github.com/quasilyte/go-ruleguard v0.3.13/go.mod h1:Ul8wwdqR6kBVOCt2dipDBkE+T6vAV/iixkrKuRTN1oQ= +github.com/quasilyte/go-ruleguard/dsl v0.3.0/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= +github.com/quasilyte/go-ruleguard/dsl v0.3.10/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= +github.com/quasilyte/go-ruleguard/rules v0.0.0-20201231183845-9e62ed36efe1/go.mod h1:7JTjp89EGyU1d6XfBiXihJNG37wB2VRkd125Q1u7Plc= +github.com/quasilyte/go-ruleguard/rules v0.0.0-20210428214800-545e0d2e0bf7/go.mod h1:4cgAphtvu7Ftv7vOT2ZOYhC6CvBxZixcasr8qIOTA50= +github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95/go.mod h1:rlzQ04UMyJXu/aOvhd8qT+hvDrFpiwqp8MRXDY9szc0= github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo= +github.com/rogpeppe/go-internal v1.6.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/russross/blackfriday v1.6.0 h1:KqfZb0pUVN2lYqZUYRddxF4OR8ZMURnJIG5Y3VRLtww= +github.com/russross/blackfriday v1.6.0/go.mod h1:ti0ldHuxg49ri4ksnFxlkCfN+hvslNlmVHqNRXXJNAY= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/ryancurrah/gomodguard v1.2.3/go.mod h1:rYbA/4Tg5c54mV1sv4sQTP5WOPBcoLtnBZ7/TEhXAbg= +github.com/ryanrolds/sqlclosecheck v0.3.0/go.mod h1:1gREqxyTGR3lVtpngyFo3hZAgk0KCtEdgEkHwDbigdA= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/sagikazarmark/crypt v0.1.0/go.mod h1:B/mN0msZuINBtQ1zZLEQcegFJJf9vnYIR88KRMEuODE= +github.com/sanposhiho/wastedassign/v2 v2.0.6/go.mod h1:KyZ0MWTwxxBmfwn33zh3k1dmsbF2ud9pAAGfoLfjhtI= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/securego/gosec/v2 v2.9.1/go.mod h1:oDcDLcatOJxkCGaCaq8lua1jTnYf6Sou4wdiJ1n4iHc= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c/go.mod h1:/PevMnwAxekIXwN8qQyfc5gl2NlkB3CQlkizAbOkeBs= +github.com/shirou/gopsutil/v3 v3.21.10/go.mod h1:t75NhzCZ/dYyPQjyQmrAYP6c8+LCdFANeBMdLPCNnew= +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/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/sivchari/tenv v1.4.7/go.mod h1:5nF+bITvkebQVanjU6IuMbvIot/7ReNsUV7I5NbprB0= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/soheilhy/cmux v0.1.5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0= +github.com/sonatard/noctx v0.0.1/go.mod h1:9D2D/EoULe8Yy2joDHJj7bv3sZoq9AaSb8B4lqBjiZI= +github.com/sourcegraph/go-diff v0.6.1/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= +github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo= github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= github.com/spf13/cobra v1.4.0 h1:y+wJpx64xcgO1V+RcnwW0LEHxTKRi2ZDPSBjWnrg88Q= @@ -648,16 +917,22 @@ github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= +github.com/spf13/viper v1.9.0/go.mod h1:+i6ajR7OX2XaiBkrcZJFK21htRk7eDeLg7+O6bhUPP4= +github.com/ssgreg/nlreturn/v2 v2.2.1/go.mod h1:E/iiPB78hV7Szg2YfRgyIrk1AD6JVMTRkkxBiELzh2I= github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= +github.com/stretchr/testify v0.0.0-20170130113145-4d4bfba8f1d1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.1.4/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -666,29 +941,69 @@ github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1 h1:5TQK59W5E3v0r2duFAb7P95B6hEeOyEnHRa8MjYSMTY= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= +github.com/sylvia7788/contextcheck v1.0.4/go.mod h1:vuPKJMQ7MQ91ZTqfdyreNKwZjyUg6KO+IebVyQDedZQ= +github.com/tdakkota/asciicheck v0.0.0-20200416200610-e657995f937b/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM= +github.com/tenntenn/modver v1.0.1/go.mod h1:bePIyQPb7UeioSRkw3Q0XeMhYZSMx9B8ePqg6SAMGH0= +github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3/go.mod h1:ON8b8w4BN/kE1EOhwT0o+d62W65a6aPw1nouo9LMgyY= +github.com/tetafro/godot v1.4.11/go.mod h1:LR3CJpxDVGlYOWn3ZZg1PgNZdTUvzsZWu8xaEohUpn8= github.com/texttheater/golang-levenshtein v1.0.1 h1:+cRNoVrfiwufQPhoMzB6N0Yf/Mqajr6t1lOv8GyGE2U= github.com/texttheater/golang-levenshtein v1.0.1/go.mod h1:PYAKrbF5sAiq9wd+H82hs7gNaen0CplQ9uvm6+enD/8= github.com/theckman/yacspin v0.13.12 h1:CdZ57+n0U6JMuh2xqjnjRq5Haj6v1ner2djtLQRzJr4= github.com/theckman/yacspin v0.13.12/go.mod h1:Rd2+oG2LmQi5f3zC3yeZAOl245z8QOvrH4OPOJNZxLg= +github.com/timakin/bodyclose v0.0.0-20200424151742-cb6215831a94/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= +github.com/tklauser/go-sysconf v0.3.9/go.mod h1:11DU/5sG7UexIrp/O6g35hrWzu0JxlwQ3LSFUzyeuhs= +github.com/tklauser/numcpus v0.3.0/go.mod h1:yFGUr7TUHQRAhyqBcEg0Ge34zDBAsIvJJcyE6boqnA8= +github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tmc/grpc-websocket-proxy v0.0.0-20200427203606-3cfed13b9966/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tomarrell/wrapcheck/v2 v2.4.0/go.mod h1:68bQ/eJg55BROaRTbMjC7vuhL2OgfoG8bLp9ZyoBfyY= +github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce/go.mod h1:o8v6yHRoik09Xen7gje4m9ERNah1d1PPsVq1VEx9vE4= +github.com/tommy-muehle/go-mnd/v2 v2.4.0/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw= +github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= +github.com/ultraware/funlen v0.0.3/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= +github.com/ultraware/whitespace v0.0.4/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA= +github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= +github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/cli v1.22.4/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/uudashr/gocognit v1.0.5/go.mod h1:wgYz0mitoKOTysqxTDMOUXg+Jb5SvtihkfmugIZYpEA= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasthttp v1.30.0/go.mod h1:2rsYD01CKFrjjsvFxx75KlEUNpWNBY9JWD3K/7o2Cus= +github.com/valyala/quicktemplate v1.7.0/go.mod h1:sqKJnoaOF88V07vkO+9FL8fb9uZg/VPSJnLYn+LmLk8= +github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= +github.com/vbatts/tar-split v0.11.2 h1:Via6XqJr0hceW4wff3QRzD5gAk/tatMw/4ZA7cTlIME= +github.com/vbatts/tar-split v0.11.2/go.mod h1:vV3ZuO2yWSVsz+pfFzDG/upWH1JhjOiEaWq6kXyQ3VI= +github.com/viki-org/dnscache v0.0.0-20130720023526-c70c1f23c5d8/go.mod h1:dniwbG03GafCjFohMDmz6Zc6oCuiqgH6tGNyXTkHzXE= github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74 h1:JwtAtbp7r/7QSyGz8mKUbYJBg2+6Cd7OjM8o/GNOcVo= github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74/go.mod h1:RmMWU37GKR2s6pgrIEB4ixgpVCt/cf7dnJv3fuH1J1c= github.com/xanzy/go-gitlab v0.58.0 h1:Entnl8GrVDlc1jd1BlOWhNR0QVQgiO3WDom5DJbT+1s= github.com/xanzy/go-gitlab v0.58.0/go.mod h1:F0QEXwmqiBUxCgJm8fE9S+1veX4XC9Z4cfaAbqwk4YM= github.com/xanzy/ssh-agent v0.3.0 h1:wUMzuKtKilRgBAD1sUb8gOwwRr2FGoBVumcjoOACClI= github.com/xanzy/ssh-agent v0.3.0/go.mod h1:3s9xbODqPuuhK9JV1R321M/FlMZSBvE5aY6eAcqrDh0= +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= +github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xlab/treeprint v0.0.0-20181112141820-a009c3971eca h1:1CFlNzQhALwjS9mBAUkycX616GzgsuYUOCHA5+HSlXI= github.com/xlab/treeprint v0.0.0-20181112141820-a009c3971eca/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= +github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1zIOPMxZ5EncGwgmMJsa+9ucAQZXxsObs= +github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +github.com/yeya24/promlinter v0.1.0/go.mod h1:rs5vtZzeBHqqMwXqFScncpCF6u06lezhZepno9AB1Oc= +github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg= +github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= +github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZkTdatxwunjIkc= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/bbolt v1.3.4/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= +go.etcd.io/etcd v0.0.0-20200513171258-e048e166ab9c/go.mod h1:xCI7ZzBfRuGgBXyXO6yfWfDmlWd35khcWpUa4L0xI/k= go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= go.etcd.io/etcd/api/v3 v3.5.1/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= @@ -699,6 +1014,7 @@ go.etcd.io/etcd/client/v3 v3.5.1/go.mod h1:OnjH4M8OnAotwaB2l9bVgZzRFKru7/ZMoS46O go.etcd.io/etcd/pkg/v3 v3.5.0/go.mod h1:UzJGatBQ1lXChBkQF0AuAtkRQMYnHubxAEYIrC3MSsE= go.etcd.io/etcd/raft/v3 v3.5.0/go.mod h1:UFOHSIvO/nKwd4lhkwabrTD3cqW5yVyYYf/KlD00Szc= go.etcd.io/etcd/server/v3 v3.5.0/go.mod h1:3Ah5ruV+M+7RZr0+Y/5mNLwC+eQlni+mQmOVdCRJoS4= +go.mozilla.org/mozlog v0.0.0-20170222151521-4bb13139d403/go.mod h1:jHoPAGnDrCy6kaI2tAze5Prf0Nr0w/oNkROt2lw3n3o= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -720,30 +1036,42 @@ go.opentelemetry.io/otel/trace v0.20.0/go.mod h1:6GjCW8zgDjwGHGa6GkyeB8+/5vjT16g go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 h1:+FNtrFTmVw0YZGpBGX56XDee331t6JAXeK2bcyhLOOc= go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5/go.mod h1:nmDLcffg48OtT/PSW0Hg7FvpRQsQh5OSqIylirxKC7o= +go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= +go.uber.org/multierr v1.4.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= +go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= go.uber.org/zap v1.21.0 h1:WefMeulhovoZ2sYXz7st6K0sLj7bBhpiFaud4r4zST8= +golang.org/x/crypto v0.0.0-20180501155221-613d6eafa307/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= +golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e h1:T8NU3HyQ8ClP4SEE+KbFlg6n0NhuTsN4MyznaarGsZM= @@ -758,6 +1086,7 @@ 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-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= 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= @@ -783,6 +1112,7 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 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.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -802,7 +1132,10 @@ golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -810,6 +1143,7 @@ golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= @@ -828,8 +1162,11 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210326060303-6b1517762897/go.mod h1:uSPa2vr4CLtc/ILN5odXGNXS6mhrKVzTaCXzk9m6W3k= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210510120150-4163338589ed/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210825183410-e898025ed96a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= @@ -859,6 +1196,7 @@ golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJ 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= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -876,7 +1214,9 @@ golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -885,11 +1225,15 @@ golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191002063906-3421d5a6bb1c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -898,12 +1242,14 @@ golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -918,6 +1264,7 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -937,10 +1284,15 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210816074244-15123e1e1f71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210915083310-ed5796bab164/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210917161153-d61c044b1678/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211013075003-97ac67df715c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -948,6 +1300,7 @@ golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220513210249-45d2b4557a2a h1:N2T1jUrTQE9Re6TFF5PhvEHXHCguynGhKjWVsIUt5cY= golang.org/x/sys v0.0.0-20220513210249-45d2b4557a2a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +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= golang.org/x/term v0.0.0-20220526004731-065cf7ba2467 h1:CBpWXWQpIRjzmkkA+M7q9Fqnwd2mZr3AFqexg8YTfoM= @@ -962,21 +1315,29 @@ golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20220210224613-90d013bbcef8/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20220411224347-583f2d630306 h1:+gHMid33q6pen7kv9xvT+JRinntgeXO2AeZVd0AWD3w= golang.org/x/time v0.0.0-20220411224347-583f2d630306/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190110163146-51295c7ec13a/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190307163923-6a08e3108db3/go.mod h1:25r3+/G6/xytQM8iWZKq3Hn0kr0rgFKPUNVEL/dr3z4= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190311215038-5c2858a9cfe5/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190321232350-e250d351ecad/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190322203728-c1a832b0ad89/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= @@ -986,8 +1347,14 @@ golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgw golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190910044552-dd2b5c81c578/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190916130336-e45ffcd953cc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191010075000-0337d82405ff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -995,9 +1362,11 @@ golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117220505-0cba7a3a9ee9/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= @@ -1007,28 +1376,57 @@ golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapK golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200324003944-a576cf524670/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200329025819-fd4102a86c65/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200414032229-332987a829c3/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200422022333-3d57cf2e726e/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200426102838-f3a5411a4c3b/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200622203043-20e05c1c8ffa/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200624225443-88f3c62a19ff/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200625211823-6506e20df31f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200626171337-aa94e735be7f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200630154851-b2d8b0336632/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200706234117-b22de6825cf7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200724022722-7017fd6b1305/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200812195022-5ae4c3c160a0/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200820010801-b793a1359eac/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200831203904-5a2aa26beb65/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= +golang.org/x/tools v0.0.0-20201001104356-43ebab892c4c/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= +golang.org/x/tools v0.0.0-20201002184944-ecd9fd270d5d/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= +golang.org/x/tools v0.0.0-20201023174141-c8cfbd0f21e6/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201028025901-8cd080b735b3/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201114224030-61ea331ec02b/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201118003311-bd56c0adb394/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201230224404-63754364767c/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210101214203-2dba1e4ea05c/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210104081019-d8d6ddbec6ee/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.1.1-0.20210205202024-ef80cdb6ec6d/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= +golang.org/x/tools v0.1.1-0.20210302220138-2ac05c832e1a/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= 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.6/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo= +golang.org/x/tools v0.1.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo= golang.org/x/tools v0.1.10-0.20220218145154-897bd77cd717/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1040,6 +1438,7 @@ google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEt google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.10.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= @@ -1071,11 +1470,14 @@ google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9Ywl google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.2/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20170818010345-ee236bd376b0/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20181107211654-5fc9ac540362/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -1083,6 +1485,7 @@ google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRn google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= @@ -1103,6 +1506,8 @@ google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200626011028-ee7919e894b5/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200707001353-8e8330bf89df/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= @@ -1137,15 +1542,19 @@ google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ6 google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= 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= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.0/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= @@ -1185,12 +1594,16 @@ gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= +gopkg.in/cheggaaa/pb.v1 v1.0.28/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.63.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= @@ -1204,6 +1617,7 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.6/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= @@ -1220,6 +1634,7 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.2.1/go.mod h1:lPVVZ2BS5TfnjLyizF7o7hv7j9/L+8cZY2hLyjP9cGY= k8s.io/api v0.24.1 h1:BjCMRDcyEYz03joa3K1+rbshwh1Ay6oB53+iUx2H8UY= k8s.io/api v0.24.1/go.mod h1:JhoOvNiLXKTPQ60zh2g0ewpA+bnEYf5q44Flhquh4vQ= k8s.io/apiextensions-apiserver v0.24.1 h1:5yBh9+ueTq/kfnHQZa0MAo6uNcPrtxPMpNQgorBaKS0= @@ -1252,6 +1667,10 @@ k8s.io/metrics v0.24.1/go.mod h1:vMs5xpcOyY9D+/XVwlaw8oUHYCo6JTGBCZfyXOOkAhE= k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9 h1:HNSDgDCrr/6Ly3WEGKZftiE7IY19Vz2GdbOCyI4qqhc= k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +mvdan.cc/gofumpt v0.1.1/go.mod h1:yXG1r1WqZVKWbVRtBWKWX9+CxGYfA51nSomhM0woR48= +mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc= +mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4= +mvdan.cc/unparam v0.0.0-20210104141923-aac4ce9116a7/go.mod h1:hBpJkZE8H/sb+VRFvw2+rBpHNsTBcvSpk61hr8mzXZE= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= @@ -1273,6 +1692,7 @@ sigs.k8s.io/kustomize/kyaml v0.13.7/go.mod h1:6K+IUOuir3Y7nucPRAjw9yth04KSWBnP5p sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= sigs.k8s.io/structured-merge-diff/v4 v4.2.1 h1:bKCqE9GvQ5tiVHn5rfn1r+yao3aLQEaLzkkmAkf+A6Y= sigs.k8s.io/structured-merge-diff/v4 v4.2.1/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= +sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= diff --git a/internal/oci/build.go b/internal/oci/build.go new file mode 100644 index 00000000..ba508c0f --- /dev/null +++ b/internal/oci/build.go @@ -0,0 +1,139 @@ +/* +Copyright 2022 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package oci + +import ( + "archive/tar" + "compress/gzip" + "fmt" + "io" + "os" + "path/filepath" + "time" +) + +// Build archives the given directory as a tarball to the given local path. +// While archiving, any environment specific data (for example, the user and group name) is stripped from file headers. +func Build(artifactPath, sourceDir string) error { + if f, err := os.Stat(sourceDir); os.IsNotExist(err) || !f.IsDir() { + return fmt.Errorf("invalid source dir path: %s", sourceDir) + } + + tf, err := os.CreateTemp(filepath.Split(sourceDir)) + if err != nil { + return err + } + tmpName := tf.Name() + defer func() { + if err != nil { + os.Remove(tmpName) + } + }() + + sz := &writeCounter{} + mw := io.MultiWriter(tf, sz) + + gw := gzip.NewWriter(mw) + tw := tar.NewWriter(gw) + if err := filepath.Walk(sourceDir, func(p string, fi os.FileInfo, err error) error { + if err != nil { + return err + } + + // Ignore anything that is not a file or directories e.g. symlinks + if m := fi.Mode(); !(m.IsRegular() || m.IsDir()) { + return nil + } + + header, err := tar.FileInfoHeader(fi, p) + if err != nil { + return err + } + // The name needs to be modified to maintain directory structure + // as tar.FileInfoHeader only has access to the base name of the file. + // Ref: https://golang.org/src/archive/tar/common.go?#L626 + relFilePath := p + if filepath.IsAbs(sourceDir) { + relFilePath, err = filepath.Rel(sourceDir, p) + if err != nil { + return err + } + } + header.Name = relFilePath + + // Remove any environment specific data. + header.Gid = 0 + header.Uid = 0 + header.Uname = "" + header.Gname = "" + header.ModTime = time.Time{} + header.AccessTime = time.Time{} + header.ChangeTime = time.Time{} + + if err := tw.WriteHeader(header); err != nil { + return err + } + + if !fi.Mode().IsRegular() { + return nil + } + f, err := os.Open(p) + if err != nil { + f.Close() + return err + } + if _, err := io.Copy(tw, f); err != nil { + f.Close() + return err + } + return f.Close() + }); err != nil { + tw.Close() + gw.Close() + tf.Close() + return err + } + + if err := tw.Close(); err != nil { + gw.Close() + tf.Close() + return err + } + if err := gw.Close(); err != nil { + tf.Close() + return err + } + if err := tf.Close(); err != nil { + return err + } + + if err := os.Chmod(tmpName, 0o640); err != nil { + return err + } + + return os.Rename(tmpName, artifactPath) +} + +type writeCounter struct { + written int64 +} + +func (wc *writeCounter) Write(p []byte) (int, error) { + n := len(p) + wc.written += int64(n) + return n, nil +} diff --git a/internal/oci/meta.go b/internal/oci/meta.go new file mode 100644 index 00000000..3196cb26 --- /dev/null +++ b/internal/oci/meta.go @@ -0,0 +1,60 @@ +/* +Copyright 2022 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package oci + +import ( + "fmt" +) + +const ( + SourceAnnotation = "source.toolkit.fluxcd.io/url" + RevisionAnnotation = "source.toolkit.fluxcd.io/revision" +) + +type Metadata struct { + Source string `json:"source_url"` + Revision string `json:"source_revision"` + Digest string `json:"digest"` +} + +func (m *Metadata) ToAnnotations() map[string]string { + annotations := map[string]string{ + SourceAnnotation: m.Source, + RevisionAnnotation: m.Revision, + } + + return annotations +} + +func GetMetadata(annotations map[string]string) (*Metadata, error) { + source, ok := annotations[SourceAnnotation] + if !ok { + return nil, fmt.Errorf("'%s' annotation not found", SourceAnnotation) + } + + revision, ok := annotations[RevisionAnnotation] + if !ok { + return nil, fmt.Errorf("'%s' annotation not found", RevisionAnnotation) + } + + m := Metadata{ + Source: source, + Revision: revision, + } + + return &m, nil +} diff --git a/internal/oci/pull.go b/internal/oci/pull.go new file mode 100644 index 00000000..b37642a8 --- /dev/null +++ b/internal/oci/pull.go @@ -0,0 +1,75 @@ +/* +Copyright 2022 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package oci + +import ( + "context" + "fmt" + + "github.com/fluxcd/pkg/untar" + "github.com/google/go-containerregistry/pkg/crane" + "github.com/google/go-containerregistry/pkg/name" +) + +// Pull downloads an artifact from an OCI repository and extracts the content to the given directory. +func Pull(ctx context.Context, url, outDir string) (*Metadata, error) { + ref, err := name.ParseReference(url) + if err != nil { + return nil, fmt.Errorf("invalid URL: %w", err) + } + + img, err := crane.Pull(url, craneOptions(ctx)...) + if err != nil { + return nil, err + } + + digest, err := img.Digest() + if err != nil { + return nil, fmt.Errorf("parsing digest failed: %w", err) + } + + manifest, err := img.Manifest() + if err != nil { + return nil, fmt.Errorf("parsing manifest failed: %w", err) + } + + meta, err := GetMetadata(manifest.Annotations) + if err != nil { + return nil, err + } + meta.Digest = ref.Context().Digest(digest.String()).String() + + layers, err := img.Layers() + if err != nil { + return nil, fmt.Errorf("failed to list layers: %w", err) + } + + if len(layers) < 1 { + return nil, fmt.Errorf("no layers found in artifact") + } + + blob, err := layers[0].Compressed() + if err != nil { + return nil, fmt.Errorf("extracting first layer failed: %w", err) + } + + if _, err = untar.Untar(blob, outDir); err != nil { + return nil, fmt.Errorf("failed to untar first layer: %w", err) + } + + return meta, nil +} diff --git a/internal/oci/push.go b/internal/oci/push.go new file mode 100644 index 00000000..30d572c9 --- /dev/null +++ b/internal/oci/push.go @@ -0,0 +1,81 @@ +/* +Copyright 2022 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package oci + +import ( + "context" + "fmt" + "os" + "path/filepath" + + "github.com/google/go-containerregistry/pkg/crane" + "github.com/google/go-containerregistry/pkg/name" + gcrv1 "github.com/google/go-containerregistry/pkg/v1" + "github.com/google/go-containerregistry/pkg/v1/empty" + "github.com/google/go-containerregistry/pkg/v1/mutate" +) + +// Push creates an artifact from the given directory, uploads the artifact +// to the given OCI repository and returns the digest. +func Push(ctx context.Context, url, sourceDir string, meta Metadata) (string, error) { + ref, err := name.ParseReference(url) + if err != nil { + return "", fmt.Errorf("invalid URL: %w", err) + } + + tmpDir, err := os.MkdirTemp("", "oci") + if err != nil { + return "", err + } + defer os.RemoveAll(tmpDir) + + tmpFile := filepath.Join(tmpDir, "artifact.tgz") + + if err := Build(tmpFile, sourceDir); err != nil { + return "", err + } + + img, err := crane.Append(empty.Image, tmpFile) + if err != nil { + return "", fmt.Errorf("appeding content to artifact failed: %w", err) + } + + img = mutate.Annotations(img, meta.ToAnnotations()).(gcrv1.Image) + + if err := crane.Push(img, url, craneOptions(ctx)...); err != nil { + return "", fmt.Errorf("pushing artifact failed: %w", err) + } + + digest, err := img.Digest() + if err != nil { + return "", fmt.Errorf("parsing artifact digest failed: %w", err) + } + + return ref.Context().Digest(digest.String()).String(), err +} + +func craneOptions(ctx context.Context) []crane.Option { + return []crane.Option{ + crane.WithContext(ctx), + crane.WithUserAgent("flux/v2"), + crane.WithPlatform(&gcrv1.Platform{ + Architecture: "flux", + OS: "flux", + OSVersion: "v2", + }), + } +} diff --git a/internal/oci/tag.go b/internal/oci/tag.go new file mode 100644 index 00000000..8e0140f6 --- /dev/null +++ b/internal/oci/tag.go @@ -0,0 +1,40 @@ +/* +Copyright 2022 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package oci + +import ( + "context" + "fmt" + "github.com/google/go-containerregistry/pkg/crane" + "github.com/google/go-containerregistry/pkg/name" +) + +// Tag creates a new tag for the given artifact using the same OCI repository as the origin. +func Tag(ctx context.Context, url, tag string) (string, error) { + ref, err := name.ParseReference(url) + if err != nil { + return "", fmt.Errorf("invalid URL: %w", err) + } + + if err := crane.Tag(url, tag, craneOptions(ctx)...); err != nil { + return "", err + } + + dst := ref.Context().Tag(tag) + + return dst.Name(), nil +} From 9503ecafb1c50a4bdb2ddaf984820fe6ea9c4391 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Tue, 21 Jun 2022 12:38:10 +0300 Subject: [PATCH 175/818] Add artifact commands Implement build, push, pull and tag artifact commands. For authentication purposes, all `flux artifact` commands are using the '~/.docker/config.json' config file and the Docker credential helpers. Signed-off-by: Stefan Prodan --- cmd/flux/build_artifact.go | 69 ++++++++++++++++++++++++++ cmd/flux/pull.go | 31 ++++++++++++ cmd/flux/pull_artifact.go | 81 +++++++++++++++++++++++++++++++ cmd/flux/push.go | 31 ++++++++++++ cmd/flux/push_artifact.go | 99 ++++++++++++++++++++++++++++++++++++++ cmd/flux/tag.go | 31 ++++++++++++ cmd/flux/tag_artifact.go | 74 ++++++++++++++++++++++++++++ 7 files changed, 416 insertions(+) create mode 100644 cmd/flux/build_artifact.go create mode 100644 cmd/flux/pull.go create mode 100644 cmd/flux/pull_artifact.go create mode 100644 cmd/flux/push.go create mode 100644 cmd/flux/push_artifact.go create mode 100644 cmd/flux/tag.go create mode 100644 cmd/flux/tag_artifact.go diff --git a/cmd/flux/build_artifact.go b/cmd/flux/build_artifact.go new file mode 100644 index 00000000..83aa30ea --- /dev/null +++ b/cmd/flux/build_artifact.go @@ -0,0 +1,69 @@ +/* +Copyright 2022 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "fmt" + "os" + + "github.com/spf13/cobra" + + "github.com/fluxcd/flux2/internal/oci" +) + +var buildArtifactCmd = &cobra.Command{ + Use: "artifact", + Short: "Build artifact", + Long: `The build artifact command creates an tgz file with the manifests from the given directory.`, + Example: `# Build the given manifests directory into an artifact +flux build artifact --path ./path/to/local/manifests --output ./path/to/artifact.tgz +`, + RunE: buildArtifactCmdRun, +} + +type buildArtifactFlags struct { + output string + path string +} + +var buildArtifactArgs buildArtifactFlags + +func init() { + buildArtifactCmd.Flags().StringVar(&buildArtifactArgs.path, "path", "", "Path to the directory where the Kubernetes manifests are located.") + buildArtifactCmd.Flags().StringVarP(&buildArtifactArgs.output, "output", "0", "artifact.tgz", "Path to where the artifact tgz file should be written.") + buildCmd.AddCommand(buildArtifactCmd) +} + +func buildArtifactCmdRun(cmd *cobra.Command, args []string) error { + if buildArtifactArgs.path == "" { + return fmt.Errorf("invalid path %q", buildArtifactArgs.path) + } + + if fs, err := os.Stat(buildArtifactArgs.path); err != nil || !fs.IsDir() { + return fmt.Errorf("invalid path %q", buildArtifactArgs.path) + } + + logger.Actionf("building artifact from %s", buildArtifactArgs.path) + + if err := oci.Build(buildArtifactArgs.output, buildArtifactArgs.path); err != nil { + return fmt.Errorf("bulding artifact failed, error: %w", err) + } + + logger.Successf("artifact created at %s", buildArtifactArgs.output) + + return nil +} diff --git a/cmd/flux/pull.go b/cmd/flux/pull.go new file mode 100644 index 00000000..7ea48a1f --- /dev/null +++ b/cmd/flux/pull.go @@ -0,0 +1,31 @@ +/* +Copyright 2022 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "github.com/spf13/cobra" +) + +var pullCmd = &cobra.Command{ + Use: "pull", + Short: "Pull artifacts", + Long: "The pull command is used to download OCI artifacts.", +} + +func init() { + rootCmd.AddCommand(pullCmd) +} diff --git a/cmd/flux/pull_artifact.go b/cmd/flux/pull_artifact.go new file mode 100644 index 00000000..37560f68 --- /dev/null +++ b/cmd/flux/pull_artifact.go @@ -0,0 +1,81 @@ +/* +Copyright 2022 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "context" + "fmt" + "os" + + "github.com/spf13/cobra" + + "github.com/fluxcd/flux2/internal/oci" +) + +var pullArtifactCmd = &cobra.Command{ + Use: "artifact", + Short: "Push artifact", + Long: `The pull artifact command downloads and extracts the OCI artifact content to the given path. +The pull command uses the credentials from '~/.docker/config.json'.`, + Example: `# Pull an OCI artifact created by flux from GHCR +flux pull artifact ghcr.io/org/manifests/app:v0.0.1 --output ./path/to/local/manifests +`, + RunE: pullArtifactCmdRun, +} + +type pullArtifactFlags struct { + output string +} + +var pullArtifactArgs pullArtifactFlags + +func init() { + pullArtifactCmd.Flags().StringVarP(&pullArtifactArgs.output, "output", "o", "", "Path where the artifact content should be extracted.") + pullCmd.AddCommand(pullArtifactCmd) +} + +func pullArtifactCmdRun(cmd *cobra.Command, args []string) error { + if len(args) < 1 { + return fmt.Errorf("artifact name is required") + } + url := args[0] + + if pullArtifactArgs.output == "" { + return fmt.Errorf("invalid output path %s", pullArtifactArgs.output) + } + + if fs, err := os.Stat(pullArtifactArgs.output); err != nil || !fs.IsDir() { + return fmt.Errorf("invalid output path %s", pullArtifactArgs.output) + } + + ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) + defer cancel() + + logger.Actionf("pulling artifact from %s", url) + + meta, err := oci.Pull(ctx, url, pullArtifactArgs.output) + if err != nil { + return err + } + + logger.Successf("source %s", meta.Source) + logger.Successf("revision %s", meta.Revision) + logger.Successf("digest %s", meta.Digest) + logger.Successf("artifact content extracted to %s", pullArtifactArgs.output) + + return nil +} diff --git a/cmd/flux/push.go b/cmd/flux/push.go new file mode 100644 index 00000000..481c6ae9 --- /dev/null +++ b/cmd/flux/push.go @@ -0,0 +1,31 @@ +/* +Copyright 2021 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "github.com/spf13/cobra" +) + +var pushCmd = &cobra.Command{ + Use: "push", + Short: "Push artifacts", + Long: "The push command is used to publish OCI artifacts.", +} + +func init() { + rootCmd.AddCommand(pushCmd) +} diff --git a/cmd/flux/push_artifact.go b/cmd/flux/push_artifact.go new file mode 100644 index 00000000..813dbb46 --- /dev/null +++ b/cmd/flux/push_artifact.go @@ -0,0 +1,99 @@ +/* +Copyright 2022 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "context" + "fmt" + "os" + + "github.com/spf13/cobra" + + "github.com/fluxcd/flux2/internal/oci" +) + +var pushArtifactCmd = &cobra.Command{ + Use: "artifact", + Short: "Push artifact", + Long: `The push artifact command creates a tarball from the given directory and uploads the artifact to a OCI repository. +The push command uses the credentials from '~/.docker/config.json'.`, + Example: `# Push the local manifests to GHCR +flux push artifact ghcr.io/org/manifests/app:v0.0.1 \ + --path="./path/to/local/manifests" \ + --source="$(git config --get remote.origin.url)" \ + --revision="$(git branch --show-current)/$(git rev-parse HEAD)" +`, + RunE: pushArtifactCmdRun, +} + +type pushArtifactFlags struct { + path string + source string + revision string +} + +var pushArtifactArgs pushArtifactFlags + +func init() { + pushArtifactCmd.Flags().StringVar(&pushArtifactArgs.path, "path", "", "Path to the directory where the Kubernetes manifests are located.") + pushArtifactCmd.Flags().StringVar(&pushArtifactArgs.source, "source", "", "The source address, e.g. Git URL.") + pushArtifactCmd.Flags().StringVar(&pushArtifactArgs.revision, "revision", "", "The source revision in the format '/'") + pushCmd.AddCommand(pushArtifactCmd) +} + +func pushArtifactCmdRun(cmd *cobra.Command, args []string) error { + if len(args) < 1 { + return fmt.Errorf("artifact name is required") + } + url := args[0] + + if pushArtifactArgs.source == "" { + return fmt.Errorf("--source is required") + } + + if pushArtifactArgs.revision == "" { + return fmt.Errorf("--revision is required") + } + + if pushArtifactArgs.path == "" { + return fmt.Errorf("invalid path %q", pushArtifactArgs.path) + } + + if fs, err := os.Stat(pushArtifactArgs.path); err != nil || !fs.IsDir() { + return fmt.Errorf("invalid path %q", pushArtifactArgs.path) + } + + meta := oci.Metadata{ + Source: pushArtifactArgs.source, + Revision: pushArtifactArgs.revision, + } + + ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) + defer cancel() + + logger.Actionf("pushing artifact to %s", url) + + digest, err := oci.Push(ctx, url, pushArtifactArgs.path, meta) + if err != nil { + return fmt.Errorf("pushing artifact failed: %w", err) + } + + logger.Successf("artifact successfully pushed to %s", digest) + + return nil + +} diff --git a/cmd/flux/tag.go b/cmd/flux/tag.go new file mode 100644 index 00000000..56c9485f --- /dev/null +++ b/cmd/flux/tag.go @@ -0,0 +1,31 @@ +/* +Copyright 2021 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "github.com/spf13/cobra" +) + +var tagCmd = &cobra.Command{ + Use: "tag", + Short: "Tag artifacts", + Long: "The tag command is used to tag OCI artifacts.", +} + +func init() { + rootCmd.AddCommand(tagCmd) +} diff --git a/cmd/flux/tag_artifact.go b/cmd/flux/tag_artifact.go new file mode 100644 index 00000000..be0a6387 --- /dev/null +++ b/cmd/flux/tag_artifact.go @@ -0,0 +1,74 @@ +/* +Copyright 2022 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "context" + "fmt" + "github.com/fluxcd/flux2/internal/oci" + "github.com/spf13/cobra" +) + +var tagArtifactCmd = &cobra.Command{ + Use: "artifact", + Short: "Tag artifact", + Long: `The tag artifact command creates tags for the given OCI artifact. +The tag command uses the credentials from '~/.docker/config.json'.`, + Example: `# Tag an artifact version as latest +flux tag artifact ghcr.io/org/manifests/app:v0.0.1 --tag latest +`, + RunE: tagArtifactCmdRun, +} + +type tagArtifactFlags struct { + tags []string +} + +var tagArtifactArgs tagArtifactFlags + +func init() { + tagArtifactCmd.Flags().StringSliceVar(&tagArtifactArgs.tags, "tag", nil, "Tag name.") + tagCmd.AddCommand(tagArtifactCmd) +} + +func tagArtifactCmdRun(cmd *cobra.Command, args []string) error { + if len(args) < 1 { + return fmt.Errorf("artifact name is required") + } + url := args[0] + + if len(tagArtifactArgs.tags) < 1 { + return fmt.Errorf("--tag is required") + } + + ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) + defer cancel() + + logger.Actionf("tagging artifact") + + for _, tag := range tagArtifactArgs.tags { + img, err := oci.Tag(ctx, url, tag) + if err != nil { + return fmt.Errorf("tagging artifact failed: %w", err) + } + + logger.Successf("artifact tagged as %s", img) + } + + return nil + +} From 12a491f5389690d5c4fb13c0935a2a22394e3dd4 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 22 Jun 2022 08:58:40 +0300 Subject: [PATCH 176/818] Update controllers to OCI preview images Signed-off-by: Stefan Prodan --- manifests/bases/kustomize-controller/kustomization.yaml | 9 +++++++-- manifests/bases/source-controller/kustomization.yaml | 9 +++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/manifests/bases/kustomize-controller/kustomization.yaml b/manifests/bases/kustomize-controller/kustomization.yaml index db3ecfc6..2ae59c8a 100644 --- a/manifests/bases/kustomize-controller/kustomization.yaml +++ b/manifests/bases/kustomize-controller/kustomization.yaml @@ -1,8 +1,9 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization +# TODO: remove the hardcoded branch when OCIRepository is released resources: -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.26.3/kustomize-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.26.3/kustomize-controller.deployment.yaml +- https://github.com/fluxcd/kustomize-controller/config/crd?ref=oci +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.26.1/kustomize-controller.deployment.yaml - account.yaml patchesJson6902: - target: @@ -11,3 +12,7 @@ patchesJson6902: kind: Deployment name: kustomize-controller path: patch.yaml +# TODO: remove the hardcoded image when OCIRepository is released +images: + - name: fluxcd/kustomize-controller + newTag: oci-7681bda9 diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index 20c65d32..29147274 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -1,8 +1,9 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization +# TODO: remove the hardcoded branch when OCIRepository is released resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.25.11/source-controller.crds.yaml -- https://github.com/fluxcd/source-controller/releases/download/v0.25.11/source-controller.deployment.yaml +- https://github.com/fluxcd/source-controller/config/crd?ref=oci +- https://github.com/fluxcd/source-controller/releases/download/v0.25.5/source-controller.deployment.yaml - account.yaml patchesJson6902: - target: @@ -11,3 +12,7 @@ patchesJson6902: kind: Deployment name: source-controller path: patch.yaml +# TODO: remove the hardcoded image when OCIRepository is released +images: + - name: fluxcd/source-controller + newTag: oci-778f6d5d From 2d8db4f20de34f0525e85124ee218506bc39423a Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 22 Jun 2022 10:16:57 +0300 Subject: [PATCH 177/818] Implement OCIRepository commands Signed-off-by: Stefan Prodan --- .github/workflows/e2e.yaml | 21 +++ cmd/flux/create_kustomization.go | 7 + cmd/flux/create_source_oci.go | 222 +++++++++++++++++++++++++ cmd/flux/delete_source_oci.go | 40 +++++ cmd/flux/export_source_oci.go | 92 ++++++++++ cmd/flux/get_source_all.go | 4 + cmd/flux/get_source_oci.go | 98 +++++++++++ cmd/flux/reconcile_kustomization.go | 5 + cmd/flux/reconcile_source_oci.go | 50 ++++++ cmd/flux/resume_source_oci.go | 53 ++++++ cmd/flux/source.go | 34 ++++ cmd/flux/suspend_source_oci.go | 53 ++++++ internal/flags/kustomization_source.go | 2 +- internal/oci/build.go | 2 +- 14 files changed, 681 insertions(+), 2 deletions(-) create mode 100644 cmd/flux/create_source_oci.go create mode 100644 cmd/flux/delete_source_oci.go create mode 100644 cmd/flux/export_source_oci.go create mode 100644 cmd/flux/get_source_oci.go create mode 100644 cmd/flux/reconcile_source_oci.go create mode 100644 cmd/flux/resume_source_oci.go create mode 100644 cmd/flux/suspend_source_oci.go diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index 14c38578..9f4fcb66 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -168,6 +168,27 @@ jobs: - name: flux delete source git run: | /tmp/flux delete source git podinfo --silent + - name: flux oci + run: | + /tmp/flux create source oci podinfo-oci \ + --url ghcr.io/stefanprodan/manifests/podinfo \ + --tag 6.1.6 \ + --interval 10m + /tmp/flux create kustomization podinfo-oci \ + --source=OCIRepository/podinfo-oci \ + --path="./kustomize" \ + --prune=true \ + --interval=5m \ + --target-namespace=default \ + --wait=true \ + --health-check-timeout=3m + /tmp/flux reconcile source oci podinfo-oci + /tmp/flux suspend source oci podinfo-oci + /tmp/flux get sources oci + /tmp/flux resume source oci podinfo-oci + /tmp/flux export source oci podinfo-oci + /tmp/flux delete ks podinfo-oci --silent + /tmp/flux delete source oci podinfo-oci --silent - name: flux create tenant run: | /tmp/flux create tenant dev-team --with-namespace=apps diff --git a/cmd/flux/create_kustomization.go b/cmd/flux/create_kustomization.go index f808a99f..26d1e3ea 100644 --- a/cmd/flux/create_kustomization.go +++ b/cmd/flux/create_kustomization.go @@ -68,6 +68,13 @@ var createKsCmd = &cobra.Command{ --prune=true \ --interval=5m + # Create a Kustomization resource that references an OCIRepository + flux create kustomization podinfo \ + --source=OCIRepository/podinfo \ + --target-namespace=default \ + --prune=true \ + --interval=5m + # Create a Kustomization resource that references a Bucket flux create kustomization secrets \ --source=Bucket/secrets \ diff --git a/cmd/flux/create_source_oci.go b/cmd/flux/create_source_oci.go new file mode 100644 index 00000000..e1d26c43 --- /dev/null +++ b/cmd/flux/create_source_oci.go @@ -0,0 +1,222 @@ +/* +Copyright 2022 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "context" + "fmt" + "os" + "strings" + + "github.com/spf13/cobra" + "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" + "k8s.io/apimachinery/pkg/util/wait" + "sigs.k8s.io/controller-runtime/pkg/client" + + "github.com/fluxcd/pkg/apis/meta" + "github.com/fluxcd/pkg/runtime/conditions" + + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + + "github.com/fluxcd/flux2/internal/utils" +) + +var createSourceOCIRepositoryCmd = &cobra.Command{ + Use: "oci [name]", + Short: "Create or update an OCIRepository", + Long: `The create source oci command generates an OCIRepository resource and waits for it to be ready.`, + Example: ` # Create an OCIRepository for a public container image + flux create source oci podinfo \ + --url=ghcr.io/stefanprodan/manifests/podinfo \ + --tag=6.1.6 \ + --interval=10m +`, + RunE: createSourceOCIRepositoryCmdRun, +} + +type sourceOCIRepositoryFlags struct { + url string + tag string + digest string + secretRef string + ignorePaths []string +} + +var sourceOCIRepositoryArgs = sourceOCIRepositoryFlags{} + +func init() { + createSourceOCIRepositoryCmd.Flags().StringVar(&sourceOCIRepositoryArgs.url, "url", "", "the OCI repository URL") + createSourceOCIRepositoryCmd.Flags().StringVar(&sourceOCIRepositoryArgs.tag, "tag", "", "the OCI artifact tag") + createSourceOCIRepositoryCmd.Flags().StringVar(&sourceOCIRepositoryArgs.digest, "digest", "", "the OCI artifact digest") + createSourceOCIRepositoryCmd.Flags().StringVar(&sourceOCIRepositoryArgs.secretRef, "secret-ref", "", "the name of an existing secret containing credentials") + createSourceOCIRepositoryCmd.Flags().StringSliceVar(&sourceOCIRepositoryArgs.ignorePaths, "ignore-paths", nil, "set paths to ignore resources (can specify multiple paths with commas: path1,path2)") + + createSourceCmd.AddCommand(createSourceOCIRepositoryCmd) +} + +func createSourceOCIRepositoryCmdRun(cmd *cobra.Command, args []string) error { + name := args[0] + + if sourceOCIRepositoryArgs.url == "" { + return fmt.Errorf("url is required") + } + + if sourceOCIRepositoryArgs.tag == "" && sourceOCIRepositoryArgs.digest == "" { + return fmt.Errorf("--tag or --digest is required") + } + + sourceLabels, err := parseLabels() + if err != nil { + return err + } + + tmpDir, err := os.MkdirTemp("", name) + if err != nil { + return err + } + defer os.RemoveAll(tmpDir) + + var ignorePaths *string + if len(sourceOCIRepositoryArgs.ignorePaths) > 0 { + ignorePathsStr := strings.Join(sourceOCIRepositoryArgs.ignorePaths, "\n") + ignorePaths = &ignorePathsStr + } + + repository := &sourcev1.OCIRepository{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + Namespace: *kubeconfigArgs.Namespace, + Labels: sourceLabels, + }, + Spec: sourcev1.OCIRepositorySpec{ + URL: sourceOCIRepositoryArgs.url, + Interval: metav1.Duration{ + Duration: createArgs.interval, + }, + Reference: &sourcev1.OCIRepositoryRef{}, + Ignore: ignorePaths, + }, + } + + if sourceOCIRepositoryArgs.tag != "" { + repository.Spec.Reference.Tag = sourceOCIRepositoryArgs.tag + } + if sourceOCIRepositoryArgs.digest != "" { + repository.Spec.Reference.Digest = sourceOCIRepositoryArgs.digest + } + + if createSourceArgs.fetchTimeout > 0 { + repository.Spec.Timeout = &metav1.Duration{Duration: createSourceArgs.fetchTimeout} + } + + if sourceOCIRepositoryArgs.secretRef != "" { + repository.Spec.SecretRef = &meta.LocalObjectReference{ + Name: sourceOCIRepositoryArgs.secretRef, + } + } + + if createArgs.export { + return printExport(exportOCIRepository(repository)) + } + + ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) + defer cancel() + + kubeClient, err := utils.KubeClient(kubeconfigArgs, kubeclientOptions) + if err != nil { + return err + } + + logger.Actionf("applying OCIRepository") + namespacedName, err := upsertOCIRepository(ctx, kubeClient, repository) + if err != nil { + return err + } + + logger.Waitingf("waiting for OCIRepository reconciliation") + if err := wait.PollImmediate(rootArgs.pollInterval, rootArgs.timeout, + isOCIRepositoryReady(ctx, kubeClient, namespacedName, repository)); err != nil { + return err + } + logger.Successf("OCIRepository reconciliation completed") + + if repository.Status.Artifact == nil { + return fmt.Errorf("no artifact was found") + } + logger.Successf("fetched revision: %s", repository.Status.Artifact.Revision) + return nil +} + +func upsertOCIRepository(ctx context.Context, kubeClient client.Client, + ociRepository *sourcev1.OCIRepository) (types.NamespacedName, error) { + namespacedName := types.NamespacedName{ + Namespace: ociRepository.GetNamespace(), + Name: ociRepository.GetName(), + } + + var existing sourcev1.OCIRepository + err := kubeClient.Get(ctx, namespacedName, &existing) + if err != nil { + if errors.IsNotFound(err) { + if err := kubeClient.Create(ctx, ociRepository); err != nil { + return namespacedName, err + } else { + logger.Successf("OCIRepository created") + return namespacedName, nil + } + } + return namespacedName, err + } + + existing.Labels = ociRepository.Labels + existing.Spec = ociRepository.Spec + if err := kubeClient.Update(ctx, &existing); err != nil { + return namespacedName, err + } + ociRepository = &existing + logger.Successf("OCIRepository updated") + return namespacedName, nil +} + +func isOCIRepositoryReady(ctx context.Context, kubeClient client.Client, + namespacedName types.NamespacedName, ociRepository *sourcev1.OCIRepository) wait.ConditionFunc { + return func() (bool, error) { + err := kubeClient.Get(ctx, namespacedName, ociRepository) + if err != nil { + return false, err + } + + if c := conditions.Get(ociRepository, meta.ReadyCondition); c != nil { + // Confirm the Ready condition we are observing is for the + // current generation + if c.ObservedGeneration != ociRepository.GetGeneration() { + return false, nil + } + + // Further check the Status + switch c.Status { + case metav1.ConditionTrue: + return true, nil + case metav1.ConditionFalse: + return false, fmt.Errorf(c.Message) + } + } + return false, nil + } +} diff --git a/cmd/flux/delete_source_oci.go b/cmd/flux/delete_source_oci.go new file mode 100644 index 00000000..1d641bbf --- /dev/null +++ b/cmd/flux/delete_source_oci.go @@ -0,0 +1,40 @@ +/* +Copyright 2022 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "github.com/spf13/cobra" + + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" +) + +var deleteSourceOCIRepositoryCmd = &cobra.Command{ + Use: "oci [name]", + Short: "Delete a OCIRepository source", + Long: "The delete source oci command deletes the given OCIRepository from the cluster.", + Example: ` # Delete an OCIRepository + flux delete source oci podinfo`, + ValidArgsFunction: resourceNamesCompletionFunc(sourcev1.GroupVersion.WithKind(sourcev1.OCIRepositoryKind)), + RunE: deleteCommand{ + apiType: ociRepositoryType, + object: universalAdapter{&sourcev1.OCIRepository{}}, + }.run, +} + +func init() { + deleteSourceCmd.AddCommand(deleteSourceOCIRepositoryCmd) +} diff --git a/cmd/flux/export_source_oci.go b/cmd/flux/export_source_oci.go new file mode 100644 index 00000000..c6ea9c77 --- /dev/null +++ b/cmd/flux/export_source_oci.go @@ -0,0 +1,92 @@ +/* +Copyright 2022 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "github.com/spf13/cobra" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" + + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" +) + +var exportSourceOCIRepositoryCmd = &cobra.Command{ + Use: "oci [name]", + Short: "Export OCIRepository sources in YAML format", + Long: "The export source oci command exports one or all OCIRepository sources in YAML format.", + Example: ` # Export all OCIRepository sources + flux export source oci --all > sources.yaml + + # Export a OCIRepository including the static credentials + flux export source oci my-app --with-credentials > source.yaml`, + ValidArgsFunction: resourceNamesCompletionFunc(sourcev1.GroupVersion.WithKind(sourcev1.OCIRepositoryKind)), + RunE: exportWithSecretCommand{ + list: ociRepositoryListAdapter{&sourcev1.OCIRepositoryList{}}, + object: ociRepositoryAdapter{&sourcev1.OCIRepository{}}, + }.run, +} + +func init() { + exportSourceCmd.AddCommand(exportSourceOCIRepositoryCmd) +} + +func exportOCIRepository(source *sourcev1.OCIRepository) interface{} { + gvk := sourcev1.GroupVersion.WithKind(sourcev1.OCIRepositoryKind) + export := sourcev1.OCIRepository{ + TypeMeta: metav1.TypeMeta{ + Kind: gvk.Kind, + APIVersion: gvk.GroupVersion().String(), + }, + ObjectMeta: metav1.ObjectMeta{ + Name: source.Name, + Namespace: source.Namespace, + Labels: source.Labels, + Annotations: source.Annotations, + }, + Spec: source.Spec, + } + return export +} + +func getOCIRepositorySecret(source *sourcev1.OCIRepository) *types.NamespacedName { + if source.Spec.SecretRef != nil { + namespacedName := types.NamespacedName{ + Namespace: source.Namespace, + Name: source.Spec.SecretRef.Name, + } + + return &namespacedName + } + + return nil +} + +func (ex ociRepositoryAdapter) secret() *types.NamespacedName { + return getOCIRepositorySecret(ex.OCIRepository) +} + +func (ex ociRepositoryListAdapter) secretItem(i int) *types.NamespacedName { + return getOCIRepositorySecret(&ex.OCIRepositoryList.Items[i]) +} + +func (ex ociRepositoryAdapter) export() interface{} { + return exportOCIRepository(ex.OCIRepository) +} + +func (ex ociRepositoryListAdapter) exportItem(i int) interface{} { + return exportOCIRepository(&ex.OCIRepositoryList.Items[i]) +} diff --git a/cmd/flux/get_source_all.go b/cmd/flux/get_source_all.go index b9b62555..ac6560fe 100644 --- a/cmd/flux/get_source_all.go +++ b/cmd/flux/get_source_all.go @@ -40,6 +40,10 @@ var getSourceAllCmd = &cobra.Command{ } var allSourceCmd = []getCommand{ + { + apiType: ociRepositoryType, + list: &ociRepositoryListAdapter{&sourcev1.OCIRepositoryList{}}, + }, { apiType: bucketType, list: &bucketListAdapter{&sourcev1.BucketList{}}, diff --git a/cmd/flux/get_source_oci.go b/cmd/flux/get_source_oci.go new file mode 100644 index 00000000..8f948d81 --- /dev/null +++ b/cmd/flux/get_source_oci.go @@ -0,0 +1,98 @@ +/* +Copyright 2022 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "fmt" + "strconv" + "strings" + + "github.com/spf13/cobra" + "k8s.io/apimachinery/pkg/runtime" + + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" +) + +var getSourceOCIRepositoryCmd = &cobra.Command{ + Use: "oci", + Short: "Get OCIRepository status", + Long: "The get sources oci command prints the status of the OCIRepository sources.", + Example: ` # List all OCIRepositories and their status + flux get sources oci + + # List OCIRepositories from all namespaces + flux get sources oci --all-namespaces`, + ValidArgsFunction: resourceNamesCompletionFunc(sourcev1.GroupVersion.WithKind(sourcev1.OCIRepositoryKind)), + RunE: func(cmd *cobra.Command, args []string) error { + get := getCommand{ + apiType: ociRepositoryType, + list: &ociRepositoryListAdapter{&sourcev1.OCIRepositoryList{}}, + funcMap: make(typeMap), + } + + err := get.funcMap.registerCommand(get.apiType.kind, func(obj runtime.Object) (summarisable, error) { + o, ok := obj.(*sourcev1.OCIRepository) + if !ok { + return nil, fmt.Errorf("impossible to cast type %#v to OCIRepository", obj) + } + + sink := &ociRepositoryListAdapter{&sourcev1.OCIRepositoryList{ + Items: []sourcev1.OCIRepository{ + *o, + }}} + return sink, nil + }) + + if err != nil { + return err + } + + if err := get.run(cmd, args); err != nil { + return err + } + + return nil + }, +} + +func init() { + getSourceCmd.AddCommand(getSourceOCIRepositoryCmd) +} + +func (a *ociRepositoryListAdapter) summariseItem(i int, includeNamespace bool, includeKind bool) []string { + item := a.Items[i] + var revision string + if item.GetArtifact() != nil { + revision = item.GetArtifact().Revision + } + status, msg := statusAndMessage(item.Status.Conditions) + return append(nameColumns(&item, includeNamespace, includeKind), + revision, strings.Title(strconv.FormatBool(item.Spec.Suspend)), status, msg) +} + +func (a ociRepositoryListAdapter) headers(includeNamespace bool) []string { + headers := []string{"Name", "Revision", "Suspended", "Ready", "Message"} + if includeNamespace { + headers = append([]string{"Namespace"}, headers...) + } + return headers +} + +func (a ociRepositoryListAdapter) statusSelectorMatches(i int, conditionType, conditionStatus string) bool { + item := a.Items[i] + return statusMatches(conditionType, conditionStatus, item.Status.Conditions) +} diff --git a/cmd/flux/reconcile_kustomization.go b/cmd/flux/reconcile_kustomization.go index 05035a50..cdc6e7ac 100644 --- a/cmd/flux/reconcile_kustomization.go +++ b/cmd/flux/reconcile_kustomization.go @@ -65,6 +65,11 @@ func (obj kustomizationAdapter) reconcileSource() bool { func (obj kustomizationAdapter) getSource() (reconcileCommand, types.NamespacedName) { var cmd reconcileCommand switch obj.Spec.SourceRef.Kind { + case sourcev1.OCIRepositoryKind: + cmd = reconcileCommand{ + apiType: ociRepositoryType, + object: ociRepositoryAdapter{&sourcev1.OCIRepository{}}, + } case sourcev1.GitRepositoryKind: cmd = reconcileCommand{ apiType: gitRepositoryType, diff --git a/cmd/flux/reconcile_source_oci.go b/cmd/flux/reconcile_source_oci.go new file mode 100644 index 00000000..17df7174 --- /dev/null +++ b/cmd/flux/reconcile_source_oci.go @@ -0,0 +1,50 @@ +/* +Copyright 2020 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "fmt" + + "github.com/spf13/cobra" + + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" +) + +var reconcileSourceOCIRepositoryCmd = &cobra.Command{ + Use: "oci [name]", + Short: "Reconcile an OCIRepository", + Long: `The reconcile source command triggers a reconciliation of an OCIRepository resource and waits for it to finish.`, + Example: ` # Trigger a reconciliation for an existing source + flux reconcile source oci podinfo`, + ValidArgsFunction: resourceNamesCompletionFunc(sourcev1.GroupVersion.WithKind(sourcev1.OCIRepositoryKind)), + RunE: reconcileCommand{ + apiType: ociRepositoryType, + object: ociRepositoryAdapter{&sourcev1.OCIRepository{}}, + }.run, +} + +func init() { + reconcileSourceCmd.AddCommand(reconcileSourceOCIRepositoryCmd) +} + +func (obj ociRepositoryAdapter) lastHandledReconcileRequest() string { + return obj.Status.GetLastHandledReconcileRequest() +} + +func (obj ociRepositoryAdapter) successMessage() string { + return fmt.Sprintf("fetched revision %s", obj.Status.Artifact.Revision) +} diff --git a/cmd/flux/resume_source_oci.go b/cmd/flux/resume_source_oci.go new file mode 100644 index 00000000..42ad48ab --- /dev/null +++ b/cmd/flux/resume_source_oci.go @@ -0,0 +1,53 @@ +/* +Copyright 2020 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "github.com/spf13/cobra" + + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" +) + +var resumeSourceOCIRepositoryCmd = &cobra.Command{ + Use: "oci [name]", + Short: "Resume a suspended OCIRepository", + Long: `The resume command marks a previously suspended OCIRepository resource for reconciliation and waits for it to finish.`, + Example: ` # Resume reconciliation for an existing OCIRepository + flux resume source oci podinfo`, + ValidArgsFunction: resourceNamesCompletionFunc(sourcev1.GroupVersion.WithKind(sourcev1.OCIRepositoryKind)), + RunE: resumeCommand{ + apiType: ociRepositoryType, + object: ociRepositoryAdapter{&sourcev1.OCIRepository{}}, + list: ociRepositoryListAdapter{&sourcev1.OCIRepositoryList{}}, + }.run, +} + +func init() { + resumeSourceCmd.AddCommand(resumeSourceOCIRepositoryCmd) +} + +func (obj ociRepositoryAdapter) getObservedGeneration() int64 { + return obj.OCIRepository.Status.ObservedGeneration +} + +func (obj ociRepositoryAdapter) setUnsuspended() { + obj.OCIRepository.Spec.Suspend = false +} + +func (a ociRepositoryListAdapter) resumeItem(i int) resumable { + return &ociRepositoryAdapter{&a.OCIRepositoryList.Items[i]} +} diff --git a/cmd/flux/source.go b/cmd/flux/source.go index b6c9077c..4177c159 100644 --- a/cmd/flux/source.go +++ b/cmd/flux/source.go @@ -26,6 +26,40 @@ import ( // the various commands. The *List adapters implement len(), since // it's used in at least a couple of commands. +// sourcev1.ociRepository + +var ociRepositoryType = apiType{ + kind: sourcev1.OCIRepositoryKind, + humanKind: "source oci", + groupVersion: sourcev1.GroupVersion, +} + +type ociRepositoryAdapter struct { + *sourcev1.OCIRepository +} + +func (a ociRepositoryAdapter) asClientObject() client.Object { + return a.OCIRepository +} + +func (a ociRepositoryAdapter) deepCopyClientObject() client.Object { + return a.OCIRepository.DeepCopy() +} + +// sourcev1.OCIRepositoryList + +type ociRepositoryListAdapter struct { + *sourcev1.OCIRepositoryList +} + +func (a ociRepositoryListAdapter) asClientList() client.ObjectList { + return a.OCIRepositoryList +} + +func (a ociRepositoryListAdapter) len() int { + return len(a.OCIRepositoryList.Items) +} + // sourcev1.Bucket var bucketType = apiType{ diff --git a/cmd/flux/suspend_source_oci.go b/cmd/flux/suspend_source_oci.go new file mode 100644 index 00000000..06ab4c6c --- /dev/null +++ b/cmd/flux/suspend_source_oci.go @@ -0,0 +1,53 @@ +/* +Copyright 2022 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "github.com/spf13/cobra" + + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" +) + +var suspendSourceOCIRepositoryCmd = &cobra.Command{ + Use: "oci [name]", + Short: "Suspend reconciliation of a OCIRepository", + Long: "The suspend command disables the reconciliation of an OCIRepository resource.", + Example: ` # Suspend reconciliation for an existing OCIRepository + flux suspend source oci podinfo`, + ValidArgsFunction: resourceNamesCompletionFunc(sourcev1.GroupVersion.WithKind(sourcev1.OCIRepositoryKind)), + RunE: suspendCommand{ + apiType: ociRepositoryType, + object: ociRepositoryAdapter{&sourcev1.OCIRepository{}}, + list: ociRepositoryListAdapter{&sourcev1.OCIRepositoryList{}}, + }.run, +} + +func init() { + suspendSourceCmd.AddCommand(suspendSourceOCIRepositoryCmd) +} + +func (obj ociRepositoryAdapter) isSuspended() bool { + return obj.OCIRepository.Spec.Suspend +} + +func (obj ociRepositoryAdapter) setSuspended() { + obj.OCIRepository.Spec.Suspend = true +} + +func (a ociRepositoryListAdapter) item(i int) suspendable { + return &ociRepositoryAdapter{&a.OCIRepositoryList.Items[i]} +} diff --git a/internal/flags/kustomization_source.go b/internal/flags/kustomization_source.go index b506230d..f3455b25 100644 --- a/internal/flags/kustomization_source.go +++ b/internal/flags/kustomization_source.go @@ -25,7 +25,7 @@ import ( "github.com/fluxcd/flux2/internal/utils" ) -var supportedKustomizationSourceKinds = []string{sourcev1.GitRepositoryKind, sourcev1.BucketKind} +var supportedKustomizationSourceKinds = []string{sourcev1.OCIRepositoryKind, sourcev1.GitRepositoryKind, sourcev1.BucketKind} type KustomizationSource struct { Kind string diff --git a/internal/oci/build.go b/internal/oci/build.go index ba508c0f..3deb3fc6 100644 --- a/internal/oci/build.go +++ b/internal/oci/build.go @@ -28,7 +28,7 @@ import ( // Build archives the given directory as a tarball to the given local path. // While archiving, any environment specific data (for example, the user and group name) is stripped from file headers. -func Build(artifactPath, sourceDir string) error { +func Build(artifactPath, sourceDir string) (err error) { if f, err := os.Stat(sourceDir); os.IsNotExist(err) || !f.IsDir() { return fmt.Errorf("invalid source dir path: %s", sourceDir) } From 2f35367a7f7259d7a1ae32825f858f759f2d1169 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Thu, 23 Jun 2022 08:51:24 +0300 Subject: [PATCH 178/818] Add list artifacts command Signed-off-by: Stefan Prodan --- cmd/flux/create_source_oci.go | 48 +++++++++++++----------- cmd/flux/list.go | 31 ++++++++++++++++ cmd/flux/list_artifact.go | 68 ++++++++++++++++++++++++++++++++++ internal/oci/list.go | 70 +++++++++++++++++++++++++++++++++++ internal/oci/meta.go | 3 +- internal/oci/pull.go | 2 +- 6 files changed, 198 insertions(+), 24 deletions(-) create mode 100644 cmd/flux/list.go create mode 100644 cmd/flux/list_artifact.go create mode 100644 internal/oci/list.go diff --git a/cmd/flux/create_source_oci.go b/cmd/flux/create_source_oci.go index e1d26c43..a97c64fb 100644 --- a/cmd/flux/create_source_oci.go +++ b/cmd/flux/create_source_oci.go @@ -19,7 +19,6 @@ package main import ( "context" "fmt" - "os" "strings" "github.com/spf13/cobra" @@ -43,7 +42,7 @@ var createSourceOCIRepositoryCmd = &cobra.Command{ Long: `The create source oci command generates an OCIRepository resource and waits for it to be ready.`, Example: ` # Create an OCIRepository for a public container image flux create source oci podinfo \ - --url=ghcr.io/stefanprodan/manifests/podinfo \ + --url=ghcr.io/stefanprodan/manifests/podinfo \ --tag=6.1.6 \ --interval=10m `, @@ -51,11 +50,13 @@ var createSourceOCIRepositoryCmd = &cobra.Command{ } type sourceOCIRepositoryFlags struct { - url string - tag string - digest string - secretRef string - ignorePaths []string + url string + tag string + semver string + digest string + secretRef string + serviceAccount string + ignorePaths []string } var sourceOCIRepositoryArgs = sourceOCIRepositoryFlags{} @@ -63,8 +64,10 @@ var sourceOCIRepositoryArgs = sourceOCIRepositoryFlags{} func init() { createSourceOCIRepositoryCmd.Flags().StringVar(&sourceOCIRepositoryArgs.url, "url", "", "the OCI repository URL") createSourceOCIRepositoryCmd.Flags().StringVar(&sourceOCIRepositoryArgs.tag, "tag", "", "the OCI artifact tag") + createSourceOCIRepositoryCmd.Flags().StringVar(&sourceOCIRepositoryArgs.semver, "tag-semver", "", "the OCI artifact tag semver range") createSourceOCIRepositoryCmd.Flags().StringVar(&sourceOCIRepositoryArgs.digest, "digest", "", "the OCI artifact digest") - createSourceOCIRepositoryCmd.Flags().StringVar(&sourceOCIRepositoryArgs.secretRef, "secret-ref", "", "the name of an existing secret containing credentials") + createSourceOCIRepositoryCmd.Flags().StringVar(&sourceOCIRepositoryArgs.secretRef, "secret-ref", "", "the name of the Kubernetes image pull secret (type 'kubernetes.io/dockerconfigjson')") + createSourceOCIRepositoryCmd.Flags().StringVar(&sourceOCIRepositoryArgs.secretRef, "service-account", "", "the name of the Kubernetes service account that refers to an image pull secret") createSourceOCIRepositoryCmd.Flags().StringSliceVar(&sourceOCIRepositoryArgs.ignorePaths, "ignore-paths", nil, "set paths to ignore resources (can specify multiple paths with commas: path1,path2)") createSourceCmd.AddCommand(createSourceOCIRepositoryCmd) @@ -77,8 +80,8 @@ func createSourceOCIRepositoryCmdRun(cmd *cobra.Command, args []string) error { return fmt.Errorf("url is required") } - if sourceOCIRepositoryArgs.tag == "" && sourceOCIRepositoryArgs.digest == "" { - return fmt.Errorf("--tag or --digest is required") + if sourceOCIRepositoryArgs.semver == "" && sourceOCIRepositoryArgs.tag == "" && sourceOCIRepositoryArgs.digest == "" { + return fmt.Errorf("--tag, --tag-semver or --digest is required") } sourceLabels, err := parseLabels() @@ -86,12 +89,6 @@ func createSourceOCIRepositoryCmdRun(cmd *cobra.Command, args []string) error { return err } - tmpDir, err := os.MkdirTemp("", name) - if err != nil { - return err - } - defer os.RemoveAll(tmpDir) - var ignorePaths *string if len(sourceOCIRepositoryArgs.ignorePaths) > 0 { ignorePathsStr := strings.Join(sourceOCIRepositoryArgs.ignorePaths, "\n") @@ -114,20 +111,27 @@ func createSourceOCIRepositoryCmdRun(cmd *cobra.Command, args []string) error { }, } - if sourceOCIRepositoryArgs.tag != "" { - repository.Spec.Reference.Tag = sourceOCIRepositoryArgs.tag + if digest := sourceOCIRepositoryArgs.digest; digest != "" { + repository.Spec.Reference.Digest = digest } - if sourceOCIRepositoryArgs.digest != "" { - repository.Spec.Reference.Digest = sourceOCIRepositoryArgs.digest + if semver := sourceOCIRepositoryArgs.semver; semver != "" { + repository.Spec.Reference.SemVer = semver + } + if tag := sourceOCIRepositoryArgs.tag; tag != "" { + repository.Spec.Reference.Tag = tag } if createSourceArgs.fetchTimeout > 0 { repository.Spec.Timeout = &metav1.Duration{Duration: createSourceArgs.fetchTimeout} } - if sourceOCIRepositoryArgs.secretRef != "" { + if saName := sourceOCIRepositoryArgs.serviceAccount; saName != "" { + repository.Spec.ServiceAccountName = saName + } + + if secretName := sourceOCIRepositoryArgs.secretRef; secretName != "" { repository.Spec.SecretRef = &meta.LocalObjectReference{ - Name: sourceOCIRepositoryArgs.secretRef, + Name: secretName, } } diff --git a/cmd/flux/list.go b/cmd/flux/list.go new file mode 100644 index 00000000..e89dc149 --- /dev/null +++ b/cmd/flux/list.go @@ -0,0 +1,31 @@ +/* +Copyright 2021 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "github.com/spf13/cobra" +) + +var listCmd = &cobra.Command{ + Use: "list", + Short: "List artifacts", + Long: "The list command is used for printing the OCI artifacts metadata.", +} + +func init() { + rootCmd.AddCommand(listCmd) +} diff --git a/cmd/flux/list_artifact.go b/cmd/flux/list_artifact.go new file mode 100644 index 00000000..a53e4f99 --- /dev/null +++ b/cmd/flux/list_artifact.go @@ -0,0 +1,68 @@ +/* +Copyright 2022 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "context" + "fmt" + "github.com/fluxcd/flux2/internal/oci" + "github.com/fluxcd/flux2/pkg/printers" + "github.com/spf13/cobra" +) + +var listArtifactsCmd = &cobra.Command{ + Use: "artifacts", + Short: "list artifacts", + Long: `The list command fetches the tags and their metadata from a remote OCI repository. +The list command uses the credentials from '~/.docker/config.json'.`, + Example: `# list the artifacts stored in an OCI repository +flux list artifact ghcr.io/org/manifests/app +`, + RunE: listArtifactsCmdRun, +} + +func init() { + listCmd.AddCommand(listArtifactsCmd) +} + +func listArtifactsCmdRun(cmd *cobra.Command, args []string) error { + if len(args) < 1 { + return fmt.Errorf("artifact repository is required") + } + url := args[0] + + ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) + defer cancel() + + metas, err := oci.List(ctx, url) + if err != nil { + return err + } + + var rows [][]string + for _, meta := range metas { + rows = append(rows, []string{meta.URL, meta.Digest, meta.Source, meta.Revision}) + } + + err = printers.TablePrinter([]string{"artifact", "digest", "source", "revision"}).Print(cmd.OutOrStdout(), rows) + if err != nil { + return err + } + + return nil + +} diff --git a/internal/oci/list.go b/internal/oci/list.go new file mode 100644 index 00000000..e827c472 --- /dev/null +++ b/internal/oci/list.go @@ -0,0 +1,70 @@ +/* +Copyright 2022 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package oci + +import ( + "bytes" + "context" + "fmt" + "sort" + "strings" + + "github.com/google/go-containerregistry/pkg/crane" + gcrv1 "github.com/google/go-containerregistry/pkg/v1" +) + +// List fetches the tags and their manifests for a given OCI repository. +func List(ctx context.Context, url string) ([]Metadata, error) { + metas := make([]Metadata, 0) + tags, err := crane.ListTags(url, craneOptions(ctx)...) + if err != nil { + return nil, fmt.Errorf("listing tags failed: %w", err) + } + + sort.Slice(tags, func(i, j int) bool { return tags[i] > tags[j] }) + + for _, tag := range tags { + // exclude cosign signatures + if strings.HasSuffix(tag, ".sig") { + continue + } + + meta := Metadata{ + URL: fmt.Sprintf("%s:%s", url, tag), + } + + manifestJSON, err := crane.Manifest(meta.URL, craneOptions(ctx)...) + if err != nil { + return nil, fmt.Errorf("fetching manifest failed: %w", err) + } + + manifest, err := gcrv1.ParseManifest(bytes.NewReader(manifestJSON)) + if err != nil { + return nil, fmt.Errorf("parsing manifest failed: %w", err) + } + + meta.Digest = manifest.Config.Digest.String() + if m, err := MetadataFromAnnotations(manifest.Annotations); err == nil { + meta.Revision = m.Revision + meta.Source = m.Source + } + + metas = append(metas, meta) + } + + return metas, nil +} diff --git a/internal/oci/meta.go b/internal/oci/meta.go index 3196cb26..9e0c3c0c 100644 --- a/internal/oci/meta.go +++ b/internal/oci/meta.go @@ -29,6 +29,7 @@ type Metadata struct { Source string `json:"source_url"` Revision string `json:"source_revision"` Digest string `json:"digest"` + URL string `json:"url"` } func (m *Metadata) ToAnnotations() map[string]string { @@ -40,7 +41,7 @@ func (m *Metadata) ToAnnotations() map[string]string { return annotations } -func GetMetadata(annotations map[string]string) (*Metadata, error) { +func MetadataFromAnnotations(annotations map[string]string) (*Metadata, error) { source, ok := annotations[SourceAnnotation] if !ok { return nil, fmt.Errorf("'%s' annotation not found", SourceAnnotation) diff --git a/internal/oci/pull.go b/internal/oci/pull.go index b37642a8..f08c0e34 100644 --- a/internal/oci/pull.go +++ b/internal/oci/pull.go @@ -47,7 +47,7 @@ func Pull(ctx context.Context, url, outDir string) (*Metadata, error) { return nil, fmt.Errorf("parsing manifest failed: %w", err) } - meta, err := GetMetadata(manifest.Annotations) + meta, err := MetadataFromAnnotations(manifest.Annotations) if err != nil { return nil, err } From e4fb8e75f965f33b06103686ab7dbbc4b4e507c4 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Thu, 23 Jun 2022 08:51:53 +0300 Subject: [PATCH 179/818] Add e2e tests for artifact commands Signed-off-by: Stefan Prodan --- .github/workflows/e2e.yaml | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index 9f4fcb66..2352f2e4 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -9,6 +9,11 @@ on: jobs: kind: runs-on: ubuntu-latest + services: + registry: + image: registry:2 + ports: + - 5000:5000 steps: - name: Checkout uses: actions/checkout@v3 @@ -168,7 +173,16 @@ jobs: - name: flux delete source git run: | /tmp/flux delete source git podinfo --silent - - name: flux oci + - name: flux oci artifacts + run: | + /tmp/flux push artifact localhost:5000/fluxcd/flux:${{ github.sha }} \ + --path="./manifests" \ + --source="${{ github.repositoryUrl }}" \ + --revision="${{ github.ref }}/${{ github.sha }}" + /tmp/flux tag artifact localhost:5000/fluxcd/flux:${{ github.sha }} \ + --tag latest + /tmp/flux list artifact localhost:5000/fluxcd/flux + - name: flux oci repositories run: | /tmp/flux create source oci podinfo-oci \ --url ghcr.io/stefanprodan/manifests/podinfo \ From b6a78f42ea39d004d6e4ca8216321ef3ad190178 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Thu, 23 Jun 2022 09:08:06 +0300 Subject: [PATCH 180/818] Update SC with OCI semver support Signed-off-by: Stefan Prodan --- .github/workflows/e2e.yaml | 4 ++-- manifests/bases/source-controller/kustomization.yaml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index 2352f2e4..1e0fdf57 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -181,12 +181,12 @@ jobs: --revision="${{ github.ref }}/${{ github.sha }}" /tmp/flux tag artifact localhost:5000/fluxcd/flux:${{ github.sha }} \ --tag latest - /tmp/flux list artifact localhost:5000/fluxcd/flux + /tmp/flux list artifacts localhost:5000/fluxcd/flux - name: flux oci repositories run: | /tmp/flux create source oci podinfo-oci \ --url ghcr.io/stefanprodan/manifests/podinfo \ - --tag 6.1.6 \ + --tag-semver 6.1.x \ --interval 10m /tmp/flux create kustomization podinfo-oci \ --source=OCIRepository/podinfo-oci \ diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index 29147274..9d2e44e0 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -15,4 +15,4 @@ patchesJson6902: # TODO: remove the hardcoded image when OCIRepository is released images: - name: fluxcd/source-controller - newTag: oci-778f6d5d + newTag: oci-8509ac03 From 30e5389d02e60362f5ce2af89a7168830424e8e8 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Fri, 1 Jul 2022 15:18:21 +0300 Subject: [PATCH 181/818] Run e2e tests for PRs against oci branch Signed-off-by: Stefan Prodan --- .github/workflows/e2e.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index 1e0fdf57..709912de 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -4,7 +4,7 @@ on: push: branches: [ main ] pull_request: - branches: [ main ] + branches: [ main, oci ] jobs: kind: From adc7981f2290b4080aacf0cb81baed1ae96fb5ae Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Thu, 30 Jun 2022 12:07:29 +0100 Subject: [PATCH 182/818] Add tests for source oci command Signed-off-by: Somtochi Onyekwere --- cmd/flux/create_source_oci_test.go | 61 ++++++++++++++++ cmd/flux/image_test.go | 16 +++++ cmd/flux/main_test.go | 1 + cmd/flux/source_oci_test.go | 71 +++++++++++++++++++ .../testdata/oci/create_source_oci.golden | 5 ++ cmd/flux/testdata/oci/delete_oci.golden | 2 + cmd/flux/testdata/oci/export.golden | 12 ++++ .../testdata/oci/export_with_secret.golden | 14 ++++ cmd/flux/testdata/oci/get_oci.golden | 2 + cmd/flux/testdata/oci/reconcile_oci.golden | 4 ++ cmd/flux/testdata/oci/resume_oci.golden | 5 ++ cmd/flux/testdata/oci/suspend_oci.golden | 2 + 12 files changed, 195 insertions(+) create mode 100644 cmd/flux/create_source_oci_test.go create mode 100644 cmd/flux/source_oci_test.go create mode 100644 cmd/flux/testdata/oci/create_source_oci.golden create mode 100644 cmd/flux/testdata/oci/delete_oci.golden create mode 100644 cmd/flux/testdata/oci/export.golden create mode 100644 cmd/flux/testdata/oci/export_with_secret.golden create mode 100644 cmd/flux/testdata/oci/get_oci.golden create mode 100644 cmd/flux/testdata/oci/reconcile_oci.golden create mode 100644 cmd/flux/testdata/oci/resume_oci.golden create mode 100644 cmd/flux/testdata/oci/suspend_oci.golden diff --git a/cmd/flux/create_source_oci_test.go b/cmd/flux/create_source_oci_test.go new file mode 100644 index 00000000..027c1789 --- /dev/null +++ b/cmd/flux/create_source_oci_test.go @@ -0,0 +1,61 @@ +/* +Copyright 2022 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "testing" +) + +func TestCreateSourceOCI(t *testing.T) { + tests := []struct { + name string + args string + assertFunc assertFunc + }{ + { + name: "NoArgs", + args: "create source oci", + assertFunc: assertError("name is required"), + }, + { + name: "NoURL", + args: "create source oci podinfo", + assertFunc: assertError("url is required"), + }, + { + name: "export manifest", + args: "create source oci podinfo --url=ghcr.io/stefanprodan/manifests/podinfo --tag=6.1.6 --interval 10m --export", + assertFunc: assertGoldenFile("./testdata/oci/export.golden"), + }, + { + name: "export manifest with secret", + args: "create source oci podinfo --url=ghcr.io/stefanprodan/manifests/podinfo --tag=6.1.6 --interval 10m --secret-ref=creds --export", + assertFunc: assertGoldenFile("./testdata/oci/export_with_secret.golden"), + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + cmd := cmdTestCase{ + args: tt.args, + assert: tt.assertFunc, + } + + cmd.runTestCmd(t) + }) + } +} diff --git a/cmd/flux/image_test.go b/cmd/flux/image_test.go index a0e0b257..155326fa 100644 --- a/cmd/flux/image_test.go +++ b/cmd/flux/image_test.go @@ -1,6 +1,22 @@ //go:build e2e // +build e2e +/* +Copyright 2022 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + package main import "testing" diff --git a/cmd/flux/main_test.go b/cmd/flux/main_test.go index 50127de7..59568dee 100644 --- a/cmd/flux/main_test.go +++ b/cmd/flux/main_test.go @@ -388,6 +388,7 @@ func resetCmdArgs() { getArgs = GetFlags{} sourceHelmArgs = sourceHelmFlags{} secretGitArgs = NewSecretGitFlags() + *kubeconfigArgs.Namespace = rootArgs.defaults.Namespace } func isChangeError(err error) bool { diff --git a/cmd/flux/source_oci_test.go b/cmd/flux/source_oci_test.go new file mode 100644 index 00000000..568ac73e --- /dev/null +++ b/cmd/flux/source_oci_test.go @@ -0,0 +1,71 @@ +//go:build e2e +// +build e2e + +/* +Copyright 2022 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "testing" +) + +func TestSourceOCI(t *testing.T) { + cases := []struct { + args string + goldenFile string + }{ + { + "create source oci thrfg --url=ghcr.io/stefanprodan/manifests/podinfo --tag=6.1.6 --interval 10m", + "testdata/oci/create_source_oci.golden", + }, + { + "get source oci thrfg", + "testdata/oci/get_oci.golden", + }, + { + "reconcile source oci thrfg", + "testdata/oci/reconcile_oci.golden", + }, + { + "suspend source oci thrfg", + "testdata/oci/suspend_oci.golden", + }, + { + "resume source oci thrfg", + "testdata/oci/resume_oci.golden", + }, + { + "delete source oci thrfg --silent", + "testdata/oci/delete_oci.golden", + }, + } + + namespace := allocateNamespace("oci-test") + del, err := setupTestNamespace(namespace) + if err != nil { + t.Fatal(err) + } + defer del() + + for _, tc := range cases { + cmd := cmdTestCase{ + args: tc.args + " -n=" + namespace, + assert: assertGoldenTemplateFile(tc.goldenFile, map[string]string{"ns": namespace}), + } + cmd.runTestCmd(t) + } +} diff --git a/cmd/flux/testdata/oci/create_source_oci.golden b/cmd/flux/testdata/oci/create_source_oci.golden new file mode 100644 index 00000000..9cca4138 --- /dev/null +++ b/cmd/flux/testdata/oci/create_source_oci.golden @@ -0,0 +1,5 @@ +► applying OCIRepository +✔ OCIRepository created +◎ waiting for OCIRepository reconciliation +✔ OCIRepository reconciliation completed +✔ fetched revision: 3b6cdcc7adcc9a84d3214ee1c029543789d90b5ae69debe9efa3f66e982875de diff --git a/cmd/flux/testdata/oci/delete_oci.golden b/cmd/flux/testdata/oci/delete_oci.golden new file mode 100644 index 00000000..8e8599fa --- /dev/null +++ b/cmd/flux/testdata/oci/delete_oci.golden @@ -0,0 +1,2 @@ +► deleting source oci thrfg in {{ .ns }} namespace +✔ source oci deleted diff --git a/cmd/flux/testdata/oci/export.golden b/cmd/flux/testdata/oci/export.golden new file mode 100644 index 00000000..82d5fa19 --- /dev/null +++ b/cmd/flux/testdata/oci/export.golden @@ -0,0 +1,12 @@ +--- +apiVersion: source.toolkit.fluxcd.io/v1beta2 +kind: OCIRepository +metadata: + name: podinfo + namespace: flux-system +spec: + interval: 10m0s + ref: + tag: 6.1.6 + url: ghcr.io/stefanprodan/manifests/podinfo + diff --git a/cmd/flux/testdata/oci/export_with_secret.golden b/cmd/flux/testdata/oci/export_with_secret.golden new file mode 100644 index 00000000..79fd98a5 --- /dev/null +++ b/cmd/flux/testdata/oci/export_with_secret.golden @@ -0,0 +1,14 @@ +--- +apiVersion: source.toolkit.fluxcd.io/v1beta2 +kind: OCIRepository +metadata: + name: podinfo + namespace: flux-system +spec: + interval: 10m0s + ref: + tag: 6.1.6 + secretRef: + name: creds + url: ghcr.io/stefanprodan/manifests/podinfo + diff --git a/cmd/flux/testdata/oci/get_oci.golden b/cmd/flux/testdata/oci/get_oci.golden new file mode 100644 index 00000000..f4fa8333 --- /dev/null +++ b/cmd/flux/testdata/oci/get_oci.golden @@ -0,0 +1,2 @@ +NAME REVISION SUSPENDED READY MESSAGE +thrfg 3b6cdcc7adcc9a84d3214ee1c029543789d90b5ae69debe9efa3f66e982875de False True stored artifact for revision '3b6cdcc7adcc9a84d3214ee1c029543789d90b5ae69debe9efa3f66e982875de' diff --git a/cmd/flux/testdata/oci/reconcile_oci.golden b/cmd/flux/testdata/oci/reconcile_oci.golden new file mode 100644 index 00000000..0c258819 --- /dev/null +++ b/cmd/flux/testdata/oci/reconcile_oci.golden @@ -0,0 +1,4 @@ +► annotating OCIRepository thrfg in {{ .ns }} namespace +✔ OCIRepository annotated +◎ waiting for OCIRepository reconciliation +✔ fetched revision 3b6cdcc7adcc9a84d3214ee1c029543789d90b5ae69debe9efa3f66e982875de diff --git a/cmd/flux/testdata/oci/resume_oci.golden b/cmd/flux/testdata/oci/resume_oci.golden new file mode 100644 index 00000000..467514e7 --- /dev/null +++ b/cmd/flux/testdata/oci/resume_oci.golden @@ -0,0 +1,5 @@ +► resuming source oci thrfg in {{ .ns }} namespace +✔ source oci resumed +◎ waiting for OCIRepository reconciliation +✔ OCIRepository reconciliation completed +✔ fetched revision 3b6cdcc7adcc9a84d3214ee1c029543789d90b5ae69debe9efa3f66e982875de diff --git a/cmd/flux/testdata/oci/suspend_oci.golden b/cmd/flux/testdata/oci/suspend_oci.golden new file mode 100644 index 00000000..40a0420e --- /dev/null +++ b/cmd/flux/testdata/oci/suspend_oci.golden @@ -0,0 +1,2 @@ +► suspending source oci thrfg in {{ .ns }} namespace +✔ source oci suspended From 8049634e4d65e577288aaf105d2f83ab064b19e7 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 6 Jul 2022 19:02:39 +0300 Subject: [PATCH 183/818] Add `oci://` prefix Signed-off-by: Stefan Prodan --- .github/workflows/e2e.yaml | 8 +-- cmd/flux/create_source_oci.go | 4 +- cmd/flux/create_source_oci_test.go | 4 +- cmd/flux/list_artifact.go | 11 ++-- cmd/flux/main_test.go | 3 ++ cmd/flux/pull_artifact.go | 11 ++-- cmd/flux/push_artifact.go | 11 ++-- cmd/flux/source_oci_test.go | 2 +- cmd/flux/tag_artifact.go | 9 +++- cmd/flux/testdata/oci/export.golden | 2 +- .../testdata/oci/export_with_secret.golden | 2 +- internal/oci/url.go | 54 +++++++++++++++++++ .../source-controller/kustomization.yaml | 2 +- 13 files changed, 100 insertions(+), 23 deletions(-) create mode 100644 internal/oci/url.go diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index 709912de..6b8566e9 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -175,17 +175,17 @@ jobs: /tmp/flux delete source git podinfo --silent - name: flux oci artifacts run: | - /tmp/flux push artifact localhost:5000/fluxcd/flux:${{ github.sha }} \ + /tmp/flux push artifact oci://localhost:5000/fluxcd/flux:${{ github.sha }} \ --path="./manifests" \ --source="${{ github.repositoryUrl }}" \ --revision="${{ github.ref }}/${{ github.sha }}" - /tmp/flux tag artifact localhost:5000/fluxcd/flux:${{ github.sha }} \ + /tmp/flux tag artifact oci://localhost:5000/fluxcd/flux:${{ github.sha }} \ --tag latest - /tmp/flux list artifacts localhost:5000/fluxcd/flux + /tmp/flux list artifacts oci://localhost:5000/fluxcd/flux - name: flux oci repositories run: | /tmp/flux create source oci podinfo-oci \ - --url ghcr.io/stefanprodan/manifests/podinfo \ + --url oci://ghcr.io/stefanprodan/manifests/podinfo \ --tag-semver 6.1.x \ --interval 10m /tmp/flux create kustomization podinfo-oci \ diff --git a/cmd/flux/create_source_oci.go b/cmd/flux/create_source_oci.go index a97c64fb..dd2b4fbf 100644 --- a/cmd/flux/create_source_oci.go +++ b/cmd/flux/create_source_oci.go @@ -42,7 +42,7 @@ var createSourceOCIRepositoryCmd = &cobra.Command{ Long: `The create source oci command generates an OCIRepository resource and waits for it to be ready.`, Example: ` # Create an OCIRepository for a public container image flux create source oci podinfo \ - --url=ghcr.io/stefanprodan/manifests/podinfo \ + --url=oci://ghcr.io/stefanprodan/manifests/podinfo \ --tag=6.1.6 \ --interval=10m `, @@ -67,7 +67,7 @@ func init() { createSourceOCIRepositoryCmd.Flags().StringVar(&sourceOCIRepositoryArgs.semver, "tag-semver", "", "the OCI artifact tag semver range") createSourceOCIRepositoryCmd.Flags().StringVar(&sourceOCIRepositoryArgs.digest, "digest", "", "the OCI artifact digest") createSourceOCIRepositoryCmd.Flags().StringVar(&sourceOCIRepositoryArgs.secretRef, "secret-ref", "", "the name of the Kubernetes image pull secret (type 'kubernetes.io/dockerconfigjson')") - createSourceOCIRepositoryCmd.Flags().StringVar(&sourceOCIRepositoryArgs.secretRef, "service-account", "", "the name of the Kubernetes service account that refers to an image pull secret") + createSourceOCIRepositoryCmd.Flags().StringVar(&sourceOCIRepositoryArgs.serviceAccount, "service-account", "", "the name of the Kubernetes service account that refers to an image pull secret") createSourceOCIRepositoryCmd.Flags().StringSliceVar(&sourceOCIRepositoryArgs.ignorePaths, "ignore-paths", nil, "set paths to ignore resources (can specify multiple paths with commas: path1,path2)") createSourceCmd.AddCommand(createSourceOCIRepositoryCmd) diff --git a/cmd/flux/create_source_oci_test.go b/cmd/flux/create_source_oci_test.go index 027c1789..04be9cb1 100644 --- a/cmd/flux/create_source_oci_test.go +++ b/cmd/flux/create_source_oci_test.go @@ -38,12 +38,12 @@ func TestCreateSourceOCI(t *testing.T) { }, { name: "export manifest", - args: "create source oci podinfo --url=ghcr.io/stefanprodan/manifests/podinfo --tag=6.1.6 --interval 10m --export", + args: "create source oci podinfo --url=oci://ghcr.io/stefanprodan/manifests/podinfo --tag=6.1.6 --interval 10m --export", assertFunc: assertGoldenFile("./testdata/oci/export.golden"), }, { name: "export manifest with secret", - args: "create source oci podinfo --url=ghcr.io/stefanprodan/manifests/podinfo --tag=6.1.6 --interval 10m --secret-ref=creds --export", + args: "create source oci podinfo --url=oci://ghcr.io/stefanprodan/manifests/podinfo --tag=6.1.6 --interval 10m --secret-ref=creds --export", assertFunc: assertGoldenFile("./testdata/oci/export_with_secret.golden"), }, } diff --git a/cmd/flux/list_artifact.go b/cmd/flux/list_artifact.go index a53e4f99..e499fc73 100644 --- a/cmd/flux/list_artifact.go +++ b/cmd/flux/list_artifact.go @@ -30,7 +30,7 @@ var listArtifactsCmd = &cobra.Command{ Long: `The list command fetches the tags and their metadata from a remote OCI repository. The list command uses the credentials from '~/.docker/config.json'.`, Example: `# list the artifacts stored in an OCI repository -flux list artifact ghcr.io/org/manifests/app +flux list artifact oci://ghcr.io/org/manifests/app `, RunE: listArtifactsCmdRun, } @@ -41,13 +41,18 @@ func init() { func listArtifactsCmdRun(cmd *cobra.Command, args []string) error { if len(args) < 1 { - return fmt.Errorf("artifact repository is required") + return fmt.Errorf("artifact repository URL is required") } - url := args[0] + ociURL := args[0] ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) defer cancel() + url, err := oci.ParseArtifactURL(ociURL) + if err != nil { + return err + } + metas, err := oci.List(ctx, url) if err != nil { return err diff --git a/cmd/flux/main_test.go b/cmd/flux/main_test.go index 59568dee..2adf4715 100644 --- a/cmd/flux/main_test.go +++ b/cmd/flux/main_test.go @@ -387,6 +387,9 @@ func resetCmdArgs() { createArgs = createFlags{} getArgs = GetFlags{} sourceHelmArgs = sourceHelmFlags{} + sourceOCIRepositoryArgs = sourceOCIRepositoryFlags{} + sourceGitArgs = sourceGitFlags{} + sourceBucketArgs = sourceBucketFlags{} secretGitArgs = NewSecretGitFlags() *kubeconfigArgs.Namespace = rootArgs.defaults.Namespace } diff --git a/cmd/flux/pull_artifact.go b/cmd/flux/pull_artifact.go index 37560f68..382cdc69 100644 --- a/cmd/flux/pull_artifact.go +++ b/cmd/flux/pull_artifact.go @@ -32,7 +32,7 @@ var pullArtifactCmd = &cobra.Command{ Long: `The pull artifact command downloads and extracts the OCI artifact content to the given path. The pull command uses the credentials from '~/.docker/config.json'.`, Example: `# Pull an OCI artifact created by flux from GHCR -flux pull artifact ghcr.io/org/manifests/app:v0.0.1 --output ./path/to/local/manifests +flux pull artifact oci://ghcr.io/org/manifests/app:v0.0.1 --output ./path/to/local/manifests `, RunE: pullArtifactCmdRun, } @@ -50,9 +50,9 @@ func init() { func pullArtifactCmdRun(cmd *cobra.Command, args []string) error { if len(args) < 1 { - return fmt.Errorf("artifact name is required") + return fmt.Errorf("artifact URL is required") } - url := args[0] + ociURL := args[0] if pullArtifactArgs.output == "" { return fmt.Errorf("invalid output path %s", pullArtifactArgs.output) @@ -62,6 +62,11 @@ func pullArtifactCmdRun(cmd *cobra.Command, args []string) error { return fmt.Errorf("invalid output path %s", pullArtifactArgs.output) } + url, err := oci.ParseArtifactURL(ociURL) + if err != nil { + return err + } + ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) defer cancel() diff --git a/cmd/flux/push_artifact.go b/cmd/flux/push_artifact.go index 813dbb46..49f61202 100644 --- a/cmd/flux/push_artifact.go +++ b/cmd/flux/push_artifact.go @@ -32,7 +32,7 @@ var pushArtifactCmd = &cobra.Command{ Long: `The push artifact command creates a tarball from the given directory and uploads the artifact to a OCI repository. The push command uses the credentials from '~/.docker/config.json'.`, Example: `# Push the local manifests to GHCR -flux push artifact ghcr.io/org/manifests/app:v0.0.1 \ +flux push artifact oci://ghcr.io/org/manifests/app:v0.0.1 \ --path="./path/to/local/manifests" \ --source="$(git config --get remote.origin.url)" \ --revision="$(git branch --show-current)/$(git rev-parse HEAD)" @@ -57,9 +57,9 @@ func init() { func pushArtifactCmdRun(cmd *cobra.Command, args []string) error { if len(args) < 1 { - return fmt.Errorf("artifact name is required") + return fmt.Errorf("artifact URL is required") } - url := args[0] + ociURL := args[0] if pushArtifactArgs.source == "" { return fmt.Errorf("--source is required") @@ -73,6 +73,11 @@ func pushArtifactCmdRun(cmd *cobra.Command, args []string) error { return fmt.Errorf("invalid path %q", pushArtifactArgs.path) } + url, err := oci.ParseArtifactURL(ociURL) + if err != nil { + return err + } + if fs, err := os.Stat(pushArtifactArgs.path); err != nil || !fs.IsDir() { return fmt.Errorf("invalid path %q", pushArtifactArgs.path) } diff --git a/cmd/flux/source_oci_test.go b/cmd/flux/source_oci_test.go index 568ac73e..c0f8125c 100644 --- a/cmd/flux/source_oci_test.go +++ b/cmd/flux/source_oci_test.go @@ -29,7 +29,7 @@ func TestSourceOCI(t *testing.T) { goldenFile string }{ { - "create source oci thrfg --url=ghcr.io/stefanprodan/manifests/podinfo --tag=6.1.6 --interval 10m", + "create source oci thrfg --url=oci://ghcr.io/stefanprodan/manifests/podinfo --tag=6.1.6 --interval 10m", "testdata/oci/create_source_oci.golden", }, { diff --git a/cmd/flux/tag_artifact.go b/cmd/flux/tag_artifact.go index be0a6387..2004cebc 100644 --- a/cmd/flux/tag_artifact.go +++ b/cmd/flux/tag_artifact.go @@ -29,7 +29,7 @@ var tagArtifactCmd = &cobra.Command{ Long: `The tag artifact command creates tags for the given OCI artifact. The tag command uses the credentials from '~/.docker/config.json'.`, Example: `# Tag an artifact version as latest -flux tag artifact ghcr.io/org/manifests/app:v0.0.1 --tag latest +flux tag artifact oci://ghcr.io/org/manifests/app:v0.0.1 --tag latest `, RunE: tagArtifactCmdRun, } @@ -49,12 +49,17 @@ func tagArtifactCmdRun(cmd *cobra.Command, args []string) error { if len(args) < 1 { return fmt.Errorf("artifact name is required") } - url := args[0] + ociURL := args[0] if len(tagArtifactArgs.tags) < 1 { return fmt.Errorf("--tag is required") } + url, err := oci.ParseArtifactURL(ociURL) + if err != nil { + return err + } + ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) defer cancel() diff --git a/cmd/flux/testdata/oci/export.golden b/cmd/flux/testdata/oci/export.golden index 82d5fa19..b9339d73 100644 --- a/cmd/flux/testdata/oci/export.golden +++ b/cmd/flux/testdata/oci/export.golden @@ -8,5 +8,5 @@ spec: interval: 10m0s ref: tag: 6.1.6 - url: ghcr.io/stefanprodan/manifests/podinfo + url: oci://ghcr.io/stefanprodan/manifests/podinfo diff --git a/cmd/flux/testdata/oci/export_with_secret.golden b/cmd/flux/testdata/oci/export_with_secret.golden index 79fd98a5..385f7707 100644 --- a/cmd/flux/testdata/oci/export_with_secret.golden +++ b/cmd/flux/testdata/oci/export_with_secret.golden @@ -10,5 +10,5 @@ spec: tag: 6.1.6 secretRef: name: creds - url: ghcr.io/stefanprodan/manifests/podinfo + url: oci://ghcr.io/stefanprodan/manifests/podinfo diff --git a/internal/oci/url.go b/internal/oci/url.go new file mode 100644 index 00000000..38dafb1f --- /dev/null +++ b/internal/oci/url.go @@ -0,0 +1,54 @@ +/* +Copyright 2022 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package oci + +import ( + "fmt" + "strings" + + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + "github.com/google/go-containerregistry/pkg/name" +) + +// ParseArtifactURL validates the OCI URL and returns the address of the artifact. +func ParseArtifactURL(ociURL string) (string, error) { + if !strings.HasPrefix(ociURL, sourcev1.OCIRepositoryPrefix) { + return "", fmt.Errorf("URL must be in format 'oci:////'") + } + + url := strings.TrimPrefix(ociURL, sourcev1.OCIRepositoryPrefix) + if _, err := name.ParseReference(url); err != nil { + return "", fmt.Errorf("'%s' invalid URL: %w", ociURL, err) + } + + return url, nil +} + +// ParseRepositoryURL validates the OCI URL and returns the address of the artifact repository. +func ParseRepositoryURL(ociURL string) (string, error) { + if !strings.HasPrefix(ociURL, sourcev1.OCIRepositoryPrefix) { + return "", fmt.Errorf("URL must be in format 'oci:////'") + } + + url := strings.TrimPrefix(ociURL, sourcev1.OCIRepositoryPrefix) + ref, err := name.ParseReference(url) + if err != nil { + return "", fmt.Errorf("'%s' invalid URL: %w", ociURL, err) + } + + return ref.Context().Name(), nil +} diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index 9d2e44e0..f268590c 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -15,4 +15,4 @@ patchesJson6902: # TODO: remove the hardcoded image when OCIRepository is released images: - name: fluxcd/source-controller - newTag: oci-8509ac03 + newTag: oci-ba5f5353 From 6b985904614c468adc56a38847b69d6fcbefde59 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Fri, 8 Jul 2022 16:27:39 +0300 Subject: [PATCH 184/818] Add `--cert-ref` to `flux create source oci` Signed-off-by: Stefan Prodan --- cmd/flux/create_source_oci.go | 8 ++++++++ cmd/flux/testdata/oci/get_oci.golden | 2 +- manifests/bases/source-controller/kustomization.yaml | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/cmd/flux/create_source_oci.go b/cmd/flux/create_source_oci.go index dd2b4fbf..57d1a472 100644 --- a/cmd/flux/create_source_oci.go +++ b/cmd/flux/create_source_oci.go @@ -56,6 +56,7 @@ type sourceOCIRepositoryFlags struct { digest string secretRef string serviceAccount string + certSecretRef string ignorePaths []string } @@ -68,6 +69,7 @@ func init() { createSourceOCIRepositoryCmd.Flags().StringVar(&sourceOCIRepositoryArgs.digest, "digest", "", "the OCI artifact digest") createSourceOCIRepositoryCmd.Flags().StringVar(&sourceOCIRepositoryArgs.secretRef, "secret-ref", "", "the name of the Kubernetes image pull secret (type 'kubernetes.io/dockerconfigjson')") createSourceOCIRepositoryCmd.Flags().StringVar(&sourceOCIRepositoryArgs.serviceAccount, "service-account", "", "the name of the Kubernetes service account that refers to an image pull secret") + createSourceOCIRepositoryCmd.Flags().StringVar(&sourceOCIRepositoryArgs.certSecretRef, "cert-ref", "", "the name of a secret to use for TLS certificates") createSourceOCIRepositoryCmd.Flags().StringSliceVar(&sourceOCIRepositoryArgs.ignorePaths, "ignore-paths", nil, "set paths to ignore resources (can specify multiple paths with commas: path1,path2)") createSourceCmd.AddCommand(createSourceOCIRepositoryCmd) @@ -135,6 +137,12 @@ func createSourceOCIRepositoryCmdRun(cmd *cobra.Command, args []string) error { } } + if secretName := sourceOCIRepositoryArgs.certSecretRef; secretName != "" { + repository.Spec.CertSecretRef = &meta.LocalObjectReference{ + Name: secretName, + } + } + if createArgs.export { return printExport(exportOCIRepository(repository)) } diff --git a/cmd/flux/testdata/oci/get_oci.golden b/cmd/flux/testdata/oci/get_oci.golden index f4fa8333..3c9558bf 100644 --- a/cmd/flux/testdata/oci/get_oci.golden +++ b/cmd/flux/testdata/oci/get_oci.golden @@ -1,2 +1,2 @@ NAME REVISION SUSPENDED READY MESSAGE -thrfg 3b6cdcc7adcc9a84d3214ee1c029543789d90b5ae69debe9efa3f66e982875de False True stored artifact for revision '3b6cdcc7adcc9a84d3214ee1c029543789d90b5ae69debe9efa3f66e982875de' +thrfg 3b6cdcc7adcc9a84d3214ee1c029543789d90b5ae69debe9efa3f66e982875de False True stored artifact for digest '3b6cdcc7adcc9a84d3214ee1c029543789d90b5ae69debe9efa3f66e982875de' diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index f268590c..3b42223d 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -15,4 +15,4 @@ patchesJson6902: # TODO: remove the hardcoded image when OCIRepository is released images: - name: fluxcd/source-controller - newTag: oci-ba5f5353 + newTag: oci-09a9ef44 From 7dd736954b1497176951c0154d06bc97137a6ae2 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Mon, 11 Jul 2022 17:00:24 +0300 Subject: [PATCH 185/818] Use OCI standard annotations Signed-off-by: Stefan Prodan --- internal/oci/meta.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/oci/meta.go b/internal/oci/meta.go index 9e0c3c0c..c1a43fa4 100644 --- a/internal/oci/meta.go +++ b/internal/oci/meta.go @@ -21,8 +21,8 @@ import ( ) const ( - SourceAnnotation = "source.toolkit.fluxcd.io/url" - RevisionAnnotation = "source.toolkit.fluxcd.io/revision" + SourceAnnotation = "org.opencontainers.image.source" + RevisionAnnotation = "org.opencontainers.image.revision" ) type Metadata struct { From 1b327e9d4eb0754b36a3a891cb1a69accd055afd Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Mon, 11 Jul 2022 18:15:35 +0300 Subject: [PATCH 186/818] Show artifact digest in list output Signed-off-by: Stefan Prodan --- internal/oci/list.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/internal/oci/list.go b/internal/oci/list.go index e827c472..9901d1d8 100644 --- a/internal/oci/list.go +++ b/internal/oci/list.go @@ -57,12 +57,17 @@ func List(ctx context.Context, url string) ([]Metadata, error) { return nil, fmt.Errorf("parsing manifest failed: %w", err) } - meta.Digest = manifest.Config.Digest.String() if m, err := MetadataFromAnnotations(manifest.Annotations); err == nil { meta.Revision = m.Revision meta.Source = m.Source } + digest, err := crane.Digest(meta.URL, craneOptions(ctx)...) + if err != nil { + return nil, fmt.Errorf("fetching digest failed: %w", err) + } + meta.Digest = digest + metas = append(metas, meta) } From 3e15e83926da168c04bc2d610489a537e22a804f Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Fri, 8 Jul 2022 15:54:57 +0100 Subject: [PATCH 187/818] Add test for tag/list/build/pull/push artifacts Signed-off-by: Somtochi Onyekwere --- go.sum | 48 +++++++- internal/oci/build_test.go | 48 ++++++++ internal/oci/list_test.go | 53 ++++++++ internal/oci/push_pull_test.go | 64 ++++++++++ internal/oci/suite_test.go | 115 ++++++++++++++++++ internal/oci/tag_test.go | 46 +++++++ internal/oci/testdata/build/deployment.yaml | 0 internal/oci/testdata/build/somedir/repo.yaml | 0 8 files changed, 371 insertions(+), 3 deletions(-) create mode 100644 internal/oci/build_test.go create mode 100644 internal/oci/list_test.go create mode 100644 internal/oci/push_pull_test.go create mode 100644 internal/oci/suite_test.go create mode 100644 internal/oci/tag_test.go create mode 100644 internal/oci/testdata/build/deployment.yaml create mode 100644 internal/oci/testdata/build/somedir/repo.yaml diff --git a/go.sum b/go.sum index e57cb655..83432bf9 100644 --- a/go.sum +++ b/go.sum @@ -59,10 +59,12 @@ github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOEl github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs= github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= -github.com/Azure/go-autorest/autorest v0.11.18 h1:90Y4srNYrwOtAgVo3ndrQkTYn6kf1Eg/AjTFJ8Is2aM= github.com/Azure/go-autorest/autorest v0.11.18/go.mod h1:dSiJPy22c3u0OtOKDNttNgqpNFY/GeWa7GH/Pz56QRA= -github.com/Azure/go-autorest/autorest/adal v0.9.13 h1:Mp5hbtOePIzM8pJVRa3YLrWWmZtoxRXqUEzCfJt3+/Q= +github.com/Azure/go-autorest/autorest v0.11.24 h1:1fIGgHKqVm54KIPT+q8Zmd1QlVsmHqeUGso5qm2BqqE= +github.com/Azure/go-autorest/autorest v0.11.24/go.mod h1:G6kyRlFnTuSbEYkQGawPfsCswgme4iYf6rfSKUDzbCc= github.com/Azure/go-autorest/autorest/adal v0.9.13/go.mod h1:W/MM4U6nLxnIskrw4UwWzlHfGjwUS50aOsc/I3yuU8M= +github.com/Azure/go-autorest/autorest/adal v0.9.18 h1:kLnPsRjzZZUF3K5REu/Kc+qMQrvuza2bwSnNdhmzLfQ= +github.com/Azure/go-autorest/autorest/adal v0.9.18/go.mod h1:XVVeme+LZwABT8K5Lc3hA4nAe8LDBVle26gTrguhhPQ= github.com/Azure/go-autorest/autorest/date v0.3.0 h1:7gUk1U5M/CQbp9WoqinNzJar+8KY+LPI6wiWrP/myHw= github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74= github.com/Azure/go-autorest/autorest/mocks v0.4.1 h1:K0laFcLE6VLTOwNgSxaGbUcLPuGXlNkbVvq4cW4nIHk= @@ -102,6 +104,8 @@ github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tN github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d h1:UrqY+r/OJnIp5u0s1SbQ8dVfLCZJsnvazdBP5hS4iRs= +github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ= github.com/StackExchange/wmi v1.2.1/go.mod h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8= github.com/acomagu/bufpipe v1.0.3 h1:fxAGrHZTgQ9w5QqVItgzwj235/uYZYgbXitB+dLupOk= github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= @@ -140,6 +144,7 @@ github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+Ce github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/bitly/go-simplejson v0.5.0 h1:6IH+V8/tVMab511d5bn4M7EwGXZf9Hj6i2xSwkNEM+Y= github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= github.com/bkielbasa/cyclop v1.2.0/go.mod h1:qOI0yy6A7dYC4Zgsa72Ppm9kONl0RoIlPbzot9mhmeI= @@ -147,6 +152,14 @@ github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2y github.com/blizzy78/varnamelen v0.3.0/go.mod h1:hbwRdBvoBqxk34XyQ6HA0UH3G0/1TKuv5AC4eaBT0Ec= github.com/bombsimon/wsl/v3 v3.3.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc= github.com/breml/bidichk v0.1.1/go.mod h1:zbfeitpevDUGI7V91Uzzuwrn4Vls8MoBMrwtt78jmso= +github.com/bshuster-repo/logrus-logstash-hook v1.0.0 h1:e+C0SB5R1pu//O4MQ3f9cFuPGoOVeF2fE4Og9otCc70= +github.com/bshuster-repo/logrus-logstash-hook v1.0.0/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk= +github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd h1:rFt+Y/IK1aEZkEHchZRSq9OQbsSzIT/OrI8YFFmRIng= +github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8= +github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b h1:otBG+dV+YK+Soembjv71DPz3uX/V/6MMlSyD9JBQ6kQ= +github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b/go.mod h1:obH5gd0BsqsP2LwDJ9aOkm/6J86V6lyAXCoQWGw3K50= +github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0 h1:nvj0OLI3YqYXer/kZD8Ri1aaunCxIEsOst1BVJswV0o= +github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE= github.com/butuzov/ireturn v0.1.1/go.mod h1:Wh6Zl3IMtTpaIKbmwzqi6olnM9ptYQxxVacMsOEFPoc= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/certifi/gocertifi v0.0.0-20191021191039-0944d244cd40/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= @@ -211,6 +224,8 @@ github.com/daviddengcn/go-colortext v0.0.0-20160507010035-511bcaf42ccd/go.mod h1 github.com/denis-tingajkin/go-header v0.4.2/go.mod h1:eLRHAVXzE5atsKAnNRDB90WHCFFnBUn4RN0nRcs1LJA= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/distribution/distribution/v3 v3.0.0-20220702071910-8857a1948739 h1:fOBqIwS8s+ircSm/N6VQcIZPaFoomoAWgxwG2Ssp15I= +github.com/distribution/distribution/v3 v3.0.0-20220702071910-8857a1948739/go.mod h1:28YO/VJk9/64+sTGNuYaBjWxrXTPrj0C0XmgTIOjxX4= github.com/docker/cli v20.10.16+incompatible h1:aLQ8XowgKpR3/IysPj8qZQJBVQ+Qws61icFuZl6iKYs= github.com/docker/cli v20.10.16+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68= @@ -219,6 +234,12 @@ github.com/docker/docker v20.10.16+incompatible h1:2Db6ZR/+FUR3hqPMwnogOPHFn405c github.com/docker/docker v20.10.16+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker-credential-helpers v0.6.4 h1:axCks+yV+2MR3/kZhAmy07yC56WZ2Pwu/fKWtKuZB0o= github.com/docker/docker-credential-helpers v0.6.4/go.mod h1:ofX3UI0Gz1TteYBjtgs07O36Pyasyp66D2uKT7H8W1c= +github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c h1:+pKlWGMw7gf6bQ+oDZB4KHQFypsfjYlq/C4rfL7D3g8= +github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= +github.com/docker/go-metrics v0.0.1 h1:AgB/0SvBxihN0X8OR4SjsblXkbMvalQ8cjmtKQ2rQV8= +github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw= +github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1 h1:ZClxb8laGDf5arXfYcAtECDFgAgHklGI8CxgjHnXKJ4= +github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/drone/envsubst/v2 v2.0.0-20210730161058-179042472c46 h1:7QPwrLT79GlD5sizHf27aoY2RTvw62mO6x7mxkScNk0= github.com/drone/envsubst/v2 v2.0.0-20210730161058-179042472c46/go.mod h1:esf2rsHFNlZlxsqsZDojNBcnNs5REqIvRrWRHqX0vEU= @@ -255,6 +276,7 @@ github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGE github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= +github.com/felixge/httpsnoop v1.0.1 h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8SPQ= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fluxcd/go-git-providers v0.6.0 h1:XJc3MTYFpuahBSoKTVxmH9OBPCeIyvYoQkTjTqa3fH4= github.com/fluxcd/go-git-providers v0.6.0/go.mod h1:UMFHnMCIO9CBpEln7ZsArEWyXSNxTpm76fyQxUmClrc= @@ -290,7 +312,6 @@ github.com/fluxcd/source-controller/api v0.25.11 h1:1YbH5vlQ1k96tbRKTdQHCBsBVMgp github.com/fluxcd/source-controller/api v0.25.11/go.mod h1:5kihSWjg+gIXLPTTXbe6AnY+g+iDmP+CY4g6nFqublc= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= -github.com/form3tech-oss/jwt-go v3.2.3+incompatible h1:7ZaBxOI7TMoYBfyA3cQHErNNyAWIKUMIwqxEtgHOs5c= github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= @@ -369,6 +390,9 @@ github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXP github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= +github.com/golang-jwt/jwt/v4 v4.2.0 h1:besgBTC8w8HjP6NzQdxwKH9Z5oQMZ24ThTrHp3cZ8eU= +github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -418,6 +442,8 @@ github.com/golangci/misspell v0.3.5/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPP github.com/golangci/revgrep v0.0.0-20210930125155-c22e5001d4f2/go.mod h1:LK+zW4MpyytAWQRz0M4xnzEk50lSvqDQKfx304apFkY= github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ= github.com/golangplus/testing v0.0.0-20180327235837-af21d9c3145e/go.mod h1:0AA//k/eakGydO4jKRoRL2j92ZKSzTgj9tclaCrvXHk= +github.com/gomodule/redigo v1.8.2 h1:H5XSIre1MB5NbPYFp+i1NBbb5qN1W8Y8YAQoAYbkm8k= +github.com/gomodule/redigo v1.8.2/go.mod h1:P9dn9mFrCBvWhGE1wpxx6fgq7BAeLBk+UUUzlpkBYO0= github.com/gonvenience/bunt v1.3.4 h1:Row599Ohja2BPooaqd1tHYdTAKu6SWq7W/UeakTXddM= github.com/gonvenience/bunt v1.3.4/go.mod h1:j8eqHLBo8eWCCYuc34oFdlgyxL1rZ4ywYz4BZa4b09w= github.com/gonvenience/neat v1.3.10 h1:gHrVkQAvbUsZgnpEglPwsAJLPqSFQxOgfbB3FWLhmUo= @@ -503,6 +529,8 @@ github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORR github.com/gordonklaus/ineffassign v0.0.0-20200309095847-7953dde2c7bf/go.mod h1:cuNKsD1zp2v6XfE/orVX2QE1LC+i254ceGcVeDT3pTU= github.com/gordonklaus/ineffassign v0.0.0-20210225214923-2e10b2664254/go.mod h1:M9mZEtGIsR1oDaZagNPNG9iq9n2HrhZ17dsXk73V3Lw= github.com/gorhill/cronexpr v0.0.0-20180427100037-88b0669f7d75/go.mod h1:g2644b03hfBX9Ov0ZBDgXXens4rxSxmqFBbhvKv2yVA= +github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= +github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= @@ -735,6 +763,7 @@ github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:F github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.4.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f h1:2+myh5ml7lgEU/51gbeLHfKGNfgEQQIWrlbdaOsidbQ= github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/moby/spdystream v0.2.0 h1:cjW1zVyyoiM0T7b6UoySUFqzXMoqRckQtXwGPiBhOM8= @@ -810,6 +839,8 @@ github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCko github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d/go.mod h1:3OzsM7FXDQlpCiw2j81fOmAwQLnZnLGXVKUzeKQXIAw= +github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= +github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -825,6 +856,7 @@ github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prY github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_golang v1.12.1 h1:ZiaPsmm9uiBeaSMRznKsCDNtPCS0T3JVDGF+06gjBzk= @@ -837,6 +869,7 @@ github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6T github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.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.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= github.com/prometheus/common v0.32.1 h1:hWIdL3N2HoUx3B8j3YN9mWor0qhY/NlEKZEaXxuIRh4= @@ -844,6 +877,7 @@ github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+ github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= @@ -999,6 +1033,12 @@ github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9dec github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43 h1:+lm10QQTNSBd8DVTNGHx7o/IKu9HYDvLMffDhbyLccI= +github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43/go.mod h1:aX5oPXxHm3bOH+xeAttToC8pqch2ScQN/JoXYupl6xs= +github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50 h1:hlE8//ciYMztlGpl/VA+Zm1AcTPHYkHJPbHqE6WJUXE= +github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50/go.mod h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96TguQh0+r/ssA= +github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f h1:ERexzlUfuTvpE74urLSbIQW0Z/6hF9t8U4NsJLaioAY= +github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.4/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= @@ -1073,6 +1113,7 @@ golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e h1:T8NU3HyQ8ClP4SEE+KbFlg6n0NhuTsN4MyznaarGsZM= golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= @@ -1225,6 +1266,7 @@ golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= diff --git a/internal/oci/build_test.go b/internal/oci/build_test.go new file mode 100644 index 00000000..085dfe9c --- /dev/null +++ b/internal/oci/build_test.go @@ -0,0 +1,48 @@ +/* +Copyright 2022 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package oci + +import ( + "os" + "path/filepath" + "testing" + + . "github.com/onsi/gomega" +) + +func TestBuild(t *testing.T) { + g := NewWithT(t) + testDir := "./testdata/build" + + tmpDir := t.TempDir() + artifactPath := filepath.Join(tmpDir, "files.tar.gz") + + // test with non-existent path + err := Build(artifactPath, "testdata/non-existent") + g.Expect(err).To(HaveOccurred()) + + err = Build(artifactPath, testDir) + g.Expect(err).ToNot(HaveOccurred()) + + if _, err := os.Stat(artifactPath); err != nil { + g.Expect(err).ToNot(HaveOccurred()) + } + + if err != nil { + t.Errorf("error working directory, %s", err) + } +} diff --git a/internal/oci/list_test.go b/internal/oci/list_test.go new file mode 100644 index 00000000..0a21237d --- /dev/null +++ b/internal/oci/list_test.go @@ -0,0 +1,53 @@ +/* +Copyright 2022 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package oci + +import ( + "context" + "fmt" + "testing" + + "github.com/google/go-containerregistry/pkg/crane" + "github.com/google/go-containerregistry/pkg/name" + "github.com/google/go-containerregistry/pkg/v1/random" + . "github.com/onsi/gomega" +) + +func Test_List(t *testing.T) { + g := NewWithT(t) + ctx := context.Background() + repo := "test-list" + randStringRunes(5) + tags := []string{"v0.0.1", "v0.0.2", "v0.0.3"} + + for _, tag := range tags { + dst := fmt.Sprintf("%s/%s:%s", dockerReg, repo, tag) + img, err := random.Image(1024, 1) + g.Expect(err).ToNot(HaveOccurred()) + err = crane.Push(img, dst, craneOptions(ctx)...) + g.Expect(err).ToNot(HaveOccurred()) + } + + metadata, err := List(ctx, fmt.Sprintf("%s/%s", dockerReg, repo)) + g.Expect(err).ToNot(HaveOccurred()) + + g.Expect(len(metadata)).To(Equal(len(tags))) + for _, meta := range metadata { + tag, err := name.NewTag(meta.URL) + g.Expect(err).ToNot(HaveOccurred()) + g.Expect(tag.TagStr()).Should(BeElementOf(tags)) + } +} diff --git a/internal/oci/push_pull_test.go b/internal/oci/push_pull_test.go new file mode 100644 index 00000000..f2ebc9be --- /dev/null +++ b/internal/oci/push_pull_test.go @@ -0,0 +1,64 @@ +/* +Copyright 2022 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package oci + +import ( + "context" + "fmt" + "io/fs" + "os" + "path/filepath" + "testing" + + "github.com/google/go-containerregistry/pkg/crane" + . "github.com/onsi/gomega" +) + +func Test_Push_Pull(t *testing.T) { + g := NewWithT(t) + ctx := context.Background() + tag := "v0.0.1" + repo := "test-push" + randStringRunes(5) + + url := fmt.Sprintf("%s/%s:%s", dockerReg, repo, tag) + metadata := Metadata{ + Source: "github.com/fluxcd/fluxv2", + Revision: "rev", + } + + testDir := "testdata/build" + _, err := Push(ctx, url, testDir, metadata) + g.Expect(err).ToNot(HaveOccurred()) + + tags, err := crane.ListTags(fmt.Sprintf("%s/%s", dockerReg, repo)) + g.Expect(err).ToNot(HaveOccurred()) + g.Expect(len(tags)).To(BeEquivalentTo(1)) + + tmpDir := t.TempDir() + _, err = Pull(ctx, url, tmpDir) + g.Expect(err).ToNot(HaveOccurred()) + + // Walk directory the test directory and check that each path exists in the extracted archive + err = filepath.Walk(testDir, func(path string, info fs.FileInfo, err error) error { + tmpPath := filepath.Join(tmpDir, path) + if _, err := os.Stat(tmpPath); err != nil && os.IsNotExist(err) { + return fmt.Errorf("path '%s' doesn't exist in archive", path) + } + + return nil + }) +} diff --git a/internal/oci/suite_test.go b/internal/oci/suite_test.go new file mode 100644 index 00000000..2ac5d269 --- /dev/null +++ b/internal/oci/suite_test.go @@ -0,0 +1,115 @@ +/* +Copyright 2022 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package oci + +import ( + "context" + "fmt" + "io/ioutil" + "math/rand" + "os" + "path/filepath" + "testing" + "time" + + ctrl "sigs.k8s.io/controller-runtime" + + "github.com/distribution/distribution/v3/configuration" + "github.com/distribution/distribution/v3/registry" + _ "github.com/distribution/distribution/v3/registry/auth/htpasswd" + _ "github.com/distribution/distribution/v3/registry/storage/driver/inmemory" + "github.com/phayes/freeport" + "golang.org/x/crypto/bcrypt" +) + +const ( + testRegistryHtpasswdFileBasename = "authtest.htpasswd" + testRegistryUsername = "myuser" + testRegistryPassword = "mypass" +) + +var ( + dockerReg string +) + +func init() { + rand.Seed(time.Now().UnixNano()) +} + +func setupRegistryServer(ctx context.Context) error { + // Create a temporary workspace directory for the registry + workspaceDir, err := os.MkdirTemp("", "registry-test-") + if err != nil { + return fmt.Errorf("failed to create workspace directory: %w", err) + } + + // create htpasswd file (w BCrypt, which is required) + pwBytes, err := bcrypt.GenerateFromPassword([]byte(testRegistryPassword), bcrypt.DefaultCost) + if err != nil { + return fmt.Errorf("failed to generate password: %s", err) + } + + htpasswdPath := filepath.Join(workspaceDir, testRegistryHtpasswdFileBasename) + err = ioutil.WriteFile(htpasswdPath, []byte(fmt.Sprintf("%s:%s\n", testRegistryUsername, string(pwBytes))), 0644) + if err != nil { + return fmt.Errorf("failed to create htpasswd file: %s", err) + } + + // Registry config + config := &configuration.Configuration{} + port, err := freeport.GetFreePort() + if err != nil { + return fmt.Errorf("failed to get free port: %s", err) + } + + dockerReg = fmt.Sprintf("localhost:%d", port) + config.HTTP.Addr = fmt.Sprintf("127.0.0.1:%d", port) + config.HTTP.DrainTimeout = time.Duration(10) * time.Second + config.Storage = map[string]configuration.Parameters{"inmemory": map[string]interface{}{}} + dockerRegistry, err := registry.NewRegistry(ctx, config) + if err != nil { + return fmt.Errorf("failed to create docker registry: %w", err) + } + + // Start Docker registry + go dockerRegistry.ListenAndServe() + + return nil +} + +func TestMain(m *testing.M) { + ctx := ctrl.SetupSignalHandler() + + err := setupRegistryServer(ctx) + if err != nil { + panic(fmt.Sprintf("failed to start docker registry: %s", err)) + } + + code := m.Run() + + os.Exit(code) +} + +var letterRunes = []rune("abcdefghijklmnopqrstuvwxyz1234567890") + +func randStringRunes(n int) string { + b := make([]rune, n) + for i := range b { + b[i] = letterRunes[rand.Intn(len(letterRunes))] + } + return string(b) +} diff --git a/internal/oci/tag_test.go b/internal/oci/tag_test.go new file mode 100644 index 00000000..81cbebb1 --- /dev/null +++ b/internal/oci/tag_test.go @@ -0,0 +1,46 @@ +/* +Copyright 2022 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package oci + +import ( + "context" + "fmt" + "testing" + + "github.com/google/go-containerregistry/pkg/crane" + "github.com/google/go-containerregistry/pkg/v1/random" + . "github.com/onsi/gomega" +) + +func Test_Tag(t *testing.T) { + g := NewWithT(t) + ctx := context.Background() + testRepo := "test-tag" + url := fmt.Sprintf("%s/%s:v0.0.1", dockerReg, testRepo) + img, err := random.Image(1024, 1) + g.Expect(err).ToNot(HaveOccurred()) + err = crane.Push(img, url, craneOptions(ctx)...) + g.Expect(err).ToNot(HaveOccurred()) + + _, err = Tag(ctx, url, "v0.0.2") + g.Expect(err).ToNot(HaveOccurred()) + + tags, err := crane.ListTags(fmt.Sprintf("%s/%s", dockerReg, testRepo)) + g.Expect(err).ToNot(HaveOccurred()) + g.Expect(len(tags)).To(BeEquivalentTo(2)) + g.Expect(tags).To(BeEquivalentTo([]string{"v0.0.1", "v0.0.2"})) +} diff --git a/internal/oci/testdata/build/deployment.yaml b/internal/oci/testdata/build/deployment.yaml new file mode 100644 index 00000000..e69de29b diff --git a/internal/oci/testdata/build/somedir/repo.yaml b/internal/oci/testdata/build/somedir/repo.yaml new file mode 100644 index 00000000..e69de29b From b78bbd5b9d54f0cdc2724b4c0612706f98ffbc74 Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Fri, 8 Jul 2022 16:20:01 +0100 Subject: [PATCH 188/818] fill test files Signed-off-by: Somtochi Onyekwere --- internal/oci/build_test.go | 4 --- internal/oci/push_pull_test.go | 2 +- internal/oci/suite_test.go | 29 ------------------- internal/oci/testdata/build/deployment.yaml | 21 ++++++++++++++ internal/oci/testdata/build/somedir/repo.yaml | 8 +++++ 5 files changed, 30 insertions(+), 34 deletions(-) diff --git a/internal/oci/build_test.go b/internal/oci/build_test.go index 085dfe9c..2f6c5616 100644 --- a/internal/oci/build_test.go +++ b/internal/oci/build_test.go @@ -41,8 +41,4 @@ func TestBuild(t *testing.T) { if _, err := os.Stat(artifactPath); err != nil { g.Expect(err).ToNot(HaveOccurred()) } - - if err != nil { - t.Errorf("error working directory, %s", err) - } } diff --git a/internal/oci/push_pull_test.go b/internal/oci/push_pull_test.go index f2ebc9be..c37c92d2 100644 --- a/internal/oci/push_pull_test.go +++ b/internal/oci/push_pull_test.go @@ -52,7 +52,7 @@ func Test_Push_Pull(t *testing.T) { _, err = Pull(ctx, url, tmpDir) g.Expect(err).ToNot(HaveOccurred()) - // Walk directory the test directory and check that each path exists in the extracted archive + // Walk directory the test directory and check that all paths exists in the extracted archive err = filepath.Walk(testDir, func(path string, info fs.FileInfo, err error) error { tmpPath := filepath.Join(tmpDir, path) if _, err := os.Stat(tmpPath); err != nil && os.IsNotExist(err) { diff --git a/internal/oci/suite_test.go b/internal/oci/suite_test.go index 2ac5d269..c611e1ab 100644 --- a/internal/oci/suite_test.go +++ b/internal/oci/suite_test.go @@ -19,10 +19,8 @@ package oci import ( "context" "fmt" - "io/ioutil" "math/rand" "os" - "path/filepath" "testing" "time" @@ -33,13 +31,6 @@ import ( _ "github.com/distribution/distribution/v3/registry/auth/htpasswd" _ "github.com/distribution/distribution/v3/registry/storage/driver/inmemory" "github.com/phayes/freeport" - "golang.org/x/crypto/bcrypt" -) - -const ( - testRegistryHtpasswdFileBasename = "authtest.htpasswd" - testRegistryUsername = "myuser" - testRegistryPassword = "mypass" ) var ( @@ -51,24 +42,6 @@ func init() { } func setupRegistryServer(ctx context.Context) error { - // Create a temporary workspace directory for the registry - workspaceDir, err := os.MkdirTemp("", "registry-test-") - if err != nil { - return fmt.Errorf("failed to create workspace directory: %w", err) - } - - // create htpasswd file (w BCrypt, which is required) - pwBytes, err := bcrypt.GenerateFromPassword([]byte(testRegistryPassword), bcrypt.DefaultCost) - if err != nil { - return fmt.Errorf("failed to generate password: %s", err) - } - - htpasswdPath := filepath.Join(workspaceDir, testRegistryHtpasswdFileBasename) - err = ioutil.WriteFile(htpasswdPath, []byte(fmt.Sprintf("%s:%s\n", testRegistryUsername, string(pwBytes))), 0644) - if err != nil { - return fmt.Errorf("failed to create htpasswd file: %s", err) - } - // Registry config config := &configuration.Configuration{} port, err := freeport.GetFreePort() @@ -93,14 +66,12 @@ func setupRegistryServer(ctx context.Context) error { func TestMain(m *testing.M) { ctx := ctrl.SetupSignalHandler() - err := setupRegistryServer(ctx) if err != nil { panic(fmt.Sprintf("failed to start docker registry: %s", err)) } code := m.Run() - os.Exit(code) } diff --git a/internal/oci/testdata/build/deployment.yaml b/internal/oci/testdata/build/deployment.yaml index e69de29b..007ecd31 100644 --- a/internal/oci/testdata/build/deployment.yaml +++ b/internal/oci/testdata/build/deployment.yaml @@ -0,0 +1,21 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: nginx-deployment + labels: + app: nginx +spec: + replicas: 3 + selector: + matchLabels: + app: nginx + template: + metadata: + labels: + app: nginx + spec: + containers: + - name: nginx + image: nginx:1.14.2 + ports: + - containerPort: 80 diff --git a/internal/oci/testdata/build/somedir/repo.yaml b/internal/oci/testdata/build/somedir/repo.yaml index e69de29b..253b7632 100644 --- a/internal/oci/testdata/build/somedir/repo.yaml +++ b/internal/oci/testdata/build/somedir/repo.yaml @@ -0,0 +1,8 @@ +apiVersion: source.toolkit.fluxcd.io/v1beta1 +kind: HelmRepository +metadata: + name: podinfo + namespace: flux-system +spec: + interval: 2m + url: https://stefanprodan.github.io/podinfo From 9e76787e9fa050f3e5ee23553abc4a97f7aa4868 Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Mon, 11 Jul 2022 16:28:44 +0100 Subject: [PATCH 189/818] working golden files Signed-off-by: Somtochi Onyekwere --- cmd/flux/testdata/oci/get_oci.golden | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/flux/testdata/oci/get_oci.golden b/cmd/flux/testdata/oci/get_oci.golden index 3c9558bf..d88eb6c0 100644 --- a/cmd/flux/testdata/oci/get_oci.golden +++ b/cmd/flux/testdata/oci/get_oci.golden @@ -1,2 +1,2 @@ -NAME REVISION SUSPENDED READY MESSAGE -thrfg 3b6cdcc7adcc9a84d3214ee1c029543789d90b5ae69debe9efa3f66e982875de False True stored artifact for digest '3b6cdcc7adcc9a84d3214ee1c029543789d90b5ae69debe9efa3f66e982875de' +NAME REVISION SUSPENDED READY MESSAGE +thrfg 3b6cdcc7adcc9a84d3214ee1c029543789d90b5ae69debe9efa3f66e982875de False True stored artifact for digest '3b6cdcc7adcc9a84d3214ee1c029543789d90b5ae69debe9efa3f66e982875de' From 009413affd1a54f29f24ec87be9b80d1b3f402f9 Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Mon, 11 Jul 2022 17:15:22 +0100 Subject: [PATCH 190/818] Add test for annotations Signed-off-by: Somtochi Onyekwere --- internal/oci/list_test.go | 15 +++++++++++++++ internal/oci/push_pull_test.go | 10 +++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/internal/oci/list_test.go b/internal/oci/list_test.go index 0a21237d..c67a3a6c 100644 --- a/internal/oci/list_test.go +++ b/internal/oci/list_test.go @@ -23,6 +23,8 @@ import ( "github.com/google/go-containerregistry/pkg/crane" "github.com/google/go-containerregistry/pkg/name" + gcrv1 "github.com/google/go-containerregistry/pkg/v1" + "github.com/google/go-containerregistry/pkg/v1/mutate" "github.com/google/go-containerregistry/pkg/v1/random" . "github.com/onsi/gomega" ) @@ -32,11 +34,18 @@ func Test_List(t *testing.T) { ctx := context.Background() repo := "test-list" + randStringRunes(5) tags := []string{"v0.0.1", "v0.0.2", "v0.0.3"} + source := "github.com/fluxcd/fluxv2" + rev := "rev" + m := Metadata{ + Source: source, + Revision: rev, + } for _, tag := range tags { dst := fmt.Sprintf("%s/%s:%s", dockerReg, repo, tag) img, err := random.Image(1024, 1) g.Expect(err).ToNot(HaveOccurred()) + img = mutate.Annotations(img, m.ToAnnotations()).(gcrv1.Image) err = crane.Push(img, dst, craneOptions(ctx)...) g.Expect(err).ToNot(HaveOccurred()) } @@ -49,5 +58,11 @@ func Test_List(t *testing.T) { tag, err := name.NewTag(meta.URL) g.Expect(err).ToNot(HaveOccurred()) g.Expect(tag.TagStr()).Should(BeElementOf(tags)) + + g.Expect(meta.ToAnnotations()).To(Equal(m.ToAnnotations())) + + digest, err := crane.Digest(meta.URL, craneOptions(ctx)...) + g.Expect(err).ToNot(HaveOccurred()) + g.Expect(meta.Digest).To(Equal(digest)) } } diff --git a/internal/oci/push_pull_test.go b/internal/oci/push_pull_test.go index c37c92d2..1083dcdd 100644 --- a/internal/oci/push_pull_test.go +++ b/internal/oci/push_pull_test.go @@ -36,9 +36,10 @@ func Test_Push_Pull(t *testing.T) { url := fmt.Sprintf("%s/%s:%s", dockerReg, repo, tag) metadata := Metadata{ - Source: "github.com/fluxcd/fluxv2", + Source: "github.com/fluxcd/flux2", Revision: "rev", } + annotations := metadata.ToAnnotations() testDir := "testdata/build" _, err := Push(ctx, url, testDir, metadata) @@ -48,6 +49,13 @@ func Test_Push_Pull(t *testing.T) { g.Expect(err).ToNot(HaveOccurred()) g.Expect(len(tags)).To(BeEquivalentTo(1)) + image, err := crane.Pull(fmt.Sprintf("%s/%s:%s", dockerReg, repo, tag)) + g.Expect(err).ToNot(HaveOccurred()) + + manifest, err := image.Manifest() + g.Expect(err).ToNot(HaveOccurred()) + g.Expect(manifest.Annotations).To(BeEquivalentTo(annotations)) + tmpDir := t.TempDir() _, err = Pull(ctx, url, tmpDir) g.Expect(err).ToNot(HaveOccurred()) From 030b6bc77c372c1aeb3c52337b6f64e5788c4fae Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 13 Jul 2022 13:17:00 +0300 Subject: [PATCH 191/818] Update source-controller with OCI metadata Signed-off-by: Stefan Prodan --- manifests/bases/source-controller/kustomization.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index 3b42223d..921ebff1 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -15,4 +15,4 @@ patchesJson6902: # TODO: remove the hardcoded image when OCIRepository is released images: - name: fluxcd/source-controller - newTag: oci-09a9ef44 + newTag: oci-102e9a94 From 803104578fe7942e3459238d93a0ee2719ef9d56 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 13 Jul 2022 13:17:23 +0300 Subject: [PATCH 192/818] Add `make build-dev` command Signed-off-by: Stefan Prodan --- Makefile | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Makefile b/Makefile index 7942926d..8daf0426 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,5 @@ VERSION?=$(shell grep 'VERSION' cmd/flux/main.go | awk '{ print $$4 }' | head -n 1 | tr -d '"') +DEV_VERSION?=0.0.0-$(shell git rev-parse --abbrev-ref HEAD)-$(shell git rev-parse --short HEAD)-$(shell date +%s) EMBEDDED_MANIFESTS_TARGET=cmd/flux/.manifests.done TEST_KUBECONFIG?=/tmp/flux-e2e-test-kubeconfig # Architecture to use envtest with @@ -55,6 +56,9 @@ $(EMBEDDED_MANIFESTS_TARGET): $(call rwildcard,manifests/,*.yaml *.json) build: $(EMBEDDED_MANIFESTS_TARGET) CGO_ENABLED=0 go build -ldflags="-s -w -X main.VERSION=$(VERSION)" -o ./bin/flux ./cmd/flux +build-dev: $(EMBEDDED_MANIFESTS_TARGET) + CGO_ENABLED=0 go build -ldflags="-s -w -X main.VERSION=$(DEV_VERSION)" -o ./bin/flux ./cmd/flux + .PHONY: install install: CGO_ENABLED=0 go install ./cmd/flux From 70d30fd52e68d6287e7c84ab4f338cc2d403e121 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 13 Jul 2022 13:39:32 +0300 Subject: [PATCH 193/818] Update golden files to latest digest Signed-off-by: Stefan Prodan --- cmd/flux/testdata/oci/create_source_oci.golden | 2 +- cmd/flux/testdata/oci/get_oci.golden | 2 +- cmd/flux/testdata/oci/reconcile_oci.golden | 2 +- cmd/flux/testdata/oci/resume_oci.golden | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/cmd/flux/testdata/oci/create_source_oci.golden b/cmd/flux/testdata/oci/create_source_oci.golden index 9cca4138..6b2563c9 100644 --- a/cmd/flux/testdata/oci/create_source_oci.golden +++ b/cmd/flux/testdata/oci/create_source_oci.golden @@ -2,4 +2,4 @@ ✔ OCIRepository created ◎ waiting for OCIRepository reconciliation ✔ OCIRepository reconciliation completed -✔ fetched revision: 3b6cdcc7adcc9a84d3214ee1c029543789d90b5ae69debe9efa3f66e982875de +✔ fetched revision: ad1869cb84deb98917c06d93de0fe0ec56297473694d42b45b6adf1c84692d59 diff --git a/cmd/flux/testdata/oci/get_oci.golden b/cmd/flux/testdata/oci/get_oci.golden index d88eb6c0..3d5a8a1c 100644 --- a/cmd/flux/testdata/oci/get_oci.golden +++ b/cmd/flux/testdata/oci/get_oci.golden @@ -1,2 +1,2 @@ NAME REVISION SUSPENDED READY MESSAGE -thrfg 3b6cdcc7adcc9a84d3214ee1c029543789d90b5ae69debe9efa3f66e982875de False True stored artifact for digest '3b6cdcc7adcc9a84d3214ee1c029543789d90b5ae69debe9efa3f66e982875de' +thrfg ad1869cb84deb98917c06d93de0fe0ec56297473694d42b45b6adf1c84692d59 False True stored artifact for digest 'ad1869cb84deb98917c06d93de0fe0ec56297473694d42b45b6adf1c84692d59' diff --git a/cmd/flux/testdata/oci/reconcile_oci.golden b/cmd/flux/testdata/oci/reconcile_oci.golden index 0c258819..c0223e8d 100644 --- a/cmd/flux/testdata/oci/reconcile_oci.golden +++ b/cmd/flux/testdata/oci/reconcile_oci.golden @@ -1,4 +1,4 @@ ► annotating OCIRepository thrfg in {{ .ns }} namespace ✔ OCIRepository annotated ◎ waiting for OCIRepository reconciliation -✔ fetched revision 3b6cdcc7adcc9a84d3214ee1c029543789d90b5ae69debe9efa3f66e982875de +✔ fetched revision ad1869cb84deb98917c06d93de0fe0ec56297473694d42b45b6adf1c84692d59 diff --git a/cmd/flux/testdata/oci/resume_oci.golden b/cmd/flux/testdata/oci/resume_oci.golden index 467514e7..0851c487 100644 --- a/cmd/flux/testdata/oci/resume_oci.golden +++ b/cmd/flux/testdata/oci/resume_oci.golden @@ -2,4 +2,4 @@ ✔ source oci resumed ◎ waiting for OCIRepository reconciliation ✔ OCIRepository reconciliation completed -✔ fetched revision 3b6cdcc7adcc9a84d3214ee1c029543789d90b5ae69debe9efa3f66e982875de +✔ fetched revision ad1869cb84deb98917c06d93de0fe0ec56297473694d42b45b6adf1c84692d59 From 4c576bf59920a34663128a9f7aa3f2dc0e9bd8eb Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Mon, 18 Jul 2022 15:54:41 +0100 Subject: [PATCH 194/818] Add create oci secret command Signed-off-by: Somtochi Onyekwere --- cmd/flux/create_secret_helm_test.go | 16 +++ cmd/flux/create_secret_oci.go | 117 ++++++++++++++++++ cmd/flux/create_secret_oci_test.go | 51 ++++++++ .../create_secret/oci/create-secret.yaml | 10 ++ pkg/manifestgen/sourcesecret/options.go | 1 + pkg/manifestgen/sourcesecret/sourcesecret.go | 48 ++++++- 6 files changed, 241 insertions(+), 2 deletions(-) create mode 100644 cmd/flux/create_secret_oci.go create mode 100644 cmd/flux/create_secret_oci_test.go create mode 100644 cmd/flux/testdata/create_secret/oci/create-secret.yaml diff --git a/cmd/flux/create_secret_helm_test.go b/cmd/flux/create_secret_helm_test.go index fe0bc0c9..821f8311 100644 --- a/cmd/flux/create_secret_helm_test.go +++ b/cmd/flux/create_secret_helm_test.go @@ -1,3 +1,19 @@ +/* +Copyright 2022 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + package main import ( diff --git a/cmd/flux/create_secret_oci.go b/cmd/flux/create_secret_oci.go new file mode 100644 index 00000000..decd680c --- /dev/null +++ b/cmd/flux/create_secret_oci.go @@ -0,0 +1,117 @@ +/* +Copyright 2022 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "context" + "fmt" + + "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/flux2/pkg/manifestgen/sourcesecret" + "github.com/google/go-containerregistry/pkg/name" + "github.com/spf13/cobra" + corev1 "k8s.io/api/core/v1" + "sigs.k8s.io/yaml" +) + +var createSecretOCICmd = &cobra.Command{ + Use: "oci [name]", + Short: "Create or update a Kubernetes secret for docker authentication", + Long: `The create secret oci command generates a Kubernetes secret with `, + Example: ` # Create a secret for a OCI repository using basic authentication + flux create secret oci podinfo-auth \ + --url=ghcr.io/stefanprodan/charts \ + --username=username \ + --password=password + `, + RunE: createSecretOCICmdRun, +} + +type secretOCIFlags struct { + url string + password string + username string +} + +var secretOCIArgs = secretOCIFlags{} + +func init() { + createSecretOCICmd.Flags().StringVar(&secretOCIArgs.url, "url", "", "oci repository address e.g ghcr.io/stefanprodan/charts") + createSecretOCICmd.Flags().StringVarP(&secretOCIArgs.username, "username", "u", "", "basic authentication username") + createSecretOCICmd.Flags().StringVarP(&secretOCIArgs.password, "password", "p", "", "basic authentication") + + createSecretCmd.AddCommand(createSecretOCICmd) +} + +func createSecretOCICmdRun(cmd *cobra.Command, args []string) error { + if len(args) < 1 { + return fmt.Errorf("name is required") + } + + secretName := args[0] + + if secretOCIArgs.url == "" { + return fmt.Errorf("--url is required") + } + + if secretOCIArgs.username == "" { + return fmt.Errorf("--username is required") + } + + if secretOCIArgs.password == "" { + return fmt.Errorf("--password is required") + } + + if _, err := name.ParseReference(secretOCIArgs.url); err != nil { + return fmt.Errorf("error parsing url: '%s'", err) + } + + opts := sourcesecret.Options{ + Name: secretName, + Namespace: *kubeconfigArgs.Namespace, + Registry: secretOCIArgs.url, + Password: secretOCIArgs.password, + Username: secretOCIArgs.username, + } + + secret, err := sourcesecret.Generate(opts) + if err != nil { + return err + } + + if createArgs.export { + rootCmd.Println(secret.Content) + return nil + } + + ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) + defer cancel() + kubeClient, err := utils.KubeClient(kubeconfigArgs, kubeclientOptions) + if err != nil { + return err + } + var s corev1.Secret + if err := yaml.Unmarshal([]byte(secret.Content), &s); err != nil { + return err + } + if err := upsertSecret(ctx, kubeClient, s); err != nil { + return err + } + + logger.Actionf("oci secret '%s' created in '%s' namespace", secretName, *kubeconfigArgs.Namespace) + return nil +} diff --git a/cmd/flux/create_secret_oci_test.go b/cmd/flux/create_secret_oci_test.go new file mode 100644 index 00000000..a7897796 --- /dev/null +++ b/cmd/flux/create_secret_oci_test.go @@ -0,0 +1,51 @@ +/* +Copyright 2022 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "testing" +) + +func TestCreateSecretOCI(t *testing.T) { + tests := []struct { + name string + args string + assert assertFunc + }{ + { + args: "create secret oci", + assert: assertError("name is required"), + }, + { + args: "create secret oci ghcr", + assert: assertError("--url is required"), + }, + { + args: "create secret oci ghcr --namespace=my-namespace --url ghcr.io --username stefanprodan --password=password --export", + assert: assertGoldenFile("testdata/create_secret/oci/create-secret.yaml"), + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + cmd := cmdTestCase{ + args: tt.args, + assert: tt.assert, + } + cmd.runTestCmd(t) + }) + } +} diff --git a/cmd/flux/testdata/create_secret/oci/create-secret.yaml b/cmd/flux/testdata/create_secret/oci/create-secret.yaml new file mode 100644 index 00000000..b023bbe2 --- /dev/null +++ b/cmd/flux/testdata/create_secret/oci/create-secret.yaml @@ -0,0 +1,10 @@ +--- +apiVersion: v1 +kind: Secret +metadata: + name: ghcr + namespace: my-namespace +stringData: + .dockerconfigjson: '{"auths":{"ghcr.io":{"username":"stefanprodan","password":"password","auth":"c3RlZmFucHJvZGFuOnBhc3N3b3Jk"}}}' +type: kubernetes.io/dockerconfigjson + diff --git a/pkg/manifestgen/sourcesecret/options.go b/pkg/manifestgen/sourcesecret/options.go index c5239bfb..371e6f9b 100644 --- a/pkg/manifestgen/sourcesecret/options.go +++ b/pkg/manifestgen/sourcesecret/options.go @@ -43,6 +43,7 @@ type Options struct { Name string Namespace string Labels map[string]string + Registry string SSHHostname string PrivateKeyAlgorithm PrivateKeyAlgorithm RSAKeyBits int diff --git a/pkg/manifestgen/sourcesecret/sourcesecret.go b/pkg/manifestgen/sourcesecret/sourcesecret.go index 53806328..2ea33227 100644 --- a/pkg/manifestgen/sourcesecret/sourcesecret.go +++ b/pkg/manifestgen/sourcesecret/sourcesecret.go @@ -18,6 +18,8 @@ package sourcesecret import ( "bytes" + "encoding/base64" + "encoding/json" "fmt" "net" "os" @@ -36,6 +38,18 @@ import ( const defaultSSHPort = 22 +type DockerConfigJson struct { + Auths DockerConfig `json:"auths"` +} + +type DockerConfig map[string]DockerConfigEntry + +type DockerConfigEntry struct { + Username string `json:"username,omitempty"` + Password string `json:"password,omitempty"` + Auth string `json:"auth,omitempty"` +} + func Generate(options Options) (*manifestgen.Manifest, error) { var err error @@ -77,7 +91,15 @@ func Generate(options Options) (*manifestgen.Manifest, error) { } } - secret := buildSecret(keypair, hostKey, caFile, certFile, keyFile, options) + var dockerCfgJson []byte + if options.Registry != "" { + dockerCfgJson, err = generateDockerConfigJson(options.Registry, options.Username, options.Password) + if err != nil { + return nil, fmt.Errorf("failed to generate json for docker config: %w", err) + } + } + + secret := buildSecret(keypair, hostKey, caFile, certFile, keyFile, dockerCfgJson, options) b, err := yaml.Marshal(secret) if err != nil { return nil, err @@ -89,7 +111,7 @@ func Generate(options Options) (*manifestgen.Manifest, error) { }, nil } -func buildSecret(keypair *ssh.KeyPair, hostKey, caFile, certFile, keyFile []byte, options Options) (secret corev1.Secret) { +func buildSecret(keypair *ssh.KeyPair, hostKey, caFile, certFile, keyFile, dockerCfg []byte, options Options) (secret corev1.Secret) { secret.TypeMeta = metav1.TypeMeta{ APIVersion: "v1", Kind: "Secret", @@ -101,6 +123,12 @@ func buildSecret(keypair *ssh.KeyPair, hostKey, caFile, certFile, keyFile []byte secret.Labels = options.Labels secret.StringData = map[string]string{} + if dockerCfg != nil { + secret.Type = corev1.SecretTypeDockerConfigJson + secret.StringData[corev1.DockerConfigJsonKey] = string(dockerCfg) + return + } + if options.Username != "" && options.Password != "" { secret.StringData[UsernameSecretKey] = options.Username secret.StringData[PasswordSecretKey] = options.Password @@ -189,3 +217,19 @@ func resourceToString(data []byte) string { data = bytes.Replace(data, []byte("status: {}\n"), []byte(""), 1) return string(data) } + +func generateDockerConfigJson(url, username, password string) ([]byte, error) { + cred := fmt.Sprintf("%s:%s", username, password) + auth := base64.StdEncoding.EncodeToString([]byte(cred)) + cfg := DockerConfigJson{ + Auths: map[string]DockerConfigEntry{ + url: { + Username: username, + Password: password, + Auth: auth, + }, + }, + } + + return json.Marshal(cfg) +} From fe4b65972a18d54091d55c958f616d933966716a Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Tue, 19 Jul 2022 08:20:34 +0100 Subject: [PATCH 195/818] Update cli description Signed-off-by: Somtochi Onyekwere --- cmd/flux/create_secret_oci.go | 12 ++++++++---- pkg/manifestgen/sourcesecret/sourcesecret.go | 10 ++++++++-- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/cmd/flux/create_secret_oci.go b/cmd/flux/create_secret_oci.go index decd680c..8adc184c 100644 --- a/cmd/flux/create_secret_oci.go +++ b/cmd/flux/create_secret_oci.go @@ -30,13 +30,17 @@ import ( var createSecretOCICmd = &cobra.Command{ Use: "oci [name]", - Short: "Create or update a Kubernetes secret for docker authentication", + Short: "Create or update a Kubernetes secret for OCI Registry authentication", Long: `The create secret oci command generates a Kubernetes secret with `, - Example: ` # Create a secret for a OCI repository using basic authentication + Example: ` # Create an OCI authentication secret on disk and encrypt it with Mozilla SOPS flux create secret oci podinfo-auth \ - --url=ghcr.io/stefanprodan/charts \ + --url=ghcr.io \ --username=username \ - --password=password + --password=password \ + --export > repo-auth.yaml + + sops --encrypt --encrypted-regex '^(data|stringData)$' \ + --in-place repo-auth.yaml `, RunE: createSecretOCICmdRun, } diff --git a/pkg/manifestgen/sourcesecret/sourcesecret.go b/pkg/manifestgen/sourcesecret/sourcesecret.go index 2ea33227..cbca1c73 100644 --- a/pkg/manifestgen/sourcesecret/sourcesecret.go +++ b/pkg/manifestgen/sourcesecret/sourcesecret.go @@ -38,12 +38,18 @@ import ( const defaultSSHPort = 22 -type DockerConfigJson struct { +// DockerConfigJSON represents a local docker auth config file +// for pulling images. +type DockerConfigJSON struct { Auths DockerConfig `json:"auths"` } +// DockerConfig represents the config file used by the docker CLI. +// This config that represents the credentials that should be used +// when pulling images from specific image repositories. type DockerConfig map[string]DockerConfigEntry +// DockerConfigEntry holds the user information that grant the access to docker registry type DockerConfigEntry struct { Username string `json:"username,omitempty"` Password string `json:"password,omitempty"` @@ -221,7 +227,7 @@ func resourceToString(data []byte) string { func generateDockerConfigJson(url, username, password string) ([]byte, error) { cred := fmt.Sprintf("%s:%s", username, password) auth := base64.StdEncoding.EncodeToString([]byte(cred)) - cfg := DockerConfigJson{ + cfg := DockerConfigJSON{ Auths: map[string]DockerConfigEntry{ url: { Username: username, From fcd38c9395eae61c3af416738a146cd3393575f4 Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Tue, 19 Jul 2022 08:28:11 +0100 Subject: [PATCH 196/818] Fix cli description Signed-off-by: Somtochi Onyekwere --- cmd/flux/create_secret_oci.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cmd/flux/create_secret_oci.go b/cmd/flux/create_secret_oci.go index 8adc184c..2e86f461 100644 --- a/cmd/flux/create_secret_oci.go +++ b/cmd/flux/create_secret_oci.go @@ -37,9 +37,9 @@ var createSecretOCICmd = &cobra.Command{ --url=ghcr.io \ --username=username \ --password=password \ - --export > repo-auth.yaml + --export > repo-auth.yaml - sops --encrypt --encrypted-regex '^(data|stringData)$' \ + sops --encrypt --encrypted-regex '^(data|stringData)$' \ --in-place repo-auth.yaml `, RunE: createSecretOCICmdRun, @@ -56,7 +56,7 @@ var secretOCIArgs = secretOCIFlags{} func init() { createSecretOCICmd.Flags().StringVar(&secretOCIArgs.url, "url", "", "oci repository address e.g ghcr.io/stefanprodan/charts") createSecretOCICmd.Flags().StringVarP(&secretOCIArgs.username, "username", "u", "", "basic authentication username") - createSecretOCICmd.Flags().StringVarP(&secretOCIArgs.password, "password", "p", "", "basic authentication") + createSecretOCICmd.Flags().StringVarP(&secretOCIArgs.password, "password", "p", "", "basic authentication password") createSecretCmd.AddCommand(createSecretOCICmd) } From 41aac68193ef302c907c4df9595389ce41aa6759 Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Tue, 19 Jul 2022 19:25:47 +0100 Subject: [PATCH 197/818] Add link to kubectl repo Signed-off-by: Somtochi Onyekwere --- pkg/manifestgen/sourcesecret/sourcesecret.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pkg/manifestgen/sourcesecret/sourcesecret.go b/pkg/manifestgen/sourcesecret/sourcesecret.go index cbca1c73..87567168 100644 --- a/pkg/manifestgen/sourcesecret/sourcesecret.go +++ b/pkg/manifestgen/sourcesecret/sourcesecret.go @@ -38,6 +38,8 @@ import ( const defaultSSHPort = 22 +// types gotten from https://github.com/kubernetes/kubectl/blob/master/pkg/cmd/create/create_secret_docker.go#L64-L84 + // DockerConfigJSON represents a local docker auth config file // for pulling images. type DockerConfigJSON struct { @@ -53,6 +55,7 @@ type DockerConfig map[string]DockerConfigEntry type DockerConfigEntry struct { Username string `json:"username,omitempty"` Password string `json:"password,omitempty"` + Email string `json:"email,omitempty"` Auth string `json:"auth,omitempty"` } From 69e26ca1d945c90a52256e010e56284bc55284db Mon Sep 17 00:00:00 2001 From: Kingdon Barrett Date: Tue, 2 Aug 2022 16:36:49 -0400 Subject: [PATCH 198/818] Pull artifact not push artifact Fixup docs string to match pull command Signed-off-by: Kingdon Barrett --- cmd/flux/pull_artifact.go | 2 +- go.mod | 25 +++++++++++++++++++++---- go.sum | 8 ++++---- 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/cmd/flux/pull_artifact.go b/cmd/flux/pull_artifact.go index 382cdc69..3178f7fa 100644 --- a/cmd/flux/pull_artifact.go +++ b/cmd/flux/pull_artifact.go @@ -28,7 +28,7 @@ import ( var pullArtifactCmd = &cobra.Command{ Use: "artifact", - Short: "Push artifact", + Short: "Pull artifact", Long: `The pull artifact command downloads and extracts the OCI artifact content to the given path. The pull command uses the credentials from '~/.docker/config.json'.`, Example: `# Pull an OCI artifact created by flux from GHCR diff --git a/go.mod b/go.mod index cbd12b61..b86f16f5 100644 --- a/go.mod +++ b/go.mod @@ -6,6 +6,7 @@ require ( github.com/Masterminds/semver/v3 v3.1.1 github.com/ProtonMail/go-crypto v0.0.0-20220517143526-88bb52951d5b github.com/cyphar/filepath-securejoin v0.2.3 + github.com/distribution/distribution/v3 v3.0.0-20220729163034-26163d82560f github.com/fluxcd/go-git-providers v0.6.0 github.com/fluxcd/helm-controller/api v0.22.2 github.com/fluxcd/image-automation-controller/api v0.23.5 @@ -19,7 +20,7 @@ require ( github.com/fluxcd/pkg/ssh v0.5.0 github.com/fluxcd/pkg/untar v0.1.0 github.com/fluxcd/pkg/version v0.1.0 - github.com/fluxcd/source-controller/api v0.25.11 + github.com/fluxcd/source-controller/api v0.25.10-0.20220803075204-d95db9403032 github.com/go-git/go-git/v5 v5.4.2 github.com/gonvenience/bunt v1.3.4 github.com/gonvenience/ytbx v1.4.4 @@ -32,6 +33,7 @@ require ( github.com/mattn/go-shellwords v1.0.12 github.com/olekukonko/tablewriter v0.0.5 github.com/onsi/gomega v1.19.0 + github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 github.com/spf13/cobra v1.4.0 github.com/spf13/pflag v1.0.5 github.com/theckman/yacspin v0.13.12 @@ -57,8 +59,8 @@ require ( cloud.google.com/go v0.99.0 // indirect github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect github.com/Azure/go-autorest v14.2.0+incompatible // indirect - github.com/Azure/go-autorest/autorest v0.11.18 // indirect - github.com/Azure/go-autorest/autorest/adal v0.9.13 // indirect + github.com/Azure/go-autorest/autorest v0.11.24 // indirect + github.com/Azure/go-autorest/autorest/adal v0.9.18 // indirect github.com/Azure/go-autorest/autorest/date v0.3.0 // indirect github.com/Azure/go-autorest/logger v0.2.1 // indirect github.com/Azure/go-autorest/tracing v0.6.0 // indirect @@ -67,8 +69,13 @@ require ( github.com/Microsoft/go-winio v0.5.2 // indirect github.com/PuerkitoBio/purell v1.1.1 // indirect github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect + github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d // indirect github.com/acomagu/bufpipe v1.0.3 // indirect github.com/beorn7/perks v1.0.1 // indirect + github.com/bshuster-repo/logrus-logstash-hook v1.0.0 // indirect + github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd // indirect + github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b // indirect + github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5 // indirect github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e // indirect @@ -79,15 +86,18 @@ require ( github.com/docker/distribution v2.8.1+incompatible // indirect github.com/docker/docker v20.10.16+incompatible // indirect github.com/docker/docker-credential-helpers v0.6.4 // indirect + github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c // indirect + github.com/docker/go-metrics v0.0.1 // indirect + github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1 // indirect github.com/drone/envsubst/v2 v2.0.0-20210730161058-179042472c46 // indirect github.com/emicklei/go-restful v2.9.5+incompatible // indirect github.com/emirpasic/gods v1.12.0 // indirect github.com/evanphx/json-patch v4.12.0+incompatible // indirect github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d // indirect github.com/fatih/color v1.13.0 // indirect + github.com/felixge/httpsnoop v1.0.1 // indirect github.com/fluxcd/pkg/apis/acl v0.0.3 // indirect github.com/fluxcd/pkg/apis/kustomize v0.4.2 // indirect - github.com/form3tech-oss/jwt-go v3.2.3+incompatible // indirect github.com/fsnotify/fsnotify v1.5.1 // indirect github.com/go-errors/errors v1.0.1 // indirect github.com/go-git/gcfg v1.5.0 // indirect @@ -97,8 +107,10 @@ require ( github.com/go-openapi/jsonreference v0.19.5 // indirect github.com/go-openapi/swag v0.19.14 // indirect github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang-jwt/jwt/v4 v4.2.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.2 // indirect + github.com/gomodule/redigo v1.8.2 // indirect github.com/gonvenience/neat v1.3.10 // indirect github.com/gonvenience/term v1.0.2 // indirect github.com/gonvenience/text v1.0.7 // indirect @@ -110,6 +122,8 @@ require ( github.com/google/gofuzz v1.2.0 // indirect github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect github.com/google/uuid v1.3.0 // indirect + github.com/gorilla/handlers v1.5.1 // indirect + github.com/gorilla/mux v1.8.0 // indirect github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 // indirect github.com/hashicorp/errwrap v1.0.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect @@ -157,6 +171,9 @@ require ( github.com/xanzy/go-gitlab v0.58.0 // indirect github.com/xanzy/ssh-agent v0.3.0 // indirect github.com/xlab/treeprint v0.0.0-20181112141820-a009c3971eca // indirect + github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43 // indirect + github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50 // indirect + github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f // indirect go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 // indirect golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2 // indirect golang.org/x/oauth2 v0.0.0-20220524215830-622c5d57e401 // indirect diff --git a/go.sum b/go.sum index 83432bf9..7d33a4b0 100644 --- a/go.sum +++ b/go.sum @@ -224,8 +224,8 @@ github.com/daviddengcn/go-colortext v0.0.0-20160507010035-511bcaf42ccd/go.mod h1 github.com/denis-tingajkin/go-header v0.4.2/go.mod h1:eLRHAVXzE5atsKAnNRDB90WHCFFnBUn4RN0nRcs1LJA= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= -github.com/distribution/distribution/v3 v3.0.0-20220702071910-8857a1948739 h1:fOBqIwS8s+ircSm/N6VQcIZPaFoomoAWgxwG2Ssp15I= -github.com/distribution/distribution/v3 v3.0.0-20220702071910-8857a1948739/go.mod h1:28YO/VJk9/64+sTGNuYaBjWxrXTPrj0C0XmgTIOjxX4= +github.com/distribution/distribution/v3 v3.0.0-20220729163034-26163d82560f h1:3NCYdjXycNd/Xn/iICZzmxkiDX1e1cjTHjbMAz+wRVk= +github.com/distribution/distribution/v3 v3.0.0-20220729163034-26163d82560f/go.mod h1:28YO/VJk9/64+sTGNuYaBjWxrXTPrj0C0XmgTIOjxX4= github.com/docker/cli v20.10.16+incompatible h1:aLQ8XowgKpR3/IysPj8qZQJBVQ+Qws61icFuZl6iKYs= github.com/docker/cli v20.10.16+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68= @@ -308,8 +308,8 @@ github.com/fluxcd/pkg/untar v0.1.0 h1:k97V/xV5hFrAkIkVPuv5AVhyxh1ZzzAKba/lbDfGo6 github.com/fluxcd/pkg/untar v0.1.0/go.mod h1:aGswNyzB1mlz/T/kpOS58mITBMxMKc9tlJBH037A2HY= github.com/fluxcd/pkg/version v0.1.0 h1:v+SmCanmCB5Tj2Cx9TXlj+kNRfPGbAvirkeqsp7ZEAQ= github.com/fluxcd/pkg/version v0.1.0/go.mod h1:V7Z/w8dxLQzv0FHqa5ox5TeyOd2zOd49EeuWFgnwyj4= -github.com/fluxcd/source-controller/api v0.25.11 h1:1YbH5vlQ1k96tbRKTdQHCBsBVMgpp/QaRpKG/r29koQ= -github.com/fluxcd/source-controller/api v0.25.11/go.mod h1:5kihSWjg+gIXLPTTXbe6AnY+g+iDmP+CY4g6nFqublc= +github.com/fluxcd/source-controller/api v0.25.10-0.20220803075204-d95db9403032 h1:qJgj+/LGV4bjxutw5ENVLHgAe1MpdfMASC00Qb75NIY= +github.com/fluxcd/source-controller/api v0.25.10-0.20220803075204-d95db9403032/go.mod h1:1W0Xx/GpZ14Z/sOltxjsQKXeCv8zxAqSivbX9e4s+H8= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= From 08401f62b2ad7b4573cb85847a56c35288aa530f Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 3 Aug 2022 11:53:28 +0300 Subject: [PATCH 199/818] Add OCI provider arg Signed-off-by: Stefan Prodan --- cmd/flux/create_source_oci.go | 14 ++++- internal/flags/source_bucket_provider.go | 7 ++- internal/flags/source_oci_provider.go | 62 +++++++++++++++++++ .../source-controller/kustomization.yaml | 2 +- 4 files changed, 81 insertions(+), 4 deletions(-) create mode 100644 internal/flags/source_oci_provider.go diff --git a/cmd/flux/create_source_oci.go b/cmd/flux/create_source_oci.go index 57d1a472..2481fe7d 100644 --- a/cmd/flux/create_source_oci.go +++ b/cmd/flux/create_source_oci.go @@ -33,6 +33,7 @@ import ( sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + "github.com/fluxcd/flux2/internal/flags" "github.com/fluxcd/flux2/internal/utils" ) @@ -58,11 +59,19 @@ type sourceOCIRepositoryFlags struct { serviceAccount string certSecretRef string ignorePaths []string + provider flags.SourceOCIProvider } -var sourceOCIRepositoryArgs = sourceOCIRepositoryFlags{} +var sourceOCIRepositoryArgs = newSourceOCIFlags() + +func newSourceOCIFlags() sourceOCIRepositoryFlags { + return sourceOCIRepositoryFlags{ + provider: flags.SourceOCIProvider(sourcev1.GenericOCIProvider), + } +} func init() { + createSourceOCIRepositoryCmd.Flags().Var(&sourceOCIRepositoryArgs.provider, "provider", sourceBucketArgs.provider.Description()) createSourceOCIRepositoryCmd.Flags().StringVar(&sourceOCIRepositoryArgs.url, "url", "", "the OCI repository URL") createSourceOCIRepositoryCmd.Flags().StringVar(&sourceOCIRepositoryArgs.tag, "tag", "", "the OCI artifact tag") createSourceOCIRepositoryCmd.Flags().StringVar(&sourceOCIRepositoryArgs.semver, "tag-semver", "", "the OCI artifact tag semver range") @@ -104,7 +113,8 @@ func createSourceOCIRepositoryCmdRun(cmd *cobra.Command, args []string) error { Labels: sourceLabels, }, Spec: sourcev1.OCIRepositorySpec{ - URL: sourceOCIRepositoryArgs.url, + Provider: sourceOCIRepositoryArgs.provider.String(), + URL: sourceOCIRepositoryArgs.url, Interval: metav1.Duration{ Duration: createArgs.interval, }, diff --git a/internal/flags/source_bucket_provider.go b/internal/flags/source_bucket_provider.go index f5c62c71..6e2bfaa5 100644 --- a/internal/flags/source_bucket_provider.go +++ b/internal/flags/source_bucket_provider.go @@ -24,7 +24,12 @@ import ( sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" ) -var supportedSourceBucketProviders = []string{sourcev1.GenericBucketProvider, sourcev1.AmazonBucketProvider} +var supportedSourceBucketProviders = []string{ + sourcev1.GenericBucketProvider, + sourcev1.AmazonBucketProvider, + sourcev1.AzureBucketProvider, + sourcev1.GoogleBucketProvider, +} type SourceBucketProvider string diff --git a/internal/flags/source_oci_provider.go b/internal/flags/source_oci_provider.go new file mode 100644 index 00000000..5f5067ab --- /dev/null +++ b/internal/flags/source_oci_provider.go @@ -0,0 +1,62 @@ +/* +Copyright 2022 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package flags + +import ( + "fmt" + "strings" + + "github.com/fluxcd/flux2/internal/utils" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" +) + +var supportedSourceOCIProviders = []string{ + sourcev1.GenericOCIProvider, + sourcev1.AmazonOCIProvider, + sourcev1.AzureOCIProvider, + sourcev1.GoogleOCIProvider, +} + +type SourceOCIProvider string + +func (p *SourceOCIProvider) String() string { + return string(*p) +} + +func (p *SourceOCIProvider) Set(str string) error { + if strings.TrimSpace(str) == "" { + return fmt.Errorf("no source OCI provider given, please specify %s", + p.Description()) + } + if !utils.ContainsItemString(supportedSourceOCIProviders, str) { + return fmt.Errorf("source OCI provider '%s' is not supported, must be one of: %v", + str, strings.Join(supportedSourceOCIProviders, ", ")) + } + *p = SourceOCIProvider(str) + return nil +} + +func (p *SourceOCIProvider) Type() string { + return "sourceOCIProvider" +} + +func (p *SourceOCIProvider) Description() string { + return fmt.Sprintf( + "the OCI provider name, available options are: (%s)", + strings.Join(supportedSourceOCIProviders, ", "), + ) +} diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index 921ebff1..2e882ada 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -15,4 +15,4 @@ patchesJson6902: # TODO: remove the hardcoded image when OCIRepository is released images: - name: fluxcd/source-controller - newTag: oci-102e9a94 + newTag: oci-d95db940 From 7c7e76f9f0b8f9226eba3e3125f58de40a2a0bd6 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 3 Aug 2022 12:55:50 +0300 Subject: [PATCH 200/818] Use fluxcd/pkg/oci/client Signed-off-by: Stefan Prodan --- cmd/flux/build_artifact.go | 5 +- cmd/flux/list_artifact.go | 11 +- cmd/flux/pull_artifact.go | 5 +- cmd/flux/push_artifact.go | 5 +- cmd/flux/tag_artifact.go | 7 +- go.mod | 60 +++----- go.sum | 97 ++++++------ internal/oci/build.go | 139 ------------------ internal/oci/build_test.go | 44 ------ internal/oci/list.go | 75 ---------- internal/oci/list_test.go | 68 --------- internal/oci/meta.go | 61 -------- internal/oci/pull.go | 75 ---------- internal/oci/push.go | 81 ---------- internal/oci/push_pull_test.go | 72 --------- internal/oci/suite_test.go | 86 ----------- internal/oci/tag.go | 40 ----- internal/oci/tag_test.go | 46 ------ internal/oci/testdata/build/deployment.yaml | 21 --- internal/oci/testdata/build/somedir/repo.yaml | 8 - internal/oci/url.go | 54 ------- 21 files changed, 88 insertions(+), 972 deletions(-) delete mode 100644 internal/oci/build.go delete mode 100644 internal/oci/build_test.go delete mode 100644 internal/oci/list.go delete mode 100644 internal/oci/list_test.go delete mode 100644 internal/oci/meta.go delete mode 100644 internal/oci/pull.go delete mode 100644 internal/oci/push.go delete mode 100644 internal/oci/push_pull_test.go delete mode 100644 internal/oci/suite_test.go delete mode 100644 internal/oci/tag.go delete mode 100644 internal/oci/tag_test.go delete mode 100644 internal/oci/testdata/build/deployment.yaml delete mode 100644 internal/oci/testdata/build/somedir/repo.yaml delete mode 100644 internal/oci/url.go diff --git a/cmd/flux/build_artifact.go b/cmd/flux/build_artifact.go index 83aa30ea..a2b6eaa4 100644 --- a/cmd/flux/build_artifact.go +++ b/cmd/flux/build_artifact.go @@ -22,7 +22,7 @@ import ( "github.com/spf13/cobra" - "github.com/fluxcd/flux2/internal/oci" + oci "github.com/fluxcd/pkg/oci/client" ) var buildArtifactCmd = &cobra.Command{ @@ -59,7 +59,8 @@ func buildArtifactCmdRun(cmd *cobra.Command, args []string) error { logger.Actionf("building artifact from %s", buildArtifactArgs.path) - if err := oci.Build(buildArtifactArgs.output, buildArtifactArgs.path); err != nil { + ociClient := oci.NewLocalClient() + if err := ociClient.Build(buildArtifactArgs.output, buildArtifactArgs.path); err != nil { return fmt.Errorf("bulding artifact failed, error: %w", err) } diff --git a/cmd/flux/list_artifact.go b/cmd/flux/list_artifact.go index e499fc73..6632c1a3 100644 --- a/cmd/flux/list_artifact.go +++ b/cmd/flux/list_artifact.go @@ -19,9 +19,12 @@ package main import ( "context" "fmt" - "github.com/fluxcd/flux2/internal/oci" - "github.com/fluxcd/flux2/pkg/printers" + "github.com/spf13/cobra" + + oci "github.com/fluxcd/pkg/oci/client" + + "github.com/fluxcd/flux2/pkg/printers" ) var listArtifactsCmd = &cobra.Command{ @@ -48,12 +51,13 @@ func listArtifactsCmdRun(cmd *cobra.Command, args []string) error { ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) defer cancel() + ociClient := oci.NewLocalClient() url, err := oci.ParseArtifactURL(ociURL) if err != nil { return err } - metas, err := oci.List(ctx, url) + metas, err := ociClient.List(ctx, url) if err != nil { return err } @@ -69,5 +73,4 @@ func listArtifactsCmdRun(cmd *cobra.Command, args []string) error { } return nil - } diff --git a/cmd/flux/pull_artifact.go b/cmd/flux/pull_artifact.go index 3178f7fa..7f508e53 100644 --- a/cmd/flux/pull_artifact.go +++ b/cmd/flux/pull_artifact.go @@ -23,7 +23,7 @@ import ( "github.com/spf13/cobra" - "github.com/fluxcd/flux2/internal/oci" + oci "github.com/fluxcd/pkg/oci/client" ) var pullArtifactCmd = &cobra.Command{ @@ -62,6 +62,7 @@ func pullArtifactCmdRun(cmd *cobra.Command, args []string) error { return fmt.Errorf("invalid output path %s", pullArtifactArgs.output) } + ociClient := oci.NewLocalClient() url, err := oci.ParseArtifactURL(ociURL) if err != nil { return err @@ -72,7 +73,7 @@ func pullArtifactCmdRun(cmd *cobra.Command, args []string) error { logger.Actionf("pulling artifact from %s", url) - meta, err := oci.Pull(ctx, url, pullArtifactArgs.output) + meta, err := ociClient.Pull(ctx, url, pullArtifactArgs.output) if err != nil { return err } diff --git a/cmd/flux/push_artifact.go b/cmd/flux/push_artifact.go index 49f61202..f16ee98d 100644 --- a/cmd/flux/push_artifact.go +++ b/cmd/flux/push_artifact.go @@ -23,7 +23,7 @@ import ( "github.com/spf13/cobra" - "github.com/fluxcd/flux2/internal/oci" + oci "github.com/fluxcd/pkg/oci/client" ) var pushArtifactCmd = &cobra.Command{ @@ -73,6 +73,7 @@ func pushArtifactCmdRun(cmd *cobra.Command, args []string) error { return fmt.Errorf("invalid path %q", pushArtifactArgs.path) } + ociClient := oci.NewLocalClient() url, err := oci.ParseArtifactURL(ociURL) if err != nil { return err @@ -92,7 +93,7 @@ func pushArtifactCmdRun(cmd *cobra.Command, args []string) error { logger.Actionf("pushing artifact to %s", url) - digest, err := oci.Push(ctx, url, pushArtifactArgs.path, meta) + digest, err := ociClient.Push(ctx, url, pushArtifactArgs.path, meta) if err != nil { return fmt.Errorf("pushing artifact failed: %w", err) } diff --git a/cmd/flux/tag_artifact.go b/cmd/flux/tag_artifact.go index 2004cebc..4f82bf7f 100644 --- a/cmd/flux/tag_artifact.go +++ b/cmd/flux/tag_artifact.go @@ -19,8 +19,10 @@ package main import ( "context" "fmt" - "github.com/fluxcd/flux2/internal/oci" + "github.com/spf13/cobra" + + oci "github.com/fluxcd/pkg/oci/client" ) var tagArtifactCmd = &cobra.Command{ @@ -55,6 +57,7 @@ func tagArtifactCmdRun(cmd *cobra.Command, args []string) error { return fmt.Errorf("--tag is required") } + ociClient := oci.NewLocalClient() url, err := oci.ParseArtifactURL(ociURL) if err != nil { return err @@ -66,7 +69,7 @@ func tagArtifactCmdRun(cmd *cobra.Command, args []string) error { logger.Actionf("tagging artifact") for _, tag := range tagArtifactArgs.tags { - img, err := oci.Tag(ctx, url, tag) + img, err := ociClient.Tag(ctx, url, tag) if err != nil { return fmt.Errorf("tagging artifact failed: %w", err) } diff --git a/go.mod b/go.mod index b86f16f5..9a8e80f8 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,6 @@ require ( github.com/Masterminds/semver/v3 v3.1.1 github.com/ProtonMail/go-crypto v0.0.0-20220517143526-88bb52951d5b github.com/cyphar/filepath-securejoin v0.2.3 - github.com/distribution/distribution/v3 v3.0.0-20220729163034-26163d82560f github.com/fluxcd/go-git-providers v0.6.0 github.com/fluxcd/helm-controller/api v0.22.2 github.com/fluxcd/image-automation-controller/api v0.23.5 @@ -15,6 +14,7 @@ require ( github.com/fluxcd/notification-controller/api v0.24.1 github.com/fluxcd/pkg/apis/meta v0.14.2 github.com/fluxcd/pkg/kustomize v0.5.2 + github.com/fluxcd/pkg/oci v0.2.0 github.com/fluxcd/pkg/runtime v0.16.2 github.com/fluxcd/pkg/ssa v0.17.0 github.com/fluxcd/pkg/ssh v0.5.0 @@ -25,7 +25,7 @@ require ( github.com/gonvenience/bunt v1.3.4 github.com/gonvenience/ytbx v1.4.4 github.com/google/go-cmp v0.5.8 - github.com/google/go-containerregistry v0.9.0 + github.com/google/go-containerregistry v0.10.0 github.com/hashicorp/go-multierror v1.1.1 github.com/homeport/dyff v1.5.4 github.com/lucasb-eyer/go-colorful v1.2.0 @@ -33,17 +33,16 @@ require ( github.com/mattn/go-shellwords v1.0.12 github.com/olekukonko/tablewriter v0.0.5 github.com/onsi/gomega v1.19.0 - github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 github.com/spf13/cobra v1.4.0 github.com/spf13/pflag v1.0.5 github.com/theckman/yacspin v0.13.12 golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e golang.org/x/term v0.0.0-20220526004731-065cf7ba2467 - k8s.io/api v0.24.1 - k8s.io/apiextensions-apiserver v0.24.1 - k8s.io/apimachinery v0.24.1 + k8s.io/api v0.24.2 + k8s.io/apiextensions-apiserver v0.24.2 + k8s.io/apimachinery v0.24.2 k8s.io/cli-runtime v0.24.1 - k8s.io/client-go v0.24.1 + k8s.io/client-go v0.24.2 k8s.io/kubectl v0.24.1 sigs.k8s.io/cli-utils v0.31.2 sigs.k8s.io/controller-runtime v0.11.2 @@ -67,35 +66,24 @@ require ( github.com/BurntSushi/toml v1.0.0 // indirect github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd // indirect github.com/Microsoft/go-winio v0.5.2 // indirect - github.com/PuerkitoBio/purell v1.1.1 // indirect - github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect - github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d // indirect github.com/acomagu/bufpipe v1.0.3 // indirect github.com/beorn7/perks v1.0.1 // indirect - github.com/bshuster-repo/logrus-logstash-hook v1.0.0 // indirect - github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd // indirect - github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b // indirect - github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5 // indirect github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e // indirect github.com/containerd/stargz-snapshotter/estargz v0.11.4 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect - github.com/docker/cli v20.10.16+incompatible // indirect + github.com/docker/cli v20.10.17+incompatible // indirect github.com/docker/distribution v2.8.1+incompatible // indirect - github.com/docker/docker v20.10.16+incompatible // indirect + github.com/docker/docker v20.10.17+incompatible // indirect github.com/docker/docker-credential-helpers v0.6.4 // indirect - github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c // indirect - github.com/docker/go-metrics v0.0.1 // indirect - github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1 // indirect github.com/drone/envsubst/v2 v2.0.0-20210730161058-179042472c46 // indirect - github.com/emicklei/go-restful v2.9.5+incompatible // indirect + github.com/emicklei/go-restful v2.15.0+incompatible // indirect github.com/emirpasic/gods v1.12.0 // indirect github.com/evanphx/json-patch v4.12.0+incompatible // indirect github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d // indirect github.com/fatih/color v1.13.0 // indirect - github.com/felixge/httpsnoop v1.0.1 // indirect github.com/fluxcd/pkg/apis/acl v0.0.3 // indirect github.com/fluxcd/pkg/apis/kustomize v0.4.2 // indirect github.com/fsnotify/fsnotify v1.5.1 // indirect @@ -104,26 +92,23 @@ require ( github.com/go-git/go-billy/v5 v5.3.1 // indirect github.com/go-logr/logr v1.2.3 // indirect github.com/go-openapi/jsonpointer v0.19.5 // indirect - github.com/go-openapi/jsonreference v0.19.5 // indirect - github.com/go-openapi/swag v0.19.14 // indirect + github.com/go-openapi/jsonreference v0.20.0 // indirect + github.com/go-openapi/swag v0.21.1 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang-jwt/jwt/v4 v4.2.0 // indirect + github.com/golang-jwt/jwt/v4 v4.4.1 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.2 // indirect - github.com/gomodule/redigo v1.8.2 // indirect github.com/gonvenience/neat v1.3.10 // indirect github.com/gonvenience/term v1.0.2 // indirect github.com/gonvenience/text v1.0.7 // indirect github.com/gonvenience/wrap v1.1.1 // indirect github.com/google/btree v1.0.1 // indirect - github.com/google/gnostic v0.5.7-v3refs // indirect + github.com/google/gnostic v0.6.9 // indirect github.com/google/go-github/v42 v42.0.0 // indirect github.com/google/go-querystring v1.1.0 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect github.com/google/uuid v1.3.0 // indirect - github.com/gorilla/handlers v1.5.1 // indirect - github.com/gorilla/mux v1.8.0 // indirect github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 // indirect github.com/hashicorp/errwrap v1.0.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect @@ -136,7 +121,7 @@ require ( github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351 // indirect github.com/klauspost/compress v1.15.4 // indirect github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect - github.com/mailru/easyjson v0.7.6 // indirect + github.com/mailru/easyjson v0.7.7 // indirect github.com/mattn/go-ciede2000 v0.0.0-20170301095244-782e8c62fec3 // indirect github.com/mattn/go-colorable v0.1.12 // indirect github.com/mattn/go-isatty v0.0.14 // indirect @@ -164,21 +149,18 @@ require ( github.com/russross/blackfriday v1.6.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/sergi/go-diff v1.2.0 // indirect - github.com/sirupsen/logrus v1.8.1 // indirect + github.com/sirupsen/logrus v1.9.0 // indirect github.com/texttheater/golang-levenshtein v1.0.1 // indirect github.com/vbatts/tar-split v0.11.2 // indirect github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74 // indirect github.com/xanzy/go-gitlab v0.58.0 // indirect github.com/xanzy/ssh-agent v0.3.0 // indirect github.com/xlab/treeprint v0.0.0-20181112141820-a009c3971eca // indirect - github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43 // indirect - github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50 // indirect - github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f // indirect go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 // indirect - golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2 // indirect - golang.org/x/oauth2 v0.0.0-20220524215830-622c5d57e401 // indirect + golang.org/x/net v0.0.0-20220708220712-1185a9018129 // indirect + golang.org/x/oauth2 v0.0.0-20220718184931-c8730f7fcb92 // indirect golang.org/x/sync v0.0.0-20220513210516-0976fa681c29 // indirect - golang.org/x/sys v0.0.0-20220513210249-45d2b4557a2a // indirect + golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 // indirect golang.org/x/text v0.3.7 // indirect golang.org/x/time v0.0.0-20220411224347-583f2d630306 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect @@ -188,10 +170,10 @@ require ( gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/component-base v0.24.1 // indirect + k8s.io/component-base v0.24.2 // indirect k8s.io/klog/v2 v2.60.1 // indirect - k8s.io/kube-openapi v0.0.0-20220401212409-b28bf2818661 // indirect + k8s.io/kube-openapi v0.0.0-20220413171646-5e7f5fdc6da6 // indirect k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9 // indirect - sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2 // indirect + sigs.k8s.io/json v0.0.0-20220525155127-227cbc7cc124 // indirect sigs.k8s.io/structured-merge-diff/v4 v4.2.1 // indirect ) diff --git a/go.sum b/go.sum index 7d33a4b0..b38fa82b 100644 --- a/go.sum +++ b/go.sum @@ -100,12 +100,9 @@ github.com/OpenPeeDeeP/depguard v1.0.1/go.mod h1:xsIw86fROiiwelg+jB2uM9PiKihMMmU github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= github.com/ProtonMail/go-crypto v0.0.0-20220517143526-88bb52951d5b h1:lcbBNuQhppsc7A5gjdHmdlqUqJfgGMylBdGyDs0j7G8= github.com/ProtonMail/go-crypto v0.0.0-20220517143526-88bb52951d5b/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= -github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d h1:UrqY+r/OJnIp5u0s1SbQ8dVfLCZJsnvazdBP5hS4iRs= -github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ= github.com/StackExchange/wmi v1.2.1/go.mod h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8= github.com/acomagu/bufpipe v1.0.3 h1:fxAGrHZTgQ9w5QqVItgzwj235/uYZYgbXitB+dLupOk= github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= @@ -144,7 +141,6 @@ github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+Ce github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bitly/go-simplejson v0.5.0 h1:6IH+V8/tVMab511d5bn4M7EwGXZf9Hj6i2xSwkNEM+Y= github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= github.com/bkielbasa/cyclop v1.2.0/go.mod h1:qOI0yy6A7dYC4Zgsa72Ppm9kONl0RoIlPbzot9mhmeI= @@ -153,13 +149,10 @@ github.com/blizzy78/varnamelen v0.3.0/go.mod h1:hbwRdBvoBqxk34XyQ6HA0UH3G0/1TKuv github.com/bombsimon/wsl/v3 v3.3.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc= github.com/breml/bidichk v0.1.1/go.mod h1:zbfeitpevDUGI7V91Uzzuwrn4Vls8MoBMrwtt78jmso= github.com/bshuster-repo/logrus-logstash-hook v1.0.0 h1:e+C0SB5R1pu//O4MQ3f9cFuPGoOVeF2fE4Og9otCc70= -github.com/bshuster-repo/logrus-logstash-hook v1.0.0/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk= +github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd h1:rFt+Y/IK1aEZkEHchZRSq9OQbsSzIT/OrI8YFFmRIng= -github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8= github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b h1:otBG+dV+YK+Soembjv71DPz3uX/V/6MMlSyD9JBQ6kQ= -github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b/go.mod h1:obH5gd0BsqsP2LwDJ9aOkm/6J86V6lyAXCoQWGw3K50= github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0 h1:nvj0OLI3YqYXer/kZD8Ri1aaunCxIEsOst1BVJswV0o= -github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE= github.com/butuzov/ireturn v0.1.1/go.mod h1:Wh6Zl3IMtTpaIKbmwzqi6olnM9ptYQxxVacMsOEFPoc= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/certifi/gocertifi v0.0.0-20191021191039-0944d244cd40/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= @@ -225,21 +218,17 @@ github.com/denis-tingajkin/go-header v0.4.2/go.mod h1:eLRHAVXzE5atsKAnNRDB90WHCF github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/distribution/distribution/v3 v3.0.0-20220729163034-26163d82560f h1:3NCYdjXycNd/Xn/iICZzmxkiDX1e1cjTHjbMAz+wRVk= -github.com/distribution/distribution/v3 v3.0.0-20220729163034-26163d82560f/go.mod h1:28YO/VJk9/64+sTGNuYaBjWxrXTPrj0C0XmgTIOjxX4= -github.com/docker/cli v20.10.16+incompatible h1:aLQ8XowgKpR3/IysPj8qZQJBVQ+Qws61icFuZl6iKYs= -github.com/docker/cli v20.10.16+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/cli v20.10.17+incompatible h1:eO2KS7ZFeov5UJeaDmIs1NFEDRf32PaqRpvoEkKBy5M= +github.com/docker/cli v20.10.17+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68= github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v20.10.16+incompatible h1:2Db6ZR/+FUR3hqPMwnogOPHFn405crbpxvWzKovETOQ= -github.com/docker/docker v20.10.16+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v20.10.17+incompatible h1:JYCuMrWaVNophQTOrMMoSwudOVEfcegoZZrleKc1xwE= +github.com/docker/docker v20.10.17+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker-credential-helpers v0.6.4 h1:axCks+yV+2MR3/kZhAmy07yC56WZ2Pwu/fKWtKuZB0o= github.com/docker/docker-credential-helpers v0.6.4/go.mod h1:ofX3UI0Gz1TteYBjtgs07O36Pyasyp66D2uKT7H8W1c= github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c h1:+pKlWGMw7gf6bQ+oDZB4KHQFypsfjYlq/C4rfL7D3g8= -github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= github.com/docker/go-metrics v0.0.1 h1:AgB/0SvBxihN0X8OR4SjsblXkbMvalQ8cjmtKQ2rQV8= -github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw= github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1 h1:ZClxb8laGDf5arXfYcAtECDFgAgHklGI8CxgjHnXKJ4= -github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/drone/envsubst/v2 v2.0.0-20210730161058-179042472c46 h1:7QPwrLT79GlD5sizHf27aoY2RTvw62mO6x7mxkScNk0= github.com/drone/envsubst/v2 v2.0.0-20210730161058-179042472c46/go.mod h1:esf2rsHFNlZlxsqsZDojNBcnNs5REqIvRrWRHqX0vEU= @@ -248,8 +237,9 @@ github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25Kn github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153 h1:yUdfgN0XgIJw7foRItutHYUIhlcKzcSf5vDpdhQAKTc= github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= 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 h1:spTtZBk5DYEvbxMVutUuTyh1Ao2r4iyvLdACqsl/Ljk= github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= +github.com/emicklei/go-restful v2.15.0+incompatible h1:8KpYO/Xl/ZudZs5RNOEhWMBY4hmzlZhhRd9cu+jrZP4= +github.com/emicklei/go-restful v2.15.0+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg= github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= @@ -278,6 +268,7 @@ github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYF github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= github.com/felixge/httpsnoop v1.0.1 h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8SPQ= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0= github.com/fluxcd/go-git-providers v0.6.0 h1:XJc3MTYFpuahBSoKTVxmH9OBPCeIyvYoQkTjTqa3fH4= github.com/fluxcd/go-git-providers v0.6.0/go.mod h1:UMFHnMCIO9CBpEln7ZsArEWyXSNxTpm76fyQxUmClrc= github.com/fluxcd/helm-controller/api v0.22.2 h1:nh0GZBsUE0gNzm4PmPa4aOoqYlbZbpGt2pcIL9S2184= @@ -298,6 +289,8 @@ github.com/fluxcd/pkg/apis/meta v0.14.2 h1:/Hf7I/Vz01vv3m7Qx7DtQvrzAL1oVt0MJcLb/ github.com/fluxcd/pkg/apis/meta v0.14.2/go.mod h1:ijZ61VG/8T3U17gj0aFL3fdtZL+mulD6V8VrLLUCAgM= github.com/fluxcd/pkg/kustomize v0.5.2 h1:Nhaw/Tqwt588Cp4PYa83nj45t3mGgojMl23zhq/t/fM= github.com/fluxcd/pkg/kustomize v0.5.2/go.mod h1:X3Uls1l13giFPwig1NDoXvrF53yyXUemSyR3nYGw28s= +github.com/fluxcd/pkg/oci v0.2.0 h1:pvLF6iKmSj9u48Da7qlBDVIiH2NLOrbFUFE4Yr431Lc= +github.com/fluxcd/pkg/oci v0.2.0/go.mod h1:c1pj9E/G5927gSa6ooACAyZe+HwjgmPk9johL7oXDHw= github.com/fluxcd/pkg/runtime v0.16.2 h1:CexfMmJK+r12sHTvKWyAax0pcPomjd6VnaHXcxjUrRY= github.com/fluxcd/pkg/runtime v0.16.2/go.mod h1:OHSKsrO+T+Ym8WZRS2oidrnauWRARuE2nfm8ewevm7M= github.com/fluxcd/pkg/ssa v0.17.0 h1:iO4EQ+/xIbd79VKrh+8fvsAvq3RlmgAdWtnzOAUxD5s= @@ -359,11 +352,13 @@ github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34 github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= -github.com/go-openapi/jsonreference v0.19.5 h1:1WJP/wi4OjB4iV8KVbH73rQaoialJrqv8gitZLxGLtM= github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg= +github.com/go-openapi/jsonreference v0.20.0 h1:MYlu0sBgChmCfJxxUKZ8g1cPWFOB37YSZqewK7OKeyA= +github.com/go-openapi/jsonreference v0.20.0/go.mod h1:Ag74Ico3lPc+zR+qjn4XBUmXymS4zJbYVCZmcgkasdo= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-openapi/swag v0.19.14 h1:gm3vOOXfiuw5i9p5N9xJvfjvuofpyvLA9Wr6QfK5Fng= github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= +github.com/go-openapi/swag v0.21.1 h1:wm0rhTb5z7qpJRHBdPOMuY4QjVUMbF6/kwoYeRAOrKU= +github.com/go-openapi/swag v0.21.1/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= github.com/go-redis/redis v6.15.8+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= @@ -391,8 +386,9 @@ github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXP github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= -github.com/golang-jwt/jwt/v4 v4.2.0 h1:besgBTC8w8HjP6NzQdxwKH9Z5oQMZ24ThTrHp3cZ8eU= github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= +github.com/golang-jwt/jwt/v4 v4.4.1 h1:pC5DB52sCeK48Wlb9oPcdhnjkz1TKt1D/P7WKJ0kUcQ= +github.com/golang-jwt/jwt/v4 v4.4.1/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -443,7 +439,6 @@ github.com/golangci/revgrep v0.0.0-20210930125155-c22e5001d4f2/go.mod h1:LK+zW4M github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ= github.com/golangplus/testing v0.0.0-20180327235837-af21d9c3145e/go.mod h1:0AA//k/eakGydO4jKRoRL2j92ZKSzTgj9tclaCrvXHk= github.com/gomodule/redigo v1.8.2 h1:H5XSIre1MB5NbPYFp+i1NBbb5qN1W8Y8YAQoAYbkm8k= -github.com/gomodule/redigo v1.8.2/go.mod h1:P9dn9mFrCBvWhGE1wpxx6fgq7BAeLBk+UUUzlpkBYO0= github.com/gonvenience/bunt v1.3.4 h1:Row599Ohja2BPooaqd1tHYdTAKu6SWq7W/UeakTXddM= github.com/gonvenience/bunt v1.3.4/go.mod h1:j8eqHLBo8eWCCYuc34oFdlgyxL1rZ4ywYz4BZa4b09w= github.com/gonvenience/neat v1.3.10 h1:gHrVkQAvbUsZgnpEglPwsAJLPqSFQxOgfbB3FWLhmUo= @@ -464,8 +459,9 @@ github.com/google/cel-go v0.10.1/go.mod h1:U7ayypeSkw23szu4GaQTPJGx66c20mx8JklMS github.com/google/cel-spec v0.6.0/go.mod h1:Nwjgxy5CbjlPrtCWjeDjUyKMl8w41YBYGjsyDdqk0xA= github.com/google/certificate-transparency-go v1.0.21/go.mod h1:QeJfpSbVSfYc7RgB3gJFj9cbuQMMchQxrWXz8Ruopmg= github.com/google/certificate-transparency-go v1.1.1/go.mod h1:FDKqPvSXawb2ecErVRrD+nfy23RCzyl7eqVCEmlT1Zs= -github.com/google/gnostic v0.5.7-v3refs h1:FhTMOKj2VhjpouxvWJAV1TL304uMlb9zcDqkl6cEI54= github.com/google/gnostic v0.5.7-v3refs/go.mod h1:73MKFl6jIHelAJNaBGFzt3SPtZULs9dYrGFt8OiIsHQ= +github.com/google/gnostic v0.6.9 h1:ZK/5VhkoX835RikCHpSUJV9a+S3e1zLh59YnyWeBW+0= +github.com/google/gnostic v0.6.9/go.mod h1:Nm8234We1lq6iB9OmlgNv3nH91XLLVZHCDayfA3xq+E= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -480,8 +476,8 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-containerregistry v0.9.0 h1:5Ths7RjxyFV0huKChQTgY6fLzvHhZMpLTFNja8U0/0w= -github.com/google/go-containerregistry v0.9.0/go.mod h1:9eq4BnSufyT1kHNffX+vSXVonaJ7yaIOulrKZejMxnQ= +github.com/google/go-containerregistry v0.10.0 h1:qd/fv2nQajGZJenaNcdaghlwSPjQ0NphN9hzArr2WWg= +github.com/google/go-containerregistry v0.10.0/go.mod h1:C7uwbB1QUAtvnknyd3ethxJRd4gtEjU/9WLXzckfI1Y= github.com/google/go-github/v42 v42.0.0 h1:YNT0FwjPrEysRkLIiKuEfSvBPCGKphW5aS5PxwaoLec= github.com/google/go-github/v42 v42.0.0/go.mod h1:jgg/jvyI0YlDOM1/ps6XYh04HNQ3vKf0CVko62/EhRg= github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= @@ -530,7 +526,6 @@ github.com/gordonklaus/ineffassign v0.0.0-20200309095847-7953dde2c7bf/go.mod h1: github.com/gordonklaus/ineffassign v0.0.0-20210225214923-2e10b2664254/go.mod h1:M9mZEtGIsR1oDaZagNPNG9iq9n2HrhZ17dsXk73V3Lw= github.com/gorhill/cronexpr v0.0.0-20180427100037-88b0669f7d75/go.mod h1:g2644b03hfBX9Ov0ZBDgXXens4rxSxmqFBbhvKv2yVA= github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= -github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= @@ -695,8 +690,9 @@ github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPK github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= -github.com/mailru/easyjson v0.7.6 h1:8yTIVnZgCoiM1TgqoeTl+LfU5Jg6/xL3QhGQnimLYnA= github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= +github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/manifoldco/promptui v0.9.0 h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA= github.com/manifoldco/promptui v0.9.0/go.mod h1:ka04sppxSGFAtxX0qhlYQjISsg9mR4GWtQEhdbn6Pgg= github.com/maratori/testpackage v1.0.1/go.mod h1:ddKdw+XG0Phzhx8BFDTKgpWP4i7MpApTE5fXSKAqwDU= @@ -763,7 +759,6 @@ github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:F github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.4.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f h1:2+myh5ml7lgEU/51gbeLHfKGNfgEQQIWrlbdaOsidbQ= github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/moby/spdystream v0.2.0 h1:cjW1zVyyoiM0T7b6UoySUFqzXMoqRckQtXwGPiBhOM8= @@ -840,7 +835,6 @@ github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+v github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d/go.mod h1:3OzsM7FXDQlpCiw2j81fOmAwQLnZnLGXVKUzeKQXIAw= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= -github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -856,7 +850,6 @@ github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prY github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_golang v1.12.1 h1:ZiaPsmm9uiBeaSMRznKsCDNtPCS0T3JVDGF+06gjBzk= @@ -869,7 +862,6 @@ github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6T github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.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.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= github.com/prometheus/common v0.32.1 h1:hWIdL3N2HoUx3B8j3YN9mWor0qhY/NlEKZEaXxuIRh4= @@ -877,7 +869,6 @@ github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+ github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= @@ -926,8 +917,9 @@ github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMB github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= +github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/sivchari/tenv v1.4.7/go.mod h1:5nF+bITvkebQVanjU6IuMbvIot/7ReNsUV7I5NbprB0= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= @@ -1034,11 +1026,8 @@ github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1 github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43 h1:+lm10QQTNSBd8DVTNGHx7o/IKu9HYDvLMffDhbyLccI= -github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43/go.mod h1:aX5oPXxHm3bOH+xeAttToC8pqch2ScQN/JoXYupl6xs= github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50 h1:hlE8//ciYMztlGpl/VA+Zm1AcTPHYkHJPbHqE6WJUXE= -github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50/go.mod h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96TguQh0+r/ssA= github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f h1:ERexzlUfuTvpE74urLSbIQW0Z/6hF9t8U4NsJLaioAY= -github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.4/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= @@ -1212,8 +1201,8 @@ golang.org/x/net v0.0.0-20210825183410-e898025ed96a/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2 h1:NWy5+hlRbC7HK+PmcXVUmW1IMyFce7to56IUvhUFm7Y= -golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220708220712-1185a9018129 h1:vucSRfWwTsoXro7P+3Cjlr6flUMtzCwzlvkxEQtHHB0= +golang.org/x/net v0.0.0-20220708220712-1185a9018129/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= 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= @@ -1231,8 +1220,8 @@ golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20220524215830-622c5d57e401 h1:zwrSfklXn0gxyLRX/aR+q6cgHbV/ItVyzbPlbA+dkAw= -golang.org/x/oauth2 v0.0.0-20220524215830-622c5d57e401/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220718184931-c8730f7fcb92 h1:oVlhw3Oe+1reYsE2Nqu19PDJfLzwdU3QUUrG86rLK68= +golang.org/x/oauth2 v0.0.0-20220718184931-c8730f7fcb92/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= 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= @@ -1266,7 +1255,6 @@ golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1340,8 +1328,8 @@ golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220513210249-45d2b4557a2a h1:N2T1jUrTQE9Re6TFF5PhvEHXHCguynGhKjWVsIUt5cY= -golang.org/x/sys v0.0.0-20220513210249-45d2b4557a2a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 h1:0A+M6Uqn+Eje4kHMK80dtF3JCXC4ykBgQG4Fe06QRhQ= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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= @@ -1677,20 +1665,25 @@ honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.2.1/go.mod h1:lPVVZ2BS5TfnjLyizF7o7hv7j9/L+8cZY2hLyjP9cGY= -k8s.io/api v0.24.1 h1:BjCMRDcyEYz03joa3K1+rbshwh1Ay6oB53+iUx2H8UY= k8s.io/api v0.24.1/go.mod h1:JhoOvNiLXKTPQ60zh2g0ewpA+bnEYf5q44Flhquh4vQ= -k8s.io/apiextensions-apiserver v0.24.1 h1:5yBh9+ueTq/kfnHQZa0MAo6uNcPrtxPMpNQgorBaKS0= -k8s.io/apiextensions-apiserver v0.24.1/go.mod h1:A6MHfaLDGfjOc/We2nM7uewD5Oa/FnEbZ6cD7g2ca4Q= -k8s.io/apimachinery v0.24.1 h1:ShD4aDxTQKN5zNf8K1RQ2u98ELLdIW7jEnlO9uAMX/I= +k8s.io/api v0.24.2 h1:g518dPU/L7VRLxWfcadQn2OnsiGWVOadTLpdnqgY2OI= +k8s.io/api v0.24.2/go.mod h1:AHqbSkTm6YrQ0ObxjO3Pmp/ubFF/KuM7jU+3khoBsOg= +k8s.io/apiextensions-apiserver v0.24.2 h1:/4NEQHKlEz1MlaK/wHT5KMKC9UKYz6NZz6JE6ov4G6k= +k8s.io/apiextensions-apiserver v0.24.2/go.mod h1:e5t2GMFVngUEHUd0wuCJzw8YDwZoqZfJiGOW6mm2hLQ= k8s.io/apimachinery v0.24.1/go.mod h1:82Bi4sCzVBdpYjyI4jY6aHX+YCUchUIrZrXKedjd2UM= -k8s.io/apiserver v0.24.1/go.mod h1:dQWNMx15S8NqJMp0gpYfssyvhYnkilc1LpExd/dkLh0= +k8s.io/apimachinery v0.24.2 h1:5QlH9SL2C8KMcrNJPor+LbXVTaZRReml7svPEh4OKDM= +k8s.io/apimachinery v0.24.2/go.mod h1:82Bi4sCzVBdpYjyI4jY6aHX+YCUchUIrZrXKedjd2UM= +k8s.io/apiserver v0.24.2/go.mod h1:pSuKzr3zV+L+MWqsEo0kHHYwCo77AT5qXbFXP2jbvFI= k8s.io/cli-runtime v0.24.1 h1:IW6L8dRBq+pPTzvXcB+m/hOabzbqXy57Bqo4XxmW7DY= k8s.io/cli-runtime v0.24.1/go.mod h1:14aVvCTqkA7dNXY51N/6hRY3GUjchyWDOwW84qmR3bs= -k8s.io/client-go v0.24.1 h1:w1hNdI9PFrzu3OlovVeTnf4oHDt+FJLd9Ndluvnb42E= k8s.io/client-go v0.24.1/go.mod h1:f1kIDqcEYmwXS/vTbbhopMUbhKp2JhOeVTfxgaCIlF8= +k8s.io/client-go v0.24.2 h1:CoXFSf8if+bLEbinDqN9ePIDGzcLtqhfd6jpfnwGOFA= +k8s.io/client-go v0.24.2/go.mod h1:zg4Xaoo+umDsfCWr4fCnmLEtQXyCNXCvJuSsglNcV30= k8s.io/code-generator v0.24.1/go.mod h1:dpVhs00hTuTdTY6jvVxvTFCk6gSMrtfRydbhZwHI15w= -k8s.io/component-base v0.24.1 h1:APv6W/YmfOWZfo+XJ1mZwep/f7g7Tpwvdbo9CQLDuts= +k8s.io/code-generator v0.24.2/go.mod h1:dpVhs00hTuTdTY6jvVxvTFCk6gSMrtfRydbhZwHI15w= k8s.io/component-base v0.24.1/go.mod h1:DW5vQGYVCog8WYpNob3PMmmsY8A3L9QZNg4j/dV3s38= +k8s.io/component-base v0.24.2 h1:kwpQdoSfbcH+8MPN4tALtajLDfSfYxBDYlXobNWI6OU= +k8s.io/component-base v0.24.2/go.mod h1:ucHwW76dajvQ9B7+zecZAP3BVqvrHoOxm8olHEg0nmM= k8s.io/component-helpers v0.24.1/go.mod h1:q5Z1pWV/QfX9ThuNeywxasiwkLw9KsR4Q9TAOdb/Y3s= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= @@ -1701,8 +1694,9 @@ k8s.io/klog/v2 v2.60.1 h1:VW25q3bZx9uE3vvdL6M8ezOX79vA2Aq1nEWLqNQclHc= k8s.io/klog/v2 v2.60.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/kube-openapi v0.0.0-20210421082810-95288971da7e/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw= k8s.io/kube-openapi v0.0.0-20220328201542-3ee0da9b0b42/go.mod h1:Z/45zLw8lUo4wdiUkI+v/ImEGAvu3WatcZl3lPMR4Rk= -k8s.io/kube-openapi v0.0.0-20220401212409-b28bf2818661 h1:nqYOUleKLC/0P1zbU29F5q6aoezM6MOAVz+iyfQbZ5M= k8s.io/kube-openapi v0.0.0-20220401212409-b28bf2818661/go.mod h1:daOouuuwd9JXpv1L7Y34iV3yf6nxzipkKMWWlqlvK9M= +k8s.io/kube-openapi v0.0.0-20220413171646-5e7f5fdc6da6 h1:nBQrWPlrNIiw0BsX6a6MKr1itkm0ZS0Nl97kNLitFfI= +k8s.io/kube-openapi v0.0.0-20220413171646-5e7f5fdc6da6/go.mod h1:daOouuuwd9JXpv1L7Y34iV3yf6nxzipkKMWWlqlvK9M= k8s.io/kubectl v0.24.1 h1:gxcjHrnwntV1c+G/BHWVv4Mtk8CQJ0WTraElLBG+ddk= k8s.io/kubectl v0.24.1/go.mod h1:NzFqQ50B004fHYWOfhHTrAm4TY6oGF5FAAL13LEaeUI= k8s.io/metrics v0.24.1/go.mod h1:vMs5xpcOyY9D+/XVwlaw8oUHYCo6JTGBCZfyXOOkAhE= @@ -1721,8 +1715,9 @@ sigs.k8s.io/cli-utils v0.31.2 h1:0yX0GPyvbc+yAEWwWlhgHlPF7JtvlLco6HjolSWewt4= sigs.k8s.io/cli-utils v0.31.2/go.mod h1:g/zB9hJ5eUN7zIEBIxrO0CwhXU4YISJ+BkLJzvWwlEs= sigs.k8s.io/controller-runtime v0.11.2 h1:H5GTxQl0Mc9UjRJhORusqfJCIjBO8UtUxGggCwL1rLA= sigs.k8s.io/controller-runtime v0.11.2/go.mod h1:P6QCzrEjLaZGqHsfd+os7JQ+WFZhvB8MRFsn4dWF7O4= -sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2 h1:kDi4JBNAsJWfz1aEXhO8Jg87JJaPNLh5tIzYHgStQ9Y= sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2/go.mod h1:B+TnT182UBxE84DiCz4CVE26eOSDAeYCpfDnC2kdKMY= +sigs.k8s.io/json v0.0.0-20220525155127-227cbc7cc124 h1:2sgAQQcY0dEW2SsQwTXhQV4vO6+rSslYx8K3XmM5hqQ= +sigs.k8s.io/json v0.0.0-20220525155127-227cbc7cc124/go.mod h1:B+TnT182UBxE84DiCz4CVE26eOSDAeYCpfDnC2kdKMY= sigs.k8s.io/kustomize/api v0.11.4/go.mod h1:k+8RsqYbgpkIrJ4p9jcdPqe8DprLxFUUO0yNOq8C+xI= sigs.k8s.io/kustomize/api v0.11.5 h1:vLDp++YAX7iy2y2CVPJNy9pk9CY8XaUKgHkjbVtnWag= sigs.k8s.io/kustomize/api v0.11.5/go.mod h1:2UDpxS6AonWXow2ZbySd4AjUxmdXLeTlvGBC46uSiq8= diff --git a/internal/oci/build.go b/internal/oci/build.go deleted file mode 100644 index 3deb3fc6..00000000 --- a/internal/oci/build.go +++ /dev/null @@ -1,139 +0,0 @@ -/* -Copyright 2022 The Flux authors - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package oci - -import ( - "archive/tar" - "compress/gzip" - "fmt" - "io" - "os" - "path/filepath" - "time" -) - -// Build archives the given directory as a tarball to the given local path. -// While archiving, any environment specific data (for example, the user and group name) is stripped from file headers. -func Build(artifactPath, sourceDir string) (err error) { - if f, err := os.Stat(sourceDir); os.IsNotExist(err) || !f.IsDir() { - return fmt.Errorf("invalid source dir path: %s", sourceDir) - } - - tf, err := os.CreateTemp(filepath.Split(sourceDir)) - if err != nil { - return err - } - tmpName := tf.Name() - defer func() { - if err != nil { - os.Remove(tmpName) - } - }() - - sz := &writeCounter{} - mw := io.MultiWriter(tf, sz) - - gw := gzip.NewWriter(mw) - tw := tar.NewWriter(gw) - if err := filepath.Walk(sourceDir, func(p string, fi os.FileInfo, err error) error { - if err != nil { - return err - } - - // Ignore anything that is not a file or directories e.g. symlinks - if m := fi.Mode(); !(m.IsRegular() || m.IsDir()) { - return nil - } - - header, err := tar.FileInfoHeader(fi, p) - if err != nil { - return err - } - // The name needs to be modified to maintain directory structure - // as tar.FileInfoHeader only has access to the base name of the file. - // Ref: https://golang.org/src/archive/tar/common.go?#L626 - relFilePath := p - if filepath.IsAbs(sourceDir) { - relFilePath, err = filepath.Rel(sourceDir, p) - if err != nil { - return err - } - } - header.Name = relFilePath - - // Remove any environment specific data. - header.Gid = 0 - header.Uid = 0 - header.Uname = "" - header.Gname = "" - header.ModTime = time.Time{} - header.AccessTime = time.Time{} - header.ChangeTime = time.Time{} - - if err := tw.WriteHeader(header); err != nil { - return err - } - - if !fi.Mode().IsRegular() { - return nil - } - f, err := os.Open(p) - if err != nil { - f.Close() - return err - } - if _, err := io.Copy(tw, f); err != nil { - f.Close() - return err - } - return f.Close() - }); err != nil { - tw.Close() - gw.Close() - tf.Close() - return err - } - - if err := tw.Close(); err != nil { - gw.Close() - tf.Close() - return err - } - if err := gw.Close(); err != nil { - tf.Close() - return err - } - if err := tf.Close(); err != nil { - return err - } - - if err := os.Chmod(tmpName, 0o640); err != nil { - return err - } - - return os.Rename(tmpName, artifactPath) -} - -type writeCounter struct { - written int64 -} - -func (wc *writeCounter) Write(p []byte) (int, error) { - n := len(p) - wc.written += int64(n) - return n, nil -} diff --git a/internal/oci/build_test.go b/internal/oci/build_test.go deleted file mode 100644 index 2f6c5616..00000000 --- a/internal/oci/build_test.go +++ /dev/null @@ -1,44 +0,0 @@ -/* -Copyright 2022 The Flux authors - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package oci - -import ( - "os" - "path/filepath" - "testing" - - . "github.com/onsi/gomega" -) - -func TestBuild(t *testing.T) { - g := NewWithT(t) - testDir := "./testdata/build" - - tmpDir := t.TempDir() - artifactPath := filepath.Join(tmpDir, "files.tar.gz") - - // test with non-existent path - err := Build(artifactPath, "testdata/non-existent") - g.Expect(err).To(HaveOccurred()) - - err = Build(artifactPath, testDir) - g.Expect(err).ToNot(HaveOccurred()) - - if _, err := os.Stat(artifactPath); err != nil { - g.Expect(err).ToNot(HaveOccurred()) - } -} diff --git a/internal/oci/list.go b/internal/oci/list.go deleted file mode 100644 index 9901d1d8..00000000 --- a/internal/oci/list.go +++ /dev/null @@ -1,75 +0,0 @@ -/* -Copyright 2022 The Flux authors - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package oci - -import ( - "bytes" - "context" - "fmt" - "sort" - "strings" - - "github.com/google/go-containerregistry/pkg/crane" - gcrv1 "github.com/google/go-containerregistry/pkg/v1" -) - -// List fetches the tags and their manifests for a given OCI repository. -func List(ctx context.Context, url string) ([]Metadata, error) { - metas := make([]Metadata, 0) - tags, err := crane.ListTags(url, craneOptions(ctx)...) - if err != nil { - return nil, fmt.Errorf("listing tags failed: %w", err) - } - - sort.Slice(tags, func(i, j int) bool { return tags[i] > tags[j] }) - - for _, tag := range tags { - // exclude cosign signatures - if strings.HasSuffix(tag, ".sig") { - continue - } - - meta := Metadata{ - URL: fmt.Sprintf("%s:%s", url, tag), - } - - manifestJSON, err := crane.Manifest(meta.URL, craneOptions(ctx)...) - if err != nil { - return nil, fmt.Errorf("fetching manifest failed: %w", err) - } - - manifest, err := gcrv1.ParseManifest(bytes.NewReader(manifestJSON)) - if err != nil { - return nil, fmt.Errorf("parsing manifest failed: %w", err) - } - - if m, err := MetadataFromAnnotations(manifest.Annotations); err == nil { - meta.Revision = m.Revision - meta.Source = m.Source - } - - digest, err := crane.Digest(meta.URL, craneOptions(ctx)...) - if err != nil { - return nil, fmt.Errorf("fetching digest failed: %w", err) - } - meta.Digest = digest - - metas = append(metas, meta) - } - - return metas, nil -} diff --git a/internal/oci/list_test.go b/internal/oci/list_test.go deleted file mode 100644 index c67a3a6c..00000000 --- a/internal/oci/list_test.go +++ /dev/null @@ -1,68 +0,0 @@ -/* -Copyright 2022 The Flux authors - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package oci - -import ( - "context" - "fmt" - "testing" - - "github.com/google/go-containerregistry/pkg/crane" - "github.com/google/go-containerregistry/pkg/name" - gcrv1 "github.com/google/go-containerregistry/pkg/v1" - "github.com/google/go-containerregistry/pkg/v1/mutate" - "github.com/google/go-containerregistry/pkg/v1/random" - . "github.com/onsi/gomega" -) - -func Test_List(t *testing.T) { - g := NewWithT(t) - ctx := context.Background() - repo := "test-list" + randStringRunes(5) - tags := []string{"v0.0.1", "v0.0.2", "v0.0.3"} - source := "github.com/fluxcd/fluxv2" - rev := "rev" - m := Metadata{ - Source: source, - Revision: rev, - } - - for _, tag := range tags { - dst := fmt.Sprintf("%s/%s:%s", dockerReg, repo, tag) - img, err := random.Image(1024, 1) - g.Expect(err).ToNot(HaveOccurred()) - img = mutate.Annotations(img, m.ToAnnotations()).(gcrv1.Image) - err = crane.Push(img, dst, craneOptions(ctx)...) - g.Expect(err).ToNot(HaveOccurred()) - } - - metadata, err := List(ctx, fmt.Sprintf("%s/%s", dockerReg, repo)) - g.Expect(err).ToNot(HaveOccurred()) - - g.Expect(len(metadata)).To(Equal(len(tags))) - for _, meta := range metadata { - tag, err := name.NewTag(meta.URL) - g.Expect(err).ToNot(HaveOccurred()) - g.Expect(tag.TagStr()).Should(BeElementOf(tags)) - - g.Expect(meta.ToAnnotations()).To(Equal(m.ToAnnotations())) - - digest, err := crane.Digest(meta.URL, craneOptions(ctx)...) - g.Expect(err).ToNot(HaveOccurred()) - g.Expect(meta.Digest).To(Equal(digest)) - } -} diff --git a/internal/oci/meta.go b/internal/oci/meta.go deleted file mode 100644 index c1a43fa4..00000000 --- a/internal/oci/meta.go +++ /dev/null @@ -1,61 +0,0 @@ -/* -Copyright 2022 The Flux authors - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package oci - -import ( - "fmt" -) - -const ( - SourceAnnotation = "org.opencontainers.image.source" - RevisionAnnotation = "org.opencontainers.image.revision" -) - -type Metadata struct { - Source string `json:"source_url"` - Revision string `json:"source_revision"` - Digest string `json:"digest"` - URL string `json:"url"` -} - -func (m *Metadata) ToAnnotations() map[string]string { - annotations := map[string]string{ - SourceAnnotation: m.Source, - RevisionAnnotation: m.Revision, - } - - return annotations -} - -func MetadataFromAnnotations(annotations map[string]string) (*Metadata, error) { - source, ok := annotations[SourceAnnotation] - if !ok { - return nil, fmt.Errorf("'%s' annotation not found", SourceAnnotation) - } - - revision, ok := annotations[RevisionAnnotation] - if !ok { - return nil, fmt.Errorf("'%s' annotation not found", RevisionAnnotation) - } - - m := Metadata{ - Source: source, - Revision: revision, - } - - return &m, nil -} diff --git a/internal/oci/pull.go b/internal/oci/pull.go deleted file mode 100644 index f08c0e34..00000000 --- a/internal/oci/pull.go +++ /dev/null @@ -1,75 +0,0 @@ -/* -Copyright 2022 The Flux authors - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package oci - -import ( - "context" - "fmt" - - "github.com/fluxcd/pkg/untar" - "github.com/google/go-containerregistry/pkg/crane" - "github.com/google/go-containerregistry/pkg/name" -) - -// Pull downloads an artifact from an OCI repository and extracts the content to the given directory. -func Pull(ctx context.Context, url, outDir string) (*Metadata, error) { - ref, err := name.ParseReference(url) - if err != nil { - return nil, fmt.Errorf("invalid URL: %w", err) - } - - img, err := crane.Pull(url, craneOptions(ctx)...) - if err != nil { - return nil, err - } - - digest, err := img.Digest() - if err != nil { - return nil, fmt.Errorf("parsing digest failed: %w", err) - } - - manifest, err := img.Manifest() - if err != nil { - return nil, fmt.Errorf("parsing manifest failed: %w", err) - } - - meta, err := MetadataFromAnnotations(manifest.Annotations) - if err != nil { - return nil, err - } - meta.Digest = ref.Context().Digest(digest.String()).String() - - layers, err := img.Layers() - if err != nil { - return nil, fmt.Errorf("failed to list layers: %w", err) - } - - if len(layers) < 1 { - return nil, fmt.Errorf("no layers found in artifact") - } - - blob, err := layers[0].Compressed() - if err != nil { - return nil, fmt.Errorf("extracting first layer failed: %w", err) - } - - if _, err = untar.Untar(blob, outDir); err != nil { - return nil, fmt.Errorf("failed to untar first layer: %w", err) - } - - return meta, nil -} diff --git a/internal/oci/push.go b/internal/oci/push.go deleted file mode 100644 index 30d572c9..00000000 --- a/internal/oci/push.go +++ /dev/null @@ -1,81 +0,0 @@ -/* -Copyright 2022 The Flux authors - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package oci - -import ( - "context" - "fmt" - "os" - "path/filepath" - - "github.com/google/go-containerregistry/pkg/crane" - "github.com/google/go-containerregistry/pkg/name" - gcrv1 "github.com/google/go-containerregistry/pkg/v1" - "github.com/google/go-containerregistry/pkg/v1/empty" - "github.com/google/go-containerregistry/pkg/v1/mutate" -) - -// Push creates an artifact from the given directory, uploads the artifact -// to the given OCI repository and returns the digest. -func Push(ctx context.Context, url, sourceDir string, meta Metadata) (string, error) { - ref, err := name.ParseReference(url) - if err != nil { - return "", fmt.Errorf("invalid URL: %w", err) - } - - tmpDir, err := os.MkdirTemp("", "oci") - if err != nil { - return "", err - } - defer os.RemoveAll(tmpDir) - - tmpFile := filepath.Join(tmpDir, "artifact.tgz") - - if err := Build(tmpFile, sourceDir); err != nil { - return "", err - } - - img, err := crane.Append(empty.Image, tmpFile) - if err != nil { - return "", fmt.Errorf("appeding content to artifact failed: %w", err) - } - - img = mutate.Annotations(img, meta.ToAnnotations()).(gcrv1.Image) - - if err := crane.Push(img, url, craneOptions(ctx)...); err != nil { - return "", fmt.Errorf("pushing artifact failed: %w", err) - } - - digest, err := img.Digest() - if err != nil { - return "", fmt.Errorf("parsing artifact digest failed: %w", err) - } - - return ref.Context().Digest(digest.String()).String(), err -} - -func craneOptions(ctx context.Context) []crane.Option { - return []crane.Option{ - crane.WithContext(ctx), - crane.WithUserAgent("flux/v2"), - crane.WithPlatform(&gcrv1.Platform{ - Architecture: "flux", - OS: "flux", - OSVersion: "v2", - }), - } -} diff --git a/internal/oci/push_pull_test.go b/internal/oci/push_pull_test.go deleted file mode 100644 index 1083dcdd..00000000 --- a/internal/oci/push_pull_test.go +++ /dev/null @@ -1,72 +0,0 @@ -/* -Copyright 2022 The Flux authors - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package oci - -import ( - "context" - "fmt" - "io/fs" - "os" - "path/filepath" - "testing" - - "github.com/google/go-containerregistry/pkg/crane" - . "github.com/onsi/gomega" -) - -func Test_Push_Pull(t *testing.T) { - g := NewWithT(t) - ctx := context.Background() - tag := "v0.0.1" - repo := "test-push" + randStringRunes(5) - - url := fmt.Sprintf("%s/%s:%s", dockerReg, repo, tag) - metadata := Metadata{ - Source: "github.com/fluxcd/flux2", - Revision: "rev", - } - annotations := metadata.ToAnnotations() - - testDir := "testdata/build" - _, err := Push(ctx, url, testDir, metadata) - g.Expect(err).ToNot(HaveOccurred()) - - tags, err := crane.ListTags(fmt.Sprintf("%s/%s", dockerReg, repo)) - g.Expect(err).ToNot(HaveOccurred()) - g.Expect(len(tags)).To(BeEquivalentTo(1)) - - image, err := crane.Pull(fmt.Sprintf("%s/%s:%s", dockerReg, repo, tag)) - g.Expect(err).ToNot(HaveOccurred()) - - manifest, err := image.Manifest() - g.Expect(err).ToNot(HaveOccurred()) - g.Expect(manifest.Annotations).To(BeEquivalentTo(annotations)) - - tmpDir := t.TempDir() - _, err = Pull(ctx, url, tmpDir) - g.Expect(err).ToNot(HaveOccurred()) - - // Walk directory the test directory and check that all paths exists in the extracted archive - err = filepath.Walk(testDir, func(path string, info fs.FileInfo, err error) error { - tmpPath := filepath.Join(tmpDir, path) - if _, err := os.Stat(tmpPath); err != nil && os.IsNotExist(err) { - return fmt.Errorf("path '%s' doesn't exist in archive", path) - } - - return nil - }) -} diff --git a/internal/oci/suite_test.go b/internal/oci/suite_test.go deleted file mode 100644 index c611e1ab..00000000 --- a/internal/oci/suite_test.go +++ /dev/null @@ -1,86 +0,0 @@ -/* -Copyright 2022 The Flux authors - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package oci - -import ( - "context" - "fmt" - "math/rand" - "os" - "testing" - "time" - - ctrl "sigs.k8s.io/controller-runtime" - - "github.com/distribution/distribution/v3/configuration" - "github.com/distribution/distribution/v3/registry" - _ "github.com/distribution/distribution/v3/registry/auth/htpasswd" - _ "github.com/distribution/distribution/v3/registry/storage/driver/inmemory" - "github.com/phayes/freeport" -) - -var ( - dockerReg string -) - -func init() { - rand.Seed(time.Now().UnixNano()) -} - -func setupRegistryServer(ctx context.Context) error { - // Registry config - config := &configuration.Configuration{} - port, err := freeport.GetFreePort() - if err != nil { - return fmt.Errorf("failed to get free port: %s", err) - } - - dockerReg = fmt.Sprintf("localhost:%d", port) - config.HTTP.Addr = fmt.Sprintf("127.0.0.1:%d", port) - config.HTTP.DrainTimeout = time.Duration(10) * time.Second - config.Storage = map[string]configuration.Parameters{"inmemory": map[string]interface{}{}} - dockerRegistry, err := registry.NewRegistry(ctx, config) - if err != nil { - return fmt.Errorf("failed to create docker registry: %w", err) - } - - // Start Docker registry - go dockerRegistry.ListenAndServe() - - return nil -} - -func TestMain(m *testing.M) { - ctx := ctrl.SetupSignalHandler() - err := setupRegistryServer(ctx) - if err != nil { - panic(fmt.Sprintf("failed to start docker registry: %s", err)) - } - - code := m.Run() - os.Exit(code) -} - -var letterRunes = []rune("abcdefghijklmnopqrstuvwxyz1234567890") - -func randStringRunes(n int) string { - b := make([]rune, n) - for i := range b { - b[i] = letterRunes[rand.Intn(len(letterRunes))] - } - return string(b) -} diff --git a/internal/oci/tag.go b/internal/oci/tag.go deleted file mode 100644 index 8e0140f6..00000000 --- a/internal/oci/tag.go +++ /dev/null @@ -1,40 +0,0 @@ -/* -Copyright 2022 The Flux authors - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package oci - -import ( - "context" - "fmt" - "github.com/google/go-containerregistry/pkg/crane" - "github.com/google/go-containerregistry/pkg/name" -) - -// Tag creates a new tag for the given artifact using the same OCI repository as the origin. -func Tag(ctx context.Context, url, tag string) (string, error) { - ref, err := name.ParseReference(url) - if err != nil { - return "", fmt.Errorf("invalid URL: %w", err) - } - - if err := crane.Tag(url, tag, craneOptions(ctx)...); err != nil { - return "", err - } - - dst := ref.Context().Tag(tag) - - return dst.Name(), nil -} diff --git a/internal/oci/tag_test.go b/internal/oci/tag_test.go deleted file mode 100644 index 81cbebb1..00000000 --- a/internal/oci/tag_test.go +++ /dev/null @@ -1,46 +0,0 @@ -/* -Copyright 2022 The Flux authors - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package oci - -import ( - "context" - "fmt" - "testing" - - "github.com/google/go-containerregistry/pkg/crane" - "github.com/google/go-containerregistry/pkg/v1/random" - . "github.com/onsi/gomega" -) - -func Test_Tag(t *testing.T) { - g := NewWithT(t) - ctx := context.Background() - testRepo := "test-tag" - url := fmt.Sprintf("%s/%s:v0.0.1", dockerReg, testRepo) - img, err := random.Image(1024, 1) - g.Expect(err).ToNot(HaveOccurred()) - err = crane.Push(img, url, craneOptions(ctx)...) - g.Expect(err).ToNot(HaveOccurred()) - - _, err = Tag(ctx, url, "v0.0.2") - g.Expect(err).ToNot(HaveOccurred()) - - tags, err := crane.ListTags(fmt.Sprintf("%s/%s", dockerReg, testRepo)) - g.Expect(err).ToNot(HaveOccurred()) - g.Expect(len(tags)).To(BeEquivalentTo(2)) - g.Expect(tags).To(BeEquivalentTo([]string{"v0.0.1", "v0.0.2"})) -} diff --git a/internal/oci/testdata/build/deployment.yaml b/internal/oci/testdata/build/deployment.yaml deleted file mode 100644 index 007ecd31..00000000 --- a/internal/oci/testdata/build/deployment.yaml +++ /dev/null @@ -1,21 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: nginx-deployment - labels: - app: nginx -spec: - replicas: 3 - selector: - matchLabels: - app: nginx - template: - metadata: - labels: - app: nginx - spec: - containers: - - name: nginx - image: nginx:1.14.2 - ports: - - containerPort: 80 diff --git a/internal/oci/testdata/build/somedir/repo.yaml b/internal/oci/testdata/build/somedir/repo.yaml deleted file mode 100644 index 253b7632..00000000 --- a/internal/oci/testdata/build/somedir/repo.yaml +++ /dev/null @@ -1,8 +0,0 @@ -apiVersion: source.toolkit.fluxcd.io/v1beta1 -kind: HelmRepository -metadata: - name: podinfo - namespace: flux-system -spec: - interval: 2m - url: https://stefanprodan.github.io/podinfo diff --git a/internal/oci/url.go b/internal/oci/url.go deleted file mode 100644 index 38dafb1f..00000000 --- a/internal/oci/url.go +++ /dev/null @@ -1,54 +0,0 @@ -/* -Copyright 2022 The Flux authors - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package oci - -import ( - "fmt" - "strings" - - sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" - "github.com/google/go-containerregistry/pkg/name" -) - -// ParseArtifactURL validates the OCI URL and returns the address of the artifact. -func ParseArtifactURL(ociURL string) (string, error) { - if !strings.HasPrefix(ociURL, sourcev1.OCIRepositoryPrefix) { - return "", fmt.Errorf("URL must be in format 'oci:////'") - } - - url := strings.TrimPrefix(ociURL, sourcev1.OCIRepositoryPrefix) - if _, err := name.ParseReference(url); err != nil { - return "", fmt.Errorf("'%s' invalid URL: %w", ociURL, err) - } - - return url, nil -} - -// ParseRepositoryURL validates the OCI URL and returns the address of the artifact repository. -func ParseRepositoryURL(ociURL string) (string, error) { - if !strings.HasPrefix(ociURL, sourcev1.OCIRepositoryPrefix) { - return "", fmt.Errorf("URL must be in format 'oci:////'") - } - - url := strings.TrimPrefix(ociURL, sourcev1.OCIRepositoryPrefix) - ref, err := name.ParseReference(url) - if err != nil { - return "", fmt.Errorf("'%s' invalid URL: %w", ociURL, err) - } - - return ref.Context().Name(), nil -} From ac9b3d193d88e07120e957fcaafb6eaa770317ea Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Mon, 8 Aug 2022 20:24:32 +0300 Subject: [PATCH 201/818] Update controllers with OCI support Signed-off-by: Stefan Prodan --- .../testdata/oci/create_source_oci.golden | 2 +- cmd/flux/testdata/oci/get_oci.golden | 2 +- cmd/flux/testdata/oci/reconcile_oci.golden | 2 +- cmd/flux/testdata/oci/resume_oci.golden | 2 +- go.mod | 26 ++++----- go.sum | 56 +++++++++---------- .../kustomize-controller/kustomization.yaml | 10 +--- .../kustomization.yaml | 4 +- .../source-controller/kustomization.yaml | 10 +--- 9 files changed, 53 insertions(+), 61 deletions(-) diff --git a/cmd/flux/testdata/oci/create_source_oci.golden b/cmd/flux/testdata/oci/create_source_oci.golden index 6b2563c9..af1125c8 100644 --- a/cmd/flux/testdata/oci/create_source_oci.golden +++ b/cmd/flux/testdata/oci/create_source_oci.golden @@ -2,4 +2,4 @@ ✔ OCIRepository created ◎ waiting for OCIRepository reconciliation ✔ OCIRepository reconciliation completed -✔ fetched revision: ad1869cb84deb98917c06d93de0fe0ec56297473694d42b45b6adf1c84692d59 +✔ fetched revision: dbdb109711ffb3be77504d2670dbe13c24dd63d8d7f1fb489d350e5bfe930dd3 diff --git a/cmd/flux/testdata/oci/get_oci.golden b/cmd/flux/testdata/oci/get_oci.golden index 3d5a8a1c..ae582c8c 100644 --- a/cmd/flux/testdata/oci/get_oci.golden +++ b/cmd/flux/testdata/oci/get_oci.golden @@ -1,2 +1,2 @@ NAME REVISION SUSPENDED READY MESSAGE -thrfg ad1869cb84deb98917c06d93de0fe0ec56297473694d42b45b6adf1c84692d59 False True stored artifact for digest 'ad1869cb84deb98917c06d93de0fe0ec56297473694d42b45b6adf1c84692d59' +thrfg dbdb109711ffb3be77504d2670dbe13c24dd63d8d7f1fb489d350e5bfe930dd3 False True stored artifact for digest 'dbdb109711ffb3be77504d2670dbe13c24dd63d8d7f1fb489d350e5bfe930dd3' diff --git a/cmd/flux/testdata/oci/reconcile_oci.golden b/cmd/flux/testdata/oci/reconcile_oci.golden index c0223e8d..832c3294 100644 --- a/cmd/flux/testdata/oci/reconcile_oci.golden +++ b/cmd/flux/testdata/oci/reconcile_oci.golden @@ -1,4 +1,4 @@ ► annotating OCIRepository thrfg in {{ .ns }} namespace ✔ OCIRepository annotated ◎ waiting for OCIRepository reconciliation -✔ fetched revision ad1869cb84deb98917c06d93de0fe0ec56297473694d42b45b6adf1c84692d59 +✔ fetched revision dbdb109711ffb3be77504d2670dbe13c24dd63d8d7f1fb489d350e5bfe930dd3 diff --git a/cmd/flux/testdata/oci/resume_oci.golden b/cmd/flux/testdata/oci/resume_oci.golden index 0851c487..b4341a5d 100644 --- a/cmd/flux/testdata/oci/resume_oci.golden +++ b/cmd/flux/testdata/oci/resume_oci.golden @@ -2,4 +2,4 @@ ✔ source oci resumed ◎ waiting for OCIRepository reconciliation ✔ OCIRepository reconciliation completed -✔ fetched revision ad1869cb84deb98917c06d93de0fe0ec56297473694d42b45b6adf1c84692d59 +✔ fetched revision dbdb109711ffb3be77504d2670dbe13c24dd63d8d7f1fb489d350e5bfe930dd3 diff --git a/go.mod b/go.mod index 9a8e80f8..6b025c10 100644 --- a/go.mod +++ b/go.mod @@ -10,17 +10,17 @@ require ( github.com/fluxcd/helm-controller/api v0.22.2 github.com/fluxcd/image-automation-controller/api v0.23.5 github.com/fluxcd/image-reflector-controller/api v0.19.4 - github.com/fluxcd/kustomize-controller/api v0.26.3 - github.com/fluxcd/notification-controller/api v0.24.1 + github.com/fluxcd/kustomize-controller/api v0.27.0 + github.com/fluxcd/notification-controller/api v0.25.0 github.com/fluxcd/pkg/apis/meta v0.14.2 github.com/fluxcd/pkg/kustomize v0.5.2 - github.com/fluxcd/pkg/oci v0.2.0 + github.com/fluxcd/pkg/oci v0.3.0 github.com/fluxcd/pkg/runtime v0.16.2 github.com/fluxcd/pkg/ssa v0.17.0 github.com/fluxcd/pkg/ssh v0.5.0 github.com/fluxcd/pkg/untar v0.1.0 github.com/fluxcd/pkg/version v0.1.0 - github.com/fluxcd/source-controller/api v0.25.10-0.20220803075204-d95db9403032 + github.com/fluxcd/source-controller/api v0.26.0 github.com/go-git/go-git/v5 v5.4.2 github.com/gonvenience/bunt v1.3.4 github.com/gonvenience/ytbx v1.4.4 @@ -38,16 +38,16 @@ require ( github.com/theckman/yacspin v0.13.12 golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e golang.org/x/term v0.0.0-20220526004731-065cf7ba2467 - k8s.io/api v0.24.2 - k8s.io/apiextensions-apiserver v0.24.2 - k8s.io/apimachinery v0.24.2 + k8s.io/api v0.24.3 + k8s.io/apiextensions-apiserver v0.24.3 + k8s.io/apimachinery v0.24.3 k8s.io/cli-runtime v0.24.1 - k8s.io/client-go v0.24.2 + k8s.io/client-go v0.24.3 k8s.io/kubectl v0.24.1 - sigs.k8s.io/cli-utils v0.31.2 + sigs.k8s.io/cli-utils v0.32.0 sigs.k8s.io/controller-runtime v0.11.2 - sigs.k8s.io/kustomize/api v0.11.5 - sigs.k8s.io/kustomize/kyaml v0.13.7 + sigs.k8s.io/kustomize/api v0.12.1 + sigs.k8s.io/kustomize/kyaml v0.13.9 sigs.k8s.io/yaml v1.3.0 ) @@ -155,7 +155,7 @@ require ( github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74 // indirect github.com/xanzy/go-gitlab v0.58.0 // indirect github.com/xanzy/ssh-agent v0.3.0 // indirect - github.com/xlab/treeprint v0.0.0-20181112141820-a009c3971eca // indirect + github.com/xlab/treeprint v1.1.0 // indirect go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 // indirect golang.org/x/net v0.0.0-20220708220712-1185a9018129 // indirect golang.org/x/oauth2 v0.0.0-20220718184931-c8730f7fcb92 // indirect @@ -170,7 +170,7 @@ require ( gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/component-base v0.24.2 // indirect + k8s.io/component-base v0.24.3 // indirect k8s.io/klog/v2 v2.60.1 // indirect k8s.io/kube-openapi v0.0.0-20220413171646-5e7f5fdc6da6 // indirect k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9 // indirect diff --git a/go.sum b/go.sum index b38fa82b..18b8d0c5 100644 --- a/go.sum +++ b/go.sum @@ -277,10 +277,10 @@ github.com/fluxcd/image-automation-controller/api v0.23.5 h1:haMWilXLHXQGn4YXwm7 github.com/fluxcd/image-automation-controller/api v0.23.5/go.mod h1:v/sRqXwo0jNyXK0f4oUY7GZt8NgcNy5twP3OVEsoAt0= github.com/fluxcd/image-reflector-controller/api v0.19.4 h1:SnqJS7vhm+jWHsArjMluCdVydu6jY+m3M2mi+oSHh94= github.com/fluxcd/image-reflector-controller/api v0.19.4/go.mod h1:QFRYeJTfUQY9l3r+PqGGAlr7KzJRCKN7Lsvg9nXaWHk= -github.com/fluxcd/kustomize-controller/api v0.26.3 h1:RTrRM9N+YWIX8M690x/rDq/ryiEkhnOaq9Sj1AeWcNQ= -github.com/fluxcd/kustomize-controller/api v0.26.3/go.mod h1:Zwvl6iBKbR6SKl5W8APK5hvHfH55S50zAqFLJ/188LQ= -github.com/fluxcd/notification-controller/api v0.24.1 h1:aGe4AEPmCW/8gIRCRhOosppXb2mqZYgfftt16Q05/30= -github.com/fluxcd/notification-controller/api v0.24.1/go.mod h1:hqn/1JsYiv8Gg3xjBYkLJQhez3hbYj2v57ATfSo637M= +github.com/fluxcd/kustomize-controller/api v0.27.0 h1:mhaw15noK7cGFoMkFUCjBgkpqYrKPJ6JoqlmbpLU6nc= +github.com/fluxcd/kustomize-controller/api v0.27.0/go.mod h1:qNL44xfm+E2ng8/TqheZZ4bXilWtvVtDYjlKCiMbfM0= +github.com/fluxcd/notification-controller/api v0.25.0 h1:ZAFAfRs+cPcepPjdjbDvl6fOWc1aOoM4r6lozOAxWhw= +github.com/fluxcd/notification-controller/api v0.25.0/go.mod h1:hqn/1JsYiv8Gg3xjBYkLJQhez3hbYj2v57ATfSo637M= github.com/fluxcd/pkg/apis/acl v0.0.3 h1:Lw0ZHdpnO4G7Zy9KjrzwwBmDZQuy4qEjaU/RvA6k1lc= github.com/fluxcd/pkg/apis/acl v0.0.3/go.mod h1:XPts6lRJ9C9fIF9xVWofmQwftvhY25n1ps7W9xw0XLU= github.com/fluxcd/pkg/apis/kustomize v0.4.2 h1:5mC/t+OndouK7poFaG4soWLqvHqOxJ3HCsbxu8qyt30= @@ -289,8 +289,8 @@ github.com/fluxcd/pkg/apis/meta v0.14.2 h1:/Hf7I/Vz01vv3m7Qx7DtQvrzAL1oVt0MJcLb/ github.com/fluxcd/pkg/apis/meta v0.14.2/go.mod h1:ijZ61VG/8T3U17gj0aFL3fdtZL+mulD6V8VrLLUCAgM= github.com/fluxcd/pkg/kustomize v0.5.2 h1:Nhaw/Tqwt588Cp4PYa83nj45t3mGgojMl23zhq/t/fM= github.com/fluxcd/pkg/kustomize v0.5.2/go.mod h1:X3Uls1l13giFPwig1NDoXvrF53yyXUemSyR3nYGw28s= -github.com/fluxcd/pkg/oci v0.2.0 h1:pvLF6iKmSj9u48Da7qlBDVIiH2NLOrbFUFE4Yr431Lc= -github.com/fluxcd/pkg/oci v0.2.0/go.mod h1:c1pj9E/G5927gSa6ooACAyZe+HwjgmPk9johL7oXDHw= +github.com/fluxcd/pkg/oci v0.3.0 h1:GFn6JZeg5fV2K4vsQ0s5lJFid6qrpA4RybLXL+7qUbQ= +github.com/fluxcd/pkg/oci v0.3.0/go.mod h1:c1pj9E/G5927gSa6ooACAyZe+HwjgmPk9johL7oXDHw= github.com/fluxcd/pkg/runtime v0.16.2 h1:CexfMmJK+r12sHTvKWyAax0pcPomjd6VnaHXcxjUrRY= github.com/fluxcd/pkg/runtime v0.16.2/go.mod h1:OHSKsrO+T+Ym8WZRS2oidrnauWRARuE2nfm8ewevm7M= github.com/fluxcd/pkg/ssa v0.17.0 h1:iO4EQ+/xIbd79VKrh+8fvsAvq3RlmgAdWtnzOAUxD5s= @@ -301,8 +301,8 @@ github.com/fluxcd/pkg/untar v0.1.0 h1:k97V/xV5hFrAkIkVPuv5AVhyxh1ZzzAKba/lbDfGo6 github.com/fluxcd/pkg/untar v0.1.0/go.mod h1:aGswNyzB1mlz/T/kpOS58mITBMxMKc9tlJBH037A2HY= github.com/fluxcd/pkg/version v0.1.0 h1:v+SmCanmCB5Tj2Cx9TXlj+kNRfPGbAvirkeqsp7ZEAQ= github.com/fluxcd/pkg/version v0.1.0/go.mod h1:V7Z/w8dxLQzv0FHqa5ox5TeyOd2zOd49EeuWFgnwyj4= -github.com/fluxcd/source-controller/api v0.25.10-0.20220803075204-d95db9403032 h1:qJgj+/LGV4bjxutw5ENVLHgAe1MpdfMASC00Qb75NIY= -github.com/fluxcd/source-controller/api v0.25.10-0.20220803075204-d95db9403032/go.mod h1:1W0Xx/GpZ14Z/sOltxjsQKXeCv8zxAqSivbX9e4s+H8= +github.com/fluxcd/source-controller/api v0.26.0 h1:DOf9R7YLV0lNiIRnaYg5bh8fGbIB6zGbK5vFqejeSAk= +github.com/fluxcd/source-controller/api v0.26.0/go.mod h1:1W0Xx/GpZ14Z/sOltxjsQKXeCv8zxAqSivbX9e4s+H8= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= @@ -1010,8 +1010,9 @@ github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2 github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/xlab/treeprint v0.0.0-20181112141820-a009c3971eca h1:1CFlNzQhALwjS9mBAUkycX616GzgsuYUOCHA5+HSlXI= github.com/xlab/treeprint v0.0.0-20181112141820-a009c3971eca/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= +github.com/xlab/treeprint v1.1.0 h1:G/1DjNkPpfZCFt9CSh6b5/nY4VimlbHF3Rh4obvtzDk= +github.com/xlab/treeprint v1.1.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd/WEJu0= github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1zIOPMxZ5EncGwgmMJsa+9ucAQZXxsObs= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/yeya24/promlinter v0.1.0/go.mod h1:rs5vtZzeBHqqMwXqFScncpCF6u06lezhZepno9AB1Oc= @@ -1666,24 +1667,24 @@ honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9 honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.2.1/go.mod h1:lPVVZ2BS5TfnjLyizF7o7hv7j9/L+8cZY2hLyjP9cGY= k8s.io/api v0.24.1/go.mod h1:JhoOvNiLXKTPQ60zh2g0ewpA+bnEYf5q44Flhquh4vQ= -k8s.io/api v0.24.2 h1:g518dPU/L7VRLxWfcadQn2OnsiGWVOadTLpdnqgY2OI= -k8s.io/api v0.24.2/go.mod h1:AHqbSkTm6YrQ0ObxjO3Pmp/ubFF/KuM7jU+3khoBsOg= -k8s.io/apiextensions-apiserver v0.24.2 h1:/4NEQHKlEz1MlaK/wHT5KMKC9UKYz6NZz6JE6ov4G6k= -k8s.io/apiextensions-apiserver v0.24.2/go.mod h1:e5t2GMFVngUEHUd0wuCJzw8YDwZoqZfJiGOW6mm2hLQ= +k8s.io/api v0.24.3 h1:tt55QEmKd6L2k5DP6G/ZzdMQKvG5ro4H4teClqm0sTY= +k8s.io/api v0.24.3/go.mod h1:elGR/XSZrS7z7cSZPzVWaycpJuGIw57j9b95/1PdJNI= +k8s.io/apiextensions-apiserver v0.24.3 h1:kyx+Tmro1qEsTUr07ZGQOfvTsF61yn+AxnxytBWq8As= +k8s.io/apiextensions-apiserver v0.24.3/go.mod h1:cL0xkmUefpYM4f6IuOau+6NMFEIh6/7wXe/O4vPVJ8A= k8s.io/apimachinery v0.24.1/go.mod h1:82Bi4sCzVBdpYjyI4jY6aHX+YCUchUIrZrXKedjd2UM= -k8s.io/apimachinery v0.24.2 h1:5QlH9SL2C8KMcrNJPor+LbXVTaZRReml7svPEh4OKDM= -k8s.io/apimachinery v0.24.2/go.mod h1:82Bi4sCzVBdpYjyI4jY6aHX+YCUchUIrZrXKedjd2UM= -k8s.io/apiserver v0.24.2/go.mod h1:pSuKzr3zV+L+MWqsEo0kHHYwCo77AT5qXbFXP2jbvFI= +k8s.io/apimachinery v0.24.3 h1:hrFiNSA2cBZqllakVYyH/VyEh4B581bQRmqATJSeQTg= +k8s.io/apimachinery v0.24.3/go.mod h1:82Bi4sCzVBdpYjyI4jY6aHX+YCUchUIrZrXKedjd2UM= +k8s.io/apiserver v0.24.3/go.mod h1:aXfwtIn4U27B7lYs5f2BKgz6DRbgWy+HJeYReN1jLJ8= k8s.io/cli-runtime v0.24.1 h1:IW6L8dRBq+pPTzvXcB+m/hOabzbqXy57Bqo4XxmW7DY= k8s.io/cli-runtime v0.24.1/go.mod h1:14aVvCTqkA7dNXY51N/6hRY3GUjchyWDOwW84qmR3bs= k8s.io/client-go v0.24.1/go.mod h1:f1kIDqcEYmwXS/vTbbhopMUbhKp2JhOeVTfxgaCIlF8= -k8s.io/client-go v0.24.2 h1:CoXFSf8if+bLEbinDqN9ePIDGzcLtqhfd6jpfnwGOFA= -k8s.io/client-go v0.24.2/go.mod h1:zg4Xaoo+umDsfCWr4fCnmLEtQXyCNXCvJuSsglNcV30= +k8s.io/client-go v0.24.3 h1:Nl1840+6p4JqkFWEW2LnMKU667BUxw03REfLAVhuKQY= +k8s.io/client-go v0.24.3/go.mod h1:AAovolf5Z9bY1wIg2FZ8LPQlEdKHjLI7ZD4rw920BJw= k8s.io/code-generator v0.24.1/go.mod h1:dpVhs00hTuTdTY6jvVxvTFCk6gSMrtfRydbhZwHI15w= -k8s.io/code-generator v0.24.2/go.mod h1:dpVhs00hTuTdTY6jvVxvTFCk6gSMrtfRydbhZwHI15w= +k8s.io/code-generator v0.24.3/go.mod h1:dpVhs00hTuTdTY6jvVxvTFCk6gSMrtfRydbhZwHI15w= k8s.io/component-base v0.24.1/go.mod h1:DW5vQGYVCog8WYpNob3PMmmsY8A3L9QZNg4j/dV3s38= -k8s.io/component-base v0.24.2 h1:kwpQdoSfbcH+8MPN4tALtajLDfSfYxBDYlXobNWI6OU= -k8s.io/component-base v0.24.2/go.mod h1:ucHwW76dajvQ9B7+zecZAP3BVqvrHoOxm8olHEg0nmM= +k8s.io/component-base v0.24.3 h1:u99WjuHYCRJjS1xeLOx72DdRaghuDnuMgueiGMFy1ec= +k8s.io/component-base v0.24.3/go.mod h1:bqom2IWN9Lj+vwAkPNOv2TflsP1PeVDIwIN0lRthxYY= k8s.io/component-helpers v0.24.1/go.mod h1:q5Z1pWV/QfX9ThuNeywxasiwkLw9KsR4Q9TAOdb/Y3s= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= @@ -1694,7 +1695,6 @@ k8s.io/klog/v2 v2.60.1 h1:VW25q3bZx9uE3vvdL6M8ezOX79vA2Aq1nEWLqNQclHc= k8s.io/klog/v2 v2.60.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/kube-openapi v0.0.0-20210421082810-95288971da7e/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw= k8s.io/kube-openapi v0.0.0-20220328201542-3ee0da9b0b42/go.mod h1:Z/45zLw8lUo4wdiUkI+v/ImEGAvu3WatcZl3lPMR4Rk= -k8s.io/kube-openapi v0.0.0-20220401212409-b28bf2818661/go.mod h1:daOouuuwd9JXpv1L7Y34iV3yf6nxzipkKMWWlqlvK9M= k8s.io/kube-openapi v0.0.0-20220413171646-5e7f5fdc6da6 h1:nBQrWPlrNIiw0BsX6a6MKr1itkm0ZS0Nl97kNLitFfI= k8s.io/kube-openapi v0.0.0-20220413171646-5e7f5fdc6da6/go.mod h1:daOouuuwd9JXpv1L7Y34iV3yf6nxzipkKMWWlqlvK9M= k8s.io/kubectl v0.24.1 h1:gxcjHrnwntV1c+G/BHWVv4Mtk8CQJ0WTraElLBG+ddk= @@ -1711,21 +1711,21 @@ rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8 rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.30/go.mod h1:fEO7lRTdivWO2qYVCVG7dEADOMo/MLDCVr8So2g88Uw= -sigs.k8s.io/cli-utils v0.31.2 h1:0yX0GPyvbc+yAEWwWlhgHlPF7JtvlLco6HjolSWewt4= -sigs.k8s.io/cli-utils v0.31.2/go.mod h1:g/zB9hJ5eUN7zIEBIxrO0CwhXU4YISJ+BkLJzvWwlEs= +sigs.k8s.io/cli-utils v0.32.0 h1:776y8z6gbBFTxfJ78lkHK6tbzK+MZTH6+ycP1gh16aw= +sigs.k8s.io/cli-utils v0.32.0/go.mod h1:g/zB9hJ5eUN7zIEBIxrO0CwhXU4YISJ+BkLJzvWwlEs= sigs.k8s.io/controller-runtime v0.11.2 h1:H5GTxQl0Mc9UjRJhORusqfJCIjBO8UtUxGggCwL1rLA= sigs.k8s.io/controller-runtime v0.11.2/go.mod h1:P6QCzrEjLaZGqHsfd+os7JQ+WFZhvB8MRFsn4dWF7O4= sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2/go.mod h1:B+TnT182UBxE84DiCz4CVE26eOSDAeYCpfDnC2kdKMY= sigs.k8s.io/json v0.0.0-20220525155127-227cbc7cc124 h1:2sgAQQcY0dEW2SsQwTXhQV4vO6+rSslYx8K3XmM5hqQ= sigs.k8s.io/json v0.0.0-20220525155127-227cbc7cc124/go.mod h1:B+TnT182UBxE84DiCz4CVE26eOSDAeYCpfDnC2kdKMY= sigs.k8s.io/kustomize/api v0.11.4/go.mod h1:k+8RsqYbgpkIrJ4p9jcdPqe8DprLxFUUO0yNOq8C+xI= -sigs.k8s.io/kustomize/api v0.11.5 h1:vLDp++YAX7iy2y2CVPJNy9pk9CY8XaUKgHkjbVtnWag= -sigs.k8s.io/kustomize/api v0.11.5/go.mod h1:2UDpxS6AonWXow2ZbySd4AjUxmdXLeTlvGBC46uSiq8= +sigs.k8s.io/kustomize/api v0.12.1 h1:7YM7gW3kYBwtKvoY216ZzY+8hM+lV53LUayghNRJ0vM= +sigs.k8s.io/kustomize/api v0.12.1/go.mod h1:y3JUhimkZkR6sbLNwfJHxvo1TCLwuwm14sCYnkH6S1s= sigs.k8s.io/kustomize/cmd/config v0.10.6/go.mod h1:/S4A4nUANUa4bZJ/Edt7ZQTyKOY9WCER0uBS1SW2Rco= sigs.k8s.io/kustomize/kustomize/v4 v4.5.4/go.mod h1:Zo/Xc5FKD6sHl0lilbrieeGeZHVYCA4BzxeAaLI05Bg= sigs.k8s.io/kustomize/kyaml v0.13.6/go.mod h1:yHP031rn1QX1lr/Xd934Ri/xdVNG8BE2ECa78Ht/kEg= -sigs.k8s.io/kustomize/kyaml v0.13.7 h1:/EZ/nPaLUzeJKF/BuJ4QCuMVJWiEVoI8iftOHY3g3tk= -sigs.k8s.io/kustomize/kyaml v0.13.7/go.mod h1:6K+IUOuir3Y7nucPRAjw9yth04KSWBnP5pqUTGwj/qU= +sigs.k8s.io/kustomize/kyaml v0.13.9 h1:Qz53EAaFFANyNgyOEJbT/yoIHygK40/ZcvU3rgry2Tk= +sigs.k8s.io/kustomize/kyaml v0.13.9/go.mod h1:QsRbD0/KcU+wdk0/L0fIp2KLnohkVzs6fQ85/nOXac4= sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= sigs.k8s.io/structured-merge-diff/v4 v4.2.1 h1:bKCqE9GvQ5tiVHn5rfn1r+yao3aLQEaLzkkmAkf+A6Y= sigs.k8s.io/structured-merge-diff/v4 v4.2.1/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= diff --git a/manifests/bases/kustomize-controller/kustomization.yaml b/manifests/bases/kustomize-controller/kustomization.yaml index 2ae59c8a..b6a45593 100644 --- a/manifests/bases/kustomize-controller/kustomization.yaml +++ b/manifests/bases/kustomize-controller/kustomization.yaml @@ -1,9 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization -# TODO: remove the hardcoded branch when OCIRepository is released resources: -- https://github.com/fluxcd/kustomize-controller/config/crd?ref=oci -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.26.1/kustomize-controller.deployment.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.27.0/kustomize-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.27.0/kustomize-controller.deployment.yaml - account.yaml patchesJson6902: - target: @@ -12,7 +11,4 @@ patchesJson6902: kind: Deployment name: kustomize-controller path: patch.yaml -# TODO: remove the hardcoded image when OCIRepository is released -images: - - name: fluxcd/kustomize-controller - newTag: oci-7681bda9 + diff --git a/manifests/bases/notification-controller/kustomization.yaml b/manifests/bases/notification-controller/kustomization.yaml index febba4e0..afbaf63a 100644 --- a/manifests/bases/notification-controller/kustomization.yaml +++ b/manifests/bases/notification-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/notification-controller/releases/download/v0.24.1/notification-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v0.24.1/notification-controller.deployment.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.25.0/notification-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.25.0/notification-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index 2e882ada..01ba7584 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -1,9 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization -# TODO: remove the hardcoded branch when OCIRepository is released resources: -- https://github.com/fluxcd/source-controller/config/crd?ref=oci -- https://github.com/fluxcd/source-controller/releases/download/v0.25.5/source-controller.deployment.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.26.0/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.26.0/source-controller.deployment.yaml - account.yaml patchesJson6902: - target: @@ -12,7 +11,4 @@ patchesJson6902: kind: Deployment name: source-controller path: patch.yaml -# TODO: remove the hardcoded image when OCIRepository is released -images: - - name: fluxcd/source-controller - newTag: oci-d95db940 + From d4718f6ff41cd63c7191087b1d316da6bb828b89 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Tue, 9 Aug 2022 13:27:45 +0300 Subject: [PATCH 202/818] Improve artifact commands docs Signed-off-by: Stefan Prodan --- cmd/flux/build_artifact.go | 7 +++++-- cmd/flux/list_artifact.go | 6 +++--- cmd/flux/push_artifact.go | 18 +++++++++++++----- cmd/flux/tag_artifact.go | 6 +++--- 4 files changed, 24 insertions(+), 13 deletions(-) diff --git a/cmd/flux/build_artifact.go b/cmd/flux/build_artifact.go index a2b6eaa4..a7db13f6 100644 --- a/cmd/flux/build_artifact.go +++ b/cmd/flux/build_artifact.go @@ -29,8 +29,11 @@ var buildArtifactCmd = &cobra.Command{ Use: "artifact", Short: "Build artifact", Long: `The build artifact command creates an tgz file with the manifests from the given directory.`, - Example: `# Build the given manifests directory into an artifact -flux build artifact --path ./path/to/local/manifests --output ./path/to/artifact.tgz + Example: ` # Build the given manifests directory into an artifact + flux build artifact --path ./path/to/local/manifests --output ./path/to/artifact.tgz + + # List the files bundles in the artifact + tar -ztvf ./path/to/artifact.tgz `, RunE: buildArtifactCmdRun, } diff --git a/cmd/flux/list_artifact.go b/cmd/flux/list_artifact.go index 6632c1a3..eb0d4127 100644 --- a/cmd/flux/list_artifact.go +++ b/cmd/flux/list_artifact.go @@ -31,9 +31,9 @@ var listArtifactsCmd = &cobra.Command{ Use: "artifacts", Short: "list artifacts", Long: `The list command fetches the tags and their metadata from a remote OCI repository. -The list command uses the credentials from '~/.docker/config.json'.`, - Example: `# list the artifacts stored in an OCI repository -flux list artifact oci://ghcr.io/org/manifests/app +The command uses the credentials from '~/.docker/config.json'.`, + Example: ` # List the artifacts stored in an OCI repository + flux list artifact oci://ghcr.io/org/config/app `, RunE: listArtifactsCmdRun, } diff --git a/cmd/flux/push_artifact.go b/cmd/flux/push_artifact.go index f16ee98d..009ba437 100644 --- a/cmd/flux/push_artifact.go +++ b/cmd/flux/push_artifact.go @@ -29,13 +29,21 @@ import ( var pushArtifactCmd = &cobra.Command{ Use: "artifact", Short: "Push artifact", - Long: `The push artifact command creates a tarball from the given directory and uploads the artifact to a OCI repository. -The push command uses the credentials from '~/.docker/config.json'.`, - Example: `# Push the local manifests to GHCR -flux push artifact oci://ghcr.io/org/manifests/app:v0.0.1 \ + Long: `The push artifact command creates a tarball from the given directory and uploads the artifact to an OCI repository. +The command uses the credentials from '~/.docker/config.json'.`, + Example: ` # Push manifests to GHCR using the short Git SHA as the OCI artifact tag + echo $GITHUB_PAT | docker login ghcr.io --username flux --password-stdin + flux push artifact oci://ghcr.io/org/config/app:$(git rev-parse --short HEAD) \ --path="./path/to/local/manifests" \ --source="$(git config --get remote.origin.url)" \ --revision="$(git branch --show-current)/$(git rev-parse HEAD)" + + # Push manifests to Docker Hub using the Git tag as the OCI artifact tag + echo $DOCKER_PAT | docker login --username flux --password-stdin + flux push artifact oci://docker.io/org/app-config:$(git tag --points-at HEAD) \ + --path="./path/to/local/manifests" \ + --source="$(git config --get remote.origin.url)" \ + --revision="$(git tag --points-at HEAD)/$(git rev-parse HEAD)" `, RunE: pushArtifactCmdRun, } @@ -50,7 +58,7 @@ var pushArtifactArgs pushArtifactFlags func init() { pushArtifactCmd.Flags().StringVar(&pushArtifactArgs.path, "path", "", "Path to the directory where the Kubernetes manifests are located.") - pushArtifactCmd.Flags().StringVar(&pushArtifactArgs.source, "source", "", "The source address, e.g. Git URL.") + pushArtifactCmd.Flags().StringVar(&pushArtifactArgs.source, "source", "", "The source address, e.g. the Git URL.") pushArtifactCmd.Flags().StringVar(&pushArtifactArgs.revision, "revision", "", "The source revision in the format '/'") pushCmd.AddCommand(pushArtifactCmd) } diff --git a/cmd/flux/tag_artifact.go b/cmd/flux/tag_artifact.go index 4f82bf7f..4cfed851 100644 --- a/cmd/flux/tag_artifact.go +++ b/cmd/flux/tag_artifact.go @@ -29,9 +29,9 @@ var tagArtifactCmd = &cobra.Command{ Use: "artifact", Short: "Tag artifact", Long: `The tag artifact command creates tags for the given OCI artifact. -The tag command uses the credentials from '~/.docker/config.json'.`, - Example: `# Tag an artifact version as latest -flux tag artifact oci://ghcr.io/org/manifests/app:v0.0.1 --tag latest +The command uses the credentials from '~/.docker/config.json'.`, + Example: ` # Tag an artifact version as latest + flux tag artifact oci://ghcr.io/org/manifests/app:v0.0.1 --tag latest `, RunE: tagArtifactCmdRun, } From d4c5a137a1650bb4dec3d03973526f3ab5ef8d3f Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Tue, 9 Aug 2022 13:50:27 +0300 Subject: [PATCH 203/818] Add examples for pushing artifacts with GH Actions Signed-off-by: Stefan Prodan --- action/README.md | 82 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 81 insertions(+), 1 deletion(-) diff --git a/action/README.md b/action/README.md index 7a432d6b..f2871b76 100644 --- a/action/README.md +++ b/action/README.md @@ -32,7 +32,7 @@ You can download a specific version with: - name: Setup Flux CLI uses: fluxcd/flux2/action@main with: - version: 0.8.0 + version: 0.32.0 ``` ### Automate Flux updates @@ -74,6 +74,86 @@ jobs: ${{ steps.update.outputs.flux_version }} ``` +### Push Kubernetes manifests to container registries + +Example workflow for publishing Kubernetes manifests bundled as OCI artifacts to GitHub Container Registry: + +```yaml +name: push-artifact-staging + +on: + push: + branches: + - 'main' + +permissions: + packages: write # needed for ghcr.io access + +env: + OCI_REPO: "oci://ghcr.io/my-org/manifests/${{ github.event.repository.name }}" + +jobs: + kubernetes: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Setup Flux CLI + uses: fluxcd/flux2/action@main + - name: Generate manifests + run: | + kustomize build ./manifests/staging > ./deploy/app.yaml + - name: Push manifests + run: | + flux push artifact $OCI_REPO:$(git rev-parse --short HEAD) \ + --path="./deploy" \ + --source="$(git config --get remote.origin.url)" \ + --revision="$(git branch --show-current)/$(git rev-parse HEAD)" + - name: Deploy manifests to staging + run: | + flux tag artifact $OCI_REPO:$(git rev-parse --short HEAD) --tag staging +``` + +Example workflow for publishing Kubernetes manifests bundled as OCI artifacts to Docker Hub: + +```yaml +name: push-artifact-production + +on: + push: + tags: + - '*' + +env: + OCI_REPO: "oci://docker.io/my-org/app-config" + +jobs: + kubernetes: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Setup Flux CLI + uses: fluxcd/flux2/action@main + - name: Login to Docker Hub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + - name: Generate manifests + run: | + kustomize build ./manifests/production > ./deploy/app.yaml + - name: Push manifests + run: | + flux push artifact $OCI_REPO:$(git tag --points-at HEAD) \ + --path="./deploy" \ + --source="$(git config --get remote.origin.url)" \ + --revision="$(git tag --points-at HEAD)/$(git rev-parse HEAD)" + - name: Deploy manifests to production + run: | + flux tag artifact $OCI_REPO:$(git tag --points-at HEAD) --tag production +``` + ### End-to-end testing Example workflow for running Flux in Kubernetes Kind: From 75a879c77030b8444b4b3f1a31b6f612f468e7ac Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 10 Aug 2022 11:51:11 +0300 Subject: [PATCH 204/818] OCI docs improvements Co-authored-by: Kingdon Barrett Co-authored-by: Sunny Signed-off-by: Stefan Prodan --- action/README.md | 10 ++++++++-- cmd/flux/build_artifact.go | 8 ++++---- cmd/flux/create_secret_oci.go | 6 +++--- cmd/flux/create_source_oci.go | 2 +- cmd/flux/delete_source_oci.go | 2 +- cmd/flux/get_source_oci.go | 2 +- cmd/flux/list.go | 2 +- cmd/flux/pull_artifact.go | 6 +++--- cmd/flux/push.go | 2 +- cmd/flux/push_artifact.go | 6 +++--- cmd/flux/reconcile_source_oci.go | 2 +- cmd/flux/resume_source_oci.go | 2 +- cmd/flux/suspend_source_oci.go | 2 +- cmd/flux/tag.go | 2 +- cmd/flux/tag_artifact.go | 2 +- 15 files changed, 31 insertions(+), 25 deletions(-) diff --git a/action/README.md b/action/README.md index f2871b76..daeada31 100644 --- a/action/README.md +++ b/action/README.md @@ -97,9 +97,15 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Setup Flux CLI uses: fluxcd/flux2/action@main + - name: Login to GHCR + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} - name: Generate manifests run: | kustomize build ./manifests/staging > ./deploy/app.yaml @@ -132,7 +138,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Setup Flux CLI uses: fluxcd/flux2/action@main - name: Login to Docker Hub diff --git a/cmd/flux/build_artifact.go b/cmd/flux/build_artifact.go index a7db13f6..bf523fa0 100644 --- a/cmd/flux/build_artifact.go +++ b/cmd/flux/build_artifact.go @@ -28,11 +28,11 @@ import ( var buildArtifactCmd = &cobra.Command{ Use: "artifact", Short: "Build artifact", - Long: `The build artifact command creates an tgz file with the manifests from the given directory.`, + Long: `The build artifact command creates a tgz file with the manifests from the given directory.`, Example: ` # Build the given manifests directory into an artifact flux build artifact --path ./path/to/local/manifests --output ./path/to/artifact.tgz - # List the files bundles in the artifact + # List the files bundled in the artifact tar -ztvf ./path/to/artifact.tgz `, RunE: buildArtifactCmdRun, @@ -47,7 +47,7 @@ var buildArtifactArgs buildArtifactFlags func init() { buildArtifactCmd.Flags().StringVar(&buildArtifactArgs.path, "path", "", "Path to the directory where the Kubernetes manifests are located.") - buildArtifactCmd.Flags().StringVarP(&buildArtifactArgs.output, "output", "0", "artifact.tgz", "Path to where the artifact tgz file should be written.") + buildArtifactCmd.Flags().StringVarP(&buildArtifactArgs.output, "output", "o", "artifact.tgz", "Path to where the artifact tgz file should be written.") buildCmd.AddCommand(buildArtifactCmd) } @@ -57,7 +57,7 @@ func buildArtifactCmdRun(cmd *cobra.Command, args []string) error { } if fs, err := os.Stat(buildArtifactArgs.path); err != nil || !fs.IsDir() { - return fmt.Errorf("invalid path %q", buildArtifactArgs.path) + return fmt.Errorf("invalid path '%s', must point to an existing directory", buildArtifactArgs.path) } logger.Actionf("building artifact from %s", buildArtifactArgs.path) diff --git a/cmd/flux/create_secret_oci.go b/cmd/flux/create_secret_oci.go index 2e86f461..b7cb3449 100644 --- a/cmd/flux/create_secret_oci.go +++ b/cmd/flux/create_secret_oci.go @@ -30,8 +30,8 @@ import ( var createSecretOCICmd = &cobra.Command{ Use: "oci [name]", - Short: "Create or update a Kubernetes secret for OCI Registry authentication", - Long: `The create secret oci command generates a Kubernetes secret with `, + Short: "Create or update a Kubernetes image pull secret", + Long: `The create secret oci command generates a Kubernetes secret that can be used for OCIRepository authentication`, Example: ` # Create an OCI authentication secret on disk and encrypt it with Mozilla SOPS flux create secret oci podinfo-auth \ --url=ghcr.io \ @@ -39,7 +39,7 @@ var createSecretOCICmd = &cobra.Command{ --password=password \ --export > repo-auth.yaml - sops --encrypt --encrypted-regex '^(data|stringData)$' \ + sops --encrypt --encrypted-regex '^(data|stringData)$' \ --in-place repo-auth.yaml `, RunE: createSecretOCICmdRun, diff --git a/cmd/flux/create_source_oci.go b/cmd/flux/create_source_oci.go index 2481fe7d..75372a35 100644 --- a/cmd/flux/create_source_oci.go +++ b/cmd/flux/create_source_oci.go @@ -71,7 +71,7 @@ func newSourceOCIFlags() sourceOCIRepositoryFlags { } func init() { - createSourceOCIRepositoryCmd.Flags().Var(&sourceOCIRepositoryArgs.provider, "provider", sourceBucketArgs.provider.Description()) + createSourceOCIRepositoryCmd.Flags().Var(&sourceOCIRepositoryArgs.provider, "provider", sourceOCIRepositoryArgs.provider.Description()) createSourceOCIRepositoryCmd.Flags().StringVar(&sourceOCIRepositoryArgs.url, "url", "", "the OCI repository URL") createSourceOCIRepositoryCmd.Flags().StringVar(&sourceOCIRepositoryArgs.tag, "tag", "", "the OCI artifact tag") createSourceOCIRepositoryCmd.Flags().StringVar(&sourceOCIRepositoryArgs.semver, "tag-semver", "", "the OCI artifact tag semver range") diff --git a/cmd/flux/delete_source_oci.go b/cmd/flux/delete_source_oci.go index 1d641bbf..8d98e5b0 100644 --- a/cmd/flux/delete_source_oci.go +++ b/cmd/flux/delete_source_oci.go @@ -24,7 +24,7 @@ import ( var deleteSourceOCIRepositoryCmd = &cobra.Command{ Use: "oci [name]", - Short: "Delete a OCIRepository source", + Short: "Delete an OCIRepository source", Long: "The delete source oci command deletes the given OCIRepository from the cluster.", Example: ` # Delete an OCIRepository flux delete source oci podinfo`, diff --git a/cmd/flux/get_source_oci.go b/cmd/flux/get_source_oci.go index 8f948d81..b79f73f8 100644 --- a/cmd/flux/get_source_oci.go +++ b/cmd/flux/get_source_oci.go @@ -34,7 +34,7 @@ var getSourceOCIRepositoryCmd = &cobra.Command{ Example: ` # List all OCIRepositories and their status flux get sources oci - # List OCIRepositories from all namespaces + # List OCIRepositories from all namespaces flux get sources oci --all-namespaces`, ValidArgsFunction: resourceNamesCompletionFunc(sourcev1.GroupVersion.WithKind(sourcev1.OCIRepositoryKind)), RunE: func(cmd *cobra.Command, args []string) error { diff --git a/cmd/flux/list.go b/cmd/flux/list.go index e89dc149..240e69d0 100644 --- a/cmd/flux/list.go +++ b/cmd/flux/list.go @@ -1,5 +1,5 @@ /* -Copyright 2021 The Flux authors +Copyright 2022 The Flux authors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/cmd/flux/pull_artifact.go b/cmd/flux/pull_artifact.go index 7f508e53..f36ab3d0 100644 --- a/cmd/flux/pull_artifact.go +++ b/cmd/flux/pull_artifact.go @@ -31,8 +31,8 @@ var pullArtifactCmd = &cobra.Command{ Short: "Pull artifact", Long: `The pull artifact command downloads and extracts the OCI artifact content to the given path. The pull command uses the credentials from '~/.docker/config.json'.`, - Example: `# Pull an OCI artifact created by flux from GHCR -flux pull artifact oci://ghcr.io/org/manifests/app:v0.0.1 --output ./path/to/local/manifests + Example: ` # Pull an OCI artifact created by flux from GHCR + flux pull artifact oci://ghcr.io/org/manifests/app:v0.0.1 --output ./path/to/local/manifests `, RunE: pullArtifactCmdRun, } @@ -44,7 +44,7 @@ type pullArtifactFlags struct { var pullArtifactArgs pullArtifactFlags func init() { - pullArtifactCmd.Flags().StringVarP(&pullArtifactArgs.output, "output", "o", "", "Path where the artifact content should be extracted.") + pullArtifactCmd.Flags().StringVarP(&pullArtifactArgs.output, "output", "o", "", "path where the artifact content should be extracted.") pullCmd.AddCommand(pullArtifactCmd) } diff --git a/cmd/flux/push.go b/cmd/flux/push.go index 481c6ae9..eec4882d 100644 --- a/cmd/flux/push.go +++ b/cmd/flux/push.go @@ -1,5 +1,5 @@ /* -Copyright 2021 The Flux authors +Copyright 2022 The Flux authors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/cmd/flux/push_artifact.go b/cmd/flux/push_artifact.go index 009ba437..6f318602 100644 --- a/cmd/flux/push_artifact.go +++ b/cmd/flux/push_artifact.go @@ -57,9 +57,9 @@ type pushArtifactFlags struct { var pushArtifactArgs pushArtifactFlags func init() { - pushArtifactCmd.Flags().StringVar(&pushArtifactArgs.path, "path", "", "Path to the directory where the Kubernetes manifests are located.") - pushArtifactCmd.Flags().StringVar(&pushArtifactArgs.source, "source", "", "The source address, e.g. the Git URL.") - pushArtifactCmd.Flags().StringVar(&pushArtifactArgs.revision, "revision", "", "The source revision in the format '/'") + pushArtifactCmd.Flags().StringVar(&pushArtifactArgs.path, "path", "", "path to the directory where the Kubernetes manifests are located") + pushArtifactCmd.Flags().StringVar(&pushArtifactArgs.source, "source", "", "the source address, e.g. the Git URL") + pushArtifactCmd.Flags().StringVar(&pushArtifactArgs.revision, "revision", "", "the source revision in the format '/'") pushCmd.AddCommand(pushArtifactCmd) } diff --git a/cmd/flux/reconcile_source_oci.go b/cmd/flux/reconcile_source_oci.go index 17df7174..ffc649f9 100644 --- a/cmd/flux/reconcile_source_oci.go +++ b/cmd/flux/reconcile_source_oci.go @@ -1,5 +1,5 @@ /* -Copyright 2020 The Flux authors +Copyright 2022 The Flux authors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/cmd/flux/resume_source_oci.go b/cmd/flux/resume_source_oci.go index 42ad48ab..3c121c47 100644 --- a/cmd/flux/resume_source_oci.go +++ b/cmd/flux/resume_source_oci.go @@ -1,5 +1,5 @@ /* -Copyright 2020 The Flux authors +Copyright 2022 The Flux authors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/cmd/flux/suspend_source_oci.go b/cmd/flux/suspend_source_oci.go index 06ab4c6c..d656dbf2 100644 --- a/cmd/flux/suspend_source_oci.go +++ b/cmd/flux/suspend_source_oci.go @@ -24,7 +24,7 @@ import ( var suspendSourceOCIRepositoryCmd = &cobra.Command{ Use: "oci [name]", - Short: "Suspend reconciliation of a OCIRepository", + Short: "Suspend reconciliation of an OCIRepository", Long: "The suspend command disables the reconciliation of an OCIRepository resource.", Example: ` # Suspend reconciliation for an existing OCIRepository flux suspend source oci podinfo`, diff --git a/cmd/flux/tag.go b/cmd/flux/tag.go index 56c9485f..966acef6 100644 --- a/cmd/flux/tag.go +++ b/cmd/flux/tag.go @@ -1,5 +1,5 @@ /* -Copyright 2021 The Flux authors +Copyright 2022 The Flux authors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/cmd/flux/tag_artifact.go b/cmd/flux/tag_artifact.go index 4cfed851..65ba1218 100644 --- a/cmd/flux/tag_artifact.go +++ b/cmd/flux/tag_artifact.go @@ -43,7 +43,7 @@ type tagArtifactFlags struct { var tagArtifactArgs tagArtifactFlags func init() { - tagArtifactCmd.Flags().StringSliceVar(&tagArtifactArgs.tags, "tag", nil, "Tag name.") + tagArtifactCmd.Flags().StringSliceVar(&tagArtifactArgs.tags, "tag", nil, "tag name") tagCmd.AddCommand(tagArtifactCmd) } From b810aea6ccb7b2f3ad9f5b049b1609b5463b1975 Mon Sep 17 00:00:00 2001 From: Max Jonas Werner Date: Wed, 10 Aug 2022 14:27:23 +0200 Subject: [PATCH 205/818] Make `flux trace` work with OCIRepository * Added support for OCIRepositories to `flux trace` * Changed indentation to compensate new, longer field name "Source Revision" * Added unit tests for the new output closes #2970 Signed-off-by: Max Jonas Werner --- .../testdata/trace/helmrelease-oci.golden | 21 ++++ cmd/flux/testdata/trace/helmrelease-oci.yaml | 92 ++++++++++++++ cmd/flux/testdata/trace/helmrelease.golden | 32 ++--- cmd/flux/trace.go | 119 +++++++++++++----- cmd/flux/trace_test.go | 12 ++ 5 files changed, 228 insertions(+), 48 deletions(-) create mode 100644 cmd/flux/testdata/trace/helmrelease-oci.golden create mode 100644 cmd/flux/testdata/trace/helmrelease-oci.yaml diff --git a/cmd/flux/testdata/trace/helmrelease-oci.golden b/cmd/flux/testdata/trace/helmrelease-oci.golden new file mode 100644 index 00000000..768c4616 --- /dev/null +++ b/cmd/flux/testdata/trace/helmrelease-oci.golden @@ -0,0 +1,21 @@ + +Object: HelmRelease/podinfo +Namespace: {{ .ns }} +Status: Managed by Flux +--- +Kustomization: infrastructure +Namespace: {{ .fluxns }} +Path: ./infrastructure +Revision: main/696f056df216eea4f9401adbee0ff744d4df390f +Status: Last reconciled at {{ .kustomizationLastReconcile }} +Message: Applied revision: main/696f056df216eea4f9401adbee0ff744d4df390f +--- +OCIRepository: flux-system +Namespace: {{ .fluxns }} +URL: oci://ghcr.io/example/repo +Tag: 1.2.3 +Revision: dbdb109711ffb3be77504d2670dbe13c24dd63d8d7f1fb489d350e5bfe930dd3 +Origin Revision: 6.1.6/450796ddb2ab6724ee1cc32a4be56da032d1cca0 +Origin Source: https://github.com/stefanprodan/podinfo.git +Status: Last reconciled at {{ .ociRepositoryLastReconcile }} +Message: stored artifact for digest 'dbdb109711ffb3be77504d2670dbe13c24dd63d8d7f1fb489d350e5bfe930dd3' diff --git a/cmd/flux/testdata/trace/helmrelease-oci.yaml b/cmd/flux/testdata/trace/helmrelease-oci.yaml new file mode 100644 index 00000000..7c3fa2da --- /dev/null +++ b/cmd/flux/testdata/trace/helmrelease-oci.yaml @@ -0,0 +1,92 @@ +--- +apiVersion: v1 +kind: Namespace +metadata: + name: {{ .fluxns }} +--- +apiVersion: v1 +kind: Namespace +metadata: + name: {{ .ns }} +--- +apiVersion: helm.toolkit.fluxcd.io/v2beta1 +kind: HelmRelease +metadata: + labels: + kustomize.toolkit.fluxcd.io/name: infrastructure + kustomize.toolkit.fluxcd.io/namespace: {{ .fluxns }} + name: podinfo + namespace: {{ .ns }} +spec: + chart: + spec: + chart: podinfo + sourceRef: + kind: HelmRepository + name: podinfo + namespace: {{ .fluxns }} + interval: 5m +status: + conditions: + - lastTransitionTime: "2021-07-16T15:42:20Z" + message: Release reconciliation succeeded + reason: ReconciliationSucceeded + status: "True" + type: Ready + helmChart: {{ .fluxns }}/podinfo-podinfo + lastAppliedRevision: 6.0.0 + lastAttemptedRevision: 6.0.0 + lastAttemptedValuesChecksum: c31db75d05b7515eba2eef47bd71038c74b2e531 +--- +apiVersion: kustomize.toolkit.fluxcd.io/v1beta2 +kind: Kustomization +metadata: + name: infrastructure + namespace: {{ .fluxns }} +spec: + path: ./infrastructure + sourceRef: + kind: OCIRepository + name: flux-system + validation: client + interval: 5m + prune: false +status: + conditions: + - lastTransitionTime: "2021-08-01T04:52:56Z" + message: 'Applied revision: main/696f056df216eea4f9401adbee0ff744d4df390f' + reason: ReconciliationSucceeded + status: "True" + type: Ready + lastAppliedRevision: main/696f056df216eea4f9401adbee0ff744d4df390f +--- +apiVersion: source.toolkit.fluxcd.io/v1beta2 +kind: OCIRepository +metadata: + labels: + kustomize.toolkit.fluxcd.io/name: flux-system + kustomize.toolkit.fluxcd.io/namespace: {{ .fluxns }} + name: flux-system + namespace: {{ .fluxns }} +spec: + interval: 10m0s + provider: generic + ref: + tag: 1.2.3 + timeout: 60s + url: oci://ghcr.io/example/repo +status: + artifact: + lastUpdateTime: "2022-08-10T10:07:59Z" + metadata: + org.opencontainers.image.revision: 6.1.6/450796ddb2ab6724ee1cc32a4be56da032d1cca0 + org.opencontainers.image.source: https://github.com/stefanprodan/podinfo.git + path: "example" + revision: dbdb109711ffb3be77504d2670dbe13c24dd63d8d7f1fb489d350e5bfe930dd3 + url: "example" + conditions: + - lastTransitionTime: "2021-07-20T00:48:16Z" + message: "stored artifact for digest 'dbdb109711ffb3be77504d2670dbe13c24dd63d8d7f1fb489d350e5bfe930dd3'" + reason: Succeed + status: "True" + type: Ready diff --git a/cmd/flux/testdata/trace/helmrelease.golden b/cmd/flux/testdata/trace/helmrelease.golden index cd775bad..310d2192 100644 --- a/cmd/flux/testdata/trace/helmrelease.golden +++ b/cmd/flux/testdata/trace/helmrelease.golden @@ -1,19 +1,19 @@ -Object: HelmRelease/podinfo -Namespace: {{ .ns }} -Status: Managed by Flux +Object: HelmRelease/podinfo +Namespace: {{ .ns }} +Status: Managed by Flux --- -Kustomization: infrastructure -Namespace: {{ .fluxns }} -Path: ./infrastructure -Revision: main/696f056df216eea4f9401adbee0ff744d4df390f -Status: Last reconciled at {{ .kustomizationLastReconcile }} -Message: Applied revision: main/696f056df216eea4f9401adbee0ff744d4df390f +Kustomization: infrastructure +Namespace: {{ .fluxns }} +Path: ./infrastructure +Revision: main/696f056df216eea4f9401adbee0ff744d4df390f +Status: Last reconciled at {{ .kustomizationLastReconcile }} +Message: Applied revision: main/696f056df216eea4f9401adbee0ff744d4df390f --- -GitRepository: flux-system -Namespace: {{ .fluxns }} -URL: ssh://git@github.com/example/repo -Branch: main -Revision: main/696f056df216eea4f9401adbee0ff744d4df390f -Status: Last reconciled at {{ .gitRepositoryLastReconcile }} -Message: Fetched revision: main/696f056df216eea4f9401adbee0ff744d4df390f +GitRepository: flux-system +Namespace: {{ .fluxns }} +URL: ssh://git@github.com/example/repo +Branch: main +Revision: main/696f056df216eea4f9401adbee0ff744d4df390f +Status: Last reconciled at {{ .gitRepositoryLastReconcile }} +Message: Fetched revision: main/696f056df216eea4f9401adbee0ff744d4df390f diff --git a/cmd/flux/trace.go b/cmd/flux/trace.go index 926b6016..1a9e0acd 100644 --- a/cmd/flux/trace.go +++ b/cmd/flux/trace.go @@ -37,6 +37,7 @@ import ( helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" fluxmeta "github.com/fluxcd/pkg/apis/meta" + "github.com/fluxcd/pkg/oci" sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" ) @@ -219,10 +220,12 @@ func traceKustomization(ctx context.Context, kubeClient client.Client, ksName ty } ksReady := meta.FindStatusCondition(ks.Status.Conditions, fluxmeta.ReadyCondition) - var ksRepository *sourcev1.GitRepository + var gitRepository *sourcev1.GitRepository + var ociRepository *sourcev1.OCIRepository var ksRepositoryReady *metav1.Condition - if ks.Spec.SourceRef.Kind == sourcev1.GitRepositoryKind { - ksRepository = &sourcev1.GitRepository{} + switch ks.Spec.SourceRef.Kind { + case sourcev1.GitRepositoryKind: + gitRepository = &sourcev1.GitRepository{} sourceNamespace := ks.Namespace if ks.Spec.SourceRef.Namespace != "" { sourceNamespace = ks.Spec.SourceRef.Namespace @@ -230,61 +233,109 @@ func traceKustomization(ctx context.Context, kubeClient client.Client, ksName ty err = kubeClient.Get(ctx, types.NamespacedName{ Namespace: sourceNamespace, Name: ks.Spec.SourceRef.Name, - }, ksRepository) + }, gitRepository) if err != nil { return "", fmt.Errorf("failed to find GitRepository: %w", err) } - ksRepositoryReady = meta.FindStatusCondition(ksRepository.Status.Conditions, fluxmeta.ReadyCondition) + ksRepositoryReady = meta.FindStatusCondition(gitRepository.Status.Conditions, fluxmeta.ReadyCondition) + case sourcev1.OCIRepositoryKind: + ociRepository = &sourcev1.OCIRepository{} + sourceNamespace := ks.Namespace + if ks.Spec.SourceRef.Namespace != "" { + sourceNamespace = ks.Spec.SourceRef.Namespace + } + err = kubeClient.Get(ctx, types.NamespacedName{ + Namespace: sourceNamespace, + Name: ks.Spec.SourceRef.Name, + }, ociRepository) + if err != nil { + return "", fmt.Errorf("failed to find OCIRepository: %w", err) + } + ksRepositoryReady = meta.FindStatusCondition(ociRepository.Status.Conditions, fluxmeta.ReadyCondition) } var traceTmpl = ` -Object: {{.ObjectName}} +Object: {{.ObjectName}} {{- if .ObjectNamespace }} -Namespace: {{.ObjectNamespace}} +Namespace: {{.ObjectNamespace}} {{- end }} -Status: Managed by Flux +Status: Managed by Flux {{- if .Kustomization }} --- -Kustomization: {{.Kustomization.Name}} -Namespace: {{.Kustomization.Namespace}} +Kustomization: {{.Kustomization.Name}} +Namespace: {{.Kustomization.Namespace}} {{- if .Kustomization.Spec.TargetNamespace }} -Target: {{.Kustomization.Spec.TargetNamespace}} +Target: {{.Kustomization.Spec.TargetNamespace}} {{- end }} -Path: {{.Kustomization.Spec.Path}} -Revision: {{.Kustomization.Status.LastAppliedRevision}} +Path: {{.Kustomization.Spec.Path}} +Revision: {{.Kustomization.Status.LastAppliedRevision}} {{- if .KustomizationReady }} -Status: Last reconciled at {{.KustomizationReady.LastTransitionTime}} -Message: {{.KustomizationReady.Message}} +Status: Last reconciled at {{.KustomizationReady.LastTransitionTime}} +Message: {{.KustomizationReady.Message}} {{- else }} -Status: Unknown +Status: Unknown {{- end }} {{- end }} {{- if .GitRepository }} --- -GitRepository: {{.GitRepository.Name}} -Namespace: {{.GitRepository.Namespace}} -URL: {{.GitRepository.Spec.URL}} +GitRepository: {{.GitRepository.Name}} +Namespace: {{.GitRepository.Namespace}} +URL: {{.GitRepository.Spec.URL}} {{- if .GitRepository.Spec.Reference }} {{- if .GitRepository.Spec.Reference.Tag }} -Tag: {{.GitRepository.Spec.Reference.Tag}} +Tag: {{.GitRepository.Spec.Reference.Tag}} {{- else if .GitRepository.Spec.Reference.SemVer }} -Tag: {{.GitRepository.Spec.Reference.SemVer}} +Tag: {{.GitRepository.Spec.Reference.SemVer}} {{- else if .GitRepository.Spec.Reference.Branch }} -Branch: {{.GitRepository.Spec.Reference.Branch}} +Branch: {{.GitRepository.Spec.Reference.Branch}} {{- end }} {{- end }} {{- if .GitRepository.Status.Artifact }} -Revision: {{.GitRepository.Status.Artifact.Revision}} +Revision: {{.GitRepository.Status.Artifact.Revision}} {{- end }} -{{- if .GitRepositoryReady }} -{{- if eq .GitRepositoryReady.Status "False" }} -Status: Last reconciliation failed at {{.GitRepositoryReady.LastTransitionTime}} +{{- if .RepositoryReady }} +{{- if eq .RepositoryReady.Status "False" }} +Status: Last reconciliation failed at {{.RepositoryReady.LastTransitionTime}} {{- else }} -Status: Last reconciled at {{.GitRepositoryReady.LastTransitionTime}} +Status: Last reconciled at {{.RepositoryReady.LastTransitionTime}} {{- end }} -Message: {{.GitRepositoryReady.Message}} +Message: {{.RepositoryReady.Message}} {{- else }} -Status: Unknown +Status: Unknown +{{- end }} +{{- end }} +{{- if .OCIRepository }} +--- +OCIRepository: {{.OCIRepository.Name}} +Namespace: {{.OCIRepository.Namespace}} +URL: {{.OCIRepository.Spec.URL}} +{{- if .OCIRepository.Spec.Reference }} +{{- if .OCIRepository.Spec.Reference.Tag }} +Tag: {{.OCIRepository.Spec.Reference.Tag}} +{{- else if .OCIRepository.Spec.Reference.SemVer }} +Tag: {{.OCIRepository.Spec.Reference.SemVer}} +{{- else if .OCIRepository.Spec.Reference.Digest }} +Digest: {{.OCIRepository.Spec.Reference.Digest}} +{{- end }} +{{- end }} +{{- if .OCIRepository.Status.Artifact }} +Revision: {{.OCIRepository.Status.Artifact.Revision}} +{{- if .OCIRepository.Status.Artifact.Metadata }} +{{- $metadata := .OCIRepository.Status.Artifact.Metadata }} +{{- range $k, $v := .Annotations }} +{{ with (index $metadata $v) }}{{ $k }}{{ . }}{{ end }} +{{- end }} +{{- end }} +{{- end }} +{{- if .RepositoryReady }} +{{- if eq .RepositoryReady.Status "False" }} +Status: Last reconciliation failed at {{.RepositoryReady.LastTransitionTime}} +{{- else }} +Status: Last reconciled at {{.RepositoryReady.LastTransitionTime}} +{{- end }} +Message: {{.RepositoryReady.Message}} +{{- else }} +Status: Unknown {{- end }} {{- end }} ` @@ -295,14 +346,18 @@ Status: Unknown Kustomization *kustomizev1.Kustomization KustomizationReady *metav1.Condition GitRepository *sourcev1.GitRepository - GitRepositoryReady *metav1.Condition + OCIRepository *sourcev1.OCIRepository + RepositoryReady *metav1.Condition + Annotations map[string]string }{ ObjectName: obj.GetKind() + "/" + obj.GetName(), ObjectNamespace: obj.GetNamespace(), Kustomization: ks, KustomizationReady: ksReady, - GitRepository: ksRepository, - GitRepositoryReady: ksRepositoryReady, + GitRepository: gitRepository, + OCIRepository: ociRepository, + RepositoryReady: ksRepositoryReady, + Annotations: map[string]string{"Origin Source: ": oci.SourceAnnotation, "Origin Revision: ": oci.RevisionAnnotation}, } t, err := template.New("tmpl").Parse(traceTmpl) diff --git a/cmd/flux/trace_test.go b/cmd/flux/trace_test.go index 1f3dd889..8020e1a8 100644 --- a/cmd/flux/trace_test.go +++ b/cmd/flux/trace_test.go @@ -57,6 +57,18 @@ func TestTrace(t *testing.T) { "gitRepositoryLastReconcile": toLocalTime(t, "2021-07-20T00:48:16Z"), }, }, + { + "HelmRelease from OCI registry", + "trace podinfo --kind HelmRelease --api-version=helm.toolkit.fluxcd.io/v2beta1", + "testdata/trace/helmrelease-oci.yaml", + "testdata/trace/helmrelease-oci.golden", + map[string]string{ + "ns": allocateNamespace("podinfo"), + "fluxns": allocateNamespace("flux-system"), + "kustomizationLastReconcile": toLocalTime(t, "2021-08-01T04:52:56Z"), + "ociRepositoryLastReconcile": toLocalTime(t, "2021-07-20T00:48:16Z"), + }, + }, } for _, tc := range cases { t.Run(tc.name, func(t *testing.T) { From d4169aa4dd2be847a5f98516729a973f58c41ca4 Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Thu, 11 Aug 2022 14:03:13 +0000 Subject: [PATCH 206/818] Update toolkit components - kustomize-controller to v0.27.0 https://github.com/fluxcd/kustomize-controller/blob/v0.27.0/CHANGELOG.md - source-controller to v0.26.1 https://github.com/fluxcd/source-controller/blob/v0.26.1/CHANGELOG.md - notification-controller to v0.25.1 https://github.com/fluxcd/notification-controller/blob/v0.25.1/CHANGELOG.md - image-reflector-controller to v0.20.0 https://github.com/fluxcd/image-reflector-controller/blob/v0.20.0/CHANGELOG.md - image-automation-controller to v0.24.1 https://github.com/fluxcd/image-automation-controller/blob/v0.24.1/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 8 ++++---- go.sum | 16 ++++++++-------- .../kustomization.yaml | 4 ++-- .../kustomization.yaml | 4 ++-- .../notification-controller/kustomization.yaml | 4 ++-- .../bases/source-controller/kustomization.yaml | 4 ++-- manifests/crds/kustomization.yaml | 10 +++++----- 7 files changed, 25 insertions(+), 25 deletions(-) diff --git a/go.mod b/go.mod index 6b025c10..9a345d1b 100644 --- a/go.mod +++ b/go.mod @@ -8,10 +8,10 @@ require ( github.com/cyphar/filepath-securejoin v0.2.3 github.com/fluxcd/go-git-providers v0.6.0 github.com/fluxcd/helm-controller/api v0.22.2 - github.com/fluxcd/image-automation-controller/api v0.23.5 - github.com/fluxcd/image-reflector-controller/api v0.19.4 + github.com/fluxcd/image-automation-controller/api v0.24.1 + github.com/fluxcd/image-reflector-controller/api v0.20.0 github.com/fluxcd/kustomize-controller/api v0.27.0 - github.com/fluxcd/notification-controller/api v0.25.0 + github.com/fluxcd/notification-controller/api v0.25.1 github.com/fluxcd/pkg/apis/meta v0.14.2 github.com/fluxcd/pkg/kustomize v0.5.2 github.com/fluxcd/pkg/oci v0.3.0 @@ -20,7 +20,7 @@ require ( github.com/fluxcd/pkg/ssh v0.5.0 github.com/fluxcd/pkg/untar v0.1.0 github.com/fluxcd/pkg/version v0.1.0 - github.com/fluxcd/source-controller/api v0.26.0 + github.com/fluxcd/source-controller/api v0.26.1 github.com/go-git/go-git/v5 v5.4.2 github.com/gonvenience/bunt v1.3.4 github.com/gonvenience/ytbx v1.4.4 diff --git a/go.sum b/go.sum index 18b8d0c5..b2a68166 100644 --- a/go.sum +++ b/go.sum @@ -273,14 +273,14 @@ github.com/fluxcd/go-git-providers v0.6.0 h1:XJc3MTYFpuahBSoKTVxmH9OBPCeIyvYoQkT github.com/fluxcd/go-git-providers v0.6.0/go.mod h1:UMFHnMCIO9CBpEln7ZsArEWyXSNxTpm76fyQxUmClrc= github.com/fluxcd/helm-controller/api v0.22.2 h1:nh0GZBsUE0gNzm4PmPa4aOoqYlbZbpGt2pcIL9S2184= github.com/fluxcd/helm-controller/api v0.22.2/go.mod h1:GfD9TFgLyn81VgwZN1yM47/aUdz0SwTSyRAGmC8xZ+c= -github.com/fluxcd/image-automation-controller/api v0.23.5 h1:haMWilXLHXQGn4YXwm70kYvU+7QU5iNoS+0Ybm+4Gac= -github.com/fluxcd/image-automation-controller/api v0.23.5/go.mod h1:v/sRqXwo0jNyXK0f4oUY7GZt8NgcNy5twP3OVEsoAt0= -github.com/fluxcd/image-reflector-controller/api v0.19.4 h1:SnqJS7vhm+jWHsArjMluCdVydu6jY+m3M2mi+oSHh94= -github.com/fluxcd/image-reflector-controller/api v0.19.4/go.mod h1:QFRYeJTfUQY9l3r+PqGGAlr7KzJRCKN7Lsvg9nXaWHk= +github.com/fluxcd/image-automation-controller/api v0.24.1 h1:eTxbpwMM1TbYvFpLeNOn6RHxVzSc7efQpW//AllfbVQ= +github.com/fluxcd/image-automation-controller/api v0.24.1/go.mod h1:SMgfU5bvv8e6HqwJkTHNhWPq/yvInRI8seHN93za0sY= +github.com/fluxcd/image-reflector-controller/api v0.20.0 h1:7Ba/q35MD357rkaSCaQdupKgnwLdQb9CeDVkZrKSTVU= +github.com/fluxcd/image-reflector-controller/api v0.20.0/go.mod h1:CeFHAKU2MvqXyvCmSEyNUBNO5o3EqKQyjbw2D5as96k= github.com/fluxcd/kustomize-controller/api v0.27.0 h1:mhaw15noK7cGFoMkFUCjBgkpqYrKPJ6JoqlmbpLU6nc= github.com/fluxcd/kustomize-controller/api v0.27.0/go.mod h1:qNL44xfm+E2ng8/TqheZZ4bXilWtvVtDYjlKCiMbfM0= -github.com/fluxcd/notification-controller/api v0.25.0 h1:ZAFAfRs+cPcepPjdjbDvl6fOWc1aOoM4r6lozOAxWhw= -github.com/fluxcd/notification-controller/api v0.25.0/go.mod h1:hqn/1JsYiv8Gg3xjBYkLJQhez3hbYj2v57ATfSo637M= +github.com/fluxcd/notification-controller/api v0.25.1 h1:6KyBEiX9U9n4+bjKOJ/mjt8QhG6JD5xXSUD9zDPLEzU= +github.com/fluxcd/notification-controller/api v0.25.1/go.mod h1:hqn/1JsYiv8Gg3xjBYkLJQhez3hbYj2v57ATfSo637M= github.com/fluxcd/pkg/apis/acl v0.0.3 h1:Lw0ZHdpnO4G7Zy9KjrzwwBmDZQuy4qEjaU/RvA6k1lc= github.com/fluxcd/pkg/apis/acl v0.0.3/go.mod h1:XPts6lRJ9C9fIF9xVWofmQwftvhY25n1ps7W9xw0XLU= github.com/fluxcd/pkg/apis/kustomize v0.4.2 h1:5mC/t+OndouK7poFaG4soWLqvHqOxJ3HCsbxu8qyt30= @@ -301,8 +301,8 @@ github.com/fluxcd/pkg/untar v0.1.0 h1:k97V/xV5hFrAkIkVPuv5AVhyxh1ZzzAKba/lbDfGo6 github.com/fluxcd/pkg/untar v0.1.0/go.mod h1:aGswNyzB1mlz/T/kpOS58mITBMxMKc9tlJBH037A2HY= github.com/fluxcd/pkg/version v0.1.0 h1:v+SmCanmCB5Tj2Cx9TXlj+kNRfPGbAvirkeqsp7ZEAQ= github.com/fluxcd/pkg/version v0.1.0/go.mod h1:V7Z/w8dxLQzv0FHqa5ox5TeyOd2zOd49EeuWFgnwyj4= -github.com/fluxcd/source-controller/api v0.26.0 h1:DOf9R7YLV0lNiIRnaYg5bh8fGbIB6zGbK5vFqejeSAk= -github.com/fluxcd/source-controller/api v0.26.0/go.mod h1:1W0Xx/GpZ14Z/sOltxjsQKXeCv8zxAqSivbX9e4s+H8= +github.com/fluxcd/source-controller/api v0.26.1 h1:ID1wx9Hb4iDS9tjif79qC6s6v4pEVaT8ukFVWndxxts= +github.com/fluxcd/source-controller/api v0.26.1/go.mod h1:1W0Xx/GpZ14Z/sOltxjsQKXeCv8zxAqSivbX9e4s+H8= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= diff --git a/manifests/bases/image-automation-controller/kustomization.yaml b/manifests/bases/image-automation-controller/kustomization.yaml index db716b5a..990b8d0c 100644 --- a/manifests/bases/image-automation-controller/kustomization.yaml +++ b/manifests/bases/image-automation-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.23.5/image-automation-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.23.5/image-automation-controller.deployment.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.24.1/image-automation-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.24.1/image-automation-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/image-reflector-controller/kustomization.yaml b/manifests/bases/image-reflector-controller/kustomization.yaml index 6154b83d..28570250 100644 --- a/manifests/bases/image-reflector-controller/kustomization.yaml +++ b/manifests/bases/image-reflector-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.19.4/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.19.4/image-reflector-controller.deployment.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.20.0/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.20.0/image-reflector-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/notification-controller/kustomization.yaml b/manifests/bases/notification-controller/kustomization.yaml index afbaf63a..dfcb3361 100644 --- a/manifests/bases/notification-controller/kustomization.yaml +++ b/manifests/bases/notification-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/notification-controller/releases/download/v0.25.0/notification-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v0.25.0/notification-controller.deployment.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.25.1/notification-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.25.1/notification-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index 01ba7584..8f97dbc9 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.26.0/source-controller.crds.yaml -- https://github.com/fluxcd/source-controller/releases/download/v0.26.0/source-controller.deployment.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.26.1/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.26.1/source-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index eeaa27b9..54eef04a 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -1,9 +1,9 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.25.11/source-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.26.3/kustomize-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.26.1/source-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.27.0/kustomize-controller.crds.yaml - https://github.com/fluxcd/helm-controller/releases/download/v0.22.2/helm-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v0.24.1/notification-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.19.4/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.23.5/image-automation-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.25.1/notification-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.20.0/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.24.1/image-automation-controller.crds.yaml From 9386b9e0c33cf2cc15bf5a09c0c1f80f7b46960d Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Thu, 11 Aug 2022 17:31:20 +0300 Subject: [PATCH 207/818] Status update for RFC-0002 and RFC-0003 Signed-off-by: Stefan Prodan --- README.md | 1 + rfcs/0002-helm-oci/README.md | 4 ++-- rfcs/0003-kubernetes-oci/README.md | 27 +++++++++++++++++++++------ 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index cc96ed4c..b0a8b4b4 100644 --- a/README.md +++ b/README.md @@ -52,6 +52,7 @@ guides](https://fluxcd.io/docs/gitops-toolkit/source-watcher/). - [Source Controller](https://fluxcd.io/docs/components/source/) - [GitRepository CRD](https://fluxcd.io/docs/components/source/gitrepositories/) + - [OCIRepository CRD](https://fluxcd.io/docs/components/source/ocirepositories/) - [HelmRepository CRD](https://fluxcd.io/docs/components/source/helmrepositories/) - [HelmChart CRD](https://fluxcd.io/docs/components/source/helmcharts/) - [Bucket CRD](https://fluxcd.io/docs/components/source/buckets/) diff --git a/rfcs/0002-helm-oci/README.md b/rfcs/0002-helm-oci/README.md index 8ea8b03d..d3abe0a9 100644 --- a/rfcs/0002-helm-oci/README.md +++ b/rfcs/0002-helm-oci/README.md @@ -176,8 +176,8 @@ The feature is enabled by default. * **2022-05-19** Partially implemented by [source-controller#690](https://github.com/fluxcd/source-controller/pull/690) * **2022-06-06** First implementation released with [flux2 v0.31.0](https://github.com/fluxcd/flux2/releases/tag/v0.31.0) - +* **2022-08-11** Resolve chart dependencies from OCI released with [flux2 v0.32.0](https://github.com/fluxcd/flux2/releases/tag/v0.32.0) + ### TODOs -* [Resolve chart dependencies from OCI](https://github.com/fluxcd/source-controller/issues/722) * [Add support for container registries with self-signed TLS certs](https://github.com/fluxcd/source-controller/issues/723) diff --git a/rfcs/0003-kubernetes-oci/README.md b/rfcs/0003-kubernetes-oci/README.md index e2960f50..16ef3887 100644 --- a/rfcs/0003-kubernetes-oci/README.md +++ b/rfcs/0003-kubernetes-oci/README.md @@ -1,10 +1,10 @@ # RFC-0003 Flux OCI support for Kubernetes manifests -**Status:** implementable +**Status:** implemented (partially) **Creation date:** 2022-03-31 -**Last update:** 2022-08-02 +**Last update:** 2022-08-11 ## Summary @@ -359,7 +359,7 @@ The Flux CLI will produce OCI artifacts with the following format: "config": { "mediaType": "application/vnd.docker.container.image.v1+json", "size": 233, - "digest": "sha256:e7c52109f8e375176a888fd571dc0e0b40ed8a80d9301208474a2a906b0a2dcc" + "digest": "sha256:3b6cdcc7adcc9a84d3214ee1c029543789d90b5ae69debe9efa3f66e982875de" }, "layers": [ { @@ -369,14 +369,16 @@ The Flux CLI will produce OCI artifacts with the following format: } ], "annotations": { - "source.toolkit.fluxcd.io/revision": "6.1.6/450796ddb2ab6724ee1cc32a4be56da032d1cca0", - "source.toolkit.fluxcd.io/url": "https://github.com/stefanprodan/podinfo.git" + "org.opencontainers.image.created": "2022-08-08T12:31:41+03:00", + "org.opencontainers.image.revision": "6.1.8/b3b00fe35424a45d373bf4c7214178bc36fd7872", + "org.opencontainers.image.source": "https://github.com/stefanprodan/podinfo.git" } } ``` The source-controller will extract the first layer from the OCI artifact, and will repackage it -as an internal `sourcev1.Artifact`. The internal artifact revision will be set to the OCI SHA256 digest: +as an internal `sourcev1.Artifact`. The internal artifact revision will be set to the OCI SHA256 digest +and the OpenContainers annotation will be copied to the internal artifact metadata: ```yaml apiVersion: source.toolkit.fluxcd.io/v1beta2 @@ -400,6 +402,10 @@ status: artifact: checksum: d7e924b4882e55b97627355c7b3d2e711e9b54303afa2f50c25377f4df66a83b lastUpdateTime: "2022-06-22T09:14:21Z" + metadata: + org.opencontainers.image.created: "2022-08-08T12:31:41+03:00" + org.opencontainers.image.revision: 6.1.8/b3b00fe35424a45d373bf4c7214178bc36fd7872 + org.opencontainers.image.source: https://github.com/stefanprodan/podinfo.git path: ocirepository/oci/podinfo/3b6cdcc7adcc9a84d3214ee1c029543789d90b5ae69debe9efa3f66e982875de.tar.gz revision: 3b6cdcc7adcc9a84d3214ee1c029543789d90b5ae69debe9efa3f66e982875de size: 1105 @@ -424,3 +430,12 @@ status: ### Enabling the feature The feature is enabled by default. + +## Implementation History + +* **2022-08-08** Partially implemented by [source-controller#788](https://github.com/fluxcd/source-controller/pull/788) +* **2022-06-06** First implementation released with [flux2 v0.32.0](https://github.com/fluxcd/flux2/releases/tag/v0.32.0) + +### TODOs + +* Add support for verifying the OCI artifacts with cosign From 5dcd599612964b42f3b292a260f58814d66038b8 Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Fri, 12 Aug 2022 10:36:29 +0100 Subject: [PATCH 208/818] reset cmd flags Signed-off-by: Somtochi Onyekwere --- cmd/flux/main_test.go | 99 +++++++++++++++++++++++++++++-------------- 1 file changed, 68 insertions(+), 31 deletions(-) diff --git a/cmd/flux/main_test.go b/cmd/flux/main_test.go index 2adf4715..b7e675d7 100644 --- a/cmd/flux/main_test.go +++ b/cmd/flux/main_test.go @@ -288,36 +288,38 @@ func assertGoldenFile(goldenFile string) assertFunc { // is pre-processed with the specified templateValues. func assertGoldenTemplateFile(goldenFile string, templateValues map[string]string) assertFunc { goldenFileContents, fileErr := os.ReadFile(goldenFile) - return func(output string, err error) error { - if fileErr != nil { - return fmt.Errorf("Error reading golden file '%s': %s", goldenFile, fileErr) - } - var expectedOutput string - if len(templateValues) > 0 { - expectedOutput, err = executeTemplate(string(goldenFileContents), templateValues) - if err != nil { - return fmt.Errorf("Error executing golden template file '%s': %s", goldenFile, err) + return assert( + assertSuccess(), + func(output string, err error) error { + if fileErr != nil { + return fmt.Errorf("Error reading golden file '%s': %s", goldenFile, fileErr) } - } else { - expectedOutput = string(goldenFileContents) - } - if assertErr := assertGoldenValue(expectedOutput)(output, err); assertErr != nil { - // Update the golden files if comparison fails and the update flag is set. - if *update && output != "" { - // Skip update if there are template values. - if len(templateValues) > 0 { - fmt.Println("NOTE: -update flag passed but golden template files can't be updated, please update it manually") - } else { - if err := os.WriteFile(goldenFile, []byte(output), 0644); err != nil { - return fmt.Errorf("failed to update golden file '%s': %v", goldenFile, err) + var expectedOutput string + if len(templateValues) > 0 { + expectedOutput, err = executeTemplate(string(goldenFileContents), templateValues) + if err != nil { + return fmt.Errorf("Error executing golden template file '%s': %s", goldenFile, err) + } + } else { + expectedOutput = string(goldenFileContents) + } + if assertErr := assertGoldenValue(expectedOutput)(output, err); assertErr != nil { + // Update the golden files if comparison fails and the update flag is set. + if *update && output != "" { + // Skip update if there are template values. + if len(templateValues) > 0 { + fmt.Println("NOTE: -update flag passed but golden template files can't be updated, please update it manually") + } else { + if err := os.WriteFile(goldenFile, []byte(output), 0644); err != nil { + return fmt.Errorf("failed to update golden file '%s': %v", goldenFile, err) + } + return nil } - return nil } + return fmt.Errorf("Mismatch from golden file '%s': %v", goldenFile, assertErr) } - return fmt.Errorf("Mismatch from golden file '%s': %v", goldenFile, assertErr) - } - return nil - } + return nil + }) } type TestClusterMode int @@ -341,7 +343,6 @@ type cmdTestCase struct { func (cmd *cmdTestCase) runTestCmd(t *testing.T) { actual, testErr := executeCommand(cmd.args) - // If the cmd error is a change, discard it if isChangeError(testErr) { testErr = nil @@ -383,15 +384,51 @@ func executeCommand(cmd string) (string, error) { return result, err } +// resetCmdArgs resets the flags for various cmd +// Note: this will also clear default value of the flags set in init() func resetCmdArgs() { + *kubeconfigArgs.Namespace = rootArgs.defaults.Namespace + alertArgs = alertFlags{} + alertProviderArgs = alertProviderFlags{} + bootstrapArgs = NewBootstrapFlags() + bServerArgs = bServerFlags{} + buildKsArgs = buildKsFlags{} + checkArgs = checkFlags{} createArgs = createFlags{} + deleteArgs = deleteFlags{} + diffKsArgs = diffKsFlags{} + exportArgs = exportFlags{} getArgs = GetFlags{} + gitArgs = gitFlags{} + githubArgs = githubFlags{} + gitlabArgs = gitlabFlags{} + helmReleaseArgs = helmReleaseFlags{ + reconcileStrategy: "ChartVersion", + } + imagePolicyArgs = imagePolicyFlags{} + imageRepoArgs = imageRepoFlags{} + imageUpdateArgs = imageUpdateFlags{} + kustomizationArgs = NewKustomizationFlags() + receiverArgs = receiverFlags{} + resumeArgs = ResumeFlags{} + rhrArgs = reconcileHelmReleaseFlags{} + rksArgs = reconcileKsFlags{} + secretGitArgs = NewSecretGitFlags() + secretHelmArgs = secretHelmFlags{} + secretTLSArgs = secretTLSFlags{} + sourceBucketArgs = sourceBucketFlags{} + sourceGitArgs = newSourceGitFlags() sourceHelmArgs = sourceHelmFlags{} sourceOCIRepositoryArgs = sourceOCIRepositoryFlags{} - sourceGitArgs = sourceGitFlags{} - sourceBucketArgs = sourceBucketFlags{} - secretGitArgs = NewSecretGitFlags() - *kubeconfigArgs.Namespace = rootArgs.defaults.Namespace + suspendArgs = SuspendFlags{} + tenantArgs = tenantFlags{} + traceArgs = traceFlags{} + treeKsArgs = TreeKsFlags{} + uninstallArgs = uninstallFlags{} + versionArgs = versionFlags{ + output: "yaml", + } + } func isChangeError(err error) bool { From 899a1fffcaf5c57bd64885d6a03da3fabcdc64df Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Tue, 16 Aug 2022 15:31:39 +0300 Subject: [PATCH 209/818] Add `--ignore-paths` arg to `flux build|push artifact` Signed-off-by: Stefan Prodan --- cmd/flux/build_artifact.go | 12 +++++++++--- cmd/flux/push_artifact.go | 14 +++++++++----- go.mod | 3 ++- go.sum | 7 +++++-- 4 files changed, 25 insertions(+), 11 deletions(-) diff --git a/cmd/flux/build_artifact.go b/cmd/flux/build_artifact.go index bf523fa0..ea8c2cd7 100644 --- a/cmd/flux/build_artifact.go +++ b/cmd/flux/build_artifact.go @@ -19,10 +19,12 @@ package main import ( "fmt" "os" + "strings" "github.com/spf13/cobra" oci "github.com/fluxcd/pkg/oci/client" + "github.com/fluxcd/pkg/sourceignore" ) var buildArtifactCmd = &cobra.Command{ @@ -39,8 +41,9 @@ var buildArtifactCmd = &cobra.Command{ } type buildArtifactFlags struct { - output string - path string + output string + path string + ignorePaths []string } var buildArtifactArgs buildArtifactFlags @@ -48,6 +51,8 @@ var buildArtifactArgs buildArtifactFlags func init() { buildArtifactCmd.Flags().StringVar(&buildArtifactArgs.path, "path", "", "Path to the directory where the Kubernetes manifests are located.") buildArtifactCmd.Flags().StringVarP(&buildArtifactArgs.output, "output", "o", "artifact.tgz", "Path to where the artifact tgz file should be written.") + buildArtifactCmd.Flags().StringSliceVar(&buildArtifactArgs.ignorePaths, "ignore-paths", strings.Split(sourceignore.ExcludeVCS, ","), "set paths to ignore (can specify multiple paths with commas: path1,path2)") + buildCmd.AddCommand(buildArtifactCmd) } @@ -63,7 +68,8 @@ func buildArtifactCmdRun(cmd *cobra.Command, args []string) error { logger.Actionf("building artifact from %s", buildArtifactArgs.path) ociClient := oci.NewLocalClient() - if err := ociClient.Build(buildArtifactArgs.output, buildArtifactArgs.path); err != nil { + logger.Successf("%v", buildArtifactArgs.ignorePaths) + if err := ociClient.Build(buildArtifactArgs.output, buildArtifactArgs.path, buildArtifactArgs.ignorePaths); err != nil { return fmt.Errorf("bulding artifact failed, error: %w", err) } diff --git a/cmd/flux/push_artifact.go b/cmd/flux/push_artifact.go index 6f318602..52e545a5 100644 --- a/cmd/flux/push_artifact.go +++ b/cmd/flux/push_artifact.go @@ -20,10 +20,12 @@ import ( "context" "fmt" "os" + "strings" "github.com/spf13/cobra" oci "github.com/fluxcd/pkg/oci/client" + "github.com/fluxcd/pkg/sourceignore" ) var pushArtifactCmd = &cobra.Command{ @@ -49,9 +51,10 @@ The command uses the credentials from '~/.docker/config.json'.`, } type pushArtifactFlags struct { - path string - source string - revision string + path string + source string + revision string + ignorePaths []string } var pushArtifactArgs pushArtifactFlags @@ -60,6 +63,8 @@ func init() { pushArtifactCmd.Flags().StringVar(&pushArtifactArgs.path, "path", "", "path to the directory where the Kubernetes manifests are located") pushArtifactCmd.Flags().StringVar(&pushArtifactArgs.source, "source", "", "the source address, e.g. the Git URL") pushArtifactCmd.Flags().StringVar(&pushArtifactArgs.revision, "revision", "", "the source revision in the format '/'") + pushArtifactCmd.Flags().StringSliceVar(&pushArtifactArgs.ignorePaths, "ignore-paths", strings.Split(sourceignore.ExcludeVCS, ","), "set paths to ignore (can specify multiple paths with commas: path1,path2)") + pushCmd.AddCommand(pushArtifactCmd) } @@ -101,7 +106,7 @@ func pushArtifactCmdRun(cmd *cobra.Command, args []string) error { logger.Actionf("pushing artifact to %s", url) - digest, err := ociClient.Push(ctx, url, pushArtifactArgs.path, meta) + digest, err := ociClient.Push(ctx, url, pushArtifactArgs.path, meta, pushArtifactArgs.ignorePaths) if err != nil { return fmt.Errorf("pushing artifact failed: %w", err) } @@ -109,5 +114,4 @@ func pushArtifactCmdRun(cmd *cobra.Command, args []string) error { logger.Successf("artifact successfully pushed to %s", digest) return nil - } diff --git a/go.mod b/go.mod index 9a345d1b..653c97ec 100644 --- a/go.mod +++ b/go.mod @@ -14,7 +14,7 @@ require ( github.com/fluxcd/notification-controller/api v0.25.1 github.com/fluxcd/pkg/apis/meta v0.14.2 github.com/fluxcd/pkg/kustomize v0.5.2 - github.com/fluxcd/pkg/oci v0.3.0 + github.com/fluxcd/pkg/oci v0.4.0 github.com/fluxcd/pkg/runtime v0.16.2 github.com/fluxcd/pkg/ssa v0.17.0 github.com/fluxcd/pkg/ssh v0.5.0 @@ -86,6 +86,7 @@ require ( github.com/fatih/color v1.13.0 // indirect github.com/fluxcd/pkg/apis/acl v0.0.3 // indirect github.com/fluxcd/pkg/apis/kustomize v0.4.2 // indirect + github.com/fluxcd/pkg/sourceignore v0.1.0 // indirect github.com/fsnotify/fsnotify v1.5.1 // indirect github.com/go-errors/errors v1.0.1 // indirect github.com/go-git/gcfg v1.5.0 // indirect diff --git a/go.sum b/go.sum index b2a68166..f1c4f773 100644 --- a/go.sum +++ b/go.sum @@ -289,10 +289,12 @@ github.com/fluxcd/pkg/apis/meta v0.14.2 h1:/Hf7I/Vz01vv3m7Qx7DtQvrzAL1oVt0MJcLb/ github.com/fluxcd/pkg/apis/meta v0.14.2/go.mod h1:ijZ61VG/8T3U17gj0aFL3fdtZL+mulD6V8VrLLUCAgM= github.com/fluxcd/pkg/kustomize v0.5.2 h1:Nhaw/Tqwt588Cp4PYa83nj45t3mGgojMl23zhq/t/fM= github.com/fluxcd/pkg/kustomize v0.5.2/go.mod h1:X3Uls1l13giFPwig1NDoXvrF53yyXUemSyR3nYGw28s= -github.com/fluxcd/pkg/oci v0.3.0 h1:GFn6JZeg5fV2K4vsQ0s5lJFid6qrpA4RybLXL+7qUbQ= -github.com/fluxcd/pkg/oci v0.3.0/go.mod h1:c1pj9E/G5927gSa6ooACAyZe+HwjgmPk9johL7oXDHw= +github.com/fluxcd/pkg/oci v0.4.0 h1:cUNPffT/lvdVmFUe8nhPQhRNIWs1Oa2/ODI+rWikqcI= +github.com/fluxcd/pkg/oci v0.4.0/go.mod h1:eOnW+Ce3Z8AmQ+X9tf1BCv+qxwro+rPM/VKca1E9Ka0= github.com/fluxcd/pkg/runtime v0.16.2 h1:CexfMmJK+r12sHTvKWyAax0pcPomjd6VnaHXcxjUrRY= github.com/fluxcd/pkg/runtime v0.16.2/go.mod h1:OHSKsrO+T+Ym8WZRS2oidrnauWRARuE2nfm8ewevm7M= +github.com/fluxcd/pkg/sourceignore v0.1.0 h1:v36Rqp6FDB7Ntjy7NakdwscOfxFPk14peKa+VMBNugo= +github.com/fluxcd/pkg/sourceignore v0.1.0/go.mod h1:m9/q+YLMNSWjXns1n/5q3ucwzSSddti+D6ExbNaCo6s= github.com/fluxcd/pkg/ssa v0.17.0 h1:iO4EQ+/xIbd79VKrh+8fvsAvq3RlmgAdWtnzOAUxD5s= github.com/fluxcd/pkg/ssa v0.17.0/go.mod h1:UZkF5CwbDuvWPXnISoaXWlc0JPbHh8BKfa4ExeTtWgY= github.com/fluxcd/pkg/ssh v0.5.0 h1:jE9F2XvUXC2mgseeXMATvO014fLqdB30/VzlPLKsk20= @@ -1655,6 +1657,7 @@ gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= gotest.tools/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0= gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8= From 40717fa4f412cd28eea8850361bfae3212538e09 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 17 Aug 2022 13:49:38 +0300 Subject: [PATCH 210/818] Exclude VCS files by default from OCI artifacts Signed-off-by: Stefan Prodan --- cmd/flux/build_artifact.go | 5 +++-- cmd/flux/push_artifact.go | 7 ++----- go.mod | 4 ++-- go.sum | 4 ++-- 4 files changed, 9 insertions(+), 11 deletions(-) diff --git a/cmd/flux/build_artifact.go b/cmd/flux/build_artifact.go index ea8c2cd7..23ac154e 100644 --- a/cmd/flux/build_artifact.go +++ b/cmd/flux/build_artifact.go @@ -46,12 +46,14 @@ type buildArtifactFlags struct { ignorePaths []string } +var excludeOCI = append(strings.Split(sourceignore.ExcludeVCS, ","), strings.Split(sourceignore.ExcludeExt, ",")...) + var buildArtifactArgs buildArtifactFlags func init() { buildArtifactCmd.Flags().StringVar(&buildArtifactArgs.path, "path", "", "Path to the directory where the Kubernetes manifests are located.") buildArtifactCmd.Flags().StringVarP(&buildArtifactArgs.output, "output", "o", "artifact.tgz", "Path to where the artifact tgz file should be written.") - buildArtifactCmd.Flags().StringSliceVar(&buildArtifactArgs.ignorePaths, "ignore-paths", strings.Split(sourceignore.ExcludeVCS, ","), "set paths to ignore (can specify multiple paths with commas: path1,path2)") + buildArtifactCmd.Flags().StringSliceVar(&buildArtifactArgs.ignorePaths, "ignore-paths", excludeOCI, "set paths to ignore in .gitignore format") buildCmd.AddCommand(buildArtifactCmd) } @@ -68,7 +70,6 @@ func buildArtifactCmdRun(cmd *cobra.Command, args []string) error { logger.Actionf("building artifact from %s", buildArtifactArgs.path) ociClient := oci.NewLocalClient() - logger.Successf("%v", buildArtifactArgs.ignorePaths) if err := ociClient.Build(buildArtifactArgs.output, buildArtifactArgs.path, buildArtifactArgs.ignorePaths); err != nil { return fmt.Errorf("bulding artifact failed, error: %w", err) } diff --git a/cmd/flux/push_artifact.go b/cmd/flux/push_artifact.go index 52e545a5..75ad0a4e 100644 --- a/cmd/flux/push_artifact.go +++ b/cmd/flux/push_artifact.go @@ -19,13 +19,10 @@ package main import ( "context" "fmt" - "os" - "strings" - "github.com/spf13/cobra" + "os" oci "github.com/fluxcd/pkg/oci/client" - "github.com/fluxcd/pkg/sourceignore" ) var pushArtifactCmd = &cobra.Command{ @@ -63,7 +60,7 @@ func init() { pushArtifactCmd.Flags().StringVar(&pushArtifactArgs.path, "path", "", "path to the directory where the Kubernetes manifests are located") pushArtifactCmd.Flags().StringVar(&pushArtifactArgs.source, "source", "", "the source address, e.g. the Git URL") pushArtifactCmd.Flags().StringVar(&pushArtifactArgs.revision, "revision", "", "the source revision in the format '/'") - pushArtifactCmd.Flags().StringSliceVar(&pushArtifactArgs.ignorePaths, "ignore-paths", strings.Split(sourceignore.ExcludeVCS, ","), "set paths to ignore (can specify multiple paths with commas: path1,path2)") + pushArtifactCmd.Flags().StringSliceVar(&pushArtifactArgs.ignorePaths, "ignore-paths", excludeOCI, "set paths to ignore in .gitignore format") pushCmd.AddCommand(pushArtifactCmd) } diff --git a/go.mod b/go.mod index 653c97ec..e968ebe0 100644 --- a/go.mod +++ b/go.mod @@ -14,8 +14,9 @@ require ( github.com/fluxcd/notification-controller/api v0.25.1 github.com/fluxcd/pkg/apis/meta v0.14.2 github.com/fluxcd/pkg/kustomize v0.5.2 - github.com/fluxcd/pkg/oci v0.4.0 + github.com/fluxcd/pkg/oci v0.4.1 github.com/fluxcd/pkg/runtime v0.16.2 + github.com/fluxcd/pkg/sourceignore v0.1.0 github.com/fluxcd/pkg/ssa v0.17.0 github.com/fluxcd/pkg/ssh v0.5.0 github.com/fluxcd/pkg/untar v0.1.0 @@ -86,7 +87,6 @@ require ( github.com/fatih/color v1.13.0 // indirect github.com/fluxcd/pkg/apis/acl v0.0.3 // indirect github.com/fluxcd/pkg/apis/kustomize v0.4.2 // indirect - github.com/fluxcd/pkg/sourceignore v0.1.0 // indirect github.com/fsnotify/fsnotify v1.5.1 // indirect github.com/go-errors/errors v1.0.1 // indirect github.com/go-git/gcfg v1.5.0 // indirect diff --git a/go.sum b/go.sum index f1c4f773..0754b908 100644 --- a/go.sum +++ b/go.sum @@ -289,8 +289,8 @@ github.com/fluxcd/pkg/apis/meta v0.14.2 h1:/Hf7I/Vz01vv3m7Qx7DtQvrzAL1oVt0MJcLb/ github.com/fluxcd/pkg/apis/meta v0.14.2/go.mod h1:ijZ61VG/8T3U17gj0aFL3fdtZL+mulD6V8VrLLUCAgM= github.com/fluxcd/pkg/kustomize v0.5.2 h1:Nhaw/Tqwt588Cp4PYa83nj45t3mGgojMl23zhq/t/fM= github.com/fluxcd/pkg/kustomize v0.5.2/go.mod h1:X3Uls1l13giFPwig1NDoXvrF53yyXUemSyR3nYGw28s= -github.com/fluxcd/pkg/oci v0.4.0 h1:cUNPffT/lvdVmFUe8nhPQhRNIWs1Oa2/ODI+rWikqcI= -github.com/fluxcd/pkg/oci v0.4.0/go.mod h1:eOnW+Ce3Z8AmQ+X9tf1BCv+qxwro+rPM/VKca1E9Ka0= +github.com/fluxcd/pkg/oci v0.4.1 h1:gx63SW9BymuJydDbu/8xzlMP85Tpc9FBnHZXsckgC7U= +github.com/fluxcd/pkg/oci v0.4.1/go.mod h1:eOnW+Ce3Z8AmQ+X9tf1BCv+qxwro+rPM/VKca1E9Ka0= github.com/fluxcd/pkg/runtime v0.16.2 h1:CexfMmJK+r12sHTvKWyAax0pcPomjd6VnaHXcxjUrRY= github.com/fluxcd/pkg/runtime v0.16.2/go.mod h1:OHSKsrO+T+Ym8WZRS2oidrnauWRARuE2nfm8ewevm7M= github.com/fluxcd/pkg/sourceignore v0.1.0 h1:v36Rqp6FDB7Ntjy7NakdwscOfxFPk14peKa+VMBNugo= From 5bdc083ce2d0c17691c3f97674474e4721877f5d Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 17 Aug 2022 16:48:52 +0300 Subject: [PATCH 211/818] Use ghcr.io in the static manifests Use the same container registry as `flux install` for the static install manifests. Signed-off-by: Stefan Prodan --- manifests/install/kustomization.yaml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/manifests/install/kustomization.yaml b/manifests/install/kustomization.yaml index 712102e4..0e6ba62a 100644 --- a/manifests/install/kustomization.yaml +++ b/manifests/install/kustomization.yaml @@ -13,3 +13,14 @@ resources: - ../policies transformers: - labels.yaml +images: + - name: fluxcd/source-controller + newName: ghcr.io/fluxcd/source-controller + - name: fluxcd/kustomize-controller + newName: ghcr.io/fluxcd/kustomize-controller + - name: fluxcd/helm-controller + newName: ghcr.io/fluxcd/helm-controller + - name: fluxcd/image-reflector-controller + newName: ghcr.io/fluxcd/image-reflector-controller + - name: fluxcd/image-automation-controller + newName: ghcr.io/fluxcd/image-automation-controller From 60b483569d671e04f948c5cd99a2baefcfacc4a8 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 17 Aug 2022 15:56:39 +0300 Subject: [PATCH 212/818] Update dependencies - fluxcd/go-git-providers v0.8.0 - google/go-containerregistry v0.11.0 - homeport/dyff v1.5.5 - spf13/cobra v1.5.0 - k8s.io/cli-runtime v0.24.3 Signed-off-by: Stefan Prodan --- go.mod | 41 +++++++++++++------------ go.sum | 96 +++++++++++++++++++++++++++++----------------------------- 2 files changed, 69 insertions(+), 68 deletions(-) diff --git a/go.mod b/go.mod index e968ebe0..1b1e8187 100644 --- a/go.mod +++ b/go.mod @@ -4,16 +4,16 @@ go 1.17 require ( github.com/Masterminds/semver/v3 v3.1.1 - github.com/ProtonMail/go-crypto v0.0.0-20220517143526-88bb52951d5b + github.com/ProtonMail/go-crypto v0.0.0-20220812175011-7fcef0dbe794 github.com/cyphar/filepath-securejoin v0.2.3 - github.com/fluxcd/go-git-providers v0.6.0 + github.com/fluxcd/go-git-providers v0.8.0 github.com/fluxcd/helm-controller/api v0.22.2 github.com/fluxcd/image-automation-controller/api v0.24.1 github.com/fluxcd/image-reflector-controller/api v0.20.0 github.com/fluxcd/kustomize-controller/api v0.27.0 github.com/fluxcd/notification-controller/api v0.25.1 github.com/fluxcd/pkg/apis/meta v0.14.2 - github.com/fluxcd/pkg/kustomize v0.5.2 + github.com/fluxcd/pkg/kustomize v0.5.3 github.com/fluxcd/pkg/oci v0.4.1 github.com/fluxcd/pkg/runtime v0.16.2 github.com/fluxcd/pkg/sourceignore v0.1.0 @@ -26,25 +26,25 @@ require ( github.com/gonvenience/bunt v1.3.4 github.com/gonvenience/ytbx v1.4.4 github.com/google/go-cmp v0.5.8 - github.com/google/go-containerregistry v0.10.0 + github.com/google/go-containerregistry v0.11.0 github.com/hashicorp/go-multierror v1.1.1 - github.com/homeport/dyff v1.5.4 + github.com/homeport/dyff v1.5.5 github.com/lucasb-eyer/go-colorful v1.2.0 github.com/manifoldco/promptui v0.9.0 github.com/mattn/go-shellwords v1.0.12 github.com/olekukonko/tablewriter v0.0.5 - github.com/onsi/gomega v1.19.0 - github.com/spf13/cobra v1.4.0 + github.com/onsi/gomega v1.20.0 + github.com/spf13/cobra v1.5.0 github.com/spf13/pflag v1.0.5 github.com/theckman/yacspin v0.13.12 - golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e - golang.org/x/term v0.0.0-20220526004731-065cf7ba2467 + golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa + golang.org/x/term v0.0.0-20220722155259-a9ba230a4035 k8s.io/api v0.24.3 k8s.io/apiextensions-apiserver v0.24.3 k8s.io/apimachinery v0.24.3 - k8s.io/cli-runtime v0.24.1 + k8s.io/cli-runtime v0.24.3 k8s.io/client-go v0.24.3 - k8s.io/kubectl v0.24.1 + k8s.io/kubectl v0.24.3 sigs.k8s.io/cli-utils v0.32.0 sigs.k8s.io/controller-runtime v0.11.2 sigs.k8s.io/kustomize/api v0.12.1 @@ -72,7 +72,8 @@ require ( github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5 // indirect github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e // indirect - github.com/containerd/stargz-snapshotter/estargz v0.11.4 // indirect + github.com/cloudflare/circl v1.1.0 // indirect + github.com/containerd/stargz-snapshotter/estargz v0.12.0 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/docker/cli v20.10.17+incompatible // indirect @@ -99,13 +100,13 @@ require ( github.com/golang-jwt/jwt/v4 v4.4.1 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.2 // indirect - github.com/gonvenience/neat v1.3.10 // indirect + github.com/gonvenience/neat v1.3.11 // indirect github.com/gonvenience/term v1.0.2 // indirect github.com/gonvenience/text v1.0.7 // indirect - github.com/gonvenience/wrap v1.1.1 // indirect + github.com/gonvenience/wrap v1.1.2 // indirect github.com/google/btree v1.0.1 // indirect github.com/google/gnostic v0.6.9 // indirect - github.com/google/go-github/v42 v42.0.0 // indirect + github.com/google/go-github/v45 v45.2.0 // indirect github.com/google/go-querystring v1.1.0 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect @@ -120,7 +121,7 @@ require ( github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351 // indirect - github.com/klauspost/compress v1.15.4 // indirect + github.com/klauspost/compress v1.15.8 // indirect github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect github.com/mailru/easyjson v0.7.7 // indirect github.com/mattn/go-ciede2000 v0.0.0-20170301095244-782e8c62fec3 // indirect @@ -154,16 +155,16 @@ require ( github.com/texttheater/golang-levenshtein v1.0.1 // indirect github.com/vbatts/tar-split v0.11.2 // indirect github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74 // indirect - github.com/xanzy/go-gitlab v0.58.0 // indirect + github.com/xanzy/go-gitlab v0.69.0 // indirect github.com/xanzy/ssh-agent v0.3.0 // indirect github.com/xlab/treeprint v1.1.0 // indirect go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 // indirect golang.org/x/net v0.0.0-20220708220712-1185a9018129 // indirect - golang.org/x/oauth2 v0.0.0-20220718184931-c8730f7fcb92 // indirect - golang.org/x/sync v0.0.0-20220513210516-0976fa681c29 // indirect + golang.org/x/oauth2 v0.0.0-20220722155238-128564f6959c // indirect + golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f // indirect golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 // indirect golang.org/x/text v0.3.7 // indirect - golang.org/x/time v0.0.0-20220411224347-583f2d630306 // indirect + golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/protobuf v1.28.0 // indirect diff --git a/go.sum b/go.sum index 0754b908..4593e3f2 100644 --- a/go.sum +++ b/go.sum @@ -98,8 +98,8 @@ github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMo github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/OpenPeeDeeP/depguard v1.0.1/go.mod h1:xsIw86fROiiwelg+jB2uM9PiKihMMmUx/1V+TNhjQvM= github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= -github.com/ProtonMail/go-crypto v0.0.0-20220517143526-88bb52951d5b h1:lcbBNuQhppsc7A5gjdHmdlqUqJfgGMylBdGyDs0j7G8= -github.com/ProtonMail/go-crypto v0.0.0-20220517143526-88bb52951d5b/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= +github.com/ProtonMail/go-crypto v0.0.0-20220812175011-7fcef0dbe794 h1:efPD6snIrIBAfmZhcm7GQ72VHlzsQ/3OrghnnGEpJBM= +github.com/ProtonMail/go-crypto v0.0.0-20220812175011-7fcef0dbe794/go.mod h1:UBYPn8k0D56RtnR8RFQMjmh4KrZzWJ5o7Z9SYjossQ8= github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d h1:UrqY+r/OJnIp5u0s1SbQ8dVfLCZJsnvazdBP5hS4iRs= @@ -154,6 +154,7 @@ github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd h1:rFt+Y/IK1aEZ github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b h1:otBG+dV+YK+Soembjv71DPz3uX/V/6MMlSyD9JBQ6kQ= github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0 h1:nvj0OLI3YqYXer/kZD8Ri1aaunCxIEsOst1BVJswV0o= github.com/butuzov/ireturn v0.1.1/go.mod h1:Wh6Zl3IMtTpaIKbmwzqi6olnM9ptYQxxVacMsOEFPoc= +github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/certifi/gocertifi v0.0.0-20191021191039-0944d244cd40/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= github.com/certifi/gocertifi v0.0.0-20200922220541-2c3bb06c6054/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= @@ -172,6 +173,8 @@ github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5P github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1 h1:q763qf9huN11kDQavWsoZXJNW3xEE4JJyHa5Q25/sd8= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cloudflare/circl v1.1.0 h1:bZgT/A+cikZnKIwn7xL2OBj012Bmvho/o6RpRvv3GKY= +github.com/cloudflare/circl v1.1.0/go.mod h1:prBCrKB9DV4poKZY1l9zBXg2QJY7mvgRvtMxxK7fi4I= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= @@ -180,8 +183,8 @@ github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:z github.com/cockroachdb/datadriven v0.0.0-20200714090401-bf6692d28da5/go.mod h1:h6jFvWxBdQXxjopDMZyH2UVceIRfR84bdzbkoKrsWNo= github.com/cockroachdb/errors v1.2.4/go.mod h1:rQD95gz6FARkaKkQXUksEje/d9a6wBJoCr5oaCLELYA= github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f/go.mod h1:i/u985jwjWRlyHXQbwatDASoW0RMlZ/3i9yJHE2xLkI= -github.com/containerd/stargz-snapshotter/estargz v0.11.4 h1:LjrYUZpyOhiSaU7hHrdR82/RBoxfGWSaC0VeSSMXqnk= -github.com/containerd/stargz-snapshotter/estargz v0.11.4/go.mod h1:7vRJIcImfY8bpifnMjt+HTJoQxASq7T28MYbP15/Nf0= +github.com/containerd/stargz-snapshotter/estargz v0.12.0 h1:idtwRTLjk2erqiYhPWy2L844By8NRFYEwYHcXhoIWPM= +github.com/containerd/stargz-snapshotter/estargz v0.12.0/go.mod h1:AIQ59TewBFJ4GOPEQXujcrJ/EKxh5xXZegW1rkR1P/M= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= @@ -269,8 +272,8 @@ github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4 github.com/felixge/httpsnoop v1.0.1 h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8SPQ= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0= -github.com/fluxcd/go-git-providers v0.6.0 h1:XJc3MTYFpuahBSoKTVxmH9OBPCeIyvYoQkTjTqa3fH4= -github.com/fluxcd/go-git-providers v0.6.0/go.mod h1:UMFHnMCIO9CBpEln7ZsArEWyXSNxTpm76fyQxUmClrc= +github.com/fluxcd/go-git-providers v0.8.0 h1:80UMu7yvRoEVfEIg0eGb9bJ0bSceizNJrEVvwLo+0YI= +github.com/fluxcd/go-git-providers v0.8.0/go.mod h1:krF+f3UFciy5QmFaYfaORCVxaEj7u2qD7R/WrfKCLWk= github.com/fluxcd/helm-controller/api v0.22.2 h1:nh0GZBsUE0gNzm4PmPa4aOoqYlbZbpGt2pcIL9S2184= github.com/fluxcd/helm-controller/api v0.22.2/go.mod h1:GfD9TFgLyn81VgwZN1yM47/aUdz0SwTSyRAGmC8xZ+c= github.com/fluxcd/image-automation-controller/api v0.24.1 h1:eTxbpwMM1TbYvFpLeNOn6RHxVzSc7efQpW//AllfbVQ= @@ -287,8 +290,8 @@ github.com/fluxcd/pkg/apis/kustomize v0.4.2 h1:5mC/t+OndouK7poFaG4soWLqvHqOxJ3HC github.com/fluxcd/pkg/apis/kustomize v0.4.2/go.mod h1:y/TpJvnhR08BRt3E7oLpDPvx0/J/2AS8tOiAFJpctu8= github.com/fluxcd/pkg/apis/meta v0.14.2 h1:/Hf7I/Vz01vv3m7Qx7DtQvrzAL1oVt0MJcLb/I1Y1HE= github.com/fluxcd/pkg/apis/meta v0.14.2/go.mod h1:ijZ61VG/8T3U17gj0aFL3fdtZL+mulD6V8VrLLUCAgM= -github.com/fluxcd/pkg/kustomize v0.5.2 h1:Nhaw/Tqwt588Cp4PYa83nj45t3mGgojMl23zhq/t/fM= -github.com/fluxcd/pkg/kustomize v0.5.2/go.mod h1:X3Uls1l13giFPwig1NDoXvrF53yyXUemSyR3nYGw28s= +github.com/fluxcd/pkg/kustomize v0.5.3 h1:WpxNOV/Yklp0p7Qv85VwBegq9fABuLR9qSWaAVa3+yc= +github.com/fluxcd/pkg/kustomize v0.5.3/go.mod h1:zy1FLxkEDADUykCnrXqq6rVN48t3uMhAb3ao+zv0rFE= github.com/fluxcd/pkg/oci v0.4.1 h1:gx63SW9BymuJydDbu/8xzlMP85Tpc9FBnHZXsckgC7U= github.com/fluxcd/pkg/oci v0.4.1/go.mod h1:eOnW+Ce3Z8AmQ+X9tf1BCv+qxwro+rPM/VKca1E9Ka0= github.com/fluxcd/pkg/runtime v0.16.2 h1:CexfMmJK+r12sHTvKWyAax0pcPomjd6VnaHXcxjUrRY= @@ -443,14 +446,14 @@ github.com/golangplus/testing v0.0.0-20180327235837-af21d9c3145e/go.mod h1:0AA// github.com/gomodule/redigo v1.8.2 h1:H5XSIre1MB5NbPYFp+i1NBbb5qN1W8Y8YAQoAYbkm8k= github.com/gonvenience/bunt v1.3.4 h1:Row599Ohja2BPooaqd1tHYdTAKu6SWq7W/UeakTXddM= github.com/gonvenience/bunt v1.3.4/go.mod h1:j8eqHLBo8eWCCYuc34oFdlgyxL1rZ4ywYz4BZa4b09w= -github.com/gonvenience/neat v1.3.10 h1:gHrVkQAvbUsZgnpEglPwsAJLPqSFQxOgfbB3FWLhmUo= -github.com/gonvenience/neat v1.3.10/go.mod h1:SenKN3l5LkhNYKXTq6Ibvq64wE9O2rxir+YEtqdi4jc= +github.com/gonvenience/neat v1.3.11 h1:xxxCdGSuikMm7/Qp9/NwPfxLefKJM2XQiobGwPu63+Q= +github.com/gonvenience/neat v1.3.11/go.mod h1:aMdiynsB60zmUXaLgOIXQGiRgVGJQNNE/nr2F4BbIUA= github.com/gonvenience/term v1.0.2 h1:qKa2RydbWIrabGjR/fegJwpW5m+JvUwFL8mLhHzDXn0= github.com/gonvenience/term v1.0.2/go.mod h1:wThTR+3MzWtWn7XGVW6qQ65uaVf8GHED98KmwpuEQeo= github.com/gonvenience/text v1.0.7 h1:YmIqmgTwxnACYCG59DykgMbomwteYyNhAmEUEJtPl14= github.com/gonvenience/text v1.0.7/go.mod h1:OAjH+mohRszffLY6OjgQcUXiSkbrIavooFpfIt1ZwAs= -github.com/gonvenience/wrap v1.1.1 h1:7cMuyMtTdUe2aObp760CzXo/wOmFaY7JXsIksu8NYYc= -github.com/gonvenience/wrap v1.1.1/go.mod h1:u27bruNdIB6U5nnR0qq+GRRKbAJzEqC0H3DBHxl7YNM= +github.com/gonvenience/wrap v1.1.2 h1:xPKxNwL1HCguwyM+HlP/1CIuc9LRd7k8RodLwe9YTZA= +github.com/gonvenience/wrap v1.1.2/go.mod h1:GiryBSXoI3BAAhbWD1cZVj7RZmtiu0ERi/6R6eJfslI= github.com/gonvenience/ytbx v1.4.4 h1:jQopwyaLsVGuwdxSiN4WkXjsEaFNPJ3V4lUj7eyEpzo= github.com/gonvenience/ytbx v1.4.4/go.mod h1:w37+MKCPcCMY/jpPNmEklD4xKqrOAVBO6kIWW2+uI6M= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= @@ -478,10 +481,10 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-containerregistry v0.10.0 h1:qd/fv2nQajGZJenaNcdaghlwSPjQ0NphN9hzArr2WWg= -github.com/google/go-containerregistry v0.10.0/go.mod h1:C7uwbB1QUAtvnknyd3ethxJRd4gtEjU/9WLXzckfI1Y= -github.com/google/go-github/v42 v42.0.0 h1:YNT0FwjPrEysRkLIiKuEfSvBPCGKphW5aS5PxwaoLec= -github.com/google/go-github/v42 v42.0.0/go.mod h1:jgg/jvyI0YlDOM1/ps6XYh04HNQ3vKf0CVko62/EhRg= +github.com/google/go-containerregistry v0.11.0 h1:Xt8x1adcREjFcmDoDK8OdOsjxu90PHkGuwNP8GiHMLM= +github.com/google/go-containerregistry v0.11.0/go.mod h1:BBaYtsHPHA42uEgAvd/NejvAfPSlz281sJWqupjSxfk= +github.com/google/go-github/v45 v45.2.0 h1:5oRLszbrkvxDDqBCNj2hjDZMKmvexaZ1xw/FCD+K3FI= +github.com/google/go-github/v45 v45.2.0/go.mod h1:FObaZJEDSTa/WGCzZ2Z3eoCDXWJKMenWWTrd8jrta28= github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= @@ -596,8 +599,8 @@ github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2p github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= -github.com/homeport/dyff v1.5.4 h1:v+C6EcBQYMWXfeDRPcQhImxQy0CdbRENWPEcHX39HJ0= -github.com/homeport/dyff v1.5.4/go.mod h1:bWhjPpTUbco6MxEqTB5qrYtvX+Y59ZIPh9K1N4cUwh0= +github.com/homeport/dyff v1.5.5 h1:qRkVSwiLdbEWVLgNZPxjKojZgGPyZ679pelYOMzhqEk= +github.com/homeport/dyff v1.5.5/go.mod h1:zZBPgfaacWi8M/e4Tgv0UYJvKL6olHu4T+6QWLqe/Do= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/huandu/xstrings v1.0.0/go.mod h1:4qWG/gcEcfX4z/mBDHJ++3ReCw9ibxbsNJbcucJdbSo= github.com/huandu/xstrings v1.2.0/go.mod h1:DvyZB1rfVYsBIigL8HwpZgxHwXozlTgGqn63UyNX5k4= @@ -652,9 +655,9 @@ github.com/kisielk/errcheck v1.6.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.13.4/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= github.com/klauspost/compress v1.13.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.15.1/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.15.4 h1:1kn4/7MepF/CHmYub99/nNX8az0IJjfSOU/jbnTVfqQ= -github.com/klauspost/compress v1.15.4/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= +github.com/klauspost/compress v1.15.7/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= +github.com/klauspost/compress v1.15.8 h1:JahtItbkWjf2jzm/T+qgMxkP9EMHsqEUA6vCMGmXvhA= +github.com/klauspost/compress v1.15.8/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= @@ -811,13 +814,13 @@ github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108 github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= -github.com/onsi/ginkgo/v2 v2.1.3 h1:e/3Cwtogj0HA+25nMP1jCMDIf8RtRYbGwGGuBIFztkc= +github.com/onsi/ginkgo/v2 v2.1.4 h1:GNapqRSid3zijZ9H77KrgVG4/8KqiyRsxcSxe+7ApXY= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.16.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= -github.com/onsi/gomega v1.19.0 h1:4ieX6qQjPP/BfC3mpsAtIGGlxTWPeA3Inl/7DtXw1tw= -github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= +github.com/onsi/gomega v1.20.0 h1:8W0cWlwFkflGPLltQvLRB7ZVD5HuP6ng320w2IS245Q= +github.com/onsi/gomega v1.20.0/go.mod h1:DtrZpjmvpn2mPm4YWQa0/ALMDj9v4YxLgojwPeREyVo= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.0.3-0.20220114050600-8b9d41f48198 h1:+czc/J8SlhPKLOtVLMQc+xDCFBT73ZStMsRhSsUhsSg= @@ -940,8 +943,9 @@ github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3 github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo= github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= -github.com/spf13/cobra v1.4.0 h1:y+wJpx64xcgO1V+RcnwW0LEHxTKRi2ZDPSBjWnrg88Q= github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g= +github.com/spf13/cobra v1.5.0 h1:X+jTBEBqF0bHN+9cSMgmfuvv2VHJ9ezmFNf9Y/XstYU= +github.com/spf13/cobra v1.5.0/go.mod h1:dWXEIy2H428czQCjInthrTRUg7yKbok+2Qi/yBIJoUM= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= @@ -1004,8 +1008,8 @@ github.com/vbatts/tar-split v0.11.2/go.mod h1:vV3ZuO2yWSVsz+pfFzDG/upWH1JhjOiEaW github.com/viki-org/dnscache v0.0.0-20130720023526-c70c1f23c5d8/go.mod h1:dniwbG03GafCjFohMDmz6Zc6oCuiqgH6tGNyXTkHzXE= github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74 h1:JwtAtbp7r/7QSyGz8mKUbYJBg2+6Cd7OjM8o/GNOcVo= github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74/go.mod h1:RmMWU37GKR2s6pgrIEB4ixgpVCt/cf7dnJv3fuH1J1c= -github.com/xanzy/go-gitlab v0.58.0 h1:Entnl8GrVDlc1jd1BlOWhNR0QVQgiO3WDom5DJbT+1s= -github.com/xanzy/go-gitlab v0.58.0/go.mod h1:F0QEXwmqiBUxCgJm8fE9S+1veX4XC9Z4cfaAbqwk4YM= +github.com/xanzy/go-gitlab v0.69.0 h1:sPci9xHzlX+lcJvPqNu3y3BQpePuR2R694Bal4AeyB8= +github.com/xanzy/go-gitlab v0.69.0/go.mod h1:o4yExCtdaqlM8YGdDJWuZoBmfxBsmA9TPEjs9mx1UO4= github.com/xanzy/ssh-agent v0.3.0 h1:wUMzuKtKilRgBAD1sUb8gOwwRr2FGoBVumcjoOACClI= github.com/xanzy/ssh-agent v0.3.0/go.mod h1:3s9xbODqPuuhK9JV1R321M/FlMZSBvE5aY6eAcqrDh0= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= @@ -1107,8 +1111,8 @@ golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e h1:T8NU3HyQ8ClP4SEE+KbFlg6n0NhuTsN4MyznaarGsZM= -golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa h1:zuSxTR4o9y82ebqCUJYNGJbGPo6sKVl54f/TVDObg1c= +golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -1223,8 +1227,8 @@ golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20220718184931-c8730f7fcb92 h1:oVlhw3Oe+1reYsE2Nqu19PDJfLzwdU3QUUrG86rLK68= -golang.org/x/oauth2 v0.0.0-20220718184931-c8730f7fcb92/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20220722155238-128564f6959c h1:q3gFqPqH7NVofKo3c3yETAP//pPI+G5mvB7qqj1Y5kY= +golang.org/x/oauth2 v0.0.0-20220722155238-128564f6959c/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= 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= @@ -1237,8 +1241,8 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220513210516-0976fa681c29 h1:w8s32wxx3sY+OjLlv9qltkLU5yvJzxjjgiHWLjdIcw4= -golang.org/x/sync v0.0.0-20220513210516-0976fa681c29/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f h1:Ax0t5p6N38Ga0dThY21weqDEyz2oklo4IvDkpigvkD8= +golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1325,6 +1329,7 @@ golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210915083310-ed5796bab164/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210917161153-d61c044b1678/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211013075003-97ac67df715c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1336,8 +1341,8 @@ golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBc 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= -golang.org/x/term v0.0.0-20220526004731-065cf7ba2467 h1:CBpWXWQpIRjzmkkA+M7q9Fqnwd2mZr3AFqexg8YTfoM= -golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.0.0-20220722155259-a9ba230a4035 h1:Q5284mrmYTpACcm+eAKjKJH48BBwSyfJqmmGDTtT8Vc= +golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1355,8 +1360,8 @@ golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20220210224613-90d013bbcef8/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20220411224347-583f2d630306 h1:+gHMid33q6pen7kv9xvT+JRinntgeXO2AeZVd0AWD3w= -golang.org/x/time v0.0.0-20220411224347-583f2d630306/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9 h1:ftMN5LMiBFjbzleLqtoBZk7KdJwhuybIU+FckUHgoyQ= +golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -1669,26 +1674,21 @@ honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.2.1/go.mod h1:lPVVZ2BS5TfnjLyizF7o7hv7j9/L+8cZY2hLyjP9cGY= -k8s.io/api v0.24.1/go.mod h1:JhoOvNiLXKTPQ60zh2g0ewpA+bnEYf5q44Flhquh4vQ= k8s.io/api v0.24.3 h1:tt55QEmKd6L2k5DP6G/ZzdMQKvG5ro4H4teClqm0sTY= k8s.io/api v0.24.3/go.mod h1:elGR/XSZrS7z7cSZPzVWaycpJuGIw57j9b95/1PdJNI= k8s.io/apiextensions-apiserver v0.24.3 h1:kyx+Tmro1qEsTUr07ZGQOfvTsF61yn+AxnxytBWq8As= k8s.io/apiextensions-apiserver v0.24.3/go.mod h1:cL0xkmUefpYM4f6IuOau+6NMFEIh6/7wXe/O4vPVJ8A= -k8s.io/apimachinery v0.24.1/go.mod h1:82Bi4sCzVBdpYjyI4jY6aHX+YCUchUIrZrXKedjd2UM= k8s.io/apimachinery v0.24.3 h1:hrFiNSA2cBZqllakVYyH/VyEh4B581bQRmqATJSeQTg= k8s.io/apimachinery v0.24.3/go.mod h1:82Bi4sCzVBdpYjyI4jY6aHX+YCUchUIrZrXKedjd2UM= k8s.io/apiserver v0.24.3/go.mod h1:aXfwtIn4U27B7lYs5f2BKgz6DRbgWy+HJeYReN1jLJ8= -k8s.io/cli-runtime v0.24.1 h1:IW6L8dRBq+pPTzvXcB+m/hOabzbqXy57Bqo4XxmW7DY= -k8s.io/cli-runtime v0.24.1/go.mod h1:14aVvCTqkA7dNXY51N/6hRY3GUjchyWDOwW84qmR3bs= -k8s.io/client-go v0.24.1/go.mod h1:f1kIDqcEYmwXS/vTbbhopMUbhKp2JhOeVTfxgaCIlF8= +k8s.io/cli-runtime v0.24.3 h1:O9YvUHrDSCQUPlsqVmaqDrueqjpJ7IO6Yas9B6xGSoo= +k8s.io/cli-runtime v0.24.3/go.mod h1:In84wauoMOqa7JDvDSXGbf8lTNlr70fOGpYlYfJtSqA= k8s.io/client-go v0.24.3 h1:Nl1840+6p4JqkFWEW2LnMKU667BUxw03REfLAVhuKQY= k8s.io/client-go v0.24.3/go.mod h1:AAovolf5Z9bY1wIg2FZ8LPQlEdKHjLI7ZD4rw920BJw= -k8s.io/code-generator v0.24.1/go.mod h1:dpVhs00hTuTdTY6jvVxvTFCk6gSMrtfRydbhZwHI15w= k8s.io/code-generator v0.24.3/go.mod h1:dpVhs00hTuTdTY6jvVxvTFCk6gSMrtfRydbhZwHI15w= -k8s.io/component-base v0.24.1/go.mod h1:DW5vQGYVCog8WYpNob3PMmmsY8A3L9QZNg4j/dV3s38= k8s.io/component-base v0.24.3 h1:u99WjuHYCRJjS1xeLOx72DdRaghuDnuMgueiGMFy1ec= k8s.io/component-base v0.24.3/go.mod h1:bqom2IWN9Lj+vwAkPNOv2TflsP1PeVDIwIN0lRthxYY= -k8s.io/component-helpers v0.24.1/go.mod h1:q5Z1pWV/QfX9ThuNeywxasiwkLw9KsR4Q9TAOdb/Y3s= +k8s.io/component-helpers v0.24.3/go.mod h1:/1WNW8TfBOijQ1ED2uCHb4wtXYWDVNMqUll8h36iNVo= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= k8s.io/gengo v0.0.0-20211129171323-c02415ce4185/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= @@ -1700,9 +1700,9 @@ k8s.io/kube-openapi v0.0.0-20210421082810-95288971da7e/go.mod h1:vHXdDvt9+2spS2R k8s.io/kube-openapi v0.0.0-20220328201542-3ee0da9b0b42/go.mod h1:Z/45zLw8lUo4wdiUkI+v/ImEGAvu3WatcZl3lPMR4Rk= k8s.io/kube-openapi v0.0.0-20220413171646-5e7f5fdc6da6 h1:nBQrWPlrNIiw0BsX6a6MKr1itkm0ZS0Nl97kNLitFfI= k8s.io/kube-openapi v0.0.0-20220413171646-5e7f5fdc6da6/go.mod h1:daOouuuwd9JXpv1L7Y34iV3yf6nxzipkKMWWlqlvK9M= -k8s.io/kubectl v0.24.1 h1:gxcjHrnwntV1c+G/BHWVv4Mtk8CQJ0WTraElLBG+ddk= -k8s.io/kubectl v0.24.1/go.mod h1:NzFqQ50B004fHYWOfhHTrAm4TY6oGF5FAAL13LEaeUI= -k8s.io/metrics v0.24.1/go.mod h1:vMs5xpcOyY9D+/XVwlaw8oUHYCo6JTGBCZfyXOOkAhE= +k8s.io/kubectl v0.24.3 h1:PqY8ho/S/KuE2/hCC3Iee7X+lOtARYo0LQsNzvV/edE= +k8s.io/kubectl v0.24.3/go.mod h1:PYLcvw96sC1NLbxZEDbdlOEd6/C76VIWjGmWV5QjSk0= +k8s.io/metrics v0.24.3/go.mod h1:p1M0lhMySWfhISkSd3HEj8xIgrVnJTK3PPhFq2rA3To= k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9 h1:HNSDgDCrr/6Ly3WEGKZftiE7IY19Vz2GdbOCyI4qqhc= k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= From 342bb816877395bb8d0a3ad2a5ba5b15fab81da7 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 17 Aug 2022 16:02:25 +0300 Subject: [PATCH 213/818] Update kubectl to v1.24.3 in flux-cli image Signed-off-by: Stefan Prodan --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 09435c05..a30c6170 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ FROM alpine:3.16 as builder RUN apk add --no-cache ca-certificates curl ARG ARCH=linux/amd64 -ARG KUBECTL_VER=1.24.1 +ARG KUBECTL_VER=1.24.3 RUN curl -sL https://storage.googleapis.com/kubernetes-release/release/v${KUBECTL_VER}/bin/${ARCH}/kubectl \ -o /usr/local/bin/kubectl && chmod +x /usr/local/bin/kubectl && \ From 96d1c1b2bd4fd2e080b07fc21e43048b0fd3a554 Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Wed, 17 Aug 2022 16:42:47 +0100 Subject: [PATCH 214/818] Add --filter-semver and regex flags to list artifact Signed-off-by: Somtochi Onyekwere --- cmd/flux/list_artifact.go | 17 ++++++++++++++++- go.mod | 2 +- go.sum | 4 ++-- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/cmd/flux/list_artifact.go b/cmd/flux/list_artifact.go index eb0d4127..ca736997 100644 --- a/cmd/flux/list_artifact.go +++ b/cmd/flux/list_artifact.go @@ -27,6 +27,13 @@ import ( "github.com/fluxcd/flux2/pkg/printers" ) +type listArtifactFlags struct { + semverFilter string + regexFilter string +} + +var listArtifactArgs listArtifactFlags + var listArtifactsCmd = &cobra.Command{ Use: "artifacts", Short: "list artifacts", @@ -39,6 +46,9 @@ The command uses the credentials from '~/.docker/config.json'.`, } func init() { + listArtifactsCmd.Flags().StringVar(&listArtifactArgs.semverFilter, "filter-semver", "", "filter tags returned from the oci repository using semver") + listArtifactsCmd.Flags().StringVar(&listArtifactArgs.regexFilter, "filter-regex", "", "filter tags returned from the oci repository using regex") + listCmd.AddCommand(listArtifactsCmd) } @@ -57,7 +67,12 @@ func listArtifactsCmdRun(cmd *cobra.Command, args []string) error { return err } - metas, err := ociClient.List(ctx, url) + opts := oci.ListOptions{ + RegexFilter: listArtifactArgs.regexFilter, + SemverFilter: listArtifactArgs.semverFilter, + } + + metas, err := ociClient.List(ctx, url, opts) if err != nil { return err } diff --git a/go.mod b/go.mod index 1b1e8187..750ce704 100644 --- a/go.mod +++ b/go.mod @@ -14,7 +14,7 @@ require ( github.com/fluxcd/notification-controller/api v0.25.1 github.com/fluxcd/pkg/apis/meta v0.14.2 github.com/fluxcd/pkg/kustomize v0.5.3 - github.com/fluxcd/pkg/oci v0.4.1 + github.com/fluxcd/pkg/oci v0.5.1 github.com/fluxcd/pkg/runtime v0.16.2 github.com/fluxcd/pkg/sourceignore v0.1.0 github.com/fluxcd/pkg/ssa v0.17.0 diff --git a/go.sum b/go.sum index 4593e3f2..bbbd6e5f 100644 --- a/go.sum +++ b/go.sum @@ -292,8 +292,8 @@ github.com/fluxcd/pkg/apis/meta v0.14.2 h1:/Hf7I/Vz01vv3m7Qx7DtQvrzAL1oVt0MJcLb/ github.com/fluxcd/pkg/apis/meta v0.14.2/go.mod h1:ijZ61VG/8T3U17gj0aFL3fdtZL+mulD6V8VrLLUCAgM= github.com/fluxcd/pkg/kustomize v0.5.3 h1:WpxNOV/Yklp0p7Qv85VwBegq9fABuLR9qSWaAVa3+yc= github.com/fluxcd/pkg/kustomize v0.5.3/go.mod h1:zy1FLxkEDADUykCnrXqq6rVN48t3uMhAb3ao+zv0rFE= -github.com/fluxcd/pkg/oci v0.4.1 h1:gx63SW9BymuJydDbu/8xzlMP85Tpc9FBnHZXsckgC7U= -github.com/fluxcd/pkg/oci v0.4.1/go.mod h1:eOnW+Ce3Z8AmQ+X9tf1BCv+qxwro+rPM/VKca1E9Ka0= +github.com/fluxcd/pkg/oci v0.5.1 h1:71Xt94AGUL5x3qBpHMS2KzIH3GnvxK22GIhA3KbBV0o= +github.com/fluxcd/pkg/oci v0.5.1/go.mod h1:qEzBvOJvWKrIKIhCKw1Nlbgod9ClD8C6A7F2cylXpsA= github.com/fluxcd/pkg/runtime v0.16.2 h1:CexfMmJK+r12sHTvKWyAax0pcPomjd6VnaHXcxjUrRY= github.com/fluxcd/pkg/runtime v0.16.2/go.mod h1:OHSKsrO+T+Ym8WZRS2oidrnauWRARuE2nfm8ewevm7M= github.com/fluxcd/pkg/sourceignore v0.1.0 h1:v36Rqp6FDB7Ntjy7NakdwscOfxFPk14peKa+VMBNugo= From 16d3180e42d20be8191f2c89bab43dbe654b0f83 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Mon, 22 Aug 2022 15:44:07 +0300 Subject: [PATCH 215/818] [RFC-0003] OCI select layer by media type Signed-off-by: Stefan Prodan --- rfcs/0003-kubernetes-oci/README.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/rfcs/0003-kubernetes-oci/README.md b/rfcs/0003-kubernetes-oci/README.md index 16ef3887..b8321e6f 100644 --- a/rfcs/0003-kubernetes-oci/README.md +++ b/rfcs/0003-kubernetes-oci/README.md @@ -4,7 +4,7 @@ **Creation date:** 2022-03-31 -**Last update:** 2022-08-11 +**Last update:** 2022-08-22 ## Summary @@ -134,6 +134,18 @@ spec: name: cosign-key ``` +### Layer selection + +By default, Flux assumes that the first layer of the OCI artifact contains the Kubernetes configuration. +For multi-layer artifacts created by other tools than Flux CLI, users can specify the media type of the layer +which contains the tarball with Kubernetes manifests. + +```yaml +spec: + layerSelector: + mediaType: "application/vnd.cncf.flux.content.v1.tar+gzip" +``` + ### Pull artifacts from private repositories For authentication purposes, Flux users can choose between supplying static credentials with Kubernetes secrets From db0920ba32d8e2777936d16f63aca231ef9548c1 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Mon, 22 Aug 2022 16:02:03 +0300 Subject: [PATCH 216/818] Clarify the layer selection behaviour Co-authored-by: Hidde Beydals Signed-off-by: Stefan Prodan --- rfcs/0003-kubernetes-oci/README.md | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/rfcs/0003-kubernetes-oci/README.md b/rfcs/0003-kubernetes-oci/README.md index b8321e6f..a1cb08de 100644 --- a/rfcs/0003-kubernetes-oci/README.md +++ b/rfcs/0003-kubernetes-oci/README.md @@ -137,15 +137,24 @@ spec: ### Layer selection By default, Flux assumes that the first layer of the OCI artifact contains the Kubernetes configuration. -For multi-layer artifacts created by other tools than Flux CLI, users can specify the media type of the layer +For multi-layer artifacts created by other tools than Flux CLI +(e.g. [oras](https://github.com/oras-project/oras), +[crane](https://github.com/google/go-containerregistry/tree/main/cmd/crane)), +users can specify the [media type](https://github.com/opencontainers/image-spec/blob/v1.0.2/media-types.md) of the layer which contains the tarball with Kubernetes manifests. ```yaml spec: layerSelector: - mediaType: "application/vnd.cncf.flux.content.v1.tar+gzip" + mediaType: "application/deployment.content.v1.tar+gzip" ``` +If the layer selector matches more than one layer, +the first layer matching the specified media type will be used. +Note that Flux requires that the OCI layer is +[compressed](https://github.com/opencontainers/image-spec/blob/v1.0.2/layer.md#gzip-media-types) +in the `tar+gzip` format. + ### Pull artifacts from private repositories For authentication purposes, Flux users can choose between supplying static credentials with Kubernetes secrets From 463d241a911d9d3738384a8807e29134943545d6 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Tue, 23 Aug 2022 16:03:24 +0300 Subject: [PATCH 217/818] Update TODOs for RFC-0003 Signed-off-by: Stefan Prodan --- rfcs/0003-kubernetes-oci/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/rfcs/0003-kubernetes-oci/README.md b/rfcs/0003-kubernetes-oci/README.md index a1cb08de..7fcd940a 100644 --- a/rfcs/0003-kubernetes-oci/README.md +++ b/rfcs/0003-kubernetes-oci/README.md @@ -459,4 +459,5 @@ The feature is enabled by default. ### TODOs -* Add support for verifying the OCI artifacts with cosign +* [Add support for verifying the OCI artifacts with cosign](https://github.com/fluxcd/source-controller/issues/863) +* [Select layer by OCI media type](https://github.com/fluxcd/source-controller/pull/871) From 8a0fd6ddf980e3629fb4e3e7074daaa591814e8a Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 24 Aug 2022 11:42:20 +0300 Subject: [PATCH 218/818] Add version validation to install commands Signed-off-by: Stefan Prodan --- cmd/flux/version_utils.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/cmd/flux/version_utils.go b/cmd/flux/version_utils.go index 8f64ebf3..64b52ccf 100644 --- a/cmd/flux/version_utils.go +++ b/cmd/flux/version_utils.go @@ -18,6 +18,7 @@ package main import ( "fmt" + "strings" "github.com/fluxcd/flux2/internal/utils" "github.com/fluxcd/flux2/pkg/manifestgen/install" @@ -28,6 +29,10 @@ func getVersion(input string) (string, error) { return rootArgs.defaults.Version, nil } + if input != install.MakeDefaultOptions().Version && !strings.HasPrefix(input, "v") { + return "", fmt.Errorf("targeted version '%s' must be prefixed with 'v'", input) + } + if isEmbeddedVersion(input) { return input, nil } From ad0f3373b66b8d133bbef2a20da52af2623b8877 Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Mon, 22 Aug 2022 20:32:41 +0100 Subject: [PATCH 219/818] Improve error message in get cmd Signed-off-by: Somtochi Onyekwere --- cmd/flux/get.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cmd/flux/get.go b/cmd/flux/get.go index ac099a9f..84a7573a 100644 --- a/cmd/flux/get.go +++ b/cmd/flux/get.go @@ -162,7 +162,9 @@ func (get getCommand) run(cmd *cobra.Command, args []string) error { } if get.list.len() == 0 { - if !getAll { + if len(args) > 0 { + logger.Failuref("%s object '%s' not found in '%s' namespace", get.kind, args[0], *kubeconfigArgs.Namespace) + } else if !getAll { logger.Failuref("no %s objects found in %s namespace", get.kind, *kubeconfigArgs.Namespace) } return nil From 07de9d9ffe5e868b2a50fff1c3898bb632f93ad4 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 24 Aug 2022 15:11:13 +0300 Subject: [PATCH 220/818] [RFC-0002] Add auth specification for Helm OCI Signed-off-by: Stefan Prodan --- rfcs/0002-helm-oci/README.md | 62 +++++++++++++++++++++++++++++++++--- 1 file changed, 58 insertions(+), 4 deletions(-) diff --git a/rfcs/0002-helm-oci/README.md b/rfcs/0002-helm-oci/README.md index d3abe0a9..40ba19b2 100644 --- a/rfcs/0002-helm-oci/README.md +++ b/rfcs/0002-helm-oci/README.md @@ -4,7 +4,7 @@ **Creation date:** 2022-03-30 -**Last update:** 2022-06-07 +**Last update:** 2022-08-24 ## Summary @@ -32,12 +32,65 @@ they do today for container images. ## Proposal Introduce an optional field called `type` to the `HelmRepository` spec. - When not specified, the `spec.type` field defaults to `default` which preserve the current `HelmRepository` API behaviour. - When the `spec.type` field is set to `oci`, the `spec.url` field must be prefixed with `oci://` (to follow the Helm conventions). For `oci://` URLs, source-controller will use the Helm SDK and the `oras` library to connect to the OCI remote storage. -For authentication, the controller will use Kubernetes secrets of `kubernetes.io/dockerconfigjson` type. + +Introduce an optional field called `provider` for +[context-based authorization](https://fluxcd.io/docs/security/contextual-authorization/) +to AWS, Azure and Google Cloud. The `spec.provider` is ignored when `spec.type` is set to `default`. + + +### Pull charts from private repositories + +#### Basic auth + +For private repositories hosted on GitHub, Quay, self-hosted Docker Registry and others, +the credentials can be supplied with: + +```yaml +apiVersion: source.toolkit.fluxcd.io/v1beta2 +kind: HelmRepository +metadata: + name: +spec: + type: oci + secretRef: + name: regcred +``` + +The `secretRef` points to a Kubernetes secret in the same namespace as the `HelmRepository`. +The [secret type](https://kubernetes.io/docs/concepts/configuration/secret/#secret-types) +must be `kubernetes.io/dockerconfigjson`: + +```shell +kubectl create secret docker-registry regcred \ + --docker-server= \ + --docker-username= \ + --docker-password= +``` + +#### OIDC auth + +When Flux runs on AKS, EKS or GKE, an IAM role (that grants read-only access to ACR, ECR or GCR) +can be used to bind the `source-controller` to the IAM role. + +```yaml +apiVersion: source.toolkit.fluxcd.io/v1beta2 +kind: HelmRepository +metadata: + name: +spec: + type: oci + provider: azure +``` + +The provider accepts the following values: `generic`, `aws`, `azure` and `gcp`. When the provider is +not specified, it defaults to `generic`. When the provider is set to `aws`, `azure` or `gcp`, the +controller will use a specific cloud SDK for authentication purposes. + +If both `spec.secretRef` and a non-generic provider are present in the definition, +the controller will use the static credentials from the referenced secret. ### User Stories @@ -181,3 +234,4 @@ The feature is enabled by default. ### TODOs * [Add support for container registries with self-signed TLS certs](https://github.com/fluxcd/source-controller/issues/723) +* [Enable contextual login in OCI HelmRepository](https://github.com/fluxcd/source-controller/pull/873) \ No newline at end of file From b993d17148921e19d0ca4448429bd531b3545704 Mon Sep 17 00:00:00 2001 From: Sven Nebel Date: Wed, 24 Aug 2022 20:39:00 +0100 Subject: [PATCH 221/818] Update tests/azure dependency - Update "github.com/hashicorp/terraform-exec" to v0.16.1 - Replace "github.com/hashicorp/terraform-exec/tfinstall" with "github.com/hashicorp/hc-install" - Fix typos and wording in README.md Signed-off-by: Sven Nebel --- tests/azure/README.md | 10 +++--- tests/azure/azure_test.go | 12 +++++-- tests/azure/go.mod | 30 +++-------------- tests/azure/go.sum | 68 ++++++--------------------------------- tests/azure/terraform.go | 35 -------------------- 5 files changed, 28 insertions(+), 127 deletions(-) delete mode 100644 tests/azure/terraform.go diff --git a/tests/azure/README.md b/tests/azure/README.md index 80f99382..c86d6a08 100644 --- a/tests/azure/README.md +++ b/tests/azure/README.md @@ -5,7 +5,7 @@ Azure services are actually working now and in the future. ## Architecture -The tests are run with the help of pre configured Azure subscriptions and Azure DevOps organization. Access to thse accounts are currently limited to +The tests are run with the help of pre-configured Azure subscriptions and Azure DevOps organization. Access to those accounts are currently limited to Flux maintainers. * [Azure Subscription](https://portal.azure.com/#@weaveworksendtoend.onmicrosoft.com/resource/subscriptions/71e8dce4-9af6-405a-8e96-425f5d3c302b/overview) * [Azure DevOps organization](https://dev.azure.com/flux-azure/) @@ -15,17 +15,17 @@ state in Azure. They should all be placed in the [same container](https://portal but use different keys. The [shared](./terraform/shared) Terraform creates long running cheaper infrastructure that is used across all tests. This includes a Key Vault which -contains an ssh key and Azure DevOps Personal Access Token which cant be created automatically. It also includes an Azure Container Registry which the +contains an ssh key and Azure DevOps Personal Access Token which cannot be created automatically. It also includes an Azure Container Registry which the forked [podinfo](https://dev.azure.com/flux-azure/e2e/_git/podinfo) repository pushes an Helm Chart and Docker image to. The [aks](./terraform/aks) Terraform creates the AKS cluster and related resources to run the tests. It creates the AKS cluster, Azure DevOps -repositories, Key Vault Key for Sops, and Azure EventHub. The resources should be created and destroyed before and after every test run. Currently +repositories, Key Vault Key for Sops, and Azure EventHub. The resources should be created and destroyed before and after every test run. Currently, the same state is reused between runs to make sure that resources are left running after each test run. ## Tests -Each test run is intiated by running `terraform apply` on the aks Terraform, it does this by using the library [terraform-exec](github.com/hashicorp/terraform-exec). -It then reads the output of the Terraform to get credentials and ssh keys, this means that a lot of the communication with the Azure API is offest to +Each test run is initiated by running `terraform apply` on the aks Terraform, it does this by using the library [terraform-exec](github.com/hashicorp/terraform-exec). +It then reads the output of the Terraform to get credentials and ssh keys, this means that a lot of the communication with the Azure API is offset to Terraform instead of requiring it to be implemented in the test. The following tests are currently implemented: diff --git a/tests/azure/azure_test.go b/tests/azure/azure_test.go index ed701baa..baf42170 100644 --- a/tests/azure/azure_test.go +++ b/tests/azure/azure_test.go @@ -30,15 +30,17 @@ import ( "time" eventhub "github.com/Azure/azure-event-hubs-go/v3" + "github.com/hashicorp/hc-install" + "github.com/hashicorp/hc-install/fs" + "github.com/hashicorp/hc-install/product" + "github.com/hashicorp/hc-install/src" "github.com/hashicorp/terraform-exec/tfexec" - "github.com/hashicorp/terraform-exec/tfinstall" git2go "github.com/libgit2/git2go/v31" "github.com/microsoft/azure-devops-go-api/azuredevops" "github.com/microsoft/azure-devops-go-api/azuredevops/git" "github.com/stretchr/testify/require" giturls "github.com/whilp/git-urls" "go.uber.org/multierr" - corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" @@ -109,7 +111,11 @@ func setup(m *testing.M) (exitVal int, err error) { // Setup Terraform binary and init state log.Println("Setting up Azure test infrastructure") - execPath, err := tfinstall.Find(ctx, &whichTerraform{}) + i := install.NewInstaller() + // Find Terraform binary path + execPath, err := i.Ensure(ctx, []src.Source{ + &fs.AnyVersion{Product: &product.Terraform}, + }) if err != nil { return 0, fmt.Errorf("terraform exec path not found: %v", err) } diff --git a/tests/azure/go.mod b/tests/azure/go.mod index ecdf8d5f..9bcad66b 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -12,7 +12,8 @@ require ( github.com/fluxcd/pkg/apis/meta v0.14.2 github.com/fluxcd/pkg/runtime v0.16.2 github.com/fluxcd/source-controller/api v0.25.5 - github.com/hashicorp/terraform-exec v0.15.0 + github.com/hashicorp/hc-install v0.4.0 + github.com/hashicorp/terraform-exec v0.16.1 github.com/libgit2/git2go/v31 v31.7.9 github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 github.com/stretchr/testify v1.7.1 @@ -31,8 +32,6 @@ replace gopkg.in/yaml.v3 => gopkg.in/yaml.v3 v3.0.1 replace github.com/hashicorp/go-getter => github.com/hashicorp/go-getter v1.6.1 require ( - cloud.google.com/go v0.81.0 // indirect - cloud.google.com/go/storage v1.10.0 // indirect github.com/Azure/azure-amqp-common-go/v3 v3.2.3 // indirect github.com/Azure/azure-sdk-for-go v51.1.0+incompatible // indirect github.com/Azure/go-amqp v0.17.0 // indirect @@ -46,9 +45,7 @@ require ( github.com/Azure/go-autorest/tracing v0.6.0 // indirect github.com/PuerkitoBio/purell v1.1.1 // indirect github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect - github.com/aws/aws-sdk-go v1.15.78 // indirect github.com/beorn7/perks v1.0.1 // indirect - github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/devigned/tab v0.1.1 // indirect @@ -70,26 +67,18 @@ require ( github.com/google/go-cmp v0.5.8 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/uuid v1.3.0 // indirect - github.com/googleapis/gax-go/v2 v2.0.5 // indirect - github.com/hashicorp/go-checkpoint v0.5.0 // indirect + github.com/hashicorp/errwrap v1.0.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect - github.com/hashicorp/go-getter v1.5.3 // indirect + github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/go-retryablehttp v0.7.1 // indirect - github.com/hashicorp/go-safetemp v1.0.0 // indirect - github.com/hashicorp/go-uuid v1.0.1 // indirect - github.com/hashicorp/go-version v1.4.0 // indirect + github.com/hashicorp/go-version v1.5.0 // indirect github.com/hashicorp/terraform-json v0.13.0 // indirect github.com/imdario/mergo v0.3.12 // indirect - github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/jpillora/backoff v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect - github.com/jstemmer/go-junit-report v0.9.1 // indirect - github.com/klauspost/compress v1.11.2 // indirect github.com/mailru/easyjson v0.7.6 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect - github.com/mitchellh/go-homedir v1.1.0 // indirect - github.com/mitchellh/go-testing-interface v1.0.0 // indirect github.com/mitchellh/mapstructure v1.4.1 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect @@ -101,27 +90,18 @@ require ( github.com/prometheus/common v0.32.1 // indirect github.com/prometheus/procfs v0.7.3 // indirect github.com/spf13/pflag v1.0.5 // indirect - github.com/ulikunitz/xz v0.5.8 // indirect github.com/zclconf/go-cty v1.10.0 // indirect - go.opencensus.io v0.23.0 // indirect go.uber.org/atomic v1.7.0 // indirect go.uber.org/zap v1.21.0 // indirect golang.org/x/crypto v0.0.0-20220214200702-86341886e292 // indirect - golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 // indirect - golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3 // indirect golang.org/x/net v0.0.0-20220225172249-27dd8689420f // indirect golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 // indirect golang.org/x/sys v0.0.0-20220517195934-5e4e11fc645e // indirect golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect golang.org/x/text v0.3.7 // indirect golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 // indirect - golang.org/x/tools v0.1.10-0.20220218145154-897bd77cd717 // indirect - golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect - google.golang.org/api v0.44.0 // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368 // indirect - google.golang.org/grpc v1.40.0 // indirect google.golang.org/protobuf v1.27.1 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/tests/azure/go.sum b/tests/azure/go.sum index 2ced1380..473d0b86 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -17,7 +17,6 @@ cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKP cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= -cloud.google.com/go v0.81.0 h1:at8Tk2zUz63cLPR0JPWm5vp77pEZmzxEQBEfRKn1VV8= cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= @@ -36,7 +35,6 @@ cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiy cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= -cloud.google.com/go/storage v1.10.0 h1:STgFzyU5/8miMl0//zKh2aQeTyeaUH3WN9bSUiJ09bA= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/Azure/azure-amqp-common-go/v3 v3.2.3 h1:uDF62mbd9bypXWi19V1bN5NZEO84JqgmI5G73ibAmrk= @@ -87,9 +85,6 @@ github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUM github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= -github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= -github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= github.com/Microsoft/go-winio v0.4.16 h1:FtSW/jqD+l4ba5iPBj9CODVtgfYAD8w2wS923g/cFDk= github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= @@ -109,19 +104,15 @@ github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuy github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/andybalholm/crlf v0.0.0-20171020200849-670099aa064f/go.mod h1:k8feO4+kXDxro6ErPXBRTJ/ro2mf0SsFG8s7doP9kJE= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20210826220005-b48c857c3a0e/go.mod h1:F7bn7fEU90QkQ3tnmaTx3LTKLEDqnwWODIYppRQ5hnY= -github.com/apparentlymart/go-textseg v1.0.0/go.mod h1:z96Txxhf3xSFMPmb5X/1W05FF/Nj9VFpLOpjS5yuumk= github.com/apparentlymart/go-textseg/v13 v13.0.0/go.mod h1:ZK2fH7c4NqDTLtiYLvIkEghdlcqw7yxLeM89kiTRPUo= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= -github.com/aws/aws-sdk-go v1.15.78 h1:LaXy6lWR0YK7LKyuU0QWy2ws/LWTPfYV/UgfiBu4tvY= -github.com/aws/aws-sdk-go v1.15.78/go.mod h1:E3/ieXAlvM0XWO57iftYVDLLvQ824smPP3ATZkfNZeM= github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= @@ -129,8 +120,6 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas= -github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= @@ -141,7 +130,6 @@ github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghf github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= @@ -284,7 +272,6 @@ github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= -github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -328,10 +315,8 @@ github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/ github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.1.0 h1:wCKgOCHuUEVfsaQLpPSJb7VdYCdTVZQAuOdYm1yc/60= github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= @@ -352,7 +337,6 @@ github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+ github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+Tv3SM= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= @@ -365,52 +349,48 @@ github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-checkpoint v0.5.0 h1:MFYpPZCnQqQTE18jFwSII6eUQrD/oxMFp3mlgcqk5mU= github.com/hashicorp/go-checkpoint v0.5.0/go.mod h1:7nfLNL10NsxqO4iWuW6tWW0HjZuDrwkBuEQsVcpCOgg= github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= -github.com/hashicorp/go-getter v1.6.1 h1:NASsgP4q6tL94WH6nJxKWj8As2H/2kop/bB1d8JMyRY= -github.com/hashicorp/go-getter v1.6.1/go.mod h1:IZCrswsZPeWv9IkVnLElzRU/gz/QPi6pZHn4tv6vbwA= github.com/hashicorp/go-hclog v0.9.2 h1:CG6TE5H9/JXsFWJCfoIVpKFIkFe6ysEuHirp4DxCsHI= github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-retryablehttp v0.7.1 h1:sUiuQAnLlbvmExtFQs72iFW/HXeUn8Z1aJLQ4LJJbTQ= github.com/hashicorp/go-retryablehttp v0.7.1/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= -github.com/hashicorp/go-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo= -github.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoDHxNAB65b+Rj1I= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-version v1.1.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.3.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go-version v1.4.0 h1:aAQzgqIrRKRa7w75CKpbBxYsmUoPjzVm1W59ca1L0J4= -github.com/hashicorp/go-version v1.4.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.5.0 h1:O293SZ2Eg+AAYijkVK3jR786Am1bhDEh2GHT0tIVE5E= +github.com/hashicorp/go-version v1.5.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/hc-install v0.4.0 h1:cZkRFr1WVa0Ty6x5fTvL1TuO1flul231rWkGH92oYYk= +github.com/hashicorp/hc-install v0.4.0/go.mod h1:5d155H8EC5ewegao9A4PUTMNPZaq+TbOzkJJZ4vrXeI= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= -github.com/hashicorp/terraform-exec v0.15.0 h1:cqjh4d8HYNQrDoEmlSGelHmg2DYDh5yayckvJ5bV18E= -github.com/hashicorp/terraform-exec v0.15.0/go.mod h1:H4IG8ZxanU+NW0ZpDRNsvh9f0ul7C0nHP+rUR/CHs7I= +github.com/hashicorp/terraform-exec v0.16.1 h1:NAwZFJW2L2SaCBVZoVaH8LPImLOGbPLkSHy0IYbs2uE= +github.com/hashicorp/terraform-exec v0.16.1/go.mod h1:aj0lVshy8l+MHhFNoijNHtqTJQI3Xlowv5EOsEaGO7M= github.com/hashicorp/terraform-json v0.13.0 h1:Li9L+lKD1FO5RVFRM1mMMIBDoUHslOniyEi5CM+FWGY= github.com/hashicorp/terraform-json v0.13.0/go.mod h1:y5OdLBCT+rxbwnpxZs9kGL7R9ExU76+cpdY8zHwoazk= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/huandu/xstrings v1.3.2/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= -github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= @@ -418,8 +398,6 @@ github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOl github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= -github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8 h1:12VvqtR6Aowv3l/EQUlocDHW2Cp4G9WJVH7uyH8QFJE= -github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= @@ -435,7 +413,6 @@ github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jstemmer/go-junit-report v0.9.1 h1:6QPYqodiu3GuPL+7mfx+NwDdp2eTkp9IfEUpgAwUN0o= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= @@ -446,8 +423,6 @@ github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvW github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.11.2 h1:MiK62aErc3gIiVEtyzKfeOHgW7atJb5g/KNX5m3c2nQ= -github.com/klauspost/compress v1.11.2/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= @@ -460,7 +435,6 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= github.com/libgit2/git2go/v31 v31.7.9 h1:RUDiYm7+i3GY414acI31oDD8x5P0PZyWeZZfwpPuynE= github.com/libgit2/git2go/v31 v31.7.9/go.mod h1:c/rkJcBcUFx6wHaT++UwNpKvIsmPNqCeQ/vzO4DrEec= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= @@ -471,8 +445,6 @@ github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJ github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= @@ -480,13 +452,10 @@ github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 h1:YH424zrwLTlyHS github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5/go.mod h1:PoGiBqKSQK1vIfQ+yVaFcGjDySHvym6FM1cNYnwzbrY= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= -github.com/mitchellh/cli v1.1.2/go.mod h1:6iaV0fGdElS6dPBx0EApTxHrcWvmJphyh2n8YBLPPZ4= -github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-testing-interface v1.0.0 h1:fzU/JVNcaqHQEcVFAKeR41fkiLdIPrefOvVG1VZ96U0= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= @@ -494,7 +463,6 @@ github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:F github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.4.1 h1:CpVNEelQCZBooIPDn+AR3NpivK/TIKU8bDxdASFVQag= github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= @@ -574,7 +542,6 @@ github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg github.com/sebdah/goldie v1.0.0/go.mod h1:jXP4hmWywNEwZzhMuv2ccnqTSFpuq8iyQhtQdkkZBH4= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= -github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= @@ -613,9 +580,6 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/ulikunitz/xz v0.5.8 h1:ERv8V6GKqVi23rgu5cj9pVfVzJbOqAY2Ntl88O6c2nQ= -github.com/ulikunitz/xz v0.5.8/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= -github.com/vmihailenco/msgpack v3.3.3+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk= github.com/vmihailenco/msgpack/v4 v4.3.12/go.mod h1:gborTTJjAo/GWTqqRjrLCn9pgNN+NXzzngzBKDPIqw4= github.com/vmihailenco/tagparser v0.1.1/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= github.com/whilp/git-urls v1.0.0 h1:95f6UMWN5FKW71ECsXRUd3FVYiXdrE7aX4NZKcPmIjU= @@ -629,11 +593,9 @@ github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/zclconf/go-cty v1.2.0/go.mod h1:hOPWgoHbaTUnI5k4D2ld+GRpFJSCe6bCM7m1q/N4PQ8= github.com/zclconf/go-cty v1.9.1/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uUAzyuvAk= github.com/zclconf/go-cty v1.10.0 h1:mp9ZXQeIcN8kAwuqorjH+Q+njbJKjLrvB2yIh4q7U+0= github.com/zclconf/go-cty v1.10.0/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uUAzyuvAk= -github.com/zclconf/go-cty-debug v0.0.0-20191215020915-b22d67c1ba0b/go.mod h1:ZRKQfBXbGkpdV6QMzT3rU1kSTAnfu1dO8dPKjYprgj8= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= @@ -652,7 +614,6 @@ go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= -go.opencensus.io v0.23.0 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opentelemetry.io/contrib v0.20.0/go.mod h1:G/EtFaa6qaN7+LxqfIAT3GiZa7Wv5DTBUzl5H4LY0Kc= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.20.0/go.mod h1:oVGt1LRbBOBq1A5BQLlUg9UaU/54aiHw8cgjV3aWZ/E= @@ -706,7 +667,6 @@ golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRu golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 h1:VLliZ0d+/avPrXXH+OakdXhpJuEoBZuwh1m2j7U6Iug= golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= @@ -719,10 +679,8 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 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.20220106191415-9b9b3d81d5e3 h1:kQgndtyPBW/JIYERgdxfwMYh3AVStj88WQTlNDi2a+o= golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180811021610-c39426892332/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -783,7 +741,6 @@ golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 h1:RerP+noqYHUQ8CMRcPlC2nvTa4dcBIjegkuWdcUDuqg= golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= @@ -945,12 +902,10 @@ golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.10-0.20220218145154-897bd77cd717 h1:hI3jKY4Hpf63ns040onEbB3dAkR/H/P83hw1TG8dD3Y= golang.org/x/tools v0.1.10-0.20220218145154-897bd77cd717/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gomodules.xyz/jsonpatch/v2 v2.2.0 h1:4pT439QV83L+G9FkcCriY6EkpcK6r6bK+A5FBUMI7qY= gomodules.xyz/jsonpatch/v2 v2.2.0/go.mod h1:WXp+iVDkoLQqPudfQ9GBlwB2eZ5DKOnjQZCYdOS8GPY= @@ -975,8 +930,6 @@ google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34q google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= -google.golang.org/api v0.44.0 h1:URs6qR1lAxDsqWITsQXI4ZkGiYJ5dHtRNiCpfs2OeKA= -google.golang.org/api v0.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1030,7 +983,6 @@ google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368 h1:Et6SkiuvnBn+SgrSYXs/BrUpGB4mbdwt4R3vaPIlicA= google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= @@ -1053,7 +1005,6 @@ google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAG google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.40.0 h1:AGJ0Ih4mHjSeibYkFGh1dD9KJ/eOtZ93I6hoHhukQ5Q= google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= 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= @@ -1077,7 +1028,6 @@ gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/cheggaaa/pb.v1 v1.0.27/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= diff --git a/tests/azure/terraform.go b/tests/azure/terraform.go deleted file mode 100644 index ee6cd156..00000000 --- a/tests/azure/terraform.go +++ /dev/null @@ -1,35 +0,0 @@ -/* -Copyright 2021 The Flux authors - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package test - -import ( - "context" - "os/exec" - "strings" -) - -type whichTerraform struct{} - -func (w *whichTerraform) ExecPath(ctx context.Context) (string, error) { - cmd := exec.CommandContext(ctx, "which", "terraform") - output, err := cmd.Output() - if err != nil { - return "", err - } - path := strings.TrimSuffix(string(output), "\n") - return path, nil -} From 2c9ef85f6d87524b844f1c33e9dd5da1429c59bd Mon Sep 17 00:00:00 2001 From: Sven Nebel Date: Thu, 25 Aug 2022 21:01:53 +0100 Subject: [PATCH 222/818] Fix broken "edit this page" links in Flux CLI section #2203 Signed-off-by: Sven Nebel --- cmd/flux/docgen.go | 1 + 1 file changed, 1 insertion(+) diff --git a/cmd/flux/docgen.go b/cmd/flux/docgen.go index aec004ea..cdd5472b 100644 --- a/cmd/flux/docgen.go +++ b/cmd/flux/docgen.go @@ -28,6 +28,7 @@ import ( const fmTemplate = `--- title: "%s" +importedDoc: true --- ` From 93fdd795da264491d5fc60a63a275425438fad01 Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Mon, 29 Aug 2022 10:57:30 +0000 Subject: [PATCH 223/818] Update toolkit components - helm-controller to v0.23.1 https://github.com/fluxcd/helm-controller/blob/v0.23.1/CHANGELOG.md - kustomize-controller to v0.27.1 https://github.com/fluxcd/kustomize-controller/blob/v0.27.1/CHANGELOG.md - source-controller to v0.28.0 https://github.com/fluxcd/source-controller/blob/v0.28.0/CHANGELOG.md - notification-controller to v0.25.2 https://github.com/fluxcd/notification-controller/blob/v0.25.2/CHANGELOG.md - image-reflector-controller to v0.20.1 https://github.com/fluxcd/image-reflector-controller/blob/v0.20.1/CHANGELOG.md - image-automation-controller to v0.24.2 https://github.com/fluxcd/image-automation-controller/blob/v0.24.2/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 50 +++--- go.sum | 148 ++++++------------ .../bases/helm-controller/kustomization.yaml | 4 +- .../kustomization.yaml | 4 +- .../kustomization.yaml | 4 +- .../kustomize-controller/kustomization.yaml | 4 +- .../kustomization.yaml | 4 +- .../source-controller/kustomization.yaml | 4 +- manifests/crds/kustomization.yaml | 12 +- 9 files changed, 95 insertions(+), 139 deletions(-) diff --git a/go.mod b/go.mod index 750ce704..32f1a08a 100644 --- a/go.mod +++ b/go.mod @@ -7,12 +7,12 @@ require ( github.com/ProtonMail/go-crypto v0.0.0-20220812175011-7fcef0dbe794 github.com/cyphar/filepath-securejoin v0.2.3 github.com/fluxcd/go-git-providers v0.8.0 - github.com/fluxcd/helm-controller/api v0.22.2 - github.com/fluxcd/image-automation-controller/api v0.24.1 - github.com/fluxcd/image-reflector-controller/api v0.20.0 - github.com/fluxcd/kustomize-controller/api v0.27.0 - github.com/fluxcd/notification-controller/api v0.25.1 - github.com/fluxcd/pkg/apis/meta v0.14.2 + github.com/fluxcd/helm-controller/api v0.23.1 + github.com/fluxcd/image-automation-controller/api v0.24.2 + github.com/fluxcd/image-reflector-controller/api v0.20.1 + github.com/fluxcd/kustomize-controller/api v0.27.1 + github.com/fluxcd/notification-controller/api v0.25.2 + github.com/fluxcd/pkg/apis/meta v0.15.0 github.com/fluxcd/pkg/kustomize v0.5.3 github.com/fluxcd/pkg/oci v0.5.1 github.com/fluxcd/pkg/runtime v0.16.2 @@ -21,7 +21,7 @@ require ( github.com/fluxcd/pkg/ssh v0.5.0 github.com/fluxcd/pkg/untar v0.1.0 github.com/fluxcd/pkg/version v0.1.0 - github.com/fluxcd/source-controller/api v0.26.1 + github.com/fluxcd/source-controller/api v0.28.0 github.com/go-git/go-git/v5 v5.4.2 github.com/gonvenience/bunt v1.3.4 github.com/gonvenience/ytbx v1.4.4 @@ -39,11 +39,11 @@ require ( github.com/theckman/yacspin v0.13.12 golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa golang.org/x/term v0.0.0-20220722155259-a9ba230a4035 - k8s.io/api v0.24.3 - k8s.io/apiextensions-apiserver v0.24.3 - k8s.io/apimachinery v0.24.3 + k8s.io/api v0.25.0 + k8s.io/apiextensions-apiserver v0.25.0 + k8s.io/apimachinery v0.25.0 k8s.io/cli-runtime v0.24.3 - k8s.io/client-go v0.24.3 + k8s.io/client-go v0.25.0 k8s.io/kubectl v0.24.3 sigs.k8s.io/cli-utils v0.32.0 sigs.k8s.io/controller-runtime v0.11.2 @@ -59,8 +59,8 @@ require ( cloud.google.com/go v0.99.0 // indirect github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect github.com/Azure/go-autorest v14.2.0+incompatible // indirect - github.com/Azure/go-autorest/autorest v0.11.24 // indirect - github.com/Azure/go-autorest/autorest/adal v0.9.18 // indirect + github.com/Azure/go-autorest/autorest v0.11.27 // indirect + github.com/Azure/go-autorest/autorest/adal v0.9.20 // indirect github.com/Azure/go-autorest/autorest/date v0.3.0 // indirect github.com/Azure/go-autorest/logger v0.2.1 // indirect github.com/Azure/go-autorest/tracing v0.6.0 // indirect @@ -81,13 +81,13 @@ require ( github.com/docker/docker v20.10.17+incompatible // indirect github.com/docker/docker-credential-helpers v0.6.4 // indirect github.com/drone/envsubst/v2 v2.0.0-20210730161058-179042472c46 // indirect - github.com/emicklei/go-restful v2.15.0+incompatible // indirect + github.com/emicklei/go-restful/v3 v3.8.0 // indirect github.com/emirpasic/gods v1.12.0 // indirect github.com/evanphx/json-patch v4.12.0+incompatible // indirect github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d // indirect github.com/fatih/color v1.13.0 // indirect - github.com/fluxcd/pkg/apis/acl v0.0.3 // indirect - github.com/fluxcd/pkg/apis/kustomize v0.4.2 // indirect + github.com/fluxcd/pkg/apis/acl v0.1.0 // indirect + github.com/fluxcd/pkg/apis/kustomize v0.5.0 // indirect github.com/fsnotify/fsnotify v1.5.1 // indirect github.com/go-errors/errors v1.0.1 // indirect github.com/go-git/gcfg v1.5.0 // indirect @@ -159,10 +159,10 @@ require ( github.com/xanzy/ssh-agent v0.3.0 // indirect github.com/xlab/treeprint v1.1.0 // indirect go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 // indirect - golang.org/x/net v0.0.0-20220708220712-1185a9018129 // indirect + golang.org/x/net v0.0.0-20220722155237-a158d28d115b // indirect golang.org/x/oauth2 v0.0.0-20220722155238-128564f6959c // indirect - golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f // indirect - golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 // indirect + golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 // indirect + golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f // indirect golang.org/x/text v0.3.7 // indirect golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect @@ -172,10 +172,10 @@ require ( gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/component-base v0.24.3 // indirect - k8s.io/klog/v2 v2.60.1 // indirect - k8s.io/kube-openapi v0.0.0-20220413171646-5e7f5fdc6da6 // indirect - k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9 // indirect - sigs.k8s.io/json v0.0.0-20220525155127-227cbc7cc124 // indirect - sigs.k8s.io/structured-merge-diff/v4 v4.2.1 // indirect + k8s.io/component-base v0.25.0 // indirect + k8s.io/klog/v2 v2.70.1 // indirect + k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1 // indirect + k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed // indirect + sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 // indirect + sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect ) diff --git a/go.sum b/go.sum index bbbd6e5f..6199bffc 100644 --- a/go.sum +++ b/go.sum @@ -60,15 +60,17 @@ github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg6 github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs= github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= github.com/Azure/go-autorest/autorest v0.11.18/go.mod h1:dSiJPy22c3u0OtOKDNttNgqpNFY/GeWa7GH/Pz56QRA= -github.com/Azure/go-autorest/autorest v0.11.24 h1:1fIGgHKqVm54KIPT+q8Zmd1QlVsmHqeUGso5qm2BqqE= -github.com/Azure/go-autorest/autorest v0.11.24/go.mod h1:G6kyRlFnTuSbEYkQGawPfsCswgme4iYf6rfSKUDzbCc= +github.com/Azure/go-autorest/autorest v0.11.27 h1:F3R3q42aWytozkV8ihzcgMO4OA4cuqr3bNlsEuF6//A= +github.com/Azure/go-autorest/autorest v0.11.27/go.mod h1:7l8ybrIdUmGqZMTD0sRtAr8NvbHjfofbf8RSP2q7w7U= github.com/Azure/go-autorest/autorest/adal v0.9.13/go.mod h1:W/MM4U6nLxnIskrw4UwWzlHfGjwUS50aOsc/I3yuU8M= -github.com/Azure/go-autorest/autorest/adal v0.9.18 h1:kLnPsRjzZZUF3K5REu/Kc+qMQrvuza2bwSnNdhmzLfQ= github.com/Azure/go-autorest/autorest/adal v0.9.18/go.mod h1:XVVeme+LZwABT8K5Lc3hA4nAe8LDBVle26gTrguhhPQ= +github.com/Azure/go-autorest/autorest/adal v0.9.20 h1:gJ3E98kMpFB1MFqQCvA1yFab8vthOeD4VlFRQULxahg= +github.com/Azure/go-autorest/autorest/adal v0.9.20/go.mod h1:XVVeme+LZwABT8K5Lc3hA4nAe8LDBVle26gTrguhhPQ= github.com/Azure/go-autorest/autorest/date v0.3.0 h1:7gUk1U5M/CQbp9WoqinNzJar+8KY+LPI6wiWrP/myHw= github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74= -github.com/Azure/go-autorest/autorest/mocks v0.4.1 h1:K0laFcLE6VLTOwNgSxaGbUcLPuGXlNkbVvq4cW4nIHk= github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= +github.com/Azure/go-autorest/autorest/mocks v0.4.2 h1:PGN4EDXnuQbojHbU0UWoNvmu9AGVwYHG9/fkDYhtAfw= +github.com/Azure/go-autorest/autorest/mocks v0.4.2/go.mod h1:Vy7OitM9Kei0i1Oj+LvyAWMXJHeKH1MVlzFugfVrmyU= github.com/Azure/go-autorest/logger v0.2.1 h1:IG7i4p/mDa2Ce4TRyAO8IHnVhAVF3RFU+ZtXWSmf4Tg= github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo= @@ -94,7 +96,6 @@ github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugX github.com/Microsoft/go-winio v0.5.2 h1:a9IhgEQBCUEk6QCdml9CiJGhAws+YwffDHEMp1VMrpA= github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= -github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/OpenPeeDeeP/depguard v1.0.1/go.mod h1:xsIw86fROiiwelg+jB2uM9PiKihMMmUx/1V+TNhjQvM= github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= @@ -118,7 +119,6 @@ github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20210826220005-b48c857c3a0e/go.mod h1:F7bn7fEU90QkQ3tnmaTx3LTKLEDqnwWODIYppRQ5hnY= github.com/aokoli/goutils v1.0.1/go.mod h1:SijmP0QR8LtwsmDs8Yii5Z/S4trXFGFC2oO5g9DP+DQ= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= @@ -141,7 +141,6 @@ github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+Ce github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= github.com/bkielbasa/cyclop v1.2.0/go.mod h1:qOI0yy6A7dYC4Zgsa72Ppm9kONl0RoIlPbzot9mhmeI= github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= @@ -156,8 +155,6 @@ github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0 h1:nvj0OLI3YqYXe github.com/butuzov/ireturn v0.1.1/go.mod h1:Wh6Zl3IMtTpaIKbmwzqi6olnM9ptYQxxVacMsOEFPoc= github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/certifi/gocertifi v0.0.0-20191021191039-0944d244cd40/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= -github.com/certifi/gocertifi v0.0.0-20200922220541-2c3bb06c6054/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= @@ -180,20 +177,13 @@ github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnht github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= -github.com/cockroachdb/datadriven v0.0.0-20200714090401-bf6692d28da5/go.mod h1:h6jFvWxBdQXxjopDMZyH2UVceIRfR84bdzbkoKrsWNo= -github.com/cockroachdb/errors v1.2.4/go.mod h1:rQD95gz6FARkaKkQXUksEje/d9a6wBJoCr5oaCLELYA= -github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f/go.mod h1:i/u985jwjWRlyHXQbwatDASoW0RMlZ/3i9yJHE2xLkI= github.com/containerd/stargz-snapshotter/estargz v0.12.0 h1:idtwRTLjk2erqiYhPWy2L844By8NRFYEwYHcXhoIWPM= github.com/containerd/stargz-snapshotter/estargz v0.12.0/go.mod h1:AIQ59TewBFJ4GOPEQXujcrJ/EKxh5xXZegW1rkR1P/M= -github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= -github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190620071333-e64a0ec8b42a/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= @@ -219,7 +209,6 @@ github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/daviddengcn/go-colortext v0.0.0-20160507010035-511bcaf42ccd/go.mod h1:dv4zxwHi5C/8AeI+4gX4dCWOIvNi7I6JCSX0HvlKPgE= github.com/denis-tingajkin/go-header v0.4.2/go.mod h1:eLRHAVXzE5atsKAnNRDB90WHCFFnBUn4RN0nRcs1LJA= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/distribution/distribution/v3 v3.0.0-20220729163034-26163d82560f h1:3NCYdjXycNd/Xn/iICZzmxkiDX1e1cjTHjbMAz+wRVk= github.com/docker/cli v20.10.17+incompatible h1:eO2KS7ZFeov5UJeaDmIs1NFEDRf32PaqRpvoEkKBy5M= github.com/docker/cli v20.10.17+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= @@ -241,8 +230,8 @@ github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153 h1:yUdfgN0XgIJw7fo github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= 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 v2.15.0+incompatible h1:8KpYO/Xl/ZudZs5RNOEhWMBY4hmzlZhhRd9cu+jrZP4= -github.com/emicklei/go-restful v2.15.0+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= +github.com/emicklei/go-restful/v3 v3.8.0 h1:eCZ8ulSerjdAiaNpF7GxXIE7ZCMo1moN1qX+S609eVw= +github.com/emicklei/go-restful/v3 v3.8.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg= github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= @@ -274,22 +263,22 @@ github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSw github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0= github.com/fluxcd/go-git-providers v0.8.0 h1:80UMu7yvRoEVfEIg0eGb9bJ0bSceizNJrEVvwLo+0YI= github.com/fluxcd/go-git-providers v0.8.0/go.mod h1:krF+f3UFciy5QmFaYfaORCVxaEj7u2qD7R/WrfKCLWk= -github.com/fluxcd/helm-controller/api v0.22.2 h1:nh0GZBsUE0gNzm4PmPa4aOoqYlbZbpGt2pcIL9S2184= -github.com/fluxcd/helm-controller/api v0.22.2/go.mod h1:GfD9TFgLyn81VgwZN1yM47/aUdz0SwTSyRAGmC8xZ+c= -github.com/fluxcd/image-automation-controller/api v0.24.1 h1:eTxbpwMM1TbYvFpLeNOn6RHxVzSc7efQpW//AllfbVQ= -github.com/fluxcd/image-automation-controller/api v0.24.1/go.mod h1:SMgfU5bvv8e6HqwJkTHNhWPq/yvInRI8seHN93za0sY= -github.com/fluxcd/image-reflector-controller/api v0.20.0 h1:7Ba/q35MD357rkaSCaQdupKgnwLdQb9CeDVkZrKSTVU= -github.com/fluxcd/image-reflector-controller/api v0.20.0/go.mod h1:CeFHAKU2MvqXyvCmSEyNUBNO5o3EqKQyjbw2D5as96k= -github.com/fluxcd/kustomize-controller/api v0.27.0 h1:mhaw15noK7cGFoMkFUCjBgkpqYrKPJ6JoqlmbpLU6nc= -github.com/fluxcd/kustomize-controller/api v0.27.0/go.mod h1:qNL44xfm+E2ng8/TqheZZ4bXilWtvVtDYjlKCiMbfM0= -github.com/fluxcd/notification-controller/api v0.25.1 h1:6KyBEiX9U9n4+bjKOJ/mjt8QhG6JD5xXSUD9zDPLEzU= -github.com/fluxcd/notification-controller/api v0.25.1/go.mod h1:hqn/1JsYiv8Gg3xjBYkLJQhez3hbYj2v57ATfSo637M= -github.com/fluxcd/pkg/apis/acl v0.0.3 h1:Lw0ZHdpnO4G7Zy9KjrzwwBmDZQuy4qEjaU/RvA6k1lc= -github.com/fluxcd/pkg/apis/acl v0.0.3/go.mod h1:XPts6lRJ9C9fIF9xVWofmQwftvhY25n1ps7W9xw0XLU= -github.com/fluxcd/pkg/apis/kustomize v0.4.2 h1:5mC/t+OndouK7poFaG4soWLqvHqOxJ3HCsbxu8qyt30= -github.com/fluxcd/pkg/apis/kustomize v0.4.2/go.mod h1:y/TpJvnhR08BRt3E7oLpDPvx0/J/2AS8tOiAFJpctu8= -github.com/fluxcd/pkg/apis/meta v0.14.2 h1:/Hf7I/Vz01vv3m7Qx7DtQvrzAL1oVt0MJcLb/I1Y1HE= -github.com/fluxcd/pkg/apis/meta v0.14.2/go.mod h1:ijZ61VG/8T3U17gj0aFL3fdtZL+mulD6V8VrLLUCAgM= +github.com/fluxcd/helm-controller/api v0.23.1 h1:igBI/SZxYErepgxj8f5SrAg93wIxmYgF+Jci6nzV0wY= +github.com/fluxcd/helm-controller/api v0.23.1/go.mod h1:SJDOj+stJIjODvxpXysx/0KqRD1QnrG8PG5TpSN10Dk= +github.com/fluxcd/image-automation-controller/api v0.24.2 h1:jjK5xzaq5nXsHzNWAVt3RpK2xZRKA2QYPWbV+0sIWIs= +github.com/fluxcd/image-automation-controller/api v0.24.2/go.mod h1:xoYF5e5AuheYl7GQC9PZmv9DP6kdJzoVMFt54I/pdqk= +github.com/fluxcd/image-reflector-controller/api v0.20.1 h1:J6vkwMz0O3gzu+se/8IYRwd7nG+syiiTBUhssXcgWkI= +github.com/fluxcd/image-reflector-controller/api v0.20.1/go.mod h1:e9PMJZLetssAP8y4uX/QgQsIXpDXB8e5AkPqkChayLg= +github.com/fluxcd/kustomize-controller/api v0.27.1 h1:swOS46o/cA+e4wusRU5mZmlttwsO0nrlpSDQ3HhX3J4= +github.com/fluxcd/kustomize-controller/api v0.27.1/go.mod h1:4ItJQPqsXXyEosATIWmHmTsc3g5IwJbFjzZYPFB7fMM= +github.com/fluxcd/notification-controller/api v0.25.2 h1:wgc1NYntOXpqUpEqEeeuSTzc2xZBHPLwSpeVAPacyHE= +github.com/fluxcd/notification-controller/api v0.25.2/go.mod h1:tqIePx43IIA7llqdhS/1nCvmYF4LS4YMIu9cm4VxYkQ= +github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= +github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= +github.com/fluxcd/pkg/apis/kustomize v0.5.0 h1:4Rvr4zWQV2KyHkSQzq8IFPo10b0UVAGEgVaXByrGlNw= +github.com/fluxcd/pkg/apis/kustomize v0.5.0/go.mod h1:N3Rtc5wDm/omHH0YHUbILyUpRNmWvZGejb5/8Uyk6II= +github.com/fluxcd/pkg/apis/meta v0.15.0 h1:uDVzbDNdFjp0GSB9qMpcW6r4K7SAjBQlCxQENSkWgkQ= +github.com/fluxcd/pkg/apis/meta v0.15.0/go.mod h1:7NkgFrlswnx2QxP16+8zVNDBf+VhZ7PsDhkcJY6OSgQ= github.com/fluxcd/pkg/kustomize v0.5.3 h1:WpxNOV/Yklp0p7Qv85VwBegq9fABuLR9qSWaAVa3+yc= github.com/fluxcd/pkg/kustomize v0.5.3/go.mod h1:zy1FLxkEDADUykCnrXqq6rVN48t3uMhAb3ao+zv0rFE= github.com/fluxcd/pkg/oci v0.5.1 h1:71Xt94AGUL5x3qBpHMS2KzIH3GnvxK22GIhA3KbBV0o= @@ -306,8 +295,8 @@ github.com/fluxcd/pkg/untar v0.1.0 h1:k97V/xV5hFrAkIkVPuv5AVhyxh1ZzzAKba/lbDfGo6 github.com/fluxcd/pkg/untar v0.1.0/go.mod h1:aGswNyzB1mlz/T/kpOS58mITBMxMKc9tlJBH037A2HY= github.com/fluxcd/pkg/version v0.1.0 h1:v+SmCanmCB5Tj2Cx9TXlj+kNRfPGbAvirkeqsp7ZEAQ= github.com/fluxcd/pkg/version v0.1.0/go.mod h1:V7Z/w8dxLQzv0FHqa5ox5TeyOd2zOd49EeuWFgnwyj4= -github.com/fluxcd/source-controller/api v0.26.1 h1:ID1wx9Hb4iDS9tjif79qC6s6v4pEVaT8ukFVWndxxts= -github.com/fluxcd/source-controller/api v0.26.1/go.mod h1:1W0Xx/GpZ14Z/sOltxjsQKXeCv8zxAqSivbX9e4s+H8= +github.com/fluxcd/source-controller/api v0.28.0 h1:rSOkE1ngGNAI7j++ZZRzNIxFXZMhHgMi4qPdXDxEEtA= +github.com/fluxcd/source-controller/api v0.28.0/go.mod h1:S+SvFUy4PLGLV1XMddHsO3K1NCwIbiBJvljejXcRSAA= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= @@ -319,7 +308,6 @@ github.com/fullstorydev/grpcurl v1.6.0/go.mod h1:ZQ+ayqbKMJNhzLmbpCiurTVlaK2M/3n github.com/fvbommel/sortorder v1.0.1/go.mod h1:uk88iVf1ovNn1iLfgUVU2F9o5eO30ui720w+kxuqRs0= github.com/fzipp/gocyclo v0.3.1/go.mod h1:DJHO6AUmbdqj2ET4Z9iArSuwWgYDRryYt2wASxc7x3E= github.com/getkin/kin-openapi v0.76.0/go.mod h1:660oXbgy5JFMKreazJaQTw7o+X00qeSyhcnluiMv+Xg= -github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gliderlabs/ssh v0.2.2 h1:6zsha5zo/TWhRhwqCD3+EarCAgZ2yN28ipRnGPnwkI0= github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= @@ -395,9 +383,7 @@ github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzw github.com/golang-jwt/jwt/v4 v4.4.1 h1:pC5DB52sCeK48Wlb9oPcdhnjkz1TKt1D/P7WKJ0kUcQ= github.com/golang-jwt/jwt/v4 v4.4.1/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -460,8 +446,6 @@ github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Z github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4= github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= -github.com/google/cel-go v0.10.1/go.mod h1:U7ayypeSkw23szu4GaQTPJGx66c20mx8JklMSxrmI1w= -github.com/google/cel-spec v0.6.0/go.mod h1:Nwjgxy5CbjlPrtCWjeDjUyKMl8w41YBYGjsyDdqk0xA= github.com/google/certificate-transparency-go v1.0.21/go.mod h1:QeJfpSbVSfYc7RgB3gJFj9cbuQMMchQxrWXz8Ruopmg= github.com/google/certificate-transparency-go v1.1.1/go.mod h1:FDKqPvSXawb2ecErVRrD+nfy23RCzyl7eqVCEmlT1Zs= github.com/google/gnostic v0.5.7-v3refs/go.mod h1:73MKFl6jIHelAJNaBGFzt3SPtZULs9dYrGFt8OiIsHQ= @@ -551,12 +535,9 @@ github.com/gostaticanalysis/testutil v0.4.0/go.mod h1:bLIoPefWXrRi/ssLFWX1dx7Rep github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 h1:+ngKgrYPPJrOjhax5N+uePQ0Fh1Z7PheYoUI/0nzkPA= github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= -github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.12.1/go.mod h1:8XEsbTttt/W+VvjtQhLACqCisSPWTxCZ7sBRjU6iH9c= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= @@ -690,7 +671,6 @@ github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69 github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= @@ -800,7 +780,6 @@ github.com/nishanths/predeclared v0.2.1/go.mod h1:HvkGJcA3naj4lOwnFXFDkFxVtSqQMB github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= -github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/olekukonko/tablewriter v0.0.2/go.mod h1:rSAaSIOAGT9odnlyGlUfAJaoc5w2fSBUmeGDbRWPxyQ= @@ -851,9 +830,7 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN github.com/polyfloyd/go-errorlint v0.0.0-20210722154253-910bb7978349/go.mod h1:wi9BfjxjF/bwiZ701TzmfKu6UKC357IOAtNr0Td0Lvw= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= -github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= @@ -864,21 +841,17 @@ github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1: github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= github.com/prometheus/common v0.32.1 h1:hWIdL3N2HoUx3B8j3YN9mWor0qhY/NlEKZEaXxuIRh4= github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/pseudomuto/protoc-gen-doc v1.3.2/go.mod h1:y5+P6n3iGrbKG+9O04V5ld71in3v/bX88wUwgt+U8EA= github.com/pseudomuto/protokit v0.2.0/go.mod h1:2PdH30hxVHsup8KpBTOXTBeMVhJZVio3Q8ViKSAXT0Q= github.com/quasilyte/go-consistent v0.0.0-20190521200055-c6f3937de18c/go.mod h1:5STLWrekHfjyYwxBRVRXNOSewLJ3PWfDJd1VyTS21fI= @@ -929,7 +902,6 @@ github.com/sivchari/tenv v1.4.7/go.mod h1:5nF+bITvkebQVanjU6IuMbvIot/7ReNsUV7I5N github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/soheilhy/cmux v0.1.5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0= github.com/sonatard/noctx v0.0.1/go.mod h1:9D2D/EoULe8Yy2joDHJj7bv3sZoq9AaSb8B4lqBjiZI= github.com/sourcegraph/go-diff v0.6.1/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= @@ -941,7 +913,6 @@ github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkU github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo= github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g= github.com/spf13/cobra v1.5.0 h1:X+jTBEBqF0bHN+9cSMgmfuvv2VHJ9ezmFNf9Y/XstYU= @@ -954,7 +925,6 @@ github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnIn github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= github.com/spf13/viper v1.9.0/go.mod h1:+i6ajR7OX2XaiBkrcZJFK21htRk7eDeLg7+O6bhUPP4= github.com/ssgreg/nlreturn/v2 v2.2.1/go.mod h1:E/iiPB78hV7Szg2YfRgyIrk1AD6JVMTRkkxBiELzh2I= @@ -988,7 +958,6 @@ github.com/tklauser/numcpus v0.3.0/go.mod h1:yFGUr7TUHQRAhyqBcEg0Ge34zDBAsIvJJcy github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20200427203606-3cfed13b9966/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tomarrell/wrapcheck/v2 v2.4.0/go.mod h1:68bQ/eJg55BROaRTbMjC7vuhL2OgfoG8bLp9ZyoBfyY= github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce/go.mod h1:o8v6yHRoik09Xen7gje4m9ERNah1d1PPsVq1VEx9vE4= github.com/tommy-muehle/go-mnd/v2 v2.4.0/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw= @@ -1035,21 +1004,12 @@ github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1 github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43 h1:+lm10QQTNSBd8DVTNGHx7o/IKu9HYDvLMffDhbyLccI= github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50 h1:hlE8//ciYMztlGpl/VA+Zm1AcTPHYkHJPbHqE6WJUXE= github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f h1:ERexzlUfuTvpE74urLSbIQW0Z/6hF9t8U4NsJLaioAY= -go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.4/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= -go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= go.etcd.io/etcd v0.0.0-20200513171258-e048e166ab9c/go.mod h1:xCI7ZzBfRuGgBXyXO6yfWfDmlWd35khcWpUa4L0xI/k= go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= -go.etcd.io/etcd/api/v3 v3.5.1/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= -go.etcd.io/etcd/client/pkg/v3 v3.5.1/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= -go.etcd.io/etcd/client/v3 v3.5.0/go.mod h1:AIKXXVX/DQXtfTEqBryiLTUXwON+GuvO6Z7lLS/oTh0= -go.etcd.io/etcd/client/v3 v3.5.1/go.mod h1:OnjH4M8OnAotwaB2l9bVgZzRFKru7/ZMoS46OtKyd3Q= -go.etcd.io/etcd/pkg/v3 v3.5.0/go.mod h1:UzJGatBQ1lXChBkQF0AuAtkRQMYnHubxAEYIrC3MSsE= -go.etcd.io/etcd/raft/v3 v3.5.0/go.mod h1:UFOHSIvO/nKwd4lhkwabrTD3cqW5yVyYYf/KlD00Szc= -go.etcd.io/etcd/server/v3 v3.5.0/go.mod h1:3Ah5ruV+M+7RZr0+Y/5mNLwC+eQlni+mQmOVdCRJoS4= go.mozilla.org/mozlog v0.0.0-20170222151521-4bb13139d403/go.mod h1:jHoPAGnDrCy6kaI2tAze5Prf0Nr0w/oNkROt2lw3n3o= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= @@ -1059,7 +1019,6 @@ go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opentelemetry.io/contrib v0.20.0/go.mod h1:G/EtFaa6qaN7+LxqfIAT3GiZa7Wv5DTBUzl5H4LY0Kc= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.20.0/go.mod h1:oVGt1LRbBOBq1A5BQLlUg9UaU/54aiHw8cgjV3aWZ/E= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.20.0/go.mod h1:2AboqHi0CiIZU0qwhtUfCYD1GeUzvvIXWNkhDt7ZMG4= go.opentelemetry.io/otel v0.20.0/go.mod h1:Y3ugLH2oa81t5QO+Lty+zXf8zC9L26ax4Nzoxm/dooo= go.opentelemetry.io/otel/exporters/otlp v0.20.0/go.mod h1:YIieizyaN77rtLJra0buKiNBOm9XQfkPEKBeuhoMwAM= @@ -1192,7 +1151,6 @@ golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81R golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= @@ -1204,12 +1162,11 @@ golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20210510120150-4163338589ed/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210825183410-e898025ed96a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220708220712-1185a9018129 h1:vucSRfWwTsoXro7P+3Cjlr6flUMtzCwzlvkxEQtHHB0= -golang.org/x/net v0.0.0-20220708220712-1185a9018129/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b h1:PxfKdU9lEEDYjdIzOtC4qFWgkU2rGHdKlKowJSMN9h0= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= 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= @@ -1241,8 +1198,8 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f h1:Ax0t5p6N38Ga0dThY21weqDEyz2oklo4IvDkpigvkD8= -golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 h1:uVc8UZUe6tr40fFVnUP5Oj+veunVezqYl9z7DYw9xzw= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1296,7 +1253,6 @@ golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1324,7 +1280,6 @@ golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210816074244-15123e1e1f71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210915083310-ed5796bab164/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210917161153-d61c044b1678/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1336,8 +1291,9 @@ golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 h1:0A+M6Uqn+Eje4kHMK80dtF3JCXC4ykBgQG4Fe06QRhQ= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f h1:v4INt8xihDGvnrfjMDVXGxw9wrfxYyCjk0KbXjhR55s= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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= @@ -1358,7 +1314,6 @@ golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20220210224613-90d013bbcef8/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9 h1:ftMN5LMiBFjbzleLqtoBZk7KdJwhuybIU+FckUHgoyQ= golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1551,7 +1506,6 @@ google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201102152239-715cce707fb0/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= @@ -1639,12 +1593,9 @@ gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMy gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.63.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= -gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= @@ -1674,38 +1625,43 @@ honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.2.1/go.mod h1:lPVVZ2BS5TfnjLyizF7o7hv7j9/L+8cZY2hLyjP9cGY= -k8s.io/api v0.24.3 h1:tt55QEmKd6L2k5DP6G/ZzdMQKvG5ro4H4teClqm0sTY= k8s.io/api v0.24.3/go.mod h1:elGR/XSZrS7z7cSZPzVWaycpJuGIw57j9b95/1PdJNI= -k8s.io/apiextensions-apiserver v0.24.3 h1:kyx+Tmro1qEsTUr07ZGQOfvTsF61yn+AxnxytBWq8As= -k8s.io/apiextensions-apiserver v0.24.3/go.mod h1:cL0xkmUefpYM4f6IuOau+6NMFEIh6/7wXe/O4vPVJ8A= -k8s.io/apimachinery v0.24.3 h1:hrFiNSA2cBZqllakVYyH/VyEh4B581bQRmqATJSeQTg= +k8s.io/api v0.25.0 h1:H+Q4ma2U/ww0iGB78ijZx6DRByPz6/733jIuFpX70e0= +k8s.io/api v0.25.0/go.mod h1:ttceV1GyV1i1rnmvzT3BST08N6nGt+dudGrquzVQWPk= +k8s.io/apiextensions-apiserver v0.25.0 h1:CJ9zlyXAbq0FIW8CD7HHyozCMBpDSiH7EdrSTCZcZFY= +k8s.io/apiextensions-apiserver v0.25.0/go.mod h1:3pAjZiN4zw7R8aZC5gR0y3/vCkGlAjCazcg1me8iB/E= k8s.io/apimachinery v0.24.3/go.mod h1:82Bi4sCzVBdpYjyI4jY6aHX+YCUchUIrZrXKedjd2UM= -k8s.io/apiserver v0.24.3/go.mod h1:aXfwtIn4U27B7lYs5f2BKgz6DRbgWy+HJeYReN1jLJ8= +k8s.io/apimachinery v0.25.0 h1:MlP0r6+3XbkUG2itd6vp3oxbtdQLQI94fD5gCS+gnoU= +k8s.io/apimachinery v0.25.0/go.mod h1:qMx9eAk0sZQGsXGu86fab8tZdffHbwUfsvzqKn4mfB0= k8s.io/cli-runtime v0.24.3 h1:O9YvUHrDSCQUPlsqVmaqDrueqjpJ7IO6Yas9B6xGSoo= k8s.io/cli-runtime v0.24.3/go.mod h1:In84wauoMOqa7JDvDSXGbf8lTNlr70fOGpYlYfJtSqA= -k8s.io/client-go v0.24.3 h1:Nl1840+6p4JqkFWEW2LnMKU667BUxw03REfLAVhuKQY= k8s.io/client-go v0.24.3/go.mod h1:AAovolf5Z9bY1wIg2FZ8LPQlEdKHjLI7ZD4rw920BJw= +k8s.io/client-go v0.25.0 h1:CVWIaCETLMBNiTUta3d5nzRbXvY5Hy9Dpl+VvREpu5E= +k8s.io/client-go v0.25.0/go.mod h1:lxykvypVfKilxhTklov0wz1FoaUZ8X4EwbhS6rpRfN8= k8s.io/code-generator v0.24.3/go.mod h1:dpVhs00hTuTdTY6jvVxvTFCk6gSMrtfRydbhZwHI15w= -k8s.io/component-base v0.24.3 h1:u99WjuHYCRJjS1xeLOx72DdRaghuDnuMgueiGMFy1ec= k8s.io/component-base v0.24.3/go.mod h1:bqom2IWN9Lj+vwAkPNOv2TflsP1PeVDIwIN0lRthxYY= +k8s.io/component-base v0.25.0 h1:haVKlLkPCFZhkcqB6WCvpVxftrg6+FK5x1ZuaIDaQ5Y= +k8s.io/component-base v0.25.0/go.mod h1:F2Sumv9CnbBlqrpdf7rKZTmmd2meJq0HizeyY/yAFxk= k8s.io/component-helpers v0.24.3/go.mod h1:/1WNW8TfBOijQ1ED2uCHb4wtXYWDVNMqUll8h36iNVo= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= k8s.io/gengo v0.0.0-20211129171323-c02415ce4185/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= -k8s.io/klog/v2 v2.60.1 h1:VW25q3bZx9uE3vvdL6M8ezOX79vA2Aq1nEWLqNQclHc= k8s.io/klog/v2 v2.60.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/klog/v2 v2.70.1 h1:7aaoSdahviPmR+XkS7FyxlkkXs6tHISSG03RxleQAVQ= +k8s.io/klog/v2 v2.70.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/kube-openapi v0.0.0-20210421082810-95288971da7e/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw= k8s.io/kube-openapi v0.0.0-20220328201542-3ee0da9b0b42/go.mod h1:Z/45zLw8lUo4wdiUkI+v/ImEGAvu3WatcZl3lPMR4Rk= -k8s.io/kube-openapi v0.0.0-20220413171646-5e7f5fdc6da6 h1:nBQrWPlrNIiw0BsX6a6MKr1itkm0ZS0Nl97kNLitFfI= -k8s.io/kube-openapi v0.0.0-20220413171646-5e7f5fdc6da6/go.mod h1:daOouuuwd9JXpv1L7Y34iV3yf6nxzipkKMWWlqlvK9M= +k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1 h1:MQ8BAZPZlWk3S9K4a9NCkIFQtZShWqoha7snGixVgEA= +k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1/go.mod h1:C/N6wCaBHeBHkHUesQOQy2/MZqGgMAFPqGsGQLdbZBU= k8s.io/kubectl v0.24.3 h1:PqY8ho/S/KuE2/hCC3Iee7X+lOtARYo0LQsNzvV/edE= k8s.io/kubectl v0.24.3/go.mod h1:PYLcvw96sC1NLbxZEDbdlOEd6/C76VIWjGmWV5QjSk0= k8s.io/metrics v0.24.3/go.mod h1:p1M0lhMySWfhISkSd3HEj8xIgrVnJTK3PPhFq2rA3To= k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9 h1:HNSDgDCrr/6Ly3WEGKZftiE7IY19Vz2GdbOCyI4qqhc= k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed h1:jAne/RjBTyawwAy0utX5eqigAwz/lQhTmy+Hr/Cpue4= +k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= mvdan.cc/gofumpt v0.1.1/go.mod h1:yXG1r1WqZVKWbVRtBWKWX9+CxGYfA51nSomhM0woR48= mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc= mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4= @@ -1713,14 +1669,13 @@ mvdan.cc/unparam v0.0.0-20210104141923-aac4ce9116a7/go.mod h1:hBpJkZE8H/sb+VRFvw rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.30/go.mod h1:fEO7lRTdivWO2qYVCVG7dEADOMo/MLDCVr8So2g88Uw= sigs.k8s.io/cli-utils v0.32.0 h1:776y8z6gbBFTxfJ78lkHK6tbzK+MZTH6+ycP1gh16aw= sigs.k8s.io/cli-utils v0.32.0/go.mod h1:g/zB9hJ5eUN7zIEBIxrO0CwhXU4YISJ+BkLJzvWwlEs= sigs.k8s.io/controller-runtime v0.11.2 h1:H5GTxQl0Mc9UjRJhORusqfJCIjBO8UtUxGggCwL1rLA= sigs.k8s.io/controller-runtime v0.11.2/go.mod h1:P6QCzrEjLaZGqHsfd+os7JQ+WFZhvB8MRFsn4dWF7O4= sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2/go.mod h1:B+TnT182UBxE84DiCz4CVE26eOSDAeYCpfDnC2kdKMY= -sigs.k8s.io/json v0.0.0-20220525155127-227cbc7cc124 h1:2sgAQQcY0dEW2SsQwTXhQV4vO6+rSslYx8K3XmM5hqQ= -sigs.k8s.io/json v0.0.0-20220525155127-227cbc7cc124/go.mod h1:B+TnT182UBxE84DiCz4CVE26eOSDAeYCpfDnC2kdKMY= +sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 h1:iXTIw73aPyC+oRdyqqvVJuloN1p0AC/kzH07hu3NE+k= +sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= sigs.k8s.io/kustomize/api v0.11.4/go.mod h1:k+8RsqYbgpkIrJ4p9jcdPqe8DprLxFUUO0yNOq8C+xI= sigs.k8s.io/kustomize/api v0.12.1 h1:7YM7gW3kYBwtKvoY216ZzY+8hM+lV53LUayghNRJ0vM= sigs.k8s.io/kustomize/api v0.12.1/go.mod h1:y3JUhimkZkR6sbLNwfJHxvo1TCLwuwm14sCYnkH6S1s= @@ -1730,8 +1685,9 @@ sigs.k8s.io/kustomize/kyaml v0.13.6/go.mod h1:yHP031rn1QX1lr/Xd934Ri/xdVNG8BE2EC sigs.k8s.io/kustomize/kyaml v0.13.9 h1:Qz53EAaFFANyNgyOEJbT/yoIHygK40/ZcvU3rgry2Tk= sigs.k8s.io/kustomize/kyaml v0.13.9/go.mod h1:QsRbD0/KcU+wdk0/L0fIp2KLnohkVzs6fQ85/nOXac4= sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= -sigs.k8s.io/structured-merge-diff/v4 v4.2.1 h1:bKCqE9GvQ5tiVHn5rfn1r+yao3aLQEaLzkkmAkf+A6Y= sigs.k8s.io/structured-merge-diff/v4 v4.2.1/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= +sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= +sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= diff --git a/manifests/bases/helm-controller/kustomization.yaml b/manifests/bases/helm-controller/kustomization.yaml index 5099e3c3..c943769e 100644 --- a/manifests/bases/helm-controller/kustomization.yaml +++ b/manifests/bases/helm-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/helm-controller/releases/download/v0.22.2/helm-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.22.2/helm-controller.deployment.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.23.1/helm-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.23.1/helm-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/image-automation-controller/kustomization.yaml b/manifests/bases/image-automation-controller/kustomization.yaml index 990b8d0c..50844016 100644 --- a/manifests/bases/image-automation-controller/kustomization.yaml +++ b/manifests/bases/image-automation-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.24.1/image-automation-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.24.1/image-automation-controller.deployment.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.24.2/image-automation-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.24.2/image-automation-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/image-reflector-controller/kustomization.yaml b/manifests/bases/image-reflector-controller/kustomization.yaml index 28570250..15bff0e4 100644 --- a/manifests/bases/image-reflector-controller/kustomization.yaml +++ b/manifests/bases/image-reflector-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.20.0/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.20.0/image-reflector-controller.deployment.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.20.1/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.20.1/image-reflector-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/kustomize-controller/kustomization.yaml b/manifests/bases/kustomize-controller/kustomization.yaml index b6a45593..bcc37a9f 100644 --- a/manifests/bases/kustomize-controller/kustomization.yaml +++ b/manifests/bases/kustomize-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.27.0/kustomize-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.27.0/kustomize-controller.deployment.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.27.1/kustomize-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.27.1/kustomize-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/notification-controller/kustomization.yaml b/manifests/bases/notification-controller/kustomization.yaml index dfcb3361..e868a070 100644 --- a/manifests/bases/notification-controller/kustomization.yaml +++ b/manifests/bases/notification-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/notification-controller/releases/download/v0.25.1/notification-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v0.25.1/notification-controller.deployment.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.25.2/notification-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.25.2/notification-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index 8f97dbc9..7691804e 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.26.1/source-controller.crds.yaml -- https://github.com/fluxcd/source-controller/releases/download/v0.26.1/source-controller.deployment.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.28.0/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.28.0/source-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index 54eef04a..1ed9ca91 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -1,9 +1,9 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.26.1/source-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.27.0/kustomize-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.22.2/helm-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v0.25.1/notification-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.20.0/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.24.1/image-automation-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.28.0/source-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.27.1/kustomize-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.23.1/helm-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.25.2/notification-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.20.1/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.24.2/image-automation-controller.crds.yaml From a5a9158a24cee0d4cb4734dd662f8f573c6ef9db Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Mon, 29 Aug 2022 14:09:42 +0300 Subject: [PATCH 224/818] Add provider to Helm OCI tests Signed-off-by: Stefan Prodan --- cmd/flux/testdata/export/helm-repo.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/cmd/flux/testdata/export/helm-repo.yaml b/cmd/flux/testdata/export/helm-repo.yaml index 6467d6ce..eb3d5634 100644 --- a/cmd/flux/testdata/export/helm-repo.yaml +++ b/cmd/flux/testdata/export/helm-repo.yaml @@ -6,6 +6,7 @@ metadata: namespace: {{ .fluxns }} spec: interval: 5m0s + provider: generic timeout: 1m0s url: https://stefanprodan.github.io/podinfo From b4fef0a6b97d8894d163881049169c7b4e72b6cd Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Mon, 29 Aug 2022 15:03:36 +0300 Subject: [PATCH 225/818] Update Kubernetes dependencies to v1.25.0 - update `k8s.io` packages to match the Kubernetes v1.25.0 release - update `kubectl` to v1.25.0 in the flux-cli container image - update `go.mod` to Go 1.18 Signed-off-by: Stefan Prodan --- Dockerfile | 2 +- Makefile | 4 +- go.mod | 42 ++++++------ go.sum | 184 ++++++++++++++--------------------------------------- 4 files changed, 71 insertions(+), 161 deletions(-) diff --git a/Dockerfile b/Dockerfile index a30c6170..da86de9b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ FROM alpine:3.16 as builder RUN apk add --no-cache ca-certificates curl ARG ARCH=linux/amd64 -ARG KUBECTL_VER=1.24.3 +ARG KUBECTL_VER=1.25.0 RUN curl -sL https://storage.googleapis.com/kubernetes-release/release/v${KUBECTL_VER}/bin/${ARCH}/kubectl \ -o /usr/local/bin/kubectl && chmod +x /usr/local/bin/kubectl && \ diff --git a/Makefile b/Makefile index 8daf0426..9699bca6 100644 --- a/Makefile +++ b/Makefile @@ -17,8 +17,8 @@ rwildcard=$(foreach d,$(wildcard $(addsuffix *,$(1))),$(call rwildcard,$(d)/,$(2 all: test build tidy: - go mod tidy -compat=1.17 - cd tests/azure && go mod tidy -compat=1.17 + go mod tidy -compat=1.18 + cd tests/azure && go mod tidy -compat=1.18 fmt: go fmt ./... diff --git a/go.mod b/go.mod index 32f1a08a..af84032c 100644 --- a/go.mod +++ b/go.mod @@ -1,10 +1,10 @@ module github.com/fluxcd/flux2 -go 1.17 +go 1.18 require ( github.com/Masterminds/semver/v3 v3.1.1 - github.com/ProtonMail/go-crypto v0.0.0-20220812175011-7fcef0dbe794 + github.com/ProtonMail/go-crypto v0.0.0-20220824120805-4b6e5c587895 github.com/cyphar/filepath-securejoin v0.2.3 github.com/fluxcd/go-git-providers v0.8.0 github.com/fluxcd/helm-controller/api v0.23.1 @@ -13,14 +13,14 @@ require ( github.com/fluxcd/kustomize-controller/api v0.27.1 github.com/fluxcd/notification-controller/api v0.25.2 github.com/fluxcd/pkg/apis/meta v0.15.0 - github.com/fluxcd/pkg/kustomize v0.5.3 - github.com/fluxcd/pkg/oci v0.5.1 - github.com/fluxcd/pkg/runtime v0.16.2 - github.com/fluxcd/pkg/sourceignore v0.1.0 - github.com/fluxcd/pkg/ssa v0.17.0 - github.com/fluxcd/pkg/ssh v0.5.0 - github.com/fluxcd/pkg/untar v0.1.0 - github.com/fluxcd/pkg/version v0.1.0 + github.com/fluxcd/pkg/kustomize v0.6.0 + github.com/fluxcd/pkg/oci v0.7.0 + github.com/fluxcd/pkg/runtime v0.17.0 + github.com/fluxcd/pkg/sourceignore v0.2.0 + github.com/fluxcd/pkg/ssa v0.18.0 + github.com/fluxcd/pkg/ssh v0.6.0 + github.com/fluxcd/pkg/untar v0.2.0 + github.com/fluxcd/pkg/version v0.2.0 github.com/fluxcd/source-controller/api v0.28.0 github.com/go-git/go-git/v5 v5.4.2 github.com/gonvenience/bunt v1.3.4 @@ -33,19 +33,19 @@ require ( github.com/manifoldco/promptui v0.9.0 github.com/mattn/go-shellwords v1.0.12 github.com/olekukonko/tablewriter v0.0.5 - github.com/onsi/gomega v1.20.0 + github.com/onsi/gomega v1.20.1 github.com/spf13/cobra v1.5.0 github.com/spf13/pflag v1.0.5 github.com/theckman/yacspin v0.13.12 - golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa + golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d golang.org/x/term v0.0.0-20220722155259-a9ba230a4035 k8s.io/api v0.25.0 k8s.io/apiextensions-apiserver v0.25.0 k8s.io/apimachinery v0.25.0 - k8s.io/cli-runtime v0.24.3 + k8s.io/cli-runtime v0.25.0 k8s.io/client-go v0.25.0 - k8s.io/kubectl v0.24.3 - sigs.k8s.io/cli-utils v0.32.0 + k8s.io/kubectl v0.25.0 + sigs.k8s.io/cli-utils v0.33.0 sigs.k8s.io/controller-runtime v0.11.2 sigs.k8s.io/kustomize/api v0.12.1 sigs.k8s.io/kustomize/kyaml v0.13.9 @@ -65,12 +65,12 @@ require ( github.com/Azure/go-autorest/logger v0.2.1 // indirect github.com/Azure/go-autorest/tracing v0.6.0 // indirect github.com/BurntSushi/toml v1.0.0 // indirect - github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd // indirect + github.com/MakeNowJust/heredoc v1.0.0 // indirect github.com/Microsoft/go-winio v0.5.2 // indirect github.com/acomagu/bufpipe v1.0.3 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect - github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5 // indirect + github.com/chai2010/gettext-go v1.0.2 // indirect github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e // indirect github.com/cloudflare/circl v1.1.0 // indirect github.com/containerd/stargz-snapshotter/estargz v0.12.0 // indirect @@ -143,10 +143,10 @@ require ( github.com/opencontainers/image-spec v1.0.3-0.20220114050600-8b9d41f48198 // indirect github.com/peterbourgon/diskv v2.0.1+incompatible // indirect github.com/pkg/errors v0.9.1 // indirect - github.com/prometheus/client_golang v1.12.1 // indirect + github.com/prometheus/client_golang v1.13.0 // indirect github.com/prometheus/client_model v0.2.0 // indirect - github.com/prometheus/common v0.32.1 // indirect - github.com/prometheus/procfs v0.7.3 // indirect + github.com/prometheus/common v0.37.0 // indirect + github.com/prometheus/procfs v0.8.0 // indirect github.com/rivo/uniseg v0.2.0 // indirect github.com/russross/blackfriday v1.6.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect @@ -167,7 +167,7 @@ require ( golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/protobuf v1.28.0 // indirect + google.golang.org/protobuf v1.28.1 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/go.sum b/go.sum index 6199bffc..b44d92d0 100644 --- a/go.sum +++ b/go.sum @@ -59,10 +59,8 @@ github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOEl github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs= github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= -github.com/Azure/go-autorest/autorest v0.11.18/go.mod h1:dSiJPy22c3u0OtOKDNttNgqpNFY/GeWa7GH/Pz56QRA= github.com/Azure/go-autorest/autorest v0.11.27 h1:F3R3q42aWytozkV8ihzcgMO4OA4cuqr3bNlsEuF6//A= github.com/Azure/go-autorest/autorest v0.11.27/go.mod h1:7l8ybrIdUmGqZMTD0sRtAr8NvbHjfofbf8RSP2q7w7U= -github.com/Azure/go-autorest/autorest/adal v0.9.13/go.mod h1:W/MM4U6nLxnIskrw4UwWzlHfGjwUS50aOsc/I3yuU8M= github.com/Azure/go-autorest/autorest/adal v0.9.18/go.mod h1:XVVeme+LZwABT8K5Lc3hA4nAe8LDBVle26gTrguhhPQ= github.com/Azure/go-autorest/autorest/adal v0.9.20 h1:gJ3E98kMpFB1MFqQCvA1yFab8vthOeD4VlFRQULxahg= github.com/Azure/go-autorest/autorest/adal v0.9.20/go.mod h1:XVVeme+LZwABT8K5Lc3hA4nAe8LDBVle26gTrguhhPQ= @@ -81,12 +79,11 @@ github.com/BurntSushi/toml v1.0.0 h1:dtDWrepsVPfW9H/4y7dDgFc2MBUSeJhlaDtK13CxFlU github.com/BurntSushi/toml v1.0.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= -github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd h1:sjQovDkwrZp8u+gxLtPgKGjk5hCxuy2hrRejBTA9xFU= -github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd/go.mod h1:64YHyfSL2R96J44Nlwm39UHepQbyR5q10x7iYa1ks2E= +github.com/MakeNowJust/heredoc v1.0.0 h1:cXCdzVdstXyiTqTvfqk9SDHpKNjxuom+DOlyEeQ4pzQ= +github.com/MakeNowJust/heredoc v1.0.0/go.mod h1:mG5amYoWBHf8vpLOuehzbGGw0EHxpZZ6lCpQ4fNJ8LE= github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= -github.com/Masterminds/semver/v3 v3.1.0/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030IGemrRc= github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= github.com/Masterminds/sprig v2.15.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= @@ -95,14 +92,11 @@ github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jB github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= github.com/Microsoft/go-winio v0.5.2 h1:a9IhgEQBCUEk6QCdml9CiJGhAws+YwffDHEMp1VMrpA= github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= -github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/OpenPeeDeeP/depguard v1.0.1/go.mod h1:xsIw86fROiiwelg+jB2uM9PiKihMMmUx/1V+TNhjQvM= github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= -github.com/ProtonMail/go-crypto v0.0.0-20220812175011-7fcef0dbe794 h1:efPD6snIrIBAfmZhcm7GQ72VHlzsQ/3OrghnnGEpJBM= -github.com/ProtonMail/go-crypto v0.0.0-20220812175011-7fcef0dbe794/go.mod h1:UBYPn8k0D56RtnR8RFQMjmh4KrZzWJ5o7Z9SYjossQ8= -github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/ProtonMail/go-crypto v0.0.0-20220824120805-4b6e5c587895 h1:NsReiLpErIPzRrnogAXYwSoU7txA977LjDGrbkewJbg= +github.com/ProtonMail/go-crypto v0.0.0-20220824120805-4b6e5c587895/go.mod h1:UBYPn8k0D56RtnR8RFQMjmh4KrZzWJ5o7Z9SYjossQ8= github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d h1:UrqY+r/OJnIp5u0s1SbQ8dVfLCZJsnvazdBP5hS4iRs= github.com/StackExchange/wmi v1.2.1/go.mod h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8= github.com/acomagu/bufpipe v1.0.3 h1:fxAGrHZTgQ9w5QqVItgzwj235/uYZYgbXitB+dLupOk= @@ -127,15 +121,12 @@ github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= -github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= github.com/ashanbrown/forbidigo v1.2.0/go.mod h1:vVW7PEdqEFqapJe95xHkTfB1+XvZXBFg8t0sG2FIxmI= github.com/ashanbrown/makezero v0.0.0-20210520155254-b6261585ddde/go.mod h1:oG9Dnez7/ESBqc4EdrdNlryeo7d0KcW1ftXHm7nU/UU= github.com/aws/aws-sdk-go v1.23.20/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.25.37/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.36.30/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= -github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= -github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -143,7 +134,6 @@ github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6r github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= github.com/bkielbasa/cyclop v1.2.0/go.mod h1:qOI0yy6A7dYC4Zgsa72Ppm9kONl0RoIlPbzot9mhmeI= -github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= github.com/blizzy78/varnamelen v0.3.0/go.mod h1:hbwRdBvoBqxk34XyQ6HA0UH3G0/1TKuv5AC4eaBT0Ec= github.com/bombsimon/wsl/v3 v3.3.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc= github.com/breml/bidichk v0.1.1/go.mod h1:zbfeitpevDUGI7V91Uzzuwrn4Vls8MoBMrwtt78jmso= @@ -159,8 +149,8 @@ github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghf github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5 h1:7aWHqerlJ41y6FOsEUvknqgXnGmJyJSbjhAWq5pO4F8= -github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5/go.mod h1:/iP1qXHoty45bqomnu2LM+VVyAEdWN+vtSHGlQgyxbw= +github.com/chai2010/gettext-go v1.0.2 h1:1Lwwip6Q2QGsAdl/ZKPCwTe9fe0CjlUbqj5bFNSjIRk= +github.com/chai2010/gettext-go v1.0.2/go.mod h1:y+wnP2cHYaVj19NZhYKAwEMH2CI1gNHeQQ+5AjwawxA= github.com/charithe/durationcheck v0.0.9/go.mod h1:SSbRIBVfMjCi/kEB6K65XEA83D6prSM8ap1UCpNKtgg= github.com/chavacava/garif v0.0.0-20210405164556-e8a0a408d6af/go.mod h1:Qjyv4H3//PWVzTeCezG2b9IRn6myJxJSr4TD/xo6ojU= github.com/chzyer/logex v1.1.10 h1:Swpa1K6QvQznwJRcfTfQJmTE72DqScAa40E+fbHEXEE= @@ -191,7 +181,6 @@ github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfc github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= @@ -206,10 +195,9 @@ github.com/davecgh/go-spew v0.0.0-20161028175848-04cdfd42973b/go.mod h1:J7Y8YcW2 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/daviddengcn/go-colortext v0.0.0-20160507010035-511bcaf42ccd/go.mod h1:dv4zxwHi5C/8AeI+4gX4dCWOIvNi7I6JCSX0HvlKPgE= github.com/denis-tingajkin/go-header v0.4.2/go.mod h1:eLRHAVXzE5atsKAnNRDB90WHCFFnBUn4RN0nRcs1LJA= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/distribution/distribution/v3 v3.0.0-20220729163034-26163d82560f h1:3NCYdjXycNd/Xn/iICZzmxkiDX1e1cjTHjbMAz+wRVk= +github.com/distribution/distribution/v3 v3.0.0-20220822034424-3413bf8e14fd h1:jtncyJ6leoRxSuB7y1EkkES0nKuG0kM7arfABcZW9r0= github.com/docker/cli v20.10.17+incompatible h1:eO2KS7ZFeov5UJeaDmIs1NFEDRf32PaqRpvoEkKBy5M= github.com/docker/cli v20.10.17+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68= @@ -227,9 +215,6 @@ github.com/drone/envsubst/v2 v2.0.0-20210730161058-179042472c46/go.mod h1:esf2rs github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153 h1:yUdfgN0XgIJw7foRItutHYUIhlcKzcSf5vDpdhQAKTc= -github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= -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.8.0 h1:eCZ8ulSerjdAiaNpF7GxXIE7ZCMo1moN1qX+S609eVw= github.com/emicklei/go-restful/v3 v3.8.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg= @@ -246,12 +231,10 @@ github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7 github.com/esimonov/ifshort v1.0.3/go.mod h1:yZqNJUrNn20K8Q9n2CrjTKYyVEmX209Hgu+M1LBpeZE= github.com/ettle/strcase v0.1.1/go.mod h1:hzDLsPC7/lwKyBOywSHEP89nt2pDgdy+No1NBA9o9VY= github.com/evanphx/json-patch v0.5.2/go.mod h1:ZWS5hhDbVDyob71nXKNL0+PWn6ToqBHMikGIFbs31qQ= -github.com/evanphx/json-patch v4.11.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH5pOlLGNtQ5lPWQu84= github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d h1:105gxyaGwCFad8crR9dcMQWvV9Hvulu6hwUh4tWPJnM= github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d/go.mod h1:ZZMPRZwes7CROmyNKgQzC3XPs6L/G2EJLHddWejkmf4= -github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= @@ -259,7 +242,6 @@ github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= github.com/felixge/httpsnoop v1.0.1 h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8SPQ= -github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0= github.com/fluxcd/go-git-providers v0.8.0 h1:80UMu7yvRoEVfEIg0eGb9bJ0bSceizNJrEVvwLo+0YI= github.com/fluxcd/go-git-providers v0.8.0/go.mod h1:krF+f3UFciy5QmFaYfaORCVxaEj7u2qD7R/WrfKCLWk= @@ -279,35 +261,31 @@ github.com/fluxcd/pkg/apis/kustomize v0.5.0 h1:4Rvr4zWQV2KyHkSQzq8IFPo10b0UVAGEg github.com/fluxcd/pkg/apis/kustomize v0.5.0/go.mod h1:N3Rtc5wDm/omHH0YHUbILyUpRNmWvZGejb5/8Uyk6II= github.com/fluxcd/pkg/apis/meta v0.15.0 h1:uDVzbDNdFjp0GSB9qMpcW6r4K7SAjBQlCxQENSkWgkQ= github.com/fluxcd/pkg/apis/meta v0.15.0/go.mod h1:7NkgFrlswnx2QxP16+8zVNDBf+VhZ7PsDhkcJY6OSgQ= -github.com/fluxcd/pkg/kustomize v0.5.3 h1:WpxNOV/Yklp0p7Qv85VwBegq9fABuLR9qSWaAVa3+yc= -github.com/fluxcd/pkg/kustomize v0.5.3/go.mod h1:zy1FLxkEDADUykCnrXqq6rVN48t3uMhAb3ao+zv0rFE= -github.com/fluxcd/pkg/oci v0.5.1 h1:71Xt94AGUL5x3qBpHMS2KzIH3GnvxK22GIhA3KbBV0o= -github.com/fluxcd/pkg/oci v0.5.1/go.mod h1:qEzBvOJvWKrIKIhCKw1Nlbgod9ClD8C6A7F2cylXpsA= -github.com/fluxcd/pkg/runtime v0.16.2 h1:CexfMmJK+r12sHTvKWyAax0pcPomjd6VnaHXcxjUrRY= -github.com/fluxcd/pkg/runtime v0.16.2/go.mod h1:OHSKsrO+T+Ym8WZRS2oidrnauWRARuE2nfm8ewevm7M= -github.com/fluxcd/pkg/sourceignore v0.1.0 h1:v36Rqp6FDB7Ntjy7NakdwscOfxFPk14peKa+VMBNugo= -github.com/fluxcd/pkg/sourceignore v0.1.0/go.mod h1:m9/q+YLMNSWjXns1n/5q3ucwzSSddti+D6ExbNaCo6s= -github.com/fluxcd/pkg/ssa v0.17.0 h1:iO4EQ+/xIbd79VKrh+8fvsAvq3RlmgAdWtnzOAUxD5s= -github.com/fluxcd/pkg/ssa v0.17.0/go.mod h1:UZkF5CwbDuvWPXnISoaXWlc0JPbHh8BKfa4ExeTtWgY= -github.com/fluxcd/pkg/ssh v0.5.0 h1:jE9F2XvUXC2mgseeXMATvO014fLqdB30/VzlPLKsk20= -github.com/fluxcd/pkg/ssh v0.5.0/go.mod h1:KGgOUOy1uI6RC6+qxIBLvP1AeOOs/nLB25Ca6TZMIXE= -github.com/fluxcd/pkg/untar v0.1.0 h1:k97V/xV5hFrAkIkVPuv5AVhyxh1ZzzAKba/lbDfGo6o= -github.com/fluxcd/pkg/untar v0.1.0/go.mod h1:aGswNyzB1mlz/T/kpOS58mITBMxMKc9tlJBH037A2HY= -github.com/fluxcd/pkg/version v0.1.0 h1:v+SmCanmCB5Tj2Cx9TXlj+kNRfPGbAvirkeqsp7ZEAQ= -github.com/fluxcd/pkg/version v0.1.0/go.mod h1:V7Z/w8dxLQzv0FHqa5ox5TeyOd2zOd49EeuWFgnwyj4= +github.com/fluxcd/pkg/kustomize v0.6.0 h1:v/HK2jvIBeCErPiO0yWVLffRI4iLNKWh4oTd0QuVuAE= +github.com/fluxcd/pkg/kustomize v0.6.0/go.mod h1:4ex1cYIHxyyHtxbZuVpM/Df+e4exI4sb0phmjAzH+7s= +github.com/fluxcd/pkg/oci v0.7.0 h1:7jh31RCF2boQAH2DbBklxX+Qk+Ur7GnAyzaw0o5h0is= +github.com/fluxcd/pkg/oci v0.7.0/go.mod h1:zyyQQJCPByRBNL0K4XfGecHqQfSqAk7LyxgEWLPngc8= +github.com/fluxcd/pkg/runtime v0.17.0 h1:izKzDDWtS8QTQKV391DxqQBDb5eS0jDwWgzjE3KXjv0= +github.com/fluxcd/pkg/runtime v0.17.0/go.mod h1:jphxwbAf1SJRapl62MJ1jMExJottdgeu++YWq0yoHrU= +github.com/fluxcd/pkg/sourceignore v0.2.0 h1:ooNbIkfxqNB+KKiY4AU+/DxwzjIKIOWBRK1As5QFlug= +github.com/fluxcd/pkg/sourceignore v0.2.0/go.mod h1:m9/q+YLMNSWjXns1n/5q3ucwzSSddti+D6ExbNaCo6s= +github.com/fluxcd/pkg/ssa v0.18.0 h1:0je85+fWjW5gWI5RoVQktgkNUShFRANWyG2eouUQKps= +github.com/fluxcd/pkg/ssa v0.18.0/go.mod h1:DNI+yoJ2R50Ap97TuHtLUudfGlpRd7sTAaLLOrqyyzU= +github.com/fluxcd/pkg/ssh v0.6.0 h1:yRJ866obXCo0JseJCqlGKtF8cumioPcwIC6kMwf8Spg= +github.com/fluxcd/pkg/ssh v0.6.0/go.mod h1:Puf+hWNzFsqdHtjDpsI3PTTvitZu41ObuPFblOdzrrI= +github.com/fluxcd/pkg/untar v0.2.0 h1:sJXU+FbJcNUb2ffLJNjeR3hwt3X2loVpOMlCUjyFw6E= +github.com/fluxcd/pkg/untar v0.2.0/go.mod h1:33AyoWaPpjX/xXpczcfhQh2AkB63TFwiR2YwROtv23E= +github.com/fluxcd/pkg/version v0.2.0 h1:jG22c59Bsv6vL51N7Bqn8tjHArYOXrjbIkGArlIrv5w= +github.com/fluxcd/pkg/version v0.2.0/go.mod h1:umN1VAOV0sB1JDVwb8eXZzuuqIAEku+y+vcCVBBUIf0= github.com/fluxcd/source-controller/api v0.28.0 h1:rSOkE1ngGNAI7j++ZZRzNIxFXZMhHgMi4qPdXDxEEtA= github.com/fluxcd/source-controller/api v0.28.0/go.mod h1:S+SvFUy4PLGLV1XMddHsO3K1NCwIbiBJvljejXcRSAA= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= -github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= -github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpgI= github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= github.com/fullstorydev/grpcurl v1.6.0/go.mod h1:ZQ+ayqbKMJNhzLmbpCiurTVlaK2M/3nqZCxaQ2Ze/sM= -github.com/fvbommel/sortorder v1.0.1/go.mod h1:uk88iVf1ovNn1iLfgUVU2F9o5eO30ui720w+kxuqRs0= github.com/fzipp/gocyclo v0.3.1/go.mod h1:DJHO6AUmbdqj2ET4Z9iArSuwWgYDRryYt2wASxc7x3E= -github.com/getkin/kin-openapi v0.76.0/go.mod h1:660oXbgy5JFMKreazJaQTw7o+X00qeSyhcnluiMv+Xg= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gliderlabs/ssh v0.2.2 h1:6zsha5zo/TWhRhwqCD3+EarCAgZ2yN28ipRnGPnwkI0= github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= @@ -329,27 +307,24 @@ github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2 github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= +github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= +github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= -github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/zapr v1.2.0/go.mod h1:Qa4Bsj2Vb+FAVeAKsLD8RLQ+YRJB8YDmOAKxaBQf7Ro= github.com/go-logr/zapr v1.2.3 h1:a9vnzlIBPQBBkeaR9IuMUfmVOrQlkoC4YfPoFkX3T7A= github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= -github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg= github.com/go-openapi/jsonreference v0.20.0 h1:MYlu0sBgChmCfJxxUKZ8g1cPWFOB37YSZqewK7OKeyA= github.com/go-openapi/jsonreference v0.20.0/go.mod h1:Ag74Ico3lPc+zR+qjn4XBUmXymS4zJbYVCZmcgkasdo= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= github.com/go-openapi/swag v0.21.1 h1:wm0rhTb5z7qpJRHBdPOMuY4QjVUMbF6/kwoYeRAOrKU= github.com/go-openapi/swag v0.21.1/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= github.com/go-redis/redis v6.15.8+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= @@ -428,7 +403,6 @@ github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod h1:tvlJhZ github.com/golangci/misspell v0.3.5/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA= github.com/golangci/revgrep v0.0.0-20210930125155-c22e5001d4f2/go.mod h1:LK+zW4MpyytAWQRz0M4xnzEk50lSvqDQKfx304apFkY= github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ= -github.com/golangplus/testing v0.0.0-20180327235837-af21d9c3145e/go.mod h1:0AA//k/eakGydO4jKRoRL2j92ZKSzTgj9tclaCrvXHk= github.com/gomodule/redigo v1.8.2 h1:H5XSIre1MB5NbPYFp+i1NBbb5qN1W8Y8YAQoAYbkm8k= github.com/gonvenience/bunt v1.3.4 h1:Row599Ohja2BPooaqd1tHYdTAKu6SWq7W/UeakTXddM= github.com/gonvenience/bunt v1.3.4/go.mod h1:j8eqHLBo8eWCCYuc34oFdlgyxL1rZ4ywYz4BZa4b09w= @@ -448,7 +422,6 @@ github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4= github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= github.com/google/certificate-transparency-go v1.0.21/go.mod h1:QeJfpSbVSfYc7RgB3gJFj9cbuQMMchQxrWXz8Ruopmg= github.com/google/certificate-transparency-go v1.1.1/go.mod h1:FDKqPvSXawb2ecErVRrD+nfy23RCzyl7eqVCEmlT1Zs= -github.com/google/gnostic v0.5.7-v3refs/go.mod h1:73MKFl6jIHelAJNaBGFzt3SPtZULs9dYrGFt8OiIsHQ= github.com/google/gnostic v0.6.9 h1:ZK/5VhkoX835RikCHpSUJV9a+S3e1zLh59YnyWeBW+0= github.com/google/gnostic v0.6.9/go.mod h1:Nm8234We1lq6iB9OmlgNv3nH91XLLVZHCDayfA3xq+E= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -472,7 +445,6 @@ github.com/google/go-github/v45 v45.2.0/go.mod h1:FObaZJEDSTa/WGCzZ2Z3eoCDXWJKMe github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= @@ -508,7 +480,6 @@ github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+ github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= -github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2cUuW7uA/OeU= github.com/gookit/color v1.4.2/go.mod h1:fqRyamkC1W8uxl+lxCQxOT09l/vYfZ+QeiX3rKQHCoQ= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gordonklaus/ineffassign v0.0.0-20200309095847-7953dde2c7bf/go.mod h1:cuNKsD1zp2v6XfE/orVX2QE1LC+i254ceGcVeDT3pTU= @@ -532,7 +503,6 @@ github.com/gostaticanalysis/forcetypeassert v0.0.0-20200621232751-01d4955beaa5/g github.com/gostaticanalysis/nilerr v0.1.1/go.mod h1:wZYb6YI5YAxxq0i1+VJbY0s2YONW0HU0GPE3+5PWN4A= github.com/gostaticanalysis/testutil v0.3.1-0.20210208050101-bfb5c8eec0e4/go.mod h1:D+FIZ+7OahH3ePw/izIEeH5I06eKs1IKI4Xr64/Am3M= github.com/gostaticanalysis/testutil v0.4.0/go.mod h1:bLIoPefWXrRi/ssLFWX1dx7Repi5x3CuviD3dgAZaBU= -github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 h1:+ngKgrYPPJrOjhax5N+uePQ0Fh1Z7PheYoUI/0nzkPA= github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= @@ -588,7 +558,6 @@ github.com/huandu/xstrings v1.2.0/go.mod h1:DvyZB1rfVYsBIigL8HwpZgxHwXozlTgGqn63 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.4/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= @@ -608,7 +577,6 @@ github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfC github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/jonboulle/clockwork v0.2.0/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= -github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/josharian/txtarfs v0.0.0-20210218200122-0702f000015a/go.mod h1:izVPOvVRsHiKkeGCT6tYBNWyDVuzj9wAaBb5R9qamfw= @@ -665,7 +633,6 @@ github.com/lib/pq v1.9.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lib/pq v1.10.3/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de h1:9TO3cAIGXtEhnIaL+V+BEER86oLrvS+kWobKpbJuye0= github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9B/r2mtpb6U+EI2rYA5OAXxsYw6wTamcNW+zcE= -github.com/lithammer/dedent v1.1.0/go.mod h1:jrXYCQtgg0nJiN+StA2KgR7w6CiQNv9Fd/Z9BP0jIOc= github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= @@ -674,7 +641,6 @@ github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czP github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= @@ -706,7 +672,6 @@ github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27k github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.6/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU= github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= @@ -763,14 +728,12 @@ github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00/go.mod github.com/moricho/tparallel v0.2.1/go.mod h1:fXEIZxG2vdfl0ZF8b42f5a78EhjjD5mX8qUplsoSU4k= github.com/mozilla/scribe v0.0.0-20180711195314-fb71baf557c1/go.mod h1:FIczTrinKo8VaLxe6PWTPEXRXDIHz2QAwiaBaP5/4a8= github.com/mozilla/tls-observatory v0.0.0-20210609171429-7bc42856d2e5/go.mod h1:FUqVoUPHSEdDR0MnFM3Dh8AU0pZHLXUD127SAJGER/s= -github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-proto-validators v0.0.0-20180403085117-0950a7990007/go.mod h1:m2XC9Qq0AlmmVksL6FktJCdTYyLk7V3fKyp0sl1yWQo= github.com/mwitkow/go-proto-validators v0.2.0/go.mod h1:ZfA1hW+UH/2ZHOWvQ3HnQaU0DtnpXu850MZiy+YUgcc= -github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= github.com/nakabonne/nestif v0.3.1/go.mod h1:9EtoZochLn5iUprVDmDjqGKPofoUEBL8U4Ngq6aY7OE= github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354/go.mod h1:KSVJerMDfblTH7p5MZaTt+8zaT2iEk3AkVb9PQdZuE8= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= @@ -783,23 +746,19 @@ github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+ github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/olekukonko/tablewriter v0.0.2/go.mod h1:rSAaSIOAGT9odnlyGlUfAJaoc5w2fSBUmeGDbRWPxyQ= -github.com/olekukonko/tablewriter v0.0.4/go.mod h1:zq6QwlOf5SlnkVbMSr5EoBv3636FWnp+qbPhuoO21uA= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= -github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo/v2 v2.1.4 h1:GNapqRSid3zijZ9H77KrgVG4/8KqiyRsxcSxe+7ApXY= -github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.16.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= -github.com/onsi/gomega v1.20.0 h1:8W0cWlwFkflGPLltQvLRB7ZVD5HuP6ng320w2IS245Q= -github.com/onsi/gomega v1.20.0/go.mod h1:DtrZpjmvpn2mPm4YWQa0/ALMDj9v4YxLgojwPeREyVo= +github.com/onsi/gomega v1.20.1 h1:PA/3qinGoukvymdIDV8pii6tiZgC8kbmJO6Z5+b002Q= +github.com/onsi/gomega v1.20.1/go.mod h1:DtrZpjmvpn2mPm4YWQa0/ALMDj9v4YxLgojwPeREyVo= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.0.3-0.20220114050600-8b9d41f48198 h1:+czc/J8SlhPKLOtVLMQc+xDCFBT73ZStMsRhSsUhsSg= @@ -834,8 +793,9 @@ github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXP github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.12.1 h1:ZiaPsmm9uiBeaSMRznKsCDNtPCS0T3JVDGF+06gjBzk= github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= +github.com/prometheus/client_golang v1.13.0 h1:b71QUfeo5M8gq2+evJdTPfZhYMAU0uKPkyPJ7TPsloU= +github.com/prometheus/client_golang v1.13.0/go.mod h1:vTeo+zgvILHsnnj/39Ou/1fPN5nJFOEMgftOUOmlvYQ= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= @@ -844,14 +804,16 @@ github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6T github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.32.1 h1:hWIdL3N2HoUx3B8j3YN9mWor0qhY/NlEKZEaXxuIRh4= github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.37.0 h1:ccBbHCgIiT9uSoFY0vX8H3zsNR5eLt17/RQLUvn8pXE= +github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo= +github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= github.com/pseudomuto/protoc-gen-doc v1.3.2/go.mod h1:y5+P6n3iGrbKG+9O04V5ld71in3v/bX88wUwgt+U8EA= github.com/pseudomuto/protokit v0.2.0/go.mod h1:2PdH30hxVHsup8KpBTOXTBeMVhJZVio3Q8ViKSAXT0Q= github.com/quasilyte/go-consistent v0.0.0-20190521200055-c6f3937de18c/go.mod h1:5STLWrekHfjyYwxBRVRXNOSewLJ3PWfDJd1VyTS21fI= @@ -914,12 +876,10 @@ github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkU github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= -github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g= github.com/spf13/cobra v1.5.0 h1:X+jTBEBqF0bHN+9cSMgmfuvv2VHJ9ezmFNf9Y/XstYU= github.com/spf13/cobra v1.5.0/go.mod h1:dWXEIy2H428czQCjInthrTRUg7yKbok+2Qi/yBIJoUM= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= -github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= @@ -932,7 +892,6 @@ github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48= -github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/testify v0.0.0-20170130113145-4d4bfba8f1d1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.1.4/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= @@ -941,7 +900,7 @@ github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81P github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.1 h1:5TQK59W5E3v0r2duFAb7P95B6hEeOyEnHRa8MjYSMTY= +github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/sylvia7788/contextcheck v1.0.4/go.mod h1:vuPKJMQ7MQ91ZTqfdyreNKwZjyUg6KO+IebVyQDedZQ= github.com/tdakkota/asciicheck v0.0.0-20200416200610-e657995f937b/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM= @@ -985,7 +944,6 @@ github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2 github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/xlab/treeprint v0.0.0-20181112141820-a009c3971eca/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= github.com/xlab/treeprint v1.1.0 h1:G/1DjNkPpfZCFt9CSh6b5/nY4VimlbHF3Rh4obvtzDk= github.com/xlab/treeprint v1.1.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd/WEJu0= github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1zIOPMxZ5EncGwgmMJsa+9ucAQZXxsObs= @@ -1000,7 +958,6 @@ github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43 h1:+lm10QQTNSBd8DVTNGHx7o/IKu9HYDvLMffDhbyLccI= github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50 h1:hlE8//ciYMztlGpl/VA+Zm1AcTPHYkHJPbHqE6WJUXE= github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f h1:ERexzlUfuTvpE74urLSbIQW0Z/6hF9t8U4NsJLaioAY= @@ -1018,16 +975,6 @@ go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= -go.opentelemetry.io/contrib v0.20.0/go.mod h1:G/EtFaa6qaN7+LxqfIAT3GiZa7Wv5DTBUzl5H4LY0Kc= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.20.0/go.mod h1:2AboqHi0CiIZU0qwhtUfCYD1GeUzvvIXWNkhDt7ZMG4= -go.opentelemetry.io/otel v0.20.0/go.mod h1:Y3ugLH2oa81t5QO+Lty+zXf8zC9L26ax4Nzoxm/dooo= -go.opentelemetry.io/otel/exporters/otlp v0.20.0/go.mod h1:YIieizyaN77rtLJra0buKiNBOm9XQfkPEKBeuhoMwAM= -go.opentelemetry.io/otel/metric v0.20.0/go.mod h1:598I5tYlH1vzBjn+BTuhzTCSb/9debfNp6R3s7Pr1eU= -go.opentelemetry.io/otel/oteltest v0.20.0/go.mod h1:L7bgKf9ZB7qCwT9Up7i9/pn0PWIa9FqQ2IQ8LoxiGnw= -go.opentelemetry.io/otel/sdk v0.20.0/go.mod h1:g/IcepuwNsoiX5Byy2nNV0ySUF1em498m7hBWC279Yc= -go.opentelemetry.io/otel/sdk/export/metric v0.20.0/go.mod h1:h7RBNMsDJ5pmI1zExLi+bJK+Dr8NQCh0qGhm1KDnNlE= -go.opentelemetry.io/otel/sdk/metric v0.20.0/go.mod h1:knxiS8Xd4E/N+ZqKmUPf3gTTZ4/0TjTXukfxjzSTpHE= -go.opentelemetry.io/otel/trace v0.20.0/go.mod h1:6GjCW8zgDjwGHGa6GkyeB8+/5vjT16gUEi0Nf1iBdgw= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 h1:+FNtrFTmVw0YZGpBGX56XDee331t6JAXeK2bcyhLOOc= go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5/go.mod h1:nmDLcffg48OtT/PSW0Hg7FvpRQsQh5OSqIylirxKC7o= @@ -1036,7 +983,6 @@ go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= @@ -1047,8 +993,7 @@ go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9E go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= -go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= -go.uber.org/zap v1.21.0 h1:WefMeulhovoZ2sYXz7st6K0sLj7bBhpiFaud4r4zST8= +go.uber.org/zap v1.23.0 h1:OjGQ5KQDEUawVHxNwQgPpiypGHOxo2mNZsOqTak4fFY= golang.org/x/crypto v0.0.0-20180501155221-613d6eafa307/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -1061,7 +1006,6 @@ golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= @@ -1069,9 +1013,8 @@ golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5 golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa h1:zuSxTR4o9y82ebqCUJYNGJbGPo6sKVl54f/TVDObg1c= -golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d h1:3qF+Z8Hkrw9sOhrFHti9TlB1Hkac1x+DNRkv0XQiFjo= +golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -1109,7 +1052,6 @@ golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 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.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= -golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1129,7 +1071,6 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -1162,9 +1103,9 @@ golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20210510120150-4163338589ed/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220722155237-a158d28d115b h1:PxfKdU9lEEDYjdIzOtC4qFWgkU2rGHdKlKowJSMN9h0= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -1184,6 +1125,7 @@ golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= golang.org/x/oauth2 v0.0.0-20220722155238-128564f6959c h1:q3gFqPqH7NVofKo3c3yETAP//pPI+G5mvB7qqj1Y5kY= golang.org/x/oauth2 v0.0.0-20220722155238-128564f6959c/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1247,7 +1189,6 @@ golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1286,11 +1227,9 @@ golang.org/x/sys v0.0.0-20210917161153-d61c044b1678/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211013075003-97ac67df715c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f h1:v4INt8xihDGvnrfjMDVXGxw9wrfxYyCjk0KbXjhR55s= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1314,7 +1253,6 @@ golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20220210224613-90d013bbcef8/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9 h1:ftMN5LMiBFjbzleLqtoBZk7KdJwhuybIU+FckUHgoyQ= golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -1376,7 +1314,6 @@ golang.org/x/tools v0.0.0-20200414032229-332987a829c3/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20200422022333-3d57cf2e726e/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200426102838-f3a5411a4c3b/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= @@ -1420,7 +1357,6 @@ 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.6/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo= golang.org/x/tools v0.1.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo= -golang.org/x/tools v0.1.10-0.20220218145154-897bd77cd717/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1505,7 +1441,6 @@ google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= @@ -1577,8 +1512,8 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= -google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= +google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= 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= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -1616,7 +1551,6 @@ gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= gotest.tools/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0= -gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -1625,41 +1559,25 @@ honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.2.1/go.mod h1:lPVVZ2BS5TfnjLyizF7o7hv7j9/L+8cZY2hLyjP9cGY= -k8s.io/api v0.24.3/go.mod h1:elGR/XSZrS7z7cSZPzVWaycpJuGIw57j9b95/1PdJNI= k8s.io/api v0.25.0 h1:H+Q4ma2U/ww0iGB78ijZx6DRByPz6/733jIuFpX70e0= k8s.io/api v0.25.0/go.mod h1:ttceV1GyV1i1rnmvzT3BST08N6nGt+dudGrquzVQWPk= k8s.io/apiextensions-apiserver v0.25.0 h1:CJ9zlyXAbq0FIW8CD7HHyozCMBpDSiH7EdrSTCZcZFY= k8s.io/apiextensions-apiserver v0.25.0/go.mod h1:3pAjZiN4zw7R8aZC5gR0y3/vCkGlAjCazcg1me8iB/E= -k8s.io/apimachinery v0.24.3/go.mod h1:82Bi4sCzVBdpYjyI4jY6aHX+YCUchUIrZrXKedjd2UM= k8s.io/apimachinery v0.25.0 h1:MlP0r6+3XbkUG2itd6vp3oxbtdQLQI94fD5gCS+gnoU= k8s.io/apimachinery v0.25.0/go.mod h1:qMx9eAk0sZQGsXGu86fab8tZdffHbwUfsvzqKn4mfB0= -k8s.io/cli-runtime v0.24.3 h1:O9YvUHrDSCQUPlsqVmaqDrueqjpJ7IO6Yas9B6xGSoo= -k8s.io/cli-runtime v0.24.3/go.mod h1:In84wauoMOqa7JDvDSXGbf8lTNlr70fOGpYlYfJtSqA= -k8s.io/client-go v0.24.3/go.mod h1:AAovolf5Z9bY1wIg2FZ8LPQlEdKHjLI7ZD4rw920BJw= +k8s.io/cli-runtime v0.25.0 h1:XBnTc2Fi+w818jcJGzhiJKQuXl8479sZ4FhtV5hVJ1Q= +k8s.io/cli-runtime v0.25.0/go.mod h1:bHOI5ZZInRHhbq12OdUiYZQN8ml8aKZLwQgt9QlLINw= k8s.io/client-go v0.25.0 h1:CVWIaCETLMBNiTUta3d5nzRbXvY5Hy9Dpl+VvREpu5E= k8s.io/client-go v0.25.0/go.mod h1:lxykvypVfKilxhTklov0wz1FoaUZ8X4EwbhS6rpRfN8= -k8s.io/code-generator v0.24.3/go.mod h1:dpVhs00hTuTdTY6jvVxvTFCk6gSMrtfRydbhZwHI15w= -k8s.io/component-base v0.24.3/go.mod h1:bqom2IWN9Lj+vwAkPNOv2TflsP1PeVDIwIN0lRthxYY= k8s.io/component-base v0.25.0 h1:haVKlLkPCFZhkcqB6WCvpVxftrg6+FK5x1ZuaIDaQ5Y= k8s.io/component-base v0.25.0/go.mod h1:F2Sumv9CnbBlqrpdf7rKZTmmd2meJq0HizeyY/yAFxk= -k8s.io/component-helpers v0.24.3/go.mod h1:/1WNW8TfBOijQ1ED2uCHb4wtXYWDVNMqUll8h36iNVo= -k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= -k8s.io/gengo v0.0.0-20211129171323-c02415ce4185/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= -k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= -k8s.io/klog/v2 v2.60.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/klog/v2 v2.70.1 h1:7aaoSdahviPmR+XkS7FyxlkkXs6tHISSG03RxleQAVQ= k8s.io/klog/v2 v2.70.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= -k8s.io/kube-openapi v0.0.0-20210421082810-95288971da7e/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw= -k8s.io/kube-openapi v0.0.0-20220328201542-3ee0da9b0b42/go.mod h1:Z/45zLw8lUo4wdiUkI+v/ImEGAvu3WatcZl3lPMR4Rk= k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1 h1:MQ8BAZPZlWk3S9K4a9NCkIFQtZShWqoha7snGixVgEA= k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1/go.mod h1:C/N6wCaBHeBHkHUesQOQy2/MZqGgMAFPqGsGQLdbZBU= -k8s.io/kubectl v0.24.3 h1:PqY8ho/S/KuE2/hCC3Iee7X+lOtARYo0LQsNzvV/edE= -k8s.io/kubectl v0.24.3/go.mod h1:PYLcvw96sC1NLbxZEDbdlOEd6/C76VIWjGmWV5QjSk0= -k8s.io/metrics v0.24.3/go.mod h1:p1M0lhMySWfhISkSd3HEj8xIgrVnJTK3PPhFq2rA3To= -k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/kubectl v0.25.0 h1:/Wn1cFqo8ik3iee1EvpxYre3bkWsGLXzLQI6uCCAkQc= +k8s.io/kubectl v0.25.0/go.mod h1:n16ULWsOl2jmQpzt2o7Dud1t4o0+Y186ICb4O+GwKAU= k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed h1:jAne/RjBTyawwAy0utX5eqigAwz/lQhTmy+Hr/Cpue4= k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= mvdan.cc/gofumpt v0.1.1/go.mod h1:yXG1r1WqZVKWbVRtBWKWX9+CxGYfA51nSomhM0woR48= @@ -1669,26 +1587,18 @@ mvdan.cc/unparam v0.0.0-20210104141923-aac4ce9116a7/go.mod h1:hBpJkZE8H/sb+VRFvw rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/cli-utils v0.32.0 h1:776y8z6gbBFTxfJ78lkHK6tbzK+MZTH6+ycP1gh16aw= -sigs.k8s.io/cli-utils v0.32.0/go.mod h1:g/zB9hJ5eUN7zIEBIxrO0CwhXU4YISJ+BkLJzvWwlEs= +sigs.k8s.io/cli-utils v0.33.0 h1:/ioqfYu0hVeR2T2SDH3WVPgpqiJkrzqjJFrQ3u+baHk= +sigs.k8s.io/cli-utils v0.33.0/go.mod h1:g/zB9hJ5eUN7zIEBIxrO0CwhXU4YISJ+BkLJzvWwlEs= sigs.k8s.io/controller-runtime v0.11.2 h1:H5GTxQl0Mc9UjRJhORusqfJCIjBO8UtUxGggCwL1rLA= sigs.k8s.io/controller-runtime v0.11.2/go.mod h1:P6QCzrEjLaZGqHsfd+os7JQ+WFZhvB8MRFsn4dWF7O4= -sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2/go.mod h1:B+TnT182UBxE84DiCz4CVE26eOSDAeYCpfDnC2kdKMY= sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 h1:iXTIw73aPyC+oRdyqqvVJuloN1p0AC/kzH07hu3NE+k= sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= -sigs.k8s.io/kustomize/api v0.11.4/go.mod h1:k+8RsqYbgpkIrJ4p9jcdPqe8DprLxFUUO0yNOq8C+xI= sigs.k8s.io/kustomize/api v0.12.1 h1:7YM7gW3kYBwtKvoY216ZzY+8hM+lV53LUayghNRJ0vM= sigs.k8s.io/kustomize/api v0.12.1/go.mod h1:y3JUhimkZkR6sbLNwfJHxvo1TCLwuwm14sCYnkH6S1s= -sigs.k8s.io/kustomize/cmd/config v0.10.6/go.mod h1:/S4A4nUANUa4bZJ/Edt7ZQTyKOY9WCER0uBS1SW2Rco= -sigs.k8s.io/kustomize/kustomize/v4 v4.5.4/go.mod h1:Zo/Xc5FKD6sHl0lilbrieeGeZHVYCA4BzxeAaLI05Bg= -sigs.k8s.io/kustomize/kyaml v0.13.6/go.mod h1:yHP031rn1QX1lr/Xd934Ri/xdVNG8BE2ECa78Ht/kEg= sigs.k8s.io/kustomize/kyaml v0.13.9 h1:Qz53EAaFFANyNgyOEJbT/yoIHygK40/ZcvU3rgry2Tk= sigs.k8s.io/kustomize/kyaml v0.13.9/go.mod h1:QsRbD0/KcU+wdk0/L0fIp2KLnohkVzs6fQ85/nOXac4= -sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= -sigs.k8s.io/structured-merge-diff/v4 v4.2.1/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= -sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= From 43cdea01d6e884fcceb3e876a4b7aa6df95a97ad Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Mon, 29 Aug 2022 16:31:51 +0300 Subject: [PATCH 226/818] Status update for RFC-0002 and RFC-0003 Signed-off-by: Stefan Prodan --- rfcs/0002-helm-oci/README.md | 4 ++-- rfcs/0003-kubernetes-oci/README.md | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/rfcs/0002-helm-oci/README.md b/rfcs/0002-helm-oci/README.md index 40ba19b2..a5413917 100644 --- a/rfcs/0002-helm-oci/README.md +++ b/rfcs/0002-helm-oci/README.md @@ -230,8 +230,8 @@ The feature is enabled by default. * **2022-05-19** Partially implemented by [source-controller#690](https://github.com/fluxcd/source-controller/pull/690) * **2022-06-06** First implementation released with [flux2 v0.31.0](https://github.com/fluxcd/flux2/releases/tag/v0.31.0) * **2022-08-11** Resolve chart dependencies from OCI released with [flux2 v0.32.0](https://github.com/fluxcd/flux2/releases/tag/v0.32.0) - +* **2022-08-29** Contextual login for AWS, Azure and GCP released with [flux2 v0.33.0](https://github.com/fluxcd/flux2/releases/tag/v0.33.0) + ### TODOs * [Add support for container registries with self-signed TLS certs](https://github.com/fluxcd/source-controller/issues/723) -* [Enable contextual login in OCI HelmRepository](https://github.com/fluxcd/source-controller/pull/873) \ No newline at end of file diff --git a/rfcs/0003-kubernetes-oci/README.md b/rfcs/0003-kubernetes-oci/README.md index 7fcd940a..585fede5 100644 --- a/rfcs/0003-kubernetes-oci/README.md +++ b/rfcs/0003-kubernetes-oci/README.md @@ -455,9 +455,10 @@ The feature is enabled by default. ## Implementation History * **2022-08-08** Partially implemented by [source-controller#788](https://github.com/fluxcd/source-controller/pull/788) -* **2022-06-06** First implementation released with [flux2 v0.32.0](https://github.com/fluxcd/flux2/releases/tag/v0.32.0) +* **2022-08-11** First implementation released with [flux2 v0.32.0](https://github.com/fluxcd/flux2/releases/tag/v0.32.0) +* **2022-08-29** Select layer by OCI media type released with [flux2 v0.33.0](https://github.com/fluxcd/flux2/releases/tag/v0.33.0) ### TODOs * [Add support for verifying the OCI artifacts with cosign](https://github.com/fluxcd/source-controller/issues/863) -* [Select layer by OCI media type](https://github.com/fluxcd/source-controller/pull/871) + From 92e136ed5440ef426a3a3301efc86b11445ddf20 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Mon, 29 Aug 2022 14:34:21 +0300 Subject: [PATCH 227/818] Update packages in Azure e2e tests Signed-off-by: Stefan Prodan Signed-off-by: Philip Laine --- .github/workflows/e2e-azure.yaml | 2 +- tests/azure/go.mod | 83 ++- tests/azure/go.sum | 482 ++++-------------- tests/azure/terraform/aks/.terraform.lock.hcl | 115 +++-- tests/azure/terraform/aks/aks.tf | 4 +- tests/azure/terraform/aks/main.tf | 8 +- tests/azure/terraform/aks/outputs.tf | 4 + .../terraform/shared/.terraform.lock.hcl | 85 +-- tests/azure/terraform/shared/acr.tf | 2 +- tests/azure/terraform/shared/main.tf | 6 +- 10 files changed, 248 insertions(+), 543 deletions(-) diff --git a/.github/workflows/e2e-azure.yaml b/.github/workflows/e2e-azure.yaml index 6b02880b..102644b4 100644 --- a/.github/workflows/e2e-azure.yaml +++ b/.github/workflows/e2e-azure.yaml @@ -46,7 +46,7 @@ jobs: - name: Setup Terraform uses: hashicorp/setup-terraform@v1 with: - terraform_version: 1.0.7 + terraform_version: 1.2.8 terraform_wrapper: false - name: Setup Azure CLI run: | diff --git a/tests/azure/go.mod b/tests/azure/go.mod index 9bcad66b..8059ddce 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -1,43 +1,40 @@ module github.com/fluxcd/flux2/tests/azure -go 1.17 +go 1.18 require ( github.com/Azure/azure-event-hubs-go/v3 v3.3.18 - github.com/fluxcd/helm-controller/api v0.22.1 - github.com/fluxcd/image-automation-controller/api v0.23.2 - github.com/fluxcd/image-reflector-controller/api v0.19.1 - github.com/fluxcd/kustomize-controller/api v0.26.1 - github.com/fluxcd/notification-controller/api v0.24.0 - github.com/fluxcd/pkg/apis/meta v0.14.2 - github.com/fluxcd/pkg/runtime v0.16.2 - github.com/fluxcd/source-controller/api v0.25.5 + github.com/fluxcd/helm-controller/api v0.23.1 + github.com/fluxcd/image-automation-controller/api v0.24.2 + github.com/fluxcd/image-reflector-controller/api v0.20.1 + github.com/fluxcd/kustomize-controller/api v0.27.1 + github.com/fluxcd/notification-controller/api v0.25.2 + github.com/fluxcd/pkg/apis/meta v0.15.0 + github.com/fluxcd/pkg/runtime v0.17.0 + github.com/fluxcd/source-controller/api v0.28.0 github.com/hashicorp/hc-install v0.4.0 - github.com/hashicorp/terraform-exec v0.16.1 + github.com/hashicorp/terraform-exec v0.17.2 github.com/libgit2/git2go/v31 v31.7.9 github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 - github.com/stretchr/testify v1.7.1 + github.com/stretchr/testify v1.8.0 github.com/whilp/git-urls v1.0.0 go.uber.org/multierr v1.8.0 - k8s.io/api v0.24.1 - k8s.io/apimachinery v0.24.1 - k8s.io/client-go v0.24.1 + k8s.io/api v0.25.0 + k8s.io/apimachinery v0.25.0 + k8s.io/client-go v0.25.0 sigs.k8s.io/controller-runtime v0.11.2 ) // Fix CVE-2022-28948 replace gopkg.in/yaml.v3 => gopkg.in/yaml.v3 v3.0.1 -// Fix CVE-2022-26945 -replace github.com/hashicorp/go-getter => github.com/hashicorp/go-getter v1.6.1 - require ( github.com/Azure/azure-amqp-common-go/v3 v3.2.3 // indirect github.com/Azure/azure-sdk-for-go v51.1.0+incompatible // indirect github.com/Azure/go-amqp v0.17.0 // indirect github.com/Azure/go-autorest v14.2.0+incompatible // indirect - github.com/Azure/go-autorest/autorest v0.11.18 // indirect - github.com/Azure/go-autorest/autorest/adal v0.9.13 // indirect + github.com/Azure/go-autorest/autorest v0.11.27 // indirect + github.com/Azure/go-autorest/autorest/adal v0.9.20 // indirect github.com/Azure/go-autorest/autorest/date v0.3.0 // indirect github.com/Azure/go-autorest/autorest/to v0.4.0 // indirect github.com/Azure/go-autorest/autorest/validation v0.3.1 // indirect @@ -49,18 +46,18 @@ require ( github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/devigned/tab v0.1.1 // indirect - github.com/emicklei/go-restful v2.9.5+incompatible // indirect + github.com/emicklei/go-restful/v3 v3.8.0 // indirect github.com/evanphx/json-patch v4.12.0+incompatible // indirect - github.com/fluxcd/pkg/apis/acl v0.0.3 // indirect - github.com/fluxcd/pkg/apis/kustomize v0.4.2 // indirect - github.com/form3tech-oss/jwt-go v3.2.3+incompatible // indirect + github.com/fluxcd/pkg/apis/acl v0.1.0 // indirect + github.com/fluxcd/pkg/apis/kustomize v0.5.0 // indirect github.com/fsnotify/fsnotify v1.5.1 // indirect github.com/go-logr/logr v1.2.3 // indirect - github.com/go-logr/zapr v1.2.0 // indirect + github.com/go-logr/zapr v1.2.3 // indirect github.com/go-openapi/jsonpointer v0.19.5 // indirect github.com/go-openapi/jsonreference v0.19.5 // indirect github.com/go-openapi/swag v0.19.14 // indirect github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang-jwt/jwt/v4 v4.2.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.2 // indirect github.com/google/gnostic v0.5.7-v3refs // indirect @@ -71,8 +68,8 @@ require ( github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/go-retryablehttp v0.7.1 // indirect - github.com/hashicorp/go-version v1.5.0 // indirect - github.com/hashicorp/terraform-json v0.13.0 // indirect + github.com/hashicorp/go-version v1.6.0 // indirect + github.com/hashicorp/terraform-json v0.14.0 // indirect github.com/imdario/mergo v0.3.12 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/jpillora/backoff v1.0.0 // indirect @@ -85,34 +82,34 @@ require ( github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/prometheus/client_golang v1.12.1 // indirect + github.com/prometheus/client_golang v1.13.0 // indirect github.com/prometheus/client_model v0.2.0 // indirect - github.com/prometheus/common v0.32.1 // indirect - github.com/prometheus/procfs v0.7.3 // indirect + github.com/prometheus/common v0.37.0 // indirect + github.com/prometheus/procfs v0.8.0 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/zclconf/go-cty v1.10.0 // indirect go.uber.org/atomic v1.7.0 // indirect - go.uber.org/zap v1.21.0 // indirect - golang.org/x/crypto v0.0.0-20220214200702-86341886e292 // indirect - golang.org/x/net v0.0.0-20220225172249-27dd8689420f // indirect - golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 // indirect - golang.org/x/sys v0.0.0-20220517195934-5e4e11fc645e // indirect + go.uber.org/zap v1.23.0 // indirect + golang.org/x/crypto v0.0.0-20220315160706-3147a52a75dd // indirect + golang.org/x/net v0.0.0-20220722155237-a158d28d115b // indirect + golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b // indirect + golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f // indirect golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect golang.org/x/text v0.3.7 // indirect golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/protobuf v1.27.1 // indirect + google.golang.org/protobuf v1.28.1 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect - gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect - k8s.io/apiextensions-apiserver v0.24.1 // indirect - k8s.io/component-base v0.24.1 // indirect - k8s.io/klog/v2 v2.60.1 // indirect - k8s.io/kube-openapi v0.0.0-20220328201542-3ee0da9b0b42 // indirect - k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9 // indirect - sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2 // indirect - sigs.k8s.io/structured-merge-diff/v4 v4.2.1 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + k8s.io/apiextensions-apiserver v0.25.0 // indirect + k8s.io/component-base v0.25.0 // indirect + k8s.io/klog/v2 v2.70.1 // indirect + k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1 // indirect + k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed // indirect + sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 // indirect + sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect sigs.k8s.io/yaml v1.3.0 // indirect ) diff --git a/tests/azure/go.sum b/tests/azure/go.sum index 473d0b86..26f90629 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -13,11 +13,6 @@ cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKV cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= -cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= -cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= -cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= -cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= -cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= @@ -26,7 +21,6 @@ cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4g cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= @@ -48,18 +42,20 @@ github.com/Azure/azure-sdk-for-go v51.1.0+incompatible/go.mod h1:9XXNKU+eRnpl9mo github.com/Azure/azure-storage-blob-go v0.6.0/go.mod h1:oGfmITT1V6x//CswqY2gtAHND+xIP64/qL7a5QJix0Y= github.com/Azure/go-amqp v0.17.0 h1:HHXa3149nKrI0IZwyM7DRcRy5810t9ZICDutn4BYzj4= github.com/Azure/go-amqp v0.17.0/go.mod h1:9YJ3RhxRT1gquYnzpZO1vcYMMpAdJT+QEg6fwmw9Zlg= -github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs= github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= github.com/Azure/go-autorest/autorest v0.9.3/go.mod h1:GsRuLYvwzLjjjRoWEIyMUaYq8GNUx2nRB378IPt/1p0= -github.com/Azure/go-autorest/autorest v0.11.18 h1:90Y4srNYrwOtAgVo3ndrQkTYn6kf1Eg/AjTFJ8Is2aM= github.com/Azure/go-autorest/autorest v0.11.18/go.mod h1:dSiJPy22c3u0OtOKDNttNgqpNFY/GeWa7GH/Pz56QRA= +github.com/Azure/go-autorest/autorest v0.11.27 h1:F3R3q42aWytozkV8ihzcgMO4OA4cuqr3bNlsEuF6//A= +github.com/Azure/go-autorest/autorest v0.11.27/go.mod h1:7l8ybrIdUmGqZMTD0sRtAr8NvbHjfofbf8RSP2q7w7U= github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= github.com/Azure/go-autorest/autorest/adal v0.8.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S6HY6e6wcHn37qQMBQlvY3lc= github.com/Azure/go-autorest/autorest/adal v0.8.1/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= -github.com/Azure/go-autorest/autorest/adal v0.9.13 h1:Mp5hbtOePIzM8pJVRa3YLrWWmZtoxRXqUEzCfJt3+/Q= github.com/Azure/go-autorest/autorest/adal v0.9.13/go.mod h1:W/MM4U6nLxnIskrw4UwWzlHfGjwUS50aOsc/I3yuU8M= +github.com/Azure/go-autorest/autorest/adal v0.9.18/go.mod h1:XVVeme+LZwABT8K5Lc3hA4nAe8LDBVle26gTrguhhPQ= +github.com/Azure/go-autorest/autorest/adal v0.9.20 h1:gJ3E98kMpFB1MFqQCvA1yFab8vthOeD4VlFRQULxahg= +github.com/Azure/go-autorest/autorest/adal v0.9.20/go.mod h1:XVVeme+LZwABT8K5Lc3hA4nAe8LDBVle26gTrguhhPQ= github.com/Azure/go-autorest/autorest/azure/auth v0.4.2 h1:iM6UAvjR97ZIeR93qTcwpKNMpV+/FTWjwEbuPD495Tk= github.com/Azure/go-autorest/autorest/azure/auth v0.4.2/go.mod h1:90gmfKdlmKgfjUpnCEpOJzsUEjrWDSLwHIG73tSXddM= github.com/Azure/go-autorest/autorest/azure/cli v0.3.1 h1:LXl088ZQlP0SBppGFsRZonW6hSvwgL5gRByMbvUbx8U= @@ -71,8 +67,9 @@ github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSY github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= -github.com/Azure/go-autorest/autorest/mocks v0.4.1 h1:K0laFcLE6VLTOwNgSxaGbUcLPuGXlNkbVvq4cW4nIHk= github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= +github.com/Azure/go-autorest/autorest/mocks v0.4.2 h1:PGN4EDXnuQbojHbU0UWoNvmu9AGVwYHG9/fkDYhtAfw= +github.com/Azure/go-autorest/autorest/mocks v0.4.2/go.mod h1:Vy7OitM9Kei0i1Oj+LvyAWMXJHeKH1MVlzFugfVrmyU= github.com/Azure/go-autorest/autorest/to v0.4.0 h1:oXVqrxakqqV1UZdSazDOPOLvOIz+XA683u8EctwboHk= github.com/Azure/go-autorest/autorest/to v0.4.0/go.mod h1:fE8iZBn7LQR7zH/9XU2NcPR4o9jEImooCeWJcYV/zLE= github.com/Azure/go-autorest/autorest/validation v0.3.1 h1:AgyqjAd94fwNAoTjl/WQXg4VvFeRFpO+UhNyRXqF1ac= @@ -88,9 +85,6 @@ github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= github.com/Microsoft/go-winio v0.4.16 h1:FtSW/jqD+l4ba5iPBj9CODVtgfYAD8w2wS923g/cFDk= github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= -github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= -github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7 h1:YoJbenK9C67SkzkDfmQuVln04ygHj3vjZfd9FL+GmQQ= github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= @@ -105,28 +99,16 @@ github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRF github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20210826220005-b48c857c3a0e/go.mod h1:F7bn7fEU90QkQ3tnmaTx3LTKLEDqnwWODIYppRQ5hnY= +github.com/apparentlymart/go-textseg v1.0.0/go.mod h1:z96Txxhf3xSFMPmb5X/1W05FF/Nj9VFpLOpjS5yuumk= github.com/apparentlymart/go-textseg/v13 v13.0.0/go.mod h1:ZK2fH7c4NqDTLtiYLvIkEghdlcqw7yxLeM89kiTRPUo= -github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= -github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= -github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= -github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= -github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/certifi/gocertifi v0.0.0-20191021191039-0944d244cd40/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= -github.com/certifi/gocertifi v0.0.0-20200922220541-2c3bb06c6054/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -135,86 +117,53 @@ github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5P github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cockroachdb/datadriven v0.0.0-20200714090401-bf6692d28da5/go.mod h1:h6jFvWxBdQXxjopDMZyH2UVceIRfR84bdzbkoKrsWNo= -github.com/cockroachdb/errors v1.2.4/go.mod h1:rQD95gz6FARkaKkQXUksEje/d9a6wBJoCr5oaCLELYA= -github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f/go.mod h1:i/u985jwjWRlyHXQbwatDASoW0RMlZ/3i9yJHE2xLkI= -github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= -github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/devigned/tab v0.1.1 h1:3mD6Kb1mUOYeLpJvTVSDwSg5ZsfSxfvxGRTxRsJsITA= github.com/devigned/tab v0.1.1/go.mod h1:XG9mPq0dFghrYvoBF3xdRrJzSTX1b7IQrvaL9mzjeJY= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dimchansky/utfbom v1.1.0 h1:FcM3g+nofKgUteL8dm/UpdRXNC9KmADgTpLKsu0TRo4= github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= -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 h1:spTtZBk5DYEvbxMVutUuTyh1Ao2r4iyvLdACqsl/Ljk= -github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= +github.com/emicklei/go-restful/v3 v3.8.0 h1:eCZ8ulSerjdAiaNpF7GxXIE7ZCMo1moN1qX+S609eVw= +github.com/emicklei/go-restful/v3 v3.8.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg= github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= -github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/evanphx/json-patch v0.5.2/go.mod h1:ZWS5hhDbVDyob71nXKNL0+PWn6ToqBHMikGIFbs31qQ= github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH5pOlLGNtQ5lPWQu84= github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/fluxcd/helm-controller/api v0.22.1 h1:J+i6AZMj0SCuQxcpHmyf1qmPdgDKP0nTkyS4/oLHx0M= -github.com/fluxcd/helm-controller/api v0.22.1/go.mod h1:2xuHOYjbRv86ekTYkF7VzTwu5hEHYawrdi7FZrvpr4g= -github.com/fluxcd/image-automation-controller/api v0.23.2 h1:2e5ZWaKUGzCD7ItxQDbrO6OXHMYoSHV1drCwFIh8DMQ= -github.com/fluxcd/image-automation-controller/api v0.23.2/go.mod h1:HhjBfqtjsb+Pe5S4ig2cq3n25Rifs8NJ+bppf++Bmb8= -github.com/fluxcd/image-reflector-controller/api v0.19.1 h1:5vEHLVhgxdznn6AfwMea5Bi/qsuIsjiV3goj3pg4FcI= -github.com/fluxcd/image-reflector-controller/api v0.19.1/go.mod h1:WvPujFOXzWttkETUxkCgP9BesCTAfVYzgCeZXu43nY4= -github.com/fluxcd/kustomize-controller/api v0.26.1 h1:hX8vPe49/ytKzSAO8Qewb/Cmswt8oit/JNIQ9h5l+xQ= -github.com/fluxcd/kustomize-controller/api v0.26.1/go.mod h1:f16v3IErWGQJ0WXtpOW3ATjFukz/KhbkanqS9ZTM8ks= -github.com/fluxcd/notification-controller/api v0.24.0 h1:pvLcCD1HT+x0Hup8VLfDrVGFDK33oJKNC7WX6mtEEh0= -github.com/fluxcd/notification-controller/api v0.24.0/go.mod h1:pld1fyodxqdWPBr+Ez+kTixmtmO2o3o0I5Zf5wQDHGM= -github.com/fluxcd/pkg/apis/acl v0.0.3 h1:Lw0ZHdpnO4G7Zy9KjrzwwBmDZQuy4qEjaU/RvA6k1lc= -github.com/fluxcd/pkg/apis/acl v0.0.3/go.mod h1:XPts6lRJ9C9fIF9xVWofmQwftvhY25n1ps7W9xw0XLU= -github.com/fluxcd/pkg/apis/kustomize v0.4.2 h1:5mC/t+OndouK7poFaG4soWLqvHqOxJ3HCsbxu8qyt30= -github.com/fluxcd/pkg/apis/kustomize v0.4.2/go.mod h1:y/TpJvnhR08BRt3E7oLpDPvx0/J/2AS8tOiAFJpctu8= -github.com/fluxcd/pkg/apis/meta v0.14.2 h1:/Hf7I/Vz01vv3m7Qx7DtQvrzAL1oVt0MJcLb/I1Y1HE= -github.com/fluxcd/pkg/apis/meta v0.14.2/go.mod h1:ijZ61VG/8T3U17gj0aFL3fdtZL+mulD6V8VrLLUCAgM= -github.com/fluxcd/pkg/runtime v0.16.2 h1:CexfMmJK+r12sHTvKWyAax0pcPomjd6VnaHXcxjUrRY= -github.com/fluxcd/pkg/runtime v0.16.2/go.mod h1:OHSKsrO+T+Ym8WZRS2oidrnauWRARuE2nfm8ewevm7M= -github.com/fluxcd/source-controller/api v0.25.5 h1:64rLb5cuHhZ3LcRIxkp+/oAVCyVtjOhQ9kbphdFfR/s= -github.com/fluxcd/source-controller/api v0.25.5/go.mod h1:/e7YRDOqb8z8I3N8ifbDF1mknf8zFsoADtS/Q93iWPs= +github.com/fluxcd/helm-controller/api v0.23.1 h1:igBI/SZxYErepgxj8f5SrAg93wIxmYgF+Jci6nzV0wY= +github.com/fluxcd/helm-controller/api v0.23.1/go.mod h1:SJDOj+stJIjODvxpXysx/0KqRD1QnrG8PG5TpSN10Dk= +github.com/fluxcd/image-automation-controller/api v0.24.2 h1:jjK5xzaq5nXsHzNWAVt3RpK2xZRKA2QYPWbV+0sIWIs= +github.com/fluxcd/image-automation-controller/api v0.24.2/go.mod h1:xoYF5e5AuheYl7GQC9PZmv9DP6kdJzoVMFt54I/pdqk= +github.com/fluxcd/image-reflector-controller/api v0.20.1 h1:J6vkwMz0O3gzu+se/8IYRwd7nG+syiiTBUhssXcgWkI= +github.com/fluxcd/image-reflector-controller/api v0.20.1/go.mod h1:e9PMJZLetssAP8y4uX/QgQsIXpDXB8e5AkPqkChayLg= +github.com/fluxcd/kustomize-controller/api v0.27.1 h1:swOS46o/cA+e4wusRU5mZmlttwsO0nrlpSDQ3HhX3J4= +github.com/fluxcd/kustomize-controller/api v0.27.1/go.mod h1:4ItJQPqsXXyEosATIWmHmTsc3g5IwJbFjzZYPFB7fMM= +github.com/fluxcd/notification-controller/api v0.25.2 h1:wgc1NYntOXpqUpEqEeeuSTzc2xZBHPLwSpeVAPacyHE= +github.com/fluxcd/notification-controller/api v0.25.2/go.mod h1:tqIePx43IIA7llqdhS/1nCvmYF4LS4YMIu9cm4VxYkQ= +github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= +github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= +github.com/fluxcd/pkg/apis/kustomize v0.5.0 h1:4Rvr4zWQV2KyHkSQzq8IFPo10b0UVAGEgVaXByrGlNw= +github.com/fluxcd/pkg/apis/kustomize v0.5.0/go.mod h1:N3Rtc5wDm/omHH0YHUbILyUpRNmWvZGejb5/8Uyk6II= +github.com/fluxcd/pkg/apis/meta v0.15.0 h1:uDVzbDNdFjp0GSB9qMpcW6r4K7SAjBQlCxQENSkWgkQ= +github.com/fluxcd/pkg/apis/meta v0.15.0/go.mod h1:7NkgFrlswnx2QxP16+8zVNDBf+VhZ7PsDhkcJY6OSgQ= +github.com/fluxcd/pkg/runtime v0.17.0 h1:izKzDDWtS8QTQKV391DxqQBDb5eS0jDwWgzjE3KXjv0= +github.com/fluxcd/pkg/runtime v0.17.0/go.mod h1:jphxwbAf1SJRapl62MJ1jMExJottdgeu++YWq0yoHrU= +github.com/fluxcd/source-controller/api v0.28.0 h1:rSOkE1ngGNAI7j++ZZRzNIxFXZMhHgMi4qPdXDxEEtA= +github.com/fluxcd/source-controller/api v0.28.0/go.mod h1:S+SvFUy4PLGLV1XMddHsO3K1NCwIbiBJvljejXcRSAA= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= -github.com/form3tech-oss/jwt-go v3.2.3+incompatible h1:7ZaBxOI7TMoYBfyA3cQHErNNyAWIKUMIwqxEtgHOs5c= -github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpgI= github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= -github.com/getkin/kin-openapi v0.76.0/go.mod h1:660oXbgy5JFMKreazJaQTw7o+X00qeSyhcnluiMv+Xg= -github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4= github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= @@ -230,35 +179,34 @@ github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2 github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= +github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= +github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= -github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/zapr v1.2.0 h1:n4JnPI1T3Qq1SFEi/F8rwLrZERp2bso19PJZDB9dayk= -github.com/go-logr/zapr v1.2.0/go.mod h1:Qa4Bsj2Vb+FAVeAKsLD8RLQ+YRJB8YDmOAKxaBQf7Ro= +github.com/go-logr/zapr v1.2.3 h1:a9vnzlIBPQBBkeaR9IuMUfmVOrQlkoC4YfPoFkX3T7A= +github.com/go-logr/zapr v1.2.3/go.mod h1:eIauM6P8qSvTw5o2ez6UEAfGjQKrxQTl5EoK+Qa2oG4= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= github.com/go-openapi/jsonreference v0.19.5 h1:1WJP/wi4OjB4iV8KVbH73rQaoialJrqv8gitZLxGLtM= github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.14 h1:gm3vOOXfiuw5i9p5N9xJvfjvuofpyvLA9Wr6QfK5Fng= github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= -github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= +github.com/golang-jwt/jwt/v4 v4.2.0 h1:besgBTC8w8HjP6NzQdxwKH9Z5oQMZ24ThTrHp3cZ8eU= +github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= -github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -271,7 +219,7 @@ github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= +github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -287,14 +235,10 @@ github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QD github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= -github.com/google/cel-go v0.10.1/go.mod h1:U7ayypeSkw23szu4GaQTPJGx66c20mx8JklMSxrmI1w= -github.com/google/cel-spec v0.6.0/go.mod h1:Nwjgxy5CbjlPrtCWjeDjUyKMl8w41YBYGjsyDdqk0xA= github.com/google/gnostic v0.5.7-v3refs h1:FhTMOKj2VhjpouxvWJAV1TL304uMlb9zcDqkl6cEI54= github.com/google/gnostic v0.5.7-v3refs/go.mod h1:73MKFl6jIHelAJNaBGFzt3SPtZULs9dYrGFt8OiIsHQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -304,20 +248,16 @@ github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= @@ -325,30 +265,14 @@ github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= -github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= -github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-checkpoint v0.5.0/go.mod h1:7nfLNL10NsxqO4iWuW6tWW0HjZuDrwkBuEQsVcpCOgg= @@ -358,50 +282,31 @@ github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9n github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= github.com/hashicorp/go-hclog v0.9.2 h1:CG6TE5H9/JXsFWJCfoIVpKFIkFe6ysEuHirp4DxCsHI= github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= -github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= -github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-retryablehttp v0.7.1 h1:sUiuQAnLlbvmExtFQs72iFW/HXeUn8Z1aJLQ4LJJbTQ= github.com/hashicorp/go-retryablehttp v0.7.1/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= -github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= -github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= -github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-version v1.3.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go-version v1.5.0 h1:O293SZ2Eg+AAYijkVK3jR786Am1bhDEh2GHT0tIVE5E= github.com/hashicorp/go-version v1.5.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= +github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= +github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/hc-install v0.4.0 h1:cZkRFr1WVa0Ty6x5fTvL1TuO1flul231rWkGH92oYYk= github.com/hashicorp/hc-install v0.4.0/go.mod h1:5d155H8EC5ewegao9A4PUTMNPZaq+TbOzkJJZ4vrXeI= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= -github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= -github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= -github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= -github.com/hashicorp/terraform-exec v0.16.1 h1:NAwZFJW2L2SaCBVZoVaH8LPImLOGbPLkSHy0IYbs2uE= -github.com/hashicorp/terraform-exec v0.16.1/go.mod h1:aj0lVshy8l+MHhFNoijNHtqTJQI3Xlowv5EOsEaGO7M= -github.com/hashicorp/terraform-json v0.13.0 h1:Li9L+lKD1FO5RVFRM1mMMIBDoUHslOniyEi5CM+FWGY= -github.com/hashicorp/terraform-json v0.13.0/go.mod h1:y5OdLBCT+rxbwnpxZs9kGL7R9ExU76+cpdY8zHwoazk= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/hashicorp/terraform-exec v0.17.2 h1:EU7i3Fh7vDUI9nNRdMATCEfnm9axzTnad8zszYZ73Go= +github.com/hashicorp/terraform-exec v0.17.2/go.mod h1:tuIbsL2l4MlwwIZx9HPM+LOV9vVyEfBYu2GsO1uH3/8= +github.com/hashicorp/terraform-json v0.14.0 h1:sh9iZ1Y8IFJLx+xQiKHGud6/TSUCM0N8e17dKDpqV7s= +github.com/hashicorp/terraform-json v0.14.0/go.mod h1:5A9HIWPkk4e5aeeXIBbkcOvaZbIYnAIkEyqP2pNSckM= 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= github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= -github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/jpillora/backoff v0.0.0-20180909062703-3050d21c67d7/go.mod h1:2iMrUgbbvHEiQClaW2NsSzMyGHqN+rDFqY705q49KG0= @@ -414,18 +319,14 @@ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351 h1:DowS9hvgyYSX4TO5NpyC606/Z4SxnNYbT+WX27or6Ck= github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= -github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= -github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= @@ -435,37 +336,26 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= github.com/libgit2/git2go/v31 v31.7.9 h1:RUDiYm7+i3GY414acI31oDD8x5P0PZyWeZZfwpPuynE= github.com/libgit2/git2go/v31 v31.7.9/go.mod h1:c/rkJcBcUFx6wHaT++UwNpKvIsmPNqCeQ/vzO4DrEec= -github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.7.6 h1:8yTIVnZgCoiM1TgqoeTl+LfU5Jg6/xL3QhGQnimLYnA= github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 h1:YH424zrwLTlyHSH/GzLMJeu5zhYVZSx5RQxGKm1h96s= github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5/go.mod h1:PoGiBqKSQK1vIfQ+yVaFcGjDySHvym6FM1cNYnwzbrY= -github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= -github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= -github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= -github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.4.1 h1:CpVNEelQCZBooIPDn+AR3NpivK/TIKU8bDxdASFVQag= github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= -github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= -github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -473,175 +363,101 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= -github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= -github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= -github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= -github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.19.0 h1:4ieX6qQjPP/BfC3mpsAtIGGlxTWPeA3Inl/7DtXw1tw= -github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= +github.com/onsi/ginkgo/v2 v2.1.4 h1:GNapqRSid3zijZ9H77KrgVG4/8KqiyRsxcSxe+7ApXY= +github.com/onsi/gomega v1.20.0 h1:8W0cWlwFkflGPLltQvLRB7ZVD5HuP6ng320w2IS245Q= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.12.1 h1:ZiaPsmm9uiBeaSMRznKsCDNtPCS0T3JVDGF+06gjBzk= github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= +github.com/prometheus/client_golang v1.13.0 h1:b71QUfeo5M8gq2+evJdTPfZhYMAU0uKPkyPJ7TPsloU= +github.com/prometheus/client_golang v1.13.0/go.mod h1:vTeo+zgvILHsnnj/39Ou/1fPN5nJFOEMgftOUOmlvYQ= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.32.1 h1:hWIdL3N2HoUx3B8j3YN9mWor0qhY/NlEKZEaXxuIRh4= github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.37.0 h1:ccBbHCgIiT9uSoFY0vX8H3zsNR5eLt17/RQLUvn8pXE= +github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= -github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= +github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo= +github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/sebdah/goldie v1.0.0/go.mod h1:jXP4hmWywNEwZzhMuv2ccnqTSFpuq8iyQhtQdkkZBH4= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= -github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= -github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/soheilhy/cmux v0.1.5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= -github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo= -github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.1 h1:5TQK59W5E3v0r2duFAb7P95B6hEeOyEnHRa8MjYSMTY= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= -github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/vmihailenco/msgpack v3.3.3+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk= github.com/vmihailenco/msgpack/v4 v4.3.12/go.mod h1:gborTTJjAo/GWTqqRjrLCn9pgNN+NXzzngzBKDPIqw4= github.com/vmihailenco/tagparser v0.1.1/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= github.com/whilp/git-urls v1.0.0 h1:95f6UMWN5FKW71ECsXRUd3FVYiXdrE7aX4NZKcPmIjU= github.com/whilp/git-urls v1.0.0/go.mod h1:J16SAmobsqc3Qcy98brfl5f5+e0clUvg1krgwk/qCfE= github.com/xanzy/ssh-agent v0.3.0 h1:wUMzuKtKilRgBAD1sUb8gOwwRr2FGoBVumcjoOACClI= github.com/xanzy/ssh-agent v0.3.0/go.mod h1:3s9xbODqPuuhK9JV1R321M/FlMZSBvE5aY6eAcqrDh0= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/zclconf/go-cty v1.9.1/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uUAzyuvAk= +github.com/zclconf/go-cty v1.2.0/go.mod h1:hOPWgoHbaTUnI5k4D2ld+GRpFJSCe6bCM7m1q/N4PQ8= github.com/zclconf/go-cty v1.10.0 h1:mp9ZXQeIcN8kAwuqorjH+Q+njbJKjLrvB2yIh4q7U+0= github.com/zclconf/go-cty v1.10.0/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uUAzyuvAk= -go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= -go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= -go.etcd.io/etcd/api/v3 v3.5.1/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= -go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= -go.etcd.io/etcd/client/pkg/v3 v3.5.1/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= -go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= -go.etcd.io/etcd/client/v3 v3.5.0/go.mod h1:AIKXXVX/DQXtfTEqBryiLTUXwON+GuvO6Z7lLS/oTh0= -go.etcd.io/etcd/client/v3 v3.5.1/go.mod h1:OnjH4M8OnAotwaB2l9bVgZzRFKru7/ZMoS46OtKyd3Q= -go.etcd.io/etcd/pkg/v3 v3.5.0/go.mod h1:UzJGatBQ1lXChBkQF0AuAtkRQMYnHubxAEYIrC3MSsE= -go.etcd.io/etcd/raft/v3 v3.5.0/go.mod h1:UFOHSIvO/nKwd4lhkwabrTD3cqW5yVyYYf/KlD00Szc= -go.etcd.io/etcd/server/v3 v3.5.0/go.mod h1:3Ah5ruV+M+7RZr0+Y/5mNLwC+eQlni+mQmOVdCRJoS4= +github.com/zclconf/go-cty-debug v0.0.0-20191215020915-b22d67c1ba0b/go.mod h1:ZRKQfBXbGkpdV6QMzT3rU1kSTAnfu1dO8dPKjYprgj8= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= -go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= -go.opentelemetry.io/contrib v0.20.0/go.mod h1:G/EtFaa6qaN7+LxqfIAT3GiZa7Wv5DTBUzl5H4LY0Kc= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.20.0/go.mod h1:oVGt1LRbBOBq1A5BQLlUg9UaU/54aiHw8cgjV3aWZ/E= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.20.0/go.mod h1:2AboqHi0CiIZU0qwhtUfCYD1GeUzvvIXWNkhDt7ZMG4= -go.opentelemetry.io/otel v0.20.0/go.mod h1:Y3ugLH2oa81t5QO+Lty+zXf8zC9L26ax4Nzoxm/dooo= -go.opentelemetry.io/otel/exporters/otlp v0.20.0/go.mod h1:YIieizyaN77rtLJra0buKiNBOm9XQfkPEKBeuhoMwAM= -go.opentelemetry.io/otel/metric v0.20.0/go.mod h1:598I5tYlH1vzBjn+BTuhzTCSb/9debfNp6R3s7Pr1eU= -go.opentelemetry.io/otel/oteltest v0.20.0/go.mod h1:L7bgKf9ZB7qCwT9Up7i9/pn0PWIa9FqQ2IQ8LoxiGnw= -go.opentelemetry.io/otel/sdk v0.20.0/go.mod h1:g/IcepuwNsoiX5Byy2nNV0ySUF1em498m7hBWC279Yc= -go.opentelemetry.io/otel/sdk/export/metric v0.20.0/go.mod h1:h7RBNMsDJ5pmI1zExLi+bJK+Dr8NQCh0qGhm1KDnNlE= -go.opentelemetry.io/otel/sdk/metric v0.20.0/go.mod h1:knxiS8Xd4E/N+ZqKmUPf3gTTZ4/0TjTXukfxjzSTpHE= -go.opentelemetry.io/otel/trace v0.20.0/go.mod h1:6GjCW8zgDjwGHGa6GkyeB8+/5vjT16gUEi0Nf1iBdgw= -go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= -go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= -go.uber.org/zap v1.21.0 h1:WefMeulhovoZ2sYXz7st6K0sLj7bBhpiFaud4r4zST8= -go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= +go.uber.org/zap v1.23.0 h1:OjGQ5KQDEUawVHxNwQgPpiypGHOxo2mNZsOqTak4fFY= +go.uber.org/zap v1.23.0/go.mod h1:D+nX8jyLsMHMYrln8A0rJjFt/T/9/bGgIhAqxv5URuY= golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3 h1:0es+/5331RGQPcXlMfP+WrnIIS6dNnNRe0WB02W0F4M= golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -666,8 +482,6 @@ golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHl golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= @@ -676,17 +490,10 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -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.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180811021610-c39426892332/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -708,42 +515,27 @@ golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210326060303-6b1517762897/go.mod h1:uSPa2vr4CLtc/ILN5odXGNXS6mhrKVzTaCXzk9m6W3k= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210825183410-e898025ed96a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220225172249-27dd8689420f h1:oA4XRj0qtSt8Yo1Zms0CUlsT3KG69V2UGQWPBxujDmc= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b h1:PxfKdU9lEEDYjdIzOtC4qFWgkU2rGHdKlKowJSMN9h0= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= 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= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 h1:RerP+noqYHUQ8CMRcPlC2nvTa4dcBIjegkuWdcUDuqg= -golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b h1:clP8eMhB30EHdc0bd2Twtq6kgU7yl5ub2cQLSdrv1Dg= +golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= 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= @@ -754,13 +546,8 @@ golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -771,12 +558,8 @@ golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -791,41 +574,25 @@ golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210502180810-71e4cd670f79/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220517195934-5e4e11fc645e h1:w36l2Uw3dRan1K3TyXriXvY+6T56GNmlKGcqiQUJDfM= -golang.org/x/sys v0.0.0-20220517195934-5e4e11fc645e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f h1:v4INt8xihDGvnrfjMDVXGxw9wrfxYyCjk0KbXjhR55s= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -834,7 +601,6 @@ golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= @@ -842,30 +608,24 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 h1:vVKdlvoWBphwdxWKrFZEuM0kGgGLxUOYcY4U/2Vjg44= golang.org/x/time v0.0.0-20220210224613-90d013bbcef8/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -885,7 +645,6 @@ golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjs golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= @@ -893,16 +652,7 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.10-0.20220218145154-897bd77cd717/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -925,11 +675,6 @@ google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0M google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= -google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= -google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= -google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= -google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= -google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -959,31 +704,15 @@ google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201102152239-715cce707fb0/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= -google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= 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= @@ -996,16 +725,6 @@ google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKa google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= -google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= -google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= 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= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -1018,8 +737,8 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= -google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= +google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= 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= gopkg.in/check.v1 v1.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -1029,21 +748,13 @@ gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= -gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= -gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -1052,8 +763,6 @@ gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= -gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -1061,40 +770,31 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -k8s.io/api v0.24.1 h1:BjCMRDcyEYz03joa3K1+rbshwh1Ay6oB53+iUx2H8UY= -k8s.io/api v0.24.1/go.mod h1:JhoOvNiLXKTPQ60zh2g0ewpA+bnEYf5q44Flhquh4vQ= -k8s.io/apiextensions-apiserver v0.24.1 h1:5yBh9+ueTq/kfnHQZa0MAo6uNcPrtxPMpNQgorBaKS0= -k8s.io/apiextensions-apiserver v0.24.1/go.mod h1:A6MHfaLDGfjOc/We2nM7uewD5Oa/FnEbZ6cD7g2ca4Q= -k8s.io/apimachinery v0.24.1 h1:ShD4aDxTQKN5zNf8K1RQ2u98ELLdIW7jEnlO9uAMX/I= -k8s.io/apimachinery v0.24.1/go.mod h1:82Bi4sCzVBdpYjyI4jY6aHX+YCUchUIrZrXKedjd2UM= -k8s.io/apiserver v0.24.1/go.mod h1:dQWNMx15S8NqJMp0gpYfssyvhYnkilc1LpExd/dkLh0= -k8s.io/client-go v0.24.1 h1:w1hNdI9PFrzu3OlovVeTnf4oHDt+FJLd9Ndluvnb42E= -k8s.io/client-go v0.24.1/go.mod h1:f1kIDqcEYmwXS/vTbbhopMUbhKp2JhOeVTfxgaCIlF8= -k8s.io/code-generator v0.24.1/go.mod h1:dpVhs00hTuTdTY6jvVxvTFCk6gSMrtfRydbhZwHI15w= -k8s.io/component-base v0.24.1 h1:APv6W/YmfOWZfo+XJ1mZwep/f7g7Tpwvdbo9CQLDuts= -k8s.io/component-base v0.24.1/go.mod h1:DW5vQGYVCog8WYpNob3PMmmsY8A3L9QZNg4j/dV3s38= -k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= -k8s.io/gengo v0.0.0-20211129171323-c02415ce4185/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= +k8s.io/api v0.25.0 h1:H+Q4ma2U/ww0iGB78ijZx6DRByPz6/733jIuFpX70e0= +k8s.io/api v0.25.0/go.mod h1:ttceV1GyV1i1rnmvzT3BST08N6nGt+dudGrquzVQWPk= +k8s.io/apiextensions-apiserver v0.25.0 h1:CJ9zlyXAbq0FIW8CD7HHyozCMBpDSiH7EdrSTCZcZFY= +k8s.io/apiextensions-apiserver v0.25.0/go.mod h1:3pAjZiN4zw7R8aZC5gR0y3/vCkGlAjCazcg1me8iB/E= +k8s.io/apimachinery v0.25.0 h1:MlP0r6+3XbkUG2itd6vp3oxbtdQLQI94fD5gCS+gnoU= +k8s.io/apimachinery v0.25.0/go.mod h1:qMx9eAk0sZQGsXGu86fab8tZdffHbwUfsvzqKn4mfB0= +k8s.io/client-go v0.25.0 h1:CVWIaCETLMBNiTUta3d5nzRbXvY5Hy9Dpl+VvREpu5E= +k8s.io/client-go v0.25.0/go.mod h1:lxykvypVfKilxhTklov0wz1FoaUZ8X4EwbhS6rpRfN8= +k8s.io/component-base v0.25.0 h1:haVKlLkPCFZhkcqB6WCvpVxftrg6+FK5x1ZuaIDaQ5Y= +k8s.io/component-base v0.25.0/go.mod h1:F2Sumv9CnbBlqrpdf7rKZTmmd2meJq0HizeyY/yAFxk= k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= -k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= -k8s.io/klog/v2 v2.60.1 h1:VW25q3bZx9uE3vvdL6M8ezOX79vA2Aq1nEWLqNQclHc= -k8s.io/klog/v2 v2.60.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= -k8s.io/kube-openapi v0.0.0-20220328201542-3ee0da9b0b42 h1:Gii5eqf+GmIEwGNKQYQClCayuJCe2/4fZUvF7VG99sU= -k8s.io/kube-openapi v0.0.0-20220328201542-3ee0da9b0b42/go.mod h1:Z/45zLw8lUo4wdiUkI+v/ImEGAvu3WatcZl3lPMR4Rk= -k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9 h1:HNSDgDCrr/6Ly3WEGKZftiE7IY19Vz2GdbOCyI4qqhc= -k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/klog/v2 v2.70.1 h1:7aaoSdahviPmR+XkS7FyxlkkXs6tHISSG03RxleQAVQ= +k8s.io/klog/v2 v2.70.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1 h1:MQ8BAZPZlWk3S9K4a9NCkIFQtZShWqoha7snGixVgEA= +k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1/go.mod h1:C/N6wCaBHeBHkHUesQOQy2/MZqGgMAFPqGsGQLdbZBU= +k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed h1:jAne/RjBTyawwAy0utX5eqigAwz/lQhTmy+Hr/Cpue4= +k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.30/go.mod h1:fEO7lRTdivWO2qYVCVG7dEADOMo/MLDCVr8So2g88Uw= sigs.k8s.io/controller-runtime v0.11.2 h1:H5GTxQl0Mc9UjRJhORusqfJCIjBO8UtUxGggCwL1rLA= sigs.k8s.io/controller-runtime v0.11.2/go.mod h1:P6QCzrEjLaZGqHsfd+os7JQ+WFZhvB8MRFsn4dWF7O4= -sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2 h1:kDi4JBNAsJWfz1aEXhO8Jg87JJaPNLh5tIzYHgStQ9Y= -sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2/go.mod h1:B+TnT182UBxE84DiCz4CVE26eOSDAeYCpfDnC2kdKMY= -sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= -sigs.k8s.io/structured-merge-diff/v4 v4.2.1 h1:bKCqE9GvQ5tiVHn5rfn1r+yao3aLQEaLzkkmAkf+A6Y= -sigs.k8s.io/structured-merge-diff/v4 v4.2.1/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= -sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= +sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 h1:iXTIw73aPyC+oRdyqqvVJuloN1p0AC/kzH07hu3NE+k= +sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= +sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= +sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E= sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= diff --git a/tests/azure/terraform/aks/.terraform.lock.hcl b/tests/azure/terraform/aks/.terraform.lock.hcl index b5c9f96d..da879d8e 100644 --- a/tests/azure/terraform/aks/.terraform.lock.hcl +++ b/tests/azure/terraform/aks/.terraform.lock.hcl @@ -2,77 +2,80 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azuread" { - version = "1.6.0" - constraints = "1.6.0" + version = "2.28.0" + constraints = "2.28.0" hashes = [ - "h1:BlO53mX+Y2W//YqlCKvoxzofegFQk636XlKtmZYH0PY=", - "zh:0db70045a464d325fdb3d71809f0467844c3e2fcf1349e568bc51ad5035c99d9", - "zh:3629f1d7b4eba48d744b24c7cf7fe878d5ef5910a36b525507bd3d588010ccec", - "zh:5a73a45b6d1ff353810cc9b00d7c90a2fb328ba0a9ef3d24392b1500fb98741a", - "zh:7a6a9c390cf1bf752321abb8d0643c9f623e8c2ad871dfb378d64c9d90fada2d", - "zh:7d6de55d326b046dabc16bd7b655f008ff780c36ffc884b139a7c7da37b446d5", - "zh:8d725c618396ccae290e411296c892e08e776c3e9e5a82b0ef1f633a917146ec", - "zh:a206d1d8042bf66ca12b97334bbd6fcdf12fd6131f8cb4547c82b9fa7a701612", - "zh:b03ab4ff07dcb5ed8be8b0619c6ec9fb0da0c83594ccb0a1bff72f346083b530", - "zh:b6131f9d438b340a4016c770b569139ec7ac2532358a8ab783234e8c93d141d5", - "zh:ce9372d38e9e62accfd54f4669753000d3dcbae4b45686d74630eb63eb879f37", - "zh:df9a607c333d464d8bdeb248b1ff41e493c1d0661453a1e1ce396b89952a74ee", + "h1:22zcPLrP6T0FAGzhkx44Oc3SreGpzttng34JSYhoknE=", + "zh:0e8b008417d74f7d7f931effe48c0719f20789440c9c5932c2b1cf4110348f41", + "zh:1c3e89cf19118fc07d7b04257251fc9897e722c16e0a0df7b07fcd261f8c12e7", + "zh:2a2e4408fc1dc902553ff6a5751924c5e9a59df30f0668b55aa6c07264537c03", + "zh:2ab09b735888a7402bdd8e74f75a053ac102e0a01b876b0608a0c240dff57b2e", + "zh:2ac1f45bb1597726ff6822e1f9a7bc7227179c10b0b51533849b44ab278a05ed", + "zh:601a7821c7fbef870a1a2165a684e4fb4f4c84f6b85e0ce51ef7783a581cf594", + "zh:7f8e4dd03a3d4259e06b498ed0b04c6911aa99cf5f01018e2092899cd135c6e5", + "zh:8408143a24baaf4ad527aeecfaf11dfcd0fb6f25648958f2c94464717f776206", + "zh:bc836c1389f7b01537eb71ec709ea9d1cb4180814b70992ce3004356ce28d173", + "zh:d4b5571c96c2bafdf79494265f508dbe569f6fb16a5ddc41f22da22e9be029e9", + "zh:f1c2a1a13fe3725ba84b57a418adb1bd8c93db09dd880658a468cbd4832f9224", + "zh:f39b090d45674395fecb39add1260dd4565661e38eb40c4017c3fd84c8af1717", ] } provider "registry.terraform.io/hashicorp/azurerm" { - version = "2.76.0" - constraints = "2.76.0" + version = "3.20.0" + constraints = "3.20.0" hashes = [ - "h1:kF+u0s0DPnE5gMKhzQACWRUIdwZG1Ax4atXt9hk1J8M=", - "zh:137eb7c07d3d3c9fe123e74381c108c4442efba9fc051faa2ca603503ff2840f", - "zh:142a354dffd59a1d6b7f1614ab66a468ace3636d95933589a8d704ee8dbc4ea6", - "zh:4c343b4da8b86e4213c1b11f73337cec73a55b1fa95a0e0e0c79f34597d37cc3", - "zh:75d3109d48726fdbaad840d2fa294ec3362b32a3628c261af00f5c5608427521", - "zh:7b1e78c144c6ad2beebc798abb9e76c725bf34ced41df36dc0120a0f2426e801", - "zh:981235b01c3d4acf94c78cdd96624fd01d0a3622bc06b5c62aef3e788f1481c3", - "zh:bad819efae7293ce371409e1ed34197c3e879f61d3e44893af0ce68e6aaffde7", - "zh:c8008967722929deccfec9695754ae55028ce12311c321ae7a7c753dde162a44", - "zh:d38513d1138864269b2ff333b08a64a7949630d489f18e660630bbaff3b7ebb8", - "zh:e1f64d2d91b5f5cba6a9c5d35278a4918d332d7385a87f8e3466aaadb782a90f", - "zh:e93a377a1e823df69718686703b07f1712046eeb742006022e982f2e8a594161", + "h1:heH/4bYgajEFQ+fwSV9Zduvpyb7eTCQUv+gl201EFg8=", + "zh:0d534bb2fed67b5b58d3adb2b0be7a9986f62b34f40eae450dafc9454fb54db8", + "zh:19f6d5f196a35500e0f1ae9d9baee44f49b90858524338a7b8aaec06d3e3a047", + "zh:1d042648d2eaffde8858a8006b944374599c5e8c2f834ae74b97adedd1468142", + "zh:278ebac38cf3c1e6df4bc5de00e931bfc04298607f428aa84a932bbf26dee421", + "zh:48f29b802e2de7e6dd2452a012c633686fce5d7ad3eadb490a7b8c0967a9ebfa", + "zh:731bf2e97c4a519723682beb2e85e065bf0bf53b2f50e2ff7b15b39ea74e37ff", + "zh:7c8187ebca19ca8f6ef82d3d79a418ccfa6574bb99e63cc930fa46ff938a7921", + "zh:82fdb2052601f6fa925195e77506fb609ce8bb4a6f6e94cf6a5058252ef570d4", + "zh:995ca23bb3765a16c6b3138b468d920acff5742b22492324c836579e3344ea40", + "zh:a970131232ad41203382f6fa3f0014a22767cbfe28cd7562346184ea6e678d63", + "zh:bf5036675a7f0b8691fe393e2782a76c7943ba17eec7255e16a31c7547436a48", + "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } provider "registry.terraform.io/hashicorp/random" { - version = "3.1.0" + version = "3.3.2" hashes = [ - "h1:BZMEPucF+pbu9gsPk0G0BHx7YP04+tKdq2MrRDF1EDM=", - "zh:2bbb3339f0643b5daa07480ef4397bd23a79963cc364cdfbb4e86354cb7725bc", - "zh:3cd456047805bf639fbf2c761b1848880ea703a054f76db51852008b11008626", - "zh:4f251b0eda5bb5e3dc26ea4400dba200018213654b69b4a5f96abee815b4f5ff", - "zh:7011332745ea061e517fe1319bd6c75054a314155cb2c1199a5b01fe1889a7e2", - "zh:738ed82858317ccc246691c8b85995bc125ac3b4143043219bd0437adc56c992", - "zh:7dbe52fac7bb21227acd7529b487511c91f4107db9cc4414f50d04ffc3cab427", - "zh:a3a9251fb15f93e4cfc1789800fc2d7414bbc18944ad4c5c98f466e6477c42bc", - "zh:a543ec1a3a8c20635cf374110bd2f87c07374cf2c50617eee2c669b3ceeeaa9f", - "zh:d9ab41d556a48bd7059f0810cf020500635bfc696c9fc3adab5ea8915c1d886b", - "zh:d9e13427a7d011dbd654e591b0337e6074eef8c3b9bb11b2e39eaaf257044fd7", - "zh:f7605bd1437752114baf601bdf6931debe6dc6bfe3006eb7e9bb9080931dca8a", + "h1:H5V+7iXol/EHB2+BUMzGlpIiCOdV74H8YjzCxnSAWcg=", + "zh:038293aebfede983e45ee55c328e3fde82ae2e5719c9bd233c324cfacc437f9c", + "zh:07eaeab03a723d83ac1cc218f3a59fceb7bbf301b38e89a26807d1c93c81cef8", + "zh:427611a4ce9d856b1c73bea986d841a969e4c2799c8ac7c18798d0cc42b78d32", + "zh:49718d2da653c06a70ba81fd055e2b99dfd52dcb86820a6aeea620df22cd3b30", + "zh:5574828d90b19ab762604c6306337e6cd430e65868e13ef6ddb4e25ddb9ad4c0", + "zh:7222e16f7833199dabf1bc5401c56d708ec052b2a5870988bc89ff85b68a5388", + "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", + "zh:b1b2d7d934784d2aee98b0f8f07a8ccfc0410de63493ae2bf2222c165becf938", + "zh:b8f85b6a20bd264fcd0814866f415f0a368d1123cd7879c8ebbf905d370babc8", + "zh:c3813133acc02bbebddf046d9942e8ba5c35fc99191e3eb057957dafc2929912", + "zh:e7a41dbc919d1de800689a81c240c27eec6b9395564630764ebb323ea82ac8a9", + "zh:ee6d23208449a8eaa6c4f203e33f5176fa795b4b9ecf32903dffe6e2574732c2", ] } provider "registry.terraform.io/microsoft/azuredevops" { - version = "0.1.7" - constraints = "0.1.7" + version = "0.2.2" + constraints = "0.2.2" hashes = [ - "h1:AWNWqJ3XhlKp3xdJF+3WKdK1zVoCFYInQvi06exsBzg=", - "zh:0c024992f2282ef73d4829e487ec8482dd98e9272b903f2e5979f5f62567ee4e", - "zh:47fef8f57dfdca6aebe5a907b4866880007512019d9bec29805fc83501412309", - "zh:692736c501c6b987a4a74c69fb7702a54969180706d1f67eff13e6ed2a0f9fec", - "zh:6c3c4339206f5dcbc9d10fb2fe343652e7e14255223dcece5bf79ef9030858ef", - "zh:77dfc63377b8d8fe24cbbe479ead18bfd1c7ded067fd694b6532434d6305ad31", - "zh:93dba26dbade208a1cba43333f104a64252ca2404636ab033702da29648bfaaa", - "zh:952d28b3e6c137de9b8700d2b748e5a4a2aa53ed07005f0f7abdd66b84cc63fe", - "zh:a7b8238b8b2f04ad2d720a207377bfc2066d54b1d9d7285f2535afc43ff80fdb", - "zh:bb23d8fc3cdd3c01d7620dadb2ba7b724706f2112d7738e135d1be1455682f5e", - "zh:cb4da640beb5fc59296479c201a03351789496c04aaa57ae1530a7aac9095b92", - "zh:ede6fb7ab598081fdddac56d470bae14448271dfd43a645bc02d136643391ebe", - "zh:fd8291e6dc9118323a744660326a0f11de2a475c4a358e50f480feed1f3bb080", + "h1:oKfPQ5Tp9WNeacY08gMifP3G9I//o3LW6qTLsveJwi0=", + "zh:016142d26ec662949ba95b6c84672b243b54bbdca04cf8714fe0b4318783a72d", + "zh:0337b3c4e023bb56b23a5d2d9abe917f197eed378fa69803e9d0b11a36211e15", + "zh:240c9636660292eeb99bd892602eafe2e5c22b469b082de6963e31dab9e0092e", + "zh:439151590a489a7c0cde50ee701fdbf254e67bdbeaa2acd2a99d005c4051d518", + "zh:6086f5eab87662678eef7bc83041eab5667e92189eb3089b966aeb2cdb58d299", + "zh:94a64223905bb3cef2c38e163ae56ef841422e6511a79f8e60272edd7f8fc67f", + "zh:9d9545445607c5ba6482da0137464d5de4c3459ae1671e6ff94e337e5943c0eb", + "zh:a53bfdea73985ed31acbadd200b295745662a4a54e8c37f050faf71dab7deb8b", + "zh:aa6943db7093b2556fcc2ee5b8b5a8a48e625ded2b063183fbc5a52c94d133f2", + "zh:af4729e8fe8ec255e4c4ca0e6dd4cf43d855bfe4c45b2aa6e47d8c35be55813d", + "zh:bdf8752a6cd12ba3a33597bf7519825000a498b655c72be8c8df504bb9f70fe5", + "zh:c760fa7bc5c62d56c54ef41b4b03b0ae391149f46f36c8c8a55d2511e7f8e599", ] } diff --git a/tests/azure/terraform/aks/aks.tf b/tests/azure/terraform/aks/aks.tf index 1356be34..aab1a0cf 100644 --- a/tests/azure/terraform/aks/aks.tf +++ b/tests/azure/terraform/aks/aks.tf @@ -16,9 +16,7 @@ resource "azurerm_kubernetes_cluster" "this" { type = "SystemAssigned" } - role_based_access_control { - enabled = true - } + role_based_access_control_enabled = true network_profile { network_plugin = "kubenet" diff --git a/tests/azure/terraform/aks/main.tf b/tests/azure/terraform/aks/main.tf index 5dc44b99..0e70f4a1 100644 --- a/tests/azure/terraform/aks/main.tf +++ b/tests/azure/terraform/aks/main.tf @@ -6,20 +6,20 @@ terraform { key = "prod.terraform.tfstate" } - required_version = "1.0.7" + required_version = "1.2.8" required_providers { azurerm = { source = "hashicorp/azurerm" - version = "2.76.0" + version = "3.20.0" } azuread = { source = "hashicorp/azuread" - version = "1.6.0" + version = "2.28.0" } azuredevops = { source = "microsoft/azuredevops" - version = "0.1.7" + version = "0.2.2" } } } diff --git a/tests/azure/terraform/aks/outputs.tf b/tests/azure/terraform/aks/outputs.tf index 4833c70a..21a8f1de 100644 --- a/tests/azure/terraform/aks/outputs.tf +++ b/tests/azure/terraform/aks/outputs.tf @@ -5,18 +5,22 @@ output "aks_kube_config" { output "aks_host" { value = azurerm_kubernetes_cluster.this.kube_config[0].host + sensitive = true } output "aks_client_certificate" { value = base64decode(azurerm_kubernetes_cluster.this.kube_config[0].client_certificate) + sensitive = true } output "aks_client_key" { value = base64decode(azurerm_kubernetes_cluster.this.kube_config[0].client_key) + sensitive = true } output "aks_cluster_ca_certificate" { value = base64decode(azurerm_kubernetes_cluster.this.kube_config[0].cluster_ca_certificate) + sensitive = true } output "shared_pat" { diff --git a/tests/azure/terraform/shared/.terraform.lock.hcl b/tests/azure/terraform/shared/.terraform.lock.hcl index 749c3583..03a5e2fe 100644 --- a/tests/azure/terraform/shared/.terraform.lock.hcl +++ b/tests/azure/terraform/shared/.terraform.lock.hcl @@ -2,57 +2,60 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azuread" { - version = "1.6.0" - constraints = "1.6.0" + version = "2.28.0" + constraints = "2.28.0" hashes = [ - "h1:BlO53mX+Y2W//YqlCKvoxzofegFQk636XlKtmZYH0PY=", - "zh:0db70045a464d325fdb3d71809f0467844c3e2fcf1349e568bc51ad5035c99d9", - "zh:3629f1d7b4eba48d744b24c7cf7fe878d5ef5910a36b525507bd3d588010ccec", - "zh:5a73a45b6d1ff353810cc9b00d7c90a2fb328ba0a9ef3d24392b1500fb98741a", - "zh:7a6a9c390cf1bf752321abb8d0643c9f623e8c2ad871dfb378d64c9d90fada2d", - "zh:7d6de55d326b046dabc16bd7b655f008ff780c36ffc884b139a7c7da37b446d5", - "zh:8d725c618396ccae290e411296c892e08e776c3e9e5a82b0ef1f633a917146ec", - "zh:a206d1d8042bf66ca12b97334bbd6fcdf12fd6131f8cb4547c82b9fa7a701612", - "zh:b03ab4ff07dcb5ed8be8b0619c6ec9fb0da0c83594ccb0a1bff72f346083b530", - "zh:b6131f9d438b340a4016c770b569139ec7ac2532358a8ab783234e8c93d141d5", - "zh:ce9372d38e9e62accfd54f4669753000d3dcbae4b45686d74630eb63eb879f37", - "zh:df9a607c333d464d8bdeb248b1ff41e493c1d0661453a1e1ce396b89952a74ee", + "h1:22zcPLrP6T0FAGzhkx44Oc3SreGpzttng34JSYhoknE=", + "zh:0e8b008417d74f7d7f931effe48c0719f20789440c9c5932c2b1cf4110348f41", + "zh:1c3e89cf19118fc07d7b04257251fc9897e722c16e0a0df7b07fcd261f8c12e7", + "zh:2a2e4408fc1dc902553ff6a5751924c5e9a59df30f0668b55aa6c07264537c03", + "zh:2ab09b735888a7402bdd8e74f75a053ac102e0a01b876b0608a0c240dff57b2e", + "zh:2ac1f45bb1597726ff6822e1f9a7bc7227179c10b0b51533849b44ab278a05ed", + "zh:601a7821c7fbef870a1a2165a684e4fb4f4c84f6b85e0ce51ef7783a581cf594", + "zh:7f8e4dd03a3d4259e06b498ed0b04c6911aa99cf5f01018e2092899cd135c6e5", + "zh:8408143a24baaf4ad527aeecfaf11dfcd0fb6f25648958f2c94464717f776206", + "zh:bc836c1389f7b01537eb71ec709ea9d1cb4180814b70992ce3004356ce28d173", + "zh:d4b5571c96c2bafdf79494265f508dbe569f6fb16a5ddc41f22da22e9be029e9", + "zh:f1c2a1a13fe3725ba84b57a418adb1bd8c93db09dd880658a468cbd4832f9224", + "zh:f39b090d45674395fecb39add1260dd4565661e38eb40c4017c3fd84c8af1717", ] } provider "registry.terraform.io/hashicorp/azurerm" { - version = "2.76.0" - constraints = "2.76.0" + version = "3.20.0" + constraints = "3.20.0" hashes = [ - "h1:kF+u0s0DPnE5gMKhzQACWRUIdwZG1Ax4atXt9hk1J8M=", - "zh:137eb7c07d3d3c9fe123e74381c108c4442efba9fc051faa2ca603503ff2840f", - "zh:142a354dffd59a1d6b7f1614ab66a468ace3636d95933589a8d704ee8dbc4ea6", - "zh:4c343b4da8b86e4213c1b11f73337cec73a55b1fa95a0e0e0c79f34597d37cc3", - "zh:75d3109d48726fdbaad840d2fa294ec3362b32a3628c261af00f5c5608427521", - "zh:7b1e78c144c6ad2beebc798abb9e76c725bf34ced41df36dc0120a0f2426e801", - "zh:981235b01c3d4acf94c78cdd96624fd01d0a3622bc06b5c62aef3e788f1481c3", - "zh:bad819efae7293ce371409e1ed34197c3e879f61d3e44893af0ce68e6aaffde7", - "zh:c8008967722929deccfec9695754ae55028ce12311c321ae7a7c753dde162a44", - "zh:d38513d1138864269b2ff333b08a64a7949630d489f18e660630bbaff3b7ebb8", - "zh:e1f64d2d91b5f5cba6a9c5d35278a4918d332d7385a87f8e3466aaadb782a90f", - "zh:e93a377a1e823df69718686703b07f1712046eeb742006022e982f2e8a594161", + "h1:heH/4bYgajEFQ+fwSV9Zduvpyb7eTCQUv+gl201EFg8=", + "zh:0d534bb2fed67b5b58d3adb2b0be7a9986f62b34f40eae450dafc9454fb54db8", + "zh:19f6d5f196a35500e0f1ae9d9baee44f49b90858524338a7b8aaec06d3e3a047", + "zh:1d042648d2eaffde8858a8006b944374599c5e8c2f834ae74b97adedd1468142", + "zh:278ebac38cf3c1e6df4bc5de00e931bfc04298607f428aa84a932bbf26dee421", + "zh:48f29b802e2de7e6dd2452a012c633686fce5d7ad3eadb490a7b8c0967a9ebfa", + "zh:731bf2e97c4a519723682beb2e85e065bf0bf53b2f50e2ff7b15b39ea74e37ff", + "zh:7c8187ebca19ca8f6ef82d3d79a418ccfa6574bb99e63cc930fa46ff938a7921", + "zh:82fdb2052601f6fa925195e77506fb609ce8bb4a6f6e94cf6a5058252ef570d4", + "zh:995ca23bb3765a16c6b3138b468d920acff5742b22492324c836579e3344ea40", + "zh:a970131232ad41203382f6fa3f0014a22767cbfe28cd7562346184ea6e678d63", + "zh:bf5036675a7f0b8691fe393e2782a76c7943ba17eec7255e16a31c7547436a48", + "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } provider "registry.terraform.io/hashicorp/random" { - version = "3.1.0" + version = "3.3.2" hashes = [ - "h1:BZMEPucF+pbu9gsPk0G0BHx7YP04+tKdq2MrRDF1EDM=", - "zh:2bbb3339f0643b5daa07480ef4397bd23a79963cc364cdfbb4e86354cb7725bc", - "zh:3cd456047805bf639fbf2c761b1848880ea703a054f76db51852008b11008626", - "zh:4f251b0eda5bb5e3dc26ea4400dba200018213654b69b4a5f96abee815b4f5ff", - "zh:7011332745ea061e517fe1319bd6c75054a314155cb2c1199a5b01fe1889a7e2", - "zh:738ed82858317ccc246691c8b85995bc125ac3b4143043219bd0437adc56c992", - "zh:7dbe52fac7bb21227acd7529b487511c91f4107db9cc4414f50d04ffc3cab427", - "zh:a3a9251fb15f93e4cfc1789800fc2d7414bbc18944ad4c5c98f466e6477c42bc", - "zh:a543ec1a3a8c20635cf374110bd2f87c07374cf2c50617eee2c669b3ceeeaa9f", - "zh:d9ab41d556a48bd7059f0810cf020500635bfc696c9fc3adab5ea8915c1d886b", - "zh:d9e13427a7d011dbd654e591b0337e6074eef8c3b9bb11b2e39eaaf257044fd7", - "zh:f7605bd1437752114baf601bdf6931debe6dc6bfe3006eb7e9bb9080931dca8a", + "h1:H5V+7iXol/EHB2+BUMzGlpIiCOdV74H8YjzCxnSAWcg=", + "zh:038293aebfede983e45ee55c328e3fde82ae2e5719c9bd233c324cfacc437f9c", + "zh:07eaeab03a723d83ac1cc218f3a59fceb7bbf301b38e89a26807d1c93c81cef8", + "zh:427611a4ce9d856b1c73bea986d841a969e4c2799c8ac7c18798d0cc42b78d32", + "zh:49718d2da653c06a70ba81fd055e2b99dfd52dcb86820a6aeea620df22cd3b30", + "zh:5574828d90b19ab762604c6306337e6cd430e65868e13ef6ddb4e25ddb9ad4c0", + "zh:7222e16f7833199dabf1bc5401c56d708ec052b2a5870988bc89ff85b68a5388", + "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", + "zh:b1b2d7d934784d2aee98b0f8f07a8ccfc0410de63493ae2bf2222c165becf938", + "zh:b8f85b6a20bd264fcd0814866f415f0a368d1123cd7879c8ebbf905d370babc8", + "zh:c3813133acc02bbebddf046d9942e8ba5c35fc99191e3eb057957dafc2929912", + "zh:e7a41dbc919d1de800689a81c240c27eec6b9395564630764ebb323ea82ac8a9", + "zh:ee6d23208449a8eaa6c4f203e33f5176fa795b4b9ecf32903dffe6e2574732c2", ] } diff --git a/tests/azure/terraform/shared/acr.tf b/tests/azure/terraform/shared/acr.tf index 72a132c6..a339feed 100644 --- a/tests/azure/terraform/shared/acr.tf +++ b/tests/azure/terraform/shared/acr.tf @@ -2,5 +2,5 @@ resource "azurerm_container_registry" "this" { name = "acrapps${random_pet.suffix.id}" resource_group_name = azurerm_resource_group.this.name location = azurerm_resource_group.this.location - sku = "standard" + sku = "Standard" } diff --git a/tests/azure/terraform/shared/main.tf b/tests/azure/terraform/shared/main.tf index 3be9d61f..36623f6b 100644 --- a/tests/azure/terraform/shared/main.tf +++ b/tests/azure/terraform/shared/main.tf @@ -6,16 +6,16 @@ terraform { key = "prod.terraform.tfstate" } - required_version = "1.0.7" + required_version = "1.2.8" required_providers { azurerm = { source = "hashicorp/azurerm" - version = "2.76.0" + version = "3.20.0" } azuread = { source = "hashicorp/azuread" - version = "1.6.0" + version = "2.28.0" } } } From 20557f9f154df01e6ac62d8cde20eb8857ce5dcb Mon Sep 17 00:00:00 2001 From: Daniel Holbach Date: Tue, 30 Aug 2022 14:50:05 +0200 Subject: [PATCH 228/818] update to new doc links structure Signed-off-by: Daniel Holbach --- CONTRIBUTING.md | 2 +- README.md | 50 +++++++++---------- docs/_redirects | 14 +++--- .../generic/secret-azure-credentials.yaml | 4 +- .../aws/config-patches.yaml | 4 +- rfcs/0002-helm-oci/README.md | 2 +- 6 files changed, 38 insertions(+), 38 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c2886fd7..282b4c95 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -59,7 +59,7 @@ This project is composed of: ### Understanding the code To get started with developing controllers, you might want to review -[our guide](https://fluxcd.io/docs/gitops-toolkit/source-watcher/) which +[our guide](https://fluxcd.io/flux/gitops-toolkit/source-watcher/) which walks you through writing a short and concise controller that watches out for source changes. diff --git a/README.md b/README.md index b0a8b4b4..abed3040 100644 --- a/README.md +++ b/README.md @@ -24,14 +24,14 @@ Flux is a Cloud Native Computing Foundation ([CNCF](https://www.cncf.io/)) proje ## Quickstart and documentation -To get started check out this [guide](https://fluxcd.io/docs/get-started/) +To get started check out this [guide](https://fluxcd.io/flux/get-started/) on how to bootstrap Flux on Kubernetes and deploy a sample application in a GitOps manner. For more comprehensive documentation, see the following guides: -- [Ways of structuring your repositories](https://fluxcd.io/docs/guides/repository-structure/) -- [Manage Helm Releases](https://fluxcd.io/docs/guides/helmreleases/) -- [Automate image updates to Git](https://fluxcd.io/docs/guides/image-update/) -- [Manage Kubernetes secrets with Mozilla SOPS](https://fluxcd.io/docs/guides/mozilla-sops/) +- [Ways of structuring your repositories](https://fluxcd.io/flux/guides/repository-structure/) +- [Manage Helm Releases](https://fluxcd.io/flux/guides/helmreleases/) +- [Automate image updates to Git](https://fluxcd.io/flux/guides/image-update/) +- [Manage Kubernetes secrets with Mozilla SOPS](https://fluxcd.io/flux/guides/mozilla-sops/) If you need help, please refer to our **[Support page](https://fluxcd.io/support/)**. @@ -46,28 +46,28 @@ automation tooling. You can use the toolkit to extend Flux, or to build your own systems for continuous delivery -- see [the developer -guides](https://fluxcd.io/docs/gitops-toolkit/source-watcher/). +guides](https://fluxcd.io/flux/gitops-toolkit/source-watcher/). ### Components -- [Source Controller](https://fluxcd.io/docs/components/source/) - - [GitRepository CRD](https://fluxcd.io/docs/components/source/gitrepositories/) - - [OCIRepository CRD](https://fluxcd.io/docs/components/source/ocirepositories/) - - [HelmRepository CRD](https://fluxcd.io/docs/components/source/helmrepositories/) - - [HelmChart CRD](https://fluxcd.io/docs/components/source/helmcharts/) - - [Bucket CRD](https://fluxcd.io/docs/components/source/buckets/) -- [Kustomize Controller](https://fluxcd.io/docs/components/kustomize/) - - [Kustomization CRD](https://fluxcd.io/docs/components/kustomize/kustomization/) -- [Helm Controller](https://fluxcd.io/docs/components/helm/) - - [HelmRelease CRD](https://fluxcd.io/docs/components/helm/helmreleases/) -- [Notification Controller](https://fluxcd.io/docs/components/notification/) - - [Provider CRD](https://fluxcd.io/docs/components/notification/provider/) - - [Alert CRD](https://fluxcd.io/docs/components/notification/alert/) - - [Receiver CRD](https://fluxcd.io/docs/components/notification/receiver/) -- [Image Automation Controllers](https://fluxcd.io/docs/components/image/) - - [ImageRepository CRD](https://fluxcd.io/docs/components/image/imagerepositories/) - - [ImagePolicy CRD](https://fluxcd.io/docs/components/image/imagepolicies/) - - [ImageUpdateAutomation CRD](https://fluxcd.io/docs/components/image/imageupdateautomations/) +- [Source Controller](https://fluxcd.io/flux/components/source/) + - [GitRepository CRD](https://fluxcd.io/flux/components/source/gitrepositories/) + - [OCIRepository CRD](https://fluxcd.io/flux/components/source/ocirepositories/) + - [HelmRepository CRD](https://fluxcd.io/flux/components/source/helmrepositories/) + - [HelmChart CRD](https://fluxcd.io/flux/components/source/helmcharts/) + - [Bucket CRD](https://fluxcd.io/flux/components/source/buckets/) +- [Kustomize Controller](https://fluxcd.io/flux/components/kustomize/) + - [Kustomization CRD](https://fluxcd.io/flux/components/kustomize/kustomization/) +- [Helm Controller](https://fluxcd.io/flux/components/helm/) + - [HelmRelease CRD](https://fluxcd.io/flux/components/helm/helmreleases/) +- [Notification Controller](https://fluxcd.io/flux/components/notification/) + - [Provider CRD](https://fluxcd.io/flux/components/notification/provider/) + - [Alert CRD](https://fluxcd.io/flux/components/notification/alert/) + - [Receiver CRD](https://fluxcd.io/flux/components/notification/receiver/) +- [Image Automation Controllers](https://fluxcd.io/flux/components/image/) + - [ImageRepository CRD](https://fluxcd.io/flux/components/image/imagerepositories/) + - [ImagePolicy CRD](https://fluxcd.io/flux/components/image/imagepolicies/) + - [ImageUpdateAutomation CRD](https://fluxcd.io/flux/components/image/imageupdateautomations/) ## Community @@ -75,7 +75,7 @@ Need help or want to contribute? Please see the links below. The Flux project is new contributors and there are a multitude of ways to get involved. - Getting Started? - - Look at our [Get Started guide](https://fluxcd.io/docs/get-started/) and give us feedback + - Look at our [Get Started guide](https://fluxcd.io/flux/get-started/) and give us feedback - Need help? - First: Ask questions on our [GH Discussions page](https://github.com/fluxcd/flux2/discussions) - Second: Talk to us in the #flux channel on [CNCF Slack](https://slack.cncf.io/) diff --git a/docs/_redirects b/docs/_redirects index 4b23c408..4860a76c 100644 --- a/docs/_redirects +++ b/docs/_redirects @@ -1,18 +1,18 @@ # individual rules -/core-concepts https://fluxcd.io/docs/concepts 301! +/core-concepts https://fluxcd.io/flux/concepts 301! /contributing https://fluxcd.io/contributing 301! /install.sh https://fluxcd.io/install.sh 301! # refer to https://github.com/fluxcd/flux2/discussions/367 -/dev-guides/* https://fluxcd.io/docs/gitops-toolkit/:splat 301! +/dev-guides/* https://fluxcd.io/flux/gitops-toolkit/:splat 301! # this is how things looked in the navbar anyway..? -/guides/faq-migration https://fluxcd.io/docs/migration/faq-migration 301! -/guides/flux-v1-automation-migration https://fluxcd.io/docs/migration/flux-v1-automation-migration 301! -/guides/flux-v1-migration https://fluxcd.io/docs/migration/flux-v1-migration 301! -/guides/helm-operator-migration https://fluxcd.io/docs/migration/helm-operator-migration 301! +/guides/faq-migration https://fluxcd.io/flux/migration/faq-migration 301! +/guides/flux-v1-automation-migration https://fluxcd.io/flux/migration/flux-v1-automation-migration 301! +/guides/flux-v1-migration https://fluxcd.io/flux/migration/flux-v1-migration 301! +/guides/helm-operator-migration https://fluxcd.io/flux/migration/helm-operator-migration 301! # catch all -/* https://fluxcd.io/docs/:splat 301! +/* https://fluxcd.io/flux/:splat 301! diff --git a/manifests/integrations/eventhub-credentials-sync/_cronjobs/generic/secret-azure-credentials.yaml b/manifests/integrations/eventhub-credentials-sync/_cronjobs/generic/secret-azure-credentials.yaml index 8a6d8a2c..af2da5b3 100644 --- a/manifests/integrations/eventhub-credentials-sync/_cronjobs/generic/secret-azure-credentials.yaml +++ b/manifests/integrations/eventhub-credentials-sync/_cronjobs/generic/secret-azure-credentials.yaml @@ -10,5 +10,5 @@ metadata: type: Opaque # This is just a example secret, you should never store secrets in git. # One way forward can be to use sealed-secrets or SOPS -# https://fluxcd.io/docs/guides/sealed-secrets/ -# https://fluxcd.io/docs/guides/mozilla-sops/ +# https://fluxcd.io/flux/guides/sealed-secrets/ +# https://fluxcd.io/flux/guides/mozilla-sops/ diff --git a/manifests/integrations/registry-credentials-sync/aws/config-patches.yaml b/manifests/integrations/registry-credentials-sync/aws/config-patches.yaml index b99001a6..f57ccf79 100644 --- a/manifests/integrations/registry-credentials-sync/aws/config-patches.yaml +++ b/manifests/integrations/registry-credentials-sync/aws/config-patches.yaml @@ -24,8 +24,8 @@ metadata: ## If not using IRSA, set the AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY environment variables ## Store these values in a Secret and load them in the container using envFrom. ## For managing this secret via GitOps, consider using SOPS or SealedSecrets and add that manifest in a resource file for this kustomize build. -## https://fluxcd.io/docs/guides/mozilla-sops/ -## https://fluxcd.io/docs/guides/sealed-secrets/ +## https://fluxcd.io/flux/guides/mozilla-sops/ +## https://fluxcd.io/flux/guides/sealed-secrets/ # --- # apiVersion: apps/v1 # kind: Deployment diff --git a/rfcs/0002-helm-oci/README.md b/rfcs/0002-helm-oci/README.md index a5413917..7c6c5b72 100644 --- a/rfcs/0002-helm-oci/README.md +++ b/rfcs/0002-helm-oci/README.md @@ -37,7 +37,7 @@ When the `spec.type` field is set to `oci`, the `spec.url` field must be prefixe For `oci://` URLs, source-controller will use the Helm SDK and the `oras` library to connect to the OCI remote storage. Introduce an optional field called `provider` for -[context-based authorization](https://fluxcd.io/docs/security/contextual-authorization/) +[context-based authorization](https://fluxcd.io/flux/security/contextual-authorization/) to AWS, Azure and Google Cloud. The `spec.provider` is ignored when `spec.type` is set to `default`. From 7b95e90a33e29adf89c5f48d258f78493098de01 Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Wed, 31 Aug 2022 17:39:25 +0100 Subject: [PATCH 229/818] Update flux logs to accomodate the new format Signed-off-by: Somtochi Onyekwere --- cmd/flux/logs.go | 21 +++++++++++---------- cmd/flux/logs_test.go | 7 ++++--- go.mod | 10 +++++----- go.sum | 20 ++++++++++---------- 4 files changed, 30 insertions(+), 28 deletions(-) diff --git a/cmd/flux/logs.go b/cmd/flux/logs.go index c9f78239..6acc65f6 100644 --- a/cmd/flux/logs.go +++ b/cmd/flux/logs.go @@ -252,7 +252,7 @@ func logRequest(ctx context.Context, request rest.ResponseWrapper, w io.Writer) scanner := bufio.NewScanner(stream) - const logTmpl = "{{.Timestamp}} {{.Level}} {{.Kind}}{{if .Name}}/{{.Name}}.{{.Namespace}}{{end}} - {{.Message}} {{.Error}}\n" + const logTmpl = "{{.Timestamp}} {{.Level}} {{or .Kind .ControllerKind}}{{if .Name}}/{{.Name}}.{{.Namespace}}{{end}} - {{.Message}} {{.Error}}\n" t, err := template.New("log").Parse(logTmpl) if err != nil { return fmt.Errorf("unable to create template, err: %s", err) @@ -278,7 +278,7 @@ func logRequest(ctx context.Context, request rest.ResponseWrapper, w io.Writer) func filterPrintLog(t *template.Template, l *ControllerLogEntry, w io.Writer) { if (logsArgs.logLevel == "" || logsArgs.logLevel == l.Level) && - (logsArgs.kind == "" || strings.EqualFold(logsArgs.kind, l.Kind)) && + (logsArgs.kind == "" || strings.EqualFold(logsArgs.kind, l.Kind) || strings.EqualFold(logsArgs.kind, l.ControllerKind)) && (logsArgs.name == "" || strings.EqualFold(logsArgs.name, l.Name)) && (logsArgs.allNamespaces || strings.EqualFold(*kubeconfigArgs.Namespace, l.Namespace)) { err := t.Execute(w, l) @@ -289,12 +289,13 @@ func filterPrintLog(t *template.Template, l *ControllerLogEntry, w io.Writer) { } type ControllerLogEntry struct { - Timestamp string `json:"ts"` - Level flags.LogLevel `json:"level"` - Message string `json:"msg"` - Error string `json:"error,omitempty"` - Logger string `json:"logger"` - Kind string `json:"reconciler kind,omitempty"` - Name string `json:"name,omitempty"` - Namespace string `json:"namespace,omitempty"` + Timestamp string `json:"ts"` + Level flags.LogLevel `json:"level"` + Message string `json:"msg"` + Error string `json:"error,omitempty"` + Logger string `json:"logger"` + Kind string `json:"reconciler kind,omitempty"` + ControllerKind string `json:"controllerKind,omitempty"` + Name string `json:"name,omitempty"` + Namespace string `json:"namespace,omitempty"` } diff --git a/cmd/flux/logs_test.go b/cmd/flux/logs_test.go index ba63f051..cb07234e 100644 --- a/cmd/flux/logs_test.go +++ b/cmd/flux/logs_test.go @@ -170,12 +170,13 @@ func TestLogRequest(t *testing.T) { } } -var testPodLogs = `{"level":"info","ts":"2022-08-02T12:55:34.419Z","logger":"controller.gitrepository","msg":"no changes since last reconcilation: observed revision","reconciler group":"source.toolkit.fluxcd.io","reconciler kind":"GitRepository","name":"podinfo","namespace":"default"} -{"level":"error","ts":"2022-08-02T12:56:04.679Z","logger":"controller.gitrepository","msg":"no changes since last reconcilation: observed revision","reconciler group":"source.toolkit.fluxcd.io","reconciler kind":"GitRepository","name":"flux-system","namespace":"flux-system"} +var testPodLogs = `{"level":"info","ts":"2022-08-02T12:55:34.419Z","msg":"no changes since last reconcilation: observed revision","controller":"gitrepository","controllerGroup":"source.toolkit.fluxcd.io","controllerKind":"GitRepository","gitRepository":{"name":"podinfo","namespace":"default"},"namespace":"default","name":"podinfo","reconcileID":"5ef9b2ef-4ea5-47b7-b887-a247cafc1bce"} +{"level":"error","ts":"2022-08-02T12:56:04.679Z","logger":"controller.gitrepository","msg":"no changes since last reconcilation: observed revision","controllerGroup":"source.toolkit.fluxcd.io","controllerKind":"GitRepository","gitRepository":{"name":"podinfo","namespace":"flux-system"},"name":"flux-system","namespace":"flux-system","reconcileID":"543ef9b2ef-4ea5-47b7-b887-a247cafc1bce"} {"level":"error","ts":"2022-08-02T12:56:34.961Z","logger":"controller.kustomization","msg":"no changes since last reconcilation: observed revision","reconciler group":"kustomize.toolkit.fluxcd.io","reconciler kind":"Kustomization","name":"flux-system","namespace":"flux-system"} {"level":"info","ts":"2022-08-02T12:56:34.961Z","logger":"controller.kustomization","msg":"no changes since last reconcilation: observed revision","reconciler group":"kustomize.toolkit.fluxcd.io","reconciler kind":"Kustomization","name":"podinfo","namespace":"default"} {"level":"info","ts":"2022-08-02T12:56:34.961Z","logger":"controller.gitrepository","msg":"no changes since last reconcilation: observed revision","reconciler group":"source.toolkit.fluxcd.io","reconciler kind":"GitRepository","name":"podinfo","namespace":"default"} -{"level":"error","ts":"2022-08-02T12:56:34.961Z","logger":"controller.kustomization","msg":"no changes since last reconcilation: observed revision","reconciler group":"kustomize.toolkit.fluxcd.io","reconciler kind":"Kustomization","name":"podinfo","namespace":"flux-system"}` +{"level":"error","ts":"2022-08-02T12:56:34.961Z","logger":"controller.kustomization","msg":"no changes since last reconcilation: observed revision","reconciler group":"kustomize.toolkit.fluxcd.io","reconciler kind":"Kustomization","name":"podinfo","namespace":"flux-system"} +` type testResponseMapper struct { } diff --git a/go.mod b/go.mod index af84032c..f9a08322 100644 --- a/go.mod +++ b/go.mod @@ -13,11 +13,11 @@ require ( github.com/fluxcd/kustomize-controller/api v0.27.1 github.com/fluxcd/notification-controller/api v0.25.2 github.com/fluxcd/pkg/apis/meta v0.15.0 - github.com/fluxcd/pkg/kustomize v0.6.0 - github.com/fluxcd/pkg/oci v0.7.0 - github.com/fluxcd/pkg/runtime v0.17.0 + github.com/fluxcd/pkg/kustomize v0.7.0 + github.com/fluxcd/pkg/oci v0.8.0 + github.com/fluxcd/pkg/runtime v0.18.0 github.com/fluxcd/pkg/sourceignore v0.2.0 - github.com/fluxcd/pkg/ssa v0.18.0 + github.com/fluxcd/pkg/ssa v0.19.0 github.com/fluxcd/pkg/ssh v0.6.0 github.com/fluxcd/pkg/untar v0.2.0 github.com/fluxcd/pkg/version v0.2.0 @@ -46,7 +46,7 @@ require ( k8s.io/client-go v0.25.0 k8s.io/kubectl v0.25.0 sigs.k8s.io/cli-utils v0.33.0 - sigs.k8s.io/controller-runtime v0.11.2 + sigs.k8s.io/controller-runtime v0.12.3 sigs.k8s.io/kustomize/api v0.12.1 sigs.k8s.io/kustomize/kyaml v0.13.9 sigs.k8s.io/yaml v1.3.0 diff --git a/go.sum b/go.sum index b44d92d0..9318730c 100644 --- a/go.sum +++ b/go.sum @@ -261,16 +261,16 @@ github.com/fluxcd/pkg/apis/kustomize v0.5.0 h1:4Rvr4zWQV2KyHkSQzq8IFPo10b0UVAGEg github.com/fluxcd/pkg/apis/kustomize v0.5.0/go.mod h1:N3Rtc5wDm/omHH0YHUbILyUpRNmWvZGejb5/8Uyk6II= github.com/fluxcd/pkg/apis/meta v0.15.0 h1:uDVzbDNdFjp0GSB9qMpcW6r4K7SAjBQlCxQENSkWgkQ= github.com/fluxcd/pkg/apis/meta v0.15.0/go.mod h1:7NkgFrlswnx2QxP16+8zVNDBf+VhZ7PsDhkcJY6OSgQ= -github.com/fluxcd/pkg/kustomize v0.6.0 h1:v/HK2jvIBeCErPiO0yWVLffRI4iLNKWh4oTd0QuVuAE= -github.com/fluxcd/pkg/kustomize v0.6.0/go.mod h1:4ex1cYIHxyyHtxbZuVpM/Df+e4exI4sb0phmjAzH+7s= -github.com/fluxcd/pkg/oci v0.7.0 h1:7jh31RCF2boQAH2DbBklxX+Qk+Ur7GnAyzaw0o5h0is= -github.com/fluxcd/pkg/oci v0.7.0/go.mod h1:zyyQQJCPByRBNL0K4XfGecHqQfSqAk7LyxgEWLPngc8= -github.com/fluxcd/pkg/runtime v0.17.0 h1:izKzDDWtS8QTQKV391DxqQBDb5eS0jDwWgzjE3KXjv0= -github.com/fluxcd/pkg/runtime v0.17.0/go.mod h1:jphxwbAf1SJRapl62MJ1jMExJottdgeu++YWq0yoHrU= +github.com/fluxcd/pkg/kustomize v0.7.0 h1:604rlpRZTWaOfzDZ1W93aHaFh9kn8/UMX/wzsjwIUQY= +github.com/fluxcd/pkg/kustomize v0.7.0/go.mod h1:zJY3Z0+SX+zs+/A1F6fCT0JvUce265XnrpTtHnujXPo= +github.com/fluxcd/pkg/oci v0.8.0 h1:ky7YemolK/5yGVmw2B8SLn1h4ecrnP38DwCaBOCSDFg= +github.com/fluxcd/pkg/oci v0.8.0/go.mod h1:L+TiQRy92wdqwb2LuScl7T1M24S7IgnzgjBD3iqoKEE= +github.com/fluxcd/pkg/runtime v0.18.0 h1:3naATapV1y65ZWlsXEfJt66zSQBkJwJ9o/e6gqAF//E= +github.com/fluxcd/pkg/runtime v0.18.0/go.mod h1:JKTvOFOCz5Un9KxGcBL7Xjt0fcRa10ZItGB0XFv44AY= github.com/fluxcd/pkg/sourceignore v0.2.0 h1:ooNbIkfxqNB+KKiY4AU+/DxwzjIKIOWBRK1As5QFlug= github.com/fluxcd/pkg/sourceignore v0.2.0/go.mod h1:m9/q+YLMNSWjXns1n/5q3ucwzSSddti+D6ExbNaCo6s= -github.com/fluxcd/pkg/ssa v0.18.0 h1:0je85+fWjW5gWI5RoVQktgkNUShFRANWyG2eouUQKps= -github.com/fluxcd/pkg/ssa v0.18.0/go.mod h1:DNI+yoJ2R50Ap97TuHtLUudfGlpRd7sTAaLLOrqyyzU= +github.com/fluxcd/pkg/ssa v0.19.0 h1:azciQ/M1L7Nf4zkHJ+A+a58uShcTW3ZMbyY8KiYcqrI= +github.com/fluxcd/pkg/ssa v0.19.0/go.mod h1:OjHX/qA4xqLi237l0yccsT6FnLmHxDKukpMXnhdXdyk= github.com/fluxcd/pkg/ssh v0.6.0 h1:yRJ866obXCo0JseJCqlGKtF8cumioPcwIC6kMwf8Spg= github.com/fluxcd/pkg/ssh v0.6.0/go.mod h1:Puf+hWNzFsqdHtjDpsI3PTTvitZu41ObuPFblOdzrrI= github.com/fluxcd/pkg/untar v0.2.0 h1:sJXU+FbJcNUb2ffLJNjeR3hwt3X2loVpOMlCUjyFw6E= @@ -1589,8 +1589,8 @@ rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/cli-utils v0.33.0 h1:/ioqfYu0hVeR2T2SDH3WVPgpqiJkrzqjJFrQ3u+baHk= sigs.k8s.io/cli-utils v0.33.0/go.mod h1:g/zB9hJ5eUN7zIEBIxrO0CwhXU4YISJ+BkLJzvWwlEs= -sigs.k8s.io/controller-runtime v0.11.2 h1:H5GTxQl0Mc9UjRJhORusqfJCIjBO8UtUxGggCwL1rLA= -sigs.k8s.io/controller-runtime v0.11.2/go.mod h1:P6QCzrEjLaZGqHsfd+os7JQ+WFZhvB8MRFsn4dWF7O4= +sigs.k8s.io/controller-runtime v0.12.3 h1:FCM8xeY/FI8hoAfh/V4XbbYMY20gElh9yh+A98usMio= +sigs.k8s.io/controller-runtime v0.12.3/go.mod h1:qKsk4WE6zW2Hfj0G4v10EnNB2jMG1C+NTb8h+DwCoU0= sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 h1:iXTIw73aPyC+oRdyqqvVJuloN1p0AC/kzH07hu3NE+k= sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= sigs.k8s.io/kustomize/api v0.12.1 h1:7YM7gW3kYBwtKvoY216ZzY+8hM+lV53LUayghNRJ0vM= From 82f847e21dc93c8fe218fefc6bdcb4f7ea6872fd Mon Sep 17 00:00:00 2001 From: Arcadie Condrat Date: Mon, 5 Sep 2022 11:34:39 +0200 Subject: [PATCH 230/818] Filter out non-running pods in Prometheus Prometheus job generated by the PodMonitor does not exclude non-running pods. All the "completed" Pods are still going to be listed as targets in Prometheus and marked as down. This issue is related to PodMonitor implementation and is discussed in prometheus-operator/prometheus-operator#4816 Signed-off-by: Arcadie Condrat --- manifests/monitoring/monitoring-config/podmonitor.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/manifests/monitoring/monitoring-config/podmonitor.yaml b/manifests/monitoring/monitoring-config/podmonitor.yaml index d375e0d9..5e4b3a8c 100644 --- a/manifests/monitoring/monitoring-config/podmonitor.yaml +++ b/manifests/monitoring/monitoring-config/podmonitor.yaml @@ -23,3 +23,8 @@ spec: - image-reflector-controller podMetricsEndpoints: - port: http-prom + relabelings: + # https://github.com/prometheus-operator/prometheus-operator/issues/4816 + - sourceLabels: [__meta_kubernetes_pod_phase] + action: keep + regex: Running From c57afa1e561d89511da08c1e87df5237b98d8b52 Mon Sep 17 00:00:00 2001 From: Daniel Holbach Date: Tue, 30 Aug 2022 17:16:23 +0200 Subject: [PATCH 231/818] Revert "Fix broken "edit this page" links in Flux CLI section" Signed-off-by: Daniel Holbach --- cmd/flux/docgen.go | 1 - 1 file changed, 1 deletion(-) diff --git a/cmd/flux/docgen.go b/cmd/flux/docgen.go index cdd5472b..aec004ea 100644 --- a/cmd/flux/docgen.go +++ b/cmd/flux/docgen.go @@ -28,7 +28,6 @@ import ( const fmTemplate = `--- title: "%s" -importedDoc: true --- ` From e7779475395aafbe5199e1d70cd34d8e29f54358 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Thu, 8 Sep 2022 10:43:31 +0300 Subject: [PATCH 232/818] Remove finalizers for OCI repositories on uninstall Signed-off-by: Stefan Prodan --- cmd/flux/uninstall.go | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/cmd/flux/uninstall.go b/cmd/flux/uninstall.go index e16552df..5e3d8b55 100644 --- a/cmd/flux/uninstall.go +++ b/cmd/flux/uninstall.go @@ -198,6 +198,19 @@ func uninstallFinalizers(ctx context.Context, kubeClient client.Client, dryRun b } } } + { + var list sourcev1.OCIRepositoryList + if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { + for _, r := range list.Items { + r.Finalizers = []string{} + if err := kubeClient.Update(ctx, &r, opts); err != nil { + logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) + } else { + logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) + } + } + } + } { var list sourcev1.HelmRepositoryList if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { From bdc5ae4573d8ab40f015b17b84561a264df35bd2 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Fri, 9 Sep 2022 14:07:55 +0300 Subject: [PATCH 233/818] Publish install manifests to GHCR and DockerHub as OCI artifacts Add workflow to build and push the install manifests to: - ghcr.io/fluxcd/flux-manifests - docker.io/fluxcd/flux-manifests The OCI artifacts are signed with Cosign and GitHub OIDC (keyless). The manifests pushed to GHCR have the container images set to ghcr.io/fluxcd/ while the manifests pushed to DockerHub have the controller images set to docker.io/fluxcd/. Signed-off-by: Stefan Prodan --- .github/workflows/release-manifests.yml | 73 +++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 .github/workflows/release-manifests.yml diff --git a/.github/workflows/release-manifests.yml b/.github/workflows/release-manifests.yml new file mode 100644 index 00000000..178f3642 --- /dev/null +++ b/.github/workflows/release-manifests.yml @@ -0,0 +1,73 @@ +name: release-manifests +on: + release: + types: [published] + workflow_dispatch: + +permissions: + id-token: write # needed for keyless signing + packages: write # needed for ghcr access + +jobs: + build-push: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Setup Kustomize + uses: fluxcd/pkg/actions/kustomize@main + - name: Setup Flux CLI + uses: ./action/ + - name: Prepare + id: prep + run: | + VERSION=$(flux version --client | awk '{ print $NF }') + echo ::set-output name=VERSION::${VERSION} + - name: Login to GHCR + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: fluxcdbot + password: ${{ secrets.GHCR_TOKEN }} + - name: Login to DockerHub + uses: docker/login-action@v2 + with: + username: fluxcdbot + password: ${{ secrets.DOCKER_FLUXCD_PASSWORD }} + - name: Push manifests to GHCR + run: | + mkdir -p ./ghcr.io/flux-system + flux install --registry=ghcr.io/fluxcd \ + --components-extra=image-reflector-controller,image-automation-controller \ + --export > ./ghcr.io/flux-system/gotk-components.yaml + + cd ./ghcr.io && flux push artifact \ + oci://ghcr.io/fluxcd/flux-manifests:${{ steps.prep.outputs.VERSION }} \ + --path="./flux-system" \ + --source=${{ github.repositoryUrl }} \ + --revision="${{ github.ref_name }}/${{ github.sha }}" + - name: Push manifests to DockerHub + run: | + mkdir -p ./docker.io/flux-system + flux install --registry=docker.io/fluxcd \ + --components-extra=image-reflector-controller,image-automation-controller \ + --export > ./docker.io/flux-system/gotk-components.yaml + + cd ./docker.io && flux push artifact \ + oci://docker.io/fluxcd/flux-manifests:${{ steps.prep.outputs.VERSION }} \ + --path="./flux-system" \ + --source=${{ github.repositoryUrl }} \ + --revision="${{ github.ref_name }}/${{ github.sha }}" + - uses: sigstore/cosign-installer@main + - name: Sign manifests + env: + COSIGN_EXPERIMENTAL: 1 + run: | + cosign sign ghcr.io/fluxcd/flux-manifests:${{ steps.prep.outputs.VERSION }} + cosign sign docker.io/fluxcd/flux-manifests:${{ steps.prep.outputs.VERSION }} + - name: Tag manifests + run: | + flux tag artifact oci://ghcr.io/fluxcd/flux-manifests:${{ steps.prep.outputs.VERSION }} \ + --tag latest + + flux tag artifact oci://docker.io/fluxcd/flux-manifests:${{ steps.prep.outputs.VERSION }} \ + --tag latest From 11dd0d918c9aa3c3f6b937e1985e8299791d5034 Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Fri, 9 Sep 2022 01:44:56 +0100 Subject: [PATCH 234/818] remove finalizers for notification controllers Signed-off-by: Somtochi Onyekwere --- cmd/flux/uninstall.go | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/cmd/flux/uninstall.go b/cmd/flux/uninstall.go index 5e3d8b55..bd62347a 100644 --- a/cmd/flux/uninstall.go +++ b/cmd/flux/uninstall.go @@ -36,6 +36,7 @@ import ( autov1 "github.com/fluxcd/image-automation-controller/api/v1beta1" imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta1" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" + notificationv1 "github.com/fluxcd/notification-controller/api/v1beta1" sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" ) @@ -276,6 +277,45 @@ func uninstallFinalizers(ctx context.Context, kubeClient client.Client, dryRun b } } } + { + var list notificationv1.AlertList + if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { + for _, r := range list.Items { + r.Finalizers = []string{} + if err := kubeClient.Update(ctx, &r, opts); err != nil { + logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) + } else { + logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) + } + } + } + } + { + var list notificationv1.ProviderList + if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { + for _, r := range list.Items { + r.Finalizers = []string{} + if err := kubeClient.Update(ctx, &r, opts); err != nil { + logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) + } else { + logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) + } + } + } + } + { + var list notificationv1.ReceiverList + if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { + for _, r := range list.Items { + r.Finalizers = []string{} + if err := kubeClient.Update(ctx, &r, opts); err != nil { + logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) + } else { + logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) + } + } + } + } { var list imagev1.ImagePolicyList if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { From ec2aa13165e4caed41e2bab0b6a8cc661f952d0d Mon Sep 17 00:00:00 2001 From: Soule BA Date: Thu, 8 Sep 2022 14:51:39 +0200 Subject: [PATCH 235/818] Make sure we reconcile with the right reconciliation method Signed-off-by: Soule BA --- internal/bootstrap/bootstrap_provider.go | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/internal/bootstrap/bootstrap_provider.go b/internal/bootstrap/bootstrap_provider.go index 5d57d4e9..229056af 100644 --- a/internal/bootstrap/bootstrap_provider.go +++ b/internal/bootstrap/bootstrap_provider.go @@ -298,11 +298,8 @@ func (b *GitProviderBootstrapper) reconcileOrgRepository(ctx context.Context) (g var changed bool if b.reconcile { - // Set default branch before calling Reconcile due to bug described - // above. - repoInfo.DefaultBranch = repo.Get().DefaultBranch if err = retry(1, 2*time.Second, func() (err error) { - repo, changed, err = b.provider.OrgRepositories().Reconcile(ctx, repoRef, repoInfo) + changed, err = repo.Reconcile(ctx) return }); err != nil { return nil, fmt.Errorf("failed to reconcile Git repository %q: %w", repoRef.String(), err) @@ -373,12 +370,9 @@ func (b *GitProviderBootstrapper) reconcileUserRepository(ctx context.Context) ( } if b.reconcile { - // Set default branch before calling Reconcile due to bug described - // above. - repoInfo.DefaultBranch = repo.Get().DefaultBranch var changed bool if err = retry(1, 2*time.Second, func() (err error) { - repo, changed, err = b.provider.UserRepositories().Reconcile(ctx, repoRef, repoInfo) + changed, err = repo.Reconcile(ctx) return }); err != nil { return nil, fmt.Errorf("failed to reconcile Git repository %q: %w", repoRef.String(), err) From 0694a9582fa52191bd591907b2d9cafd1b7f3298 Mon Sep 17 00:00:00 2001 From: Adrien Fillon Date: Mon, 12 Sep 2022 10:22:23 +0200 Subject: [PATCH 236/818] Support logging in directly to the provider when pushing OCI artifacts I've noticed during CI, that the current command already expected a configured Docker client to push artifacts to authenticated registries. Some users might not want to have the Docker client in their process (like a CI job) or build an handcrafted config.json file. This would allow this kind of behavior: ``` flux push artifact oci://my-registry.dev/foo:v1 \ --source xxx \ --revision xxx \ --path . \ --creds $TOKEN # Authenticate via "Bearer $TOKEN" Authorization header ``` Or via Autologin: ``` flux push artifact oci://012345678901.dkr.ecr.us-east-1.amazonaws.com/foo:v1 \ --source xxx \ --revision xxx \ --path . \ --provider aws ``` This has been implemented for: * flux push artifact * flux list artifact * flux tag artifact * flux pull artifact This will require another PR in https://github.com/fluxcd/pkg/pull/352 Signed-off-by: Adrien Fillon --- cmd/flux/list_artifact.go | 38 ++++++++++++++++-- cmd/flux/pull_artifact.go | 40 +++++++++++++++++-- cmd/flux/push_artifact.go | 57 +++++++++++++++++++++++++-- cmd/flux/tag_artifact.go | 40 +++++++++++++++++-- go.mod | 11 +++++- go.sum | 25 +++++++++++- internal/flags/source_oci_provider.go | 17 ++++++++ 7 files changed, 210 insertions(+), 18 deletions(-) diff --git a/cmd/flux/list_artifact.go b/cmd/flux/list_artifact.go index ca736997..fc72c32b 100644 --- a/cmd/flux/list_artifact.go +++ b/cmd/flux/list_artifact.go @@ -20,6 +20,8 @@ import ( "context" "fmt" + "github.com/fluxcd/flux2/internal/flags" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" "github.com/spf13/cobra" oci "github.com/fluxcd/pkg/oci/client" @@ -30,15 +32,23 @@ import ( type listArtifactFlags struct { semverFilter string regexFilter string + creds string + provider flags.SourceOCIProvider } -var listArtifactArgs listArtifactFlags +var listArtifactArgs = newListArtifactFlags() + +func newListArtifactFlags() listArtifactFlags { + return listArtifactFlags{ + provider: flags.SourceOCIProvider(sourcev1.GenericOCIProvider), + } +} var listArtifactsCmd = &cobra.Command{ Use: "artifacts", Short: "list artifacts", Long: `The list command fetches the tags and their metadata from a remote OCI repository. -The command uses the credentials from '~/.docker/config.json'.`, +The command can read the credentials from '~/.docker/config.json' but they can also be passed with --creds. It can also login to a supported provider with the --provider flag.`, Example: ` # List the artifacts stored in an OCI repository flux list artifact oci://ghcr.io/org/config/app `, @@ -48,6 +58,8 @@ The command uses the credentials from '~/.docker/config.json'.`, func init() { listArtifactsCmd.Flags().StringVar(&listArtifactArgs.semverFilter, "filter-semver", "", "filter tags returned from the oci repository using semver") listArtifactsCmd.Flags().StringVar(&listArtifactArgs.regexFilter, "filter-regex", "", "filter tags returned from the oci repository using regex") + listArtifactsCmd.Flags().StringVar(&listArtifactArgs.creds, "creds", "", "credentials for OCI registry in the format [:] if --provider is generic") + listArtifactsCmd.Flags().Var(&listArtifactArgs.provider, "provider", listArtifactArgs.provider.Description()) listCmd.AddCommand(listArtifactsCmd) } @@ -61,12 +73,32 @@ func listArtifactsCmdRun(cmd *cobra.Command, args []string) error { ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) defer cancel() - ociClient := oci.NewLocalClient() url, err := oci.ParseArtifactURL(ociURL) if err != nil { return err } + ociClient := oci.NewLocalClient() + + if listArtifactArgs.provider.String() == sourcev1.GenericOCIProvider && listArtifactArgs.creds != "" { + logger.Actionf("logging in to registry with credentials") + if err := ociClient.LoginWithCredentials(listArtifactArgs.creds); err != nil { + return fmt.Errorf("could not login with credentials: %w", err) + } + } + + if listArtifactArgs.provider.String() != sourcev1.GenericOCIProvider { + logger.Actionf("logging in to registry with provider credentials") + ociProvider, err := listArtifactArgs.provider.ToOCIProvider() + if err != nil { + return fmt.Errorf("provider not supported: %w", err) + } + + if err := ociClient.LoginWithProvider(ctx, url, ociProvider); err != nil { + return fmt.Errorf("error during login with provider: %w", err) + } + } + opts := oci.ListOptions{ RegexFilter: listArtifactArgs.regexFilter, SemverFilter: listArtifactArgs.semverFilter, diff --git a/cmd/flux/pull_artifact.go b/cmd/flux/pull_artifact.go index f36ab3d0..2fa0eab3 100644 --- a/cmd/flux/pull_artifact.go +++ b/cmd/flux/pull_artifact.go @@ -21,6 +21,8 @@ import ( "fmt" "os" + "github.com/fluxcd/flux2/internal/flags" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" "github.com/spf13/cobra" oci "github.com/fluxcd/pkg/oci/client" @@ -30,7 +32,7 @@ var pullArtifactCmd = &cobra.Command{ Use: "artifact", Short: "Pull artifact", Long: `The pull artifact command downloads and extracts the OCI artifact content to the given path. -The pull command uses the credentials from '~/.docker/config.json'.`, +The command can read the credentials from '~/.docker/config.json' but they can also be passed with --creds. It can also login to a supported provider with the --provider flag.`, Example: ` # Pull an OCI artifact created by flux from GHCR flux pull artifact oci://ghcr.io/org/manifests/app:v0.0.1 --output ./path/to/local/manifests `, @@ -38,13 +40,23 @@ The pull command uses the credentials from '~/.docker/config.json'.`, } type pullArtifactFlags struct { - output string + output string + creds string + provider flags.SourceOCIProvider } -var pullArtifactArgs pullArtifactFlags +var pullArtifactArgs = newPullArtifactFlags() + +func newPullArtifactFlags() pullArtifactFlags { + return pullArtifactFlags{ + provider: flags.SourceOCIProvider(sourcev1.GenericOCIProvider), + } +} func init() { pullArtifactCmd.Flags().StringVarP(&pullArtifactArgs.output, "output", "o", "", "path where the artifact content should be extracted.") + pullArtifactCmd.Flags().StringVar(&pullArtifactArgs.creds, "creds", "", "credentials for OCI registry in the format [:] if --provider is generic") + pullArtifactCmd.Flags().Var(&pullArtifactArgs.provider, "provider", sourceOCIRepositoryArgs.provider.Description()) pullCmd.AddCommand(pullArtifactCmd) } @@ -62,7 +74,6 @@ func pullArtifactCmdRun(cmd *cobra.Command, args []string) error { return fmt.Errorf("invalid output path %s", pullArtifactArgs.output) } - ociClient := oci.NewLocalClient() url, err := oci.ParseArtifactURL(ociURL) if err != nil { return err @@ -71,6 +82,27 @@ func pullArtifactCmdRun(cmd *cobra.Command, args []string) error { ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) defer cancel() + ociClient := oci.NewLocalClient() + + if pullArtifactArgs.provider.String() == sourcev1.GenericOCIProvider && pullArtifactArgs.creds != "" { + logger.Actionf("logging in to registry with credentials") + if err := ociClient.LoginWithCredentials(pullArtifactArgs.creds); err != nil { + return fmt.Errorf("could not login with credentials: %w", err) + } + } + + if pullArtifactArgs.provider.String() != sourcev1.GenericOCIProvider { + logger.Actionf("logging in to registry with provider credentials") + ociProvider, err := pullArtifactArgs.provider.ToOCIProvider() + if err != nil { + return fmt.Errorf("provider not supported: %w", err) + } + + if err := ociClient.LoginWithProvider(ctx, url, ociProvider); err != nil { + return fmt.Errorf("error during login with provider: %w", err) + } + } + logger.Actionf("pulling artifact from %s", url) meta, err := ociClient.Pull(ctx, url, pullArtifactArgs.output) diff --git a/cmd/flux/push_artifact.go b/cmd/flux/push_artifact.go index 75ad0a4e..bc4e0e0d 100644 --- a/cmd/flux/push_artifact.go +++ b/cmd/flux/push_artifact.go @@ -19,9 +19,12 @@ package main import ( "context" "fmt" - "github.com/spf13/cobra" "os" + "github.com/fluxcd/flux2/internal/flags" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + "github.com/spf13/cobra" + oci "github.com/fluxcd/pkg/oci/client" ) @@ -29,7 +32,7 @@ var pushArtifactCmd = &cobra.Command{ Use: "artifact", Short: "Push artifact", Long: `The push artifact command creates a tarball from the given directory and uploads the artifact to an OCI repository. -The command uses the credentials from '~/.docker/config.json'.`, +The command can read the credentials from '~/.docker/config.json' but they can also be passed with --creds. It can also login to a supported provider with the --provider flag.`, Example: ` # Push manifests to GHCR using the short Git SHA as the OCI artifact tag echo $GITHUB_PAT | docker login ghcr.io --username flux --password-stdin flux push artifact oci://ghcr.io/org/config/app:$(git rev-parse --short HEAD) \ @@ -43,6 +46,22 @@ The command uses the credentials from '~/.docker/config.json'.`, --path="./path/to/local/manifests" \ --source="$(git config --get remote.origin.url)" \ --revision="$(git tag --points-at HEAD)/$(git rev-parse HEAD)" + + # Login directly to the registry provider + # You might need to export the following variable if you use local config files for AWS: + # export AWS_SDK_LOAD_CONFIG=1 + flux push artifact oci://.dkr.ecr..amazonaws.com/foo:v1:$(git tag --points-at HEAD) \ + --path="./path/to/local/manifests" \ + --source="$(git config --get remote.origin.url)" \ + --revision="$(git tag --points-at HEAD)/$(git rev-parse HEAD)" \ + --provider aws + + # Or pass credentials directly + flux push artifact oci://docker.io/org/app-config:$(git tag --points-at HEAD) \ + --path="./path/to/local/manifests" \ + --source="$(git config --get remote.origin.url)" \ + --revision="$(git tag --points-at HEAD)/$(git rev-parse HEAD)" \ + --creds flux:$DOCKER_PAT `, RunE: pushArtifactCmdRun, } @@ -51,15 +70,25 @@ type pushArtifactFlags struct { path string source string revision string + creds string + provider flags.SourceOCIProvider ignorePaths []string } -var pushArtifactArgs pushArtifactFlags +var pushArtifactArgs = newPushArtifactFlags() + +func newPushArtifactFlags() pushArtifactFlags { + return pushArtifactFlags{ + provider: flags.SourceOCIProvider(sourcev1.GenericOCIProvider), + } +} func init() { pushArtifactCmd.Flags().StringVar(&pushArtifactArgs.path, "path", "", "path to the directory where the Kubernetes manifests are located") pushArtifactCmd.Flags().StringVar(&pushArtifactArgs.source, "source", "", "the source address, e.g. the Git URL") pushArtifactCmd.Flags().StringVar(&pushArtifactArgs.revision, "revision", "", "the source revision in the format '/'") + pushArtifactCmd.Flags().StringVar(&pushArtifactArgs.creds, "creds", "", "credentials for OCI registry in the format [:] if --provider is generic") + pushArtifactCmd.Flags().Var(&pushArtifactArgs.provider, "provider", pushArtifactArgs.provider.Description()) pushArtifactCmd.Flags().StringSliceVar(&pushArtifactArgs.ignorePaths, "ignore-paths", excludeOCI, "set paths to ignore in .gitignore format") pushCmd.AddCommand(pushArtifactCmd) @@ -83,7 +112,6 @@ func pushArtifactCmdRun(cmd *cobra.Command, args []string) error { return fmt.Errorf("invalid path %q", pushArtifactArgs.path) } - ociClient := oci.NewLocalClient() url, err := oci.ParseArtifactURL(ociURL) if err != nil { return err @@ -101,6 +129,27 @@ func pushArtifactCmdRun(cmd *cobra.Command, args []string) error { ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) defer cancel() + ociClient := oci.NewLocalClient() + + if pushArtifactArgs.provider.String() == sourcev1.GenericOCIProvider && pushArtifactArgs.creds != "" { + logger.Actionf("logging in to registry with credentials") + if err := ociClient.LoginWithCredentials(pushArtifactArgs.creds); err != nil { + return fmt.Errorf("could not login with credentials: %w", err) + } + } + + if pushArtifactArgs.provider.String() != sourcev1.GenericOCIProvider { + logger.Actionf("logging in to registry with provider credentials") + ociProvider, err := pushArtifactArgs.provider.ToOCIProvider() + if err != nil { + return fmt.Errorf("provider not supported: %w", err) + } + + if err := ociClient.LoginWithProvider(ctx, url, ociProvider); err != nil { + return fmt.Errorf("error during login with provider: %w", err) + } + } + logger.Actionf("pushing artifact to %s", url) digest, err := ociClient.Push(ctx, url, pushArtifactArgs.path, meta, pushArtifactArgs.ignorePaths) diff --git a/cmd/flux/tag_artifact.go b/cmd/flux/tag_artifact.go index 65ba1218..0763b697 100644 --- a/cmd/flux/tag_artifact.go +++ b/cmd/flux/tag_artifact.go @@ -20,6 +20,8 @@ import ( "context" "fmt" + "github.com/fluxcd/flux2/internal/flags" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" "github.com/spf13/cobra" oci "github.com/fluxcd/pkg/oci/client" @@ -29,7 +31,7 @@ var tagArtifactCmd = &cobra.Command{ Use: "artifact", Short: "Tag artifact", Long: `The tag artifact command creates tags for the given OCI artifact. -The command uses the credentials from '~/.docker/config.json'.`, +The command can read the credentials from '~/.docker/config.json' but they can also be passed with --creds. It can also login to a supported provider with the --provider flag.`, Example: ` # Tag an artifact version as latest flux tag artifact oci://ghcr.io/org/manifests/app:v0.0.1 --tag latest `, @@ -37,13 +39,23 @@ The command uses the credentials from '~/.docker/config.json'.`, } type tagArtifactFlags struct { - tags []string + tags []string + creds string + provider flags.SourceOCIProvider } -var tagArtifactArgs tagArtifactFlags +var tagArtifactArgs = newTagArtifactFlags() + +func newTagArtifactFlags() tagArtifactFlags { + return tagArtifactFlags{ + provider: flags.SourceOCIProvider(sourcev1.GenericOCIProvider), + } +} func init() { tagArtifactCmd.Flags().StringSliceVar(&tagArtifactArgs.tags, "tag", nil, "tag name") + tagArtifactCmd.Flags().StringVar(&tagArtifactArgs.creds, "creds", "", "credentials for OCI registry in the format [:] if --provider is generic") + tagArtifactCmd.Flags().Var(&tagArtifactArgs.provider, "provider", tagArtifactArgs.provider.Description()) tagCmd.AddCommand(tagArtifactCmd) } @@ -57,7 +69,6 @@ func tagArtifactCmdRun(cmd *cobra.Command, args []string) error { return fmt.Errorf("--tag is required") } - ociClient := oci.NewLocalClient() url, err := oci.ParseArtifactURL(ociURL) if err != nil { return err @@ -66,6 +77,27 @@ func tagArtifactCmdRun(cmd *cobra.Command, args []string) error { ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) defer cancel() + ociClient := oci.NewLocalClient() + + if tagArtifactArgs.provider.String() == sourcev1.GenericOCIProvider && tagArtifactArgs.creds != "" { + logger.Actionf("logging in to registry with credentials") + if err := ociClient.LoginWithCredentials(tagArtifactArgs.creds); err != nil { + return fmt.Errorf("could not login with credentials: %w", err) + } + } + + if tagArtifactArgs.provider.String() != sourcev1.GenericOCIProvider { + logger.Actionf("logging in to registry with provider credentials") + ociProvider, err := tagArtifactArgs.provider.ToOCIProvider() + if err != nil { + return fmt.Errorf("provider not supported: %w", err) + } + + if err := ociClient.LoginWithProvider(ctx, url, ociProvider); err != nil { + return fmt.Errorf("error during login with provider: %w", err) + } + } + logger.Actionf("tagging artifact") for _, tag := range tagArtifactArgs.tags { diff --git a/go.mod b/go.mod index f9a08322..a47badc8 100644 --- a/go.mod +++ b/go.mod @@ -14,7 +14,7 @@ require ( github.com/fluxcd/notification-controller/api v0.25.2 github.com/fluxcd/pkg/apis/meta v0.15.0 github.com/fluxcd/pkg/kustomize v0.7.0 - github.com/fluxcd/pkg/oci v0.8.0 + github.com/fluxcd/pkg/oci v0.9.0 github.com/fluxcd/pkg/runtime v0.18.0 github.com/fluxcd/pkg/sourceignore v0.2.0 github.com/fluxcd/pkg/ssa v0.19.0 @@ -57,6 +57,9 @@ replace gopkg.in/yaml.v3 => gopkg.in/yaml.v3 v3.0.1 require ( cloud.google.com/go v0.99.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.2 // indirect + github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0 // indirect github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect github.com/Azure/go-autorest v14.2.0+incompatible // indirect github.com/Azure/go-autorest/autorest v0.11.27 // indirect @@ -64,10 +67,12 @@ require ( github.com/Azure/go-autorest/autorest/date v0.3.0 // indirect github.com/Azure/go-autorest/logger v0.2.1 // indirect github.com/Azure/go-autorest/tracing v0.6.0 // indirect + github.com/AzureAD/microsoft-authentication-library-for-go v0.5.1 // indirect github.com/BurntSushi/toml v1.0.0 // indirect github.com/MakeNowJust/heredoc v1.0.0 // indirect github.com/Microsoft/go-winio v0.5.2 // indirect github.com/acomagu/bufpipe v1.0.3 // indirect + github.com/aws/aws-sdk-go v1.44.84 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/chai2010/gettext-go v1.0.2 // indirect @@ -97,6 +102,7 @@ require ( github.com/go-openapi/jsonreference v0.20.0 // indirect github.com/go-openapi/swag v0.21.1 // indirect github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang-jwt/jwt v3.2.1+incompatible // indirect github.com/golang-jwt/jwt/v4 v4.4.1 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.2 // indirect @@ -118,10 +124,12 @@ require ( github.com/imdario/mergo v0.3.12 // indirect github.com/inconshreveable/mousetrap v1.0.0 // indirect github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect + github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351 // indirect github.com/klauspost/compress v1.15.8 // indirect + github.com/kylelemons/godebug v1.1.0 // indirect github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect github.com/mailru/easyjson v0.7.7 // indirect github.com/mattn/go-ciede2000 v0.0.0-20170301095244-782e8c62fec3 // indirect @@ -142,6 +150,7 @@ require ( github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.0.3-0.20220114050600-8b9d41f48198 // indirect github.com/peterbourgon/diskv v2.0.1+incompatible // indirect + github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/prometheus/client_golang v1.13.0 // indirect github.com/prometheus/client_model v0.2.0 // indirect diff --git a/go.sum b/go.sum index 9318730c..2d6034b2 100644 --- a/go.sum +++ b/go.sum @@ -55,6 +55,12 @@ contrib.go.opencensus.io/exporter/stackdriver v0.13.4/go.mod h1:aXENhDJ1Y4lIg4EU dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/Antonboom/errname v0.1.5/go.mod h1:DugbBstvPFQbv/5uLcRRzfrNqKE9tVdVCqWCLp6Cifo= github.com/Antonboom/nilnil v0.1.0/go.mod h1:PhHLvRPSghY5Y7mX4TW+BHZQYo1A8flE5H20D3IPZBo= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.2 h1:lneMk5qtUMulXa/eVxjVd+/bDYMEDIqYpLzLa2/EsNI= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.2/go.mod h1:uGG2W01BaETf0Ozp+QxxKJdMBNRWPdstHG0Fmdwn1/U= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0 h1:QkAcEIAKbNL4KoFr4SathZPhDhF4mVwpBMFlYjyAqy8= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0/go.mod h1:bhXu1AjYL+wutSL/kpSq6s7733q2Rb0yuot9Zgfqa/0= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0 h1:jp0dGvZ7ZK0mgqnTSClMxa5xuRL7NZgHameVYF6BurY= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0/go.mod h1:eWRD7oawr1Mu1sLCawqVc0CUiF43ia3qQMxLscsKQ9w= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs= @@ -73,6 +79,8 @@ github.com/Azure/go-autorest/logger v0.2.1 h1:IG7i4p/mDa2Ce4TRyAO8IHnVhAVF3RFU+Z github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo= github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= +github.com/AzureAD/microsoft-authentication-library-for-go v0.5.1 h1:BWe8a+f/t+7KY7zH2mqygeUD0t8hNFXe08p1Pb3/jKE= +github.com/AzureAD/microsoft-authentication-library-for-go v0.5.1/go.mod h1:Vt9sXTKwMyGcOxSmLDMnGPgqsUg7m8pe215qMLrDXw4= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v0.4.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/toml v1.0.0 h1:dtDWrepsVPfW9H/4y7dDgFc2MBUSeJhlaDtK13CxFlU= @@ -126,6 +134,8 @@ github.com/ashanbrown/makezero v0.0.0-20210520155254-b6261585ddde/go.mod h1:oG9D github.com/aws/aws-sdk-go v1.23.20/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.25.37/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.36.30/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= +github.com/aws/aws-sdk-go v1.44.84 h1:orGogGRrizQSqn3lBnaP/FQIcjPMLf9azDO0h+oTJr0= +github.com/aws/aws-sdk-go v1.44.84/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= @@ -198,6 +208,7 @@ github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/denis-tingajkin/go-header v0.4.2/go.mod h1:eLRHAVXzE5atsKAnNRDB90WHCFFnBUn4RN0nRcs1LJA= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/distribution/distribution/v3 v3.0.0-20220822034424-3413bf8e14fd h1:jtncyJ6leoRxSuB7y1EkkES0nKuG0kM7arfABcZW9r0= +github.com/dnaeon/go-vcr v1.1.0 h1:ReYa/UBrRyQdant9B4fNHGoCNKw6qh6P0fsdGmZpR7c= github.com/docker/cli v20.10.17+incompatible h1:eO2KS7ZFeov5UJeaDmIs1NFEDRf32PaqRpvoEkKBy5M= github.com/docker/cli v20.10.17+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68= @@ -263,8 +274,8 @@ github.com/fluxcd/pkg/apis/meta v0.15.0 h1:uDVzbDNdFjp0GSB9qMpcW6r4K7SAjBQlCxQEN github.com/fluxcd/pkg/apis/meta v0.15.0/go.mod h1:7NkgFrlswnx2QxP16+8zVNDBf+VhZ7PsDhkcJY6OSgQ= github.com/fluxcd/pkg/kustomize v0.7.0 h1:604rlpRZTWaOfzDZ1W93aHaFh9kn8/UMX/wzsjwIUQY= github.com/fluxcd/pkg/kustomize v0.7.0/go.mod h1:zJY3Z0+SX+zs+/A1F6fCT0JvUce265XnrpTtHnujXPo= -github.com/fluxcd/pkg/oci v0.8.0 h1:ky7YemolK/5yGVmw2B8SLn1h4ecrnP38DwCaBOCSDFg= -github.com/fluxcd/pkg/oci v0.8.0/go.mod h1:L+TiQRy92wdqwb2LuScl7T1M24S7IgnzgjBD3iqoKEE= +github.com/fluxcd/pkg/oci v0.9.0 h1:ywS1rp8AV/N4UDVFYQK4qYfrADATPiWA3leXjG/eeK4= +github.com/fluxcd/pkg/oci v0.9.0/go.mod h1:L+TiQRy92wdqwb2LuScl7T1M24S7IgnzgjBD3iqoKEE= github.com/fluxcd/pkg/runtime v0.18.0 h1:3naATapV1y65ZWlsXEfJt66zSQBkJwJ9o/e6gqAF//E= github.com/fluxcd/pkg/runtime v0.18.0/go.mod h1:JKTvOFOCz5Un9KxGcBL7Xjt0fcRa10ZItGB0XFv44AY= github.com/fluxcd/pkg/sourceignore v0.2.0 h1:ooNbIkfxqNB+KKiY4AU+/DxwzjIKIOWBRK1As5QFlug= @@ -353,6 +364,8 @@ github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXP github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang-jwt/jwt v3.2.1+incompatible h1:73Z+4BJcrTC+KczS6WvTPvRGOp1WmfEP4Q1lOd9Z/+c= +github.com/golang-jwt/jwt v3.2.1+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang-jwt/jwt/v4 v4.4.1 h1:pC5DB52sCeK48Wlb9oPcdhnjkz1TKt1D/P7WKJ0kUcQ= @@ -572,7 +585,9 @@ github.com/jhump/protoreflect v1.6.1/go.mod h1:RZQ/lnuN+zqeRVpQigTwO6o0AJUkxbnSn github.com/jingyugao/rowserrcheck v1.1.1/go.mod h1:4yvlZSDb3IyDTUZJUmpZfm2Hwok+Dtp+nu2qOq+er9c= github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af/go.mod h1:HEWGJkRDzjJY2sqdDwxccsGicWEf9BQOZsq2tV+xzM0= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= +github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= @@ -622,6 +637,7 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kulti/thelper v0.4.0/go.mod h1:vMu2Cizjy/grP+jmsvOFDx1kYP6+PD1lqg4Yu5exl2U= github.com/kunwardeep/paralleltest v1.0.3/go.mod h1:vLydzomDFpk7yu5UX02RmP0H8QfRPOV/oFhWN85Mjb4= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/kyoh86/exportloopref v0.1.8/go.mod h1:1tUcJeiioIs7VWe5gcOObrux3lb66+sBqGZrRkMwPgg= github.com/ldez/gomoddirectives v0.2.2/go.mod h1:cpgBogWITnCfRq2qGoDkKMEVSaarhdBr6g8G04uz6d0= @@ -725,6 +741,7 @@ github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjY github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 h1:n6/2gBQ3RWajuToeY6ZtZTIKv2v7ThUy5KKusIT0yc0= github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00/go.mod h1:Pm3mSP3c5uWn86xMLZ5Sa7JB9GsEZySvHYXCTK4E9q4= +github.com/montanaflynn/stats v0.6.6/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= github.com/moricho/tparallel v0.2.1/go.mod h1:fXEIZxG2vdfl0ZF8b42f5a78EhjjD5mX8qUplsoSU4k= github.com/mozilla/scribe v0.0.0-20180711195314-fb71baf557c1/go.mod h1:FIczTrinKo8VaLxe6PWTPEXRXDIHz2QAwiaBaP5/4a8= github.com/mozilla/tls-observatory v0.0.0-20210609171429-7bc42856d2e5/go.mod h1:FUqVoUPHSEdDR0MnFM3Dh8AU0pZHLXUD127SAJGER/s= @@ -778,6 +795,9 @@ github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+v github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d/go.mod h1:3OzsM7FXDQlpCiw2j81fOmAwQLnZnLGXVKUzeKQXIAw= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= +github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4/go.mod h1:N6UoU20jOqggOuDwUaBQpluzLNDqif3kq9z2wpdYEfQ= +github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU= +github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -1215,6 +1235,7 @@ golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/internal/flags/source_oci_provider.go b/internal/flags/source_oci_provider.go index 5f5067ab..04d9b79a 100644 --- a/internal/flags/source_oci_provider.go +++ b/internal/flags/source_oci_provider.go @@ -21,6 +21,7 @@ import ( "strings" "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/pkg/oci" sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" ) @@ -31,6 +32,13 @@ var supportedSourceOCIProviders = []string{ sourcev1.GoogleOCIProvider, } +var sourceOCIProvidersToOCIProvider = map[string]oci.Provider{ + sourcev1.GenericOCIProvider: oci.ProviderGeneric, + sourcev1.AmazonOCIProvider: oci.ProviderAWS, + sourcev1.AzureOCIProvider: oci.ProviderAzure, + sourcev1.GoogleOCIProvider: oci.ProviderGCP, +} + type SourceOCIProvider string func (p *SourceOCIProvider) String() string { @@ -60,3 +68,12 @@ func (p *SourceOCIProvider) Description() string { strings.Join(supportedSourceOCIProviders, ", "), ) } + +func (p *SourceOCIProvider) ToOCIProvider() (oci.Provider, error) { + value, ok := sourceOCIProvidersToOCIProvider[p.String()] + if !ok { + return 0, fmt.Errorf("no mapping between source OCI provider %s and OCI provider", p.String()) + } + + return value, nil +} From 491acf57ad6fc9a25979f20c973c07046c849cd8 Mon Sep 17 00:00:00 2001 From: Adrien Fillon Date: Mon, 12 Sep 2022 12:06:30 +0200 Subject: [PATCH 237/818] Setup CodeQL CI job with Go 1.18 Signed-off-by: Adrien Fillon --- .github/workflows/scan.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index 682c4e1b..7799570c 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -54,6 +54,10 @@ jobs: steps: - name: Checkout repository uses: actions/checkout@v3 + - name: Set up Go + uses: actions/setup-go@v2 + with: + go-version: 1.18 - name: Initialize CodeQL uses: github/codeql-action/init@v2 with: From c40d290e46e1b888b988c752c35b498ff429bc1e Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Mon, 12 Sep 2022 10:44:50 +0000 Subject: [PATCH 238/818] Update toolkit components - helm-controller to v0.24.0 https://github.com/fluxcd/helm-controller/blob/v0.24.0/CHANGELOG.md - kustomize-controller to v0.28.0 https://github.com/fluxcd/kustomize-controller/blob/v0.28.0/CHANGELOG.md - source-controller to v0.29.0 https://github.com/fluxcd/source-controller/blob/v0.29.0/CHANGELOG.md - notification-controller to v0.26.0 https://github.com/fluxcd/notification-controller/blob/v0.26.0/CHANGELOG.md - image-reflector-controller to v0.21.0 https://github.com/fluxcd/image-reflector-controller/blob/v0.21.0/CHANGELOG.md - image-automation-controller to v0.25.0 https://github.com/fluxcd/image-automation-controller/blob/v0.25.0/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 12 +++++----- go.sum | 24 +++++++++---------- .../bases/helm-controller/kustomization.yaml | 4 ++-- .../kustomization.yaml | 4 ++-- .../kustomization.yaml | 4 ++-- .../kustomize-controller/kustomization.yaml | 4 ++-- .../kustomization.yaml | 4 ++-- .../source-controller/kustomization.yaml | 4 ++-- manifests/crds/kustomization.yaml | 12 +++++----- 9 files changed, 36 insertions(+), 36 deletions(-) diff --git a/go.mod b/go.mod index a47badc8..09d18f4d 100644 --- a/go.mod +++ b/go.mod @@ -7,11 +7,11 @@ require ( github.com/ProtonMail/go-crypto v0.0.0-20220824120805-4b6e5c587895 github.com/cyphar/filepath-securejoin v0.2.3 github.com/fluxcd/go-git-providers v0.8.0 - github.com/fluxcd/helm-controller/api v0.23.1 - github.com/fluxcd/image-automation-controller/api v0.24.2 - github.com/fluxcd/image-reflector-controller/api v0.20.1 - github.com/fluxcd/kustomize-controller/api v0.27.1 - github.com/fluxcd/notification-controller/api v0.25.2 + github.com/fluxcd/helm-controller/api v0.24.0 + github.com/fluxcd/image-automation-controller/api v0.25.0 + github.com/fluxcd/image-reflector-controller/api v0.21.0 + github.com/fluxcd/kustomize-controller/api v0.28.0 + github.com/fluxcd/notification-controller/api v0.26.0 github.com/fluxcd/pkg/apis/meta v0.15.0 github.com/fluxcd/pkg/kustomize v0.7.0 github.com/fluxcd/pkg/oci v0.9.0 @@ -21,7 +21,7 @@ require ( github.com/fluxcd/pkg/ssh v0.6.0 github.com/fluxcd/pkg/untar v0.2.0 github.com/fluxcd/pkg/version v0.2.0 - github.com/fluxcd/source-controller/api v0.28.0 + github.com/fluxcd/source-controller/api v0.29.0 github.com/go-git/go-git/v5 v5.4.2 github.com/gonvenience/bunt v1.3.4 github.com/gonvenience/ytbx v1.4.4 diff --git a/go.sum b/go.sum index 2d6034b2..f40feaa8 100644 --- a/go.sum +++ b/go.sum @@ -256,16 +256,16 @@ github.com/felixge/httpsnoop v1.0.1 h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8S github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0= github.com/fluxcd/go-git-providers v0.8.0 h1:80UMu7yvRoEVfEIg0eGb9bJ0bSceizNJrEVvwLo+0YI= github.com/fluxcd/go-git-providers v0.8.0/go.mod h1:krF+f3UFciy5QmFaYfaORCVxaEj7u2qD7R/WrfKCLWk= -github.com/fluxcd/helm-controller/api v0.23.1 h1:igBI/SZxYErepgxj8f5SrAg93wIxmYgF+Jci6nzV0wY= -github.com/fluxcd/helm-controller/api v0.23.1/go.mod h1:SJDOj+stJIjODvxpXysx/0KqRD1QnrG8PG5TpSN10Dk= -github.com/fluxcd/image-automation-controller/api v0.24.2 h1:jjK5xzaq5nXsHzNWAVt3RpK2xZRKA2QYPWbV+0sIWIs= -github.com/fluxcd/image-automation-controller/api v0.24.2/go.mod h1:xoYF5e5AuheYl7GQC9PZmv9DP6kdJzoVMFt54I/pdqk= -github.com/fluxcd/image-reflector-controller/api v0.20.1 h1:J6vkwMz0O3gzu+se/8IYRwd7nG+syiiTBUhssXcgWkI= -github.com/fluxcd/image-reflector-controller/api v0.20.1/go.mod h1:e9PMJZLetssAP8y4uX/QgQsIXpDXB8e5AkPqkChayLg= -github.com/fluxcd/kustomize-controller/api v0.27.1 h1:swOS46o/cA+e4wusRU5mZmlttwsO0nrlpSDQ3HhX3J4= -github.com/fluxcd/kustomize-controller/api v0.27.1/go.mod h1:4ItJQPqsXXyEosATIWmHmTsc3g5IwJbFjzZYPFB7fMM= -github.com/fluxcd/notification-controller/api v0.25.2 h1:wgc1NYntOXpqUpEqEeeuSTzc2xZBHPLwSpeVAPacyHE= -github.com/fluxcd/notification-controller/api v0.25.2/go.mod h1:tqIePx43IIA7llqdhS/1nCvmYF4LS4YMIu9cm4VxYkQ= +github.com/fluxcd/helm-controller/api v0.24.0 h1:JYE34zzPMfd/QTyCaeafFEnCu0mvnG6zayGLIC0W6D0= +github.com/fluxcd/helm-controller/api v0.24.0/go.mod h1:OhrOXaxwBBvW1R0OiV49caa3YszWiwmPViQkm67HW4M= +github.com/fluxcd/image-automation-controller/api v0.25.0 h1:erWR8X0tOnTon7eO3MzAGZrFtvTrP9sNGfcE5Qt/k6I= +github.com/fluxcd/image-automation-controller/api v0.25.0/go.mod h1:nCWUVwivbJf3nmJ/+zQgxBK9m27dNIE/rVimDsIK7u4= +github.com/fluxcd/image-reflector-controller/api v0.21.0 h1:+3iBaBu16pun5eWJiKBu1oy6J3gbSJYhPbY4styFpwM= +github.com/fluxcd/image-reflector-controller/api v0.21.0/go.mod h1:DhfOTfm3tP4czFzcU8U7gLJAazhmts/EgmC+kRHlOww= +github.com/fluxcd/kustomize-controller/api v0.28.0 h1:BEidxWgemuVacqAGKQnG/UXkWkpRyuWryaPSIFba6kw= +github.com/fluxcd/kustomize-controller/api v0.28.0/go.mod h1:OLNvteIzaJDMXRJD9DbTPzCuP57qWtRo9B+qzBn2L4o= +github.com/fluxcd/notification-controller/api v0.26.0 h1:Wi4wRcTjTfrCEOBUwbamO8T/R00VB5fhzbUwDFTi5Fc= +github.com/fluxcd/notification-controller/api v0.26.0/go.mod h1:ChTwLfjDJK7eoawfB3K3HUReq7QoCwcXNy3PzlCumAo= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= github.com/fluxcd/pkg/apis/kustomize v0.5.0 h1:4Rvr4zWQV2KyHkSQzq8IFPo10b0UVAGEgVaXByrGlNw= @@ -288,8 +288,8 @@ github.com/fluxcd/pkg/untar v0.2.0 h1:sJXU+FbJcNUb2ffLJNjeR3hwt3X2loVpOMlCUjyFw6 github.com/fluxcd/pkg/untar v0.2.0/go.mod h1:33AyoWaPpjX/xXpczcfhQh2AkB63TFwiR2YwROtv23E= github.com/fluxcd/pkg/version v0.2.0 h1:jG22c59Bsv6vL51N7Bqn8tjHArYOXrjbIkGArlIrv5w= github.com/fluxcd/pkg/version v0.2.0/go.mod h1:umN1VAOV0sB1JDVwb8eXZzuuqIAEku+y+vcCVBBUIf0= -github.com/fluxcd/source-controller/api v0.28.0 h1:rSOkE1ngGNAI7j++ZZRzNIxFXZMhHgMi4qPdXDxEEtA= -github.com/fluxcd/source-controller/api v0.28.0/go.mod h1:S+SvFUy4PLGLV1XMddHsO3K1NCwIbiBJvljejXcRSAA= +github.com/fluxcd/source-controller/api v0.29.0 h1:RyuHUCW7NtnHu61RbZUYhNWS+Nl0Z0rWS6a4aGGZZqE= +github.com/fluxcd/source-controller/api v0.29.0/go.mod h1:pqWB3brXYkacesoKGY96dTJRrafThY1VwDQy6md1W/4= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= diff --git a/manifests/bases/helm-controller/kustomization.yaml b/manifests/bases/helm-controller/kustomization.yaml index c943769e..10532208 100644 --- a/manifests/bases/helm-controller/kustomization.yaml +++ b/manifests/bases/helm-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/helm-controller/releases/download/v0.23.1/helm-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.23.1/helm-controller.deployment.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.24.0/helm-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.24.0/helm-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/image-automation-controller/kustomization.yaml b/manifests/bases/image-automation-controller/kustomization.yaml index 50844016..53b2f775 100644 --- a/manifests/bases/image-automation-controller/kustomization.yaml +++ b/manifests/bases/image-automation-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.24.2/image-automation-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.24.2/image-automation-controller.deployment.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.25.0/image-automation-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.25.0/image-automation-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/image-reflector-controller/kustomization.yaml b/manifests/bases/image-reflector-controller/kustomization.yaml index 15bff0e4..1c86e492 100644 --- a/manifests/bases/image-reflector-controller/kustomization.yaml +++ b/manifests/bases/image-reflector-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.20.1/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.20.1/image-reflector-controller.deployment.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.21.0/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.21.0/image-reflector-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/kustomize-controller/kustomization.yaml b/manifests/bases/kustomize-controller/kustomization.yaml index bcc37a9f..51986bb2 100644 --- a/manifests/bases/kustomize-controller/kustomization.yaml +++ b/manifests/bases/kustomize-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.27.1/kustomize-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.27.1/kustomize-controller.deployment.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.28.0/kustomize-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.28.0/kustomize-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/notification-controller/kustomization.yaml b/manifests/bases/notification-controller/kustomization.yaml index e868a070..e17a3923 100644 --- a/manifests/bases/notification-controller/kustomization.yaml +++ b/manifests/bases/notification-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/notification-controller/releases/download/v0.25.2/notification-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v0.25.2/notification-controller.deployment.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.26.0/notification-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.26.0/notification-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index 7691804e..c62cac6d 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.28.0/source-controller.crds.yaml -- https://github.com/fluxcd/source-controller/releases/download/v0.28.0/source-controller.deployment.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.29.0/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.29.0/source-controller.deployment.yaml - account.yaml patchesJson6902: - target: diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index 1ed9ca91..e4fb0047 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -1,9 +1,9 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.28.0/source-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.27.1/kustomize-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.23.1/helm-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v0.25.2/notification-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.20.1/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.24.2/image-automation-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.29.0/source-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.28.0/kustomize-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.24.0/helm-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.26.0/notification-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.21.0/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.25.0/image-automation-controller.crds.yaml From 03c3cb860a7de5fb5c1f58c3dce8fc9965ca840b Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Mon, 12 Sep 2022 14:21:46 +0300 Subject: [PATCH 239/818] Update Azure e2e dependencies Signed-off-by: Stefan Prodan --- tests/azure/go.mod | 20 ++++++++++---------- tests/azure/go.sum | 39 ++++++++++++++++++++------------------- 2 files changed, 30 insertions(+), 29 deletions(-) diff --git a/tests/azure/go.mod b/tests/azure/go.mod index 8059ddce..835f7452 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -4,16 +4,16 @@ go 1.18 require ( github.com/Azure/azure-event-hubs-go/v3 v3.3.18 - github.com/fluxcd/helm-controller/api v0.23.1 - github.com/fluxcd/image-automation-controller/api v0.24.2 - github.com/fluxcd/image-reflector-controller/api v0.20.1 - github.com/fluxcd/kustomize-controller/api v0.27.1 - github.com/fluxcd/notification-controller/api v0.25.2 + github.com/fluxcd/helm-controller/api v0.24.0 + github.com/fluxcd/image-automation-controller/api v0.25.0 + github.com/fluxcd/image-reflector-controller/api v0.21.0 + github.com/fluxcd/kustomize-controller/api v0.28.0 + github.com/fluxcd/notification-controller/api v0.26.0 github.com/fluxcd/pkg/apis/meta v0.15.0 - github.com/fluxcd/pkg/runtime v0.17.0 - github.com/fluxcd/source-controller/api v0.28.0 + github.com/fluxcd/pkg/runtime v0.18.0 + github.com/fluxcd/source-controller/api v0.29.0 github.com/hashicorp/hc-install v0.4.0 - github.com/hashicorp/terraform-exec v0.17.2 + github.com/hashicorp/terraform-exec v0.17.3 github.com/libgit2/git2go/v31 v31.7.9 github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 github.com/stretchr/testify v1.8.0 @@ -22,7 +22,7 @@ require ( k8s.io/api v0.25.0 k8s.io/apimachinery v0.25.0 k8s.io/client-go v0.25.0 - sigs.k8s.io/controller-runtime v0.11.2 + sigs.k8s.io/controller-runtime v0.12.3 ) // Fix CVE-2022-28948 @@ -87,7 +87,7 @@ require ( github.com/prometheus/common v0.37.0 // indirect github.com/prometheus/procfs v0.8.0 // indirect github.com/spf13/pflag v1.0.5 // indirect - github.com/zclconf/go-cty v1.10.0 // indirect + github.com/zclconf/go-cty v1.11.0 // indirect go.uber.org/atomic v1.7.0 // indirect go.uber.org/zap v1.23.0 // indirect golang.org/x/crypto v0.0.0-20220315160706-3147a52a75dd // indirect diff --git a/tests/azure/go.sum b/tests/azure/go.sum index 26f90629..4d47c82b 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -138,26 +138,26 @@ github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7 github.com/evanphx/json-patch v0.5.2/go.mod h1:ZWS5hhDbVDyob71nXKNL0+PWn6ToqBHMikGIFbs31qQ= github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH5pOlLGNtQ5lPWQu84= github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/fluxcd/helm-controller/api v0.23.1 h1:igBI/SZxYErepgxj8f5SrAg93wIxmYgF+Jci6nzV0wY= -github.com/fluxcd/helm-controller/api v0.23.1/go.mod h1:SJDOj+stJIjODvxpXysx/0KqRD1QnrG8PG5TpSN10Dk= -github.com/fluxcd/image-automation-controller/api v0.24.2 h1:jjK5xzaq5nXsHzNWAVt3RpK2xZRKA2QYPWbV+0sIWIs= -github.com/fluxcd/image-automation-controller/api v0.24.2/go.mod h1:xoYF5e5AuheYl7GQC9PZmv9DP6kdJzoVMFt54I/pdqk= -github.com/fluxcd/image-reflector-controller/api v0.20.1 h1:J6vkwMz0O3gzu+se/8IYRwd7nG+syiiTBUhssXcgWkI= -github.com/fluxcd/image-reflector-controller/api v0.20.1/go.mod h1:e9PMJZLetssAP8y4uX/QgQsIXpDXB8e5AkPqkChayLg= -github.com/fluxcd/kustomize-controller/api v0.27.1 h1:swOS46o/cA+e4wusRU5mZmlttwsO0nrlpSDQ3HhX3J4= -github.com/fluxcd/kustomize-controller/api v0.27.1/go.mod h1:4ItJQPqsXXyEosATIWmHmTsc3g5IwJbFjzZYPFB7fMM= -github.com/fluxcd/notification-controller/api v0.25.2 h1:wgc1NYntOXpqUpEqEeeuSTzc2xZBHPLwSpeVAPacyHE= -github.com/fluxcd/notification-controller/api v0.25.2/go.mod h1:tqIePx43IIA7llqdhS/1nCvmYF4LS4YMIu9cm4VxYkQ= +github.com/fluxcd/helm-controller/api v0.24.0 h1:JYE34zzPMfd/QTyCaeafFEnCu0mvnG6zayGLIC0W6D0= +github.com/fluxcd/helm-controller/api v0.24.0/go.mod h1:OhrOXaxwBBvW1R0OiV49caa3YszWiwmPViQkm67HW4M= +github.com/fluxcd/image-automation-controller/api v0.25.0 h1:erWR8X0tOnTon7eO3MzAGZrFtvTrP9sNGfcE5Qt/k6I= +github.com/fluxcd/image-automation-controller/api v0.25.0/go.mod h1:nCWUVwivbJf3nmJ/+zQgxBK9m27dNIE/rVimDsIK7u4= +github.com/fluxcd/image-reflector-controller/api v0.21.0 h1:+3iBaBu16pun5eWJiKBu1oy6J3gbSJYhPbY4styFpwM= +github.com/fluxcd/image-reflector-controller/api v0.21.0/go.mod h1:DhfOTfm3tP4czFzcU8U7gLJAazhmts/EgmC+kRHlOww= +github.com/fluxcd/kustomize-controller/api v0.28.0 h1:BEidxWgemuVacqAGKQnG/UXkWkpRyuWryaPSIFba6kw= +github.com/fluxcd/kustomize-controller/api v0.28.0/go.mod h1:OLNvteIzaJDMXRJD9DbTPzCuP57qWtRo9B+qzBn2L4o= +github.com/fluxcd/notification-controller/api v0.26.0 h1:Wi4wRcTjTfrCEOBUwbamO8T/R00VB5fhzbUwDFTi5Fc= +github.com/fluxcd/notification-controller/api v0.26.0/go.mod h1:ChTwLfjDJK7eoawfB3K3HUReq7QoCwcXNy3PzlCumAo= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= github.com/fluxcd/pkg/apis/kustomize v0.5.0 h1:4Rvr4zWQV2KyHkSQzq8IFPo10b0UVAGEgVaXByrGlNw= github.com/fluxcd/pkg/apis/kustomize v0.5.0/go.mod h1:N3Rtc5wDm/omHH0YHUbILyUpRNmWvZGejb5/8Uyk6II= github.com/fluxcd/pkg/apis/meta v0.15.0 h1:uDVzbDNdFjp0GSB9qMpcW6r4K7SAjBQlCxQENSkWgkQ= github.com/fluxcd/pkg/apis/meta v0.15.0/go.mod h1:7NkgFrlswnx2QxP16+8zVNDBf+VhZ7PsDhkcJY6OSgQ= -github.com/fluxcd/pkg/runtime v0.17.0 h1:izKzDDWtS8QTQKV391DxqQBDb5eS0jDwWgzjE3KXjv0= -github.com/fluxcd/pkg/runtime v0.17.0/go.mod h1:jphxwbAf1SJRapl62MJ1jMExJottdgeu++YWq0yoHrU= -github.com/fluxcd/source-controller/api v0.28.0 h1:rSOkE1ngGNAI7j++ZZRzNIxFXZMhHgMi4qPdXDxEEtA= -github.com/fluxcd/source-controller/api v0.28.0/go.mod h1:S+SvFUy4PLGLV1XMddHsO3K1NCwIbiBJvljejXcRSAA= +github.com/fluxcd/pkg/runtime v0.18.0 h1:3naATapV1y65ZWlsXEfJt66zSQBkJwJ9o/e6gqAF//E= +github.com/fluxcd/pkg/runtime v0.18.0/go.mod h1:JKTvOFOCz5Un9KxGcBL7Xjt0fcRa10ZItGB0XFv44AY= +github.com/fluxcd/source-controller/api v0.29.0 h1:RyuHUCW7NtnHu61RbZUYhNWS+Nl0Z0rWS6a4aGGZZqE= +github.com/fluxcd/source-controller/api v0.29.0/go.mod h1:pqWB3brXYkacesoKGY96dTJRrafThY1VwDQy6md1W/4= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= @@ -294,8 +294,8 @@ github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/hc-install v0.4.0 h1:cZkRFr1WVa0Ty6x5fTvL1TuO1flul231rWkGH92oYYk= github.com/hashicorp/hc-install v0.4.0/go.mod h1:5d155H8EC5ewegao9A4PUTMNPZaq+TbOzkJJZ4vrXeI= -github.com/hashicorp/terraform-exec v0.17.2 h1:EU7i3Fh7vDUI9nNRdMATCEfnm9axzTnad8zszYZ73Go= -github.com/hashicorp/terraform-exec v0.17.2/go.mod h1:tuIbsL2l4MlwwIZx9HPM+LOV9vVyEfBYu2GsO1uH3/8= +github.com/hashicorp/terraform-exec v0.17.3 h1:MX14Kvnka/oWGmIkyuyvL6POx25ZmKrjlaclkx3eErU= +github.com/hashicorp/terraform-exec v0.17.3/go.mod h1:+NELG0EqQekJzhvikkeQsOAZpsw0cv/03rbeQJqscAI= github.com/hashicorp/terraform-json v0.14.0 h1:sh9iZ1Y8IFJLx+xQiKHGud6/TSUCM0N8e17dKDpqV7s= github.com/hashicorp/terraform-json v0.14.0/go.mod h1:5A9HIWPkk4e5aeeXIBbkcOvaZbIYnAIkEyqP2pNSckM= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= @@ -440,8 +440,9 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/zclconf/go-cty v1.2.0/go.mod h1:hOPWgoHbaTUnI5k4D2ld+GRpFJSCe6bCM7m1q/N4PQ8= -github.com/zclconf/go-cty v1.10.0 h1:mp9ZXQeIcN8kAwuqorjH+Q+njbJKjLrvB2yIh4q7U+0= github.com/zclconf/go-cty v1.10.0/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uUAzyuvAk= +github.com/zclconf/go-cty v1.11.0 h1:726SxLdi2SDnjY+BStqB9J1hNp4+2WlzyXLuimibIe0= +github.com/zclconf/go-cty v1.11.0/go.mod h1:s9IfD1LK5ccNMSWCVFCE2rJfHiZgi7JijgeWIMfhLvA= github.com/zclconf/go-cty-debug v0.0.0-20191215020915-b22d67c1ba0b/go.mod h1:ZRKQfBXbGkpdV6QMzT3rU1kSTAnfu1dO8dPKjYprgj8= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= @@ -790,8 +791,8 @@ k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/ rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/controller-runtime v0.11.2 h1:H5GTxQl0Mc9UjRJhORusqfJCIjBO8UtUxGggCwL1rLA= -sigs.k8s.io/controller-runtime v0.11.2/go.mod h1:P6QCzrEjLaZGqHsfd+os7JQ+WFZhvB8MRFsn4dWF7O4= +sigs.k8s.io/controller-runtime v0.12.3 h1:FCM8xeY/FI8hoAfh/V4XbbYMY20gElh9yh+A98usMio= +sigs.k8s.io/controller-runtime v0.12.3/go.mod h1:qKsk4WE6zW2Hfj0G4v10EnNB2jMG1C+NTb8h+DwCoU0= sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 h1:iXTIw73aPyC+oRdyqqvVJuloN1p0AC/kzH07hu3NE+k= sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= From d5262404f32030e325bff32f1aa502475eefdcd9 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Mon, 12 Sep 2022 14:31:03 +0300 Subject: [PATCH 240/818] Add insecure flag to `flux create source oci` Signed-off-by: Stefan Prodan --- cmd/flux/create_source_oci.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cmd/flux/create_source_oci.go b/cmd/flux/create_source_oci.go index 75372a35..59b6fc86 100644 --- a/cmd/flux/create_source_oci.go +++ b/cmd/flux/create_source_oci.go @@ -60,6 +60,7 @@ type sourceOCIRepositoryFlags struct { certSecretRef string ignorePaths []string provider flags.SourceOCIProvider + insecure bool } var sourceOCIRepositoryArgs = newSourceOCIFlags() @@ -80,6 +81,7 @@ func init() { createSourceOCIRepositoryCmd.Flags().StringVar(&sourceOCIRepositoryArgs.serviceAccount, "service-account", "", "the name of the Kubernetes service account that refers to an image pull secret") createSourceOCIRepositoryCmd.Flags().StringVar(&sourceOCIRepositoryArgs.certSecretRef, "cert-ref", "", "the name of a secret to use for TLS certificates") createSourceOCIRepositoryCmd.Flags().StringSliceVar(&sourceOCIRepositoryArgs.ignorePaths, "ignore-paths", nil, "set paths to ignore resources (can specify multiple paths with commas: path1,path2)") + createSourceOCIRepositoryCmd.Flags().BoolVar(&sourceOCIRepositoryArgs.insecure, "insecure", false, "for when connecting to a non-TLS registries over plain HTTP") createSourceCmd.AddCommand(createSourceOCIRepositoryCmd) } @@ -115,6 +117,7 @@ func createSourceOCIRepositoryCmdRun(cmd *cobra.Command, args []string) error { Spec: sourcev1.OCIRepositorySpec{ Provider: sourceOCIRepositoryArgs.provider.String(), URL: sourceOCIRepositoryArgs.url, + Insecure: sourceOCIRepositoryArgs.insecure, Interval: metav1.Duration{ Duration: createArgs.interval, }, From 2971d34a130303c29992a50d4ec9989aeda4fc52 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Mon, 26 Sep 2022 14:08:32 +0300 Subject: [PATCH 241/818] Add component label for controllers and their CRDs Label each controller deployment, service, service account and CRDs with `app.kubernetes.io/component: `. Signed-off-by: Stefan Prodan --- manifests/bases/helm-controller/kustomization.yaml | 2 ++ manifests/bases/helm-controller/labels.yaml | 9 +++++++++ .../bases/image-automation-controller/kustomization.yaml | 2 ++ manifests/bases/image-automation-controller/labels.yaml | 9 +++++++++ .../bases/image-reflector-controller/kustomization.yaml | 2 ++ manifests/bases/image-reflector-controller/labels.yaml | 9 +++++++++ manifests/bases/kustomize-controller/kustomization.yaml | 3 ++- manifests/bases/kustomize-controller/labels.yaml | 9 +++++++++ .../bases/notification-controller/kustomization.yaml | 2 ++ manifests/bases/notification-controller/labels.yaml | 9 +++++++++ manifests/bases/source-controller/kustomization.yaml | 3 ++- manifests/bases/source-controller/labels.yaml | 9 +++++++++ 12 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 manifests/bases/helm-controller/labels.yaml create mode 100644 manifests/bases/image-automation-controller/labels.yaml create mode 100644 manifests/bases/image-reflector-controller/labels.yaml create mode 100644 manifests/bases/kustomize-controller/labels.yaml create mode 100644 manifests/bases/notification-controller/labels.yaml create mode 100644 manifests/bases/source-controller/labels.yaml diff --git a/manifests/bases/helm-controller/kustomization.yaml b/manifests/bases/helm-controller/kustomization.yaml index 10532208..becb28ca 100644 --- a/manifests/bases/helm-controller/kustomization.yaml +++ b/manifests/bases/helm-controller/kustomization.yaml @@ -4,6 +4,8 @@ resources: - https://github.com/fluxcd/helm-controller/releases/download/v0.24.0/helm-controller.crds.yaml - https://github.com/fluxcd/helm-controller/releases/download/v0.24.0/helm-controller.deployment.yaml - account.yaml +transformers: +- labels.yaml patchesJson6902: - target: group: apps diff --git a/manifests/bases/helm-controller/labels.yaml b/manifests/bases/helm-controller/labels.yaml new file mode 100644 index 00000000..29c577f0 --- /dev/null +++ b/manifests/bases/helm-controller/labels.yaml @@ -0,0 +1,9 @@ +apiVersion: builtin +kind: LabelTransformer +metadata: + name: labels +labels: + app.kubernetes.io/component: helm-controller +fieldSpecs: + - path: metadata/labels + create: true diff --git a/manifests/bases/image-automation-controller/kustomization.yaml b/manifests/bases/image-automation-controller/kustomization.yaml index 53b2f775..3ed2e6b1 100644 --- a/manifests/bases/image-automation-controller/kustomization.yaml +++ b/manifests/bases/image-automation-controller/kustomization.yaml @@ -4,6 +4,8 @@ resources: - https://github.com/fluxcd/image-automation-controller/releases/download/v0.25.0/image-automation-controller.crds.yaml - https://github.com/fluxcd/image-automation-controller/releases/download/v0.25.0/image-automation-controller.deployment.yaml - account.yaml +transformers: +- labels.yaml patchesJson6902: - target: group: apps diff --git a/manifests/bases/image-automation-controller/labels.yaml b/manifests/bases/image-automation-controller/labels.yaml new file mode 100644 index 00000000..88ddf5a5 --- /dev/null +++ b/manifests/bases/image-automation-controller/labels.yaml @@ -0,0 +1,9 @@ +apiVersion: builtin +kind: LabelTransformer +metadata: + name: labels +labels: + app.kubernetes.io/component: image-automation-controller +fieldSpecs: + - path: metadata/labels + create: true diff --git a/manifests/bases/image-reflector-controller/kustomization.yaml b/manifests/bases/image-reflector-controller/kustomization.yaml index 1c86e492..b139c31a 100644 --- a/manifests/bases/image-reflector-controller/kustomization.yaml +++ b/manifests/bases/image-reflector-controller/kustomization.yaml @@ -4,6 +4,8 @@ resources: - https://github.com/fluxcd/image-reflector-controller/releases/download/v0.21.0/image-reflector-controller.crds.yaml - https://github.com/fluxcd/image-reflector-controller/releases/download/v0.21.0/image-reflector-controller.deployment.yaml - account.yaml +transformers: +- labels.yaml patchesJson6902: - target: group: apps diff --git a/manifests/bases/image-reflector-controller/labels.yaml b/manifests/bases/image-reflector-controller/labels.yaml new file mode 100644 index 00000000..ee3a2f4f --- /dev/null +++ b/manifests/bases/image-reflector-controller/labels.yaml @@ -0,0 +1,9 @@ +apiVersion: builtin +kind: LabelTransformer +metadata: + name: labels +labels: + app.kubernetes.io/component: image-reflector-controller +fieldSpecs: + - path: metadata/labels + create: true diff --git a/manifests/bases/kustomize-controller/kustomization.yaml b/manifests/bases/kustomize-controller/kustomization.yaml index 51986bb2..1d42f608 100644 --- a/manifests/bases/kustomize-controller/kustomization.yaml +++ b/manifests/bases/kustomize-controller/kustomization.yaml @@ -4,6 +4,8 @@ resources: - https://github.com/fluxcd/kustomize-controller/releases/download/v0.28.0/kustomize-controller.crds.yaml - https://github.com/fluxcd/kustomize-controller/releases/download/v0.28.0/kustomize-controller.deployment.yaml - account.yaml +transformers: +- labels.yaml patchesJson6902: - target: group: apps @@ -11,4 +13,3 @@ patchesJson6902: kind: Deployment name: kustomize-controller path: patch.yaml - diff --git a/manifests/bases/kustomize-controller/labels.yaml b/manifests/bases/kustomize-controller/labels.yaml new file mode 100644 index 00000000..86e93ee2 --- /dev/null +++ b/manifests/bases/kustomize-controller/labels.yaml @@ -0,0 +1,9 @@ +apiVersion: builtin +kind: LabelTransformer +metadata: + name: labels +labels: + app.kubernetes.io/component: kustomize-controller +fieldSpecs: + - path: metadata/labels + create: true diff --git a/manifests/bases/notification-controller/kustomization.yaml b/manifests/bases/notification-controller/kustomization.yaml index e17a3923..7526df1d 100644 --- a/manifests/bases/notification-controller/kustomization.yaml +++ b/manifests/bases/notification-controller/kustomization.yaml @@ -4,6 +4,8 @@ resources: - https://github.com/fluxcd/notification-controller/releases/download/v0.26.0/notification-controller.crds.yaml - https://github.com/fluxcd/notification-controller/releases/download/v0.26.0/notification-controller.deployment.yaml - account.yaml +transformers: +- labels.yaml patchesJson6902: - target: group: apps diff --git a/manifests/bases/notification-controller/labels.yaml b/manifests/bases/notification-controller/labels.yaml new file mode 100644 index 00000000..4f6fdf07 --- /dev/null +++ b/manifests/bases/notification-controller/labels.yaml @@ -0,0 +1,9 @@ +apiVersion: builtin +kind: LabelTransformer +metadata: + name: labels +labels: + app.kubernetes.io/component: notification-controller +fieldSpecs: + - path: metadata/labels + create: true diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index c62cac6d..7089cc03 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -4,6 +4,8 @@ resources: - https://github.com/fluxcd/source-controller/releases/download/v0.29.0/source-controller.crds.yaml - https://github.com/fluxcd/source-controller/releases/download/v0.29.0/source-controller.deployment.yaml - account.yaml +transformers: +- labels.yaml patchesJson6902: - target: group: apps @@ -11,4 +13,3 @@ patchesJson6902: kind: Deployment name: source-controller path: patch.yaml - diff --git a/manifests/bases/source-controller/labels.yaml b/manifests/bases/source-controller/labels.yaml new file mode 100644 index 00000000..a7d9e0ad --- /dev/null +++ b/manifests/bases/source-controller/labels.yaml @@ -0,0 +1,9 @@ +apiVersion: builtin +kind: LabelTransformer +metadata: + name: labels +labels: + app.kubernetes.io/component: source-controller +fieldSpecs: + - path: metadata/labels + create: true From 45a00a01707759fed887960e2a2360a612aebce6 Mon Sep 17 00:00:00 2001 From: Carlos Nunez <75340335+carlosonunez-vmw@users.noreply.github.com> Date: Fri, 16 Sep 2022 16:16:19 -0500 Subject: [PATCH 242/818] Maintain original scheme when using --token-auth If you're using an HTTP-based Git server with Flux, you need to provide `--token-auth` to avoid triggering an SSH host key check (see [here](https://github.com/fluxcd/flux2/issues/2825#issuecomment-1151355914)). Unfortunately, doing this forces the URL in the `GitRepository` resource created during bootstrapping to always use `https`. This will cause Kustomization reconcile errors for servers that do not have HTTPS enabled or do not have the appropriate certs installed or available. This pull request fixes this by keeping the repository URL scheme intact when using `--token-auth`. Signed-off-by: Carlos Nunez <75340335+carlosonunez-vmw@users.noreply.github.com> --- cmd/flux/bootstrap_git.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cmd/flux/bootstrap_git.go b/cmd/flux/bootstrap_git.go index 27515775..2f5e2491 100644 --- a/cmd/flux/bootstrap_git.go +++ b/cmd/flux/bootstrap_git.go @@ -192,7 +192,9 @@ func bootstrapGitCmdRun(cmd *cobra.Command, args []string) error { // Configure repository URL to match auth config for sync. repositoryURL.User = nil - repositoryURL.Scheme = "https" + if !gitArgs.insecureHttpAllowed { + repositoryURL.Scheme = "https" + } } else { secretOpts.PrivateKeyAlgorithm = sourcesecret.PrivateKeyAlgorithm(bootstrapArgs.keyAlgorithm) secretOpts.Password = gitArgs.password From 348408e16e992978ed7272e87d3e08e4bc92836b Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 28 Sep 2022 22:05:48 +0300 Subject: [PATCH 243/818] Build with Go 1.19 Signed-off-by: Stefan Prodan --- .github/workflows/bootstrap.yaml | 2 +- .github/workflows/e2e-arm64.yaml | 2 +- .github/workflows/e2e-azure.yaml | 2 +- .github/workflows/e2e.yaml | 2 +- .github/workflows/release.yaml | 2 +- .github/workflows/scan.yaml | 2 +- .github/workflows/update.yaml | 2 +- CONTRIBUTING.md | 2 +- Makefile | 4 ++-- 9 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/bootstrap.yaml b/.github/workflows/bootstrap.yaml index f1af6800..2b7effd3 100644 --- a/.github/workflows/bootstrap.yaml +++ b/.github/workflows/bootstrap.yaml @@ -23,7 +23,7 @@ jobs: - name: Setup Go uses: actions/setup-go@v3 with: - go-version: 1.18.x + go-version: 1.19.x - name: Setup Kubernetes uses: engineerd/setup-kind@v0.5.0 with: diff --git a/.github/workflows/e2e-arm64.yaml b/.github/workflows/e2e-arm64.yaml index 62a886ac..53fb7650 100644 --- a/.github/workflows/e2e-arm64.yaml +++ b/.github/workflows/e2e-arm64.yaml @@ -16,7 +16,7 @@ jobs: - name: Setup Go uses: actions/setup-go@v3 with: - go-version: 1.18.x + go-version: 1.19.x - name: Prepare id: prep run: | diff --git a/.github/workflows/e2e-azure.yaml b/.github/workflows/e2e-azure.yaml index 102644b4..1019949e 100644 --- a/.github/workflows/e2e-azure.yaml +++ b/.github/workflows/e2e-azure.yaml @@ -23,7 +23,7 @@ jobs: - name: Setup Go uses: actions/setup-go@v2 with: - go-version: 1.18.x + go-version: 1.19.x - name: Install libgit2 run: | sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 648ACFD622F3D138 diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index 6b8566e9..29af71d6 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -27,7 +27,7 @@ jobs: - name: Setup Go uses: actions/setup-go@v3 with: - go-version: 1.18.x + go-version: 1.19.x - name: Setup Kubernetes uses: engineerd/setup-kind@v0.5.0 with: diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 0d95facd..cc969451 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -20,7 +20,7 @@ jobs: - name: Setup Go uses: actions/setup-go@v3 with: - go-version: 1.18.x + go-version: 1.19.x - name: Setup QEMU uses: docker/setup-qemu-action@v2 - name: Setup Docker Buildx diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index 7799570c..d7e064f0 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -57,7 +57,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v2 with: - go-version: 1.18 + go-version: 1.19.x - name: Initialize CodeQL uses: github/codeql-action/init@v2 with: diff --git a/.github/workflows/update.yaml b/.github/workflows/update.yaml index b557ffc3..062c05fb 100644 --- a/.github/workflows/update.yaml +++ b/.github/workflows/update.yaml @@ -16,7 +16,7 @@ jobs: - name: Setup Go uses: actions/setup-go@v3 with: - go-version: 1.18.x + go-version: 1.19.x - name: Update component versions id: update run: | diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 282b4c95..9579bdf3 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -67,7 +67,7 @@ for source changes. Prerequisites: -* go >= 1.17 +* go >= 1.19 * kubectl >= 1.20 * kustomize >= 4.4 * coreutils (on Mac OS) diff --git a/Makefile b/Makefile index 9699bca6..cee323e9 100644 --- a/Makefile +++ b/Makefile @@ -17,8 +17,8 @@ rwildcard=$(foreach d,$(wildcard $(addsuffix *,$(1))),$(call rwildcard,$(d)/,$(2 all: test build tidy: - go mod tidy -compat=1.18 - cd tests/azure && go mod tidy -compat=1.18 + go mod tidy -compat=1.19 + cd tests/azure && go mod tidy -compat=1.19 fmt: go fmt ./... From d7dadb442534cbe324e9e03869bcc2f58479a82b Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 28 Sep 2022 22:07:41 +0300 Subject: [PATCH 244/818] e2e: Update bootstrap test to Kubernetes 1.25.2 Signed-off-by: Stefan Prodan --- .github/workflows/bootstrap.yaml | 4 ++-- cmd/flux/create.go | 12 ++++++------ cmd/flux/get.go | 1 - 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/.github/workflows/bootstrap.yaml b/.github/workflows/bootstrap.yaml index 2b7effd3..e35b9176 100644 --- a/.github/workflows/bootstrap.yaml +++ b/.github/workflows/bootstrap.yaml @@ -27,8 +27,8 @@ jobs: - name: Setup Kubernetes uses: engineerd/setup-kind@v0.5.0 with: - version: v0.11.1 - image: kindest/node:v1.21.1@sha256:69860bda5563ac81e3c0057d654b5253219618a22ec3a346306239bba8cfa1a6 + version: v0.16.0 + image: kindest/node:v1.25.2@sha256:9be91e9e9cdf116809841fc77ebdb8845443c4c72fe5218f3ae9eb57fdb4bace - name: Setup Kustomize uses: fluxcd/pkg//actions/kustomize@main - name: Build diff --git a/cmd/flux/create.go b/cmd/flux/create.go index ee339775..b0eb0e83 100644 --- a/cmd/flux/create.go +++ b/cmd/flux/create.go @@ -79,12 +79,12 @@ type upsertable interface { // want to update. The mutate function is nullary -- you mutate a // value in the closure, e.g., by doing this: // -// var existing Value -// existing.Name = name -// existing.Namespace = ns -// upsert(ctx, client, valueAdapter{&value}, func() error { -// value.Spec = onePreparedEarlier -// }) +// var existing Value +// existing.Name = name +// existing.Namespace = ns +// upsert(ctx, client, valueAdapter{&value}, func() error { +// value.Spec = onePreparedEarlier +// }) func (names apiType) upsert(ctx context.Context, kubeClient client.Client, object upsertable, mutate func() error) (types.NamespacedName, error) { nsname := types.NamespacedName{ Namespace: object.GetNamespace(), diff --git a/cmd/flux/get.go b/cmd/flux/get.go index 84a7573a..2236e36e 100644 --- a/cmd/flux/get.go +++ b/cmd/flux/get.go @@ -214,7 +214,6 @@ func getRowsToPrint(getAll bool, list summarisable) ([][]string, error) { return rows, nil } -// // watch starts a client-side watch of one or more resources. func (get *getCommand) watch(ctx context.Context, kubeClient client.WithWatch, cmd *cobra.Command, args []string, listOpts []client.ListOption) error { w, err := kubeClient.Watch(ctx, get.list.asClientList(), listOpts...) From f41735237060aac2681568e24a29aa8c97e061c5 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 28 Sep 2022 23:25:36 +0300 Subject: [PATCH 245/818] Add Cosign keyless specification Signed-off-by: Stefan Prodan --- rfcs/0003-kubernetes-oci/README.md | 40 ++++++++++++++++++++++-------- 1 file changed, 29 insertions(+), 11 deletions(-) diff --git a/rfcs/0003-kubernetes-oci/README.md b/rfcs/0003-kubernetes-oci/README.md index 585fede5..e03f306c 100644 --- a/rfcs/0003-kubernetes-oci/README.md +++ b/rfcs/0003-kubernetes-oci/README.md @@ -4,7 +4,7 @@ **Creation date:** 2022-03-31 -**Last update:** 2022-08-22 +**Last update:** 2022-09-28 ## Summary @@ -124,16 +124,6 @@ spec: semver: "6.0.x" ``` -To verify the authenticity of an artifact, the Sigstore cosign public key can be supplied with: - -```yaml -spec: - verify: - provider: cosign - secretRef: - name: cosign-key -``` - ### Layer selection By default, Flux assumes that the first layer of the OCI artifact contains the Kubernetes configuration. @@ -224,6 +214,34 @@ controller will use a specific cloud SDK for authentication purposes. If both `s a non-generic provider are present in the definition, the controller will use the static credentials from the referenced secret. +### Verify artifacts + +To verify the authenticity of the OCI artifacts, Flux will use the Sigstore Go SDK and implement verification +for artifacts which were either signed with keys generated by Cosign or signed using the Cosign +[keyless method](https://github.com/sigstore/cosign/blob/main/KEYLESS.md). + +To enable signature verification, the Cosign public key can be supplied with: + +```yaml +spec: + verify: + provider: cosign + secretRef: + name: cosign-key +``` + +For verifying public artifacts which are signed using the keyless method, +the `spec.verify.secretRef` field must be omitted: + +```yaml +spec: + verify: + provider: cosign +``` + +When using the keyless method, Flux will verify the signatures in the Rekor +transparency log instance hosted at [rekor.sigstore.dev](https://rekor.sigstore.dev/). + ### Reconcile artifacts The `OCIRepository` can be used as a drop-in replacement for `GitRepository` and `Bucket` sources. From 6a1ba3c54551c6f0a611704abb209569ce6bca58 Mon Sep 17 00:00:00 2001 From: Santosh Kaluskar Date: Wed, 21 Sep 2022 21:08:30 +0530 Subject: [PATCH 246/818] monitoring: use container_memory_working_set_bytes Signed-off-by: Santosh Kaluskar --- .../monitoring/monitoring-config/dashboards/control-plane.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifests/monitoring/monitoring-config/dashboards/control-plane.json b/manifests/monitoring/monitoring-config/dashboards/control-plane.json index 3f03d300..40b1a1ad 100644 --- a/manifests/monitoring/monitoring-config/dashboards/control-plane.json +++ b/manifests/monitoring/monitoring-config/dashboards/control-plane.json @@ -548,7 +548,7 @@ "steppedLine": false, "targets": [ { - "expr": "rate(go_memstats_alloc_bytes_total{namespace=\"$namespace\",pod=~\".*-controller-.*\"}[1m])", + "expr": "sum(container_memory_working_set_bytes{namespace=\"$namespace\",container!=\"POD\",container!=\"\",pod=~\".*-controller-.*\"}) by (pod)", "hide": false, "interval": "", "legendFormat": "{{pod}}", From 358c6d38b76a82aa8bd5557e9d72ab003ddc6c16 Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Thu, 29 Sep 2022 18:04:36 +0000 Subject: [PATCH 247/818] Update toolkit components - helm-controller to v0.25.0 https://github.com/fluxcd/helm-controller/blob/v0.25.0/CHANGELOG.md - kustomize-controller to v0.29.0 https://github.com/fluxcd/kustomize-controller/blob/v0.29.0/CHANGELOG.md - source-controller to v0.30.0 https://github.com/fluxcd/source-controller/blob/v0.30.0/CHANGELOG.md - notification-controller to v0.27.0 https://github.com/fluxcd/notification-controller/blob/v0.27.0/CHANGELOG.md - image-reflector-controller to v0.22.0 https://github.com/fluxcd/image-reflector-controller/blob/v0.22.0/CHANGELOG.md - image-automation-controller to v0.26.0 https://github.com/fluxcd/image-automation-controller/blob/v0.26.0/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 31 ++++----- go.sum | 64 ++++++++++--------- .../bases/helm-controller/kustomization.yaml | 4 +- .../kustomization.yaml | 4 +- .../kustomization.yaml | 4 +- .../kustomize-controller/kustomization.yaml | 4 +- .../kustomization.yaml | 4 +- .../source-controller/kustomization.yaml | 4 +- manifests/crds/kustomization.yaml | 12 ++-- 9 files changed, 68 insertions(+), 63 deletions(-) diff --git a/go.mod b/go.mod index 09d18f4d..51a00698 100644 --- a/go.mod +++ b/go.mod @@ -7,12 +7,12 @@ require ( github.com/ProtonMail/go-crypto v0.0.0-20220824120805-4b6e5c587895 github.com/cyphar/filepath-securejoin v0.2.3 github.com/fluxcd/go-git-providers v0.8.0 - github.com/fluxcd/helm-controller/api v0.24.0 - github.com/fluxcd/image-automation-controller/api v0.25.0 - github.com/fluxcd/image-reflector-controller/api v0.21.0 - github.com/fluxcd/kustomize-controller/api v0.28.0 - github.com/fluxcd/notification-controller/api v0.26.0 - github.com/fluxcd/pkg/apis/meta v0.15.0 + github.com/fluxcd/helm-controller/api v0.25.0 + github.com/fluxcd/image-automation-controller/api v0.26.0 + github.com/fluxcd/image-reflector-controller/api v0.22.0 + github.com/fluxcd/kustomize-controller/api v0.29.0 + github.com/fluxcd/notification-controller/api v0.27.0 + github.com/fluxcd/pkg/apis/meta v0.16.0 github.com/fluxcd/pkg/kustomize v0.7.0 github.com/fluxcd/pkg/oci v0.9.0 github.com/fluxcd/pkg/runtime v0.18.0 @@ -21,7 +21,7 @@ require ( github.com/fluxcd/pkg/ssh v0.6.0 github.com/fluxcd/pkg/untar v0.2.0 github.com/fluxcd/pkg/version v0.2.0 - github.com/fluxcd/source-controller/api v0.29.0 + github.com/fluxcd/source-controller/api v0.30.0 github.com/go-git/go-git/v5 v5.4.2 github.com/gonvenience/bunt v1.3.4 github.com/gonvenience/ytbx v1.4.4 @@ -39,14 +39,14 @@ require ( github.com/theckman/yacspin v0.13.12 golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d golang.org/x/term v0.0.0-20220722155259-a9ba230a4035 - k8s.io/api v0.25.0 - k8s.io/apiextensions-apiserver v0.25.0 - k8s.io/apimachinery v0.25.0 + k8s.io/api v0.25.2 + k8s.io/apiextensions-apiserver v0.25.2 + k8s.io/apimachinery v0.25.2 k8s.io/cli-runtime v0.25.0 - k8s.io/client-go v0.25.0 + k8s.io/client-go v0.25.2 k8s.io/kubectl v0.25.0 sigs.k8s.io/cli-utils v0.33.0 - sigs.k8s.io/controller-runtime v0.12.3 + sigs.k8s.io/controller-runtime v0.13.0 sigs.k8s.io/kustomize/api v0.12.1 sigs.k8s.io/kustomize/kyaml v0.13.9 sigs.k8s.io/yaml v1.3.0 @@ -89,11 +89,12 @@ require ( github.com/emicklei/go-restful/v3 v3.8.0 // indirect github.com/emirpasic/gods v1.12.0 // indirect github.com/evanphx/json-patch v4.12.0+incompatible // indirect + github.com/evanphx/json-patch/v5 v5.6.0 // indirect github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d // indirect github.com/fatih/color v1.13.0 // indirect github.com/fluxcd/pkg/apis/acl v0.1.0 // indirect - github.com/fluxcd/pkg/apis/kustomize v0.5.0 // indirect - github.com/fsnotify/fsnotify v1.5.1 // indirect + github.com/fluxcd/pkg/apis/kustomize v0.6.0 // indirect + github.com/fsnotify/fsnotify v1.5.4 // indirect github.com/go-errors/errors v1.0.1 // indirect github.com/go-git/gcfg v1.5.0 // indirect github.com/go-git/go-billy/v5 v5.3.1 // indirect @@ -181,7 +182,7 @@ require ( gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/component-base v0.25.0 // indirect + k8s.io/component-base v0.25.2 // indirect k8s.io/klog/v2 v2.70.1 // indirect k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1 // indirect k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed // indirect diff --git a/go.sum b/go.sum index f40feaa8..a253c400 100644 --- a/go.sum +++ b/go.sum @@ -244,6 +244,8 @@ github.com/ettle/strcase v0.1.1/go.mod h1:hzDLsPC7/lwKyBOywSHEP89nt2pDgdy+No1NBA github.com/evanphx/json-patch v0.5.2/go.mod h1:ZWS5hhDbVDyob71nXKNL0+PWn6ToqBHMikGIFbs31qQ= github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH5pOlLGNtQ5lPWQu84= github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJCLunww= +github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d h1:105gxyaGwCFad8crR9dcMQWvV9Hvulu6hwUh4tWPJnM= github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d/go.mod h1:ZZMPRZwes7CROmyNKgQzC3XPs6L/G2EJLHddWejkmf4= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= @@ -256,22 +258,22 @@ github.com/felixge/httpsnoop v1.0.1 h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8S github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0= github.com/fluxcd/go-git-providers v0.8.0 h1:80UMu7yvRoEVfEIg0eGb9bJ0bSceizNJrEVvwLo+0YI= github.com/fluxcd/go-git-providers v0.8.0/go.mod h1:krF+f3UFciy5QmFaYfaORCVxaEj7u2qD7R/WrfKCLWk= -github.com/fluxcd/helm-controller/api v0.24.0 h1:JYE34zzPMfd/QTyCaeafFEnCu0mvnG6zayGLIC0W6D0= -github.com/fluxcd/helm-controller/api v0.24.0/go.mod h1:OhrOXaxwBBvW1R0OiV49caa3YszWiwmPViQkm67HW4M= -github.com/fluxcd/image-automation-controller/api v0.25.0 h1:erWR8X0tOnTon7eO3MzAGZrFtvTrP9sNGfcE5Qt/k6I= -github.com/fluxcd/image-automation-controller/api v0.25.0/go.mod h1:nCWUVwivbJf3nmJ/+zQgxBK9m27dNIE/rVimDsIK7u4= -github.com/fluxcd/image-reflector-controller/api v0.21.0 h1:+3iBaBu16pun5eWJiKBu1oy6J3gbSJYhPbY4styFpwM= -github.com/fluxcd/image-reflector-controller/api v0.21.0/go.mod h1:DhfOTfm3tP4czFzcU8U7gLJAazhmts/EgmC+kRHlOww= -github.com/fluxcd/kustomize-controller/api v0.28.0 h1:BEidxWgemuVacqAGKQnG/UXkWkpRyuWryaPSIFba6kw= -github.com/fluxcd/kustomize-controller/api v0.28.0/go.mod h1:OLNvteIzaJDMXRJD9DbTPzCuP57qWtRo9B+qzBn2L4o= -github.com/fluxcd/notification-controller/api v0.26.0 h1:Wi4wRcTjTfrCEOBUwbamO8T/R00VB5fhzbUwDFTi5Fc= -github.com/fluxcd/notification-controller/api v0.26.0/go.mod h1:ChTwLfjDJK7eoawfB3K3HUReq7QoCwcXNy3PzlCumAo= +github.com/fluxcd/helm-controller/api v0.25.0 h1:mQA1HdxbystbR0V19gH+Wk5KX71XLvnR60nQhfgM4HE= +github.com/fluxcd/helm-controller/api v0.25.0/go.mod h1:zAonFUQDeqyvV+huvC7ixEmkDCtjfAj7G4YrDM5zG0s= +github.com/fluxcd/image-automation-controller/api v0.26.0 h1:ZPHbUAleOd4a6fPwyHL3qZ7rEkvC4C3hbfrlml1vq1M= +github.com/fluxcd/image-automation-controller/api v0.26.0/go.mod h1:rle5vnYNnDONgS1k9wd85J7Lq4muU91q751Pzy/XkW4= +github.com/fluxcd/image-reflector-controller/api v0.22.0 h1:IS3HbHdNTu0A/E6vdEkvIAo2fe0eMXHpEsDNUssYIIE= +github.com/fluxcd/image-reflector-controller/api v0.22.0/go.mod h1:G5l+1InmlYiZFdt2IdgHYhKmD67no0ok1UKuSB8WYIU= +github.com/fluxcd/kustomize-controller/api v0.29.0 h1:8OGL6dEM0XQXgHCl0pR+5j5K0n7zznObwEtXgCkl9kY= +github.com/fluxcd/kustomize-controller/api v0.29.0/go.mod h1:cBtUR4eqAC5Wa/tdMjLCVd4Ws0p3zHJV+pv8xHMH45g= +github.com/fluxcd/notification-controller/api v0.27.0 h1:/a//z5cg6AjSRB9dbyJDqTq9iibHNNFgGsmNJ35TRrU= +github.com/fluxcd/notification-controller/api v0.27.0/go.mod h1:jSFaOX9XG4icgrrNvYPmZnj8P/dLjUhoJkaX2ro9YAY= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= -github.com/fluxcd/pkg/apis/kustomize v0.5.0 h1:4Rvr4zWQV2KyHkSQzq8IFPo10b0UVAGEgVaXByrGlNw= -github.com/fluxcd/pkg/apis/kustomize v0.5.0/go.mod h1:N3Rtc5wDm/omHH0YHUbILyUpRNmWvZGejb5/8Uyk6II= -github.com/fluxcd/pkg/apis/meta v0.15.0 h1:uDVzbDNdFjp0GSB9qMpcW6r4K7SAjBQlCxQENSkWgkQ= -github.com/fluxcd/pkg/apis/meta v0.15.0/go.mod h1:7NkgFrlswnx2QxP16+8zVNDBf+VhZ7PsDhkcJY6OSgQ= +github.com/fluxcd/pkg/apis/kustomize v0.6.0 h1:Afxv3Uv+xiuettzqm3sP0ceWikDZTfHdHtLv6u2nFM8= +github.com/fluxcd/pkg/apis/kustomize v0.6.0/go.mod h1:iY0zSpK6eUiPfNt/yR6g0q/wQP+wH+Ax/L7KBOx5x2M= +github.com/fluxcd/pkg/apis/meta v0.16.0 h1:6Mj9rB0TtvCeTe3IlQDc1i2DH75Oosea9yUqS7XafVg= +github.com/fluxcd/pkg/apis/meta v0.16.0/go.mod h1:GrOVzWXiu22XjLNgLLe2EBYhQPqZetes5SIADb4bmHE= github.com/fluxcd/pkg/kustomize v0.7.0 h1:604rlpRZTWaOfzDZ1W93aHaFh9kn8/UMX/wzsjwIUQY= github.com/fluxcd/pkg/kustomize v0.7.0/go.mod h1:zJY3Z0+SX+zs+/A1F6fCT0JvUce265XnrpTtHnujXPo= github.com/fluxcd/pkg/oci v0.9.0 h1:ywS1rp8AV/N4UDVFYQK4qYfrADATPiWA3leXjG/eeK4= @@ -288,13 +290,14 @@ github.com/fluxcd/pkg/untar v0.2.0 h1:sJXU+FbJcNUb2ffLJNjeR3hwt3X2loVpOMlCUjyFw6 github.com/fluxcd/pkg/untar v0.2.0/go.mod h1:33AyoWaPpjX/xXpczcfhQh2AkB63TFwiR2YwROtv23E= github.com/fluxcd/pkg/version v0.2.0 h1:jG22c59Bsv6vL51N7Bqn8tjHArYOXrjbIkGArlIrv5w= github.com/fluxcd/pkg/version v0.2.0/go.mod h1:umN1VAOV0sB1JDVwb8eXZzuuqIAEku+y+vcCVBBUIf0= -github.com/fluxcd/source-controller/api v0.29.0 h1:RyuHUCW7NtnHu61RbZUYhNWS+Nl0Z0rWS6a4aGGZZqE= -github.com/fluxcd/source-controller/api v0.29.0/go.mod h1:pqWB3brXYkacesoKGY96dTJRrafThY1VwDQy6md1W/4= +github.com/fluxcd/source-controller/api v0.30.0 h1:rPVPpwXcYG2n0DTRcRagfGDiccvCib5S09K5iMjlpRU= +github.com/fluxcd/source-controller/api v0.30.0/go.mod h1:UkjAqQ6QAXNNesNQDTArTeiTp+UuhOUIA+JyFhGP/+Q= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpgI= github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= +github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= +github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= github.com/fullstorydev/grpcurl v1.6.0/go.mod h1:ZQ+ayqbKMJNhzLmbpCiurTVlaK2M/3nqZCxaQ2Ze/sM= github.com/fzipp/gocyclo v0.3.1/go.mod h1:DJHO6AUmbdqj2ET4Z9iArSuwWgYDRryYt2wASxc7x3E= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= @@ -770,7 +773,7 @@ github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+ github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= -github.com/onsi/ginkgo/v2 v2.1.4 h1:GNapqRSid3zijZ9H77KrgVG4/8KqiyRsxcSxe+7ApXY= +github.com/onsi/ginkgo/v2 v2.1.6 h1:Fx2POJZfKRQcM1pH49qSZiYeu319wji004qX+GDovrU= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.16.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= @@ -1251,6 +1254,7 @@ golang.org/x/sys v0.0.0-20211013075003-97ac67df715c/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f h1:v4INt8xihDGvnrfjMDVXGxw9wrfxYyCjk0KbXjhR55s= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1580,18 +1584,18 @@ honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.2.1/go.mod h1:lPVVZ2BS5TfnjLyizF7o7hv7j9/L+8cZY2hLyjP9cGY= -k8s.io/api v0.25.0 h1:H+Q4ma2U/ww0iGB78ijZx6DRByPz6/733jIuFpX70e0= -k8s.io/api v0.25.0/go.mod h1:ttceV1GyV1i1rnmvzT3BST08N6nGt+dudGrquzVQWPk= -k8s.io/apiextensions-apiserver v0.25.0 h1:CJ9zlyXAbq0FIW8CD7HHyozCMBpDSiH7EdrSTCZcZFY= -k8s.io/apiextensions-apiserver v0.25.0/go.mod h1:3pAjZiN4zw7R8aZC5gR0y3/vCkGlAjCazcg1me8iB/E= -k8s.io/apimachinery v0.25.0 h1:MlP0r6+3XbkUG2itd6vp3oxbtdQLQI94fD5gCS+gnoU= -k8s.io/apimachinery v0.25.0/go.mod h1:qMx9eAk0sZQGsXGu86fab8tZdffHbwUfsvzqKn4mfB0= +k8s.io/api v0.25.2 h1:v6G8RyFcwf0HR5jQGIAYlvtRNrxMJQG1xJzaSeVnIS8= +k8s.io/api v0.25.2/go.mod h1:qP1Rn4sCVFwx/xIhe+we2cwBLTXNcheRyYXwajonhy0= +k8s.io/apiextensions-apiserver v0.25.2 h1:8uOQX17RE7XL02ngtnh3TgifY7EhekpK+/piwzQNnBo= +k8s.io/apiextensions-apiserver v0.25.2/go.mod h1:iRwwRDlWPfaHhuBfQ0WMa5skdQfrE18QXJaJvIDLvE8= +k8s.io/apimachinery v0.25.2 h1:WbxfAjCx+AeN8Ilp9joWnyJ6xu9OMeS/fsfjK/5zaQs= +k8s.io/apimachinery v0.25.2/go.mod h1:hqqA1X0bsgsxI6dXsJ4HnNTBOmJNxyPp8dw3u2fSHwA= k8s.io/cli-runtime v0.25.0 h1:XBnTc2Fi+w818jcJGzhiJKQuXl8479sZ4FhtV5hVJ1Q= k8s.io/cli-runtime v0.25.0/go.mod h1:bHOI5ZZInRHhbq12OdUiYZQN8ml8aKZLwQgt9QlLINw= -k8s.io/client-go v0.25.0 h1:CVWIaCETLMBNiTUta3d5nzRbXvY5Hy9Dpl+VvREpu5E= -k8s.io/client-go v0.25.0/go.mod h1:lxykvypVfKilxhTklov0wz1FoaUZ8X4EwbhS6rpRfN8= -k8s.io/component-base v0.25.0 h1:haVKlLkPCFZhkcqB6WCvpVxftrg6+FK5x1ZuaIDaQ5Y= -k8s.io/component-base v0.25.0/go.mod h1:F2Sumv9CnbBlqrpdf7rKZTmmd2meJq0HizeyY/yAFxk= +k8s.io/client-go v0.25.2 h1:SUPp9p5CwM0yXGQrwYurw9LWz+YtMwhWd0GqOsSiefo= +k8s.io/client-go v0.25.2/go.mod h1:i7cNU7N+yGQmJkewcRD2+Vuj4iz7b30kI8OcL3horQ4= +k8s.io/component-base v0.25.2 h1:Nve/ZyHLUBHz1rqwkjXm/Re6IniNa5k7KgzxZpTfSQY= +k8s.io/component-base v0.25.2/go.mod h1:90W21YMr+Yjg7MX+DohmZLzjsBtaxQDDwaX4YxDkl60= k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.70.1 h1:7aaoSdahviPmR+XkS7FyxlkkXs6tHISSG03RxleQAVQ= k8s.io/klog/v2 v2.70.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= @@ -1610,8 +1614,8 @@ rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/cli-utils v0.33.0 h1:/ioqfYu0hVeR2T2SDH3WVPgpqiJkrzqjJFrQ3u+baHk= sigs.k8s.io/cli-utils v0.33.0/go.mod h1:g/zB9hJ5eUN7zIEBIxrO0CwhXU4YISJ+BkLJzvWwlEs= -sigs.k8s.io/controller-runtime v0.12.3 h1:FCM8xeY/FI8hoAfh/V4XbbYMY20gElh9yh+A98usMio= -sigs.k8s.io/controller-runtime v0.12.3/go.mod h1:qKsk4WE6zW2Hfj0G4v10EnNB2jMG1C+NTb8h+DwCoU0= +sigs.k8s.io/controller-runtime v0.13.0 h1:iqa5RNciy7ADWnIc8QxCbOX5FEKVR3uxVxKHRMc2WIQ= +sigs.k8s.io/controller-runtime v0.13.0/go.mod h1:Zbz+el8Yg31jubvAEyglRZGdLAjplZl+PgtYNI6WNTI= sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 h1:iXTIw73aPyC+oRdyqqvVJuloN1p0AC/kzH07hu3NE+k= sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= sigs.k8s.io/kustomize/api v0.12.1 h1:7YM7gW3kYBwtKvoY216ZzY+8hM+lV53LUayghNRJ0vM= diff --git a/manifests/bases/helm-controller/kustomization.yaml b/manifests/bases/helm-controller/kustomization.yaml index becb28ca..d622104e 100644 --- a/manifests/bases/helm-controller/kustomization.yaml +++ b/manifests/bases/helm-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/helm-controller/releases/download/v0.24.0/helm-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.24.0/helm-controller.deployment.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.25.0/helm-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.25.0/helm-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/image-automation-controller/kustomization.yaml b/manifests/bases/image-automation-controller/kustomization.yaml index 3ed2e6b1..7e974e03 100644 --- a/manifests/bases/image-automation-controller/kustomization.yaml +++ b/manifests/bases/image-automation-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.25.0/image-automation-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.25.0/image-automation-controller.deployment.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.26.0/image-automation-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.26.0/image-automation-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/image-reflector-controller/kustomization.yaml b/manifests/bases/image-reflector-controller/kustomization.yaml index b139c31a..752e6695 100644 --- a/manifests/bases/image-reflector-controller/kustomization.yaml +++ b/manifests/bases/image-reflector-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.21.0/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.21.0/image-reflector-controller.deployment.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.22.0/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.22.0/image-reflector-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/kustomize-controller/kustomization.yaml b/manifests/bases/kustomize-controller/kustomization.yaml index 1d42f608..4e71f1b6 100644 --- a/manifests/bases/kustomize-controller/kustomization.yaml +++ b/manifests/bases/kustomize-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.28.0/kustomize-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.28.0/kustomize-controller.deployment.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.29.0/kustomize-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.29.0/kustomize-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/notification-controller/kustomization.yaml b/manifests/bases/notification-controller/kustomization.yaml index 7526df1d..8758f66e 100644 --- a/manifests/bases/notification-controller/kustomization.yaml +++ b/manifests/bases/notification-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/notification-controller/releases/download/v0.26.0/notification-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v0.26.0/notification-controller.deployment.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.27.0/notification-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.27.0/notification-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index 7089cc03..c95730b5 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.29.0/source-controller.crds.yaml -- https://github.com/fluxcd/source-controller/releases/download/v0.29.0/source-controller.deployment.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.30.0/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.30.0/source-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index e4fb0047..b5553e99 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -1,9 +1,9 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.29.0/source-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.28.0/kustomize-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.24.0/helm-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v0.26.0/notification-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.21.0/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.25.0/image-automation-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.30.0/source-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.29.0/kustomize-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.25.0/helm-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.27.0/notification-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.22.0/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.26.0/image-automation-controller.crds.yaml From cad251444cacfaaff75ab5c1e9395b4fcf81e098 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Thu, 29 Sep 2022 21:06:57 +0300 Subject: [PATCH 248/818] Update OCI golden files Signed-off-by: Stefan Prodan --- cmd/flux/source_oci_test.go | 8 ++++---- cmd/flux/testdata/oci/create_source_oci.golden | 2 +- cmd/flux/testdata/oci/get_oci.golden | 2 +- cmd/flux/testdata/oci/reconcile_oci.golden | 2 +- cmd/flux/testdata/oci/resume_oci.golden | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/cmd/flux/source_oci_test.go b/cmd/flux/source_oci_test.go index c0f8125c..02ca7e88 100644 --- a/cmd/flux/source_oci_test.go +++ b/cmd/flux/source_oci_test.go @@ -32,10 +32,10 @@ func TestSourceOCI(t *testing.T) { "create source oci thrfg --url=oci://ghcr.io/stefanprodan/manifests/podinfo --tag=6.1.6 --interval 10m", "testdata/oci/create_source_oci.golden", }, - { - "get source oci thrfg", - "testdata/oci/get_oci.golden", - }, + //{ + // "get source oci thrfg", + // "testdata/oci/get_oci.golden", + //}, { "reconcile source oci thrfg", "testdata/oci/reconcile_oci.golden", diff --git a/cmd/flux/testdata/oci/create_source_oci.golden b/cmd/flux/testdata/oci/create_source_oci.golden index af1125c8..b2c2d3a3 100644 --- a/cmd/flux/testdata/oci/create_source_oci.golden +++ b/cmd/flux/testdata/oci/create_source_oci.golden @@ -2,4 +2,4 @@ ✔ OCIRepository created ◎ waiting for OCIRepository reconciliation ✔ OCIRepository reconciliation completed -✔ fetched revision: dbdb109711ffb3be77504d2670dbe13c24dd63d8d7f1fb489d350e5bfe930dd3 +✔ fetched revision: 6.1.6/dbdb109711ffb3be77504d2670dbe13c24dd63d8d7f1fb489d350e5bfe930dd3 diff --git a/cmd/flux/testdata/oci/get_oci.golden b/cmd/flux/testdata/oci/get_oci.golden index ae582c8c..b200bd92 100644 --- a/cmd/flux/testdata/oci/get_oci.golden +++ b/cmd/flux/testdata/oci/get_oci.golden @@ -1,2 +1,2 @@ NAME REVISION SUSPENDED READY MESSAGE -thrfg dbdb109711ffb3be77504d2670dbe13c24dd63d8d7f1fb489d350e5bfe930dd3 False True stored artifact for digest 'dbdb109711ffb3be77504d2670dbe13c24dd63d8d7f1fb489d350e5bfe930dd3' +thrfg dbdb109711ffb3be77504d2670dbe13c24dd63d8d7f1fb489d350e5bfe930dd3 False True stored artifact for digest 'dbdb109711ffb3be77504d2670dbe13c24dd63d8d7f1fb489d350e5bfe930dd3' \ No newline at end of file diff --git a/cmd/flux/testdata/oci/reconcile_oci.golden b/cmd/flux/testdata/oci/reconcile_oci.golden index 832c3294..6f095770 100644 --- a/cmd/flux/testdata/oci/reconcile_oci.golden +++ b/cmd/flux/testdata/oci/reconcile_oci.golden @@ -1,4 +1,4 @@ ► annotating OCIRepository thrfg in {{ .ns }} namespace ✔ OCIRepository annotated ◎ waiting for OCIRepository reconciliation -✔ fetched revision dbdb109711ffb3be77504d2670dbe13c24dd63d8d7f1fb489d350e5bfe930dd3 +✔ fetched revision 6.1.6/dbdb109711ffb3be77504d2670dbe13c24dd63d8d7f1fb489d350e5bfe930dd3 diff --git a/cmd/flux/testdata/oci/resume_oci.golden b/cmd/flux/testdata/oci/resume_oci.golden index b4341a5d..4b022bad 100644 --- a/cmd/flux/testdata/oci/resume_oci.golden +++ b/cmd/flux/testdata/oci/resume_oci.golden @@ -2,4 +2,4 @@ ✔ source oci resumed ◎ waiting for OCIRepository reconciliation ✔ OCIRepository reconciliation completed -✔ fetched revision dbdb109711ffb3be77504d2670dbe13c24dd63d8d7f1fb489d350e5bfe930dd3 +✔ fetched revision 6.1.6/dbdb109711ffb3be77504d2670dbe13c24dd63d8d7f1fb489d350e5bfe930dd3 From d37bb429958d6c7d369e0a131b70d37298000aa6 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Thu, 29 Sep 2022 21:32:34 +0300 Subject: [PATCH 249/818] Update RFC-0003 implementation history Signed-off-by: Stefan Prodan --- rfcs/0003-kubernetes-oci/README.md | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/rfcs/0003-kubernetes-oci/README.md b/rfcs/0003-kubernetes-oci/README.md index e03f306c..686f4b6e 100644 --- a/rfcs/0003-kubernetes-oci/README.md +++ b/rfcs/0003-kubernetes-oci/README.md @@ -1,10 +1,10 @@ # RFC-0003 Flux OCI support for Kubernetes manifests -**Status:** implemented (partially) +**Status:** implemented **Creation date:** 2022-03-31 -**Last update:** 2022-09-28 +**Last update:** 2022-09-29 ## Summary @@ -475,8 +475,4 @@ The feature is enabled by default. * **2022-08-08** Partially implemented by [source-controller#788](https://github.com/fluxcd/source-controller/pull/788) * **2022-08-11** First implementation released with [flux2 v0.32.0](https://github.com/fluxcd/flux2/releases/tag/v0.32.0) * **2022-08-29** Select layer by OCI media type released with [flux2 v0.33.0](https://github.com/fluxcd/flux2/releases/tag/v0.33.0) - -### TODOs - -* [Add support for verifying the OCI artifacts with cosign](https://github.com/fluxcd/source-controller/issues/863) - +* **2022-09-29** Verifying OCI artifacts with Cosign released with [flux2 v0.35.0](https://github.com/fluxcd/flux2/releases/tag/v0.35.0) From 1f57cf3d31c1347c9f06e8929942c61150209173 Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Fri, 30 Sep 2022 06:04:38 +0100 Subject: [PATCH 250/818] Update oci golden file Signed-off-by: Somtochi Onyekwere --- cmd/flux/source_oci_test.go | 8 ++++---- cmd/flux/testdata/oci/get_oci.golden | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/cmd/flux/source_oci_test.go b/cmd/flux/source_oci_test.go index 02ca7e88..c0f8125c 100644 --- a/cmd/flux/source_oci_test.go +++ b/cmd/flux/source_oci_test.go @@ -32,10 +32,10 @@ func TestSourceOCI(t *testing.T) { "create source oci thrfg --url=oci://ghcr.io/stefanprodan/manifests/podinfo --tag=6.1.6 --interval 10m", "testdata/oci/create_source_oci.golden", }, - //{ - // "get source oci thrfg", - // "testdata/oci/get_oci.golden", - //}, + { + "get source oci thrfg", + "testdata/oci/get_oci.golden", + }, { "reconcile source oci thrfg", "testdata/oci/reconcile_oci.golden", diff --git a/cmd/flux/testdata/oci/get_oci.golden b/cmd/flux/testdata/oci/get_oci.golden index b200bd92..5397cae2 100644 --- a/cmd/flux/testdata/oci/get_oci.golden +++ b/cmd/flux/testdata/oci/get_oci.golden @@ -1,2 +1,2 @@ -NAME REVISION SUSPENDED READY MESSAGE -thrfg dbdb109711ffb3be77504d2670dbe13c24dd63d8d7f1fb489d350e5bfe930dd3 False True stored artifact for digest 'dbdb109711ffb3be77504d2670dbe13c24dd63d8d7f1fb489d350e5bfe930dd3' \ No newline at end of file +NAME REVISION SUSPENDED READY MESSAGE +thrfg 6.1.6/dbdb109711ffb3be77504d2670dbe13c24dd63d8d7f1fb489d350e5bfe930dd3 False True stored artifact for digest '6.1.6/dbdb109711ffb3be77504d2670dbe13c24dd63d8d7f1fb489d350e5bfe930dd3' From 4680abe951604babf8db7fcdcf4864838a21a901 Mon Sep 17 00:00:00 2001 From: Philip Laine Date: Wed, 5 Oct 2022 12:23:56 +0200 Subject: [PATCH 251/818] Update libgit2 version in Azure e2e tests Signed-off-by: Philip Laine --- .github/workflows/e2e-azure.yaml | 9 +++---- tests/azure/azure_test.go | 2 +- tests/azure/go.mod | 2 +- tests/azure/go.sum | 4 +-- tests/azure/terraform/aks/.terraform.lock.hcl | 26 +++++++++---------- tests/azure/util_test.go | 7 +++-- 6 files changed, 25 insertions(+), 25 deletions(-) diff --git a/.github/workflows/e2e-azure.yaml b/.github/workflows/e2e-azure.yaml index 1019949e..e3f37107 100644 --- a/.github/workflows/e2e-azure.yaml +++ b/.github/workflows/e2e-azure.yaml @@ -9,7 +9,7 @@ on: jobs: e2e: - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - name: Checkout uses: actions/checkout@v3 @@ -26,12 +26,9 @@ jobs: go-version: 1.19.x - name: Install libgit2 run: | - sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 648ACFD622F3D138 - sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 0E98404D386FA1D9 - echo "deb http://deb.debian.org/debian unstable main" | sudo tee -a /etc/apt/sources.list - echo "deb-src http://deb.debian.org/debian unstable main" | sudo tee -a /etc/apt/sources.list + echo "deb http://archive.ubuntu.com/ubuntu/ kinetic universe" | sudo tee -a /etc/apt/sources.list sudo apt-get update - sudo apt-get install -y --allow-downgrades libgit2-dev/unstable zlib1g-dev/unstable libssh2-1-dev/unstable libpcre3-dev/unstable + sudo apt-get install -y -t kinetic libgit2-dev=1.3.0+dfsg.1-3ubuntu1 - name: Setup Flux CLI run: | make build diff --git a/tests/azure/azure_test.go b/tests/azure/azure_test.go index baf42170..b18fae58 100644 --- a/tests/azure/azure_test.go +++ b/tests/azure/azure_test.go @@ -35,7 +35,7 @@ import ( "github.com/hashicorp/hc-install/product" "github.com/hashicorp/hc-install/src" "github.com/hashicorp/terraform-exec/tfexec" - git2go "github.com/libgit2/git2go/v31" + git2go "github.com/libgit2/git2go/v33" "github.com/microsoft/azure-devops-go-api/azuredevops" "github.com/microsoft/azure-devops-go-api/azuredevops/git" "github.com/stretchr/testify/require" diff --git a/tests/azure/go.mod b/tests/azure/go.mod index 835f7452..69d9412d 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -14,7 +14,7 @@ require ( github.com/fluxcd/source-controller/api v0.29.0 github.com/hashicorp/hc-install v0.4.0 github.com/hashicorp/terraform-exec v0.17.3 - github.com/libgit2/git2go/v31 v31.7.9 + github.com/libgit2/git2go/v33 v33.0.9 github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 github.com/stretchr/testify v1.8.0 github.com/whilp/git-urls v1.0.0 diff --git a/tests/azure/go.sum b/tests/azure/go.sum index 4d47c82b..e7e02e81 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -337,8 +337,8 @@ github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= -github.com/libgit2/git2go/v31 v31.7.9 h1:RUDiYm7+i3GY414acI31oDD8x5P0PZyWeZZfwpPuynE= -github.com/libgit2/git2go/v31 v31.7.9/go.mod h1:c/rkJcBcUFx6wHaT++UwNpKvIsmPNqCeQ/vzO4DrEec= +github.com/libgit2/git2go/v33 v33.0.9 h1:4ch2DJed6IhJO28BEohkUoGvxLsRzUjxljoNFJ6/O78= +github.com/libgit2/git2go/v33 v33.0.9/go.mod h1:KdpqkU+6+++4oHna/MIOgx4GCQ92IPCdpVRMRI80J+4= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.7.6 h1:8yTIVnZgCoiM1TgqoeTl+LfU5Jg6/xL3QhGQnimLYnA= diff --git a/tests/azure/terraform/aks/.terraform.lock.hcl b/tests/azure/terraform/aks/.terraform.lock.hcl index da879d8e..cc3c7846 100644 --- a/tests/azure/terraform/aks/.terraform.lock.hcl +++ b/tests/azure/terraform/aks/.terraform.lock.hcl @@ -42,21 +42,21 @@ provider "registry.terraform.io/hashicorp/azurerm" { } provider "registry.terraform.io/hashicorp/random" { - version = "3.3.2" + version = "3.4.3" hashes = [ - "h1:H5V+7iXol/EHB2+BUMzGlpIiCOdV74H8YjzCxnSAWcg=", - "zh:038293aebfede983e45ee55c328e3fde82ae2e5719c9bd233c324cfacc437f9c", - "zh:07eaeab03a723d83ac1cc218f3a59fceb7bbf301b38e89a26807d1c93c81cef8", - "zh:427611a4ce9d856b1c73bea986d841a969e4c2799c8ac7c18798d0cc42b78d32", - "zh:49718d2da653c06a70ba81fd055e2b99dfd52dcb86820a6aeea620df22cd3b30", - "zh:5574828d90b19ab762604c6306337e6cd430e65868e13ef6ddb4e25ddb9ad4c0", - "zh:7222e16f7833199dabf1bc5401c56d708ec052b2a5870988bc89ff85b68a5388", + "h1:xZGZf18JjMS06pFa4NErzANI98qi59SEcBsOcS2P2yQ=", + "zh:41c53ba47085d8261590990f8633c8906696fa0a3c4b384ff6a7ecbf84339752", + "zh:59d98081c4475f2ad77d881c4412c5129c56214892f490adf11c7e7a5a47de9b", + "zh:686ad1ee40b812b9e016317e7f34c0d63ef837e084dea4a1f578f64a6314ad53", "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", - "zh:b1b2d7d934784d2aee98b0f8f07a8ccfc0410de63493ae2bf2222c165becf938", - "zh:b8f85b6a20bd264fcd0814866f415f0a368d1123cd7879c8ebbf905d370babc8", - "zh:c3813133acc02bbebddf046d9942e8ba5c35fc99191e3eb057957dafc2929912", - "zh:e7a41dbc919d1de800689a81c240c27eec6b9395564630764ebb323ea82ac8a9", - "zh:ee6d23208449a8eaa6c4f203e33f5176fa795b4b9ecf32903dffe6e2574732c2", + "zh:84103eae7251384c0d995f5a257c72b0096605048f757b749b7b62107a5dccb3", + "zh:8ee974b110adb78c7cd18aae82b2729e5124d8f115d484215fd5199451053de5", + "zh:9dd4561e3c847e45de603f17fa0c01ae14cae8c4b7b4e6423c9ef3904b308dda", + "zh:bb07bb3c2c0296beba0beec629ebc6474c70732387477a65966483b5efabdbc6", + "zh:e891339e96c9e5a888727b45b2e1bb3fcbdfe0fd7c5b4396e4695459b38c8cb1", + "zh:ea4739860c24dfeaac6c100b2a2e357106a89d18751f7693f3c31ecf6a996f8d", + "zh:f0c76ac303fd0ab59146c39bc121c5d7d86f878e9a69294e29444d4c653786f8", + "zh:f143a9a5af42b38fed328a161279906759ff39ac428ebcfe55606e05e1518b93", ] } diff --git a/tests/azure/util_test.go b/tests/azure/util_test.go index c49b28d7..2be4ecf1 100644 --- a/tests/azure/util_test.go +++ b/tests/azure/util_test.go @@ -24,7 +24,7 @@ import ( "path/filepath" "time" - git2go "github.com/libgit2/git2go/v31" + git2go "github.com/libgit2/git2go/v33" corev1 "k8s.io/api/core/v1" apimeta "k8s.io/apimachinery/pkg/api/meta" @@ -313,12 +313,15 @@ func getRepository(url, branchName string, overrideBranch bool, password string) return nil, "", err } repo, err := git2go.Clone(url, tmpDir, &git2go.CloneOptions{ - FetchOptions: &git2go.FetchOptions{ + FetchOptions: git2go.FetchOptions{ RemoteCallbacks: git2go.RemoteCallbacks{ CredentialsCallback: credentialCallback("git", password), }, }, CheckoutBranch: checkoutBranch, + CheckoutOptions: git2go.CheckoutOpts{ + Strategy: git2go.CheckoutSafe, + }, }) if err != nil { return nil, "", err From d49b77c8d2ddbdc62d17a9b814db265c16a13c51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Batuhan=20Apayd=C4=B1n?= Date: Tue, 11 Oct 2022 11:17:05 +0300 Subject: [PATCH 252/818] chore: bump the pkg/oci package to v0.12.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Batuhan Apaydın --- cmd/flux/build_artifact.go | 9 ++++++--- cmd/flux/push_artifact.go | 13 ++++++++++--- go.mod | 8 ++++---- go.sum | 19 ++++++++++--------- 4 files changed, 30 insertions(+), 19 deletions(-) diff --git a/cmd/flux/build_artifact.go b/cmd/flux/build_artifact.go index 23ac154e..591d4995 100644 --- a/cmd/flux/build_artifact.go +++ b/cmd/flux/build_artifact.go @@ -30,10 +30,13 @@ import ( var buildArtifactCmd = &cobra.Command{ Use: "artifact", Short: "Build artifact", - Long: `The build artifact command creates a tgz file with the manifests from the given directory.`, + Long: `The build artifact command creates a tgz file with the manifests from the given directory or a single manifest file.`, Example: ` # Build the given manifests directory into an artifact flux build artifact --path ./path/to/local/manifests --output ./path/to/artifact.tgz + # Build the given single manifest file into an artifact + flux build artifact --path ./path/to/local/manifest.yaml --output ./path/to/artifact.tgz + # List the files bundled in the artifact tar -ztvf ./path/to/artifact.tgz `, @@ -63,8 +66,8 @@ func buildArtifactCmdRun(cmd *cobra.Command, args []string) error { return fmt.Errorf("invalid path %q", buildArtifactArgs.path) } - if fs, err := os.Stat(buildArtifactArgs.path); err != nil || !fs.IsDir() { - return fmt.Errorf("invalid path '%s', must point to an existing directory", buildArtifactArgs.path) + if _, err := os.Stat(buildArtifactArgs.path); err != nil { + return fmt.Errorf("invalid path '%s', must point to an existing directory or file", buildArtifactArgs.path) } logger.Actionf("building artifact from %s", buildArtifactArgs.path) diff --git a/cmd/flux/push_artifact.go b/cmd/flux/push_artifact.go index bc4e0e0d..1c2725e2 100644 --- a/cmd/flux/push_artifact.go +++ b/cmd/flux/push_artifact.go @@ -31,7 +31,7 @@ import ( var pushArtifactCmd = &cobra.Command{ Use: "artifact", Short: "Push artifact", - Long: `The push artifact command creates a tarball from the given directory and uploads the artifact to an OCI repository. + Long: `The push artifact command creates a tarball from the given directory or the single file and uploads the artifact to an OCI repository. The command can read the credentials from '~/.docker/config.json' but they can also be passed with --creds. It can also login to a supported provider with the --provider flag.`, Example: ` # Push manifests to GHCR using the short Git SHA as the OCI artifact tag echo $GITHUB_PAT | docker login ghcr.io --username flux --password-stdin @@ -40,6 +40,13 @@ The command can read the credentials from '~/.docker/config.json' but they can a --source="$(git config --get remote.origin.url)" \ --revision="$(git branch --show-current)/$(git rev-parse HEAD)" + # Push single manifest file to GHCR using the short Git SHA as the OCI artifact tag + echo $GITHUB_PAT | docker login ghcr.io --username flux --password-stdin + flux push artifact oci://ghcr.io/org/config/app:$(git rev-parse --short HEAD) \ + --path="./path/to/local/manifest.yaml" \ + --source="$(git config --get remote.origin.url)" \ + --revision="$(git branch --show-current)/$(git rev-parse HEAD)" + # Push manifests to Docker Hub using the Git tag as the OCI artifact tag echo $DOCKER_PAT | docker login --username flux --password-stdin flux push artifact oci://docker.io/org/app-config:$(git tag --points-at HEAD) \ @@ -117,8 +124,8 @@ func pushArtifactCmdRun(cmd *cobra.Command, args []string) error { return err } - if fs, err := os.Stat(pushArtifactArgs.path); err != nil || !fs.IsDir() { - return fmt.Errorf("invalid path %q", pushArtifactArgs.path) + if _, err := os.Stat(pushArtifactArgs.path); err != nil { + return fmt.Errorf("invalid path '%s', must point to an existing directory or file", buildArtifactArgs.path) } meta := oci.Metadata{ diff --git a/go.mod b/go.mod index 51a00698..fb5c1e08 100644 --- a/go.mod +++ b/go.mod @@ -14,7 +14,7 @@ require ( github.com/fluxcd/notification-controller/api v0.27.0 github.com/fluxcd/pkg/apis/meta v0.16.0 github.com/fluxcd/pkg/kustomize v0.7.0 - github.com/fluxcd/pkg/oci v0.9.0 + github.com/fluxcd/pkg/oci v0.12.0 github.com/fluxcd/pkg/runtime v0.18.0 github.com/fluxcd/pkg/sourceignore v0.2.0 github.com/fluxcd/pkg/ssa v0.19.0 @@ -33,7 +33,7 @@ require ( github.com/manifoldco/promptui v0.9.0 github.com/mattn/go-shellwords v1.0.12 github.com/olekukonko/tablewriter v0.0.5 - github.com/onsi/gomega v1.20.1 + github.com/onsi/gomega v1.20.2 github.com/spf13/cobra v1.5.0 github.com/spf13/pflag v1.0.5 github.com/theckman/yacspin v0.13.12 @@ -57,7 +57,7 @@ replace gopkg.in/yaml.v3 => gopkg.in/yaml.v3 v3.0.1 require ( cloud.google.com/go v0.99.0 // indirect - github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.2 // indirect + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.3 // indirect github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0 // indirect github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect @@ -72,7 +72,7 @@ require ( github.com/MakeNowJust/heredoc v1.0.0 // indirect github.com/Microsoft/go-winio v0.5.2 // indirect github.com/acomagu/bufpipe v1.0.3 // indirect - github.com/aws/aws-sdk-go v1.44.84 // indirect + github.com/aws/aws-sdk-go v1.44.105 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/chai2010/gettext-go v1.0.2 // indirect diff --git a/go.sum b/go.sum index a253c400..99aec23b 100644 --- a/go.sum +++ b/go.sum @@ -55,8 +55,8 @@ contrib.go.opencensus.io/exporter/stackdriver v0.13.4/go.mod h1:aXENhDJ1Y4lIg4EU dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/Antonboom/errname v0.1.5/go.mod h1:DugbBstvPFQbv/5uLcRRzfrNqKE9tVdVCqWCLp6Cifo= github.com/Antonboom/nilnil v0.1.0/go.mod h1:PhHLvRPSghY5Y7mX4TW+BHZQYo1A8flE5H20D3IPZBo= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.2 h1:lneMk5qtUMulXa/eVxjVd+/bDYMEDIqYpLzLa2/EsNI= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.2/go.mod h1:uGG2W01BaETf0Ozp+QxxKJdMBNRWPdstHG0Fmdwn1/U= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.3 h1:8LoU8N2lIUzkmstvwXvVfniMZlFbesfT2AmA1aqvRr8= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.3/go.mod h1:uGG2W01BaETf0Ozp+QxxKJdMBNRWPdstHG0Fmdwn1/U= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0 h1:QkAcEIAKbNL4KoFr4SathZPhDhF4mVwpBMFlYjyAqy8= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0/go.mod h1:bhXu1AjYL+wutSL/kpSq6s7733q2Rb0yuot9Zgfqa/0= github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0 h1:jp0dGvZ7ZK0mgqnTSClMxa5xuRL7NZgHameVYF6BurY= @@ -134,8 +134,8 @@ github.com/ashanbrown/makezero v0.0.0-20210520155254-b6261585ddde/go.mod h1:oG9D github.com/aws/aws-sdk-go v1.23.20/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.25.37/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.36.30/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= -github.com/aws/aws-sdk-go v1.44.84 h1:orGogGRrizQSqn3lBnaP/FQIcjPMLf9azDO0h+oTJr0= -github.com/aws/aws-sdk-go v1.44.84/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= +github.com/aws/aws-sdk-go v1.44.105 h1:UUwoD1PRKIj3ltrDUYTDQj5fOTK3XsnqolLpRTMmSEM= +github.com/aws/aws-sdk-go v1.44.105/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= @@ -207,7 +207,7 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/denis-tingajkin/go-header v0.4.2/go.mod h1:eLRHAVXzE5atsKAnNRDB90WHCFFnBUn4RN0nRcs1LJA= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/distribution/distribution/v3 v3.0.0-20220822034424-3413bf8e14fd h1:jtncyJ6leoRxSuB7y1EkkES0nKuG0kM7arfABcZW9r0= +github.com/distribution/distribution/v3 v3.0.0-20220907155224-78b9c98c5c31 h1:AqcwAyaSEkILnr/bLybFnM2i/+EW67JJIRs/4dWmzxo= github.com/dnaeon/go-vcr v1.1.0 h1:ReYa/UBrRyQdant9B4fNHGoCNKw6qh6P0fsdGmZpR7c= github.com/docker/cli v20.10.17+incompatible h1:eO2KS7ZFeov5UJeaDmIs1NFEDRf32PaqRpvoEkKBy5M= github.com/docker/cli v20.10.17+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= @@ -276,8 +276,8 @@ github.com/fluxcd/pkg/apis/meta v0.16.0 h1:6Mj9rB0TtvCeTe3IlQDc1i2DH75Oosea9yUqS github.com/fluxcd/pkg/apis/meta v0.16.0/go.mod h1:GrOVzWXiu22XjLNgLLe2EBYhQPqZetes5SIADb4bmHE= github.com/fluxcd/pkg/kustomize v0.7.0 h1:604rlpRZTWaOfzDZ1W93aHaFh9kn8/UMX/wzsjwIUQY= github.com/fluxcd/pkg/kustomize v0.7.0/go.mod h1:zJY3Z0+SX+zs+/A1F6fCT0JvUce265XnrpTtHnujXPo= -github.com/fluxcd/pkg/oci v0.9.0 h1:ywS1rp8AV/N4UDVFYQK4qYfrADATPiWA3leXjG/eeK4= -github.com/fluxcd/pkg/oci v0.9.0/go.mod h1:L+TiQRy92wdqwb2LuScl7T1M24S7IgnzgjBD3iqoKEE= +github.com/fluxcd/pkg/oci v0.12.0 h1:+0vCpjFERfpmSfMT+Quk29l7OI/SbxEwX+Dw+JcZYkM= +github.com/fluxcd/pkg/oci v0.12.0/go.mod h1:gsRwVj0gTwk9xF3PuPJQ4R+rv8UtT26Gi7r1XfyBw8A= github.com/fluxcd/pkg/runtime v0.18.0 h1:3naATapV1y65ZWlsXEfJt66zSQBkJwJ9o/e6gqAF//E= github.com/fluxcd/pkg/runtime v0.18.0/go.mod h1:JKTvOFOCz5Un9KxGcBL7Xjt0fcRa10ZItGB0XFv44AY= github.com/fluxcd/pkg/sourceignore v0.2.0 h1:ooNbIkfxqNB+KKiY4AU+/DxwzjIKIOWBRK1As5QFlug= @@ -557,6 +557,7 @@ github.com/hashicorp/go-version v1.2.1/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09 github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= @@ -777,8 +778,8 @@ github.com/onsi/ginkgo/v2 v2.1.6 h1:Fx2POJZfKRQcM1pH49qSZiYeu319wji004qX+GDovrU= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.16.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= -github.com/onsi/gomega v1.20.1 h1:PA/3qinGoukvymdIDV8pii6tiZgC8kbmJO6Z5+b002Q= -github.com/onsi/gomega v1.20.1/go.mod h1:DtrZpjmvpn2mPm4YWQa0/ALMDj9v4YxLgojwPeREyVo= +github.com/onsi/gomega v1.20.2 h1:8uQq0zMgLEfa0vRrrBgaJF2gyW9Da9BmfGV+OyUzfkY= +github.com/onsi/gomega v1.20.2/go.mod h1:iYAIXgPSaDHak0LCMA+AWBpIKBr8WZicMxnE8luStNc= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.0.3-0.20220114050600-8b9d41f48198 h1:+czc/J8SlhPKLOtVLMQc+xDCFBT73ZStMsRhSsUhsSg= From f6c96aea48ea5b75c18db79f44f2874ff9ffce68 Mon Sep 17 00:00:00 2001 From: Philip Laine Date: Wed, 12 Oct 2022 08:51:15 +0200 Subject: [PATCH 253/818] Add discard logger Signed-off-by: Philip Laine --- pkg/log/nop.go | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 pkg/log/nop.go diff --git a/pkg/log/nop.go b/pkg/log/nop.go new file mode 100644 index 00000000..576c78f0 --- /dev/null +++ b/pkg/log/nop.go @@ -0,0 +1,31 @@ +/* +Copyright 2022 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package log + +type NopLogger struct{} + +func (NopLogger) Actionf(format string, a ...interface{}) {} + +func (NopLogger) Generatef(format string, a ...interface{}) {} + +func (NopLogger) Waitingf(format string, a ...interface{}) {} + +func (NopLogger) Successf(format string, a ...interface{}) {} + +func (NopLogger) Warningf(format string, a ...interface{}) {} + +func (NopLogger) Failuref(format string, a ...interface{}) {} From 80b87729b606937e3622635d03d3243fb2288444 Mon Sep 17 00:00:00 2001 From: Philip Laine Date: Wed, 12 Oct 2022 08:38:23 +0200 Subject: [PATCH 254/818] Move uninstall code to pkg Signed-off-by: Philip Laine --- cmd/flux/uninstall.go | 322 +--------------------------------- pkg/uninstall/uninstall.go | 341 +++++++++++++++++++++++++++++++++++++ 2 files changed, 346 insertions(+), 317 deletions(-) create mode 100644 pkg/uninstall/uninstall.go diff --git a/cmd/flux/uninstall.go b/cmd/flux/uninstall.go index bd62347a..21bcd3b3 100644 --- a/cmd/flux/uninstall.go +++ b/cmd/flux/uninstall.go @@ -22,22 +22,9 @@ import ( "github.com/manifoldco/promptui" "github.com/spf13/cobra" - appsv1 "k8s.io/api/apps/v1" - corev1 "k8s.io/api/core/v1" - networkingv1 "k8s.io/api/networking/v1" - rbacv1 "k8s.io/api/rbac/v1" - apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "sigs.k8s.io/controller-runtime/pkg/client" "github.com/fluxcd/flux2/internal/utils" - "github.com/fluxcd/flux2/pkg/manifestgen" - helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" - autov1 "github.com/fluxcd/image-automation-controller/api/v1beta1" - imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta1" - kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta1" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + "github.com/fluxcd/flux2/pkg/uninstall" ) var uninstallCmd = &cobra.Command{ @@ -91,317 +78,18 @@ func uninstallCmdRun(cmd *cobra.Command, args []string) error { } logger.Actionf("deleting components in %s namespace", *kubeconfigArgs.Namespace) - uninstallComponents(ctx, kubeClient, *kubeconfigArgs.Namespace, uninstallArgs.dryRun) + uninstall.Components(ctx, logger, kubeClient, *kubeconfigArgs.Namespace, uninstallArgs.dryRun) logger.Actionf("deleting toolkit.fluxcd.io finalizers in all namespaces") - uninstallFinalizers(ctx, kubeClient, uninstallArgs.dryRun) + uninstall.Finalizers(ctx, logger, kubeClient, uninstallArgs.dryRun) logger.Actionf("deleting toolkit.fluxcd.io custom resource definitions") - uninstallCustomResourceDefinitions(ctx, kubeClient, uninstallArgs.dryRun) + uninstall.CustomResourceDefinitions(ctx, logger, kubeClient, uninstallArgs.dryRun) if !uninstallArgs.keepNamespace { - uninstallNamespace(ctx, kubeClient, *kubeconfigArgs.Namespace, uninstallArgs.dryRun) + uninstall.Namespace(ctx, logger, kubeClient, *kubeconfigArgs.Namespace, uninstallArgs.dryRun) } logger.Successf("uninstall finished") return nil } - -func uninstallComponents(ctx context.Context, kubeClient client.Client, namespace string, dryRun bool) { - opts, dryRunStr := getDeleteOptions(dryRun) - selector := client.MatchingLabels{manifestgen.PartOfLabelKey: manifestgen.PartOfLabelValue} - { - var list appsv1.DeploymentList - if err := kubeClient.List(ctx, &list, client.InNamespace(namespace), selector); err == nil { - for _, r := range list.Items { - if err := kubeClient.Delete(ctx, &r, opts); err != nil { - logger.Failuref("Deployment/%s/%s deletion failed: %s", r.Namespace, r.Name, err.Error()) - } else { - logger.Successf("Deployment/%s/%s deleted %s", r.Namespace, r.Name, dryRunStr) - } - } - } - } - { - var list corev1.ServiceList - if err := kubeClient.List(ctx, &list, client.InNamespace(namespace), selector); err == nil { - for _, r := range list.Items { - if err := kubeClient.Delete(ctx, &r, opts); err != nil { - logger.Failuref("Service/%s/%s deletion failed: %s", r.Namespace, r.Name, err.Error()) - } else { - logger.Successf("Service/%s/%s deleted %s", r.Namespace, r.Name, dryRunStr) - } - } - } - } - { - var list networkingv1.NetworkPolicyList - if err := kubeClient.List(ctx, &list, client.InNamespace(namespace), selector); err == nil { - for _, r := range list.Items { - if err := kubeClient.Delete(ctx, &r, opts); err != nil { - logger.Failuref("NetworkPolicy/%s/%s deletion failed: %s", r.Namespace, r.Name, err.Error()) - } else { - logger.Successf("NetworkPolicy/%s/%s deleted %s", r.Namespace, r.Name, dryRunStr) - } - } - } - } - { - var list corev1.ServiceAccountList - if err := kubeClient.List(ctx, &list, client.InNamespace(namespace), selector); err == nil { - for _, r := range list.Items { - if err := kubeClient.Delete(ctx, &r, opts); err != nil { - logger.Failuref("ServiceAccount/%s/%s deletion failed: %s", r.Namespace, r.Name, err.Error()) - } else { - logger.Successf("ServiceAccount/%s/%s deleted %s", r.Namespace, r.Name, dryRunStr) - } - } - } - } - { - var list rbacv1.ClusterRoleList - if err := kubeClient.List(ctx, &list, selector); err == nil { - for _, r := range list.Items { - if err := kubeClient.Delete(ctx, &r, opts); err != nil { - logger.Failuref("ClusterRole/%s deletion failed: %s", r.Name, err.Error()) - } else { - logger.Successf("ClusterRole/%s deleted %s", r.Name, dryRunStr) - } - } - } - } - { - var list rbacv1.ClusterRoleBindingList - if err := kubeClient.List(ctx, &list, selector); err == nil { - for _, r := range list.Items { - if err := kubeClient.Delete(ctx, &r, opts); err != nil { - logger.Failuref("ClusterRoleBinding/%s deletion failed: %s", r.Name, err.Error()) - } else { - logger.Successf("ClusterRoleBinding/%s deleted %s", r.Name, dryRunStr) - } - } - } - } -} - -func uninstallFinalizers(ctx context.Context, kubeClient client.Client, dryRun bool) { - opts, dryRunStr := getUpdateOptions(dryRun) - { - var list sourcev1.GitRepositoryList - if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { - for _, r := range list.Items { - r.Finalizers = []string{} - if err := kubeClient.Update(ctx, &r, opts); err != nil { - logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) - } else { - logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) - } - } - } - } - { - var list sourcev1.OCIRepositoryList - if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { - for _, r := range list.Items { - r.Finalizers = []string{} - if err := kubeClient.Update(ctx, &r, opts); err != nil { - logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) - } else { - logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) - } - } - } - } - { - var list sourcev1.HelmRepositoryList - if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { - for _, r := range list.Items { - r.Finalizers = []string{} - if err := kubeClient.Update(ctx, &r, opts); err != nil { - logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) - } else { - logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) - } - } - } - } - { - var list sourcev1.HelmChartList - if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { - for _, r := range list.Items { - r.Finalizers = []string{} - if err := kubeClient.Update(ctx, &r, opts); err != nil { - logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) - } else { - logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) - } - } - } - } - { - var list sourcev1.BucketList - if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { - for _, r := range list.Items { - r.Finalizers = []string{} - if err := kubeClient.Update(ctx, &r, opts); err != nil { - logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) - } else { - logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) - } - } - } - } - { - var list kustomizev1.KustomizationList - if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { - for _, r := range list.Items { - r.Finalizers = []string{} - if err := kubeClient.Update(ctx, &r, opts); err != nil { - logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) - } else { - logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) - } - } - } - } - { - var list helmv2.HelmReleaseList - if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { - for _, r := range list.Items { - r.Finalizers = []string{} - if err := kubeClient.Update(ctx, &r, opts); err != nil { - logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) - } else { - logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) - } - } - } - } - { - var list notificationv1.AlertList - if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { - for _, r := range list.Items { - r.Finalizers = []string{} - if err := kubeClient.Update(ctx, &r, opts); err != nil { - logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) - } else { - logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) - } - } - } - } - { - var list notificationv1.ProviderList - if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { - for _, r := range list.Items { - r.Finalizers = []string{} - if err := kubeClient.Update(ctx, &r, opts); err != nil { - logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) - } else { - logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) - } - } - } - } - { - var list notificationv1.ReceiverList - if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { - for _, r := range list.Items { - r.Finalizers = []string{} - if err := kubeClient.Update(ctx, &r, opts); err != nil { - logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) - } else { - logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) - } - } - } - } - { - var list imagev1.ImagePolicyList - if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { - for _, r := range list.Items { - r.Finalizers = []string{} - if err := kubeClient.Update(ctx, &r, opts); err != nil { - logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) - } else { - logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) - } - } - } - } - { - var list imagev1.ImageRepositoryList - if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { - for _, r := range list.Items { - r.Finalizers = []string{} - if err := kubeClient.Update(ctx, &r, opts); err != nil { - logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) - } else { - logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) - } - } - } - } - { - var list autov1.ImageUpdateAutomationList - if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { - for _, r := range list.Items { - r.Finalizers = []string{} - if err := kubeClient.Update(ctx, &r, opts); err != nil { - logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) - } else { - logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) - } - } - } - } -} - -func uninstallCustomResourceDefinitions(ctx context.Context, kubeClient client.Client, dryRun bool) { - opts, dryRunStr := getDeleteOptions(dryRun) - selector := client.MatchingLabels{manifestgen.PartOfLabelKey: manifestgen.PartOfLabelValue} - { - var list apiextensionsv1.CustomResourceDefinitionList - if err := kubeClient.List(ctx, &list, selector); err == nil { - for _, r := range list.Items { - if err := kubeClient.Delete(ctx, &r, opts); err != nil { - logger.Failuref("CustomResourceDefinition/%s deletion failed: %s", r.Name, err.Error()) - } else { - logger.Successf("CustomResourceDefinition/%s deleted %s", r.Name, dryRunStr) - } - } - } - } -} - -func uninstallNamespace(ctx context.Context, kubeClient client.Client, namespace string, dryRun bool) { - opts, dryRunStr := getDeleteOptions(dryRun) - ns := corev1.Namespace{ObjectMeta: metav1.ObjectMeta{Name: namespace}} - if err := kubeClient.Delete(ctx, &ns, opts); err != nil { - logger.Failuref("Namespace/%s deletion failed: %s", namespace, err.Error()) - } else { - logger.Successf("Namespace/%s deleted %s", namespace, dryRunStr) - } -} - -func getDeleteOptions(dryRun bool) (*client.DeleteOptions, string) { - opts := &client.DeleteOptions{} - var dryRunStr string - if dryRun { - client.DryRunAll.ApplyToDelete(opts) - dryRunStr = "(dry run)" - } - - return opts, dryRunStr -} - -func getUpdateOptions(dryRun bool) (*client.UpdateOptions, string) { - opts := &client.UpdateOptions{} - var dryRunStr string - if dryRun { - client.DryRunAll.ApplyToUpdate(opts) - dryRunStr = "(dry run)" - } - - return opts, dryRunStr -} diff --git a/pkg/uninstall/uninstall.go b/pkg/uninstall/uninstall.go new file mode 100644 index 00000000..ee3f678c --- /dev/null +++ b/pkg/uninstall/uninstall.go @@ -0,0 +1,341 @@ +/* +Copyright 2022 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package uninstall + +import ( + "context" + + appsv1 "k8s.io/api/apps/v1" + corev1 "k8s.io/api/core/v1" + networkingv1 "k8s.io/api/networking/v1" + rbacv1 "k8s.io/api/rbac/v1" + apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "sigs.k8s.io/controller-runtime/pkg/client" + + "github.com/fluxcd/flux2/pkg/log" + "github.com/fluxcd/flux2/pkg/manifestgen" + helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" + autov1 "github.com/fluxcd/image-automation-controller/api/v1beta1" + imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta1" + kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" + notificationv1 "github.com/fluxcd/notification-controller/api/v1beta1" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" +) + +// Components removes all Kubernetes components that are part of Flux excluding the CRDs and namespace. +func Components(ctx context.Context, logger log.Logger, kubeClient client.Client, namespace string, dryRun bool) { + opts, dryRunStr := getDeleteOptions(dryRun) + selector := client.MatchingLabels{manifestgen.PartOfLabelKey: manifestgen.PartOfLabelValue} + { + var list appsv1.DeploymentList + if err := kubeClient.List(ctx, &list, client.InNamespace(namespace), selector); err == nil { + for _, r := range list.Items { + if err := kubeClient.Delete(ctx, &r, opts); err != nil { + logger.Failuref("Deployment/%s/%s deletion failed: %s", r.Namespace, r.Name, err.Error()) + } else { + logger.Successf("Deployment/%s/%s deleted %s", r.Namespace, r.Name, dryRunStr) + } + } + } + } + { + var list corev1.ServiceList + if err := kubeClient.List(ctx, &list, client.InNamespace(namespace), selector); err == nil { + for _, r := range list.Items { + if err := kubeClient.Delete(ctx, &r, opts); err != nil { + logger.Failuref("Service/%s/%s deletion failed: %s", r.Namespace, r.Name, err.Error()) + } else { + logger.Successf("Service/%s/%s deleted %s", r.Namespace, r.Name, dryRunStr) + } + } + } + } + { + var list networkingv1.NetworkPolicyList + if err := kubeClient.List(ctx, &list, client.InNamespace(namespace), selector); err == nil { + for _, r := range list.Items { + if err := kubeClient.Delete(ctx, &r, opts); err != nil { + logger.Failuref("NetworkPolicy/%s/%s deletion failed: %s", r.Namespace, r.Name, err.Error()) + } else { + logger.Successf("NetworkPolicy/%s/%s deleted %s", r.Namespace, r.Name, dryRunStr) + } + } + } + } + { + var list corev1.ServiceAccountList + if err := kubeClient.List(ctx, &list, client.InNamespace(namespace), selector); err == nil { + for _, r := range list.Items { + if err := kubeClient.Delete(ctx, &r, opts); err != nil { + logger.Failuref("ServiceAccount/%s/%s deletion failed: %s", r.Namespace, r.Name, err.Error()) + } else { + logger.Successf("ServiceAccount/%s/%s deleted %s", r.Namespace, r.Name, dryRunStr) + } + } + } + } + { + var list rbacv1.ClusterRoleList + if err := kubeClient.List(ctx, &list, selector); err == nil { + for _, r := range list.Items { + if err := kubeClient.Delete(ctx, &r, opts); err != nil { + logger.Failuref("ClusterRole/%s deletion failed: %s", r.Name, err.Error()) + } else { + logger.Successf("ClusterRole/%s deleted %s", r.Name, dryRunStr) + } + } + } + } + { + var list rbacv1.ClusterRoleBindingList + if err := kubeClient.List(ctx, &list, selector); err == nil { + for _, r := range list.Items { + if err := kubeClient.Delete(ctx, &r, opts); err != nil { + logger.Failuref("ClusterRoleBinding/%s deletion failed: %s", r.Name, err.Error()) + } else { + logger.Successf("ClusterRoleBinding/%s deleted %s", r.Name, dryRunStr) + } + } + } + } +} + +// Finalizers removes all finalizes on Kubernetes components that have been added by a Flux controller. +func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client, dryRun bool) { + opts, dryRunStr := getUpdateOptions(dryRun) + { + var list sourcev1.GitRepositoryList + if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { + for _, r := range list.Items { + r.Finalizers = []string{} + if err := kubeClient.Update(ctx, &r, opts); err != nil { + logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) + } else { + logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) + } + } + } + } + { + var list sourcev1.OCIRepositoryList + if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { + for _, r := range list.Items { + r.Finalizers = []string{} + if err := kubeClient.Update(ctx, &r, opts); err != nil { + logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) + } else { + logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) + } + } + } + } + { + var list sourcev1.HelmRepositoryList + if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { + for _, r := range list.Items { + r.Finalizers = []string{} + if err := kubeClient.Update(ctx, &r, opts); err != nil { + logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) + } else { + logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) + } + } + } + } + { + var list sourcev1.HelmChartList + if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { + for _, r := range list.Items { + r.Finalizers = []string{} + if err := kubeClient.Update(ctx, &r, opts); err != nil { + logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) + } else { + logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) + } + } + } + } + { + var list sourcev1.BucketList + if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { + for _, r := range list.Items { + r.Finalizers = []string{} + if err := kubeClient.Update(ctx, &r, opts); err != nil { + logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) + } else { + logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) + } + } + } + } + { + var list kustomizev1.KustomizationList + if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { + for _, r := range list.Items { + r.Finalizers = []string{} + if err := kubeClient.Update(ctx, &r, opts); err != nil { + logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) + } else { + logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) + } + } + } + } + { + var list helmv2.HelmReleaseList + if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { + for _, r := range list.Items { + r.Finalizers = []string{} + if err := kubeClient.Update(ctx, &r, opts); err != nil { + logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) + } else { + logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) + } + } + } + } + { + var list notificationv1.AlertList + if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { + for _, r := range list.Items { + r.Finalizers = []string{} + if err := kubeClient.Update(ctx, &r, opts); err != nil { + logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) + } else { + logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) + } + } + } + } + { + var list notificationv1.ProviderList + if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { + for _, r := range list.Items { + r.Finalizers = []string{} + if err := kubeClient.Update(ctx, &r, opts); err != nil { + logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) + } else { + logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) + } + } + } + } + { + var list notificationv1.ReceiverList + if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { + for _, r := range list.Items { + r.Finalizers = []string{} + if err := kubeClient.Update(ctx, &r, opts); err != nil { + logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) + } else { + logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) + } + } + } + } + { + var list imagev1.ImagePolicyList + if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { + for _, r := range list.Items { + r.Finalizers = []string{} + if err := kubeClient.Update(ctx, &r, opts); err != nil { + logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) + } else { + logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) + } + } + } + } + { + var list imagev1.ImageRepositoryList + if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { + for _, r := range list.Items { + r.Finalizers = []string{} + if err := kubeClient.Update(ctx, &r, opts); err != nil { + logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) + } else { + logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) + } + } + } + } + { + var list autov1.ImageUpdateAutomationList + if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { + for _, r := range list.Items { + r.Finalizers = []string{} + if err := kubeClient.Update(ctx, &r, opts); err != nil { + logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) + } else { + logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) + } + } + } + } +} + +// CustomResourceDefinitions removes all Kubernetes CRDs that are a part of Flux. +func CustomResourceDefinitions(ctx context.Context, logger log.Logger, kubeClient client.Client, dryRun bool) { + opts, dryRunStr := getDeleteOptions(dryRun) + selector := client.MatchingLabels{manifestgen.PartOfLabelKey: manifestgen.PartOfLabelValue} + { + var list apiextensionsv1.CustomResourceDefinitionList + if err := kubeClient.List(ctx, &list, selector); err == nil { + for _, r := range list.Items { + if err := kubeClient.Delete(ctx, &r, opts); err != nil { + logger.Failuref("CustomResourceDefinition/%s deletion failed: %s", r.Name, err.Error()) + } else { + logger.Successf("CustomResourceDefinition/%s deleted %s", r.Name, dryRunStr) + } + } + } + } +} + +// Namespace removes the namespace Flux is installed in. +func Namespace(ctx context.Context, logger log.Logger, kubeClient client.Client, namespace string, dryRun bool) { + opts, dryRunStr := getDeleteOptions(dryRun) + ns := corev1.Namespace{ObjectMeta: metav1.ObjectMeta{Name: namespace}} + if err := kubeClient.Delete(ctx, &ns, opts); err != nil { + logger.Failuref("Namespace/%s deletion failed: %s", namespace, err.Error()) + } else { + logger.Successf("Namespace/%s deleted %s", namespace, dryRunStr) + } +} + +func getDeleteOptions(dryRun bool) (*client.DeleteOptions, string) { + opts := &client.DeleteOptions{} + var dryRunStr string + if dryRun { + client.DryRunAll.ApplyToDelete(opts) + dryRunStr = "(dry run)" + } + + return opts, dryRunStr +} + +func getUpdateOptions(dryRun bool) (*client.UpdateOptions, string) { + opts := &client.UpdateOptions{} + var dryRunStr string + if dryRun { + client.DryRunAll.ApplyToUpdate(opts) + dryRunStr = "(dry run)" + } + + return opts, dryRunStr +} From f4c8da35e88dbaf2758a69adeedf7697343cb907 Mon Sep 17 00:00:00 2001 From: Eddie Knight Date: Sat, 15 Oct 2022 11:03:04 -0500 Subject: [PATCH 255/818] Added ArtifactHub badge Signed-off-by: Eddie Knight --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index abed3040..7140d21a 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,7 @@ [![report](https://goreportcard.com/badge/github.com/fluxcd/flux2)](https://goreportcard.com/report/github.com/fluxcd/flux2) [![license](https://img.shields.io/github/license/fluxcd/flux2.svg)](https://github.com/fluxcd/flux2/blob/main/LICENSE) [![release](https://img.shields.io/github/release/fluxcd/flux2/all.svg)](https://github.com/fluxcd/flux2/releases) +[![Artifact HUB](https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/flux2)](https://artifacthub.io/packages/helm/fluxcd-community/flux2) Flux is a tool for keeping Kubernetes clusters in sync with sources of configuration (like Git repositories), and automating updates to From 3d962136a82c6f20ec29598e4fe0af5ebe476108 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Sat, 15 Oct 2022 11:05:22 +0300 Subject: [PATCH 256/818] Add FOSSA license scanning badge Signed-off-by: Stefan Prodan --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 7140d21a..1cd722c0 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,7 @@ [![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/4782/badge)](https://bestpractices.coreinfrastructure.org/projects/4782) [![e2e](https://github.com/fluxcd/flux2/workflows/e2e/badge.svg)](https://github.com/fluxcd/flux2/actions) [![report](https://goreportcard.com/badge/github.com/fluxcd/flux2)](https://goreportcard.com/report/github.com/fluxcd/flux2) +[![FOSSA Status](https://app.fossa.com/api/projects/custom%2B162%2Fgithub.com%2Ffluxcd%2Fflux2.svg?type=shield)](https://app.fossa.com/projects/custom%2B162%2Fgithub.com%2Ffluxcd%2Fflux2?ref=badge_shield) [![license](https://img.shields.io/github/license/fluxcd/flux2.svg)](https://github.com/fluxcd/flux2/blob/main/LICENSE) [![release](https://img.shields.io/github/release/fluxcd/flux2/all.svg)](https://github.com/fluxcd/flux2/releases) [![Artifact HUB](https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/flux2)](https://artifacthub.io/packages/helm/fluxcd-community/flux2) From 7b20ad5dd263c53b5f03ade4c4af2656bb730e83 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Sat, 15 Oct 2022 13:12:46 +0300 Subject: [PATCH 257/818] Add link to roadmap, adopters and ecosystem Signed-off-by: Stefan Prodan --- README.md | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 1cd722c0..f848de35 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,13 @@ # Flux version 2 +[![release](https://img.shields.io/github/release/fluxcd/flux2/all.svg)](https://github.com/fluxcd/flux2/releases) [![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/4782/badge)](https://bestpractices.coreinfrastructure.org/projects/4782) -[![e2e](https://github.com/fluxcd/flux2/workflows/e2e/badge.svg)](https://github.com/fluxcd/flux2/actions) -[![report](https://goreportcard.com/badge/github.com/fluxcd/flux2)](https://goreportcard.com/report/github.com/fluxcd/flux2) [![FOSSA Status](https://app.fossa.com/api/projects/custom%2B162%2Fgithub.com%2Ffluxcd%2Fflux2.svg?type=shield)](https://app.fossa.com/projects/custom%2B162%2Fgithub.com%2Ffluxcd%2Fflux2?ref=badge_shield) -[![license](https://img.shields.io/github/license/fluxcd/flux2.svg)](https://github.com/fluxcd/flux2/blob/main/LICENSE) -[![release](https://img.shields.io/github/release/fluxcd/flux2/all.svg)](https://github.com/fluxcd/flux2/releases) [![Artifact HUB](https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/flux2)](https://artifacthub.io/packages/helm/fluxcd-community/flux2) Flux is a tool for keeping Kubernetes clusters in sync with sources of -configuration (like Git repositories), and automating updates to -configuration when there is new code to deploy. +configuration (like Git repositories and OCI artifacts), +and automating updates to configuration when there is new code to deploy. Flux version 2 ("v2") is built from the ground up to use Kubernetes' API extension system, and to integrate with Prometheus and other core @@ -22,7 +19,8 @@ Flux v2 is constructed with the [GitOps Toolkit](#gitops-toolkit), a set of composable APIs and specialized tools for building Continuous Delivery on top of Kubernetes. -Flux is a Cloud Native Computing Foundation ([CNCF](https://www.cncf.io/)) project. +Flux is a Cloud Native Computing Foundation ([CNCF](https://www.cncf.io/)) project, used in +production by various [organisations](https://fluxcd.io/adopters) and [cloud providers](https://fluxcd.io/ecosystem). ## Quickstart and documentation @@ -79,16 +77,17 @@ new contributors and there are a multitude of ways to get involved. - Getting Started? - Look at our [Get Started guide](https://fluxcd.io/flux/get-started/) and give us feedback - Need help? - - First: Ask questions on our [GH Discussions page](https://github.com/fluxcd/flux2/discussions) - - Second: Talk to us in the #flux channel on [CNCF Slack](https://slack.cncf.io/) + - First: Ask questions on our [GH Discussions page](https://github.com/fluxcd/flux2/discussions). + - Second: Talk to us in the #flux channel on [CNCF Slack](https://slack.cncf.io/). - Please follow our [Support Guidelines](https://fluxcd.io/support/) (in short: be nice, be respectful of volunteers' time, understand that maintainers and contributors cannot respond to all DMs, and keep discussions in the public #flux channel as much as possible). - Have feature proposals or want to contribute? - - Propose features on our [GH Discussions page](https://github.com/fluxcd/flux2/discussions) - - Join our upcoming dev meetings ([meeting access and agenda](https://docs.google.com/document/d/1l_M0om0qUEN_NNiGgpqJ2tvsF2iioHkaARDeh6b70B0/view)) + - Propose features on our [GitHub Discussions page](https://github.com/fluxcd/flux2/discussions). + - Join our upcoming dev meetings ([meeting access and agenda](https://docs.google.com/document/d/1l_M0om0qUEN_NNiGgpqJ2tvsF2iioHkaARDeh6b70B0/view)). - [Join the flux-dev mailing list](https://lists.cncf.io/g/cncf-flux-dev). - - Check out [how to contribute](CONTRIBUTING.md) to the project + - Check out [how to contribute](CONTRIBUTING.md) to the project. + - Check out the [project roadmap](https://fluxcd.io/roadmap/). ### Events From 4ea70765af441cf1383669a67ce5327d4ce601f4 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Mon, 17 Oct 2022 18:57:09 +0300 Subject: [PATCH 258/818] Enable Dependabot for GitHub Actions Signed-off-by: Stefan Prodan --- .github/dependabot.yml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000..718572bf --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,7 @@ +version: 2 + +updates: + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" From 65a2ceec5c02a1676890f5cdcb35821b022a97b5 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Mon, 17 Oct 2022 19:46:55 +0300 Subject: [PATCH 259/818] Only run e2e tests for Dependabot PRs Signed-off-by: Stefan Prodan --- .github/workflows/bootstrap.yaml | 2 +- .github/workflows/scan.yaml | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/bootstrap.yaml b/.github/workflows/bootstrap.yaml index e35b9176..eedde2ec 100644 --- a/.github/workflows/bootstrap.yaml +++ b/.github/workflows/bootstrap.yaml @@ -9,7 +9,7 @@ on: jobs: github: runs-on: ubuntu-latest - if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository + if: (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) && github.actor != 'dependabot[bot]' steps: - name: Checkout uses: actions/checkout@v3 diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index d7e064f0..f1b6bd3e 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -16,6 +16,7 @@ jobs: fossa: name: FOSSA runs-on: ubuntu-latest + if: github.actor != 'dependabot[bot]' steps: - uses: actions/checkout@v3 - name: Run FOSSA scan and upload build data @@ -28,7 +29,7 @@ jobs: snyk: name: Snyk runs-on: ubuntu-latest - if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository + if: (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) && github.actor != 'dependabot[bot]' steps: - uses: actions/checkout@v3 - name: Setup Kustomize @@ -51,6 +52,7 @@ jobs: codeql: name: CodeQL runs-on: ubuntu-latest + if: github.actor != 'dependabot[bot]' steps: - name: Checkout repository uses: actions/checkout@v3 From 09cbf348a7319572245ca9f09ecbb4336992a1bf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 18 Oct 2022 07:32:38 +0000 Subject: [PATCH 260/818] Bump github/codeql-action from 1 to 2 Bumps [github/codeql-action](https://github.com/github/codeql-action) from 1 to 2. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/v1...v2) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/scan.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index f1b6bd3e..54b8b3e0 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -45,7 +45,7 @@ jobs: with: args: --sarif-file-output=snyk.sarif - name: Upload result to GitHub Code Scanning - uses: github/codeql-action/upload-sarif@v1 + uses: github/codeql-action/upload-sarif@v2 with: sarif_file: snyk.sarif From c31367909eb8a820449633ab98afd77d80a23066 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 19 Oct 2022 13:26:45 +0000 Subject: [PATCH 261/818] Bump hashicorp/setup-terraform from 1 to 2.0.2 Bumps [hashicorp/setup-terraform](https://github.com/hashicorp/setup-terraform) from 1 to 2.0.2. - [Release notes](https://github.com/hashicorp/setup-terraform/releases) - [Changelog](https://github.com/hashicorp/setup-terraform/blob/main/CHANGELOG.md) - [Commits](https://github.com/hashicorp/setup-terraform/compare/v1...v2.0.2) --- updated-dependencies: - dependency-name: hashicorp/setup-terraform dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/e2e-azure.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/e2e-azure.yaml b/.github/workflows/e2e-azure.yaml index e3f37107..def42188 100644 --- a/.github/workflows/e2e-azure.yaml +++ b/.github/workflows/e2e-azure.yaml @@ -41,7 +41,7 @@ jobs: mkdir -p $HOME/.local/bin mv sops-v3.7.1.linux $HOME/.local/bin/sops - name: Setup Terraform - uses: hashicorp/setup-terraform@v1 + uses: hashicorp/setup-terraform@v2.0.2 with: terraform_version: 1.2.8 terraform_wrapper: false From 4a51b111e6d50fc90e663c4a3de20a8213879e8c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 19 Oct 2022 13:48:54 +0000 Subject: [PATCH 262/818] Bump peter-evans/create-pull-request from 3 to 4 Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 3 to 4. - [Release notes](https://github.com/peter-evans/create-pull-request/releases) - [Commits](https://github.com/peter-evans/create-pull-request/compare/v3...v4) --- updated-dependencies: - dependency-name: peter-evans/create-pull-request dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/update.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/update.yaml b/.github/workflows/update.yaml index 062c05fb..c9d4fb16 100644 --- a/.github/workflows/update.yaml +++ b/.github/workflows/update.yaml @@ -69,7 +69,7 @@ jobs: - name: Create Pull Request id: cpr - uses: peter-evans/create-pull-request@v3 + uses: peter-evans/create-pull-request@v4 with: token: ${{ secrets.BOT_GITHUB_TOKEN }} commit-message: | From c3d7cad53ec7cf3f534f2f3aa411a14f34b21935 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Batuhan=20Apayd=C4=B1n?= Date: Wed, 19 Oct 2022 16:03:52 +0300 Subject: [PATCH 263/818] feat: diff artifact capability added MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Batuhan Apaydın --- cmd/flux/diff_artifact.go | 111 ++++++++++++++++++ cmd/flux/diff_artifact_test.go | 109 +++++++++++++++++ .../diff-artifact/deployment-diff.yaml | 78 ++++++++++++ .../testdata/diff-artifact/deployment.yaml | 78 ++++++++++++ .../testdata/diff-artifact/success.golden | 1 + go.mod | 21 +++- go.sum | 28 ++++- 7 files changed, 423 insertions(+), 3 deletions(-) create mode 100644 cmd/flux/diff_artifact.go create mode 100644 cmd/flux/diff_artifact_test.go create mode 100644 cmd/flux/testdata/diff-artifact/deployment-diff.yaml create mode 100644 cmd/flux/testdata/diff-artifact/deployment.yaml create mode 100644 cmd/flux/testdata/diff-artifact/success.golden diff --git a/cmd/flux/diff_artifact.go b/cmd/flux/diff_artifact.go new file mode 100644 index 00000000..ddf6d94b --- /dev/null +++ b/cmd/flux/diff_artifact.go @@ -0,0 +1,111 @@ +/* +Copyright 2022 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "context" + "fmt" + "os" + + "github.com/fluxcd/flux2/internal/flags" + oci "github.com/fluxcd/pkg/oci/client" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + "github.com/spf13/cobra" +) + +var diffArtifactCmd = &cobra.Command{ + Use: "artifact", + Short: "Diff Artifact", + Long: `The diff artifact command computes the diff between the remote OCI artifact and a local directory or file`, + Example: `# Check if local files differ from remote +flux diff artifact oci://ghcr.io/stefanprodan/manifests:podinfo:6.2.0 --path=./kustomize`, + RunE: diffArtifactCmdRun, +} + +type diffArtifactFlags struct { + path string + creds string + provider flags.SourceOCIProvider + ignorePaths []string +} + +var diffArtifactArgs = newDiffArtifactArgs() + +func newDiffArtifactArgs() diffArtifactFlags { + return diffArtifactFlags{ + provider: flags.SourceOCIProvider(sourcev1.GenericOCIProvider), + } +} + +func init() { + diffArtifactCmd.Flags().StringVar(&diffArtifactArgs.path, "path", "", "path to the directory where the Kubernetes manifests are located") + diffArtifactCmd.Flags().StringVar(&diffArtifactArgs.creds, "creds", "", "credentials for OCI registry in the format [:] if --provider is generic") + diffArtifactCmd.Flags().Var(&diffArtifactArgs.provider, "provider", sourceOCIRepositoryArgs.provider.Description()) + diffArtifactCmd.Flags().StringSliceVar(&diffArtifactArgs.ignorePaths, "ignore-paths", excludeOCI, "set paths to ignore in .gitignore format") + diffCmd.AddCommand(diffArtifactCmd) +} + +func diffArtifactCmdRun(cmd *cobra.Command, args []string) error { + if len(args) < 1 { + return fmt.Errorf("artifact URL is required") + } + ociURL := args[0] + + if diffArtifactArgs.path == "" { + return fmt.Errorf("invalid path %q", diffArtifactArgs.path) + } + + url, err := oci.ParseArtifactURL(ociURL) + if err != nil { + return err + } + + if _, err := os.Stat(diffArtifactArgs.path); err != nil { + return fmt.Errorf("invalid path '%s', must point to an existing directory or file", diffArtifactArgs.path) + } + + ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) + defer cancel() + + ociClient := oci.NewLocalClient() + + if diffArtifactArgs.provider.String() == sourcev1.GenericOCIProvider && diffArtifactArgs.creds != "" { + logger.Actionf("logging in to registry with credentials") + if err := ociClient.LoginWithCredentials(diffArtifactArgs.creds); err != nil { + return fmt.Errorf("could not login with credentials: %w", err) + } + } + + if diffArtifactArgs.provider.String() != sourcev1.GenericOCIProvider { + logger.Actionf("logging in to registry with provider credentials") + ociProvider, err := diffArtifactArgs.provider.ToOCIProvider() + if err != nil { + return fmt.Errorf("provider not supported: %w", err) + } + + if err := ociClient.LoginWithProvider(ctx, url, ociProvider); err != nil { + return fmt.Errorf("error during login with provider: %w", err) + } + } + + if err := ociClient.Diff(ctx, url, diffArtifactArgs.path, diffArtifactArgs.ignorePaths); err != nil { + return err + } + + logger.Successf("no changes detected") + return nil +} diff --git a/cmd/flux/diff_artifact_test.go b/cmd/flux/diff_artifact_test.go new file mode 100644 index 00000000..05e29915 --- /dev/null +++ b/cmd/flux/diff_artifact_test.go @@ -0,0 +1,109 @@ +//go:build unit +// +build unit + +/* +Copyright 2021 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "context" + "fmt" + "testing" + "time" + + "github.com/distribution/distribution/v3/configuration" + "github.com/distribution/distribution/v3/registry" + _ "github.com/distribution/distribution/v3/registry/auth/htpasswd" + _ "github.com/distribution/distribution/v3/registry/storage/driver/inmemory" + "github.com/phayes/freeport" + ctrl "sigs.k8s.io/controller-runtime" +) + +var dockerReg string + +func setupRegistryServer(ctx context.Context) error { + // Registry config + config := &configuration.Configuration{} + port, err := freeport.GetFreePort() + if err != nil { + return fmt.Errorf("failed to get free port: %s", err) + } + + dockerReg = fmt.Sprintf("localhost:%d", port) + config.HTTP.Addr = fmt.Sprintf("127.0.0.1:%d", port) + config.HTTP.DrainTimeout = time.Duration(10) * time.Second + config.Storage = map[string]configuration.Parameters{"inmemory": map[string]interface{}{}} + dockerRegistry, err := registry.NewRegistry(ctx, config) + if err != nil { + return fmt.Errorf("failed to create docker registry: %w", err) + } + + // Start Docker registry + go dockerRegistry.ListenAndServe() + + return nil +} + +func TestDiffArtifact(t *testing.T) { + tests := []struct { + name string + url string + argsTpl string + pushFile string + diffFile string + assert assertFunc + }{ + { + name: "should not fail if there is no diff", + url: "oci://%s/podinfo:1.0.0", + argsTpl: "diff artifact %s --path=%s", + pushFile: "./testdata/diff-artifact/deployment.yaml", + diffFile: "./testdata/diff-artifact/deployment.yaml", + assert: assertGoldenFile("testdata/diff-artifact/success.golden"), + }, + { + name: "should fail if there is a diff", + url: "oci://%s/podinfo:2.0.0", + argsTpl: "diff artifact %s --path=%s", + pushFile: "./testdata/diff-artifact/deployment.yaml", + diffFile: "./testdata/diff-artifact/deployment-diff.yaml", + assert: assertError("the remote artifact contents differs from the local one"), + }, + } + + ctx := ctrl.SetupSignalHandler() + err := setupRegistryServer(ctx) + if err != nil { + panic(fmt.Sprintf("failed to start docker registry: %s", err)) + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + tt.url = fmt.Sprintf(tt.url, dockerReg) + _, err := executeCommand("push artifact " + tt.url + " --path=" + tt.pushFile + " --source=test --revision=test") + if err != nil { + t.Fatalf(fmt.Errorf("failed to push image: %w", err).Error()) + } + + cmd := cmdTestCase{ + args: fmt.Sprintf(tt.argsTpl, tt.url, tt.diffFile), + assert: tt.assert, + } + cmd.runTestCmd(t) + }) + } +} diff --git a/cmd/flux/testdata/diff-artifact/deployment-diff.yaml b/cmd/flux/testdata/diff-artifact/deployment-diff.yaml new file mode 100644 index 00000000..350d4c1b --- /dev/null +++ b/cmd/flux/testdata/diff-artifact/deployment-diff.yaml @@ -0,0 +1,78 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + kustomize.toolkit.fluxcd.io/name: podinfo + kustomize.toolkit.fluxcd.io/namespace: {{ .fluxns }} + name: podinfo-diff + namespace: default +spec: + minReadySeconds: 3 + revisionHistoryLimit: 5 + progressDeadlineSeconds: 60 + strategy: + rollingUpdate: + maxUnavailable: 0 + type: RollingUpdate + selector: + matchLabels: + app: podinfo + template: + metadata: + annotations: + prometheus.io/scrape: "true" + prometheus.io/port: "9797" + labels: + app: podinfo + spec: + containers: + - name: podinfod + image: ghcr.io/stefanprodan/podinfo:6.0.10 + imagePullPolicy: IfNotPresent + ports: + - name: http + containerPort: 9898 + protocol: TCP + - name: http-metrics + containerPort: 9797 + protocol: TCP + - name: grpc + containerPort: 9999 + protocol: TCP + command: + - ./podinfo + - --port=9898 + - --port-metrics=9797 + - --grpc-port=9999 + - --grpc-service-name=podinfo + - --level=info + - --random-delay=false + - --random-error=false + env: + - name: PODINFO_UI_COLOR + value: "#34577c" + livenessProbe: + exec: + command: + - podcli + - check + - http + - localhost:9898/healthz + initialDelaySeconds: 5 + timeoutSeconds: 5 + readinessProbe: + exec: + command: + - podcli + - check + - http + - localhost:9898/readyz + initialDelaySeconds: 5 + timeoutSeconds: 5 + resources: + limits: + cpu: 2000m + memory: 512Mi + requests: + cpu: 100m + memory: 64Mi diff --git a/cmd/flux/testdata/diff-artifact/deployment.yaml b/cmd/flux/testdata/diff-artifact/deployment.yaml new file mode 100644 index 00000000..3910da6a --- /dev/null +++ b/cmd/flux/testdata/diff-artifact/deployment.yaml @@ -0,0 +1,78 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + kustomize.toolkit.fluxcd.io/name: podinfo + kustomize.toolkit.fluxcd.io/namespace: {{ .fluxns }} + name: podinfo + namespace: default +spec: + minReadySeconds: 3 + revisionHistoryLimit: 5 + progressDeadlineSeconds: 60 + strategy: + rollingUpdate: + maxUnavailable: 0 + type: RollingUpdate + selector: + matchLabels: + app: podinfo + template: + metadata: + annotations: + prometheus.io/scrape: "true" + prometheus.io/port: "9797" + labels: + app: podinfo + spec: + containers: + - name: podinfod + image: ghcr.io/stefanprodan/podinfo:6.0.10 + imagePullPolicy: IfNotPresent + ports: + - name: http + containerPort: 9898 + protocol: TCP + - name: http-metrics + containerPort: 9797 + protocol: TCP + - name: grpc + containerPort: 9999 + protocol: TCP + command: + - ./podinfo + - --port=9898 + - --port-metrics=9797 + - --grpc-port=9999 + - --grpc-service-name=podinfo + - --level=info + - --random-delay=false + - --random-error=false + env: + - name: PODINFO_UI_COLOR + value: "#34577c" + livenessProbe: + exec: + command: + - podcli + - check + - http + - localhost:9898/healthz + initialDelaySeconds: 5 + timeoutSeconds: 5 + readinessProbe: + exec: + command: + - podcli + - check + - http + - localhost:9898/readyz + initialDelaySeconds: 5 + timeoutSeconds: 5 + resources: + limits: + cpu: 2000m + memory: 512Mi + requests: + cpu: 100m + memory: 64Mi diff --git a/cmd/flux/testdata/diff-artifact/success.golden b/cmd/flux/testdata/diff-artifact/success.golden new file mode 100644 index 00000000..3fbafa68 --- /dev/null +++ b/cmd/flux/testdata/diff-artifact/success.golden @@ -0,0 +1 @@ +✔ no changes detected diff --git a/go.mod b/go.mod index fb5c1e08..11ba3ce0 100644 --- a/go.mod +++ b/go.mod @@ -6,6 +6,7 @@ require ( github.com/Masterminds/semver/v3 v3.1.1 github.com/ProtonMail/go-crypto v0.0.0-20220824120805-4b6e5c587895 github.com/cyphar/filepath-securejoin v0.2.3 + github.com/distribution/distribution/v3 v3.0.0-20220907155224-78b9c98c5c31 github.com/fluxcd/go-git-providers v0.8.0 github.com/fluxcd/helm-controller/api v0.25.0 github.com/fluxcd/image-automation-controller/api v0.26.0 @@ -14,7 +15,7 @@ require ( github.com/fluxcd/notification-controller/api v0.27.0 github.com/fluxcd/pkg/apis/meta v0.16.0 github.com/fluxcd/pkg/kustomize v0.7.0 - github.com/fluxcd/pkg/oci v0.12.0 + github.com/fluxcd/pkg/oci v0.14.0 github.com/fluxcd/pkg/runtime v0.18.0 github.com/fluxcd/pkg/sourceignore v0.2.0 github.com/fluxcd/pkg/ssa v0.19.0 @@ -34,6 +35,7 @@ require ( github.com/mattn/go-shellwords v1.0.12 github.com/olekukonko/tablewriter v0.0.5 github.com/onsi/gomega v1.20.2 + github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 github.com/spf13/cobra v1.5.0 github.com/spf13/pflag v1.0.5 github.com/theckman/yacspin v0.13.12 @@ -71,9 +73,14 @@ require ( github.com/BurntSushi/toml v1.0.0 // indirect github.com/MakeNowJust/heredoc v1.0.0 // indirect github.com/Microsoft/go-winio v0.5.2 // indirect + github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d // indirect github.com/acomagu/bufpipe v1.0.3 // indirect github.com/aws/aws-sdk-go v1.44.105 // indirect github.com/beorn7/perks v1.0.1 // indirect + github.com/bshuster-repo/logrus-logstash-hook v1.0.0 // indirect + github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd // indirect + github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b // indirect + github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/chai2010/gettext-go v1.0.2 // indirect github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e // indirect @@ -85,6 +92,9 @@ require ( github.com/docker/distribution v2.8.1+incompatible // indirect github.com/docker/docker v20.10.17+incompatible // indirect github.com/docker/docker-credential-helpers v0.6.4 // indirect + github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c // indirect + github.com/docker/go-metrics v0.0.1 // indirect + github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1 // indirect github.com/drone/envsubst/v2 v2.0.0-20210730161058-179042472c46 // indirect github.com/emicklei/go-restful/v3 v3.8.0 // indirect github.com/emirpasic/gods v1.12.0 // indirect @@ -92,8 +102,10 @@ require ( github.com/evanphx/json-patch/v5 v5.6.0 // indirect github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d // indirect github.com/fatih/color v1.13.0 // indirect + github.com/felixge/httpsnoop v1.0.1 // indirect github.com/fluxcd/pkg/apis/acl v0.1.0 // indirect github.com/fluxcd/pkg/apis/kustomize v0.6.0 // indirect + github.com/fluxcd/pkg/tar v0.2.0 // indirect github.com/fsnotify/fsnotify v1.5.4 // indirect github.com/go-errors/errors v1.0.1 // indirect github.com/go-git/gcfg v1.5.0 // indirect @@ -107,6 +119,7 @@ require ( github.com/golang-jwt/jwt/v4 v4.4.1 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.2 // indirect + github.com/gomodule/redigo v1.8.2 // indirect github.com/gonvenience/neat v1.3.11 // indirect github.com/gonvenience/term v1.0.2 // indirect github.com/gonvenience/text v1.0.7 // indirect @@ -118,10 +131,13 @@ require ( github.com/google/gofuzz v1.2.0 // indirect github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect github.com/google/uuid v1.3.0 // indirect + github.com/gorilla/handlers v1.5.1 // indirect + github.com/gorilla/mux v1.8.0 // indirect github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 // indirect github.com/hashicorp/errwrap v1.0.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/hashicorp/go-retryablehttp v0.7.1 // indirect + github.com/hashicorp/golang-lru v0.5.4 // indirect github.com/imdario/mergo v0.3.12 // indirect github.com/inconshreveable/mousetrap v1.0.0 // indirect github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect @@ -168,6 +184,9 @@ require ( github.com/xanzy/go-gitlab v0.69.0 // indirect github.com/xanzy/ssh-agent v0.3.0 // indirect github.com/xlab/treeprint v1.1.0 // indirect + github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43 // indirect + github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50 // indirect + github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f // indirect go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 // indirect golang.org/x/net v0.0.0-20220722155237-a158d28d115b // indirect golang.org/x/oauth2 v0.0.0-20220722155238-128564f6959c // indirect diff --git a/go.sum b/go.sum index 99aec23b..82983f5e 100644 --- a/go.sum +++ b/go.sum @@ -106,6 +106,7 @@ github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7/go.mod h1:z4/ github.com/ProtonMail/go-crypto v0.0.0-20220824120805-4b6e5c587895 h1:NsReiLpErIPzRrnogAXYwSoU7txA977LjDGrbkewJbg= github.com/ProtonMail/go-crypto v0.0.0-20220824120805-4b6e5c587895/go.mod h1:UBYPn8k0D56RtnR8RFQMjmh4KrZzWJ5o7Z9SYjossQ8= github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d h1:UrqY+r/OJnIp5u0s1SbQ8dVfLCZJsnvazdBP5hS4iRs= +github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ= github.com/StackExchange/wmi v1.2.1/go.mod h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8= github.com/acomagu/bufpipe v1.0.3 h1:fxAGrHZTgQ9w5QqVItgzwj235/uYZYgbXitB+dLupOk= github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= @@ -142,16 +143,21 @@ github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+Ce github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/bitly/go-simplejson v0.5.0 h1:6IH+V8/tVMab511d5bn4M7EwGXZf9Hj6i2xSwkNEM+Y= github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= github.com/bkielbasa/cyclop v1.2.0/go.mod h1:qOI0yy6A7dYC4Zgsa72Ppm9kONl0RoIlPbzot9mhmeI= github.com/blizzy78/varnamelen v0.3.0/go.mod h1:hbwRdBvoBqxk34XyQ6HA0UH3G0/1TKuv5AC4eaBT0Ec= github.com/bombsimon/wsl/v3 v3.3.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc= github.com/breml/bidichk v0.1.1/go.mod h1:zbfeitpevDUGI7V91Uzzuwrn4Vls8MoBMrwtt78jmso= github.com/bshuster-repo/logrus-logstash-hook v1.0.0 h1:e+C0SB5R1pu//O4MQ3f9cFuPGoOVeF2fE4Og9otCc70= +github.com/bshuster-repo/logrus-logstash-hook v1.0.0/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk= github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd h1:rFt+Y/IK1aEZkEHchZRSq9OQbsSzIT/OrI8YFFmRIng= +github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8= github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b h1:otBG+dV+YK+Soembjv71DPz3uX/V/6MMlSyD9JBQ6kQ= +github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b/go.mod h1:obH5gd0BsqsP2LwDJ9aOkm/6J86V6lyAXCoQWGw3K50= github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0 h1:nvj0OLI3YqYXer/kZD8Ri1aaunCxIEsOst1BVJswV0o= +github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE= github.com/butuzov/ireturn v0.1.1/go.mod h1:Wh6Zl3IMtTpaIKbmwzqi6olnM9ptYQxxVacMsOEFPoc= github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= @@ -208,6 +214,7 @@ github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/denis-tingajkin/go-header v0.4.2/go.mod h1:eLRHAVXzE5atsKAnNRDB90WHCFFnBUn4RN0nRcs1LJA= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/distribution/distribution/v3 v3.0.0-20220907155224-78b9c98c5c31 h1:AqcwAyaSEkILnr/bLybFnM2i/+EW67JJIRs/4dWmzxo= +github.com/distribution/distribution/v3 v3.0.0-20220907155224-78b9c98c5c31/go.mod h1:XrR+08YQxO57vT8gtNmhLfHy/YIutMmmEeKMhU7zXqY= github.com/dnaeon/go-vcr v1.1.0 h1:ReYa/UBrRyQdant9B4fNHGoCNKw6qh6P0fsdGmZpR7c= github.com/docker/cli v20.10.17+incompatible h1:eO2KS7ZFeov5UJeaDmIs1NFEDRf32PaqRpvoEkKBy5M= github.com/docker/cli v20.10.17+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= @@ -218,8 +225,11 @@ github.com/docker/docker v20.10.17+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05 github.com/docker/docker-credential-helpers v0.6.4 h1:axCks+yV+2MR3/kZhAmy07yC56WZ2Pwu/fKWtKuZB0o= github.com/docker/docker-credential-helpers v0.6.4/go.mod h1:ofX3UI0Gz1TteYBjtgs07O36Pyasyp66D2uKT7H8W1c= github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c h1:+pKlWGMw7gf6bQ+oDZB4KHQFypsfjYlq/C4rfL7D3g8= +github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= github.com/docker/go-metrics v0.0.1 h1:AgB/0SvBxihN0X8OR4SjsblXkbMvalQ8cjmtKQ2rQV8= +github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw= github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1 h1:ZClxb8laGDf5arXfYcAtECDFgAgHklGI8CxgjHnXKJ4= +github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/drone/envsubst/v2 v2.0.0-20210730161058-179042472c46 h1:7QPwrLT79GlD5sizHf27aoY2RTvw62mO6x7mxkScNk0= github.com/drone/envsubst/v2 v2.0.0-20210730161058-179042472c46/go.mod h1:esf2rsHFNlZlxsqsZDojNBcnNs5REqIvRrWRHqX0vEU= @@ -255,6 +265,7 @@ github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= github.com/felixge/httpsnoop v1.0.1 h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8SPQ= +github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0= github.com/fluxcd/go-git-providers v0.8.0 h1:80UMu7yvRoEVfEIg0eGb9bJ0bSceizNJrEVvwLo+0YI= github.com/fluxcd/go-git-providers v0.8.0/go.mod h1:krF+f3UFciy5QmFaYfaORCVxaEj7u2qD7R/WrfKCLWk= @@ -276,8 +287,8 @@ github.com/fluxcd/pkg/apis/meta v0.16.0 h1:6Mj9rB0TtvCeTe3IlQDc1i2DH75Oosea9yUqS github.com/fluxcd/pkg/apis/meta v0.16.0/go.mod h1:GrOVzWXiu22XjLNgLLe2EBYhQPqZetes5SIADb4bmHE= github.com/fluxcd/pkg/kustomize v0.7.0 h1:604rlpRZTWaOfzDZ1W93aHaFh9kn8/UMX/wzsjwIUQY= github.com/fluxcd/pkg/kustomize v0.7.0/go.mod h1:zJY3Z0+SX+zs+/A1F6fCT0JvUce265XnrpTtHnujXPo= -github.com/fluxcd/pkg/oci v0.12.0 h1:+0vCpjFERfpmSfMT+Quk29l7OI/SbxEwX+Dw+JcZYkM= -github.com/fluxcd/pkg/oci v0.12.0/go.mod h1:gsRwVj0gTwk9xF3PuPJQ4R+rv8UtT26Gi7r1XfyBw8A= +github.com/fluxcd/pkg/oci v0.14.0 h1:KwjOf2OSB1bZvNEwDfp+FbOrK0fMcSYA01AJEc671mQ= +github.com/fluxcd/pkg/oci v0.14.0/go.mod h1:TH7ru7YlX5L3xihbdnIgYVWXsOqrYcJIci/Mq4MgWbo= github.com/fluxcd/pkg/runtime v0.18.0 h1:3naATapV1y65ZWlsXEfJt66zSQBkJwJ9o/e6gqAF//E= github.com/fluxcd/pkg/runtime v0.18.0/go.mod h1:JKTvOFOCz5Un9KxGcBL7Xjt0fcRa10ZItGB0XFv44AY= github.com/fluxcd/pkg/sourceignore v0.2.0 h1:ooNbIkfxqNB+KKiY4AU+/DxwzjIKIOWBRK1As5QFlug= @@ -286,6 +297,8 @@ github.com/fluxcd/pkg/ssa v0.19.0 h1:azciQ/M1L7Nf4zkHJ+A+a58uShcTW3ZMbyY8KiYcqrI github.com/fluxcd/pkg/ssa v0.19.0/go.mod h1:OjHX/qA4xqLi237l0yccsT6FnLmHxDKukpMXnhdXdyk= github.com/fluxcd/pkg/ssh v0.6.0 h1:yRJ866obXCo0JseJCqlGKtF8cumioPcwIC6kMwf8Spg= github.com/fluxcd/pkg/ssh v0.6.0/go.mod h1:Puf+hWNzFsqdHtjDpsI3PTTvitZu41ObuPFblOdzrrI= +github.com/fluxcd/pkg/tar v0.2.0 h1:HEUHgONQYsJGeZZ4x6h5nQU9Aox1I4T3bOp1faWTqf8= +github.com/fluxcd/pkg/tar v0.2.0/go.mod h1:w0/TOC7kwBJhnSJn7TCABkc/I7ib1f2Yz6vOsbLBnhw= github.com/fluxcd/pkg/untar v0.2.0 h1:sJXU+FbJcNUb2ffLJNjeR3hwt3X2loVpOMlCUjyFw6E= github.com/fluxcd/pkg/untar v0.2.0/go.mod h1:33AyoWaPpjX/xXpczcfhQh2AkB63TFwiR2YwROtv23E= github.com/fluxcd/pkg/version v0.2.0 h1:jG22c59Bsv6vL51N7Bqn8tjHArYOXrjbIkGArlIrv5w= @@ -420,6 +433,7 @@ github.com/golangci/misspell v0.3.5/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPP github.com/golangci/revgrep v0.0.0-20210930125155-c22e5001d4f2/go.mod h1:LK+zW4MpyytAWQRz0M4xnzEk50lSvqDQKfx304apFkY= github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ= github.com/gomodule/redigo v1.8.2 h1:H5XSIre1MB5NbPYFp+i1NBbb5qN1W8Y8YAQoAYbkm8k= +github.com/gomodule/redigo v1.8.2/go.mod h1:P9dn9mFrCBvWhGE1wpxx6fgq7BAeLBk+UUUzlpkBYO0= github.com/gonvenience/bunt v1.3.4 h1:Row599Ohja2BPooaqd1tHYdTAKu6SWq7W/UeakTXddM= github.com/gonvenience/bunt v1.3.4/go.mod h1:j8eqHLBo8eWCCYuc34oFdlgyxL1rZ4ywYz4BZa4b09w= github.com/gonvenience/neat v1.3.11 h1:xxxCdGSuikMm7/Qp9/NwPfxLefKJM2XQiobGwPu63+Q= @@ -502,6 +516,7 @@ github.com/gordonklaus/ineffassign v0.0.0-20200309095847-7953dde2c7bf/go.mod h1: github.com/gordonklaus/ineffassign v0.0.0-20210225214923-2e10b2664254/go.mod h1:M9mZEtGIsR1oDaZagNPNG9iq9n2HrhZ17dsXk73V3Lw= github.com/gorhill/cronexpr v0.0.0-20180427100037-88b0669f7d75/go.mod h1:g2644b03hfBX9Ov0ZBDgXXens4rxSxmqFBbhvKv2yVA= github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= +github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= @@ -729,6 +744,7 @@ github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:F github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.4.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f h1:2+myh5ml7lgEU/51gbeLHfKGNfgEQQIWrlbdaOsidbQ= github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/moby/spdystream v0.2.0 h1:cjW1zVyyoiM0T7b6UoySUFqzXMoqRckQtXwGPiBhOM8= @@ -799,6 +815,7 @@ github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+v github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d/go.mod h1:3OzsM7FXDQlpCiw2j81fOmAwQLnZnLGXVKUzeKQXIAw= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= +github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4/go.mod h1:N6UoU20jOqggOuDwUaBQpluzLNDqif3kq9z2wpdYEfQ= github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU= github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= @@ -815,6 +832,7 @@ github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndr github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= @@ -826,6 +844,7 @@ github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1: github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= 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.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= @@ -833,6 +852,7 @@ github.com/prometheus/common v0.37.0 h1:ccBbHCgIiT9uSoFY0vX8H3zsNR5eLt17/RQLUvn8 github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/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.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= @@ -983,8 +1003,11 @@ github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9dec github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43 h1:+lm10QQTNSBd8DVTNGHx7o/IKu9HYDvLMffDhbyLccI= +github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43/go.mod h1:aX5oPXxHm3bOH+xeAttToC8pqch2ScQN/JoXYupl6xs= github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50 h1:hlE8//ciYMztlGpl/VA+Zm1AcTPHYkHJPbHqE6WJUXE= +github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50/go.mod h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96TguQh0+r/ssA= github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f h1:ERexzlUfuTvpE74urLSbIQW0Z/6hF9t8U4NsJLaioAY= +github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.4/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= go.etcd.io/etcd v0.0.0-20200513171258-e048e166ab9c/go.mod h1:xCI7ZzBfRuGgBXyXO6yfWfDmlWd35khcWpUa4L0xI/k= @@ -1185,6 +1208,7 @@ golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= From 939a75115cf62424e88485725cf825fc28cc9da6 Mon Sep 17 00:00:00 2001 From: Eddie Knight Date: Thu, 20 Oct 2022 11:04:49 -0500 Subject: [PATCH 264/818] Adjusted workflow permissions Signed-off-by: Eddie Knight --- .github/workflows/bootstrap.yaml | 3 +++ .github/workflows/e2e-arm64.yaml | 3 +++ .github/workflows/e2e-azure.yaml | 3 +++ .github/workflows/e2e.yaml | 3 +++ .github/workflows/release-manifests.yml | 6 ++++-- .github/workflows/release.yaml | 4 ++++ .github/workflows/scan.yaml | 3 ++- .github/workflows/update.yaml | 3 +++ 8 files changed, 25 insertions(+), 3 deletions(-) diff --git a/.github/workflows/bootstrap.yaml b/.github/workflows/bootstrap.yaml index eedde2ec..30e6218a 100644 --- a/.github/workflows/bootstrap.yaml +++ b/.github/workflows/bootstrap.yaml @@ -6,6 +6,9 @@ on: pull_request: branches: [ main ] +permissions: + contents: read + jobs: github: runs-on: ubuntu-latest diff --git a/.github/workflows/e2e-arm64.yaml b/.github/workflows/e2e-arm64.yaml index 53fb7650..15b77503 100644 --- a/.github/workflows/e2e-arm64.yaml +++ b/.github/workflows/e2e-arm64.yaml @@ -5,6 +5,9 @@ on: push: branches: [ main, update-components ] +permissions: + contents: read + jobs: test: # Hosted on Equinix diff --git a/.github/workflows/e2e-azure.yaml b/.github/workflows/e2e-azure.yaml index def42188..d3db6d61 100644 --- a/.github/workflows/e2e-azure.yaml +++ b/.github/workflows/e2e-azure.yaml @@ -7,6 +7,9 @@ on: push: branches: [ azure* ] +permissions: + contents: read + jobs: e2e: runs-on: ubuntu-22.04 diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index 29af71d6..ef68a19f 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -6,6 +6,9 @@ on: pull_request: branches: [ main, oci ] +permissions: + contents: read + jobs: kind: runs-on: ubuntu-latest diff --git a/.github/workflows/release-manifests.yml b/.github/workflows/release-manifests.yml index 178f3642..9ccc419a 100644 --- a/.github/workflows/release-manifests.yml +++ b/.github/workflows/release-manifests.yml @@ -5,10 +5,12 @@ on: workflow_dispatch: permissions: - id-token: write # needed for keyless signing - packages: write # needed for ghcr access + contents: read jobs: + permissions: + id-token: write # needed for keyless signing + packages: write # needed for ghcr access build-push: runs-on: ubuntu-latest steps: diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index cc969451..099a6827 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -11,6 +11,10 @@ permissions: jobs: goreleaser: + permissions: # TODO: Segment these jobs to minimize which actions are recieving escalated perms + contents: write # needed to write releases + id-token: write # needed for keyless signing + packages: write # needed for ghcr access runs-on: ubuntu-latest steps: - name: Checkout diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index 54b8b3e0..cad18be7 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -10,7 +10,6 @@ on: permissions: contents: read # for actions/checkout to fetch code - security-events: write # for codeQL to write security events jobs: fossa: @@ -50,6 +49,8 @@ jobs: sarif_file: snyk.sarif codeql: + permissions: + security-events: write # for codeQL to write security events name: CodeQL runs-on: ubuntu-latest if: github.actor != 'dependabot[bot]' diff --git a/.github/workflows/update.yaml b/.github/workflows/update.yaml index c9d4fb16..cac03dea 100644 --- a/.github/workflows/update.yaml +++ b/.github/workflows/update.yaml @@ -7,6 +7,9 @@ on: push: branches: [main] +permissions: + contents: read + jobs: update-components: runs-on: ubuntu-latest From 2abf932ee49fa3926bf49e05a0b1fd878f5b0e0c Mon Sep 17 00:00:00 2001 From: Eddie Knight Date: Thu, 20 Oct 2022 12:09:34 -0500 Subject: [PATCH 265/818] Updated scan & update permissions Signed-off-by: Eddie Knight --- .github/workflows/scan.yaml | 2 ++ .github/workflows/update.yaml | 3 +++ 2 files changed, 5 insertions(+) diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index cad18be7..401af241 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -27,6 +27,8 @@ jobs: snyk: name: Snyk + permisions: + security-events: write runs-on: ubuntu-latest if: (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) && github.actor != 'dependabot[bot]' steps: diff --git a/.github/workflows/update.yaml b/.github/workflows/update.yaml index cac03dea..72c15457 100644 --- a/.github/workflows/update.yaml +++ b/.github/workflows/update.yaml @@ -12,6 +12,9 @@ permissions: jobs: update-components: + permissions: + contents: write + pull-requests: write runs-on: ubuntu-latest steps: - name: Check out code From 73692df27233c97194776b6eba2ebe40b828e0a5 Mon Sep 17 00:00:00 2001 From: Eddie Knight Date: Thu, 20 Oct 2022 12:48:05 -0500 Subject: [PATCH 266/818] Additional workflow permissions tweaks Signed-off-by: Eddie Knight --- .github/workflows/release-manifests.yml | 6 +++--- .github/workflows/release.yaml | 4 +--- .github/workflows/scan.yaml | 4 ++-- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/.github/workflows/release-manifests.yml b/.github/workflows/release-manifests.yml index 9ccc419a..0d24333d 100644 --- a/.github/workflows/release-manifests.yml +++ b/.github/workflows/release-manifests.yml @@ -8,11 +8,11 @@ permissions: contents: read jobs: - permissions: - id-token: write # needed for keyless signing - packages: write # needed for ghcr access build-push: runs-on: ubuntu-latest + permissions: + id-token: write # needed for keyless signing + packages: write # needed for ghcr access steps: - uses: actions/checkout@v3 - name: Setup Kustomize diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 099a6827..d4696dea 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -5,9 +5,7 @@ on: tags: [ 'v*' ] permissions: - contents: write # needed to write releases - id-token: write # needed for keyless signing - packages: write # needed for ghcr access + contents: read jobs: goreleaser: diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index 401af241..f8430a12 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -51,10 +51,10 @@ jobs: sarif_file: snyk.sarif codeql: - permissions: - security-events: write # for codeQL to write security events name: CodeQL runs-on: ubuntu-latest + permissions: + security-events: write # for codeQL to write security events if: github.actor != 'dependabot[bot]' steps: - name: Checkout repository From bb1078d610dd5487ed8fc09a18d693077fa6493a Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Fri, 21 Oct 2022 09:36:43 +0300 Subject: [PATCH 267/818] ci: Refactor GitHub workflows Signed-off-by: Stefan Prodan --- .github/workflows/README.md | 50 +++++++++++++ .github/workflows/e2e-arm64.yaml | 2 +- .github/workflows/e2e-azure.yaml | 2 +- .../{bootstrap.yaml => e2e-bootstrap.yaml} | 5 +- .github/workflows/e2e.yaml | 3 +- .github/workflows/release-manifests.yml | 75 ------------------- .github/workflows/release.yaml | 72 +++++++++++++++++- .github/workflows/scan.yaml | 18 ++--- .github/workflows/update.yaml | 4 +- 9 files changed, 136 insertions(+), 95 deletions(-) create mode 100644 .github/workflows/README.md rename .github/workflows/{bootstrap.yaml => e2e-bootstrap.yaml} (98%) delete mode 100644 .github/workflows/release-manifests.yml diff --git a/.github/workflows/README.md b/.github/workflows/README.md new file mode 100644 index 00000000..79ca735a --- /dev/null +++ b/.github/workflows/README.md @@ -0,0 +1,50 @@ +# Flux GitHub Workflows + +## End-to-end Testing + +The e2e workflows run a series of tests to ensure that the Flux CLI and +the GitOps Toolkit controllers work well all together. +The tests are written in Go, Bash, Make and Terraform. + +| Workflow | Jobs | Runner | Role | +|--------------------|----------------------|----------------|-----------------------------------------------| +| e2e.yaml | e2e-amd64-kubernetes | GitHub Ubuntu | integration testing with Kubernetes Kind
| +| e2e-arm64.yaml | e2e-arm64-kubernetes | Equinix Ubuntu | integration testing with Kubernetes Kind
| +| e2e-bootstrap.yaml | e2e-boostrap-github | GitHub Ubuntu | integration testing with GitHub API
| +| e2e-azure.yaml | e2e-amd64-aks | GitHub Ubuntu | integration testing with Azure API
| +| scan.yaml | scan-fossa | GitHub Ubuntu | license scanning
| +| scan.yaml | scan-snyk | GitHub Ubuntu | vulnerability scanning
| +| scan.yaml | scan-codeql | GitHub Ubuntu | vulnerability scanning
| + +## Components Update + +The components update workflow scans the GitOps Toolkit controller repositories for new releases, +amd when it finds a new controller version, the workflow performs the following steps: +- Updates the controller API package version in `go.mod`. +- Patches the controller CRDs version in the `manifests/crds` overlay. +- Patches the controller Deployment version in `manifests/bases` overlay. +- Opens a Pull Request against the `main` branch. +- Triggers the e2e test suite to run for the opened PR. + + +| Workflow | Jobs | Runner | Role | +|-------------|-------------------|---------------|-----------------------------------------------------| +| update.yaml | update-components | GitHub Ubuntu | update the GitOps Toolkit APIs and controllers
| + +## Release + +The release workflow is triggered by a semver Git tag and performs the following steps: +- Generates the Flux install manifests (YAML). +- Generates the OpenAPI validation schemas for the GitOps Toolkit CRDs (JSON). +- Generates a Software Bill of Materials (SPDX JSON). +- Builds the Flux CLI binaries and the multi-arch container images. +- Pushes the container images to GitHub Container Registry and DockerHub. +- Signs the sbom, the binaries checksum and the container images with Cosign and GitHub OIDC. +- Uploads the sbom, binaries, checksums and install manifests to GitHub Releases. +- Pushes the install manifests as OCI artifacts to GitHub Container Registry and DockerHub. +- Signs the OCI artifacts with Cosign and GitHub OIDC. + +| Workflow | Jobs | Runner | Role | +|--------------|------------------------|---------------|------------------------------------------------------| +| release.yaml | release-flux-cli | GitHub Ubuntu | build, push and sign the CLI release artifacts
| +| release.yaml | release-flux-manifests | GitHub Ubuntu | build, push and sign the Flux install manifests
| diff --git a/.github/workflows/e2e-arm64.yaml b/.github/workflows/e2e-arm64.yaml index 15b77503..bafea2fd 100644 --- a/.github/workflows/e2e-arm64.yaml +++ b/.github/workflows/e2e-arm64.yaml @@ -9,7 +9,7 @@ permissions: contents: read jobs: - test: + e2e-arm64-kubernetes: # Hosted on Equinix # Docs: https://github.com/fluxcd/flux2/tree/main/.github/runners runs-on: [self-hosted, Linux, ARM64, equinix] diff --git a/.github/workflows/e2e-azure.yaml b/.github/workflows/e2e-azure.yaml index d3db6d61..3c3f2dba 100644 --- a/.github/workflows/e2e-azure.yaml +++ b/.github/workflows/e2e-azure.yaml @@ -11,7 +11,7 @@ permissions: contents: read jobs: - e2e: + e2e-amd64-aks: runs-on: ubuntu-22.04 steps: - name: Checkout diff --git a/.github/workflows/bootstrap.yaml b/.github/workflows/e2e-bootstrap.yaml similarity index 98% rename from .github/workflows/bootstrap.yaml rename to .github/workflows/e2e-bootstrap.yaml index 30e6218a..484aec1f 100644 --- a/.github/workflows/bootstrap.yaml +++ b/.github/workflows/e2e-bootstrap.yaml @@ -1,6 +1,7 @@ -name: bootstrap +name: e2e-bootstrap on: + workflow_dispatch: push: branches: [ main ] pull_request: @@ -10,7 +11,7 @@ permissions: contents: read jobs: - github: + e2e-boostrap-github: runs-on: ubuntu-latest if: (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) && github.actor != 'dependabot[bot]' steps: diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index ef68a19f..c15e2ee2 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -1,6 +1,7 @@ name: e2e on: + workflow_dispatch: push: branches: [ main ] pull_request: @@ -10,7 +11,7 @@ permissions: contents: read jobs: - kind: + e2e-amd64-kubernetes: runs-on: ubuntu-latest services: registry: diff --git a/.github/workflows/release-manifests.yml b/.github/workflows/release-manifests.yml deleted file mode 100644 index 0d24333d..00000000 --- a/.github/workflows/release-manifests.yml +++ /dev/null @@ -1,75 +0,0 @@ -name: release-manifests -on: - release: - types: [published] - workflow_dispatch: - -permissions: - contents: read - -jobs: - build-push: - runs-on: ubuntu-latest - permissions: - id-token: write # needed for keyless signing - packages: write # needed for ghcr access - steps: - - uses: actions/checkout@v3 - - name: Setup Kustomize - uses: fluxcd/pkg/actions/kustomize@main - - name: Setup Flux CLI - uses: ./action/ - - name: Prepare - id: prep - run: | - VERSION=$(flux version --client | awk '{ print $NF }') - echo ::set-output name=VERSION::${VERSION} - - name: Login to GHCR - uses: docker/login-action@v2 - with: - registry: ghcr.io - username: fluxcdbot - password: ${{ secrets.GHCR_TOKEN }} - - name: Login to DockerHub - uses: docker/login-action@v2 - with: - username: fluxcdbot - password: ${{ secrets.DOCKER_FLUXCD_PASSWORD }} - - name: Push manifests to GHCR - run: | - mkdir -p ./ghcr.io/flux-system - flux install --registry=ghcr.io/fluxcd \ - --components-extra=image-reflector-controller,image-automation-controller \ - --export > ./ghcr.io/flux-system/gotk-components.yaml - - cd ./ghcr.io && flux push artifact \ - oci://ghcr.io/fluxcd/flux-manifests:${{ steps.prep.outputs.VERSION }} \ - --path="./flux-system" \ - --source=${{ github.repositoryUrl }} \ - --revision="${{ github.ref_name }}/${{ github.sha }}" - - name: Push manifests to DockerHub - run: | - mkdir -p ./docker.io/flux-system - flux install --registry=docker.io/fluxcd \ - --components-extra=image-reflector-controller,image-automation-controller \ - --export > ./docker.io/flux-system/gotk-components.yaml - - cd ./docker.io && flux push artifact \ - oci://docker.io/fluxcd/flux-manifests:${{ steps.prep.outputs.VERSION }} \ - --path="./flux-system" \ - --source=${{ github.repositoryUrl }} \ - --revision="${{ github.ref_name }}/${{ github.sha }}" - - uses: sigstore/cosign-installer@main - - name: Sign manifests - env: - COSIGN_EXPERIMENTAL: 1 - run: | - cosign sign ghcr.io/fluxcd/flux-manifests:${{ steps.prep.outputs.VERSION }} - cosign sign docker.io/fluxcd/flux-manifests:${{ steps.prep.outputs.VERSION }} - - name: Tag manifests - run: | - flux tag artifact oci://ghcr.io/fluxcd/flux-manifests:${{ steps.prep.outputs.VERSION }} \ - --tag latest - - flux tag artifact oci://docker.io/fluxcd/flux-manifests:${{ steps.prep.outputs.VERSION }} \ - --tag latest diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index d4696dea..885f8676 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -8,12 +8,12 @@ permissions: contents: read jobs: - goreleaser: - permissions: # TODO: Segment these jobs to minimize which actions are recieving escalated perms + release-flux-cli: + runs-on: ubuntu-latest + permissions: contents: write # needed to write releases id-token: write # needed for keyless signing packages: write # needed for ghcr access - runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 @@ -83,3 +83,69 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} HOMEBREW_TAP_GITHUB_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN }} AUR_BOT_SSH_PRIVATE_KEY: ${{ secrets.AUR_BOT_SSH_PRIVATE_KEY }} + release-flux-manifests: + runs-on: ubuntu-latest + needs: release-flux-cli + permissions: + id-token: write + packages: write + steps: + - uses: actions/checkout@v3 + - name: Setup Kustomize + uses: fluxcd/pkg/actions/kustomize@main + - name: Setup Flux CLI + uses: ./action/ + - name: Prepare + id: prep + run: | + VERSION=$(flux version --client | awk '{ print $NF }') + echo ::set-output name=VERSION::${VERSION} + - name: Login to GHCR + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: fluxcdbot + password: ${{ secrets.GHCR_TOKEN }} + - name: Login to DockerHub + uses: docker/login-action@v2 + with: + username: fluxcdbot + password: ${{ secrets.DOCKER_FLUXCD_PASSWORD }} + - name: Push manifests to GHCR + run: | + mkdir -p ./ghcr.io/flux-system + flux install --registry=ghcr.io/fluxcd \ + --components-extra=image-reflector-controller,image-automation-controller \ + --export > ./ghcr.io/flux-system/gotk-components.yaml + + cd ./ghcr.io && flux push artifact \ + oci://ghcr.io/fluxcd/flux-manifests:${{ steps.prep.outputs.VERSION }} \ + --path="./flux-system" \ + --source=${{ github.repositoryUrl }} \ + --revision="${{ github.ref_name }}/${{ github.sha }}" + - name: Push manifests to DockerHub + run: | + mkdir -p ./docker.io/flux-system + flux install --registry=docker.io/fluxcd \ + --components-extra=image-reflector-controller,image-automation-controller \ + --export > ./docker.io/flux-system/gotk-components.yaml + + cd ./docker.io && flux push artifact \ + oci://docker.io/fluxcd/flux-manifests:${{ steps.prep.outputs.VERSION }} \ + --path="./flux-system" \ + --source=${{ github.repositoryUrl }} \ + --revision="${{ github.ref_name }}/${{ github.sha }}" + - uses: sigstore/cosign-installer@main + - name: Sign manifests + env: + COSIGN_EXPERIMENTAL: 1 + run: | + cosign sign ghcr.io/fluxcd/flux-manifests:${{ steps.prep.outputs.VERSION }} + cosign sign docker.io/fluxcd/flux-manifests:${{ steps.prep.outputs.VERSION }} + - name: Tag manifests + run: | + flux tag artifact oci://ghcr.io/fluxcd/flux-manifests:${{ steps.prep.outputs.VERSION }} \ + --tag latest + + flux tag artifact oci://docker.io/fluxcd/flux-manifests:${{ steps.prep.outputs.VERSION }} \ + --tag latest diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index f8430a12..fc977084 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -1,6 +1,7 @@ name: scan on: + workflow_dispatch: push: branches: [ main ] pull_request: @@ -9,11 +10,10 @@ on: - cron: '18 10 * * 3' permissions: - contents: read # for actions/checkout to fetch code + contents: read jobs: - fossa: - name: FOSSA + scan-fossa: runs-on: ubuntu-latest if: github.actor != 'dependabot[bot]' steps: @@ -25,11 +25,10 @@ jobs: fossa-api-key: 5ee8bf422db1471e0bcf2bcb289185de github-token: ${{ github.token }} - snyk: - name: Snyk - permisions: - security-events: write + scan-snyk: runs-on: ubuntu-latest + permissions: + security-events: write if: (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) && github.actor != 'dependabot[bot]' steps: - uses: actions/checkout@v3 @@ -50,11 +49,10 @@ jobs: with: sarif_file: snyk.sarif - codeql: - name: CodeQL + scan-codeql: runs-on: ubuntu-latest permissions: - security-events: write # for codeQL to write security events + security-events: write if: github.actor != 'dependabot[bot]' steps: - name: Checkout repository diff --git a/.github/workflows/update.yaml b/.github/workflows/update.yaml index 72c15457..65a1f307 100644 --- a/.github/workflows/update.yaml +++ b/.github/workflows/update.yaml @@ -1,4 +1,4 @@ -name: Update Components +name: update on: workflow_dispatch: @@ -12,10 +12,10 @@ permissions: jobs: update-components: + runs-on: ubuntu-latest permissions: contents: write pull-requests: write - runs-on: ubuntu-latest steps: - name: Check out code uses: actions/checkout@v3 From 03435751463e14a06cad962d507770dc749dc928 Mon Sep 17 00:00:00 2001 From: Philip Laine Date: Thu, 18 Aug 2022 21:50:43 +0200 Subject: [PATCH 268/818] Move bootstrap package from internal to pkg Signed-off-by: Philip Laine --- cmd/flux/bootstrap_bitbucket_server.go | 6 +++--- cmd/flux/bootstrap_git.go | 4 ++-- cmd/flux/bootstrap_github.go | 6 +++--- cmd/flux/bootstrap_gitlab.go | 6 +++--- {internal => pkg}/bootstrap/bootstrap.go | 0 {internal => pkg}/bootstrap/bootstrap_plain_git.go | 2 +- {internal => pkg}/bootstrap/bootstrap_provider.go | 4 ++-- {internal => pkg}/bootstrap/git/commit_options.go | 0 {internal => pkg}/bootstrap/git/git.go | 0 {internal => pkg}/bootstrap/git/gogit/gogit.go | 2 +- {internal => pkg}/bootstrap/git/gogit/gogit_test.go | 2 +- .../bootstrap/git/gogit/testdata/private.key | Bin {internal => pkg}/bootstrap/options.go | 2 +- {internal => pkg}/bootstrap/provider/factory.go | 0 {internal => pkg}/bootstrap/provider/provider.go | 0 15 files changed, 17 insertions(+), 17 deletions(-) rename {internal => pkg}/bootstrap/bootstrap.go (100%) rename {internal => pkg}/bootstrap/bootstrap_plain_git.go (99%) rename {internal => pkg}/bootstrap/bootstrap_provider.go (99%) rename {internal => pkg}/bootstrap/git/commit_options.go (100%) rename {internal => pkg}/bootstrap/git/git.go (100%) rename {internal => pkg}/bootstrap/git/gogit/gogit.go (99%) rename {internal => pkg}/bootstrap/git/gogit/gogit_test.go (96%) rename {internal => pkg}/bootstrap/git/gogit/testdata/private.key (100%) rename {internal => pkg}/bootstrap/options.go (98%) rename {internal => pkg}/bootstrap/provider/factory.go (100%) rename {internal => pkg}/bootstrap/provider/provider.go (100%) diff --git a/cmd/flux/bootstrap_bitbucket_server.go b/cmd/flux/bootstrap_bitbucket_server.go index b620fa61..be8e0045 100644 --- a/cmd/flux/bootstrap_bitbucket_server.go +++ b/cmd/flux/bootstrap_bitbucket_server.go @@ -25,11 +25,11 @@ import ( "github.com/go-git/go-git/v5/plumbing/transport/http" "github.com/spf13/cobra" - "github.com/fluxcd/flux2/internal/bootstrap" - "github.com/fluxcd/flux2/internal/bootstrap/git/gogit" - "github.com/fluxcd/flux2/internal/bootstrap/provider" "github.com/fluxcd/flux2/internal/flags" "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/flux2/pkg/bootstrap" + "github.com/fluxcd/flux2/pkg/bootstrap/git/gogit" + "github.com/fluxcd/flux2/pkg/bootstrap/provider" "github.com/fluxcd/flux2/pkg/manifestgen" "github.com/fluxcd/flux2/pkg/manifestgen/install" "github.com/fluxcd/flux2/pkg/manifestgen/sourcesecret" diff --git a/cmd/flux/bootstrap_git.go b/cmd/flux/bootstrap_git.go index 2f5e2491..e0da5bb4 100644 --- a/cmd/flux/bootstrap_git.go +++ b/cmd/flux/bootstrap_git.go @@ -31,10 +31,10 @@ import ( "github.com/spf13/cobra" corev1 "k8s.io/api/core/v1" - "github.com/fluxcd/flux2/internal/bootstrap" - "github.com/fluxcd/flux2/internal/bootstrap/git/gogit" "github.com/fluxcd/flux2/internal/flags" "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/flux2/pkg/bootstrap" + "github.com/fluxcd/flux2/pkg/bootstrap/git/gogit" "github.com/fluxcd/flux2/pkg/manifestgen" "github.com/fluxcd/flux2/pkg/manifestgen/install" "github.com/fluxcd/flux2/pkg/manifestgen/sourcesecret" diff --git a/cmd/flux/bootstrap_github.go b/cmd/flux/bootstrap_github.go index 14261820..c49bd483 100644 --- a/cmd/flux/bootstrap_github.go +++ b/cmd/flux/bootstrap_github.go @@ -25,11 +25,11 @@ import ( "github.com/go-git/go-git/v5/plumbing/transport/http" "github.com/spf13/cobra" - "github.com/fluxcd/flux2/internal/bootstrap" - "github.com/fluxcd/flux2/internal/bootstrap/git/gogit" - "github.com/fluxcd/flux2/internal/bootstrap/provider" "github.com/fluxcd/flux2/internal/flags" "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/flux2/pkg/bootstrap" + "github.com/fluxcd/flux2/pkg/bootstrap/git/gogit" + "github.com/fluxcd/flux2/pkg/bootstrap/provider" "github.com/fluxcd/flux2/pkg/manifestgen" "github.com/fluxcd/flux2/pkg/manifestgen/install" "github.com/fluxcd/flux2/pkg/manifestgen/sourcesecret" diff --git a/cmd/flux/bootstrap_gitlab.go b/cmd/flux/bootstrap_gitlab.go index 56768042..86f498c6 100644 --- a/cmd/flux/bootstrap_gitlab.go +++ b/cmd/flux/bootstrap_gitlab.go @@ -27,11 +27,11 @@ import ( "github.com/go-git/go-git/v5/plumbing/transport/http" "github.com/spf13/cobra" - "github.com/fluxcd/flux2/internal/bootstrap" - "github.com/fluxcd/flux2/internal/bootstrap/git/gogit" - "github.com/fluxcd/flux2/internal/bootstrap/provider" "github.com/fluxcd/flux2/internal/flags" "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/flux2/pkg/bootstrap" + "github.com/fluxcd/flux2/pkg/bootstrap/git/gogit" + "github.com/fluxcd/flux2/pkg/bootstrap/provider" "github.com/fluxcd/flux2/pkg/manifestgen" "github.com/fluxcd/flux2/pkg/manifestgen/install" "github.com/fluxcd/flux2/pkg/manifestgen/sourcesecret" diff --git a/internal/bootstrap/bootstrap.go b/pkg/bootstrap/bootstrap.go similarity index 100% rename from internal/bootstrap/bootstrap.go rename to pkg/bootstrap/bootstrap.go diff --git a/internal/bootstrap/bootstrap_plain_git.go b/pkg/bootstrap/bootstrap_plain_git.go similarity index 99% rename from internal/bootstrap/bootstrap_plain_git.go rename to pkg/bootstrap/bootstrap_plain_git.go index 685c1f0d..909eb3b2 100644 --- a/internal/bootstrap/bootstrap_plain_git.go +++ b/pkg/bootstrap/bootstrap_plain_git.go @@ -38,8 +38,8 @@ import ( "github.com/fluxcd/pkg/kustomize/filesys" runclient "github.com/fluxcd/pkg/runtime/client" - "github.com/fluxcd/flux2/internal/bootstrap/git" "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/flux2/pkg/bootstrap/git" "github.com/fluxcd/flux2/pkg/log" "github.com/fluxcd/flux2/pkg/manifestgen/install" "github.com/fluxcd/flux2/pkg/manifestgen/kustomization" diff --git a/internal/bootstrap/bootstrap_provider.go b/pkg/bootstrap/bootstrap_provider.go similarity index 99% rename from internal/bootstrap/bootstrap_provider.go rename to pkg/bootstrap/bootstrap_provider.go index 229056af..1d27cce0 100644 --- a/internal/bootstrap/bootstrap_provider.go +++ b/pkg/bootstrap/bootstrap_provider.go @@ -29,8 +29,8 @@ import ( "github.com/fluxcd/go-git-providers/gitprovider" - "github.com/fluxcd/flux2/internal/bootstrap/git" - "github.com/fluxcd/flux2/internal/bootstrap/provider" + "github.com/fluxcd/flux2/pkg/bootstrap/git" + "github.com/fluxcd/flux2/pkg/bootstrap/provider" "github.com/fluxcd/flux2/pkg/manifestgen/sourcesecret" "github.com/fluxcd/flux2/pkg/manifestgen/sync" ) diff --git a/internal/bootstrap/git/commit_options.go b/pkg/bootstrap/git/commit_options.go similarity index 100% rename from internal/bootstrap/git/commit_options.go rename to pkg/bootstrap/git/commit_options.go diff --git a/internal/bootstrap/git/git.go b/pkg/bootstrap/git/git.go similarity index 100% rename from internal/bootstrap/git/git.go rename to pkg/bootstrap/git/git.go diff --git a/internal/bootstrap/git/gogit/gogit.go b/pkg/bootstrap/git/gogit/gogit.go similarity index 99% rename from internal/bootstrap/git/gogit/gogit.go rename to pkg/bootstrap/git/gogit/gogit.go index 5525aeff..559633b5 100644 --- a/internal/bootstrap/git/gogit/gogit.go +++ b/pkg/bootstrap/git/gogit/gogit.go @@ -32,7 +32,7 @@ import ( "github.com/go-git/go-git/v5/plumbing/object" "github.com/go-git/go-git/v5/plumbing/transport" - "github.com/fluxcd/flux2/internal/bootstrap/git" + "github.com/fluxcd/flux2/pkg/bootstrap/git" ) type GoGit struct { diff --git a/internal/bootstrap/git/gogit/gogit_test.go b/pkg/bootstrap/git/gogit/gogit_test.go similarity index 96% rename from internal/bootstrap/git/gogit/gogit_test.go rename to pkg/bootstrap/git/gogit/gogit_test.go index 416898d1..02c5ea58 100644 --- a/internal/bootstrap/git/gogit/gogit_test.go +++ b/pkg/bootstrap/git/gogit/gogit_test.go @@ -6,7 +6,7 @@ package gogit import ( "testing" - "github.com/fluxcd/flux2/internal/bootstrap/git" + "github.com/fluxcd/flux2/pkg/bootstrap/git" ) func TestGetOpenPgpEntity(t *testing.T) { diff --git a/internal/bootstrap/git/gogit/testdata/private.key b/pkg/bootstrap/git/gogit/testdata/private.key similarity index 100% rename from internal/bootstrap/git/gogit/testdata/private.key rename to pkg/bootstrap/git/gogit/testdata/private.key diff --git a/internal/bootstrap/options.go b/pkg/bootstrap/options.go similarity index 98% rename from internal/bootstrap/options.go rename to pkg/bootstrap/options.go index 2d1f69b7..9dada56f 100644 --- a/internal/bootstrap/options.go +++ b/pkg/bootstrap/options.go @@ -21,7 +21,7 @@ import ( runclient "github.com/fluxcd/pkg/runtime/client" - "github.com/fluxcd/flux2/internal/bootstrap/git" + "github.com/fluxcd/flux2/pkg/bootstrap/git" "github.com/fluxcd/flux2/pkg/log" ) diff --git a/internal/bootstrap/provider/factory.go b/pkg/bootstrap/provider/factory.go similarity index 100% rename from internal/bootstrap/provider/factory.go rename to pkg/bootstrap/provider/factory.go diff --git a/internal/bootstrap/provider/provider.go b/pkg/bootstrap/provider/provider.go similarity index 100% rename from internal/bootstrap/provider/provider.go rename to pkg/bootstrap/provider/provider.go From 4643f8383e3ce34c2da3c5930e7dce9bed07326c Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Fri, 21 Oct 2022 17:33:25 +0000 Subject: [PATCH 269/818] Update toolkit components - helm-controller to v0.26.0 https://github.com/fluxcd/helm-controller/blob/v0.26.0/CHANGELOG.md - kustomize-controller to v0.30.0 https://github.com/fluxcd/kustomize-controller/blob/v0.30.0/CHANGELOG.md - source-controller to v0.31.0 https://github.com/fluxcd/source-controller/blob/v0.31.0/CHANGELOG.md - notification-controller to v0.28.0 https://github.com/fluxcd/notification-controller/blob/v0.28.0/CHANGELOG.md - image-reflector-controller to v0.22.1 https://github.com/fluxcd/image-reflector-controller/blob/v0.22.1/CHANGELOG.md - image-automation-controller to v0.26.1 https://github.com/fluxcd/image-automation-controller/blob/v0.26.1/CHANGELOG.md Signed-off-by: Stefan Prodan --- cmd/flux/create_kustomization.go | 2 +- go.mod | 26 ++++----- go.sum | 53 ++++++++++--------- .../bases/helm-controller/kustomization.yaml | 4 +- .../kustomization.yaml | 4 +- .../kustomization.yaml | 4 +- .../kustomize-controller/kustomization.yaml | 4 +- .../kustomization.yaml | 4 +- .../source-controller/kustomization.yaml | 4 +- manifests/crds/kustomization.yaml | 12 ++--- 10 files changed, 59 insertions(+), 58 deletions(-) diff --git a/cmd/flux/create_kustomization.go b/cmd/flux/create_kustomization.go index 26d1e3ea..bc40de0d 100644 --- a/cmd/flux/create_kustomization.go +++ b/cmd/flux/create_kustomization.go @@ -169,7 +169,7 @@ func createKsCmdRun(cmd *cobra.Command, args []string) error { } if kustomizationArgs.kubeConfigSecretRef != "" { - kustomization.Spec.KubeConfig = &kustomizev1.KubeConfig{ + kustomization.Spec.KubeConfig = &meta.KubeConfigReference{ SecretRef: meta.SecretKeyReference{ Name: kustomizationArgs.kubeConfigSecretRef, }, diff --git a/go.mod b/go.mod index 11ba3ce0..9f88e597 100644 --- a/go.mod +++ b/go.mod @@ -8,12 +8,12 @@ require ( github.com/cyphar/filepath-securejoin v0.2.3 github.com/distribution/distribution/v3 v3.0.0-20220907155224-78b9c98c5c31 github.com/fluxcd/go-git-providers v0.8.0 - github.com/fluxcd/helm-controller/api v0.25.0 - github.com/fluxcd/image-automation-controller/api v0.26.0 - github.com/fluxcd/image-reflector-controller/api v0.22.0 - github.com/fluxcd/kustomize-controller/api v0.29.0 - github.com/fluxcd/notification-controller/api v0.27.0 - github.com/fluxcd/pkg/apis/meta v0.16.0 + github.com/fluxcd/helm-controller/api v0.26.0 + github.com/fluxcd/image-automation-controller/api v0.26.1 + github.com/fluxcd/image-reflector-controller/api v0.22.1 + github.com/fluxcd/kustomize-controller/api v0.30.0 + github.com/fluxcd/notification-controller/api v0.28.0 + github.com/fluxcd/pkg/apis/meta v0.17.0 github.com/fluxcd/pkg/kustomize v0.7.0 github.com/fluxcd/pkg/oci v0.14.0 github.com/fluxcd/pkg/runtime v0.18.0 @@ -22,7 +22,7 @@ require ( github.com/fluxcd/pkg/ssh v0.6.0 github.com/fluxcd/pkg/untar v0.2.0 github.com/fluxcd/pkg/version v0.2.0 - github.com/fluxcd/source-controller/api v0.30.0 + github.com/fluxcd/source-controller/api v0.31.0 github.com/go-git/go-git/v5 v5.4.2 github.com/gonvenience/bunt v1.3.4 github.com/gonvenience/ytbx v1.4.4 @@ -41,11 +41,11 @@ require ( github.com/theckman/yacspin v0.13.12 golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d golang.org/x/term v0.0.0-20220722155259-a9ba230a4035 - k8s.io/api v0.25.2 - k8s.io/apiextensions-apiserver v0.25.2 - k8s.io/apimachinery v0.25.2 + k8s.io/api v0.25.3 + k8s.io/apiextensions-apiserver v0.25.3 + k8s.io/apimachinery v0.25.3 k8s.io/cli-runtime v0.25.0 - k8s.io/client-go v0.25.2 + k8s.io/client-go v0.25.3 k8s.io/kubectl v0.25.0 sigs.k8s.io/cli-utils v0.33.0 sigs.k8s.io/controller-runtime v0.13.0 @@ -192,7 +192,7 @@ require ( golang.org/x/oauth2 v0.0.0-20220722155238-128564f6959c // indirect golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 // indirect golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f // indirect - golang.org/x/text v0.3.7 // indirect + golang.org/x/text v0.4.0 // indirect golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect @@ -201,7 +201,7 @@ require ( gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/component-base v0.25.2 // indirect + k8s.io/component-base v0.25.3 // indirect k8s.io/klog/v2 v2.70.1 // indirect k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1 // indirect k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed // indirect diff --git a/go.sum b/go.sum index 82983f5e..f09f9244 100644 --- a/go.sum +++ b/go.sum @@ -269,22 +269,22 @@ github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSw github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0= github.com/fluxcd/go-git-providers v0.8.0 h1:80UMu7yvRoEVfEIg0eGb9bJ0bSceizNJrEVvwLo+0YI= github.com/fluxcd/go-git-providers v0.8.0/go.mod h1:krF+f3UFciy5QmFaYfaORCVxaEj7u2qD7R/WrfKCLWk= -github.com/fluxcd/helm-controller/api v0.25.0 h1:mQA1HdxbystbR0V19gH+Wk5KX71XLvnR60nQhfgM4HE= -github.com/fluxcd/helm-controller/api v0.25.0/go.mod h1:zAonFUQDeqyvV+huvC7ixEmkDCtjfAj7G4YrDM5zG0s= -github.com/fluxcd/image-automation-controller/api v0.26.0 h1:ZPHbUAleOd4a6fPwyHL3qZ7rEkvC4C3hbfrlml1vq1M= -github.com/fluxcd/image-automation-controller/api v0.26.0/go.mod h1:rle5vnYNnDONgS1k9wd85J7Lq4muU91q751Pzy/XkW4= -github.com/fluxcd/image-reflector-controller/api v0.22.0 h1:IS3HbHdNTu0A/E6vdEkvIAo2fe0eMXHpEsDNUssYIIE= -github.com/fluxcd/image-reflector-controller/api v0.22.0/go.mod h1:G5l+1InmlYiZFdt2IdgHYhKmD67no0ok1UKuSB8WYIU= -github.com/fluxcd/kustomize-controller/api v0.29.0 h1:8OGL6dEM0XQXgHCl0pR+5j5K0n7zznObwEtXgCkl9kY= -github.com/fluxcd/kustomize-controller/api v0.29.0/go.mod h1:cBtUR4eqAC5Wa/tdMjLCVd4Ws0p3zHJV+pv8xHMH45g= -github.com/fluxcd/notification-controller/api v0.27.0 h1:/a//z5cg6AjSRB9dbyJDqTq9iibHNNFgGsmNJ35TRrU= -github.com/fluxcd/notification-controller/api v0.27.0/go.mod h1:jSFaOX9XG4icgrrNvYPmZnj8P/dLjUhoJkaX2ro9YAY= +github.com/fluxcd/helm-controller/api v0.26.0 h1:UCod+R1Oct2jg5cXHlVBC57Jy01lMdpl9MA+8UPogvY= +github.com/fluxcd/helm-controller/api v0.26.0/go.mod h1:Ef7OnSHwMub7Z3F+UNe8p/mblOQ2aSQjCWSRfAqG2FA= +github.com/fluxcd/image-automation-controller/api v0.26.1 h1:+9ISIrgvrqPhJcEKrhlvocu29CEwSn6kjAvsG9XlTXY= +github.com/fluxcd/image-automation-controller/api v0.26.1/go.mod h1:stNr/kLPGu3DELAN0da7NBAjDPrA3TWZn818bAxBiW8= +github.com/fluxcd/image-reflector-controller/api v0.22.1 h1:n4G1UamjfG4aV12x5lMEB4tj9DLCQvUo4KAGZMmdzVs= +github.com/fluxcd/image-reflector-controller/api v0.22.1/go.mod h1:cZ8uWRExmULpIeQtoY5FmoPFfvpgMOZbR9qjyIgB2L0= +github.com/fluxcd/kustomize-controller/api v0.30.0 h1:kOl2wGX1yqz080Ej58WHnWUCGEs6PNo+6b74FA6rJL8= +github.com/fluxcd/kustomize-controller/api v0.30.0/go.mod h1:MisuQ92Y8CR0jR9jCWStvVIYiK5PiDBEq3rfyVRr5sg= +github.com/fluxcd/notification-controller/api v0.28.0 h1:7dRUoKgVatGB235iOl0Z2PXOAoHdbpvmCPnNoy+ljnc= +github.com/fluxcd/notification-controller/api v0.28.0/go.mod h1:USY8Mz7K9uoIn0cNBqq2WTix2cbzpFi9kbs4CMBjB+w= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= github.com/fluxcd/pkg/apis/kustomize v0.6.0 h1:Afxv3Uv+xiuettzqm3sP0ceWikDZTfHdHtLv6u2nFM8= github.com/fluxcd/pkg/apis/kustomize v0.6.0/go.mod h1:iY0zSpK6eUiPfNt/yR6g0q/wQP+wH+Ax/L7KBOx5x2M= -github.com/fluxcd/pkg/apis/meta v0.16.0 h1:6Mj9rB0TtvCeTe3IlQDc1i2DH75Oosea9yUqS7XafVg= -github.com/fluxcd/pkg/apis/meta v0.16.0/go.mod h1:GrOVzWXiu22XjLNgLLe2EBYhQPqZetes5SIADb4bmHE= +github.com/fluxcd/pkg/apis/meta v0.17.0 h1:Y2dfo1syHZDb9Mexjr2SWdcj1FnxnRXm015hEnhl6wU= +github.com/fluxcd/pkg/apis/meta v0.17.0/go.mod h1:GrOVzWXiu22XjLNgLLe2EBYhQPqZetes5SIADb4bmHE= github.com/fluxcd/pkg/kustomize v0.7.0 h1:604rlpRZTWaOfzDZ1W93aHaFh9kn8/UMX/wzsjwIUQY= github.com/fluxcd/pkg/kustomize v0.7.0/go.mod h1:zJY3Z0+SX+zs+/A1F6fCT0JvUce265XnrpTtHnujXPo= github.com/fluxcd/pkg/oci v0.14.0 h1:KwjOf2OSB1bZvNEwDfp+FbOrK0fMcSYA01AJEc671mQ= @@ -303,8 +303,8 @@ github.com/fluxcd/pkg/untar v0.2.0 h1:sJXU+FbJcNUb2ffLJNjeR3hwt3X2loVpOMlCUjyFw6 github.com/fluxcd/pkg/untar v0.2.0/go.mod h1:33AyoWaPpjX/xXpczcfhQh2AkB63TFwiR2YwROtv23E= github.com/fluxcd/pkg/version v0.2.0 h1:jG22c59Bsv6vL51N7Bqn8tjHArYOXrjbIkGArlIrv5w= github.com/fluxcd/pkg/version v0.2.0/go.mod h1:umN1VAOV0sB1JDVwb8eXZzuuqIAEku+y+vcCVBBUIf0= -github.com/fluxcd/source-controller/api v0.30.0 h1:rPVPpwXcYG2n0DTRcRagfGDiccvCib5S09K5iMjlpRU= -github.com/fluxcd/source-controller/api v0.30.0/go.mod h1:UkjAqQ6QAXNNesNQDTArTeiTp+UuhOUIA+JyFhGP/+Q= +github.com/fluxcd/source-controller/api v0.31.0 h1:4PZQt2XILTUZ/2JOVGzAIpNDXjx8n10skAhuBHa9tVw= +github.com/fluxcd/source-controller/api v0.31.0/go.mod h1:XOf8hJB7jFcAKiOb8HVZcegkBeNSb4g0nxqnNjeVufg= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= @@ -1030,7 +1030,7 @@ go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA= +go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.4.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= @@ -1296,8 +1296,9 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= +golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1609,18 +1610,18 @@ honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.2.1/go.mod h1:lPVVZ2BS5TfnjLyizF7o7hv7j9/L+8cZY2hLyjP9cGY= -k8s.io/api v0.25.2 h1:v6G8RyFcwf0HR5jQGIAYlvtRNrxMJQG1xJzaSeVnIS8= -k8s.io/api v0.25.2/go.mod h1:qP1Rn4sCVFwx/xIhe+we2cwBLTXNcheRyYXwajonhy0= -k8s.io/apiextensions-apiserver v0.25.2 h1:8uOQX17RE7XL02ngtnh3TgifY7EhekpK+/piwzQNnBo= -k8s.io/apiextensions-apiserver v0.25.2/go.mod h1:iRwwRDlWPfaHhuBfQ0WMa5skdQfrE18QXJaJvIDLvE8= -k8s.io/apimachinery v0.25.2 h1:WbxfAjCx+AeN8Ilp9joWnyJ6xu9OMeS/fsfjK/5zaQs= -k8s.io/apimachinery v0.25.2/go.mod h1:hqqA1X0bsgsxI6dXsJ4HnNTBOmJNxyPp8dw3u2fSHwA= +k8s.io/api v0.25.3 h1:Q1v5UFfYe87vi5H7NU0p4RXC26PPMT8KOpr1TLQbCMQ= +k8s.io/api v0.25.3/go.mod h1:o42gKscFrEVjHdQnyRenACrMtbuJsVdP+WVjqejfzmI= +k8s.io/apiextensions-apiserver v0.25.3 h1:bfI4KS31w2f9WM1KLGwnwuVlW3RSRPuIsfNF/3HzR0k= +k8s.io/apiextensions-apiserver v0.25.3/go.mod h1:ZJqwpCkxIx9itilmZek7JgfUAM0dnTsA48I4krPqRmo= +k8s.io/apimachinery v0.25.3 h1:7o9ium4uyUOM76t6aunP0nZuex7gDf8VGwkR5RcJnQc= +k8s.io/apimachinery v0.25.3/go.mod h1:jaF9C/iPNM1FuLl7Zuy5b9v+n35HGSh6AQ4HYRkCqwo= k8s.io/cli-runtime v0.25.0 h1:XBnTc2Fi+w818jcJGzhiJKQuXl8479sZ4FhtV5hVJ1Q= k8s.io/cli-runtime v0.25.0/go.mod h1:bHOI5ZZInRHhbq12OdUiYZQN8ml8aKZLwQgt9QlLINw= -k8s.io/client-go v0.25.2 h1:SUPp9p5CwM0yXGQrwYurw9LWz+YtMwhWd0GqOsSiefo= -k8s.io/client-go v0.25.2/go.mod h1:i7cNU7N+yGQmJkewcRD2+Vuj4iz7b30kI8OcL3horQ4= -k8s.io/component-base v0.25.2 h1:Nve/ZyHLUBHz1rqwkjXm/Re6IniNa5k7KgzxZpTfSQY= -k8s.io/component-base v0.25.2/go.mod h1:90W21YMr+Yjg7MX+DohmZLzjsBtaxQDDwaX4YxDkl60= +k8s.io/client-go v0.25.3 h1:oB4Dyl8d6UbfDHD8Bv8evKylzs3BXzzufLiO27xuPs0= +k8s.io/client-go v0.25.3/go.mod h1:t39LPczAIMwycjcXkVc+CB+PZV69jQuNx4um5ORDjQA= +k8s.io/component-base v0.25.3 h1:UrsxciGdrCY03ULT1h/S/gXFCOPnLhUVwSyx+hM/zq4= +k8s.io/component-base v0.25.3/go.mod h1:WYoS8L+IlTZgU7rhAl5Ctpw0WdMxDfCC5dkxcEFa/TI= k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.70.1 h1:7aaoSdahviPmR+XkS7FyxlkkXs6tHISSG03RxleQAVQ= k8s.io/klog/v2 v2.70.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= diff --git a/manifests/bases/helm-controller/kustomization.yaml b/manifests/bases/helm-controller/kustomization.yaml index d622104e..cedf908f 100644 --- a/manifests/bases/helm-controller/kustomization.yaml +++ b/manifests/bases/helm-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/helm-controller/releases/download/v0.25.0/helm-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.25.0/helm-controller.deployment.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.26.0/helm-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.26.0/helm-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/image-automation-controller/kustomization.yaml b/manifests/bases/image-automation-controller/kustomization.yaml index 7e974e03..d465b87f 100644 --- a/manifests/bases/image-automation-controller/kustomization.yaml +++ b/manifests/bases/image-automation-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.26.0/image-automation-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.26.0/image-automation-controller.deployment.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.26.1/image-automation-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.26.1/image-automation-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/image-reflector-controller/kustomization.yaml b/manifests/bases/image-reflector-controller/kustomization.yaml index 752e6695..4a013bf4 100644 --- a/manifests/bases/image-reflector-controller/kustomization.yaml +++ b/manifests/bases/image-reflector-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.22.0/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.22.0/image-reflector-controller.deployment.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.22.1/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.22.1/image-reflector-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/kustomize-controller/kustomization.yaml b/manifests/bases/kustomize-controller/kustomization.yaml index 4e71f1b6..f0faece0 100644 --- a/manifests/bases/kustomize-controller/kustomization.yaml +++ b/manifests/bases/kustomize-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.29.0/kustomize-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.29.0/kustomize-controller.deployment.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.30.0/kustomize-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.30.0/kustomize-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/notification-controller/kustomization.yaml b/manifests/bases/notification-controller/kustomization.yaml index 8758f66e..928e93df 100644 --- a/manifests/bases/notification-controller/kustomization.yaml +++ b/manifests/bases/notification-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/notification-controller/releases/download/v0.27.0/notification-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v0.27.0/notification-controller.deployment.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.28.0/notification-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.28.0/notification-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index c95730b5..165d445e 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.30.0/source-controller.crds.yaml -- https://github.com/fluxcd/source-controller/releases/download/v0.30.0/source-controller.deployment.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.31.0/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.31.0/source-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index b5553e99..dfe697cb 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -1,9 +1,9 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.30.0/source-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.29.0/kustomize-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.25.0/helm-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v0.27.0/notification-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.22.0/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.26.0/image-automation-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.31.0/source-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.30.0/kustomize-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.26.0/helm-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.28.0/notification-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.22.1/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.26.1/image-automation-controller.crds.yaml From f5006aa239f219ebff7056ed89b490096350f85e Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Fri, 21 Oct 2022 21:29:17 +0300 Subject: [PATCH 270/818] Update dependencies - Kubernetes packages to v1.25.3 - Fix CVE-2022-32149 - Sync tests go.mod with root Signed-off-by: Stefan Prodan --- Dockerfile | 2 +- go.mod | 65 ++--- go.sum | 654 +++++---------------------------------------- tests/azure/go.mod | 45 ++-- tests/azure/go.sum | 105 ++++---- 5 files changed, 184 insertions(+), 687 deletions(-) diff --git a/Dockerfile b/Dockerfile index da86de9b..be63c0ab 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ FROM alpine:3.16 as builder RUN apk add --no-cache ca-certificates curl ARG ARCH=linux/amd64 -ARG KUBECTL_VER=1.25.0 +ARG KUBECTL_VER=1.25.3 RUN curl -sL https://storage.googleapis.com/kubernetes-release/release/v${KUBECTL_VER}/bin/${ARCH}/kubectl \ -o /usr/local/bin/kubectl && chmod +x /usr/local/bin/kubectl && \ diff --git a/go.mod b/go.mod index 9f88e597..4cb47a01 100644 --- a/go.mod +++ b/go.mod @@ -4,21 +4,21 @@ go 1.18 require ( github.com/Masterminds/semver/v3 v3.1.1 - github.com/ProtonMail/go-crypto v0.0.0-20220824120805-4b6e5c587895 + github.com/ProtonMail/go-crypto v0.0.0-20220930113650-c6815a8c17ad github.com/cyphar/filepath-securejoin v0.2.3 - github.com/distribution/distribution/v3 v3.0.0-20220907155224-78b9c98c5c31 - github.com/fluxcd/go-git-providers v0.8.0 + github.com/distribution/distribution/v3 v3.0.0-20221021092657-c47a966fded8 + github.com/fluxcd/go-git-providers v0.9.0 github.com/fluxcd/helm-controller/api v0.26.0 github.com/fluxcd/image-automation-controller/api v0.26.1 github.com/fluxcd/image-reflector-controller/api v0.22.1 github.com/fluxcd/kustomize-controller/api v0.30.0 github.com/fluxcd/notification-controller/api v0.28.0 github.com/fluxcd/pkg/apis/meta v0.17.0 - github.com/fluxcd/pkg/kustomize v0.7.0 + github.com/fluxcd/pkg/kustomize v0.8.0 github.com/fluxcd/pkg/oci v0.14.0 - github.com/fluxcd/pkg/runtime v0.18.0 + github.com/fluxcd/pkg/runtime v0.22.0 github.com/fluxcd/pkg/sourceignore v0.2.0 - github.com/fluxcd/pkg/ssa v0.19.0 + github.com/fluxcd/pkg/ssa v0.21.0 github.com/fluxcd/pkg/ssh v0.6.0 github.com/fluxcd/pkg/untar v0.2.0 github.com/fluxcd/pkg/version v0.2.0 @@ -26,27 +26,27 @@ require ( github.com/go-git/go-git/v5 v5.4.2 github.com/gonvenience/bunt v1.3.4 github.com/gonvenience/ytbx v1.4.4 - github.com/google/go-cmp v0.5.8 - github.com/google/go-containerregistry v0.11.0 + github.com/google/go-cmp v0.5.9 + github.com/google/go-containerregistry v0.12.0 github.com/hashicorp/go-multierror v1.1.1 - github.com/homeport/dyff v1.5.5 + github.com/homeport/dyff v1.5.6 github.com/lucasb-eyer/go-colorful v1.2.0 github.com/manifoldco/promptui v0.9.0 github.com/mattn/go-shellwords v1.0.12 github.com/olekukonko/tablewriter v0.0.5 - github.com/onsi/gomega v1.20.2 + github.com/onsi/gomega v1.22.1 github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 - github.com/spf13/cobra v1.5.0 + github.com/spf13/cobra v1.6.0 github.com/spf13/pflag v1.0.5 github.com/theckman/yacspin v0.13.12 - golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d - golang.org/x/term v0.0.0-20220722155259-a9ba230a4035 + golang.org/x/crypto v0.1.0 + golang.org/x/term v0.1.0 k8s.io/api v0.25.3 k8s.io/apiextensions-apiserver v0.25.3 k8s.io/apimachinery v0.25.3 - k8s.io/cli-runtime v0.25.0 + k8s.io/cli-runtime v0.25.3 k8s.io/client-go v0.25.3 - k8s.io/kubectl v0.25.0 + k8s.io/kubectl v0.25.3 sigs.k8s.io/cli-utils v0.33.0 sigs.k8s.io/controller-runtime v0.13.0 sigs.k8s.io/kustomize/api v0.12.1 @@ -54,6 +54,9 @@ require ( sigs.k8s.io/yaml v1.3.0 ) +// Fix CVE-2022-32149 +replace golang.org/x/text => golang.org/x/text v0.4.0 + // Fix CVE-2022-28948 replace gopkg.in/yaml.v3 => gopkg.in/yaml.v3 v3.0.1 @@ -72,7 +75,7 @@ require ( github.com/AzureAD/microsoft-authentication-library-for-go v0.5.1 // indirect github.com/BurntSushi/toml v1.0.0 // indirect github.com/MakeNowJust/heredoc v1.0.0 // indirect - github.com/Microsoft/go-winio v0.5.2 // indirect + github.com/Microsoft/go-winio v0.6.0 // indirect github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d // indirect github.com/acomagu/bufpipe v1.0.3 // indirect github.com/aws/aws-sdk-go v1.44.105 // indirect @@ -85,13 +88,13 @@ require ( github.com/chai2010/gettext-go v1.0.2 // indirect github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e // indirect github.com/cloudflare/circl v1.1.0 // indirect - github.com/containerd/stargz-snapshotter/estargz v0.12.0 // indirect + github.com/containerd/stargz-snapshotter/estargz v0.12.1 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect - github.com/docker/cli v20.10.17+incompatible // indirect + github.com/docker/cli v20.10.20+incompatible // indirect github.com/docker/distribution v2.8.1+incompatible // indirect - github.com/docker/docker v20.10.17+incompatible // indirect - github.com/docker/docker-credential-helpers v0.6.4 // indirect + github.com/docker/docker v20.10.20+incompatible // indirect + github.com/docker/docker-credential-helpers v0.7.0 // indirect github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c // indirect github.com/docker/go-metrics v0.0.1 // indirect github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1 // indirect @@ -126,7 +129,7 @@ require ( github.com/gonvenience/wrap v1.1.2 // indirect github.com/google/btree v1.0.1 // indirect github.com/google/gnostic v0.6.9 // indirect - github.com/google/go-github/v45 v45.2.0 // indirect + github.com/google/go-github/v47 v47.0.0 // indirect github.com/google/go-querystring v1.1.0 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect @@ -139,13 +142,13 @@ require ( github.com/hashicorp/go-retryablehttp v0.7.1 // indirect github.com/hashicorp/golang-lru v0.5.4 // indirect github.com/imdario/mergo v0.3.12 // indirect - github.com/inconshreveable/mousetrap v1.0.0 // indirect + github.com/inconshreveable/mousetrap v1.0.1 // indirect github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351 // indirect - github.com/klauspost/compress v1.15.8 // indirect + github.com/klauspost/compress v1.15.11 // indirect github.com/kylelemons/godebug v1.1.0 // indirect github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect github.com/mailru/easyjson v0.7.7 // indirect @@ -165,7 +168,7 @@ require ( github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect - github.com/opencontainers/image-spec v1.0.3-0.20220114050600-8b9d41f48198 // indirect + github.com/opencontainers/image-spec v1.1.0-rc2 // indirect github.com/peterbourgon/diskv v2.0.1+incompatible // indirect github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 // indirect github.com/pkg/errors v0.9.1 // indirect @@ -181,19 +184,21 @@ require ( github.com/texttheater/golang-levenshtein v1.0.1 // indirect github.com/vbatts/tar-split v0.11.2 // indirect github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74 // indirect - github.com/xanzy/go-gitlab v0.69.0 // indirect + github.com/xanzy/go-gitlab v0.73.1 // indirect github.com/xanzy/ssh-agent v0.3.0 // indirect github.com/xlab/treeprint v1.1.0 // indirect github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43 // indirect github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50 // indirect github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f // indirect go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 // indirect - golang.org/x/net v0.0.0-20220722155237-a158d28d115b // indirect - golang.org/x/oauth2 v0.0.0-20220722155238-128564f6959c // indirect - golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 // indirect - golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f // indirect + golang.org/x/mod v0.6.0 // indirect + golang.org/x/net v0.1.0 // indirect + golang.org/x/oauth2 v0.1.0 // indirect + golang.org/x/sync v0.1.0 // indirect + golang.org/x/sys v0.1.0 // indirect golang.org/x/text v0.4.0 // indirect golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9 // indirect + golang.org/x/tools v0.1.12 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/protobuf v1.28.1 // indirect @@ -202,7 +207,7 @@ require ( gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect k8s.io/component-base v0.25.3 // indirect - k8s.io/klog/v2 v2.70.1 // indirect + k8s.io/klog/v2 v2.80.1 // indirect k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1 // indirect k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed // indirect sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 // indirect diff --git a/go.sum b/go.sum index f09f9244..1890f9ca 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,3 @@ -4d63.com/gochecknoglobals v0.1.0/go.mod h1:wfdC5ZjKSPr7CybKEcgJhUOgeAQW1+7WcyK8OvUilfo= -bitbucket.org/creachadair/shell v0.0.6/go.mod h1:8Qqi/cYk7vPnsOePHroKXDJYmb5x7ENhtiFtfZq8K+M= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= @@ -13,7 +11,6 @@ cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6 cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.60.0/go.mod h1:yw2G51M9IfRboUH61Us8GqCeF1PzPblB823Mn2q2eAU= cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= @@ -38,23 +35,17 @@ cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4g cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= -cloud.google.com/go/firestore v1.6.0/go.mod h1:afJwI0vaXwAG54kI7A//lP/lSPDkQORQuMkv56TxEPU= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= -cloud.google.com/go/pubsub v1.5.0/go.mod h1:ZEwJccE3z93Z2HWvstpri00jOg7oO4UZDtKhwDwqF0w= -cloud.google.com/go/spanner v1.7.0/go.mod h1:sd3K2gZ9Fd0vMPLXzeCrF6fq4i63Q7aTLW/lBIfBkIk= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -contrib.go.opencensus.io/exporter/stackdriver v0.13.4/go.mod h1:aXENhDJ1Y4lIg4EUaVTwzvYETVNZk10Pu26tevFKLUc= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/Antonboom/errname v0.1.5/go.mod h1:DugbBstvPFQbv/5uLcRRzfrNqKE9tVdVCqWCLp6Cifo= -github.com/Antonboom/nilnil v0.1.0/go.mod h1:PhHLvRPSghY5Y7mX4TW+BHZQYo1A8flE5H20D3IPZBo= +github.com/AdaLogics/go-fuzz-headers v0.0.0-20220903154154-e8044f6e4c72 h1:1sCHCT0xRr7UArrI1WJxsl9S8QeYdf0fmuGIl2xb7YI= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.3 h1:8LoU8N2lIUzkmstvwXvVfniMZlFbesfT2AmA1aqvRr8= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.3/go.mod h1:uGG2W01BaETf0Ozp+QxxKJdMBNRWPdstHG0Fmdwn1/U= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0 h1:QkAcEIAKbNL4KoFr4SathZPhDhF4mVwpBMFlYjyAqy8= @@ -82,32 +73,23 @@ github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBp github.com/AzureAD/microsoft-authentication-library-for-go v0.5.1 h1:BWe8a+f/t+7KY7zH2mqygeUD0t8hNFXe08p1Pb3/jKE= github.com/AzureAD/microsoft-authentication-library-for-go v0.5.1/go.mod h1:Vt9sXTKwMyGcOxSmLDMnGPgqsUg7m8pe215qMLrDXw4= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/toml v0.4.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/toml v1.0.0 h1:dtDWrepsVPfW9H/4y7dDgFc2MBUSeJhlaDtK13CxFlU= github.com/BurntSushi/toml v1.0.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= github.com/MakeNowJust/heredoc v1.0.0 h1:cXCdzVdstXyiTqTvfqk9SDHpKNjxuom+DOlyEeQ4pzQ= github.com/MakeNowJust/heredoc v1.0.0/go.mod h1:mG5amYoWBHf8vpLOuehzbGGw0EHxpZZ6lCpQ4fNJ8LE= -github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= -github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= -github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030IGemrRc= github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= -github.com/Masterminds/sprig v2.15.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= -github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= -github.com/Microsoft/go-winio v0.5.2 h1:a9IhgEQBCUEk6QCdml9CiJGhAws+YwffDHEMp1VMrpA= -github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= +github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= +github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/OpenPeeDeeP/depguard v1.0.1/go.mod h1:xsIw86fROiiwelg+jB2uM9PiKihMMmUx/1V+TNhjQvM= github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= -github.com/ProtonMail/go-crypto v0.0.0-20220824120805-4b6e5c587895 h1:NsReiLpErIPzRrnogAXYwSoU7txA977LjDGrbkewJbg= -github.com/ProtonMail/go-crypto v0.0.0-20220824120805-4b6e5c587895/go.mod h1:UBYPn8k0D56RtnR8RFQMjmh4KrZzWJ5o7Z9SYjossQ8= +github.com/ProtonMail/go-crypto v0.0.0-20220930113650-c6815a8c17ad h1:QeeqI2zxxgZVe11UrYFXXx6gVxPVF40ygekjBzEg4XY= +github.com/ProtonMail/go-crypto v0.0.0-20220930113650-c6815a8c17ad/go.mod h1:UBYPn8k0D56RtnR8RFQMjmh4KrZzWJ5o7Z9SYjossQ8= github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d h1:UrqY+r/OJnIp5u0s1SbQ8dVfLCZJsnvazdBP5hS4iRs= github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ= -github.com/StackExchange/wmi v1.2.1/go.mod h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8= github.com/acomagu/bufpipe v1.0.3 h1:fxAGrHZTgQ9w5QqVItgzwj235/uYZYgbXitB+dLupOk= github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -115,26 +97,11 @@ github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuy github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/alexkohler/prealloc v1.0.0/go.mod h1:VetnK3dIgFBBKmg0YnD9F9x6Icjd+9cvfHR56wJVlKE= -github.com/andybalholm/brotli v1.0.2/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= -github.com/andybalholm/brotli v1.0.3/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo4JG6LR5AXSUEsOjtdm0kw0FtQtMJA= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= -github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/aokoli/goutils v1.0.1/go.mod h1:SijmP0QR8LtwsmDs8Yii5Z/S4trXFGFC2oO5g9DP+DQ= -github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= -github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= -github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= -github.com/ashanbrown/forbidigo v1.2.0/go.mod h1:vVW7PEdqEFqapJe95xHkTfB1+XvZXBFg8t0sG2FIxmI= -github.com/ashanbrown/makezero v0.0.0-20210520155254-b6261585ddde/go.mod h1:oG9Dnez7/ESBqc4EdrdNlryeo7d0KcW1ftXHm7nU/UU= -github.com/aws/aws-sdk-go v1.23.20/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.25.37/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.36.30/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= github.com/aws/aws-sdk-go v1.44.105 h1:UUwoD1PRKIj3ltrDUYTDQj5fOTK3XsnqolLpRTMmSEM= github.com/aws/aws-sdk-go v1.44.105/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= @@ -142,13 +109,7 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bitly/go-simplejson v0.5.0 h1:6IH+V8/tVMab511d5bn4M7EwGXZf9Hj6i2xSwkNEM+Y= -github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= -github.com/bkielbasa/cyclop v1.2.0/go.mod h1:qOI0yy6A7dYC4Zgsa72Ppm9kONl0RoIlPbzot9mhmeI= -github.com/blizzy78/varnamelen v0.3.0/go.mod h1:hbwRdBvoBqxk34XyQ6HA0UH3G0/1TKuv5AC4eaBT0Ec= -github.com/bombsimon/wsl/v3 v3.3.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc= -github.com/breml/bidichk v0.1.1/go.mod h1:zbfeitpevDUGI7V91Uzzuwrn4Vls8MoBMrwtt78jmso= github.com/bshuster-repo/logrus-logstash-hook v1.0.0 h1:e+C0SB5R1pu//O4MQ3f9cFuPGoOVeF2fE4Og9otCc70= github.com/bshuster-repo/logrus-logstash-hook v1.0.0/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk= github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= @@ -158,7 +119,6 @@ github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b h1:otBG+dV+YK+Soembj github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b/go.mod h1:obH5gd0BsqsP2LwDJ9aOkm/6J86V6lyAXCoQWGw3K50= github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0 h1:nvj0OLI3YqYXer/kZD8Ri1aaunCxIEsOst1BVJswV0o= github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE= -github.com/butuzov/ireturn v0.1.1/go.mod h1:Wh6Zl3IMtTpaIKbmwzqi6olnM9ptYQxxVacMsOEFPoc= github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= @@ -167,8 +127,6 @@ github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cb github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chai2010/gettext-go v1.0.2 h1:1Lwwip6Q2QGsAdl/ZKPCwTe9fe0CjlUbqj5bFNSjIRk= github.com/chai2010/gettext-go v1.0.2/go.mod h1:y+wnP2cHYaVj19NZhYKAwEMH2CI1gNHeQQ+5AjwawxA= -github.com/charithe/durationcheck v0.0.9/go.mod h1:SSbRIBVfMjCi/kEB6K65XEA83D6prSM8ap1UCpNKtgg= -github.com/chavacava/garif v0.0.0-20210405164556-e8a0a408d6af/go.mod h1:Qjyv4H3//PWVzTeCezG2b9IRn6myJxJSr4TD/xo6ojU= github.com/chzyer/logex v1.1.10 h1:Swpa1K6QvQznwJRcfTfQJmTE72DqScAa40E+fbHEXEE= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e h1:fY5BOSpyZCqRo5OhCuC+XN+r/bBCmeuuJtjz+bCNIf8= @@ -182,48 +140,30 @@ github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGX github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= -github.com/containerd/stargz-snapshotter/estargz v0.12.0 h1:idtwRTLjk2erqiYhPWy2L844By8NRFYEwYHcXhoIWPM= -github.com/containerd/stargz-snapshotter/estargz v0.12.0/go.mod h1:AIQ59TewBFJ4GOPEQXujcrJ/EKxh5xXZegW1rkR1P/M= -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= -github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20190620071333-e64a0ec8b42a/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= +github.com/containerd/stargz-snapshotter/estargz v0.12.1 h1:+7nYmHJb0tEkcRaAW+MHqoKaJYZmkikupxCqVtmPuY0= +github.com/containerd/stargz-snapshotter/estargz v0.12.1/go.mod h1:12VUuCq3qPq4y8yUW+l5w3+oXV3cx2Po3KSe/SmPGqw= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.11 h1:07n33Z8lZxZ2qwegKbObQohDhXDQxiMMz1NOUGYlesw= github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cyphar/filepath-securejoin v0.2.3 h1:YX6ebbZCZP7VkM3scTTokDgBL2TY741X51MTk3ycuNI= github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= -github.com/daixiang0/gci v0.2.9/go.mod h1:+4dZ7TISfSmqfAGv59ePaHfNzgGtIkHAhhdKggP1JAc= -github.com/danieljoos/wincred v1.1.0/go.mod h1:XYlo+eRTsVA9aHGp7NGjFkPla4m+DCL7hqDjlFjiygg= -github.com/davecgh/go-spew v0.0.0-20161028175848-04cdfd42973b/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/denis-tingajkin/go-header v0.4.2/go.mod h1:eLRHAVXzE5atsKAnNRDB90WHCFFnBUn4RN0nRcs1LJA= -github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/distribution/distribution/v3 v3.0.0-20220907155224-78b9c98c5c31 h1:AqcwAyaSEkILnr/bLybFnM2i/+EW67JJIRs/4dWmzxo= -github.com/distribution/distribution/v3 v3.0.0-20220907155224-78b9c98c5c31/go.mod h1:XrR+08YQxO57vT8gtNmhLfHy/YIutMmmEeKMhU7zXqY= +github.com/distribution/distribution/v3 v3.0.0-20221021092657-c47a966fded8 h1:zuxvqNfQKyGNH3a1yFh1ofD4Y7ycgdwQhHX6QRH+Cwo= +github.com/distribution/distribution/v3 v3.0.0-20221021092657-c47a966fded8/go.mod h1:6rIc5NMSjXjjnwzWWy3HAm9gDBu+X7aCzL8VrHIKgxM= github.com/dnaeon/go-vcr v1.1.0 h1:ReYa/UBrRyQdant9B4fNHGoCNKw6qh6P0fsdGmZpR7c= -github.com/docker/cli v20.10.17+incompatible h1:eO2KS7ZFeov5UJeaDmIs1NFEDRf32PaqRpvoEkKBy5M= -github.com/docker/cli v20.10.17+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/cli v20.10.20+incompatible h1:lWQbHSHUFs7KraSN2jOJK7zbMS2jNCHI4mt4xUFUVQ4= +github.com/docker/cli v20.10.20+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68= github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v20.10.17+incompatible h1:JYCuMrWaVNophQTOrMMoSwudOVEfcegoZZrleKc1xwE= -github.com/docker/docker v20.10.17+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker-credential-helpers v0.6.4 h1:axCks+yV+2MR3/kZhAmy07yC56WZ2Pwu/fKWtKuZB0o= -github.com/docker/docker-credential-helpers v0.6.4/go.mod h1:ofX3UI0Gz1TteYBjtgs07O36Pyasyp66D2uKT7H8W1c= +github.com/docker/docker v20.10.20+incompatible h1:kH9tx6XO+359d+iAkumyKDc5Q1kOwPuAUaeri48nD6E= +github.com/docker/docker v20.10.20+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker-credential-helpers v0.7.0 h1:xtCHsjxogADNZcdv1pKUHXryefjlVRqWqIhk/uXJp0A= +github.com/docker/docker-credential-helpers v0.7.0/go.mod h1:rETQfLdHNT3foU5kuNkFR1R1V12OJRRO5lzt2D1b5X0= github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c h1:+pKlWGMw7gf6bQ+oDZB4KHQFypsfjYlq/C4rfL7D3g8= github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= github.com/docker/go-metrics v0.0.1 h1:AgB/0SvBxihN0X8OR4SjsblXkbMvalQ8cjmtKQ2rQV8= @@ -233,8 +173,6 @@ github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNE github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/drone/envsubst/v2 v2.0.0-20210730161058-179042472c46 h1:7QPwrLT79GlD5sizHf27aoY2RTvw62mO6x7mxkScNk0= github.com/drone/envsubst/v2 v2.0.0-20210730161058-179042472c46/go.mod h1:esf2rsHFNlZlxsqsZDojNBcnNs5REqIvRrWRHqX0vEU= -github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153 h1:yUdfgN0XgIJw7foRItutHYUIhlcKzcSf5vDpdhQAKTc= github.com/emicklei/go-restful/v3 v3.8.0 h1:eCZ8ulSerjdAiaNpF7GxXIE7ZCMo1moN1qX+S609eVw= github.com/emicklei/go-restful/v3 v3.8.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= @@ -247,10 +185,7 @@ github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5y github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= -github.com/envoyproxy/protoc-gen-validate v0.0.14/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/esimonov/ifshort v1.0.3/go.mod h1:yZqNJUrNn20K8Q9n2CrjTKYyVEmX209Hgu+M1LBpeZE= -github.com/ettle/strcase v0.1.1/go.mod h1:hzDLsPC7/lwKyBOywSHEP89nt2pDgdy+No1NBA9o9VY= github.com/evanphx/json-patch v0.5.2/go.mod h1:ZWS5hhDbVDyob71nXKNL0+PWn6ToqBHMikGIFbs31qQ= github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH5pOlLGNtQ5lPWQu84= github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= @@ -258,17 +193,13 @@ github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJ github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d h1:105gxyaGwCFad8crR9dcMQWvV9Hvulu6hwUh4tWPJnM= github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d/go.mod h1:ZZMPRZwes7CROmyNKgQzC3XPs6L/G2EJLHddWejkmf4= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= -github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= -github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= github.com/felixge/httpsnoop v1.0.1 h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8SPQ= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0= -github.com/fluxcd/go-git-providers v0.8.0 h1:80UMu7yvRoEVfEIg0eGb9bJ0bSceizNJrEVvwLo+0YI= -github.com/fluxcd/go-git-providers v0.8.0/go.mod h1:krF+f3UFciy5QmFaYfaORCVxaEj7u2qD7R/WrfKCLWk= +github.com/fluxcd/go-git-providers v0.9.0 h1:iiiKe3dzRCgVkjEi8rfpvaWTZwuGRfb3RJFhjSNz+Uc= +github.com/fluxcd/go-git-providers v0.9.0/go.mod h1:GcaDVP9RlamLKJp25Nwi7X5t0MyZV3FY+qy1GiRdbtk= github.com/fluxcd/helm-controller/api v0.26.0 h1:UCod+R1Oct2jg5cXHlVBC57Jy01lMdpl9MA+8UPogvY= github.com/fluxcd/helm-controller/api v0.26.0/go.mod h1:Ef7OnSHwMub7Z3F+UNe8p/mblOQ2aSQjCWSRfAqG2FA= github.com/fluxcd/image-automation-controller/api v0.26.1 h1:+9ISIrgvrqPhJcEKrhlvocu29CEwSn6kjAvsG9XlTXY= @@ -285,16 +216,16 @@ github.com/fluxcd/pkg/apis/kustomize v0.6.0 h1:Afxv3Uv+xiuettzqm3sP0ceWikDZTfHdH github.com/fluxcd/pkg/apis/kustomize v0.6.0/go.mod h1:iY0zSpK6eUiPfNt/yR6g0q/wQP+wH+Ax/L7KBOx5x2M= github.com/fluxcd/pkg/apis/meta v0.17.0 h1:Y2dfo1syHZDb9Mexjr2SWdcj1FnxnRXm015hEnhl6wU= github.com/fluxcd/pkg/apis/meta v0.17.0/go.mod h1:GrOVzWXiu22XjLNgLLe2EBYhQPqZetes5SIADb4bmHE= -github.com/fluxcd/pkg/kustomize v0.7.0 h1:604rlpRZTWaOfzDZ1W93aHaFh9kn8/UMX/wzsjwIUQY= -github.com/fluxcd/pkg/kustomize v0.7.0/go.mod h1:zJY3Z0+SX+zs+/A1F6fCT0JvUce265XnrpTtHnujXPo= +github.com/fluxcd/pkg/kustomize v0.8.0 h1:8AdEvp6y38ISZzoi0H82Si5zkmLXClbeX10W7HevB00= +github.com/fluxcd/pkg/kustomize v0.8.0/go.mod h1:zGtCZF6V3hMWcf46SqrQc10fS9yUlKzi2UcFUeabDAE= github.com/fluxcd/pkg/oci v0.14.0 h1:KwjOf2OSB1bZvNEwDfp+FbOrK0fMcSYA01AJEc671mQ= github.com/fluxcd/pkg/oci v0.14.0/go.mod h1:TH7ru7YlX5L3xihbdnIgYVWXsOqrYcJIci/Mq4MgWbo= -github.com/fluxcd/pkg/runtime v0.18.0 h1:3naATapV1y65ZWlsXEfJt66zSQBkJwJ9o/e6gqAF//E= -github.com/fluxcd/pkg/runtime v0.18.0/go.mod h1:JKTvOFOCz5Un9KxGcBL7Xjt0fcRa10ZItGB0XFv44AY= +github.com/fluxcd/pkg/runtime v0.22.0 h1:4YV/An41b+OGdSWDogwFfHr22CEE/in+lBLEK0fr1yc= +github.com/fluxcd/pkg/runtime v0.22.0/go.mod h1:Cm6jIhltzXIM3CRRY6SFASDn+z2m/1yPqOWwD73c3io= github.com/fluxcd/pkg/sourceignore v0.2.0 h1:ooNbIkfxqNB+KKiY4AU+/DxwzjIKIOWBRK1As5QFlug= github.com/fluxcd/pkg/sourceignore v0.2.0/go.mod h1:m9/q+YLMNSWjXns1n/5q3ucwzSSddti+D6ExbNaCo6s= -github.com/fluxcd/pkg/ssa v0.19.0 h1:azciQ/M1L7Nf4zkHJ+A+a58uShcTW3ZMbyY8KiYcqrI= -github.com/fluxcd/pkg/ssa v0.19.0/go.mod h1:OjHX/qA4xqLi237l0yccsT6FnLmHxDKukpMXnhdXdyk= +github.com/fluxcd/pkg/ssa v0.21.0 h1:aeoTohPNf5x7jQjHidyLJAOHw3EyHOQoQN3mN2i+4cc= +github.com/fluxcd/pkg/ssa v0.21.0/go.mod h1:jumyhUbEMDnduN7anSlKfxl2fEoyeyv+Ta5hWCbxI5Q= github.com/fluxcd/pkg/ssh v0.6.0 h1:yRJ866obXCo0JseJCqlGKtF8cumioPcwIC6kMwf8Spg= github.com/fluxcd/pkg/ssh v0.6.0/go.mod h1:Puf+hWNzFsqdHtjDpsI3PTTvitZu41ObuPFblOdzrrI= github.com/fluxcd/pkg/tar v0.2.0 h1:HEUHgONQYsJGeZZ4x6h5nQU9Aox1I4T3bOp1faWTqf8= @@ -306,17 +237,11 @@ github.com/fluxcd/pkg/version v0.2.0/go.mod h1:umN1VAOV0sB1JDVwb8eXZzuuqIAEku+y+ github.com/fluxcd/source-controller/api v0.31.0 h1:4PZQt2XILTUZ/2JOVGzAIpNDXjx8n10skAhuBHa9tVw= github.com/fluxcd/source-controller/api v0.31.0/go.mod h1:XOf8hJB7jFcAKiOb8HVZcegkBeNSb4g0nxqnNjeVufg= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= -github.com/fullstorydev/grpcurl v1.6.0/go.mod h1:ZQ+ayqbKMJNhzLmbpCiurTVlaK2M/3nqZCxaQ2Ze/sM= -github.com/fzipp/gocyclo v0.3.1/go.mod h1:DJHO6AUmbdqj2ET4Z9iArSuwWgYDRryYt2wASxc7x3E= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gliderlabs/ssh v0.2.2 h1:6zsha5zo/TWhRhwqCD3+EarCAgZ2yN28ipRnGPnwkI0= github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= -github.com/go-critic/go-critic v0.6.1/go.mod h1:SdNCfU0yF3UBjtaZGw6586/WocupMOJuiqgom5DsQxM= github.com/go-errors/errors v1.0.1 h1:LUHzmkK3GUKUrL/1gfBUxAHzcev3apQlezX/+O7ma6w= github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4= @@ -344,8 +269,6 @@ github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbV github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/zapr v1.2.3 h1:a9vnzlIBPQBBkeaR9IuMUfmVOrQlkoC4YfPoFkX3T7A= -github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= -github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= @@ -354,30 +277,8 @@ github.com/go-openapi/jsonreference v0.20.0/go.mod h1:Ag74Ico3lPc+zR+qjn4XBUmXym github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.21.1 h1:wm0rhTb5z7qpJRHBdPOMuY4QjVUMbF6/kwoYeRAOrKU= github.com/go-openapi/swag v0.21.1/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= -github.com/go-redis/redis v6.15.8+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= -github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= -github.com/go-toolsmith/astcast v1.0.0/go.mod h1:mt2OdQTeAQcY4DQgPSArJjHCcOwlX+Wl/kwN+LbLGQ4= -github.com/go-toolsmith/astcopy v1.0.0/go.mod h1:vrgyG+5Bxrnz4MZWPF+pI4R8h3qKRjjyvV/DSez4WVQ= -github.com/go-toolsmith/astequal v1.0.0/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= -github.com/go-toolsmith/astequal v1.0.1/go.mod h1:4oGA3EZXTVItV/ipGiOx7NWkY5veFfcsOJVS2YxltLw= -github.com/go-toolsmith/astfmt v1.0.0/go.mod h1:cnWmsOAuq4jJY6Ct5YWlVLmcmLMn1JUPuQIHCY7CJDw= -github.com/go-toolsmith/astinfo v0.0.0-20180906194353-9809ff7efb21/go.mod h1:dDStQCHtmZpYOmjRP/8gHHnCCch3Zz3oEgCdZVdtweU= -github.com/go-toolsmith/astp v1.0.0/go.mod h1:RSyrtpVlfTFGDYRbrjyWP1pYu//tSFcvdYrA8meBmLI= -github.com/go-toolsmith/pkgload v1.0.0/go.mod h1:5eFArkbO80v7Z0kdngIxsRXRMTaX4Ilcwuh3clNrQJc= -github.com/go-toolsmith/strparse v1.0.0/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8= -github.com/go-toolsmith/typep v1.0.0/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= -github.com/go-toolsmith/typep v1.0.2/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= -github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM= -github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= -github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= -github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang-jwt/jwt v3.2.1+incompatible h1:73Z+4BJcrTC+KczS6WvTPvRGOp1WmfEP4Q1lOd9Z/+c= @@ -387,7 +288,6 @@ github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzw github.com/golang-jwt/jwt/v4 v4.4.1 h1:pC5DB52sCeK48Wlb9oPcdhnjkz1TKt1D/P7WKJ0kUcQ= github.com/golang-jwt/jwt/v4 v4.4.1/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -402,7 +302,6 @@ github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= -github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -422,16 +321,6 @@ github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4= -github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk= -github.com/golangci/go-misc v0.0.0-20180628070357-927a3d87b613/go.mod h1:SyvUF2NxV+sN8upjjeVYr5W7tyxaT1JVtvhKhOn2ii8= -github.com/golangci/gofmt v0.0.0-20190930125516-244bba706f1a/go.mod h1:9qCChq59u/eW8im404Q2WWTrnBUQKjpNYKMbU4M7EFU= -github.com/golangci/golangci-lint v1.43.0/go.mod h1:VIFlUqidx5ggxDfQagdvd9E67UjMXtTHBkBQ7sHoC5Q= -github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg= -github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod h1:tvlJhZqDe4LMs4ZHD0oMUlt9G2LWuDGoisJTBzLMV9o= -github.com/golangci/misspell v0.3.5/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA= -github.com/golangci/revgrep v0.0.0-20210930125155-c22e5001d4f2/go.mod h1:LK+zW4MpyytAWQRz0M4xnzEk50lSvqDQKfx304apFkY= -github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ= github.com/gomodule/redigo v1.8.2 h1:H5XSIre1MB5NbPYFp+i1NBbb5qN1W8Y8YAQoAYbkm8k= github.com/gomodule/redigo v1.8.2/go.mod h1:P9dn9mFrCBvWhGE1wpxx6fgq7BAeLBk+UUUzlpkBYO0= github.com/gonvenience/bunt v1.3.4 h1:Row599Ohja2BPooaqd1tHYdTAKu6SWq7W/UeakTXddM= @@ -450,8 +339,6 @@ github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Z github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4= github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= -github.com/google/certificate-transparency-go v1.0.21/go.mod h1:QeJfpSbVSfYc7RgB3gJFj9cbuQMMchQxrWXz8Ruopmg= -github.com/google/certificate-transparency-go v1.1.1/go.mod h1:FDKqPvSXawb2ecErVRrD+nfy23RCzyl7eqVCEmlT1Zs= github.com/google/gnostic v0.6.9 h1:ZK/5VhkoX835RikCHpSUJV9a+S3e1zLh59YnyWeBW+0= github.com/google/gnostic v0.6.9/go.mod h1:Nm8234We1lq6iB9OmlgNv3nH91XLLVZHCDayfA3xq+E= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -466,12 +353,12 @@ github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= -github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-containerregistry v0.11.0 h1:Xt8x1adcREjFcmDoDK8OdOsjxu90PHkGuwNP8GiHMLM= -github.com/google/go-containerregistry v0.11.0/go.mod h1:BBaYtsHPHA42uEgAvd/NejvAfPSlz281sJWqupjSxfk= -github.com/google/go-github/v45 v45.2.0 h1:5oRLszbrkvxDDqBCNj2hjDZMKmvexaZ1xw/FCD+K3FI= -github.com/google/go-github/v45 v45.2.0/go.mod h1:FObaZJEDSTa/WGCzZ2Z3eoCDXWJKMenWWTrd8jrta28= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-containerregistry v0.12.0 h1:nidOEtFYlgPCRqxCKj/4c/js940HVWplCWc5ftdfdUA= +github.com/google/go-containerregistry v0.12.0/go.mod h1:sdIK+oHQO7B93xI8UweYdl887YhuIwg9vz8BSLH3+8k= +github.com/google/go-github/v47 v47.0.0 h1:eQap5bIRZibukP0VhngWgpuM0zhY4xntqOzn6DhdkE4= +github.com/google/go-github/v47 v47.0.0/go.mod h1:DRjdvizXE876j0YOZwInB1ESpOcU/xFBClNiQLSdorE= github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= @@ -487,7 +374,6 @@ github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200507031123-427632fa3b1c/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= @@ -499,9 +385,6 @@ github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLe github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= -github.com/google/trillian v1.3.11/go.mod h1:0tPraVHrSDkA3BO6vKX67zgLXs6SsOAbHEivX+9mPgw= -github.com/google/uuid v0.0.0-20161128191214-064e2069ce9c/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= @@ -510,110 +393,47 @@ github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+ github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= -github.com/gookit/color v1.4.2/go.mod h1:fqRyamkC1W8uxl+lxCQxOT09l/vYfZ+QeiX3rKQHCoQ= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gordonklaus/ineffassign v0.0.0-20200309095847-7953dde2c7bf/go.mod h1:cuNKsD1zp2v6XfE/orVX2QE1LC+i254ceGcVeDT3pTU= -github.com/gordonklaus/ineffassign v0.0.0-20210225214923-2e10b2664254/go.mod h1:M9mZEtGIsR1oDaZagNPNG9iq9n2HrhZ17dsXk73V3Lw= -github.com/gorhill/cronexpr v0.0.0-20180427100037-88b0669f7d75/go.mod h1:g2644b03hfBX9Ov0ZBDgXXens4rxSxmqFBbhvKv2yVA= github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= -github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= -github.com/gostaticanalysis/analysisutil v0.0.3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= -github.com/gostaticanalysis/analysisutil v0.1.0/go.mod h1:dMhHRU9KTiDcuLGdy87/2gTR8WruwYZrKdRq9m1O6uw= -github.com/gostaticanalysis/analysisutil v0.4.1/go.mod h1:18U/DLpRgIUd459wGxVHE0fRgmo1UgHDcbw7F5idXu0= -github.com/gostaticanalysis/analysisutil v0.7.1/go.mod h1:v21E3hY37WKMGSnbsw2S/ojApNWb6C1//mXO48CXbVc= -github.com/gostaticanalysis/comment v1.3.0/go.mod h1:xMicKDx7XRXYdVwY9f9wQpDJVnqWxw9wCauCMKp+IBI= -github.com/gostaticanalysis/comment v1.4.1/go.mod h1:ih6ZxzTHLdadaiSnF5WY3dxUoXfXAlTaRzuaNDlSado= -github.com/gostaticanalysis/comment v1.4.2/go.mod h1:KLUTGDv6HOCotCH8h2erHKmpci2ZoR8VPu34YA2uzdM= -github.com/gostaticanalysis/forcetypeassert v0.0.0-20200621232751-01d4955beaa5/go.mod h1:qZEedyP/sY1lTGV1uJ3VhWZ2mqag3IkWsDHVbplHXak= -github.com/gostaticanalysis/nilerr v0.1.1/go.mod h1:wZYb6YI5YAxxq0i1+VJbY0s2YONW0HU0GPE3+5PWN4A= -github.com/gostaticanalysis/testutil v0.3.1-0.20210208050101-bfb5c8eec0e4/go.mod h1:D+FIZ+7OahH3ePw/izIEeH5I06eKs1IKI4Xr64/Am3M= -github.com/gostaticanalysis/testutil v0.4.0/go.mod h1:bLIoPefWXrRi/ssLFWX1dx7Repi5x3CuviD3dgAZaBU= github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 h1:+ngKgrYPPJrOjhax5N+uePQ0Fh1Z7PheYoUI/0nzkPA= github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.12.1/go.mod h1:8XEsbTttt/W+VvjtQhLACqCisSPWTxCZ7sBRjU6iH9c= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= -github.com/hashicorp/consul/api v1.10.1/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= -github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= -github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= +github.com/hashicorp/go-hclog v0.9.2 h1:CG6TE5H9/JXsFWJCfoIVpKFIkFe6ysEuHirp4DxCsHI= github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= -github.com/hashicorp/go-hclog v0.12.0 h1:d4QkX8FRTYaKaCZBoXYY8zJX2BXjWxurN/GA2tkrmZM= -github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= -github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-retryablehttp v0.7.1 h1:sUiuQAnLlbvmExtFQs72iFW/HXeUn8Z1aJLQ4LJJbTQ= github.com/hashicorp/go-retryablehttp v0.7.1/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= -github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= -github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= -github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= -github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= -github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-version v1.2.1/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= -github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= -github.com/hashicorp/mdns v1.0.1/go.mod h1:4gW7WsVCke5TE7EPeYliwHlRUyBtfCwuFwuMg2DmyNY= -github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= -github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= -github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= -github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= -github.com/homeport/dyff v1.5.5 h1:qRkVSwiLdbEWVLgNZPxjKojZgGPyZ679pelYOMzhqEk= -github.com/homeport/dyff v1.5.5/go.mod h1:zZBPgfaacWi8M/e4Tgv0UYJvKL6olHu4T+6QWLqe/Do= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/huandu/xstrings v1.0.0/go.mod h1:4qWG/gcEcfX4z/mBDHJ++3ReCw9ibxbsNJbcucJdbSo= -github.com/huandu/xstrings v1.2.0/go.mod h1:DvyZB1rfVYsBIigL8HwpZgxHwXozlTgGqn63UyNX5k4= +github.com/homeport/dyff v1.5.6 h1:6PNzGM0azeYXs401RZSLyIUS4sIX+YY3WBEZ3bnzkiE= +github.com/homeport/dyff v1.5.6/go.mod h1:cMmplDz/DeUWPB4T/sD9GDpuTnMD2nk3rjn2f+5roEU= 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.4/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= -github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/inconshreveable/mousetrap v1.0.1 h1:U3uMjPSQEBMNp1lFxmllqCPM6P5u/Xq7Pgzkat/bFNc= +github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= -github.com/jgautheron/goconst v1.5.1/go.mod h1:aAosetZ5zaeC/2EfMeRswtxUFBpe2Hr7HzkgX4fanO4= -github.com/jhump/protoreflect v1.6.1/go.mod h1:RZQ/lnuN+zqeRVpQigTwO6o0AJUkxbnSnpuG7toUTG4= -github.com/jingyugao/rowserrcheck v1.1.1/go.mod h1:4yvlZSDb3IyDTUZJUmpZfm2Hwok+Dtp+nu2qOq+er9c= -github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af/go.mod h1:HEWGJkRDzjJY2sqdDwxccsGicWEf9BQOZsq2tV+xzM0= -github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= -github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= -github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/jonboulle/clockwork v0.2.0/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= -github.com/josharian/txtarfs v0.0.0-20210218200122-0702f000015a/go.mod h1:izVPOvVRsHiKkeGCT6tYBNWyDVuzj9wAaBb5R9qamfw= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= @@ -623,28 +443,16 @@ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/juju/ratelimit v1.0.1/go.mod h1:qapgC/Gy+xNh9UxzV13HGGl/6UXNN+ct+vwSgWNm/qk= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= -github.com/julz/importas v0.0.0-20210419104244-841f0c0fe66d/go.mod h1:oSFU2R4XK/P7kNBrnL/FEQlDGN1/6WoxXEjSSXO0DV0= -github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351 h1:DowS9hvgyYSX4TO5NpyC606/Z4SxnNYbT+WX27or6Ck= github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= -github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= -github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= -github.com/kisielk/errcheck v1.6.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.13.4/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= -github.com/klauspost/compress v1.13.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.15.7/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= -github.com/klauspost/compress v1.15.8 h1:JahtItbkWjf2jzm/T+qgMxkP9EMHsqEUA6vCMGmXvhA= -github.com/klauspost/compress v1.15.8/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= +github.com/klauspost/compress v1.15.11 h1:Lcadnb3RKGin4FYM/orgq0qde+nc15E5Cbqg4B9Sx9c= +github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= @@ -654,26 +462,12 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/kulti/thelper v0.4.0/go.mod h1:vMu2Cizjy/grP+jmsvOFDx1kYP6+PD1lqg4Yu5exl2U= -github.com/kunwardeep/paralleltest v1.0.3/go.mod h1:vLydzomDFpk7yu5UX02RmP0H8QfRPOV/oFhWN85Mjb4= github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/kyoh86/exportloopref v0.1.8/go.mod h1:1tUcJeiioIs7VWe5gcOObrux3lb66+sBqGZrRkMwPgg= -github.com/ldez/gomoddirectives v0.2.2/go.mod h1:cpgBogWITnCfRq2qGoDkKMEVSaarhdBr6g8G04uz6d0= -github.com/ldez/tagliatelle v0.2.0/go.mod h1:8s6WJQwEYHbKZDsp/LjArytKOG8qaMrKQQ3mFukHs88= -github.com/letsencrypt/pkcs11key/v4 v4.0.0/go.mod h1:EFUvBDay26dErnNb70Nd0/VW3tJiIbETBPTl9ATXQag= -github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.8.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/lib/pq v1.9.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/lib/pq v1.10.3/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de h1:9TO3cAIGXtEhnIaL+V+BEER86oLrvS+kWobKpbJuye0= github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9B/r2mtpb6U+EI2rYA5OAXxsYw6wTamcNW+zcE= -github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= -github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= @@ -681,72 +475,33 @@ github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0 github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/manifoldco/promptui v0.9.0 h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA= github.com/manifoldco/promptui v0.9.0/go.mod h1:ka04sppxSGFAtxX0qhlYQjISsg9mR4GWtQEhdbn6Pgg= -github.com/maratori/testpackage v1.0.1/go.mod h1:ddKdw+XG0Phzhx8BFDTKgpWP4i7MpApTE5fXSKAqwDU= -github.com/matoous/godox v0.0.0-20210227103229-6504466cf951/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= +github.com/matryer/is v1.2.0 h1:92UTHpy8CDwaJ08GqLDzhhuixiBUUD1p3AU6PHddz4A= github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= -github.com/matryer/is v1.4.0 h1:sosSmIWwkYITGrxZ25ULNDeKiMNzFSr4V/eqBQP0PeE= -github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= github.com/mattn/go-ciede2000 v0.0.0-20170301095244-782e8c62fec3 h1:BXxTozrOU8zgC5dkpn3J6NTRdoP+hjok/e+ACr4Hibk= github.com/mattn/go-ciede2000 v0.0.0-20170301095244-782e8c62fec3/go.mod h1:x1uk6vxTiVuNt6S5R2UYgdhpj3oKojXvOXauHZ7dEnI= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= -github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= -github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= -github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.6/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU= github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-shellwords v1.0.12 h1:M2zGm7EW6UQJvDeQxo4T51eKPurbeFbe8WtebGE2xrk= github.com/mattn/go-shellwords v1.0.12/go.mod h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lLtQsUlTZDWQ8Y= -github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= -github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= -github.com/mbilski/exhaustivestruct v1.2.0/go.mod h1:OeTBVxQWoEmB2J2JCHmXWPJ0aksxSUOUy+nvtVEfzXc= -github.com/mgechev/dots v0.0.0-20210922191527-e955255bf517/go.mod h1:KQ7+USdGKfpPjXk4Ga+5XxQM4Lm4e3gAogrreFAYpOg= -github.com/mgechev/revive v1.1.2/go.mod h1:bnXsMr+ZTH09V5rssEI+jHAZ4z+ZdyhgO/zsy3EhK+0= -github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= -github.com/miekg/dns v1.1.35/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= -github.com/miekg/pkcs11 v1.0.2/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= -github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= -github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= -github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= -github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= -github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-ps v1.0.0 h1:i6ampVEEF4wQFF+bkYfwYgY+F/uYJDktmvLPf7qIgjc= github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg= -github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/go-wordwrap v1.0.0 h1:6GlHJ/LTGMrIJbwgdqdl2eEH8o+Exx/0m8ir9Gns0u4= github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= -github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= github.com/mitchellh/hashstructure v1.1.0 h1:P6P1hdjqAAknpY/M1CGipelZgp+4y9ja9kmUZPXP+H0= github.com/mitchellh/hashstructure v1.1.0/go.mod h1:xUDAozZz0Wmdiufv0uyhnHkUTN6/6d8ulp4AwfLKrmA= -github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= -github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/mapstructure v1.4.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f h1:2+myh5ml7lgEU/51gbeLHfKGNfgEQQIWrlbdaOsidbQ= -github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= -github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/moby/spdystream v0.2.0 h1:cjW1zVyyoiM0T7b6UoySUFqzXMoqRckQtXwGPiBhOM8= github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6 h1:dcztxKSvZ4Id8iPpHERQBbIJfabdt4wUm5qy3wOL2Zc= @@ -758,62 +513,27 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 h1:n6/2gBQ3RWajuToeY6ZtZTIKv2v7ThUy5KKusIT0yc0= github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00/go.mod h1:Pm3mSP3c5uWn86xMLZ5Sa7JB9GsEZySvHYXCTK4E9q4= github.com/montanaflynn/stats v0.6.6/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= -github.com/moricho/tparallel v0.2.1/go.mod h1:fXEIZxG2vdfl0ZF8b42f5a78EhjjD5mX8qUplsoSU4k= -github.com/mozilla/scribe v0.0.0-20180711195314-fb71baf557c1/go.mod h1:FIczTrinKo8VaLxe6PWTPEXRXDIHz2QAwiaBaP5/4a8= -github.com/mozilla/tls-observatory v0.0.0-20210609171429-7bc42856d2e5/go.mod h1:FUqVoUPHSEdDR0MnFM3Dh8AU0pZHLXUD127SAJGER/s= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mwitkow/go-proto-validators v0.0.0-20180403085117-0950a7990007/go.mod h1:m2XC9Qq0AlmmVksL6FktJCdTYyLk7V3fKyp0sl1yWQo= -github.com/mwitkow/go-proto-validators v0.2.0/go.mod h1:ZfA1hW+UH/2ZHOWvQ3HnQaU0DtnpXu850MZiy+YUgcc= -github.com/nakabonne/nestif v0.3.1/go.mod h1:9EtoZochLn5iUprVDmDjqGKPofoUEBL8U4Ngq6aY7OE= -github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354/go.mod h1:KSVJerMDfblTH7p5MZaTt+8zaT2iEk3AkVb9PQdZuE8= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/nishanths/exhaustive v0.2.3/go.mod h1:bhIX678Nx8inLM9PbpvK1yv6oGtoP8BfaIeMzgBNKvc= -github.com/nishanths/predeclared v0.0.0-20190419143655-18a43bb90ffc/go.mod h1:62PewwiQTlm/7Rj+cxVYqZvDIUc+JjZq6GHAC1fsObQ= -github.com/nishanths/predeclared v0.2.1/go.mod h1:HvkGJcA3naj4lOwnFXFDkFxVtSqQMB9sbB1usJ+xjQE= -github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= -github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= -github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/olekukonko/tablewriter v0.0.2/go.mod h1:rSAaSIOAGT9odnlyGlUfAJaoc5w2fSBUmeGDbRWPxyQ= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= -github.com/onsi/ginkgo/v2 v2.1.6 h1:Fx2POJZfKRQcM1pH49qSZiYeu319wji004qX+GDovrU= -github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.16.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= -github.com/onsi/gomega v1.20.2 h1:8uQq0zMgLEfa0vRrrBgaJF2gyW9Da9BmfGV+OyUzfkY= -github.com/onsi/gomega v1.20.2/go.mod h1:iYAIXgPSaDHak0LCMA+AWBpIKBr8WZicMxnE8luStNc= +github.com/onsi/ginkgo/v2 v2.3.0 h1:kUMoxMoQG3ogk/QWyKh3zibV7BKZ+xBpWil1cTylVqc= +github.com/onsi/gomega v1.22.1 h1:pY8O4lBfsHKZHM/6nrxkhVPUznOlIu3quZcKP/M20KI= +github.com/onsi/gomega v1.22.1/go.mod h1:x6n7VNe4hw0vkyYUM4mjIXx3JbLiPaBPNgB7PRQ1tuM= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= -github.com/opencontainers/image-spec v1.0.3-0.20220114050600-8b9d41f48198 h1:+czc/J8SlhPKLOtVLMQc+xDCFBT73ZStMsRhSsUhsSg= -github.com/opencontainers/image-spec v1.0.3-0.20220114050600-8b9d41f48198/go.mod h1:j4h1pJW6ZcJTgMZWP3+7RlG3zTaP02aDZ/Qw0sppK7Q= -github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/otiai10/copy v1.2.0/go.mod h1:rrF5dJ5F0t/EWSYODDu4j9/vEeYHMkc8jt0zJChqQWw= -github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= -github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs= -github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= -github.com/otiai10/mint v1.3.1/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= -github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= +github.com/opencontainers/image-spec v1.1.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= +github.com/opencontainers/image-spec v1.1.0-rc2/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= -github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d/go.mod h1:3OzsM7FXDQlpCiw2j81fOmAwQLnZnLGXVKUzeKQXIAw= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4/go.mod h1:N6UoU20jOqggOuDwUaBQpluzLNDqif3kq9z2wpdYEfQ= @@ -823,13 +543,8 @@ github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= -github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/polyfloyd/go-errorlint v0.0.0-20210722154253-910bb7978349/go.mod h1:wi9BfjxjF/bwiZ701TzmfKu6UKC357IOAtNr0Td0Lvw= -github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= @@ -858,86 +573,37 @@ github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1 github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo= github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= -github.com/pseudomuto/protoc-gen-doc v1.3.2/go.mod h1:y5+P6n3iGrbKG+9O04V5ld71in3v/bX88wUwgt+U8EA= -github.com/pseudomuto/protokit v0.2.0/go.mod h1:2PdH30hxVHsup8KpBTOXTBeMVhJZVio3Q8ViKSAXT0Q= -github.com/quasilyte/go-consistent v0.0.0-20190521200055-c6f3937de18c/go.mod h1:5STLWrekHfjyYwxBRVRXNOSewLJ3PWfDJd1VyTS21fI= -github.com/quasilyte/go-ruleguard v0.3.1-0.20210203134552-1b5a410e1cc8/go.mod h1:KsAh3x0e7Fkpgs+Q9pNLS5XpFSvYCEVl5gP9Pp1xp30= -github.com/quasilyte/go-ruleguard v0.3.13/go.mod h1:Ul8wwdqR6kBVOCt2dipDBkE+T6vAV/iixkrKuRTN1oQ= -github.com/quasilyte/go-ruleguard/dsl v0.3.0/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= -github.com/quasilyte/go-ruleguard/dsl v0.3.10/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= -github.com/quasilyte/go-ruleguard/rules v0.0.0-20201231183845-9e62ed36efe1/go.mod h1:7JTjp89EGyU1d6XfBiXihJNG37wB2VRkd125Q1u7Plc= -github.com/quasilyte/go-ruleguard/rules v0.0.0-20210428214800-545e0d2e0bf7/go.mod h1:4cgAphtvu7Ftv7vOT2ZOYhC6CvBxZixcasr8qIOTA50= -github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95/go.mod h1:rlzQ04UMyJXu/aOvhd8qT+hvDrFpiwqp8MRXDY9szc0= github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.6.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= -github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday v1.6.0 h1:KqfZb0pUVN2lYqZUYRddxF4OR8ZMURnJIG5Y3VRLtww= github.com/russross/blackfriday v1.6.0/go.mod h1:ti0ldHuxg49ri4ksnFxlkCfN+hvslNlmVHqNRXXJNAY= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/ryancurrah/gomodguard v1.2.3/go.mod h1:rYbA/4Tg5c54mV1sv4sQTP5WOPBcoLtnBZ7/TEhXAbg= -github.com/ryanrolds/sqlclosecheck v0.3.0/go.mod h1:1gREqxyTGR3lVtpngyFo3hZAgk0KCtEdgEkHwDbigdA= -github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/sagikazarmark/crypt v0.1.0/go.mod h1:B/mN0msZuINBtQ1zZLEQcegFJJf9vnYIR88KRMEuODE= -github.com/sanposhiho/wastedassign/v2 v2.0.6/go.mod h1:KyZ0MWTwxxBmfwn33zh3k1dmsbF2ud9pAAGfoLfjhtI= -github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/securego/gosec/v2 v2.9.1/go.mod h1:oDcDLcatOJxkCGaCaq8lua1jTnYf6Sou4wdiJ1n4iHc= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= -github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c/go.mod h1:/PevMnwAxekIXwN8qQyfc5gl2NlkB3CQlkizAbOkeBs= -github.com/shirou/gopsutil/v3 v3.21.10/go.mod h1:t75NhzCZ/dYyPQjyQmrAYP6c8+LCdFANeBMdLPCNnew= -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/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= -github.com/sivchari/tenv v1.4.7/go.mod h1:5nF+bITvkebQVanjU6IuMbvIot/7ReNsUV7I5NbprB0= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/sonatard/noctx v0.0.1/go.mod h1:9D2D/EoULe8Yy2joDHJj7bv3sZoq9AaSb8B4lqBjiZI= -github.com/sourcegraph/go-diff v0.6.1/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= -github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= -github.com/spf13/cobra v1.5.0 h1:X+jTBEBqF0bHN+9cSMgmfuvv2VHJ9ezmFNf9Y/XstYU= -github.com/spf13/cobra v1.5.0/go.mod h1:dWXEIy2H428czQCjInthrTRUg7yKbok+2Qi/yBIJoUM= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= -github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/cobra v1.6.0 h1:42a0n6jwCot1pUmomAp4T7DeMD+20LFv4Q54pxLf2LI= +github.com/spf13/cobra v1.6.0/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= -github.com/spf13/viper v1.9.0/go.mod h1:+i6ajR7OX2XaiBkrcZJFK21htRk7eDeLg7+O6bhUPP4= -github.com/ssgreg/nlreturn/v2 v2.2.1/go.mod h1:E/iiPB78hV7Szg2YfRgyIrk1AD6JVMTRkkxBiELzh2I= github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48= -github.com/stretchr/testify v0.0.0-20170130113145-4d4bfba8f1d1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.1.4/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -945,76 +611,36 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5 github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= -github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= -github.com/sylvia7788/contextcheck v1.0.4/go.mod h1:vuPKJMQ7MQ91ZTqfdyreNKwZjyUg6KO+IebVyQDedZQ= -github.com/tdakkota/asciicheck v0.0.0-20200416200610-e657995f937b/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM= -github.com/tenntenn/modver v1.0.1/go.mod h1:bePIyQPb7UeioSRkw3Q0XeMhYZSMx9B8ePqg6SAMGH0= -github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3/go.mod h1:ON8b8w4BN/kE1EOhwT0o+d62W65a6aPw1nouo9LMgyY= -github.com/tetafro/godot v1.4.11/go.mod h1:LR3CJpxDVGlYOWn3ZZg1PgNZdTUvzsZWu8xaEohUpn8= github.com/texttheater/golang-levenshtein v1.0.1 h1:+cRNoVrfiwufQPhoMzB6N0Yf/Mqajr6t1lOv8GyGE2U= github.com/texttheater/golang-levenshtein v1.0.1/go.mod h1:PYAKrbF5sAiq9wd+H82hs7gNaen0CplQ9uvm6+enD/8= github.com/theckman/yacspin v0.13.12 h1:CdZ57+n0U6JMuh2xqjnjRq5Haj6v1ner2djtLQRzJr4= github.com/theckman/yacspin v0.13.12/go.mod h1:Rd2+oG2LmQi5f3zC3yeZAOl245z8QOvrH4OPOJNZxLg= -github.com/timakin/bodyclose v0.0.0-20200424151742-cb6215831a94/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= -github.com/tklauser/go-sysconf v0.3.9/go.mod h1:11DU/5sG7UexIrp/O6g35hrWzu0JxlwQ3LSFUzyeuhs= -github.com/tklauser/numcpus v0.3.0/go.mod h1:yFGUr7TUHQRAhyqBcEg0Ge34zDBAsIvJJcyE6boqnA8= -github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tmc/grpc-websocket-proxy v0.0.0-20200427203606-3cfed13b9966/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tomarrell/wrapcheck/v2 v2.4.0/go.mod h1:68bQ/eJg55BROaRTbMjC7vuhL2OgfoG8bLp9ZyoBfyY= -github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce/go.mod h1:o8v6yHRoik09Xen7gje4m9ERNah1d1PPsVq1VEx9vE4= -github.com/tommy-muehle/go-mnd/v2 v2.4.0/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw= -github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/ultraware/funlen v0.0.3/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= -github.com/ultraware/whitespace v0.0.4/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA= -github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= -github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/urfave/cli v1.22.4/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/uudashr/gocognit v1.0.5/go.mod h1:wgYz0mitoKOTysqxTDMOUXg+Jb5SvtihkfmugIZYpEA= -github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasthttp v1.30.0/go.mod h1:2rsYD01CKFrjjsvFxx75KlEUNpWNBY9JWD3K/7o2Cus= -github.com/valyala/quicktemplate v1.7.0/go.mod h1:sqKJnoaOF88V07vkO+9FL8fb9uZg/VPSJnLYn+LmLk8= -github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= github.com/vbatts/tar-split v0.11.2 h1:Via6XqJr0hceW4wff3QRzD5gAk/tatMw/4ZA7cTlIME= github.com/vbatts/tar-split v0.11.2/go.mod h1:vV3ZuO2yWSVsz+pfFzDG/upWH1JhjOiEaWq6kXyQ3VI= -github.com/viki-org/dnscache v0.0.0-20130720023526-c70c1f23c5d8/go.mod h1:dniwbG03GafCjFohMDmz6Zc6oCuiqgH6tGNyXTkHzXE= github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74 h1:JwtAtbp7r/7QSyGz8mKUbYJBg2+6Cd7OjM8o/GNOcVo= github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74/go.mod h1:RmMWU37GKR2s6pgrIEB4ixgpVCt/cf7dnJv3fuH1J1c= -github.com/xanzy/go-gitlab v0.69.0 h1:sPci9xHzlX+lcJvPqNu3y3BQpePuR2R694Bal4AeyB8= -github.com/xanzy/go-gitlab v0.69.0/go.mod h1:o4yExCtdaqlM8YGdDJWuZoBmfxBsmA9TPEjs9mx1UO4= +github.com/xanzy/go-gitlab v0.73.1 h1:UMagqUZLJdjss1SovIC+kJCH4k2AZWXl58gJd38Y/hI= +github.com/xanzy/go-gitlab v0.73.1/go.mod h1:d/a0vswScO7Agg1CZNz15Ic6SSvBG9vfw8egL99t4kA= github.com/xanzy/ssh-agent v0.3.0 h1:wUMzuKtKilRgBAD1sUb8gOwwRr2FGoBVumcjoOACClI= github.com/xanzy/ssh-agent v0.3.0/go.mod h1:3s9xbODqPuuhK9JV1R321M/FlMZSBvE5aY6eAcqrDh0= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xlab/treeprint v1.1.0 h1:G/1DjNkPpfZCFt9CSh6b5/nY4VimlbHF3Rh4obvtzDk= github.com/xlab/treeprint v1.1.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd/WEJu0= -github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1zIOPMxZ5EncGwgmMJsa+9ucAQZXxsObs= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= -github.com/yeya24/promlinter v0.1.0/go.mod h1:rs5vtZzeBHqqMwXqFScncpCF6u06lezhZepno9AB1Oc= -github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg= -github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= -github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZkTdatxwunjIkc= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43 h1:+lm10QQTNSBd8DVTNGHx7o/IKu9HYDvLMffDhbyLccI= github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43/go.mod h1:aX5oPXxHm3bOH+xeAttToC8pqch2ScQN/JoXYupl6xs= github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50 h1:hlE8//ciYMztlGpl/VA+Zm1AcTPHYkHJPbHqE6WJUXE= github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50/go.mod h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96TguQh0+r/ssA= github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f h1:ERexzlUfuTvpE74urLSbIQW0Z/6hF9t8U4NsJLaioAY= github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg= -go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.4/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= -go.etcd.io/etcd v0.0.0-20200513171258-e048e166ab9c/go.mod h1:xCI7ZzBfRuGgBXyXO6yfWfDmlWd35khcWpUa4L0xI/k= -go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= -go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= -go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= -go.mozilla.org/mozlog v0.0.0-20170222151521-4bb13139d403/go.mod h1:jHoPAGnDrCy6kaI2tAze5Prf0Nr0w/oNkROt2lw3n3o= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -1025,43 +651,23 @@ go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 h1:+FNtrFTmVw0YZGpBGX56XDee331t6JAXeK2bcyhLOOc= go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5/go.mod h1:nmDLcffg48OtT/PSW0Hg7FvpRQsQh5OSqIylirxKC7o= -go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= -go.uber.org/multierr v1.4.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= -go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= go.uber.org/zap v1.23.0 h1:OjGQ5KQDEUawVHxNwQgPpiypGHOxo2mNZsOqTak4fFY= -golang.org/x/crypto v0.0.0-20180501155221-613d6eafa307/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= -golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d h1:3qF+Z8Hkrw9sOhrFHti9TlB1Hkac1x+DNRkv0XQiFjo= -golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.1.0 h1:MDRAIl0xIo9Io2xV565hzXHw3zVseKrJKodhohM5CjU= +golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -1072,7 +678,6 @@ 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-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= 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= @@ -1098,14 +703,12 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 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.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.6.0 h1:b9gGHsz9/HhJ3HF5DHQytPpuwocVTChQJK3AvoLRD5I= +golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -1117,9 +720,6 @@ golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -1127,11 +727,9 @@ golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= @@ -1145,16 +743,15 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210326060303-6b1517762897/go.mod h1:uSPa2vr4CLtc/ILN5odXGNXS6mhrKVzTaCXzk9m6W3k= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210510120150-4163338589ed/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b h1:PxfKdU9lEEDYjdIzOtC4qFWgkU2rGHdKlKowJSMN9h0= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.1.0 h1:hZ/3BUoy5aId7sCpA/Tc5lt8DkFgdVS2onTpJsZ/fl0= +golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= 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= @@ -1166,20 +763,18 @@ golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.0.0-20220722155238-128564f6959c h1:q3gFqPqH7NVofKo3c3yETAP//pPI+G5mvB7qqj1Y5kY= -golang.org/x/oauth2 v0.0.0-20220722155238-128564f6959c/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.1.0 h1:isLCZuhj4v+tYv7eskaN4v/TM+A1begWWgyVJDdl1+Y= +golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= 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= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1187,19 +782,14 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 h1:uVc8UZUe6tr40fFVnUP5Oj+veunVezqYl9z7DYw9xzw= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1209,31 +799,22 @@ golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191002063906-3421d5a6bb1c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1246,7 +827,6 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1255,7 +835,6 @@ golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210502180810-71e4cd670f79/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1267,60 +846,35 @@ golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210816074244-15123e1e1f71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210915083310-ed5796bab164/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210917161153-d61c044b1678/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211013075003-97ac67df715c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f h1:v4INt8xihDGvnrfjMDVXGxw9wrfxYyCjk0KbXjhR55s= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= +golang.org/x/sys v0.1.0 h1:kunALQeHf1/185U1i0GOB/fy1IPRDDpuoOOqRReG57U= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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= -golang.org/x/term v0.0.0-20220722155259-a9ba230a4035 h1:Q5284mrmYTpACcm+eAKjKJH48BBwSyfJqmmGDTtT8Vc= -golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/term v0.1.0 h1:g6Z6vPFA9dYBAF7DWcH6sCcOntplXsDKcliusYijMlw= +golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9 h1:ftMN5LMiBFjbzleLqtoBZk7KdJwhuybIU+FckUHgoyQ= golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190110163146-51295c7ec13a/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190307163923-6a08e3108db3/go.mod h1:25r3+/G6/xytQM8iWZKq3Hn0kr0rgFKPUNVEL/dr3z4= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190311215038-5c2858a9cfe5/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190321232350-e250d351ecad/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190322203728-c1a832b0ad89/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= @@ -1329,26 +883,16 @@ golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgw golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190910044552-dd2b5c81c578/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190916130336-e45ffcd953cc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191010075000-0337d82405ff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117220505-0cba7a3a9ee9/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= @@ -1358,56 +902,29 @@ golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapK golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200324003944-a576cf524670/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200329025819-fd4102a86c65/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200414032229-332987a829c3/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200422022333-3d57cf2e726e/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200426102838-f3a5411a4c3b/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200622203043-20e05c1c8ffa/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200624225443-88f3c62a19ff/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200625211823-6506e20df31f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200626171337-aa94e735be7f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200630154851-b2d8b0336632/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200706234117-b22de6825cf7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200724022722-7017fd6b1305/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200812195022-5ae4c3c160a0/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200820010801-b793a1359eac/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200831203904-5a2aa26beb65/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20201001104356-43ebab892c4c/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= -golang.org/x/tools v0.0.0-20201002184944-ecd9fd270d5d/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= -golang.org/x/tools v0.0.0-20201023174141-c8cfbd0f21e6/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201028025901-8cd080b735b3/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201114224030-61ea331ec02b/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201118003311-bd56c0adb394/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201230224404-63754364767c/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210101214203-2dba1e4ea05c/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210104081019-d8d6ddbec6ee/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.1-0.20210205202024-ef80cdb6ec6d/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= -golang.org/x/tools v0.1.1-0.20210302220138-2ac05c832e1a/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= 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.6/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo= -golang.org/x/tools v0.1.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo= +golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1418,7 +935,6 @@ google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEt google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.10.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= @@ -1436,7 +952,6 @@ google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34q google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= -google.golang.org/api v0.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8= google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= @@ -1450,14 +965,11 @@ google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9Ywl google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.2/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/genproto v0.0.0-20170818010345-ee236bd376b0/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20181107211654-5fc9ac540362/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -1465,7 +977,6 @@ google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRn google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= @@ -1479,15 +990,12 @@ google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200626011028-ee7919e894b5/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200707001353-8e8330bf89df/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= @@ -1520,19 +1028,15 @@ google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ6 google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= 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= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.29.0/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= @@ -1572,27 +1076,17 @@ gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= -gopkg.in/cheggaaa/pb.v1 v1.0.28/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.63.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.6/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= @@ -1609,32 +1103,27 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.2.1/go.mod h1:lPVVZ2BS5TfnjLyizF7o7hv7j9/L+8cZY2hLyjP9cGY= k8s.io/api v0.25.3 h1:Q1v5UFfYe87vi5H7NU0p4RXC26PPMT8KOpr1TLQbCMQ= k8s.io/api v0.25.3/go.mod h1:o42gKscFrEVjHdQnyRenACrMtbuJsVdP+WVjqejfzmI= k8s.io/apiextensions-apiserver v0.25.3 h1:bfI4KS31w2f9WM1KLGwnwuVlW3RSRPuIsfNF/3HzR0k= k8s.io/apiextensions-apiserver v0.25.3/go.mod h1:ZJqwpCkxIx9itilmZek7JgfUAM0dnTsA48I4krPqRmo= k8s.io/apimachinery v0.25.3 h1:7o9ium4uyUOM76t6aunP0nZuex7gDf8VGwkR5RcJnQc= k8s.io/apimachinery v0.25.3/go.mod h1:jaF9C/iPNM1FuLl7Zuy5b9v+n35HGSh6AQ4HYRkCqwo= -k8s.io/cli-runtime v0.25.0 h1:XBnTc2Fi+w818jcJGzhiJKQuXl8479sZ4FhtV5hVJ1Q= -k8s.io/cli-runtime v0.25.0/go.mod h1:bHOI5ZZInRHhbq12OdUiYZQN8ml8aKZLwQgt9QlLINw= +k8s.io/cli-runtime v0.25.3 h1:Zs7P7l7db/5J+KDePOVtDlArAa9pZXaDinGWGZl0aM8= +k8s.io/cli-runtime v0.25.3/go.mod h1:InHHsjkyW5hQsILJGpGjeruiDZT/R0OkROQgD6GzxO4= k8s.io/client-go v0.25.3 h1:oB4Dyl8d6UbfDHD8Bv8evKylzs3BXzzufLiO27xuPs0= k8s.io/client-go v0.25.3/go.mod h1:t39LPczAIMwycjcXkVc+CB+PZV69jQuNx4um5ORDjQA= k8s.io/component-base v0.25.3 h1:UrsxciGdrCY03ULT1h/S/gXFCOPnLhUVwSyx+hM/zq4= k8s.io/component-base v0.25.3/go.mod h1:WYoS8L+IlTZgU7rhAl5Ctpw0WdMxDfCC5dkxcEFa/TI= k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= -k8s.io/klog/v2 v2.70.1 h1:7aaoSdahviPmR+XkS7FyxlkkXs6tHISSG03RxleQAVQ= -k8s.io/klog/v2 v2.70.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/klog/v2 v2.80.1 h1:atnLQ121W371wYYFawwYx1aEY2eUfs4l3J72wtgAwV4= +k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1 h1:MQ8BAZPZlWk3S9K4a9NCkIFQtZShWqoha7snGixVgEA= k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1/go.mod h1:C/N6wCaBHeBHkHUesQOQy2/MZqGgMAFPqGsGQLdbZBU= -k8s.io/kubectl v0.25.0 h1:/Wn1cFqo8ik3iee1EvpxYre3bkWsGLXzLQI6uCCAkQc= -k8s.io/kubectl v0.25.0/go.mod h1:n16ULWsOl2jmQpzt2o7Dud1t4o0+Y186ICb4O+GwKAU= +k8s.io/kubectl v0.25.3 h1:HnWJziEtmsm4JaJiKT33kG0kadx68MXxUE8UEbXnN4U= +k8s.io/kubectl v0.25.3/go.mod h1:glU7PiVj/R6Ud4A9FJdTcJjyzOtCJyc0eO7Mrbh3jlI= k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed h1:jAne/RjBTyawwAy0utX5eqigAwz/lQhTmy+Hr/Cpue4= k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -mvdan.cc/gofumpt v0.1.1/go.mod h1:yXG1r1WqZVKWbVRtBWKWX9+CxGYfA51nSomhM0woR48= -mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc= -mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4= -mvdan.cc/unparam v0.0.0-20210104141923-aac4ce9116a7/go.mod h1:hBpJkZE8H/sb+VRFvw2+rBpHNsTBcvSpk61hr8mzXZE= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= @@ -1650,6 +1139,5 @@ sigs.k8s.io/kustomize/kyaml v0.13.9 h1:Qz53EAaFFANyNgyOEJbT/yoIHygK40/ZcvU3rgry2 sigs.k8s.io/kustomize/kyaml v0.13.9/go.mod h1:QsRbD0/KcU+wdk0/L0fIp2KLnohkVzs6fQ85/nOXac4= sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E= -sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= diff --git a/tests/azure/go.mod b/tests/azure/go.mod index 69d9412d..2dc9ba2e 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -4,14 +4,14 @@ go 1.18 require ( github.com/Azure/azure-event-hubs-go/v3 v3.3.18 - github.com/fluxcd/helm-controller/api v0.24.0 - github.com/fluxcd/image-automation-controller/api v0.25.0 - github.com/fluxcd/image-reflector-controller/api v0.21.0 - github.com/fluxcd/kustomize-controller/api v0.28.0 - github.com/fluxcd/notification-controller/api v0.26.0 - github.com/fluxcd/pkg/apis/meta v0.15.0 - github.com/fluxcd/pkg/runtime v0.18.0 - github.com/fluxcd/source-controller/api v0.29.0 + github.com/fluxcd/helm-controller/api v0.26.0 + github.com/fluxcd/image-automation-controller/api v0.26.1 + github.com/fluxcd/image-reflector-controller/api v0.22.1 + github.com/fluxcd/kustomize-controller/api v0.30.0 + github.com/fluxcd/notification-controller/api v0.28.0 + github.com/fluxcd/pkg/apis/meta v0.17.0 + github.com/fluxcd/pkg/runtime v0.22.0 + github.com/fluxcd/source-controller/api v0.31.0 github.com/hashicorp/hc-install v0.4.0 github.com/hashicorp/terraform-exec v0.17.3 github.com/libgit2/git2go/v33 v33.0.9 @@ -19,12 +19,15 @@ require ( github.com/stretchr/testify v1.8.0 github.com/whilp/git-urls v1.0.0 go.uber.org/multierr v1.8.0 - k8s.io/api v0.25.0 - k8s.io/apimachinery v0.25.0 - k8s.io/client-go v0.25.0 - sigs.k8s.io/controller-runtime v0.12.3 + k8s.io/api v0.25.3 + k8s.io/apimachinery v0.25.3 + k8s.io/client-go v0.25.3 + sigs.k8s.io/controller-runtime v0.13.0 ) +// Fix CVE-2022-32149 +replace golang.org/x/text => golang.org/x/text v0.4.0 + // Fix CVE-2022-28948 replace gopkg.in/yaml.v3 => gopkg.in/yaml.v3 v3.0.1 @@ -47,10 +50,10 @@ require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/devigned/tab v0.1.1 // indirect github.com/emicklei/go-restful/v3 v3.8.0 // indirect - github.com/evanphx/json-patch v4.12.0+incompatible // indirect + github.com/evanphx/json-patch/v5 v5.6.0 // indirect github.com/fluxcd/pkg/apis/acl v0.1.0 // indirect - github.com/fluxcd/pkg/apis/kustomize v0.5.0 // indirect - github.com/fsnotify/fsnotify v1.5.1 // indirect + github.com/fluxcd/pkg/apis/kustomize v0.6.0 // indirect + github.com/fsnotify/fsnotify v1.5.4 // indirect github.com/go-logr/logr v1.2.3 // indirect github.com/go-logr/zapr v1.2.3 // indirect github.com/go-openapi/jsonpointer v0.19.5 // indirect @@ -61,7 +64,7 @@ require ( github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.2 // indirect github.com/google/gnostic v0.5.7-v3refs // indirect - github.com/google/go-cmp v0.5.8 // indirect + github.com/google/go-cmp v0.5.9 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/uuid v1.3.0 // indirect github.com/hashicorp/errwrap v1.0.0 // indirect @@ -95,17 +98,17 @@ require ( golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b // indirect golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f // indirect golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect - golang.org/x/text v0.3.7 // indirect - golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 // indirect + golang.org/x/text v0.4.0 // indirect + golang.org/x/time v0.0.0-20220609170525-579cf78fd858 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/protobuf v1.28.1 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/apiextensions-apiserver v0.25.0 // indirect - k8s.io/component-base v0.25.0 // indirect - k8s.io/klog/v2 v2.70.1 // indirect + k8s.io/apiextensions-apiserver v0.25.3 // indirect + k8s.io/component-base v0.25.3 // indirect + k8s.io/klog/v2 v2.80.1 // indirect k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1 // indirect k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed // indirect sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 // indirect diff --git a/tests/azure/go.sum b/tests/azure/go.sum index e7e02e81..2d127c8b 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -31,6 +31,7 @@ cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohl cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/AdaLogics/go-fuzz-headers v0.0.0-20220903154154-e8044f6e4c72 h1:1sCHCT0xRr7UArrI1WJxsl9S8QeYdf0fmuGIl2xb7YI= github.com/Azure/azure-amqp-common-go/v3 v3.2.3 h1:uDF62mbd9bypXWi19V1bN5NZEO84JqgmI5G73ibAmrk= github.com/Azure/azure-amqp-common-go/v3 v3.2.3/go.mod h1:7rPmbSfszeovxGfc5fSAXE4ehlXQZHpMja2OtxC2Tas= github.com/Azure/azure-event-hubs-go/v3 v3.3.18 h1:jgWDk2qmknA0UsfyzjHiW5yciOw3aBY0Oq9p/M9lz2Q= @@ -118,6 +119,7 @@ github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMn github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/cyphar/filepath-securejoin v0.2.3 h1:YX6ebbZCZP7VkM3scTTokDgBL2TY741X51MTk3ycuNI= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -137,33 +139,34 @@ github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1m github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/evanphx/json-patch v0.5.2/go.mod h1:ZWS5hhDbVDyob71nXKNL0+PWn6ToqBHMikGIFbs31qQ= github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH5pOlLGNtQ5lPWQu84= -github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/fluxcd/helm-controller/api v0.24.0 h1:JYE34zzPMfd/QTyCaeafFEnCu0mvnG6zayGLIC0W6D0= -github.com/fluxcd/helm-controller/api v0.24.0/go.mod h1:OhrOXaxwBBvW1R0OiV49caa3YszWiwmPViQkm67HW4M= -github.com/fluxcd/image-automation-controller/api v0.25.0 h1:erWR8X0tOnTon7eO3MzAGZrFtvTrP9sNGfcE5Qt/k6I= -github.com/fluxcd/image-automation-controller/api v0.25.0/go.mod h1:nCWUVwivbJf3nmJ/+zQgxBK9m27dNIE/rVimDsIK7u4= -github.com/fluxcd/image-reflector-controller/api v0.21.0 h1:+3iBaBu16pun5eWJiKBu1oy6J3gbSJYhPbY4styFpwM= -github.com/fluxcd/image-reflector-controller/api v0.21.0/go.mod h1:DhfOTfm3tP4czFzcU8U7gLJAazhmts/EgmC+kRHlOww= -github.com/fluxcd/kustomize-controller/api v0.28.0 h1:BEidxWgemuVacqAGKQnG/UXkWkpRyuWryaPSIFba6kw= -github.com/fluxcd/kustomize-controller/api v0.28.0/go.mod h1:OLNvteIzaJDMXRJD9DbTPzCuP57qWtRo9B+qzBn2L4o= -github.com/fluxcd/notification-controller/api v0.26.0 h1:Wi4wRcTjTfrCEOBUwbamO8T/R00VB5fhzbUwDFTi5Fc= -github.com/fluxcd/notification-controller/api v0.26.0/go.mod h1:ChTwLfjDJK7eoawfB3K3HUReq7QoCwcXNy3PzlCumAo= +github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJCLunww= +github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= +github.com/fluxcd/helm-controller/api v0.26.0 h1:UCod+R1Oct2jg5cXHlVBC57Jy01lMdpl9MA+8UPogvY= +github.com/fluxcd/helm-controller/api v0.26.0/go.mod h1:Ef7OnSHwMub7Z3F+UNe8p/mblOQ2aSQjCWSRfAqG2FA= +github.com/fluxcd/image-automation-controller/api v0.26.1 h1:+9ISIrgvrqPhJcEKrhlvocu29CEwSn6kjAvsG9XlTXY= +github.com/fluxcd/image-automation-controller/api v0.26.1/go.mod h1:stNr/kLPGu3DELAN0da7NBAjDPrA3TWZn818bAxBiW8= +github.com/fluxcd/image-reflector-controller/api v0.22.1 h1:n4G1UamjfG4aV12x5lMEB4tj9DLCQvUo4KAGZMmdzVs= +github.com/fluxcd/image-reflector-controller/api v0.22.1/go.mod h1:cZ8uWRExmULpIeQtoY5FmoPFfvpgMOZbR9qjyIgB2L0= +github.com/fluxcd/kustomize-controller/api v0.30.0 h1:kOl2wGX1yqz080Ej58WHnWUCGEs6PNo+6b74FA6rJL8= +github.com/fluxcd/kustomize-controller/api v0.30.0/go.mod h1:MisuQ92Y8CR0jR9jCWStvVIYiK5PiDBEq3rfyVRr5sg= +github.com/fluxcd/notification-controller/api v0.28.0 h1:7dRUoKgVatGB235iOl0Z2PXOAoHdbpvmCPnNoy+ljnc= +github.com/fluxcd/notification-controller/api v0.28.0/go.mod h1:USY8Mz7K9uoIn0cNBqq2WTix2cbzpFi9kbs4CMBjB+w= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= -github.com/fluxcd/pkg/apis/kustomize v0.5.0 h1:4Rvr4zWQV2KyHkSQzq8IFPo10b0UVAGEgVaXByrGlNw= -github.com/fluxcd/pkg/apis/kustomize v0.5.0/go.mod h1:N3Rtc5wDm/omHH0YHUbILyUpRNmWvZGejb5/8Uyk6II= -github.com/fluxcd/pkg/apis/meta v0.15.0 h1:uDVzbDNdFjp0GSB9qMpcW6r4K7SAjBQlCxQENSkWgkQ= -github.com/fluxcd/pkg/apis/meta v0.15.0/go.mod h1:7NkgFrlswnx2QxP16+8zVNDBf+VhZ7PsDhkcJY6OSgQ= -github.com/fluxcd/pkg/runtime v0.18.0 h1:3naATapV1y65ZWlsXEfJt66zSQBkJwJ9o/e6gqAF//E= -github.com/fluxcd/pkg/runtime v0.18.0/go.mod h1:JKTvOFOCz5Un9KxGcBL7Xjt0fcRa10ZItGB0XFv44AY= -github.com/fluxcd/source-controller/api v0.29.0 h1:RyuHUCW7NtnHu61RbZUYhNWS+Nl0Z0rWS6a4aGGZZqE= -github.com/fluxcd/source-controller/api v0.29.0/go.mod h1:pqWB3brXYkacesoKGY96dTJRrafThY1VwDQy6md1W/4= +github.com/fluxcd/pkg/apis/kustomize v0.6.0 h1:Afxv3Uv+xiuettzqm3sP0ceWikDZTfHdHtLv6u2nFM8= +github.com/fluxcd/pkg/apis/kustomize v0.6.0/go.mod h1:iY0zSpK6eUiPfNt/yR6g0q/wQP+wH+Ax/L7KBOx5x2M= +github.com/fluxcd/pkg/apis/meta v0.17.0 h1:Y2dfo1syHZDb9Mexjr2SWdcj1FnxnRXm015hEnhl6wU= +github.com/fluxcd/pkg/apis/meta v0.17.0/go.mod h1:GrOVzWXiu22XjLNgLLe2EBYhQPqZetes5SIADb4bmHE= +github.com/fluxcd/pkg/runtime v0.22.0 h1:4YV/An41b+OGdSWDogwFfHr22CEE/in+lBLEK0fr1yc= +github.com/fluxcd/pkg/runtime v0.22.0/go.mod h1:Cm6jIhltzXIM3CRRY6SFASDn+z2m/1yPqOWwD73c3io= +github.com/fluxcd/source-controller/api v0.31.0 h1:4PZQt2XILTUZ/2JOVGzAIpNDXjx8n10skAhuBHa9tVw= +github.com/fluxcd/source-controller/api v0.31.0/go.mod h1:XOf8hJB7jFcAKiOb8HVZcegkBeNSb4g0nxqnNjeVufg= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= -github.com/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpgI= -github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= +github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= +github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4= github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= @@ -251,8 +254,9 @@ github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= @@ -370,8 +374,8 @@ github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRW github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= -github.com/onsi/ginkgo/v2 v2.1.4 h1:GNapqRSid3zijZ9H77KrgVG4/8KqiyRsxcSxe+7ApXY= -github.com/onsi/gomega v1.20.0 h1:8W0cWlwFkflGPLltQvLRB7ZVD5HuP6ng320w2IS245Q= +github.com/onsi/ginkgo/v2 v2.1.6 h1:Fx2POJZfKRQcM1pH49qSZiYeu319wji004qX+GDovrU= +github.com/onsi/gomega v1.20.2 h1:8uQq0zMgLEfa0vRrrBgaJF2gyW9Da9BmfGV+OyUzfkY= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -439,6 +443,7 @@ github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/zclconf/go-cty v1.2.0/go.mod h1:hOPWgoHbaTUnI5k4D2ld+GRpFJSCe6bCM7m1q/N4PQ8= github.com/zclconf/go-cty v1.10.0/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uUAzyuvAk= github.com/zclconf/go-cty v1.11.0 h1:726SxLdi2SDnjY+BStqB9J1hNp4+2WlzyXLuimibIe0= @@ -452,7 +457,7 @@ go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= -go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA= +go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= @@ -491,6 +496,7 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180811021610-c39426892332/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -547,6 +553,7 @@ golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -589,29 +596,22 @@ golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210502180810-71e4cd670f79/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f h1:v4INt8xihDGvnrfjMDVXGxw9wrfxYyCjk0KbXjhR55s= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= +golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 h1:vVKdlvoWBphwdxWKrFZEuM0kGgGLxUOYcY4U/2Vjg44= -golang.org/x/time v0.0.0-20220210224613-90d013bbcef8/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/time v0.0.0-20220609170525-579cf78fd858 h1:Dpdu/EMxGMFgq0CeYMh4fazTD2vtlZRYE7wyynxJb9U= +golang.org/x/time v0.0.0-20220609170525-579cf78fd858/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= @@ -654,6 +654,7 @@ golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -771,19 +772,19 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -k8s.io/api v0.25.0 h1:H+Q4ma2U/ww0iGB78ijZx6DRByPz6/733jIuFpX70e0= -k8s.io/api v0.25.0/go.mod h1:ttceV1GyV1i1rnmvzT3BST08N6nGt+dudGrquzVQWPk= -k8s.io/apiextensions-apiserver v0.25.0 h1:CJ9zlyXAbq0FIW8CD7HHyozCMBpDSiH7EdrSTCZcZFY= -k8s.io/apiextensions-apiserver v0.25.0/go.mod h1:3pAjZiN4zw7R8aZC5gR0y3/vCkGlAjCazcg1me8iB/E= -k8s.io/apimachinery v0.25.0 h1:MlP0r6+3XbkUG2itd6vp3oxbtdQLQI94fD5gCS+gnoU= -k8s.io/apimachinery v0.25.0/go.mod h1:qMx9eAk0sZQGsXGu86fab8tZdffHbwUfsvzqKn4mfB0= -k8s.io/client-go v0.25.0 h1:CVWIaCETLMBNiTUta3d5nzRbXvY5Hy9Dpl+VvREpu5E= -k8s.io/client-go v0.25.0/go.mod h1:lxykvypVfKilxhTklov0wz1FoaUZ8X4EwbhS6rpRfN8= -k8s.io/component-base v0.25.0 h1:haVKlLkPCFZhkcqB6WCvpVxftrg6+FK5x1ZuaIDaQ5Y= -k8s.io/component-base v0.25.0/go.mod h1:F2Sumv9CnbBlqrpdf7rKZTmmd2meJq0HizeyY/yAFxk= +k8s.io/api v0.25.3 h1:Q1v5UFfYe87vi5H7NU0p4RXC26PPMT8KOpr1TLQbCMQ= +k8s.io/api v0.25.3/go.mod h1:o42gKscFrEVjHdQnyRenACrMtbuJsVdP+WVjqejfzmI= +k8s.io/apiextensions-apiserver v0.25.3 h1:bfI4KS31w2f9WM1KLGwnwuVlW3RSRPuIsfNF/3HzR0k= +k8s.io/apiextensions-apiserver v0.25.3/go.mod h1:ZJqwpCkxIx9itilmZek7JgfUAM0dnTsA48I4krPqRmo= +k8s.io/apimachinery v0.25.3 h1:7o9ium4uyUOM76t6aunP0nZuex7gDf8VGwkR5RcJnQc= +k8s.io/apimachinery v0.25.3/go.mod h1:jaF9C/iPNM1FuLl7Zuy5b9v+n35HGSh6AQ4HYRkCqwo= +k8s.io/client-go v0.25.3 h1:oB4Dyl8d6UbfDHD8Bv8evKylzs3BXzzufLiO27xuPs0= +k8s.io/client-go v0.25.3/go.mod h1:t39LPczAIMwycjcXkVc+CB+PZV69jQuNx4um5ORDjQA= +k8s.io/component-base v0.25.3 h1:UrsxciGdrCY03ULT1h/S/gXFCOPnLhUVwSyx+hM/zq4= +k8s.io/component-base v0.25.3/go.mod h1:WYoS8L+IlTZgU7rhAl5Ctpw0WdMxDfCC5dkxcEFa/TI= k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= -k8s.io/klog/v2 v2.70.1 h1:7aaoSdahviPmR+XkS7FyxlkkXs6tHISSG03RxleQAVQ= -k8s.io/klog/v2 v2.70.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/klog/v2 v2.80.1 h1:atnLQ121W371wYYFawwYx1aEY2eUfs4l3J72wtgAwV4= +k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1 h1:MQ8BAZPZlWk3S9K4a9NCkIFQtZShWqoha7snGixVgEA= k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1/go.mod h1:C/N6wCaBHeBHkHUesQOQy2/MZqGgMAFPqGsGQLdbZBU= k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed h1:jAne/RjBTyawwAy0utX5eqigAwz/lQhTmy+Hr/Cpue4= @@ -791,8 +792,8 @@ k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/ rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/controller-runtime v0.12.3 h1:FCM8xeY/FI8hoAfh/V4XbbYMY20gElh9yh+A98usMio= -sigs.k8s.io/controller-runtime v0.12.3/go.mod h1:qKsk4WE6zW2Hfj0G4v10EnNB2jMG1C+NTb8h+DwCoU0= +sigs.k8s.io/controller-runtime v0.13.0 h1:iqa5RNciy7ADWnIc8QxCbOX5FEKVR3uxVxKHRMc2WIQ= +sigs.k8s.io/controller-runtime v0.13.0/go.mod h1:Zbz+el8Yg31jubvAEyglRZGdLAjplZl+PgtYNI6WNTI= sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 h1:iXTIw73aPyC+oRdyqqvVJuloN1p0AC/kzH07hu3NE+k= sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= From d015895caabe5088a78baffd996ae5e671f0ee8a Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Thu, 20 Oct 2022 15:40:57 +0300 Subject: [PATCH 271/818] RFC-0002: Add Cosign verification for Helm OCI charts Signed-off-by: Stefan Prodan --- rfcs/0002-helm-oci/README.md | 50 ++++++++++++++++++++++++++++++++++-- 1 file changed, 48 insertions(+), 2 deletions(-) diff --git a/rfcs/0002-helm-oci/README.md b/rfcs/0002-helm-oci/README.md index 7c6c5b72..518eaae5 100644 --- a/rfcs/0002-helm-oci/README.md +++ b/rfcs/0002-helm-oci/README.md @@ -4,7 +4,7 @@ **Creation date:** 2022-03-30 -**Last update:** 2022-08-24 +**Last update:** 2022-10-20 ## Summary @@ -22,6 +22,7 @@ they do today for container images. ### Goals - Add support for fetching Helm charts stored as OCI artifacts with minimal API changes to Flux. +- Add support for verifying the authenticity of Helm OCI charts signed with Cosign. - Make it easy for users to switch from [HTTP/S Helm repositories](https://github.com/helm/helm-www/blob/416fabea6ffab8dc156b6a0c5eb5e8df5f5ef7dc/content/en/docs/topics/chart_repository.md) to OCI repositories. @@ -40,7 +41,6 @@ Introduce an optional field called `provider` for [context-based authorization](https://fluxcd.io/flux/security/contextual-authorization/) to AWS, Azure and Google Cloud. The `spec.provider` is ignored when `spec.type` is set to `default`. - ### Pull charts from private repositories #### Basic auth @@ -92,6 +92,51 @@ controller will use a specific cloud SDK for authentication purposes. If both `spec.secretRef` and a non-generic provider are present in the definition, the controller will use the static credentials from the referenced secret. +### Verify Helm charts + +To verify the authenticity of the Helm OCI charts, Flux will use the Sigstore Go SDK and implement verification +for artifacts which were either signed with keys generated by Cosign or signed using the Cosign +[keyless method](https://github.com/sigstore/cosign/blob/main/KEYLESS.md). + +To enable signature verification, the Cosign public keys can be supplied with: + +```yaml +apiVersion: source.toolkit.fluxcd.io/v1beta2 +kind: HelmChart +metadata: + name: +spec: + verify: + provider: cosign + secretRef: + name: cosign-public-keys +``` + +Note that the Kubernetes secret containing the Cosign public keys, must use `.pub` extension: + +```yaml +apiVersion: v1 +kind: Secret +metadata: + name: cosign-public-keys +type: Opaque +stringData: + key1.pub: + key2.pub: +``` + +For verifying public Helm charts which are signed using the keyless method, +the `spec.verify.secretRef` field must be omitted: + +```yaml +spec: + verify: + provider: cosign +``` + +When using the keyless method, Flux will verify the signatures in the Rekor +transparency log instance hosted at [rekor.sigstore.dev](https://rekor.sigstore.dev/). + ### User Stories #### Story 1 @@ -231,6 +276,7 @@ The feature is enabled by default. * **2022-06-06** First implementation released with [flux2 v0.31.0](https://github.com/fluxcd/flux2/releases/tag/v0.31.0) * **2022-08-11** Resolve chart dependencies from OCI released with [flux2 v0.32.0](https://github.com/fluxcd/flux2/releases/tag/v0.32.0) * **2022-08-29** Contextual login for AWS, Azure and GCP released with [flux2 v0.33.0](https://github.com/fluxcd/flux2/releases/tag/v0.33.0) +* **2022-10-21** Verifying Helm charts with Cosign released with [flux2 v0.36.0](https://github.com/fluxcd/flux2/releases/tag/v0.36.0) ### TODOs From 1d8105247a5b5b10928378117e377d73a92a3cd9 Mon Sep 17 00:00:00 2001 From: Sanskar Jaiswal Date: Thu, 8 Sep 2022 09:54:21 +0530 Subject: [PATCH 272/818] add RFC for blocking insecure HTTP connections across Flux Signed-off-by: Sanskar Jaiswal --- rfcs/0004-insecure-http/README.md | 91 +++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 rfcs/0004-insecure-http/README.md diff --git a/rfcs/0004-insecure-http/README.md b/rfcs/0004-insecure-http/README.md new file mode 100644 index 00000000..73bc2058 --- /dev/null +++ b/rfcs/0004-insecure-http/README.md @@ -0,0 +1,91 @@ +# RFC-0004 Block insecure HTTP connections across Flux + +**Status:** provisional + +**Creation Date:** 2022-09-08 + +## Summary +Flux should have a consistent way of disabling insecure HTTP connections. + +At the controller level, a flag should be present which would disable all outgoing HTTP connections. +At the object level, a field should be provided which would enable the use of non-TLS endpoints. + +If the use of a non-TLS endpoint is not supported, it should be made clear to users through the use of +logs and status conditions. + +## Motivation +Today the use of non-TLS based connections is inconsistent across Flux controllers. + +Controllers that deal only with `http` and `https` schemes have no way to block use of the `http` scheme at controller-level. +Some Flux objects provide a `.spec.insecure` field to enable the use of non-TLS based endpoints, but they don't clearly notify users when the option is not supported (e.g. Azure/GCP Buckets). + +### Goals +* Provide a flag across all Flux controllers which disables all outgoing HTTP connections. +* Add a field which enables the use of non-TLS endpoints to appropriate Flux objects. +* Provide a way for users to be made aware that their use of non-TLS endpoints is not supported if that is the case. + +### Non-Goals +* Break Flux's current behavior of allowing HTTP connections. + +## Proposal + +### Controllers +Flux users should be able to enforce that controllers are using HTTPS connections only. +This shall be enabled by adding a new boolean flag `--allow-insecure-http` to the following controllers: +* source-controller +* notification-controller +* image-automation-controller +* image-reflector-controller + +> Note: The flag shall not be added to the following controllers: +> * kustomize-controller: This flag is excluded from this controller, as the upstream `kubenetes-sigs/kustomize` project +> does not support disabling HTTP connections while fetching resources from remote bases. We can revisit this if the +> upstream project adds support for this at a later point in time. +> * helm-controller: This flag does not serve a purpose in this controller, as the controller does not make any HTTP calls. +> Furthermore although both controllers can also do remote applies, serving `kube-apiserver` over plain +> HTTP is disabled by default. While technically this can be enabled, the option for this configuration was also disabled +> quite a while back (ref: https://github.com/kubernetes/kubernetes/pull/65830/). + +The default value of this flag shall be `true`. This would ensure that there is no breaking change with controllers +still being able to access non-TLS endpoints. To disable this behavior and enforce the use of HTTPS connections, users would +have to explicitly pass the flag to the controller: + +```yaml +spec: + template: + spec: + containers: + - name: manager + image: fluxcd/source-controller + args: + - --watch-all-namespaces + - --log-level=info + - --log-encoding=json + - --enable-leader-election + - --storage-path=/data + - --storage-adv-addr=source-controller.$(RUNTIME_NAMESPACE).svc.cluster.local. + - --allow-insecure-http=false +``` + +### Objects +Some Flux objects, like `GitRepository`, provide a field for specifying a URL, and the URL would contain the scheme. +In such cases, the scheme can be used for inferring the transport type of the connection and consequently, +whether to use HTTP or HTTPS connections for that object. +But there are a few objects that don't allow such behavior, for example: + +* `ImageRepository`: It provides a field, `.spec.image`, which is used for specifying the URL of the image present on +a container registry. But any URL containing a scheme is considered invalid and HTTPS is the default transport used. +This prevents users from using images present on insecure registries. +* OCI `HelmRepository`: When using an OCI registry as a Helm repository, the `.spec.url` is expected to begin with `oci://`. +Since the scheme part of the URL is used to specify the type of `HelmRepository`, there is no way for users to specify +that the registry is hosted at a non-TLS endpoint. + +For such objects, we shall introduce a new boolean field `.spec.insecure`, which shall be `false` by default. Users that +need their object to point to an HTTP endpoint, can set this to `true`. + +### Precedence & Validity +Objects with `.spec.insecure` as `true ` will only be allowed if HTTP connections are allowed at the controller level. +Similarly, an object can have `.spec.insecure` as `true` only if the Saas/Cloud provider allows HTTP connections. +For example, using a `Bucket` with its `.spec.provider` set to `azure` would be invalid since Azure doesn't allow +HTTP connections. + From d2e7a37eb4040be1c8e67640958dadc892197384 Mon Sep 17 00:00:00 2001 From: Sanskar Jaiswal Date: Thu, 8 Sep 2022 09:54:52 +0530 Subject: [PATCH 273/818] add user stories and alternatives for insecure HTTP RFC Signed-off-by: Sanskar Jaiswal --- rfcs/0004-insecure-http/README.md | 47 +++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/rfcs/0004-insecure-http/README.md b/rfcs/0004-insecure-http/README.md index 73bc2058..5f463ab4 100644 --- a/rfcs/0004-insecure-http/README.md +++ b/rfcs/0004-insecure-http/README.md @@ -89,3 +89,50 @@ Similarly, an object can have `.spec.insecure` as `true` only if the Saas/Cloud For example, using a `Bucket` with its `.spec.provider` set to `azure` would be invalid since Azure doesn't allow HTTP connections. + +### User Stories + +#### Story 1 +> As a cluster admin of a multi-tenant cluster, I want to ensure all controllers access endpoints using only HTTPS +> regardless of tenants' object definitions. + +Apply a `kustomize` patch which prevents the use of HTTP connections: + +```yaml +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: + - gotk-components.yaml + - gotk-sync.yaml +patches: + - patch: | + - op: add + path: /spec/template/spec/containers/0/args/- + value: --allow-insecure-http=false + target: + kind: Deployment + name: "(kustomize-controller|helm-controller|source-controller|notification-controller)" +``` + +#### Story 2 +> As an application developer, I'm trying to debug a new image pushed to my local registry which +> is not served over HTTPS. + +Modify the object spec to use HTTP connections explicitly: +```yaml +apiVersion: image.toolkit.fluxcd.io/v1beta1 +kind: ImageRepository +metadata: + name: podinfo + namespace: flux-system +spec: + image: kind-registry:5000/stefanprodan/podinfo + interval: 1m0s + insecure: true +``` + +### Alternatives +Instead of adding a flag, we can instruct users to make use of Kyverno policies to enforce that +all objects have `.spec.insecure` as `false` and any URLs present in the definition don't have `http` +as the scheme. This is less attractive, as this would ask users to install another software and prevent +Flux multi-tenancy from being standalone. From 6c7ef96354880408d263f610ff82dcac4f22a4ec Mon Sep 17 00:00:00 2001 From: Sanskar Jaiswal Date: Thu, 8 Sep 2022 09:55:49 +0530 Subject: [PATCH 274/818] add design details for insecure HTTP RFC Signed-off-by: Sanskar Jaiswal --- rfcs/0004-insecure-http/README.md | 34 +++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/rfcs/0004-insecure-http/README.md b/rfcs/0004-insecure-http/README.md index 5f463ab4..55188260 100644 --- a/rfcs/0004-insecure-http/README.md +++ b/rfcs/0004-insecure-http/README.md @@ -136,3 +136,37 @@ Instead of adding a flag, we can instruct users to make use of Kyverno policies all objects have `.spec.insecure` as `false` and any URLs present in the definition don't have `http` as the scheme. This is less attractive, as this would ask users to install another software and prevent Flux multi-tenancy from being standalone. + +## Design Details +If a controller is started with `--insecure-allow-http=false`, any URL in a Flux object which has `http` +as the scheme will result in an error and the following condition will be added to the object's +`.status.conditions`: + +```yaml +status: + conditions: + - lastTransitionTime: "2022-09-06T09:14:21Z" + message: "Use of insecure HTTP connections isn't allowed for this controller" + observedGeneration: 1 + reason: URLInvalid + status: "True" + type: FetchFailedCondition +``` + +Similarly, if an object has `.spec.insecure` as `true` but the Cloud provider doesn't allow HTTP connections, +the reconciler will error out and add the condition below to the object's `.status.conditions`: + +```yaml +status: + conditions: + - lastTransitionTime: "2022-09-06T09:14:21Z" + message: "Use of insecure HTTP connections isn't allowed for Azure Storage" + observedGeneration: 1 + reason: InsecureConnectionsDisallowed + status: "True" + type: FetchFailedCondition +``` + +If an object has `.spec.insecure` as `true`, the registry client or bucket client shall be created with the use +of HTTP connections enabled explicitly. + From 7a1d978339760115dad1c3b478f09eade871781d Mon Sep 17 00:00:00 2001 From: Sanskar Jaiswal Date: Thu, 8 Sep 2022 12:38:32 +0530 Subject: [PATCH 275/818] add details about CLI in insecure HTTP RFC Signed-off-by: Sanskar Jaiswal --- rfcs/0004-insecure-http/README.md | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/rfcs/0004-insecure-http/README.md b/rfcs/0004-insecure-http/README.md index 55188260..6a838f1a 100644 --- a/rfcs/0004-insecure-http/README.md +++ b/rfcs/0004-insecure-http/README.md @@ -83,6 +83,20 @@ that the registry is hosted at a non-TLS endpoint. For such objects, we shall introduce a new boolean field `.spec.insecure`, which shall be `false` by default. Users that need their object to point to an HTTP endpoint, can set this to `true`. +### CLI +The Flux CLI offers several commands for creating Flux specific resources. Some of these commands may involve specifying +an endpoint such as creating an `OCIRepository`: + +```sh + flux create source oci podinfo \ + --url=oci://ghcr.io/stefanprodan/manifests/podinfo \ + --tag=6.1.6 \ + --interval=10m +``` + +Since these commands essentially create object definitions, the CLI should offer a boolean flag `--insecure` +for relevant objects, which will be used for specifying the value of `.spec.insecure` of such objects. + ### Precedence & Validity Objects with `.spec.insecure` as `true ` will only be allowed if HTTP connections are allowed at the controller level. Similarly, an object can have `.spec.insecure` as `true` only if the Saas/Cloud provider allows HTTP connections. @@ -137,9 +151,9 @@ all objects have `.spec.insecure` as `false` and any URLs present in the definit as the scheme. This is less attractive, as this would ask users to install another software and prevent Flux multi-tenancy from being standalone. -## Design Details +## Design Details If a controller is started with `--insecure-allow-http=false`, any URL in a Flux object which has `http` -as the scheme will result in an error and the following condition will be added to the object's +as the scheme will result in an error and the following condition will be added to the object's `.status.conditions`: ```yaml From 7a5f60e23f62380d49d1123168435129a236785c Mon Sep 17 00:00:00 2001 From: Sanskar Jaiswal Date: Mon, 12 Sep 2022 13:42:53 +0530 Subject: [PATCH 276/818] address concerns about kustomize and helm controller Signed-off-by: Sanskar Jaiswal --- rfcs/0004-insecure-http/README.md | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/rfcs/0004-insecure-http/README.md b/rfcs/0004-insecure-http/README.md index 6a838f1a..15f328da 100644 --- a/rfcs/0004-insecure-http/README.md +++ b/rfcs/0004-insecure-http/README.md @@ -20,7 +20,7 @@ Controllers that deal only with `http` and `https` schemes have no way to block Some Flux objects provide a `.spec.insecure` field to enable the use of non-TLS based endpoints, but they don't clearly notify users when the option is not supported (e.g. Azure/GCP Buckets). ### Goals -* Provide a flag across all Flux controllers which disables all outgoing HTTP connections. +* Provide a flag across relevant Flux controllers which disables all outgoing HTTP connections. * Add a field which enables the use of non-TLS endpoints to appropriate Flux objects. * Provide a way for users to be made aware that their use of non-TLS endpoints is not supported if that is the case. @@ -95,7 +95,10 @@ an endpoint such as creating an `OCIRepository`: ``` Since these commands essentially create object definitions, the CLI should offer a boolean flag `--insecure` -for relevant objects, which will be used for specifying the value of `.spec.insecure` of such objects. +for the required commands, which will be used for specifying the value of `.spec.insecure` of such objects. + +> Note: This flag should not be confused with `--insecure-skip-tls-verify` which is meant to skip TLS verification +> when using an HTTPS connection. ### Precedence & Validity Objects with `.spec.insecure` as `true ` will only be allowed if HTTP connections are allowed at the controller level. @@ -103,7 +106,6 @@ Similarly, an object can have `.spec.insecure` as `true` only if the Saas/Cloud For example, using a `Bucket` with its `.spec.provider` set to `azure` would be invalid since Azure doesn't allow HTTP connections. - ### User Stories #### Story 1 @@ -125,7 +127,17 @@ patches: value: --allow-insecure-http=false target: kind: Deployment - name: "(kustomize-controller|helm-controller|source-controller|notification-controller)" + name: "(source-controller|notification-controller|image-reflector-controller|image-automation-controller)" + # Since this above flag is not available in kustomize-controller for reasons explained in a previous section, + # we disable the Kustomize remote build by disallowing use of remote bases. This ensures that kustomize-controller + # won't initiate any plain HTTP connections. + - patch: | + - op: add + path: /spec/template/spec/containers/0/args/- + value: --no-remote-bases=true + target: + kind: Deployment + name: kustomize-controller ``` #### Story 2 From 443212d3daa8cef54a0787a89d4bf8ae72c3973a Mon Sep 17 00:00:00 2001 From: Sanskar Jaiswal Date: Thu, 29 Sep 2022 17:43:51 +0530 Subject: [PATCH 277/818] rename flag and propose renaming insecure-kubeconfig-tls Signed-off-by: Sanskar Jaiswal --- rfcs/0004-insecure-http/README.md | 32 ++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/rfcs/0004-insecure-http/README.md b/rfcs/0004-insecure-http/README.md index 15f328da..c20a1705 100644 --- a/rfcs/0004-insecure-http/README.md +++ b/rfcs/0004-insecure-http/README.md @@ -17,7 +17,8 @@ logs and status conditions. Today the use of non-TLS based connections is inconsistent across Flux controllers. Controllers that deal only with `http` and `https` schemes have no way to block use of the `http` scheme at controller-level. -Some Flux objects provide a `.spec.insecure` field to enable the use of non-TLS based endpoints, but they don't clearly notify users when the option is not supported (e.g. Azure/GCP Buckets). +Some Flux objects provide a `.spec.insecure` field to enable the use of non-TLS based endpoints, but they don't clearly notify +users when the option is not supported (e.g. Azure/GCP Buckets). ### Goals * Provide a flag across relevant Flux controllers which disables all outgoing HTTP connections. @@ -26,26 +27,18 @@ Some Flux objects provide a `.spec.insecure` field to enable the use of non-TLS ### Non-Goals * Break Flux's current behavior of allowing HTTP connections. +* Change in behavior of communication between Flux components. ## Proposal ### Controllers Flux users should be able to enforce that controllers are using HTTPS connections only. -This shall be enabled by adding a new boolean flag `--allow-insecure-http` to the following controllers: +This shall be enabled by adding a new boolean flag `--insecure-allow-http` to the following controllers: * source-controller * notification-controller * image-automation-controller * image-reflector-controller -> Note: The flag shall not be added to the following controllers: -> * kustomize-controller: This flag is excluded from this controller, as the upstream `kubenetes-sigs/kustomize` project -> does not support disabling HTTP connections while fetching resources from remote bases. We can revisit this if the -> upstream project adds support for this at a later point in time. -> * helm-controller: This flag does not serve a purpose in this controller, as the controller does not make any HTTP calls. -> Furthermore although both controllers can also do remote applies, serving `kube-apiserver` over plain -> HTTP is disabled by default. While technically this can be enabled, the option for this configuration was also disabled -> quite a while back (ref: https://github.com/kubernetes/kubernetes/pull/65830/). - The default value of this flag shall be `true`. This would ensure that there is no breaking change with controllers still being able to access non-TLS endpoints. To disable this behavior and enforce the use of HTTPS connections, users would have to explicitly pass the flag to the controller: @@ -64,9 +57,22 @@ spec: - --enable-leader-election - --storage-path=/data - --storage-adv-addr=source-controller.$(RUNTIME_NAMESPACE).svc.cluster.local. - - --allow-insecure-http=false + - --insecure-allow-http=false ``` +> Note: The flag shall not be added to the following controllers: +> * kustomize-controller: This flag is excluded from this controller, as the upstream `kubenetes-sigs/kustomize` project +> does not support disabling HTTP connections while fetching resources from remote bases. We can revisit this if the +> upstream project adds support for this at a later point in time. +> * helm-controller: This flag does not serve a purpose in this controller, as the controller does not make any HTTP calls. +> Furthermore although both controllers can also do remote applies, serving `kube-apiserver` over plain +> HTTP is disabled by default. While technically this can be enabled, the option for this configuration was also disabled +> quite a while back (ref: https://github.com/kubernetes/kubernetes/pull/65830/). + +Both kustomize-controller and helm-controller currently have a flag `--insecure-kubeconfig-tls` which makes the controller skip +TLS verification when connecting to a Kubernetes cluster with an HTTPS connection. This flag shall be renamed to +`--insecure-skip-tls-verify` to align it with the Flux CLI which offers this command for the same purpose. + ### Objects Some Flux objects, like `GitRepository`, provide a field for specifying a URL, and the URL would contain the scheme. In such cases, the scheme can be used for inferring the transport type of the connection and consequently, @@ -124,7 +130,7 @@ patches: - patch: | - op: add path: /spec/template/spec/containers/0/args/- - value: --allow-insecure-http=false + value: --insecure-allow-http=false target: kind: Deployment name: "(source-controller|notification-controller|image-reflector-controller|image-automation-controller)" From a17210f3878512f4579b4c51362f5457685f145b Mon Sep 17 00:00:00 2001 From: Sanskar Jaiswal Date: Wed, 12 Oct 2022 15:20:55 +0530 Subject: [PATCH 278/818] add implementation history section Signed-off-by: Sanskar Jaiswal --- rfcs/0004-insecure-http/README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/rfcs/0004-insecure-http/README.md b/rfcs/0004-insecure-http/README.md index c20a1705..533db0ae 100644 --- a/rfcs/0004-insecure-http/README.md +++ b/rfcs/0004-insecure-http/README.md @@ -202,3 +202,8 @@ status: If an object has `.spec.insecure` as `true`, the registry client or bucket client shall be created with the use of HTTP connections enabled explicitly. +## Implementation History + +**2022-08-12** Allow defining OCI sources for non-TLS container registries with `flux create source oci --insecure` +released with [flux2 v0.34.0](https://github.com/fluxcd/flux2/releases/tag/v0.34.0) + From f3da59e5af12264e6bf3653dc3b4bf406844512a Mon Sep 17 00:00:00 2001 From: Sanskar Jaiswal Date: Fri, 14 Oct 2022 11:00:05 +0530 Subject: [PATCH 279/818] fix markdown formatting and update status conditions Signed-off-by: Sanskar Jaiswal --- rfcs/0004-insecure-http/README.md | 56 ++++++++++++++++++------------- 1 file changed, 32 insertions(+), 24 deletions(-) diff --git a/rfcs/0004-insecure-http/README.md b/rfcs/0004-insecure-http/README.md index 533db0ae..9e073916 100644 --- a/rfcs/0004-insecure-http/README.md +++ b/rfcs/0004-insecure-http/README.md @@ -5,15 +5,17 @@ **Creation Date:** 2022-09-08 ## Summary + Flux should have a consistent way of disabling insecure HTTP connections. At the controller level, a flag should be present which would disable all outgoing HTTP connections. At the object level, a field should be provided which would enable the use of non-TLS endpoints. -If the use of a non-TLS endpoint is not supported, it should be made clear to users through the use of -logs and status conditions. +If the use of a non-TLS endpoint is not supported, reconciliation will fail and the object will be marked +as stalled, signalling that human intervention is required. ## Motivation + Today the use of non-TLS based connections is inconsistent across Flux controllers. Controllers that deal only with `http` and `https` schemes have no way to block use of the `http` scheme at controller-level. @@ -21,17 +23,20 @@ Some Flux objects provide a `.spec.insecure` field to enable the use of non-TLS users when the option is not supported (e.g. Azure/GCP Buckets). ### Goals + * Provide a flag across relevant Flux controllers which disables all outgoing HTTP connections. * Add a field which enables the use of non-TLS endpoints to appropriate Flux objects. * Provide a way for users to be made aware that their use of non-TLS endpoints is not supported if that is the case. ### Non-Goals + * Break Flux's current behavior of allowing HTTP connections. * Change in behavior of communication between Flux components. ## Proposal ### Controllers + Flux users should be able to enforce that controllers are using HTTPS connections only. This shall be enabled by adding a new boolean flag `--insecure-allow-http` to the following controllers: * source-controller @@ -60,27 +65,24 @@ spec: - --insecure-allow-http=false ``` -> Note: The flag shall not be added to the following controllers: -> * kustomize-controller: This flag is excluded from this controller, as the upstream `kubenetes-sigs/kustomize` project -> does not support disabling HTTP connections while fetching resources from remote bases. We can revisit this if the -> upstream project adds support for this at a later point in time. -> * helm-controller: This flag does not serve a purpose in this controller, as the controller does not make any HTTP calls. -> Furthermore although both controllers can also do remote applies, serving `kube-apiserver` over plain -> HTTP is disabled by default. While technically this can be enabled, the option for this configuration was also disabled -> quite a while back (ref: https://github.com/kubernetes/kubernetes/pull/65830/). - -Both kustomize-controller and helm-controller currently have a flag `--insecure-kubeconfig-tls` which makes the controller skip -TLS verification when connecting to a Kubernetes cluster with an HTTPS connection. This flag shall be renamed to -`--insecure-skip-tls-verify` to align it with the Flux CLI which offers this command for the same purpose. +**Note:** The flag shall not be added to the following controllers: +* kustomize-controller: This flag is excluded from this controller, as the upstream `kubenetes-sigs/kustomize` project +does not support disabling HTTP connections while fetching resources from remote bases. We can revisit this if the +upstream project adds support for this at a later point in time. +* helm-controller: This flag does not serve a purpose in this controller, as the controller does not make any HTTP calls. +Furthermore although both controllers can also do remote applies, serving `kube-apiserver` over plain +HTTP is disabled by default. While technically this can be enabled, the option for this configuration was also disabled +quite a while back (ref: https://github.com/kubernetes/kubernetes/pull/65830/). ### Objects + Some Flux objects, like `GitRepository`, provide a field for specifying a URL, and the URL would contain the scheme. In such cases, the scheme can be used for inferring the transport type of the connection and consequently, whether to use HTTP or HTTPS connections for that object. But there are a few objects that don't allow such behavior, for example: -* `ImageRepository`: It provides a field, `.spec.image`, which is used for specifying the URL of the image present on -a container registry. But any URL containing a scheme is considered invalid and HTTPS is the default transport used. +* `ImageRepository`: It provides a field, `.spec.image`, which is used for specifying the address of the image present on +a container registry. But any address containing a scheme is considered invalid and HTTPS is the default transport used. This prevents users from using images present on insecure registries. * OCI `HelmRepository`: When using an OCI registry as a Helm repository, the `.spec.url` is expected to begin with `oci://`. Since the scheme part of the URL is used to specify the type of `HelmRepository`, there is no way for users to specify @@ -90,6 +92,7 @@ For such objects, we shall introduce a new boolean field `.spec.insecure`, which need their object to point to an HTTP endpoint, can set this to `true`. ### CLI + The Flux CLI offers several commands for creating Flux specific resources. Some of these commands may involve specifying an endpoint such as creating an `OCIRepository`: @@ -107,6 +110,7 @@ for the required commands, which will be used for specifying the value of `.spec > when using an HTTPS connection. ### Precedence & Validity + Objects with `.spec.insecure` as `true ` will only be allowed if HTTP connections are allowed at the controller level. Similarly, an object can have `.spec.insecure` as `true` only if the Saas/Cloud provider allows HTTP connections. For example, using a `Bucket` with its `.spec.provider` set to `azure` would be invalid since Azure doesn't allow @@ -115,6 +119,7 @@ HTTP connections. ### User Stories #### Story 1 + > As a cluster admin of a multi-tenant cluster, I want to ensure all controllers access endpoints using only HTTPS > regardless of tenants' object definitions. @@ -134,8 +139,8 @@ patches: target: kind: Deployment name: "(source-controller|notification-controller|image-reflector-controller|image-automation-controller)" - # Since this above flag is not available in kustomize-controller for reasons explained in a previous section, - # we disable the Kustomize remote build by disallowing use of remote bases. This ensures that kustomize-controller + # Since the above flag is not available in kustomize-controller for reasons explained in a previous section, + # we disable Kustomize remote builds by disallowing use of remote bases. This ensures that kustomize-controller # won't initiate any plain HTTP connections. - patch: | - op: add @@ -147,6 +152,7 @@ patches: ``` #### Story 2 + > As an application developer, I'm trying to debug a new image pushed to my local registry which > is not served over HTTPS. @@ -164,14 +170,16 @@ spec: ``` ### Alternatives + Instead of adding a flag, we can instruct users to make use of Kyverno policies to enforce that all objects have `.spec.insecure` as `false` and any URLs present in the definition don't have `http` as the scheme. This is less attractive, as this would ask users to install another software and prevent Flux multi-tenancy from being standalone. ## Design Details + If a controller is started with `--insecure-allow-http=false`, any URL in a Flux object which has `http` -as the scheme will result in an error and the following condition will be added to the object's +as the scheme will result in an unsuccessful reconciliation and the following condition will be added to the object's `.status.conditions`: ```yaml @@ -180,13 +188,13 @@ status: - lastTransitionTime: "2022-09-06T09:14:21Z" message: "Use of insecure HTTP connections isn't allowed for this controller" observedGeneration: 1 - reason: URLInvalid + reason: InsecureConnectionsDisallowed status: "True" - type: FetchFailedCondition + type: Stalled ``` Similarly, if an object has `.spec.insecure` as `true` but the Cloud provider doesn't allow HTTP connections, -the reconciler will error out and add the condition below to the object's `.status.conditions`: +the reconciliation will fail and the following condition will be added to the object's `.status.conditions`: ```yaml status: @@ -194,9 +202,9 @@ status: - lastTransitionTime: "2022-09-06T09:14:21Z" message: "Use of insecure HTTP connections isn't allowed for Azure Storage" observedGeneration: 1 - reason: InsecureConnectionsDisallowed + reason: UnsupportedConnectionType status: "True" - type: FetchFailedCondition + type: Stalled ``` If an object has `.spec.insecure` as `true`, the registry client or bucket client shall be created with the use From 98c7afd69c3cea97a7aecec2ed588729e2d608ec Mon Sep 17 00:00:00 2001 From: Sanskar Jaiswal Date: Tue, 18 Oct 2022 14:32:32 +0530 Subject: [PATCH 280/818] add last updated date and mark as implementable Signed-off-by: Sanskar Jaiswal --- rfcs/0004-insecure-http/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/rfcs/0004-insecure-http/README.md b/rfcs/0004-insecure-http/README.md index 9e073916..bcf9782a 100644 --- a/rfcs/0004-insecure-http/README.md +++ b/rfcs/0004-insecure-http/README.md @@ -1,9 +1,11 @@ # RFC-0004 Block insecure HTTP connections across Flux -**Status:** provisional +**Status:** implementable **Creation Date:** 2022-09-08 +**Last update:** 2022-10-21 + ## Summary Flux should have a consistent way of disabling insecure HTTP connections. From 1a6b09afb420bea9c2a8809fe56dde8d61de8851 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 31 Oct 2022 00:45:59 +0000 Subject: [PATCH 281/818] Bump actions/setup-go from 2 to 3 Bumps [actions/setup-go](https://github.com/actions/setup-go) from 2 to 3. - [Release notes](https://github.com/actions/setup-go/releases) - [Commits](https://github.com/actions/setup-go/compare/v2...v3) --- updated-dependencies: - dependency-name: actions/setup-go dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/e2e-azure.yaml | 2 +- .github/workflows/scan.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/e2e-azure.yaml b/.github/workflows/e2e-azure.yaml index 3c3f2dba..d7a595e8 100644 --- a/.github/workflows/e2e-azure.yaml +++ b/.github/workflows/e2e-azure.yaml @@ -24,7 +24,7 @@ jobs: restore-keys: | ${{ runner.os }}-go1.18- - name: Setup Go - uses: actions/setup-go@v2 + uses: actions/setup-go@v3 with: go-version: 1.19.x - name: Install libgit2 diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index fc977084..3156d81c 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -58,7 +58,7 @@ jobs: - name: Checkout repository uses: actions/checkout@v3 - name: Set up Go - uses: actions/setup-go@v2 + uses: actions/setup-go@v3 with: go-version: 1.19.x - name: Initialize CodeQL From 78f9a6214cfa4248f7a4468e483b0297d6136f3b Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Fri, 4 Nov 2022 14:14:37 +0200 Subject: [PATCH 282/818] Refactor ARM64 e2e test suite - Migrate the GitHub runners to Equinix c3.large.arm64 instances - Run the test suite on all supported Kubernetes versions - Add multi-tenancy smoke test Signed-off-by: Stefan Prodan --- .github/runners/README.md | 34 ++++++++++++++++---------- .github/runners/prereq.sh | 12 ++++++--- .github/runners/runner-setup.sh | 2 +- .github/workflows/e2e-arm64.yaml | 42 +++++++++++++++++++++++++++++--- 4 files changed, 68 insertions(+), 22 deletions(-) diff --git a/.github/runners/README.md b/.github/runners/README.md index a7964234..440c6865 100644 --- a/.github/runners/README.md +++ b/.github/runners/README.md @@ -1,24 +1,32 @@ # Flux ARM64 GitHub runners -The Flux ARM64 end-to-end tests run on Equinix instances provisioned with Docker and GitHub self-hosted runners. +The Flux ARM64 end-to-end tests run on Equinix Metal instances provisioned with Docker and GitHub self-hosted runners. ## Current instances -| Runner | Instance | Region | -|---------------|---------------------|--------| -| equinix-arm-1 | flux-equinix-arm-01 | AMS1 | -| equinix-arm-2 | flux-equinix-arm-01 | AMS1 | -| equinix-arm-3 | flux-equinix-arm-01 | AMS1 | -| equinix-arm-4 | flux-equinix-arm-02 | DFW2 | -| equinix-arm-5 | flux-equinix-arm-02 | DFW2 | -| equinix-arm-6 | flux-equinix-arm-02 | DFW2 | +| Repository | Runner | Instance | Location | +|-----------------------------|------------------|------------------------|---------------| +| flux2 | equinix-arm-dc-1 | flux-equinix-arm-dc-01 | Washington DC | +| flux2 | equinix-arm-dc-2 | flux-equinix-arm-dc-01 | Washington DC | +| flux2 | equinix-arm-da-1 | flux-equinix-arm-da-01 | Dallas | +| flux2 | equinix-arm-da-2 | flux-equinix-arm-da-01 | Dallas | +| source-controller | equinix-arm-dc-1 | flux-equinix-arm-dc-01 | Washington DC | +| source-controller | equinix-arm-da-1 | flux-equinix-arm-da-01 | Dallas | +| image-automation-controller | equinix-arm-dc-1 | flux-equinix-arm-dc-01 | Washington DC | +| image-automation-controller | equinix-arm-da-1 | flux-equinix-arm-da-01 | Dallas | + +Instance spec: +- Ampere Altra Q80-30 80-core processor @ 2.8GHz +- 2 x 960GB NVME +- 256GB RAM +- 2 x 25Gbps ## Instance setup In order to add a new runner to the GitHub Actions pool, first create a server on Equinix with the following configuration: -- Type: c2.large.arm -- OS: Ubuntu 20.04 +- Type: `c3.large.arm64` +- OS: `Ubuntu 22.04 LTS` ### Install prerequisites @@ -54,14 +62,14 @@ sudo ./prereq.sh - Retrieve the GitHub runner token from the repository [settings page](https://github.com/fluxcd/flux2/settings/actions/runners/new?arch=arm64&os=linux) -- Create 3 directories `runner1`, `runner2`, `runner3` +- Create two directories `flux2-01`, `flux2-02` - In each dir run: ```shell curl -sL https://raw.githubusercontent.com/fluxcd/flux2/main/.github/runners/runner-setup.sh > runner-setup.sh \ && chmod +x ./runner-setup.sh -./runner-setup.sh equinix-arm- +./runner-setup.sh equinix-arm- ``` - Reboot the instance diff --git a/.github/runners/prereq.sh b/.github/runners/prereq.sh index 186adb8e..043876eb 100755 --- a/.github/runners/prereq.sh +++ b/.github/runners/prereq.sh @@ -18,11 +18,11 @@ set -eu -KIND_VERSION=0.14.0 +KIND_VERSION=0.17.0 KUBECTL_VERSION=1.24.0 -KUSTOMIZE_VERSION=4.5.4 -HELM_VERSION=3.8.2 -GITHUB_RUNNER_VERSION=2.291.1 +KUSTOMIZE_VERSION=4.5.7 +HELM_VERSION=3.10.1 +GITHUB_RUNNER_VERSION=2.298.2 PACKAGES="apt-transport-https ca-certificates software-properties-common build-essential libssl-dev gnupg lsb-release jq pkg-config" # install prerequisites @@ -31,6 +31,10 @@ apt-get update \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* +# fix Kubernetes DNS resolution +rm /etc/resolv.conf +cat "/run/systemd/resolve/stub-resolv.conf" | sed '/search/d' > /etc/resolv.conf + # install docker curl -fsSL https://get.docker.com -o get-docker.sh \ && chmod +x get-docker.sh diff --git a/.github/runners/runner-setup.sh b/.github/runners/runner-setup.sh index cef53faf..b13d87e2 100755 --- a/.github/runners/runner-setup.sh +++ b/.github/runners/runner-setup.sh @@ -22,7 +22,7 @@ RUNNER_NAME=$1 REPOSITORY_TOKEN=$2 REPOSITORY_URL=${3:-https://github.com/fluxcd/flux2} -GITHUB_RUNNER_VERSION=2.285.1 +GITHUB_RUNNER_VERSION=2.298.2 # download runner curl -o actions-runner-linux-arm64.tar.gz -L https://github.com/actions/runner/releases/download/v${GITHUB_RUNNER_VERSION}/actions-runner-linux-arm64-${GITHUB_RUNNER_VERSION}.tar.gz \ diff --git a/.github/workflows/e2e-arm64.yaml b/.github/workflows/e2e-arm64.yaml index bafea2fd..4c2de99e 100644 --- a/.github/workflows/e2e-arm64.yaml +++ b/.github/workflows/e2e-arm64.yaml @@ -3,7 +3,7 @@ name: e2e-arm64 on: workflow_dispatch: push: - branches: [ main, update-components ] + branches: [ main, update-components, e2e-arm64* ] permissions: contents: read @@ -13,6 +13,10 @@ jobs: # Hosted on Equinix # Docs: https://github.com/fluxcd/flux2/tree/main/.github/runners runs-on: [self-hosted, Linux, ARM64, equinix] + strategy: + matrix: + # Keep this list up-to-date with https://endoflife.date/kubernetes + KUBERNETES_VERSION: [ 1.23.13, 1.24.7, 1.25.3 ] steps: - name: Checkout uses: actions/checkout@v3 @@ -23,16 +27,46 @@ jobs: - name: Prepare id: prep run: | - echo ::set-output name=CLUSTER::arm64-${GITHUB_SHA:0:7}-$(date +%s) - echo ::set-output name=CONTEXT::kind-arm64-${GITHUB_SHA:0:7}-$(date +%s) + ID=${GITHUB_SHA:0:7}-${{ matrix.KUBERNETES_VERSION }}-$(date +%s) + echo "CLUSTER=arm64-${ID}" >> $GITHUB_OUTPUT - name: Build run: | make build - name: Setup Kubernetes Kind run: | - kind create cluster --name ${{ steps.prep.outputs.CLUSTER }} --kubeconfig=/tmp/${{ steps.prep.outputs.CLUSTER }} + kind create cluster \ + --wait 5m \ + --name ${{ steps.prep.outputs.CLUSTER }} \ + --kubeconfig=/tmp/${{ steps.prep.outputs.CLUSTER }} \ + --image=kindest/node:v${{ matrix.KUBERNETES_VERSION }} - name: Run e2e tests run: TEST_KUBECONFIG=/tmp/${{ steps.prep.outputs.CLUSTER }} make e2e + - name: Run multi-tenancy tests + env: + KUBECONFIG: /tmp/${{ steps.prep.outputs.CLUSTER }} + run: | + ./bin/flux install + ./bin/flux create source git flux-system \ + --interval=15m \ + --url=https://github.com/fluxcd/flux2-multi-tenancy \ + --branch=main \ + --ignore-paths="./clusters/**/flux-system/" + ./bin/flux create kustomization flux-system \ + --interval=15m \ + --source=flux-system \ + --path=./clusters/staging + kubectl -n flux-system wait kustomization/tenants --for=condition=ready --timeout=5m + kubectl -n apps wait kustomization/dev-team --for=condition=ready --timeout=1m + kubectl -n apps wait helmrelease/podinfo --for=condition=ready --timeout=1m + - name: Debug failure + if: failure() + env: + KUBECONFIG: /tmp/${{ steps.prep.outputs.CLUSTER }} + run: | + kubectl -n flux-system get all + kubectl -n flux-system describe po + kubectl -n flux-system logs deploy/source-controller + kubectl -n flux-system logs deploy/kustomize-controller - name: Cleanup if: always() run: | From a4734d7e3085fa9148909c2ebc945c971a425c69 Mon Sep 17 00:00:00 2001 From: Philip Laine Date: Mon, 24 Oct 2022 11:11:33 +0200 Subject: [PATCH 283/818] Remove file reading from bootstrap package Signed-off-by: Philip Laine --- cmd/flux/bootstrap_bitbucket_server.go | 23 +++-- cmd/flux/bootstrap_git.go | 33 ++++---- cmd/flux/bootstrap_github.go | 14 ++-- cmd/flux/bootstrap_gitlab.go | 22 +++-- cmd/flux/create_secret_git.go | 15 +++- cmd/flux/create_secret_helm.go | 37 +++++++-- cmd/flux/create_secret_tls.go | 33 ++++++-- cmd/flux/create_source_git.go | 14 +++- cmd/flux/create_source_helm.go | 25 +++++- pkg/bootstrap/bootstrap_plain_git.go | 13 +-- pkg/bootstrap/git/commit_options.go | 20 +++-- pkg/bootstrap/git/gogit/gogit.go | 18 +--- pkg/bootstrap/git/gogit/gogit_test.go | 19 ++++- pkg/bootstrap/options.go | 35 ++++++-- pkg/manifestgen/sourcesecret/options.go | 17 ++-- pkg/manifestgen/sourcesecret/sourcesecret.go | 83 ++++++++----------- .../sourcesecret/sourcesecret_test.go | 17 +--- 17 files changed, 270 insertions(+), 168 deletions(-) diff --git a/cmd/flux/bootstrap_bitbucket_server.go b/cmd/flux/bootstrap_bitbucket_server.go index be8e0045..af93f8f0 100644 --- a/cmd/flux/bootstrap_bitbucket_server.go +++ b/cmd/flux/bootstrap_bitbucket_server.go @@ -212,19 +212,18 @@ func bootstrapBServerCmdRun(cmd *cobra.Command, args []string) error { secretOpts.Username = bServerArgs.username } secretOpts.Password = bitbucketToken - - if bootstrapArgs.caFile != "" { - secretOpts.CAFilePath = bootstrapArgs.caFile - } + secretOpts.CAFile = caBundle } else { + keypair, err := sourcesecret.LoadKeyPairFromPath(bootstrapArgs.privateKeyFile, gitArgs.password) + if err != nil { + return err + } + secretOpts.Keypair = keypair secretOpts.PrivateKeyAlgorithm = sourcesecret.PrivateKeyAlgorithm(bootstrapArgs.keyAlgorithm) secretOpts.RSAKeyBits = int(bootstrapArgs.keyRSABits) secretOpts.ECDSACurve = bootstrapArgs.keyECDSACurve.Curve - secretOpts.SSHHostname = bServerArgs.hostname - if bootstrapArgs.privateKeyFile != "" { - secretOpts.PrivateKeyPath = bootstrapArgs.privateKeyFile - } + secretOpts.SSHHostname = bServerArgs.hostname if bootstrapArgs.sshHostname != "" { secretOpts.SSHHostname = bootstrapArgs.sshHostname } @@ -243,7 +242,13 @@ func bootstrapBServerCmdRun(cmd *cobra.Command, args []string) error { RecurseSubmodules: bootstrapArgs.recurseSubmodules, } + entityList, err := bootstrap.LoadEntityListFromPath(bootstrapArgs.gpgKeyRingPath) + if err != nil { + return err + } + // Bootstrap config + bootstrapOpts := []bootstrap.GitProviderOption{ bootstrap.WithProviderRepository(bServerArgs.owner, bServerArgs.repository, bServerArgs.personal), bootstrap.WithBranch(bootstrapArgs.branch), @@ -255,7 +260,7 @@ func bootstrapBServerCmdRun(cmd *cobra.Command, args []string) error { bootstrap.WithKubeconfig(kubeconfigArgs, kubeclientOptions), bootstrap.WithLogger(logger), bootstrap.WithCABundle(caBundle), - bootstrap.WithGitCommitSigning(bootstrapArgs.gpgKeyRingPath, bootstrapArgs.gpgPassphrase, bootstrapArgs.gpgKeyID), + bootstrap.WithGitCommitSigning(entityList, bootstrapArgs.gpgPassphrase, bootstrapArgs.gpgKeyID), } if bootstrapArgs.sshHostname != "" { bootstrapOpts = append(bootstrapOpts, bootstrap.WithSSHHostname(bootstrapArgs.sshHostname)) diff --git a/cmd/flux/bootstrap_git.go b/cmd/flux/bootstrap_git.go index e0da5bb4..8d975749 100644 --- a/cmd/flux/bootstrap_git.go +++ b/cmd/flux/bootstrap_git.go @@ -169,6 +169,15 @@ func bootstrapGitCmdRun(cmd *cobra.Command, args []string) error { installOptions.BaseURL = customBaseURL } + var caBundle []byte + if bootstrapArgs.caFile != "" { + var err error + caBundle, err = os.ReadFile(bootstrapArgs.caFile) + if err != nil { + return fmt.Errorf("unable to read TLS CA file: %w", err) + } + } + // Source generation and secret config secretOpts := sourcesecret.Options{ Name: bootstrapArgs.secretName, @@ -179,10 +188,7 @@ func bootstrapGitCmdRun(cmd *cobra.Command, args []string) error { if bootstrapArgs.tokenAuth { secretOpts.Username = gitArgs.username secretOpts.Password = gitArgs.password - - if bootstrapArgs.caFile != "" { - secretOpts.CAFilePath = bootstrapArgs.caFile - } + secretOpts.CAFile = caBundle // Remove port of the given host when not syncing over HTTP/S to not assume port for protocol // This _might_ be overwritten later on by e.g. --ssh-hostname @@ -213,9 +219,12 @@ func bootstrapGitCmdRun(cmd *cobra.Command, args []string) error { if bootstrapArgs.sshHostname != "" { repositoryURL.Host = bootstrapArgs.sshHostname } - if bootstrapArgs.privateKeyFile != "" { - secretOpts.PrivateKeyPath = bootstrapArgs.privateKeyFile + + keypair, err := sourcesecret.LoadKeyPairFromPath(bootstrapArgs.privateKeyFile, gitArgs.password) + if err != nil { + return err } + secretOpts.Keypair = keypair // Configure last as it depends on the config above. secretOpts.SSHHostname = repositoryURL.Host @@ -235,13 +244,9 @@ func bootstrapGitCmdRun(cmd *cobra.Command, args []string) error { RecurseSubmodules: bootstrapArgs.recurseSubmodules, } - var caBundle []byte - if bootstrapArgs.caFile != "" { - var err error - caBundle, err = os.ReadFile(bootstrapArgs.caFile) - if err != nil { - return fmt.Errorf("unable to read TLS CA file: %w", err) - } + entityList, err := bootstrap.LoadEntityListFromPath(bootstrapArgs.gpgKeyRingPath) + if err != nil { + return err } // Bootstrap config @@ -254,7 +259,7 @@ func bootstrapGitCmdRun(cmd *cobra.Command, args []string) error { bootstrap.WithPostGenerateSecretFunc(promptPublicKey), bootstrap.WithLogger(logger), bootstrap.WithCABundle(caBundle), - bootstrap.WithGitCommitSigning(bootstrapArgs.gpgKeyRingPath, bootstrapArgs.gpgPassphrase, bootstrapArgs.gpgKeyID), + bootstrap.WithGitCommitSigning(entityList, bootstrapArgs.gpgPassphrase, bootstrapArgs.gpgKeyID), } // Setup bootstrapper with constructed configs diff --git a/cmd/flux/bootstrap_github.go b/cmd/flux/bootstrap_github.go index c49bd483..34ad8e2f 100644 --- a/cmd/flux/bootstrap_github.go +++ b/cmd/flux/bootstrap_github.go @@ -204,16 +204,13 @@ func bootstrapGitHubCmdRun(cmd *cobra.Command, args []string) error { if bootstrapArgs.tokenAuth { secretOpts.Username = "git" secretOpts.Password = ghToken - - if bootstrapArgs.caFile != "" { - secretOpts.CAFilePath = bootstrapArgs.caFile - } + secretOpts.CAFile = caBundle } else { secretOpts.PrivateKeyAlgorithm = sourcesecret.PrivateKeyAlgorithm(bootstrapArgs.keyAlgorithm) secretOpts.RSAKeyBits = int(bootstrapArgs.keyRSABits) secretOpts.ECDSACurve = bootstrapArgs.keyECDSACurve.Curve - secretOpts.SSHHostname = githubArgs.hostname + secretOpts.SSHHostname = githubArgs.hostname if bootstrapArgs.sshHostname != "" { secretOpts.SSHHostname = bootstrapArgs.sshHostname } @@ -232,6 +229,11 @@ func bootstrapGitHubCmdRun(cmd *cobra.Command, args []string) error { RecurseSubmodules: bootstrapArgs.recurseSubmodules, } + entityList, err := bootstrap.LoadEntityListFromPath(bootstrapArgs.gpgKeyRingPath) + if err != nil { + return err + } + // Bootstrap config bootstrapOpts := []bootstrap.GitProviderOption{ bootstrap.WithProviderRepository(githubArgs.owner, githubArgs.repository, githubArgs.personal), @@ -244,7 +246,7 @@ func bootstrapGitHubCmdRun(cmd *cobra.Command, args []string) error { bootstrap.WithKubeconfig(kubeconfigArgs, kubeclientOptions), bootstrap.WithLogger(logger), bootstrap.WithCABundle(caBundle), - bootstrap.WithGitCommitSigning(bootstrapArgs.gpgKeyRingPath, bootstrapArgs.gpgPassphrase, bootstrapArgs.gpgKeyID), + bootstrap.WithGitCommitSigning(entityList, bootstrapArgs.gpgPassphrase, bootstrapArgs.gpgKeyID), } if bootstrapArgs.sshHostname != "" { bootstrapOpts = append(bootstrapOpts, bootstrap.WithSSHHostname(bootstrapArgs.sshHostname)) diff --git a/cmd/flux/bootstrap_gitlab.go b/cmd/flux/bootstrap_gitlab.go index 86f498c6..cb38cdae 100644 --- a/cmd/flux/bootstrap_gitlab.go +++ b/cmd/flux/bootstrap_gitlab.go @@ -215,19 +215,18 @@ func bootstrapGitLabCmdRun(cmd *cobra.Command, args []string) error { if bootstrapArgs.tokenAuth { secretOpts.Username = "git" secretOpts.Password = glToken - - if bootstrapArgs.caFile != "" { - secretOpts.CAFilePath = bootstrapArgs.caFile - } + secretOpts.CAFile = caBundle } else { + keypair, err := sourcesecret.LoadKeyPairFromPath(bootstrapArgs.privateKeyFile, gitArgs.password) + if err != nil { + return err + } + secretOpts.Keypair = keypair secretOpts.PrivateKeyAlgorithm = sourcesecret.PrivateKeyAlgorithm(bootstrapArgs.keyAlgorithm) secretOpts.RSAKeyBits = int(bootstrapArgs.keyRSABits) secretOpts.ECDSACurve = bootstrapArgs.keyECDSACurve.Curve - secretOpts.SSHHostname = gitlabArgs.hostname - if bootstrapArgs.privateKeyFile != "" { - secretOpts.PrivateKeyPath = bootstrapArgs.privateKeyFile - } + secretOpts.SSHHostname = gitlabArgs.hostname if bootstrapArgs.sshHostname != "" { secretOpts.SSHHostname = bootstrapArgs.sshHostname } @@ -246,6 +245,11 @@ func bootstrapGitLabCmdRun(cmd *cobra.Command, args []string) error { RecurseSubmodules: bootstrapArgs.recurseSubmodules, } + entityList, err := bootstrap.LoadEntityListFromPath(bootstrapArgs.gpgKeyRingPath) + if err != nil { + return err + } + // Bootstrap config bootstrapOpts := []bootstrap.GitProviderOption{ bootstrap.WithProviderRepository(gitlabArgs.owner, gitlabArgs.repository, gitlabArgs.personal), @@ -258,7 +262,7 @@ func bootstrapGitLabCmdRun(cmd *cobra.Command, args []string) error { bootstrap.WithKubeconfig(kubeconfigArgs, kubeclientOptions), bootstrap.WithLogger(logger), bootstrap.WithCABundle(caBundle), - bootstrap.WithGitCommitSigning(bootstrapArgs.gpgKeyRingPath, bootstrapArgs.gpgPassphrase, bootstrapArgs.gpgKeyID), + bootstrap.WithGitCommitSigning(entityList, bootstrapArgs.gpgPassphrase, bootstrapArgs.gpgKeyID), } if bootstrapArgs.sshHostname != "" { bootstrapOpts = append(bootstrapOpts, bootstrap.WithSSHHostname(bootstrapArgs.sshHostname)) diff --git a/cmd/flux/create_secret_git.go b/cmd/flux/create_secret_git.go index 054c8a98..2948a2e0 100644 --- a/cmd/flux/create_secret_git.go +++ b/cmd/flux/create_secret_git.go @@ -21,6 +21,7 @@ import ( "crypto/elliptic" "fmt" "net/url" + "os" "github.com/spf13/cobra" corev1 "k8s.io/api/core/v1" @@ -135,8 +136,12 @@ func createSecretGitCmdRun(cmd *cobra.Command, args []string) error { } switch u.Scheme { case "ssh": + keypair, err := sourcesecret.LoadKeyPairFromPath(secretGitArgs.privateKeyFile, secretGitArgs.password) + if err != nil { + return err + } + opts.Keypair = keypair opts.SSHHostname = u.Host - opts.PrivateKeyPath = secretGitArgs.privateKeyFile opts.PrivateKeyAlgorithm = sourcesecret.PrivateKeyAlgorithm(secretGitArgs.keyAlgorithm) opts.RSAKeyBits = int(secretGitArgs.rsaBits) opts.ECDSACurve = secretGitArgs.ecdsaCurve.Curve @@ -147,7 +152,13 @@ func createSecretGitCmdRun(cmd *cobra.Command, args []string) error { } opts.Username = secretGitArgs.username opts.Password = secretGitArgs.password - opts.CAFilePath = secretGitArgs.caFile + if secretGitArgs.caFile != "" { + caBundle, err := os.ReadFile(secretGitArgs.caFile) + if err != nil { + return fmt.Errorf("unable to read TLS CA file: %w", err) + } + opts.CAFile = caBundle + } default: return fmt.Errorf("git URL scheme '%s' not supported, can be: ssh, http and https", u.Scheme) } diff --git a/cmd/flux/create_secret_helm.go b/cmd/flux/create_secret_helm.go index 1928c109..aba9e734 100644 --- a/cmd/flux/create_secret_helm.go +++ b/cmd/flux/create_secret_helm.go @@ -18,6 +18,8 @@ package main import ( "context" + "fmt" + "os" "github.com/spf13/cobra" corev1 "k8s.io/api/core/v1" @@ -74,15 +76,34 @@ func createSecretHelmCmdRun(cmd *cobra.Command, args []string) error { return err } + caBundle := []byte{} + if secretHelmArgs.caFile != "" { + var err error + caBundle, err = os.ReadFile(secretHelmArgs.caFile) + if err != nil { + return fmt.Errorf("unable to read TLS CA file: %w", err) + } + } + + var certFile, keyFile []byte + if secretHelmArgs.certFile != "" && secretHelmArgs.keyFile != "" { + if certFile, err = os.ReadFile(secretHelmArgs.certFile); err != nil { + return fmt.Errorf("failed to read cert file: %w", err) + } + if keyFile, err = os.ReadFile(secretHelmArgs.keyFile); err != nil { + return fmt.Errorf("failed to read key file: %w", err) + } + } + opts := sourcesecret.Options{ - Name: name, - Namespace: *kubeconfigArgs.Namespace, - Labels: labels, - Username: secretHelmArgs.username, - Password: secretHelmArgs.password, - CAFilePath: secretHelmArgs.caFile, - CertFilePath: secretHelmArgs.certFile, - KeyFilePath: secretHelmArgs.keyFile, + Name: name, + Namespace: *kubeconfigArgs.Namespace, + Labels: labels, + Username: secretHelmArgs.username, + Password: secretHelmArgs.password, + CAFile: caBundle, + CertFile: certFile, + KeyFile: keyFile, } secret, err := sourcesecret.Generate(opts) if err != nil { diff --git a/cmd/flux/create_secret_tls.go b/cmd/flux/create_secret_tls.go index e3afd380..640fef5d 100644 --- a/cmd/flux/create_secret_tls.go +++ b/cmd/flux/create_secret_tls.go @@ -18,6 +18,8 @@ package main import ( "context" + "fmt" + "os" "github.com/spf13/cobra" "github.com/spf13/pflag" @@ -73,13 +75,32 @@ func createSecretTLSCmdRun(cmd *cobra.Command, args []string) error { return err } + caBundle := []byte{} + if secretTLSArgs.caFile != "" { + var err error + caBundle, err = os.ReadFile(secretTLSArgs.caFile) + if err != nil { + return fmt.Errorf("unable to read TLS CA file: %w", err) + } + } + + var certFile, keyFile []byte + if secretTLSArgs.certFile != "" && secretTLSArgs.keyFile != "" { + if certFile, err = os.ReadFile(secretTLSArgs.certFile); err != nil { + return fmt.Errorf("failed to read cert file: %w", err) + } + if keyFile, err = os.ReadFile(secretTLSArgs.keyFile); err != nil { + return fmt.Errorf("failed to read key file: %w", err) + } + } + opts := sourcesecret.Options{ - Name: name, - Namespace: *kubeconfigArgs.Namespace, - Labels: labels, - CAFilePath: secretTLSArgs.caFile, - CertFilePath: secretTLSArgs.certFile, - KeyFilePath: secretTLSArgs.keyFile, + Name: name, + Namespace: *kubeconfigArgs.Namespace, + Labels: labels, + CAFile: caBundle, + CertFile: certFile, + KeyFile: keyFile, } secret, err := sourcesecret.Generate(opts) if err != nil { diff --git a/cmd/flux/create_source_git.go b/cmd/flux/create_source_git.go index c5cb9e1a..22306dc5 100644 --- a/cmd/flux/create_source_git.go +++ b/cmd/flux/create_source_git.go @@ -259,16 +259,26 @@ func createSourceGitCmdRun(cmd *cobra.Command, args []string) error { } switch u.Scheme { case "ssh": + keypair, err := sourcesecret.LoadKeyPairFromPath(sourceGitArgs.privateKeyFile, sourceGitArgs.password) + if err != nil { + return err + } + secretOpts.Keypair = keypair secretOpts.SSHHostname = u.Host - secretOpts.PrivateKeyPath = sourceGitArgs.privateKeyFile secretOpts.PrivateKeyAlgorithm = sourcesecret.PrivateKeyAlgorithm(sourceGitArgs.keyAlgorithm) secretOpts.RSAKeyBits = int(sourceGitArgs.keyRSABits) secretOpts.ECDSACurve = sourceGitArgs.keyECDSACurve.Curve secretOpts.Password = sourceGitArgs.password case "https": + if sourceGitArgs.caFile != "" { + caBundle, err := os.ReadFile(sourceGitArgs.caFile) + if err != nil { + return fmt.Errorf("unable to read TLS CA file: %w", err) + } + secretOpts.CAFile = caBundle + } secretOpts.Username = sourceGitArgs.username secretOpts.Password = sourceGitArgs.password - secretOpts.CAFilePath = sourceGitArgs.caFile case "http": logger.Warningf("insecure configuration: credentials configured for an HTTP URL") secretOpts.Username = sourceGitArgs.username diff --git a/cmd/flux/create_source_helm.go b/cmd/flux/create_source_helm.go index 4b56f37a..49a4b026 100644 --- a/cmd/flux/create_source_helm.go +++ b/cmd/flux/create_source_helm.go @@ -168,6 +168,25 @@ func createSourceHelmCmdRun(cmd *cobra.Command, args []string) error { return err } + caBundle := []byte{} + if sourceHelmArgs.caFile != "" { + var err error + caBundle, err = os.ReadFile(sourceHelmArgs.caFile) + if err != nil { + return fmt.Errorf("unable to read TLS CA file: %w", err) + } + } + + var certFile, keyFile []byte + if sourceHelmArgs.certFile != "" && sourceHelmArgs.keyFile != "" { + if certFile, err = os.ReadFile(sourceHelmArgs.certFile); err != nil { + return fmt.Errorf("failed to read cert file: %w", err) + } + if keyFile, err = os.ReadFile(sourceHelmArgs.keyFile); err != nil { + return fmt.Errorf("failed to read key file: %w", err) + } + } + logger.Generatef("generating HelmRepository source") if sourceHelmArgs.secretRef == "" { secretName := fmt.Sprintf("helm-%s", name) @@ -176,9 +195,9 @@ func createSourceHelmCmdRun(cmd *cobra.Command, args []string) error { Namespace: *kubeconfigArgs.Namespace, Username: sourceHelmArgs.username, Password: sourceHelmArgs.password, - CertFilePath: sourceHelmArgs.certFile, - KeyFilePath: sourceHelmArgs.keyFile, - CAFilePath: sourceHelmArgs.caFile, + CAFile: caBundle, + CertFile: certFile, + KeyFile: keyFile, ManifestFile: sourcesecret.MakeDefaultOptions().ManifestFile, } secret, err := sourcesecret.Generate(secretOpts) diff --git a/pkg/bootstrap/bootstrap_plain_git.go b/pkg/bootstrap/bootstrap_plain_git.go index 909eb3b2..4f82a72e 100644 --- a/pkg/bootstrap/bootstrap_plain_git.go +++ b/pkg/bootstrap/bootstrap_plain_git.go @@ -24,6 +24,7 @@ import ( "strings" "time" + "github.com/ProtonMail/go-crypto/openpgp" gogit "github.com/go-git/go-git/v5" corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime/schema" @@ -56,9 +57,9 @@ type PlainGitBootstrapper struct { author git.Author commitMessageAppendix string - gpgKeyRingPath string - gpgPassphrase string - gpgKeyID string + gpgKeyRing openpgp.EntityList + gpgPassphrase string + gpgKeyID string restClientGetter genericclioptions.RESTClientGetter restClientOptions *runclient.Options @@ -139,7 +140,7 @@ func (b *PlainGitBootstrapper) ReconcileComponents(ctx context.Context, manifest } // Git commit generated - gpgOpts := git.WithGpgSigningOption(b.gpgKeyRingPath, b.gpgPassphrase, b.gpgKeyID) + gpgOpts := git.WithGpgSigningOption(b.gpgKeyRing, b.gpgPassphrase, b.gpgKeyID) commitMsg := fmt.Sprintf("Add Flux %s component manifests", options.Version) if b.commitMessageAppendix != "" { commitMsg = commitMsg + "\n\n" + b.commitMessageAppendix @@ -195,7 +196,7 @@ func (b *PlainGitBootstrapper) ReconcileSourceSecret(ctx context.Context, option } // Return early if exists and no custom config is passed - if ok && len(options.CAFilePath+options.PrivateKeyPath+options.Username+options.Password) == 0 { + if ok && options.Keypair == nil && len(options.CAFile) == 0 && len(options.Username+options.Password) == 0 { b.logger.Successf("source secret up to date") return nil } @@ -284,7 +285,7 @@ func (b *PlainGitBootstrapper) ReconcileSyncConfig(ctx context.Context, options b.logger.Successf("generated sync manifests") // Git commit generated - gpgOpts := git.WithGpgSigningOption(b.gpgKeyRingPath, b.gpgPassphrase, b.gpgKeyID) + gpgOpts := git.WithGpgSigningOption(b.gpgKeyRing, b.gpgPassphrase, b.gpgKeyID) commitMsg := fmt.Sprintf("Add Flux sync manifests") if b.commitMessageAppendix != "" { commitMsg = commitMsg + "\n\n" + b.commitMessageAppendix diff --git a/pkg/bootstrap/git/commit_options.go b/pkg/bootstrap/git/commit_options.go index e39614d2..b30491f6 100644 --- a/pkg/bootstrap/git/commit_options.go +++ b/pkg/bootstrap/git/commit_options.go @@ -1,5 +1,9 @@ package git +import ( + "github.com/ProtonMail/go-crypto/openpgp" +) + // Option is a some configuration that modifies options for a commit. type Option interface { // ApplyToCommit applies this configuration to a given commit option. @@ -13,9 +17,9 @@ type CommitOptions struct { // GPGSigningInfo contains information for signing a commit. type GPGSigningInfo struct { - KeyRingPath string - Passphrase string - KeyID string + KeyRing openpgp.EntityList + Passphrase string + KeyID string } type GpgSigningOption struct { @@ -26,17 +30,17 @@ func (w GpgSigningOption) ApplyToCommit(in *CommitOptions) { in.GPGSigningInfo = w.GPGSigningInfo } -func WithGpgSigningOption(path, passphrase, keyID string) Option { +func WithGpgSigningOption(keyRing openpgp.EntityList, passphrase, keyID string) Option { // Return nil if no path is set, even if other options are configured. - if path == "" { + if len(keyRing) == 0 { return GpgSigningOption{} } return GpgSigningOption{ GPGSigningInfo: &GPGSigningInfo{ - KeyRingPath: path, - Passphrase: passphrase, - KeyID: keyID, + KeyRing: keyRing, + Passphrase: passphrase, + KeyID: keyID, }, } } diff --git a/pkg/bootstrap/git/gogit/gogit.go b/pkg/bootstrap/git/gogit/gogit.go index 559633b5..c1c6200a 100644 --- a/pkg/bootstrap/git/gogit/gogit.go +++ b/pkg/bootstrap/git/gogit/gogit.go @@ -258,23 +258,13 @@ func isRemoteBranchNotFoundErr(err error, ref string) bool { } func getOpenPgpEntity(info git.GPGSigningInfo) (*openpgp.Entity, error) { - r, err := os.Open(info.KeyRingPath) - if err != nil { - return nil, fmt.Errorf("unable to open GPG key ring: %w", err) - } - - entityList, err := openpgp.ReadKeyRing(r) - if err != nil { - return nil, err - } - - if len(entityList) == 0 { + if len(info.KeyRing) == 0 { return nil, fmt.Errorf("empty GPG key ring") } var entity *openpgp.Entity if info.KeyID != "" { - for _, ent := range entityList { + for _, ent := range info.KeyRing { if ent.PrimaryKey.KeyIdString() == info.KeyID { entity = ent } @@ -284,10 +274,10 @@ func getOpenPgpEntity(info git.GPGSigningInfo) (*openpgp.Entity, error) { return nil, fmt.Errorf("no GPG private key matching key id '%s' found", info.KeyID) } } else { - entity = entityList[0] + entity = info.KeyRing[0] } - err = entity.PrivateKey.Decrypt([]byte(info.Passphrase)) + err := entity.PrivateKey.Decrypt([]byte(info.Passphrase)) if err != nil { return nil, fmt.Errorf("unable to decrypt GPG private key: %w", err) } diff --git a/pkg/bootstrap/git/gogit/gogit_test.go b/pkg/bootstrap/git/gogit/gogit_test.go index 02c5ea58..03e4545b 100644 --- a/pkg/bootstrap/git/gogit/gogit_test.go +++ b/pkg/bootstrap/git/gogit/gogit_test.go @@ -4,8 +4,10 @@ package gogit import ( + "os" "testing" + "github.com/ProtonMail/go-crypto/openpgp" "github.com/fluxcd/flux2/pkg/bootstrap/git" ) @@ -49,10 +51,21 @@ func TestGetOpenPgpEntity(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { + var entityList openpgp.EntityList + if tt.keyPath != "" { + r, err := os.Open(tt.keyPath) + if err != nil { + t.Errorf("unexpected error: %s", err) + } + entityList, err = openpgp.ReadKeyRing(r) + if err != nil { + t.Errorf("unexpected error: %s", err) + } + } gpgInfo := git.GPGSigningInfo{ - KeyRingPath: tt.keyPath, - Passphrase: tt.passphrase, - KeyID: tt.id, + KeyRing: entityList, + Passphrase: tt.passphrase, + KeyID: tt.id, } _, err := getOpenPgpEntity(gpgInfo) diff --git a/pkg/bootstrap/options.go b/pkg/bootstrap/options.go index 9dada56f..be6ce3e8 100644 --- a/pkg/bootstrap/options.go +++ b/pkg/bootstrap/options.go @@ -17,8 +17,12 @@ limitations under the License. package bootstrap import ( + "fmt" + "os" + "k8s.io/cli-runtime/pkg/genericclioptions" + "github.com/ProtonMail/go-crypto/openpgp" runclient "github.com/fluxcd/pkg/runtime/client" "github.com/fluxcd/flux2/pkg/bootstrap/git" @@ -131,22 +135,22 @@ func (o loggerOption) applyGitProvider(b *GitProviderBootstrapper) { b.logger = o.logger } -func WithGitCommitSigning(path, passphrase, keyID string) Option { +func WithGitCommitSigning(gpgKeyRing openpgp.EntityList, passphrase, keyID string) Option { return gitCommitSigningOption{ - gpgKeyRingPath: path, - gpgPassphrase: passphrase, - gpgKeyID: keyID, + gpgKeyRing: gpgKeyRing, + gpgPassphrase: passphrase, + gpgKeyID: keyID, } } type gitCommitSigningOption struct { - gpgKeyRingPath string - gpgPassphrase string - gpgKeyID string + gpgKeyRing openpgp.EntityList + gpgPassphrase string + gpgKeyID string } func (o gitCommitSigningOption) applyGit(b *PlainGitBootstrapper) { - b.gpgKeyRingPath = o.gpgKeyRingPath + b.gpgKeyRing = o.gpgKeyRing b.gpgPassphrase = o.gpgPassphrase b.gpgKeyID = o.gpgKeyID } @@ -154,3 +158,18 @@ func (o gitCommitSigningOption) applyGit(b *PlainGitBootstrapper) { func (o gitCommitSigningOption) applyGitProvider(b *GitProviderBootstrapper) { o.applyGit(b.PlainGitBootstrapper) } + +func LoadEntityListFromPath(path string) (openpgp.EntityList, error) { + if path == "" { + return nil, nil + } + r, err := os.Open(path) + if err != nil { + return nil, fmt.Errorf("unable to open GPG key ring: %w", err) + } + entityList, err := openpgp.ReadKeyRing(r) + if err != nil { + return nil, err + } + return entityList, nil +} diff --git a/pkg/manifestgen/sourcesecret/options.go b/pkg/manifestgen/sourcesecret/options.go index 371e6f9b..d9cec044 100644 --- a/pkg/manifestgen/sourcesecret/options.go +++ b/pkg/manifestgen/sourcesecret/options.go @@ -18,6 +18,8 @@ package sourcesecret import ( "crypto/elliptic" + + "github.com/fluxcd/pkg/ssh" ) type PrivateKeyAlgorithm string @@ -48,12 +50,12 @@ type Options struct { PrivateKeyAlgorithm PrivateKeyAlgorithm RSAKeyBits int ECDSACurve elliptic.Curve - PrivateKeyPath string + Keypair *ssh.KeyPair Username string Password string - CAFilePath string - CertFilePath string - KeyFilePath string + CAFile []byte + CertFile []byte + KeyFile []byte TargetPath string ManifestFile string } @@ -64,12 +66,11 @@ func MakeDefaultOptions() Options { Namespace: "flux-system", Labels: map[string]string{}, PrivateKeyAlgorithm: RSAPrivateKeyAlgorithm, - PrivateKeyPath: "", Username: "", Password: "", - CAFilePath: "", - CertFilePath: "", - KeyFilePath: "", + CAFile: []byte{}, + CertFile: []byte{}, + KeyFile: []byte{}, ManifestFile: "secret.yaml", } } diff --git a/pkg/manifestgen/sourcesecret/sourcesecret.go b/pkg/manifestgen/sourcesecret/sourcesecret.go index 87567168..575af3df 100644 --- a/pkg/manifestgen/sourcesecret/sourcesecret.go +++ b/pkg/manifestgen/sourcesecret/sourcesecret.go @@ -66,10 +66,8 @@ func Generate(options Options) (*manifestgen.Manifest, error) { switch { case options.Username != "" && options.Password != "": // noop - case len(options.PrivateKeyPath) > 0: - if keypair, err = loadKeyPair(options.PrivateKeyPath, options.Password); err != nil { - return nil, err - } + case options.Keypair != nil: + keypair = options.Keypair case len(options.PrivateKeyAlgorithm) > 0: if keypair, err = generateKeyPair(options); err != nil { return nil, err @@ -83,23 +81,6 @@ func Generate(options Options) (*manifestgen.Manifest, error) { } } - var caFile []byte - if options.CAFilePath != "" { - if caFile, err = os.ReadFile(options.CAFilePath); err != nil { - return nil, fmt.Errorf("failed to read CA file: %w", err) - } - } - - var certFile, keyFile []byte - if options.CertFilePath != "" && options.KeyFilePath != "" { - if certFile, err = os.ReadFile(options.CertFilePath); err != nil { - return nil, fmt.Errorf("failed to read cert file: %w", err) - } - if keyFile, err = os.ReadFile(options.KeyFilePath); err != nil { - return nil, fmt.Errorf("failed to read key file: %w", err) - } - } - var dockerCfgJson []byte if options.Registry != "" { dockerCfgJson, err = generateDockerConfigJson(options.Registry, options.Username, options.Password) @@ -108,7 +89,7 @@ func Generate(options Options) (*manifestgen.Manifest, error) { } } - secret := buildSecret(keypair, hostKey, caFile, certFile, keyFile, dockerCfgJson, options) + secret := buildSecret(keypair, hostKey, options.CAFile, options.CertFile, options.KeyFile, dockerCfgJson, options) b, err := yaml.Marshal(secret) if err != nil { return nil, err @@ -120,6 +101,35 @@ func Generate(options Options) (*manifestgen.Manifest, error) { }, nil } +func LoadKeyPairFromPath(path, password string) (*ssh.KeyPair, error) { + if path == "" { + return nil, nil + } + + b, err := os.ReadFile(path) + if err != nil { + return nil, fmt.Errorf("failed to open private key file: %w", err) + } + return LoadKeyPair(b, password) +} + +func LoadKeyPair(privateKey []byte, password string) (*ssh.KeyPair, error) { + var ppk cryptssh.Signer + var err error + if password != "" { + ppk, err = cryptssh.ParsePrivateKeyWithPassphrase(privateKey, []byte(password)) + } else { + ppk, err = cryptssh.ParsePrivateKey(privateKey) + } + if err != nil { + return nil, err + } + return &ssh.KeyPair{ + PublicKey: cryptssh.MarshalAuthorizedKey(ppk.PublicKey()), + PrivateKey: privateKey, + }, nil +} + func buildSecret(keypair *ssh.KeyPair, hostKey, caFile, certFile, keyFile, dockerCfg []byte, options Options) (secret corev1.Secret) { secret.TypeMeta = metav1.TypeMeta{ APIVersion: "v1", @@ -143,16 +153,16 @@ func buildSecret(keypair *ssh.KeyPair, hostKey, caFile, certFile, keyFile, docke secret.StringData[PasswordSecretKey] = options.Password } - if caFile != nil { + if len(caFile) != 0 { secret.StringData[CAFileSecretKey] = string(caFile) } - if certFile != nil && keyFile != nil { + if len(certFile) != 0 && len(keyFile) != 0 { secret.StringData[CertFileSecretKey] = string(certFile) secret.StringData[KeyFileSecretKey] = string(keyFile) } - if keypair != nil && hostKey != nil { + if keypair != nil && len(hostKey) != 0 { secret.StringData[PrivateKeySecretKey] = string(keypair.PrivateKey) secret.StringData[PublicKeySecretKey] = string(keypair.PublicKey) secret.StringData[KnownHostsSecretKey] = string(hostKey) @@ -165,29 +175,6 @@ func buildSecret(keypair *ssh.KeyPair, hostKey, caFile, certFile, keyFile, docke return } -func loadKeyPair(path string, password string) (*ssh.KeyPair, error) { - b, err := os.ReadFile(path) - if err != nil { - return nil, fmt.Errorf("failed to open private key file: %w", err) - } - - var ppk cryptssh.Signer - if password != "" { - ppk, err = cryptssh.ParsePrivateKeyWithPassphrase(b, []byte(password)) - } else { - ppk, err = cryptssh.ParsePrivateKey(b) - } - - if err != nil { - return nil, err - } - - return &ssh.KeyPair{ - PublicKey: cryptssh.MarshalAuthorizedKey(ppk.PublicKey()), - PrivateKey: b, - }, nil -} - func generateKeyPair(options Options) (*ssh.KeyPair, error) { var keyGen ssh.KeyPairGenerator switch options.PrivateKeyAlgorithm { diff --git a/pkg/manifestgen/sourcesecret/sourcesecret_test.go b/pkg/manifestgen/sourcesecret/sourcesecret_test.go index e225bbd8..8eb619d4 100644 --- a/pkg/manifestgen/sourcesecret/sourcesecret_test.go +++ b/pkg/manifestgen/sourcesecret/sourcesecret_test.go @@ -48,7 +48,7 @@ func Test_passwordLoadKeyPair(t *testing.T) { pk, _ := os.ReadFile(tt.privateKeyPath) ppk, _ := os.ReadFile(tt.publicKeyPath) - got, err := loadKeyPair(tt.privateKeyPath, tt.password) + got, err := LoadKeyPair(pk, tt.password) if err != nil { t.Errorf("loadKeyPair() error = %v", err) return @@ -67,24 +67,13 @@ func Test_passwordLoadKeyPair(t *testing.T) { func Test_PasswordlessLoadKeyPair(t *testing.T) { for algo, privateKey := range testdata.PEMBytes { t.Run(algo, func(t *testing.T) { - f, err := os.CreateTemp("", "test-private-key-") - if err != nil { - t.Fatalf("unable to create temporary file. err: %s", err) - } - defer os.Remove(f.Name()) - - if _, err = f.Write(privateKey); err != nil { - t.Fatalf("unable to write private key to file. err: %s", err) - } - - got, err := loadKeyPair(f.Name(), "") + got, err := LoadKeyPair(privateKey, "") if err != nil { t.Errorf("loadKeyPair() error = %v", err) return } - pk, _ := os.ReadFile(f.Name()) - if !reflect.DeepEqual(got.PrivateKey, pk) { + if !reflect.DeepEqual(got.PrivateKey, privateKey) { t.Errorf("PrivateKey %s != %s", got.PrivateKey, string(privateKey)) } From 98e0774f568b7e7bfe738ad0cd90280735f7be04 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 9 Nov 2022 14:05:46 +0200 Subject: [PATCH 284/818] Use kube-prometheus-stack signed OCI Helm chart Signed-off-by: Stefan Prodan --- manifests/monitoring/kube-prometheus-stack/release.yaml | 4 +++- manifests/monitoring/kube-prometheus-stack/repository.yaml | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/manifests/monitoring/kube-prometheus-stack/release.yaml b/manifests/monitoring/kube-prometheus-stack/release.yaml index 13aa4952..30b87357 100644 --- a/manifests/monitoring/kube-prometheus-stack/release.yaml +++ b/manifests/monitoring/kube-prometheus-stack/release.yaml @@ -6,11 +6,13 @@ spec: interval: 5m chart: spec: - version: "35.x" + version: "41.x" chart: kube-prometheus-stack sourceRef: kind: HelmRepository name: prometheus-community + verify: + provider: cosign interval: 60m install: crds: Create diff --git a/manifests/monitoring/kube-prometheus-stack/repository.yaml b/manifests/monitoring/kube-prometheus-stack/repository.yaml index 49355b53..d2beb6b4 100644 --- a/manifests/monitoring/kube-prometheus-stack/repository.yaml +++ b/manifests/monitoring/kube-prometheus-stack/repository.yaml @@ -4,4 +4,5 @@ metadata: name: prometheus-community spec: interval: 120m - url: https://prometheus-community.github.io/helm-charts + type: oci + url: oci://ghcr.io/prometheus-community/charts From 8bd13edc75489586ecf140252f30bc6eb18dbdf5 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 9 Nov 2022 14:06:30 +0200 Subject: [PATCH 285/818] Add the monitoring stack to e2e tests Signed-off-by: Stefan Prodan --- .github/workflows/e2e-arm64.yaml | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/.github/workflows/e2e-arm64.yaml b/.github/workflows/e2e-arm64.yaml index 4c2de99e..c39e45fe 100644 --- a/.github/workflows/e2e-arm64.yaml +++ b/.github/workflows/e2e-arm64.yaml @@ -58,6 +58,33 @@ jobs: kubectl -n flux-system wait kustomization/tenants --for=condition=ready --timeout=5m kubectl -n apps wait kustomization/dev-team --for=condition=ready --timeout=1m kubectl -n apps wait helmrelease/podinfo --for=condition=ready --timeout=1m + - name: Run monitoring tests + # Keep this test in sync with https://fluxcd.io/flux/guides/monitoring/ + env: + KUBECONFIG: /tmp/${{ steps.prep.outputs.CLUSTER }} + run: | + ./bin/flux create source git flux-monitoring \ + --interval=30m \ + --url=https://github.com/fluxcd/flux2 \ + --branch=${GITHUB_REF#refs/heads/} + ./bin/flux create kustomization kube-prometheus-stack \ + --interval=1h \ + --prune \ + --source=flux-monitoring \ + --path="./manifests/monitoring/kube-prometheus-stack" \ + --health-check-timeout=5m \ + --wait + ./bin/flux create kustomization monitoring-config \ + --depends-on=kube-prometheus-stack \ + --interval=1h \ + --prune=true \ + --source=flux-monitoring \ + --path="./manifests/monitoring/monitoring-config" \ + --health-check-timeout=1m \ + --wait + kubectl -n flux-system wait kustomization/kube-prometheus-stack --for=condition=ready --timeout=5m + kubectl -n flux-system wait kustomization/monitoring-config --for=condition=ready --timeout=5m + kubectl -n monitoring wait helmrelease/kube-prometheus-stack --for=condition=ready --timeout=1m - name: Debug failure if: failure() env: From 93382f65bb2a18e242013dbb13c300efcd5d3362 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 9 Nov 2022 13:33:14 +0000 Subject: [PATCH 286/818] Bump hashicorp/setup-terraform from 2.0.2 to 2.0.3 Bumps [hashicorp/setup-terraform](https://github.com/hashicorp/setup-terraform) from 2.0.2 to 2.0.3. - [Release notes](https://github.com/hashicorp/setup-terraform/releases) - [Changelog](https://github.com/hashicorp/setup-terraform/blob/main/CHANGELOG.md) - [Commits](https://github.com/hashicorp/setup-terraform/compare/v2.0.2...v2.0.3) --- updated-dependencies: - dependency-name: hashicorp/setup-terraform dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/e2e-azure.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/e2e-azure.yaml b/.github/workflows/e2e-azure.yaml index d7a595e8..f1ad2f73 100644 --- a/.github/workflows/e2e-azure.yaml +++ b/.github/workflows/e2e-azure.yaml @@ -44,7 +44,7 @@ jobs: mkdir -p $HOME/.local/bin mv sops-v3.7.1.linux $HOME/.local/bin/sops - name: Setup Terraform - uses: hashicorp/setup-terraform@v2.0.2 + uses: hashicorp/setup-terraform@v2.0.3 with: terraform_version: 1.2.8 terraform_wrapper: false From 35ea91c111dd3e370abd65d5cae06f7497651f47 Mon Sep 17 00:00:00 2001 From: Soule BA Date: Mon, 14 Nov 2022 16:10:10 +0100 Subject: [PATCH 287/818] Revert MakeSecureFSOnDisk to MakeFSOnDisk The reason to this is because MakeSecureFSOnDisk is not consistent between OS. Signed-off-by: Soule BA --- go.mod | 4 +++- go.sum | 9 +++++---- internal/build/build.go | 16 ++++++---------- 3 files changed, 14 insertions(+), 15 deletions(-) diff --git a/go.mod b/go.mod index 4cb47a01..a9139e11 100644 --- a/go.mod +++ b/go.mod @@ -2,6 +2,8 @@ module github.com/fluxcd/flux2 go 1.18 +replace github.com/fluxcd/pkg/kustomize => github.com/souleb/pkg/kustomize v0.0.0-20221114164450-c3ad651f477b + require ( github.com/Masterminds/semver/v3 v3.1.1 github.com/ProtonMail/go-crypto v0.0.0-20220930113650-c6815a8c17ad @@ -98,7 +100,7 @@ require ( github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c // indirect github.com/docker/go-metrics v0.0.1 // indirect github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1 // indirect - github.com/drone/envsubst/v2 v2.0.0-20210730161058-179042472c46 // indirect + github.com/drone/envsubst v1.0.3 // indirect github.com/emicklei/go-restful/v3 v3.8.0 // indirect github.com/emirpasic/gods v1.12.0 // indirect github.com/evanphx/json-patch v4.12.0+incompatible // indirect diff --git a/go.sum b/go.sum index 1890f9ca..0db981b7 100644 --- a/go.sum +++ b/go.sum @@ -171,8 +171,8 @@ github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHz github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1 h1:ZClxb8laGDf5arXfYcAtECDFgAgHklGI8CxgjHnXKJ4= github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= -github.com/drone/envsubst/v2 v2.0.0-20210730161058-179042472c46 h1:7QPwrLT79GlD5sizHf27aoY2RTvw62mO6x7mxkScNk0= -github.com/drone/envsubst/v2 v2.0.0-20210730161058-179042472c46/go.mod h1:esf2rsHFNlZlxsqsZDojNBcnNs5REqIvRrWRHqX0vEU= +github.com/drone/envsubst v1.0.3 h1:PCIBwNDYjs50AsLZPYdfhSATKaRg/FJmDc2D6+C2x8g= +github.com/drone/envsubst v1.0.3/go.mod h1:N2jZmlMufstn1KEqvbHjw40h1KyTmnVzHcSc9bFiJ2g= github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153 h1:yUdfgN0XgIJw7foRItutHYUIhlcKzcSf5vDpdhQAKTc= github.com/emicklei/go-restful/v3 v3.8.0 h1:eCZ8ulSerjdAiaNpF7GxXIE7ZCMo1moN1qX+S609eVw= github.com/emicklei/go-restful/v3 v3.8.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= @@ -216,8 +216,6 @@ github.com/fluxcd/pkg/apis/kustomize v0.6.0 h1:Afxv3Uv+xiuettzqm3sP0ceWikDZTfHdH github.com/fluxcd/pkg/apis/kustomize v0.6.0/go.mod h1:iY0zSpK6eUiPfNt/yR6g0q/wQP+wH+Ax/L7KBOx5x2M= github.com/fluxcd/pkg/apis/meta v0.17.0 h1:Y2dfo1syHZDb9Mexjr2SWdcj1FnxnRXm015hEnhl6wU= github.com/fluxcd/pkg/apis/meta v0.17.0/go.mod h1:GrOVzWXiu22XjLNgLLe2EBYhQPqZetes5SIADb4bmHE= -github.com/fluxcd/pkg/kustomize v0.8.0 h1:8AdEvp6y38ISZzoi0H82Si5zkmLXClbeX10W7HevB00= -github.com/fluxcd/pkg/kustomize v0.8.0/go.mod h1:zGtCZF6V3hMWcf46SqrQc10fS9yUlKzi2UcFUeabDAE= github.com/fluxcd/pkg/oci v0.14.0 h1:KwjOf2OSB1bZvNEwDfp+FbOrK0fMcSYA01AJEc671mQ= github.com/fluxcd/pkg/oci v0.14.0/go.mod h1:TH7ru7YlX5L3xihbdnIgYVWXsOqrYcJIci/Mq4MgWbo= github.com/fluxcd/pkg/runtime v0.22.0 h1:4YV/An41b+OGdSWDogwFfHr22CEE/in+lBLEK0fr1yc= @@ -532,6 +530,7 @@ github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8 github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= github.com/opencontainers/image-spec v1.1.0-rc2/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= +github.com/otiai10/copy v1.7.0 h1:hVoPiN+t+7d2nzzwMiDHPSOogsWAStewq3TwU05+clE= github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= @@ -593,6 +592,8 @@ github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrf github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/souleb/pkg/kustomize v0.0.0-20221114164450-c3ad651f477b h1:JlaF96cEGlAxdW7NYi8ON398wR2xtrJkRUAAHFCTh0w= +github.com/souleb/pkg/kustomize v0.0.0-20221114164450-c3ad651f477b/go.mod h1:rXQcYjvqqS+9oCOA2J/w7KTnwNhdwDCeW4mE5zQRjN4= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= github.com/spf13/cobra v1.6.0 h1:42a0n6jwCot1pUmomAp4T7DeMD+20LFv4Q54pxLf2LI= diff --git a/internal/build/build.go b/internal/build/build.go index 02a97c30..8786be6b 100644 --- a/internal/build/build.go +++ b/internal/build/build.go @@ -42,8 +42,8 @@ import ( kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" "github.com/fluxcd/pkg/kustomize" - "github.com/fluxcd/pkg/kustomize/filesys" runclient "github.com/fluxcd/pkg/runtime/client" + "sigs.k8s.io/kustomize/kyaml/filesys" "github.com/fluxcd/flux2/internal/utils" ) @@ -188,7 +188,7 @@ func (b *Builder) build() (m resmap.ResMap, err error) { defer cancel() // Get the kustomization object - k := &kustomizev1.Kustomization{} + var k *kustomizev1.Kustomization if b.kustomizationFile != "" { k, err = b.unMarshallKustomization() if err != nil { @@ -273,7 +273,7 @@ func (b *Builder) generate(kustomization kustomizev1.Kustomization, dirPath stri if err != nil { return "", err } - gen := kustomize.NewGenerator(unstructured.Unstructured{Object: data}) + gen := kustomize.NewGenerator("", unstructured.Unstructured{Object: data}) // acuire the lock b.mu.Lock() @@ -283,17 +283,13 @@ func (b *Builder) generate(kustomization kustomizev1.Kustomization, dirPath stri } func (b *Builder) do(ctx context.Context, kustomization kustomizev1.Kustomization, dirPath string) (resmap.ResMap, error) { - // TODO(hidde): provide option to enforce FS boundaries of local build - fs, err := filesys.MakeFsOnDiskSecureBuild("/") - if err != nil { - return nil, fmt.Errorf("kustomization build failed: %w", err) - } + fs := filesys.MakeFsOnDisk() // acuire the lock b.mu.Lock() defer b.mu.Unlock() - m, err := kustomize.BuildKustomization(fs, dirPath) + m, err := kustomize.Build(fs, dirPath) if err != nil { return nil, fmt.Errorf("kustomize build failed: %w", err) } @@ -305,7 +301,7 @@ func (b *Builder) do(ctx context.Context, kustomization kustomizev1.Kustomizatio if err != nil { return nil, err } - outRes, err := kustomize.SubstituteVariables(ctx, b.client, unstructured.Unstructured{Object: data}, res) + outRes, err := kustomize.SubstituteVariables(ctx, b.client, unstructured.Unstructured{Object: data}, res, false) if err != nil { return nil, fmt.Errorf("var substitution failed for '%s': %w", res.GetName(), err) } From ad5daee004efe9a016c8d4931b6c5c842b4dd7e6 Mon Sep 17 00:00:00 2001 From: Soule BA Date: Tue, 15 Nov 2022 12:01:07 +0100 Subject: [PATCH 288/818] Add a dry-run mode to flux build kustomization If implemented user will be able to use `flux build kustomization` without any connection to the cluster. Signed-off-by: Soule BA --- cmd/flux/build_kustomization.go | 21 ++- cmd/flux/build_kustomization_test.go | 6 + cmd/flux/diff_kustomization.go | 17 +- cmd/flux/diff_kustomization_test.go | 2 +- go.mod | 110 ++++++------ go.sum | 251 ++++++++++++++------------- internal/build/build.go | 61 +++++-- 7 files changed, 271 insertions(+), 197 deletions(-) diff --git a/cmd/flux/build_kustomization.go b/cmd/flux/build_kustomization.go index e093ac96..dd10ea11 100644 --- a/cmd/flux/build_kustomization.go +++ b/cmd/flux/build_kustomization.go @@ -40,7 +40,11 @@ It is possible to specify a Flux kustomization file using --kustomization-file.` flux build kustomization my-app --path ./path/to/local/manifests # Build using a local flux kustomization file -flux build kustomization my-app --path ./path/to/local/manifests --kustomization-file ./path/to/local/my-app.yaml`, +flux build kustomization my-app --path ./path/to/local/manifests --kustomization-file ./path/to/local/my-app.yaml + +# Build in dry-run mode without connecting to the cluster. +# Note that variable substitutions from Secrets and ConfigMaps are skipped in dry-run mode. +flux build kustomization my-app --path ./path/to/local/manifests --kustomization-file ./path/to/local/my-app.yaml --dry-run`, ValidArgsFunction: resourceNamesCompletionFunc(kustomizev1.GroupVersion.WithKind(kustomizev1.KustomizationKind)), RunE: buildKsCmdRun, } @@ -48,6 +52,7 @@ flux build kustomization my-app --path ./path/to/local/manifests --kustomization type buildKsFlags struct { kustomizationFile string path string + dryRun bool } var buildKsArgs buildKsFlags @@ -55,10 +60,11 @@ var buildKsArgs buildKsFlags func init() { buildKsCmd.Flags().StringVar(&buildKsArgs.path, "path", "", "Path to the manifests location.") buildKsCmd.Flags().StringVar(&buildKsArgs.kustomizationFile, "kustomization-file", "", "Path to the Flux Kustomization YAML file.") + buildKsCmd.Flags().BoolVar(&buildKsArgs.dryRun, "dry-run", false, "Dry run mode.") buildCmd.AddCommand(buildKsCmd) } -func buildKsCmdRun(cmd *cobra.Command, args []string) error { +func buildKsCmdRun(cmd *cobra.Command, args []string) (err error) { if len(args) < 1 { return fmt.Errorf("%s name is required", kustomizationType.humanKind) } @@ -72,13 +78,22 @@ func buildKsCmdRun(cmd *cobra.Command, args []string) error { return fmt.Errorf("invalid resource path %q", buildKsArgs.path) } + if buildKsArgs.dryRun && buildKsArgs.kustomizationFile == "" { + return fmt.Errorf("dry-run mode requires a kustomization file") + } + if buildKsArgs.kustomizationFile != "" { if fs, err := os.Stat(buildKsArgs.kustomizationFile); os.IsNotExist(err) || fs.IsDir() { return fmt.Errorf("invalid kustomization file %q", buildKsArgs.kustomizationFile) } } - builder, err := build.NewBuilder(kubeconfigArgs, kubeclientOptions, name, buildKsArgs.path, build.WithTimeout(rootArgs.timeout), build.WithKustomizationFile(buildKsArgs.kustomizationFile)) + builder, err := build.NewBuilder(name, buildKsArgs.path, + build.WithClientConfig(kubeconfigArgs, kubeclientOptions), + build.WithTimeout(rootArgs.timeout), + build.WithKustomizationFile(buildKsArgs.kustomizationFile), + build.WithDryRun(buildKsArgs.dryRun), + ) if err != nil { return err } diff --git a/cmd/flux/build_kustomization_test.go b/cmd/flux/build_kustomization_test.go index aba1b16c..5d78a7cb 100644 --- a/cmd/flux/build_kustomization_test.go +++ b/cmd/flux/build_kustomization_test.go @@ -142,6 +142,12 @@ spec: resultFile: "./testdata/build-kustomization/podinfo-with-var-substitution-result.yaml", assertFunc: "assertGoldenTemplateFile", }, + { + name: "build deployment and configmap with var substitution in dry-run mode", + args: "build kustomization podinfo --kustomization-file ./testdata/build-kustomization/podinfo.yaml --path ./testdata/build-kustomization/var-substitution --dry-run", + resultFile: "./testdata/build-kustomization/podinfo-with-var-substitution-result.yaml", + assertFunc: "assertGoldenTemplateFile", + }, } tmpl := map[string]string{ diff --git a/cmd/flux/diff_kustomization.go b/cmd/flux/diff_kustomization.go index baeda363..335717f6 100644 --- a/cmd/flux/diff_kustomization.go +++ b/cmd/flux/diff_kustomization.go @@ -77,12 +77,21 @@ func diffKsCmdRun(cmd *cobra.Command, args []string) error { } } - var builder *build.Builder - var err error + var ( + builder *build.Builder + err error + ) if diffKsArgs.progressBar { - builder, err = build.NewBuilder(kubeconfigArgs, kubeclientOptions, name, diffKsArgs.path, build.WithTimeout(rootArgs.timeout), build.WithKustomizationFile(diffKsArgs.kustomizationFile), build.WithProgressBar()) + builder, err = build.NewBuilder(name, diffKsArgs.path, + build.WithClientConfig(kubeconfigArgs, kubeclientOptions), + build.WithTimeout(rootArgs.timeout), + build.WithKustomizationFile(diffKsArgs.kustomizationFile), + build.WithProgressBar()) } else { - builder, err = build.NewBuilder(kubeconfigArgs, kubeclientOptions, name, diffKsArgs.path, build.WithTimeout(rootArgs.timeout), build.WithKustomizationFile(diffKsArgs.kustomizationFile)) + builder, err = build.NewBuilder(name, diffKsArgs.path, + build.WithClientConfig(kubeconfigArgs, kubeclientOptions), + build.WithTimeout(rootArgs.timeout), + build.WithKustomizationFile(diffKsArgs.kustomizationFile)) } if err != nil { diff --git a/cmd/flux/diff_kustomization_test.go b/cmd/flux/diff_kustomization_test.go index 60e73a6c..3c7a3071 100644 --- a/cmd/flux/diff_kustomization_test.go +++ b/cmd/flux/diff_kustomization_test.go @@ -97,7 +97,7 @@ func TestDiffKustomization(t *testing.T) { "fluxns": allocateNamespace("flux-system"), } - b, _ := build.NewBuilder(kubeconfigArgs, kubeclientOptions, "podinfo", "") + b, _ := build.NewBuilder("podinfo", "", build.WithClientConfig(kubeconfigArgs, kubeclientOptions)) resourceManager, err := b.Manager() if err != nil { diff --git a/go.mod b/go.mod index a9139e11..045d0e71 100644 --- a/go.mod +++ b/go.mod @@ -2,26 +2,24 @@ module github.com/fluxcd/flux2 go 1.18 -replace github.com/fluxcd/pkg/kustomize => github.com/souleb/pkg/kustomize v0.0.0-20221114164450-c3ad651f477b - require ( github.com/Masterminds/semver/v3 v3.1.1 - github.com/ProtonMail/go-crypto v0.0.0-20220930113650-c6815a8c17ad + github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4 github.com/cyphar/filepath-securejoin v0.2.3 - github.com/distribution/distribution/v3 v3.0.0-20221021092657-c47a966fded8 + github.com/distribution/distribution/v3 v3.0.0-20221111170714-3b8fbf975279 github.com/fluxcd/go-git-providers v0.9.0 github.com/fluxcd/helm-controller/api v0.26.0 github.com/fluxcd/image-automation-controller/api v0.26.1 github.com/fluxcd/image-reflector-controller/api v0.22.1 github.com/fluxcd/kustomize-controller/api v0.30.0 github.com/fluxcd/notification-controller/api v0.28.0 - github.com/fluxcd/pkg/apis/meta v0.17.0 - github.com/fluxcd/pkg/kustomize v0.8.0 - github.com/fluxcd/pkg/oci v0.14.0 - github.com/fluxcd/pkg/runtime v0.22.0 - github.com/fluxcd/pkg/sourceignore v0.2.0 - github.com/fluxcd/pkg/ssa v0.21.0 - github.com/fluxcd/pkg/ssh v0.6.0 + github.com/fluxcd/pkg/apis/meta v0.18.0 + github.com/fluxcd/pkg/kustomize v0.10.0 + github.com/fluxcd/pkg/oci v0.15.0 + github.com/fluxcd/pkg/runtime v0.24.0 + github.com/fluxcd/pkg/sourceignore v0.3.0 + github.com/fluxcd/pkg/ssa v0.22.0 + github.com/fluxcd/pkg/ssh v0.7.0 github.com/fluxcd/pkg/untar v0.2.0 github.com/fluxcd/pkg/version v0.2.0 github.com/fluxcd/source-controller/api v0.31.0 @@ -29,28 +27,28 @@ require ( github.com/gonvenience/bunt v1.3.4 github.com/gonvenience/ytbx v1.4.4 github.com/google/go-cmp v0.5.9 - github.com/google/go-containerregistry v0.12.0 + github.com/google/go-containerregistry v0.12.1 github.com/hashicorp/go-multierror v1.1.1 github.com/homeport/dyff v1.5.6 github.com/lucasb-eyer/go-colorful v1.2.0 github.com/manifoldco/promptui v0.9.0 github.com/mattn/go-shellwords v1.0.12 github.com/olekukonko/tablewriter v0.0.5 - github.com/onsi/gomega v1.22.1 + github.com/onsi/gomega v1.24.1 github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 - github.com/spf13/cobra v1.6.0 + github.com/spf13/cobra v1.6.1 github.com/spf13/pflag v1.0.5 github.com/theckman/yacspin v0.13.12 - golang.org/x/crypto v0.1.0 - golang.org/x/term v0.1.0 - k8s.io/api v0.25.3 - k8s.io/apiextensions-apiserver v0.25.3 - k8s.io/apimachinery v0.25.3 - k8s.io/cli-runtime v0.25.3 - k8s.io/client-go v0.25.3 - k8s.io/kubectl v0.25.3 - sigs.k8s.io/cli-utils v0.33.0 - sigs.k8s.io/controller-runtime v0.13.0 + golang.org/x/crypto v0.2.0 + golang.org/x/term v0.2.0 + k8s.io/api v0.25.4 + k8s.io/apiextensions-apiserver v0.25.4 + k8s.io/apimachinery v0.25.4 + k8s.io/cli-runtime v0.25.4 + k8s.io/client-go v0.25.4 + k8s.io/kubectl v0.25.4 + sigs.k8s.io/cli-utils v0.34.0 + sigs.k8s.io/controller-runtime v0.13.1 sigs.k8s.io/kustomize/api v0.12.1 sigs.k8s.io/kustomize/kyaml v0.13.9 sigs.k8s.io/yaml v1.3.0 @@ -64,8 +62,8 @@ replace gopkg.in/yaml.v3 => gopkg.in/yaml.v3 v3.0.1 require ( cloud.google.com/go v0.99.0 // indirect - github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.3 // indirect - github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.2.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.2.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0 // indirect github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect github.com/Azure/go-autorest v14.2.0+incompatible // indirect @@ -74,13 +72,13 @@ require ( github.com/Azure/go-autorest/autorest/date v0.3.0 // indirect github.com/Azure/go-autorest/logger v0.2.1 // indirect github.com/Azure/go-autorest/tracing v0.6.0 // indirect - github.com/AzureAD/microsoft-authentication-library-for-go v0.5.1 // indirect + github.com/AzureAD/microsoft-authentication-library-for-go v0.7.0 // indirect github.com/BurntSushi/toml v1.0.0 // indirect github.com/MakeNowJust/heredoc v1.0.0 // indirect github.com/Microsoft/go-winio v0.6.0 // indirect github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d // indirect github.com/acomagu/bufpipe v1.0.3 // indirect - github.com/aws/aws-sdk-go v1.44.105 // indirect + github.com/aws/aws-sdk-go v1.44.137 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bshuster-repo/logrus-logstash-hook v1.0.0 // indirect github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd // indirect @@ -101,27 +99,27 @@ require ( github.com/docker/go-metrics v0.0.1 // indirect github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1 // indirect github.com/drone/envsubst v1.0.3 // indirect - github.com/emicklei/go-restful/v3 v3.8.0 // indirect - github.com/emirpasic/gods v1.12.0 // indirect - github.com/evanphx/json-patch v4.12.0+incompatible // indirect + github.com/emicklei/go-restful/v3 v3.10.0 // indirect + github.com/emirpasic/gods v1.18.1 // indirect + github.com/evanphx/json-patch v5.6.0+incompatible // indirect github.com/evanphx/json-patch/v5 v5.6.0 // indirect - github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d // indirect + github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f // indirect github.com/fatih/color v1.13.0 // indirect github.com/felixge/httpsnoop v1.0.1 // indirect + github.com/fluxcd/go-git/v5 v5.0.0-20221104190732-329fd6659b10 // indirect github.com/fluxcd/pkg/apis/acl v0.1.0 // indirect - github.com/fluxcd/pkg/apis/kustomize v0.6.0 // indirect + github.com/fluxcd/pkg/apis/kustomize v0.7.0 // indirect github.com/fluxcd/pkg/tar v0.2.0 // indirect - github.com/fsnotify/fsnotify v1.5.4 // indirect - github.com/go-errors/errors v1.0.1 // indirect + github.com/fsnotify/fsnotify v1.6.0 // indirect + github.com/go-errors/errors v1.4.2 // indirect github.com/go-git/gcfg v1.5.0 // indirect github.com/go-git/go-billy/v5 v5.3.1 // indirect github.com/go-logr/logr v1.2.3 // indirect github.com/go-openapi/jsonpointer v0.19.5 // indirect github.com/go-openapi/jsonreference v0.20.0 // indirect - github.com/go-openapi/swag v0.21.1 // indirect + github.com/go-openapi/swag v0.22.3 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang-jwt/jwt v3.2.1+incompatible // indirect - github.com/golang-jwt/jwt/v4 v4.4.1 // indirect + github.com/golang-jwt/jwt/v4 v4.4.2 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.2 // indirect github.com/gomodule/redigo v1.8.2 // indirect @@ -129,7 +127,7 @@ require ( github.com/gonvenience/term v1.0.2 // indirect github.com/gonvenience/text v1.0.7 // indirect github.com/gonvenience/wrap v1.1.2 // indirect - github.com/google/btree v1.0.1 // indirect + github.com/google/btree v1.1.2 // indirect github.com/google/gnostic v0.6.9 // indirect github.com/google/go-github/v47 v47.0.0 // indirect github.com/google/go-querystring v1.1.0 // indirect @@ -139,17 +137,17 @@ require ( github.com/gorilla/handlers v1.5.1 // indirect github.com/gorilla/mux v1.8.0 // indirect github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 // indirect - github.com/hashicorp/errwrap v1.0.0 // indirect + github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/hashicorp/go-retryablehttp v0.7.1 // indirect github.com/hashicorp/golang-lru v0.5.4 // indirect - github.com/imdario/mergo v0.3.12 // indirect + github.com/imdario/mergo v0.3.13 // indirect github.com/inconshreveable/mousetrap v1.0.1 // indirect github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect - github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351 // indirect + github.com/kevinburke/ssh_config v1.2.0 // indirect github.com/klauspost/compress v1.15.11 // indirect github.com/kylelemons/godebug v1.1.0 // indirect github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect @@ -158,13 +156,13 @@ require ( github.com/mattn/go-colorable v0.1.12 // indirect github.com/mattn/go-isatty v0.0.14 // indirect github.com/mattn/go-runewidth v0.0.13 // indirect - github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect + github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/go-ps v1.0.0 // indirect - github.com/mitchellh/go-wordwrap v1.0.0 // indirect + github.com/mitchellh/go-wordwrap v1.0.1 // indirect github.com/mitchellh/hashstructure v1.1.0 // indirect github.com/moby/spdystream v0.2.0 // indirect - github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6 // indirect + github.com/moby/term v0.0.0-20221105221325-4eb28fa6025c // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 // indirect @@ -174,8 +172,8 @@ require ( github.com/peterbourgon/diskv v2.0.1+incompatible // indirect github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 // indirect github.com/pkg/errors v0.9.1 // indirect - github.com/prometheus/client_golang v1.13.0 // indirect - github.com/prometheus/client_model v0.2.0 // indirect + github.com/prometheus/client_golang v1.14.0 // indirect + github.com/prometheus/client_model v0.3.0 // indirect github.com/prometheus/common v0.37.0 // indirect github.com/prometheus/procfs v0.8.0 // indirect github.com/rivo/uniseg v0.2.0 // indirect @@ -187,19 +185,19 @@ require ( github.com/vbatts/tar-split v0.11.2 // indirect github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74 // indirect github.com/xanzy/go-gitlab v0.73.1 // indirect - github.com/xanzy/ssh-agent v0.3.0 // indirect + github.com/xanzy/ssh-agent v0.3.2 // indirect github.com/xlab/treeprint v1.1.0 // indirect github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43 // indirect github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50 // indirect github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f // indirect - go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 // indirect + go.starlark.net v0.0.0-20221028183056-acb66ad56dd2 // indirect golang.org/x/mod v0.6.0 // indirect - golang.org/x/net v0.1.0 // indirect - golang.org/x/oauth2 v0.1.0 // indirect + golang.org/x/net v0.2.0 // indirect + golang.org/x/oauth2 v0.2.0 // indirect golang.org/x/sync v0.1.0 // indirect - golang.org/x/sys v0.1.0 // indirect + golang.org/x/sys v0.2.0 // indirect golang.org/x/text v0.4.0 // indirect - golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9 // indirect + golang.org/x/time v0.2.0 // indirect golang.org/x/tools v0.1.12 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect @@ -208,10 +206,10 @@ require ( gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/component-base v0.25.3 // indirect + k8s.io/component-base v0.25.4 // indirect k8s.io/klog/v2 v2.80.1 // indirect - k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1 // indirect - k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed // indirect + k8s.io/kube-openapi v0.0.0-20221110221610-a28e98eb7c70 // indirect + k8s.io/utils v0.0.0-20221108210102-8e77b1f39fe2 // indirect sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 // indirect sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect ) diff --git a/go.sum b/go.sum index 0db981b7..f1c3782f 100644 --- a/go.sum +++ b/go.sum @@ -45,11 +45,11 @@ cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohl cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/AdaLogics/go-fuzz-headers v0.0.0-20220903154154-e8044f6e4c72 h1:1sCHCT0xRr7UArrI1WJxsl9S8QeYdf0fmuGIl2xb7YI= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.3 h1:8LoU8N2lIUzkmstvwXvVfniMZlFbesfT2AmA1aqvRr8= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.3/go.mod h1:uGG2W01BaETf0Ozp+QxxKJdMBNRWPdstHG0Fmdwn1/U= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0 h1:QkAcEIAKbNL4KoFr4SathZPhDhF4mVwpBMFlYjyAqy8= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0/go.mod h1:bhXu1AjYL+wutSL/kpSq6s7733q2Rb0yuot9Zgfqa/0= +github.com/AdaLogics/go-fuzz-headers v0.0.0-20221103172237-443f56ff4ba8 h1:d+pBUmsteW5tM87xmVXHZ4+LibHRFn40SPAoZJOg2ak= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.2.0 h1:sVW/AFBTGyJxDaMYlq0ct3jUXTtj12tQ6zE2GZUgVQw= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.2.0/go.mod h1:uGG2W01BaETf0Ozp+QxxKJdMBNRWPdstHG0Fmdwn1/U= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.2.0 h1:t/W5MYAuQy81cvM8VUNfRLzhtKpXhVUAN7Cd7KVbTyc= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.2.0/go.mod h1:NBanQUfSWiWn3QEpWDTCU0IjBECKOYvl2R8xdRtMtiM= github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0 h1:jp0dGvZ7ZK0mgqnTSClMxa5xuRL7NZgHameVYF6BurY= github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0/go.mod h1:eWRD7oawr1Mu1sLCawqVc0CUiF43ia3qQMxLscsKQ9w= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= @@ -70,8 +70,8 @@ github.com/Azure/go-autorest/logger v0.2.1 h1:IG7i4p/mDa2Ce4TRyAO8IHnVhAVF3RFU+Z github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo= github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= -github.com/AzureAD/microsoft-authentication-library-for-go v0.5.1 h1:BWe8a+f/t+7KY7zH2mqygeUD0t8hNFXe08p1Pb3/jKE= -github.com/AzureAD/microsoft-authentication-library-for-go v0.5.1/go.mod h1:Vt9sXTKwMyGcOxSmLDMnGPgqsUg7m8pe215qMLrDXw4= +github.com/AzureAD/microsoft-authentication-library-for-go v0.7.0 h1:VgSJlZH5u0k2qxSpqyghcFQKmvYckj46uymKK5XzkBM= +github.com/AzureAD/microsoft-authentication-library-for-go v0.7.0/go.mod h1:BDJ5qMFKx9DugEg3+uQSDCdbYPr5s9vBTrL9P8TpqOU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v1.0.0 h1:dtDWrepsVPfW9H/4y7dDgFc2MBUSeJhlaDtK13CxFlU= github.com/BurntSushi/toml v1.0.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= @@ -82,12 +82,13 @@ github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030I github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= +github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= -github.com/ProtonMail/go-crypto v0.0.0-20220930113650-c6815a8c17ad h1:QeeqI2zxxgZVe11UrYFXXx6gVxPVF40ygekjBzEg4XY= -github.com/ProtonMail/go-crypto v0.0.0-20220930113650-c6815a8c17ad/go.mod h1:UBYPn8k0D56RtnR8RFQMjmh4KrZzWJ5o7Z9SYjossQ8= +github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4 h1:ra2OtmuW0AE5csawV4YXMNGNQQXvLRps3z2Z59OPO+I= +github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4/go.mod h1:UBYPn8k0D56RtnR8RFQMjmh4KrZzWJ5o7Z9SYjossQ8= github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d h1:UrqY+r/OJnIp5u0s1SbQ8dVfLCZJsnvazdBP5hS4iRs= github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ= github.com/acomagu/bufpipe v1.0.3 h1:fxAGrHZTgQ9w5QqVItgzwj235/uYZYgbXitB+dLupOk= @@ -97,13 +98,14 @@ github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuy github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo4JG6LR5AXSUEsOjtdm0kw0FtQtMJA= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= +github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= +github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= -github.com/aws/aws-sdk-go v1.44.105 h1:UUwoD1PRKIj3ltrDUYTDQj5fOTK3XsnqolLpRTMmSEM= -github.com/aws/aws-sdk-go v1.44.105/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= +github.com/aws/aws-sdk-go v1.44.137 h1:GH2bUPiW7/gHtB04NxQOSOrKqFNjLGKmqt5YaO+K1SE= +github.com/aws/aws-sdk-go v1.44.137/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= @@ -147,14 +149,13 @@ github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHH github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.11 h1:07n33Z8lZxZ2qwegKbObQohDhXDQxiMMz1NOUGYlesw= -github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cyphar/filepath-securejoin v0.2.3 h1:YX6ebbZCZP7VkM3scTTokDgBL2TY741X51MTk3ycuNI= github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/distribution/distribution/v3 v3.0.0-20221021092657-c47a966fded8 h1:zuxvqNfQKyGNH3a1yFh1ofD4Y7ycgdwQhHX6QRH+Cwo= -github.com/distribution/distribution/v3 v3.0.0-20221021092657-c47a966fded8/go.mod h1:6rIc5NMSjXjjnwzWWy3HAm9gDBu+X7aCzL8VrHIKgxM= +github.com/distribution/distribution/v3 v3.0.0-20221111170714-3b8fbf975279 h1:+lFUfSfK1/rMGIUUAwu6O+t4WGRwBU1EpaQTcN8KaeM= +github.com/distribution/distribution/v3 v3.0.0-20221111170714-3b8fbf975279/go.mod h1:4x0IxAMsdeCSTr9UopCvp6MnryD2nyRLycsOrgvveAs= github.com/dnaeon/go-vcr v1.1.0 h1:ReYa/UBrRyQdant9B4fNHGoCNKw6qh6P0fsdGmZpR7c= github.com/docker/cli v20.10.20+incompatible h1:lWQbHSHUFs7KraSN2jOJK7zbMS2jNCHI4mt4xUFUVQ4= github.com/docker/cli v20.10.20+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= @@ -174,10 +175,11 @@ github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3 github.com/drone/envsubst v1.0.3 h1:PCIBwNDYjs50AsLZPYdfhSATKaRg/FJmDc2D6+C2x8g= github.com/drone/envsubst v1.0.3/go.mod h1:N2jZmlMufstn1KEqvbHjw40h1KyTmnVzHcSc9bFiJ2g= github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153 h1:yUdfgN0XgIJw7foRItutHYUIhlcKzcSf5vDpdhQAKTc= -github.com/emicklei/go-restful/v3 v3.8.0 h1:eCZ8ulSerjdAiaNpF7GxXIE7ZCMo1moN1qX+S609eVw= -github.com/emicklei/go-restful/v3 v3.8.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= -github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg= +github.com/emicklei/go-restful/v3 v3.10.0 h1:X4gma4HM7hFm6WMeAsTfqA0GOfdNoCzBIkHGoRLGXuM= +github.com/emicklei/go-restful/v3 v3.10.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= +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= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= @@ -187,12 +189,12 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.m github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/evanphx/json-patch v0.5.2/go.mod h1:ZWS5hhDbVDyob71nXKNL0+PWn6ToqBHMikGIFbs31qQ= -github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH5pOlLGNtQ5lPWQu84= -github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch v5.6.0+incompatible h1:jBYDEEiFBPxA0v50tFdvOzQQTCvpL6mnFh5mB2/l16U= +github.com/evanphx/json-patch v5.6.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJCLunww= github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= -github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d h1:105gxyaGwCFad8crR9dcMQWvV9Hvulu6hwUh4tWPJnM= -github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d/go.mod h1:ZZMPRZwes7CROmyNKgQzC3XPs6L/G2EJLHddWejkmf4= +github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f h1:Wl78ApPPB2Wvf/TIe2xdyJxTlb6obmF18d8QdkxNDu4= +github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f/go.mod h1:OSYXu++VVOHnXeitef/D8n/6y4QV8uLHSFXX4NeXMGc= github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= github.com/felixge/httpsnoop v1.0.1 h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8SPQ= @@ -200,6 +202,8 @@ github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSw github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0= github.com/fluxcd/go-git-providers v0.9.0 h1:iiiKe3dzRCgVkjEi8rfpvaWTZwuGRfb3RJFhjSNz+Uc= github.com/fluxcd/go-git-providers v0.9.0/go.mod h1:GcaDVP9RlamLKJp25Nwi7X5t0MyZV3FY+qy1GiRdbtk= +github.com/fluxcd/go-git/v5 v5.0.0-20221104190732-329fd6659b10 h1:au798417R1iWtgcgKe3Dg495mexQmuxelL+NebAtexE= +github.com/fluxcd/go-git/v5 v5.0.0-20221104190732-329fd6659b10/go.mod h1:w8bjt1WtWUxMEmlifjBJP9bK9QAG1Vw1Lw7RzchJFNk= github.com/fluxcd/helm-controller/api v0.26.0 h1:UCod+R1Oct2jg5cXHlVBC57Jy01lMdpl9MA+8UPogvY= github.com/fluxcd/helm-controller/api v0.26.0/go.mod h1:Ef7OnSHwMub7Z3F+UNe8p/mblOQ2aSQjCWSRfAqG2FA= github.com/fluxcd/image-automation-controller/api v0.26.1 h1:+9ISIrgvrqPhJcEKrhlvocu29CEwSn6kjAvsG9XlTXY= @@ -212,20 +216,22 @@ github.com/fluxcd/notification-controller/api v0.28.0 h1:7dRUoKgVatGB235iOl0Z2PX github.com/fluxcd/notification-controller/api v0.28.0/go.mod h1:USY8Mz7K9uoIn0cNBqq2WTix2cbzpFi9kbs4CMBjB+w= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= -github.com/fluxcd/pkg/apis/kustomize v0.6.0 h1:Afxv3Uv+xiuettzqm3sP0ceWikDZTfHdHtLv6u2nFM8= -github.com/fluxcd/pkg/apis/kustomize v0.6.0/go.mod h1:iY0zSpK6eUiPfNt/yR6g0q/wQP+wH+Ax/L7KBOx5x2M= -github.com/fluxcd/pkg/apis/meta v0.17.0 h1:Y2dfo1syHZDb9Mexjr2SWdcj1FnxnRXm015hEnhl6wU= -github.com/fluxcd/pkg/apis/meta v0.17.0/go.mod h1:GrOVzWXiu22XjLNgLLe2EBYhQPqZetes5SIADb4bmHE= -github.com/fluxcd/pkg/oci v0.14.0 h1:KwjOf2OSB1bZvNEwDfp+FbOrK0fMcSYA01AJEc671mQ= -github.com/fluxcd/pkg/oci v0.14.0/go.mod h1:TH7ru7YlX5L3xihbdnIgYVWXsOqrYcJIci/Mq4MgWbo= -github.com/fluxcd/pkg/runtime v0.22.0 h1:4YV/An41b+OGdSWDogwFfHr22CEE/in+lBLEK0fr1yc= -github.com/fluxcd/pkg/runtime v0.22.0/go.mod h1:Cm6jIhltzXIM3CRRY6SFASDn+z2m/1yPqOWwD73c3io= -github.com/fluxcd/pkg/sourceignore v0.2.0 h1:ooNbIkfxqNB+KKiY4AU+/DxwzjIKIOWBRK1As5QFlug= -github.com/fluxcd/pkg/sourceignore v0.2.0/go.mod h1:m9/q+YLMNSWjXns1n/5q3ucwzSSddti+D6ExbNaCo6s= -github.com/fluxcd/pkg/ssa v0.21.0 h1:aeoTohPNf5x7jQjHidyLJAOHw3EyHOQoQN3mN2i+4cc= -github.com/fluxcd/pkg/ssa v0.21.0/go.mod h1:jumyhUbEMDnduN7anSlKfxl2fEoyeyv+Ta5hWCbxI5Q= -github.com/fluxcd/pkg/ssh v0.6.0 h1:yRJ866obXCo0JseJCqlGKtF8cumioPcwIC6kMwf8Spg= -github.com/fluxcd/pkg/ssh v0.6.0/go.mod h1:Puf+hWNzFsqdHtjDpsI3PTTvitZu41ObuPFblOdzrrI= +github.com/fluxcd/pkg/apis/kustomize v0.7.0 h1:X2htBmJ91nGYv4d93gin665MFWKNGiNwUiZ08/Zz0hY= +github.com/fluxcd/pkg/apis/kustomize v0.7.0/go.mod h1:Mu+KdktsEKWA4l/33CZdY5lB4hz51mqfcLzBZSwAqVg= +github.com/fluxcd/pkg/apis/meta v0.18.0 h1:s0LeulWcQ4DxVX6805vgDTxlA6bAYk+Lq1QHSnNdqLM= +github.com/fluxcd/pkg/apis/meta v0.18.0/go.mod h1:pYvXRFi1UKNNrGR34jw3uqOnMXw9X6dTkML8j5Z7tis= +github.com/fluxcd/pkg/kustomize v0.10.0 h1:EG5MbYrLtxeCiZxeFUgvyBhFZaXnKfeqqpg7O+J7o3s= +github.com/fluxcd/pkg/kustomize v0.10.0/go.mod h1:awHID4OKe2/WAfTFg4u0fURXZPUkrIslSZNSPX9MEFQ= +github.com/fluxcd/pkg/oci v0.15.0 h1:M8fiWveUPoUxZqvHc6om1/5tDYMOEdbJAURfKK7mGAA= +github.com/fluxcd/pkg/oci v0.15.0/go.mod h1:OcLmssDP65I5OUVZQY5GpqDtgaU9VypKgQVJElbyLs8= +github.com/fluxcd/pkg/runtime v0.24.0 h1:rQmm5Xq8K7f8xcPj1oNOInM1x4YwmgTucZJOP51Xmr4= +github.com/fluxcd/pkg/runtime v0.24.0/go.mod h1:I2T+HWVNzX0cxm9TgH+SVNHTwqlmEDiSke43JXsq9iY= +github.com/fluxcd/pkg/sourceignore v0.3.0 h1:pFO3hKV9ub+2SrNZPZE7xfiRhxsycRrd7JK7qB26nVw= +github.com/fluxcd/pkg/sourceignore v0.3.0/go.mod h1:ak3Tve/KwVzytZ5V2yBlGGpTJ/2oQ9kcP3iuwBOAHGo= +github.com/fluxcd/pkg/ssa v0.22.0 h1:HvJTuiYLZMxCjin7bAqBgnc2RjSqEfYrMbV5yINoM64= +github.com/fluxcd/pkg/ssa v0.22.0/go.mod h1:QND0ZNOQ5EzFxoNKfjUxE9J46AbRK3WKF8YkURwbVg0= +github.com/fluxcd/pkg/ssh v0.7.0 h1:FX5ky8SU9dYwbM6zEIDR3TSveLF01iyS95CtB5Ykpno= +github.com/fluxcd/pkg/ssh v0.7.0/go.mod h1:tCVZJI8jPOL0XCInJOrYGKapWA/zZCzqPtpiYUSQxww= github.com/fluxcd/pkg/tar v0.2.0 h1:HEUHgONQYsJGeZZ4x6h5nQU9Aox1I4T3bOp1faWTqf8= github.com/fluxcd/pkg/tar v0.2.0/go.mod h1:w0/TOC7kwBJhnSJn7TCABkc/I7ib1f2Yz6vOsbLBnhw= github.com/fluxcd/pkg/untar v0.2.0 h1:sJXU+FbJcNUb2ffLJNjeR3hwt3X2loVpOMlCUjyFw6E= @@ -235,20 +241,22 @@ github.com/fluxcd/pkg/version v0.2.0/go.mod h1:umN1VAOV0sB1JDVwb8eXZzuuqIAEku+y+ github.com/fluxcd/source-controller/api v0.31.0 h1:4PZQt2XILTUZ/2JOVGzAIpNDXjx8n10skAhuBHa9tVw= github.com/fluxcd/source-controller/api v0.31.0/go.mod h1:XOf8hJB7jFcAKiOb8HVZcegkBeNSb4g0nxqnNjeVufg= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= -github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= -github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= +github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= +github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gliderlabs/ssh v0.2.2 h1:6zsha5zo/TWhRhwqCD3+EarCAgZ2yN28ipRnGPnwkI0= github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= -github.com/go-errors/errors v1.0.1 h1:LUHzmkK3GUKUrL/1gfBUxAHzcev3apQlezX/+O7ma6w= -github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= +github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY= +github.com/gliderlabs/ssh v0.3.5/go.mod h1:8XB4KraRrX39qHhT6yxPsHedjA08I/uBVwj4xC+/+z4= +github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= +github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4= github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= github.com/go-git/go-billy/v5 v5.2.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= github.com/go-git/go-billy/v5 v5.3.1 h1:CPiOUAzKtMRvolEKw+bG1PLRpT7D3LIs3/3ey4Aiu34= github.com/go-git/go-billy/v5 v5.3.1/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= -github.com/go-git/go-git-fixtures/v4 v4.2.1 h1:n9gGL1Ct/yIw+nfsfr8s4+sbhT+Ncu2SubfXjIWgci8= github.com/go-git/go-git-fixtures/v4 v4.2.1/go.mod h1:K8zd3kDUAykwTdDCr+I0per6Y6vMiRR/nnVTBtavnB0= +github.com/go-git/go-git-fixtures/v4 v4.3.1 h1:y5z6dd3qi8Hl+stezc8p3JxDkoTRqMAlKnXHuzrfjTQ= +github.com/go-git/go-git-fixtures/v4 v4.3.1/go.mod h1:8LHG1a3SRW71ettAD/jW13h8c6AqjVSeL11RAdgaqpo= github.com/go-git/go-git/v5 v5.4.2 h1:BXyZu9t0VkbiHtqrsvdq39UDhGJTl1h55VW6CSC4aY4= github.com/go-git/go-git/v5 v5.4.2/go.mod h1:gQ1kArt6d+n+BGd+/B/I74HwRTLhth2+zti4ihgckDc= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= @@ -262,7 +270,6 @@ github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9 github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= -github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= @@ -273,18 +280,16 @@ github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34 github.com/go-openapi/jsonreference v0.20.0 h1:MYlu0sBgChmCfJxxUKZ8g1cPWFOB37YSZqewK7OKeyA= github.com/go-openapi/jsonreference v0.20.0/go.mod h1:Ag74Ico3lPc+zR+qjn4XBUmXymS4zJbYVCZmcgkasdo= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-openapi/swag v0.21.1 h1:wm0rhTb5z7qpJRHBdPOMuY4QjVUMbF6/kwoYeRAOrKU= -github.com/go-openapi/swag v0.21.1/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= +github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g= +github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang-jwt/jwt v3.2.1+incompatible h1:73Z+4BJcrTC+KczS6WvTPvRGOp1WmfEP4Q1lOd9Z/+c= -github.com/golang-jwt/jwt v3.2.1+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= -github.com/golang-jwt/jwt/v4 v4.4.1 h1:pC5DB52sCeK48Wlb9oPcdhnjkz1TKt1D/P7WKJ0kUcQ= -github.com/golang-jwt/jwt/v4 v4.4.1/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= +github.com/golang-jwt/jwt/v4 v4.4.2 h1:rcc4lwaZgFMCZ5jxF9ABolDcIHdBytAFgqFPbSJQAYs= +github.com/golang-jwt/jwt/v4 v4.4.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -335,8 +340,8 @@ github.com/gonvenience/ytbx v1.4.4 h1:jQopwyaLsVGuwdxSiN4WkXjsEaFNPJ3V4lUj7eyEpz github.com/gonvenience/ytbx v1.4.4/go.mod h1:w37+MKCPcCMY/jpPNmEklD4xKqrOAVBO6kIWW2+uI6M= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4= -github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= +github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= +github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= github.com/google/gnostic v0.6.9 h1:ZK/5VhkoX835RikCHpSUJV9a+S3e1zLh59YnyWeBW+0= github.com/google/gnostic v0.6.9/go.mod h1:Nm8234We1lq6iB9OmlgNv3nH91XLLVZHCDayfA3xq+E= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -353,8 +358,8 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-containerregistry v0.12.0 h1:nidOEtFYlgPCRqxCKj/4c/js940HVWplCWc5ftdfdUA= -github.com/google/go-containerregistry v0.12.0/go.mod h1:sdIK+oHQO7B93xI8UweYdl887YhuIwg9vz8BSLH3+8k= +github.com/google/go-containerregistry v0.12.1 h1:W1mzdNUTx4Zla4JaixCRLhORcR7G6KxE5hHl5fkPsp8= +github.com/google/go-containerregistry v0.12.1/go.mod h1:sdIK+oHQO7B93xI8UweYdl887YhuIwg9vz8BSLH3+8k= github.com/google/go-github/v47 v47.0.0 h1:eQap5bIRZibukP0VhngWgpuM0zhY4xntqOzn6DhdkE4= github.com/google/go-github/v47 v47.0.0/go.mod h1:DRjdvizXE876j0YOZwInB1ESpOcU/xFBClNiQLSdorE= github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= @@ -383,7 +388,6 @@ github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLe github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= -github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -399,8 +403,9 @@ github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/ad github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 h1:+ngKgrYPPJrOjhax5N+uePQ0Fh1Z7PheYoUI/0nzkPA= github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= +github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= @@ -418,8 +423,9 @@ github.com/homeport/dyff v1.5.6 h1:6PNzGM0azeYXs401RZSLyIUS4sIX+YY3WBEZ3bnzkiE= github.com/homeport/dyff v1.5.6/go.mod h1:cMmplDz/DeUWPB4T/sD9GDpuTnMD2nk3rjn2f+5roEU= 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.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= +github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk= +github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= github.com/inconshreveable/mousetrap v1.0.1 h1:U3uMjPSQEBMNp1lFxmllqCPM6P5u/Xq7Pgzkat/bFNc= github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= @@ -443,8 +449,9 @@ github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1 github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= -github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351 h1:DowS9hvgyYSX4TO5NpyC606/Z4SxnNYbT+WX27or6Ck= github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= +github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= +github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.15.11 h1:Lcadnb3RKGin4FYM/orgq0qde+nc15E5Cbqg4B9Sx9c= @@ -468,7 +475,6 @@ github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69 github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/manifoldco/promptui v0.9.0 h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA= @@ -489,21 +495,21 @@ github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh github.com/mattn/go-shellwords v1.0.12 h1:M2zGm7EW6UQJvDeQxo4T51eKPurbeFbe8WtebGE2xrk= github.com/mattn/go-shellwords v1.0.12/go.mod h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lLtQsUlTZDWQ8Y= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= -github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= +github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-ps v1.0.0 h1:i6ampVEEF4wQFF+bkYfwYgY+F/uYJDktmvLPf7qIgjc= github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg= -github.com/mitchellh/go-wordwrap v1.0.0 h1:6GlHJ/LTGMrIJbwgdqdl2eEH8o+Exx/0m8ir9Gns0u4= -github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= +github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0= +github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0= github.com/mitchellh/hashstructure v1.1.0 h1:P6P1hdjqAAknpY/M1CGipelZgp+4y9ja9kmUZPXP+H0= github.com/mitchellh/hashstructure v1.1.0/go.mod h1:xUDAozZz0Wmdiufv0uyhnHkUTN6/6d8ulp4AwfLKrmA= github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f h1:2+myh5ml7lgEU/51gbeLHfKGNfgEQQIWrlbdaOsidbQ= github.com/moby/spdystream v0.2.0 h1:cjW1zVyyoiM0T7b6UoySUFqzXMoqRckQtXwGPiBhOM8= github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= -github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6 h1:dcztxKSvZ4Id8iPpHERQBbIJfabdt4wUm5qy3wOL2Zc= -github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= +github.com/moby/term v0.0.0-20221105221325-4eb28fa6025c h1:RC8WMpjonrBfyAh6VN/POIPtYD5tRAq0qMqCRjQNK+g= +github.com/moby/term v0.0.0-20221105221325-4eb28fa6025c/go.mod h1:9OcmHNQQUTbk4XCffrLgN1NEKc2mh5u++biHVrvHsSU= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -513,7 +519,6 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 h1:n6/2gBQ3RWajuToeY6ZtZTIKv2v7ThUy5KKusIT0yc0= github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00/go.mod h1:Pm3mSP3c5uWn86xMLZ5Sa7JB9GsEZySvHYXCTK4E9q4= -github.com/montanaflynn/stats v0.6.6/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= @@ -523,9 +528,9 @@ github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= -github.com/onsi/ginkgo/v2 v2.3.0 h1:kUMoxMoQG3ogk/QWyKh3zibV7BKZ+xBpWil1cTylVqc= -github.com/onsi/gomega v1.22.1 h1:pY8O4lBfsHKZHM/6nrxkhVPUznOlIu3quZcKP/M20KI= -github.com/onsi/gomega v1.22.1/go.mod h1:x6n7VNe4hw0vkyYUM4mjIXx3JbLiPaBPNgB7PRQ1tuM= +github.com/onsi/ginkgo/v2 v2.5.0 h1:TRtrvv2vdQqzkwrQ1ke6vtXf7IK34RBUJafIy1wMwls= +github.com/onsi/gomega v1.24.1 h1:KORJXNNTzJXzu4ScJWssJfJMnJ+2QJqhoQSRwNlze9E= +github.com/onsi/gomega v1.24.1/go.mod h1:3AOiACssS3/MajrniINInwbfOOtfZvplPzuRSmvt1jM= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= @@ -535,7 +540,6 @@ github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+v github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= -github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4/go.mod h1:N6UoU20jOqggOuDwUaBQpluzLNDqif3kq9z2wpdYEfQ= github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU= github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -550,13 +554,14 @@ github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQ github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= -github.com/prometheus/client_golang v1.13.0 h1:b71QUfeo5M8gq2+evJdTPfZhYMAU0uKPkyPJ7TPsloU= -github.com/prometheus/client_golang v1.13.0/go.mod h1:vTeo+zgvILHsnnj/39Ou/1fPN5nJFOEMgftOUOmlvYQ= +github.com/prometheus/client_golang v1.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw= +github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4= +github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= 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.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= @@ -592,26 +597,23 @@ github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrf github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= -github.com/souleb/pkg/kustomize v0.0.0-20221114164450-c3ad651f477b h1:JlaF96cEGlAxdW7NYi8ON398wR2xtrJkRUAAHFCTh0w= -github.com/souleb/pkg/kustomize v0.0.0-20221114164450-c3ad651f477b/go.mod h1:rXQcYjvqqS+9oCOA2J/w7KTnwNhdwDCeW4mE5zQRjN4= +github.com/skeema/knownhosts v1.1.0/go.mod h1:sKFq3RD6/TKZkSWn8boUbDC7Qkgcv+8XXijpFO6roag= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= -github.com/spf13/cobra v1.6.0 h1:42a0n6jwCot1pUmomAp4T7DeMD+20LFv4Q54pxLf2LI= -github.com/spf13/cobra v1.6.0/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/cobra v1.6.1 h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA= +github.com/spf13/cobra v1.6.1/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48= +github.com/stretchr/objx v0.4.0 h1:M2gUjqZET1qApGOWNSnZ49BAIMX4F/1plDv3+l31EJ4= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= +github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= github.com/texttheater/golang-levenshtein v1.0.1 h1:+cRNoVrfiwufQPhoMzB6N0Yf/Mqajr6t1lOv8GyGE2U= github.com/texttheater/golang-levenshtein v1.0.1/go.mod h1:PYAKrbF5sAiq9wd+H82hs7gNaen0CplQ9uvm6+enD/8= github.com/theckman/yacspin v0.13.12 h1:CdZ57+n0U6JMuh2xqjnjRq5Haj6v1ner2djtLQRzJr4= @@ -623,8 +625,9 @@ github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74 h1:JwtAtb github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74/go.mod h1:RmMWU37GKR2s6pgrIEB4ixgpVCt/cf7dnJv3fuH1J1c= github.com/xanzy/go-gitlab v0.73.1 h1:UMagqUZLJdjss1SovIC+kJCH4k2AZWXl58gJd38Y/hI= github.com/xanzy/go-gitlab v0.73.1/go.mod h1:d/a0vswScO7Agg1CZNz15Ic6SSvBG9vfw8egL99t4kA= -github.com/xanzy/ssh-agent v0.3.0 h1:wUMzuKtKilRgBAD1sUb8gOwwRr2FGoBVumcjoOACClI= github.com/xanzy/ssh-agent v0.3.0/go.mod h1:3s9xbODqPuuhK9JV1R321M/FlMZSBvE5aY6eAcqrDh0= +github.com/xanzy/ssh-agent v0.3.2 h1:eKj4SX2Fe7mui28ZgnFW5fmTz1EIr7ugo5s6wDxdHBM= +github.com/xanzy/ssh-agent v0.3.2/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= @@ -650,11 +653,11 @@ go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 h1:+FNtrFTmVw0YZGpBGX56XDee331t6JAXeK2bcyhLOOc= -go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5/go.mod h1:nmDLcffg48OtT/PSW0Hg7FvpRQsQh5OSqIylirxKC7o= -go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= +go.starlark.net v0.0.0-20221028183056-acb66ad56dd2 h1:5/KzhcSqd4UgY51l17r7C5g/JiE6DRw1Vq7VJfQHuMc= +go.starlark.net v0.0.0-20221028183056-acb66ad56dd2/go.mod h1:kIVgS18CjmEC3PqMd5kaJSGEifyV/CeB9x506ZJ1Vbk= +go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk= -go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= +go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= go.uber.org/zap v1.23.0 h1:OjGQ5KQDEUawVHxNwQgPpiypGHOxo2mNZsOqTak4fFY= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -667,8 +670,12 @@ golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.1.0 h1:MDRAIl0xIo9Io2xV565hzXHw3zVseKrJKodhohM5CjU= +golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= +golang.org/x/crypto v0.2.0 h1:BRXPfhNivWL5Yq0BGQ39a2sW6t44aODpfxkWjYdzewE= +golang.org/x/crypto v0.2.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -751,8 +758,10 @@ golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.1.0 h1:hZ/3BUoy5aId7sCpA/Tc5lt8DkFgdVS2onTpJsZ/fl0= +golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= +golang.org/x/net v0.2.0 h1:sZfSu1wtKLGlWI4ZZayP0ck9Y73K1ynO6gqzTdBVdPU= +golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= 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= @@ -770,8 +779,8 @@ golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.1.0 h1:isLCZuhj4v+tYv7eskaN4v/TM+A1begWWgyVJDdl1+Y= -golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= +golang.org/x/oauth2 v0.2.0 h1:GtQkldQ9m7yvzCL1V+LrYow3Khe0eJH0w7RbX/VbaIU= +golang.org/x/oauth2 v0.2.0/go.mod h1:Cwn6afJ8jrQwYMxQDTpISoXmXW9I6qF6vDeuuoX3Ibs= 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= @@ -802,7 +811,6 @@ golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191002063906-3421d5a6bb1c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -854,23 +862,29 @@ golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.1.0 h1:kunALQeHf1/185U1i0GOB/fy1IPRDDpuoOOqRReG57U= +golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.2.0 h1:ljd4t30dBnAvMZaQCevtY0xLLD0A+bRZXbgLMLU1F/A= +golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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= -golang.org/x/term v0.1.0 h1:g6Z6vPFA9dYBAF7DWcH6sCcOntplXsDKcliusYijMlw= +golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.2.0 h1:z85xZCsEl7bi/KwbNADeBYoOP0++7W1ipu+aGnpwzRM= +golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9 h1:ftMN5LMiBFjbzleLqtoBZk7KdJwhuybIU+FckUHgoyQ= -golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.2.0 h1:52I/1L54xyEQAYdtcSuxtiT84KGYTBGXwayxmIpNJhE= +golang.org/x/time v0.2.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= @@ -881,7 +895,6 @@ golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBn golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -1095,7 +1108,6 @@ gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= -gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= gotest.tools/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -1104,34 +1116,33 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -k8s.io/api v0.25.3 h1:Q1v5UFfYe87vi5H7NU0p4RXC26PPMT8KOpr1TLQbCMQ= -k8s.io/api v0.25.3/go.mod h1:o42gKscFrEVjHdQnyRenACrMtbuJsVdP+WVjqejfzmI= -k8s.io/apiextensions-apiserver v0.25.3 h1:bfI4KS31w2f9WM1KLGwnwuVlW3RSRPuIsfNF/3HzR0k= -k8s.io/apiextensions-apiserver v0.25.3/go.mod h1:ZJqwpCkxIx9itilmZek7JgfUAM0dnTsA48I4krPqRmo= -k8s.io/apimachinery v0.25.3 h1:7o9ium4uyUOM76t6aunP0nZuex7gDf8VGwkR5RcJnQc= -k8s.io/apimachinery v0.25.3/go.mod h1:jaF9C/iPNM1FuLl7Zuy5b9v+n35HGSh6AQ4HYRkCqwo= -k8s.io/cli-runtime v0.25.3 h1:Zs7P7l7db/5J+KDePOVtDlArAa9pZXaDinGWGZl0aM8= -k8s.io/cli-runtime v0.25.3/go.mod h1:InHHsjkyW5hQsILJGpGjeruiDZT/R0OkROQgD6GzxO4= -k8s.io/client-go v0.25.3 h1:oB4Dyl8d6UbfDHD8Bv8evKylzs3BXzzufLiO27xuPs0= -k8s.io/client-go v0.25.3/go.mod h1:t39LPczAIMwycjcXkVc+CB+PZV69jQuNx4um5ORDjQA= -k8s.io/component-base v0.25.3 h1:UrsxciGdrCY03ULT1h/S/gXFCOPnLhUVwSyx+hM/zq4= -k8s.io/component-base v0.25.3/go.mod h1:WYoS8L+IlTZgU7rhAl5Ctpw0WdMxDfCC5dkxcEFa/TI= -k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= +k8s.io/api v0.25.4 h1:3YO8J4RtmG7elEgaWMb4HgmpS2CfY1QlaOz9nwB+ZSs= +k8s.io/api v0.25.4/go.mod h1:IG2+RzyPQLllQxnhzD8KQNEu4c4YvyDTpSMztf4A0OQ= +k8s.io/apiextensions-apiserver v0.25.4 h1:7hu9pF+xikxQuQZ7/30z/qxIPZc2J1lFElPtr7f+B6U= +k8s.io/apiextensions-apiserver v0.25.4/go.mod h1:bkSGki5YBoZWdn5pWtNIdGvDrrsRWlmnvl9a+tAw5vQ= +k8s.io/apimachinery v0.25.4 h1:CtXsuaitMESSu339tfhVXhQrPET+EiWnIY1rcurKnAc= +k8s.io/apimachinery v0.25.4/go.mod h1:jaF9C/iPNM1FuLl7Zuy5b9v+n35HGSh6AQ4HYRkCqwo= +k8s.io/cli-runtime v0.25.4 h1:GTSBN7aKBrc2LqpdO30CmHQqJtRmotxV7XsMSP+QZIk= +k8s.io/cli-runtime v0.25.4/go.mod h1:JGOw1CR8v4Mcz6cEKA7bFQe0bPrNn1l5sGAX1/Ke4Eg= +k8s.io/client-go v0.25.4 h1:3RNRDffAkNU56M/a7gUfXaEzdhZlYhoW8dgViGy5fn8= +k8s.io/client-go v0.25.4/go.mod h1:8trHCAC83XKY0wsBIpbirZU4NTUpbuhc2JnI7OruGZw= +k8s.io/component-base v0.25.4 h1:n1bjg9Yt+G1C0WnIDJmg2fo6wbEU1UGMRiQSjmj7hNQ= +k8s.io/component-base v0.25.4/go.mod h1:nnZJU8OP13PJEm6/p5V2ztgX2oyteIaAGKGMYb2L2cY= k8s.io/klog/v2 v2.80.1 h1:atnLQ121W371wYYFawwYx1aEY2eUfs4l3J72wtgAwV4= k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= -k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1 h1:MQ8BAZPZlWk3S9K4a9NCkIFQtZShWqoha7snGixVgEA= -k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1/go.mod h1:C/N6wCaBHeBHkHUesQOQy2/MZqGgMAFPqGsGQLdbZBU= -k8s.io/kubectl v0.25.3 h1:HnWJziEtmsm4JaJiKT33kG0kadx68MXxUE8UEbXnN4U= -k8s.io/kubectl v0.25.3/go.mod h1:glU7PiVj/R6Ud4A9FJdTcJjyzOtCJyc0eO7Mrbh3jlI= -k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed h1:jAne/RjBTyawwAy0utX5eqigAwz/lQhTmy+Hr/Cpue4= -k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/kube-openapi v0.0.0-20221110221610-a28e98eb7c70 h1:zfqQc1V6/ZgGpvrOVvr62OjiqQX4lZjfznK34NQwkqw= +k8s.io/kube-openapi v0.0.0-20221110221610-a28e98eb7c70/go.mod h1:+Axhij7bCpeqhklhUTe3xmOn6bWxolyZEeyaFpjGtl4= +k8s.io/kubectl v0.25.4 h1:O3OA1z4V1ZyvxCvScjq0pxAP7ABgznr8UvnVObgI6Dc= +k8s.io/kubectl v0.25.4/go.mod h1:CKMrQ67Bn2YCP26tZStPQGq62zr9pvzEf65A0navm8k= +k8s.io/utils v0.0.0-20221108210102-8e77b1f39fe2 h1:GfD9OzL11kvZN5iArC6oTS7RTj7oJOIfnislxYlqTj8= +k8s.io/utils v0.0.0-20221108210102-8e77b1f39fe2/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/cli-utils v0.33.0 h1:/ioqfYu0hVeR2T2SDH3WVPgpqiJkrzqjJFrQ3u+baHk= -sigs.k8s.io/cli-utils v0.33.0/go.mod h1:g/zB9hJ5eUN7zIEBIxrO0CwhXU4YISJ+BkLJzvWwlEs= -sigs.k8s.io/controller-runtime v0.13.0 h1:iqa5RNciy7ADWnIc8QxCbOX5FEKVR3uxVxKHRMc2WIQ= -sigs.k8s.io/controller-runtime v0.13.0/go.mod h1:Zbz+el8Yg31jubvAEyglRZGdLAjplZl+PgtYNI6WNTI= +sigs.k8s.io/cli-utils v0.34.0 h1:zCUitt54f0/MYj/ajVFnG6XSXMhpZ72O/3RewIchW8w= +sigs.k8s.io/cli-utils v0.34.0/go.mod h1:EXyMwPMu9OL+LRnj0JEMsGG/fRvbgFadcVlSnE8RhFs= +sigs.k8s.io/controller-runtime v0.13.1 h1:tUsRCSJVM1QQOOeViGeX3GMT3dQF1eePPw6sEE3xSlg= +sigs.k8s.io/controller-runtime v0.13.1/go.mod h1:Zbz+el8Yg31jubvAEyglRZGdLAjplZl+PgtYNI6WNTI= sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 h1:iXTIw73aPyC+oRdyqqvVJuloN1p0AC/kzH07hu3NE+k= sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= sigs.k8s.io/kustomize/api v0.12.1 h1:7YM7gW3kYBwtKvoY216ZzY+8hM+lV53LUayghNRJ0vM= diff --git a/internal/build/build.go b/internal/build/build.go index 8786be6b..f4c3fca9 100644 --- a/internal/build/build.go +++ b/internal/build/build.go @@ -76,10 +76,13 @@ type Builder struct { kustomization *kustomizev1.Kustomization timeout time.Duration spinner *yacspin.Spinner + dryRun bool } +// BuilderOptionFunc is a function that configures a Builder type BuilderOptionFunc func(b *Builder) error +// WithKustomizationFile sets the kustomization file func WithKustomizationFile(file string) BuilderOptionFunc { return func(b *Builder) error { b.kustomizationFile = file @@ -87,6 +90,7 @@ func WithKustomizationFile(file string) BuilderOptionFunc { } } +// WithTimeout sets the timeout for the builder func WithTimeout(timeout time.Duration) BuilderOptionFunc { return func(b *Builder) error { b.timeout = timeout @@ -116,24 +120,47 @@ func WithProgressBar() BuilderOptionFunc { } } -// NewBuilder returns a new Builder -// to dp : create functional options -func NewBuilder(rcg *genericclioptions.ConfigFlags, clientOpts *runclient.Options, name, resources string, opts ...BuilderOptionFunc) (*Builder, error) { - kubeClient, err := utils.KubeClient(rcg, clientOpts) - if err != nil { - return nil, err +// WithClientConfig sets the client configuration +func WithClientConfig(rcg *genericclioptions.ConfigFlags, clientOpts *runclient.Options) BuilderOptionFunc { + return func(b *Builder) error { + kubeClient, err := utils.KubeClient(rcg, clientOpts) + if err != nil { + return err + } + + restMapper, err := rcg.ToRESTMapper() + if err != nil { + return err + } + b.client = kubeClient + b.restMapper = restMapper + b.namespace = *rcg.Namespace + return nil } +} - restMapper, err := rcg.ToRESTMapper() - if err != nil { - return nil, err +// WithDryRun sets the dry-run flag +func WithDryRun(dryRun bool) BuilderOptionFunc { + return func(b *Builder) error { + b.dryRun = dryRun + return nil } +} +// NewBuilder returns a new Builder +// It takes a kustomization name and a path to the resources +// It also takes a list of BuilderOptionFunc to configure the builder +// One of the options is WithClientConfig, that must be provided for the builder to work +// with the k8s cluster +// One other option is WithKustomizationFile, that must be provided for the builder to work +// with a local kustomization file. If the kustomization file is not provided, the builder +// will try to retrieve the kustomization object from the k8s cluster. +// WithDryRun sets the dry-run flag, and needs to be provided if the builder is used for +// a dry-run. This flag works in conjunction with WithKustomizationFile, because the +// kustomization object is not retrieved from the k8s cluster when the dry-run flag is set. +func NewBuilder(name, resources string, opts ...BuilderOptionFunc) (*Builder, error) { b := &Builder{ - client: kubeClient, - restMapper: restMapper, name: name, - namespace: *rcg.Namespace, resourcesPath: resources, } @@ -147,6 +174,14 @@ func NewBuilder(rcg *genericclioptions.ConfigFlags, clientOpts *runclient.Option b.timeout = defaultTimeout } + if b.dryRun && b.kustomizationFile == "" { + return nil, fmt.Errorf("kustomization file is required for dry-run") + } + + if !b.dryRun && b.client == nil { + return nil, fmt.Errorf("client is required for live run") + } + return b, nil } @@ -301,7 +336,7 @@ func (b *Builder) do(ctx context.Context, kustomization kustomizev1.Kustomizatio if err != nil { return nil, err } - outRes, err := kustomize.SubstituteVariables(ctx, b.client, unstructured.Unstructured{Object: data}, res, false) + outRes, err := kustomize.SubstituteVariables(ctx, b.client, unstructured.Unstructured{Object: data}, res, b.dryRun) if err != nil { return nil, fmt.Errorf("var substitution failed for '%s': %w", res.GetName(), err) } From da9cc00a56194aba3fa036ca02b3b4aa47c3ef79 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Thu, 17 Nov 2022 11:14:06 +0200 Subject: [PATCH 289/818] Update kubectl and remove nsswitch.conf in flux-cli image Signed-off-by: Stefan Prodan --- Dockerfile | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index be63c0ab..fc0332a2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ FROM alpine:3.16 as builder RUN apk add --no-cache ca-certificates curl ARG ARCH=linux/amd64 -ARG KUBECTL_VER=1.25.3 +ARG KUBECTL_VER=1.25.4 RUN curl -sL https://storage.googleapis.com/kubernetes-release/release/v${KUBECTL_VER}/bin/${ARCH}/kubectl \ -o /usr/local/bin/kubectl && chmod +x /usr/local/bin/kubectl && \ @@ -11,10 +11,6 @@ RUN curl -sL https://storage.googleapis.com/kubernetes-release/release/v${KUBECT FROM alpine:3.16 as flux-cli -# Create minimal nsswitch.conf file to prioritize the usage of /etc/hosts over DNS queries. -# https://github.com/gliderlabs/docker-alpine/issues/367#issuecomment-354316460 -RUN [ ! -e /etc/nsswitch.conf ] && echo 'hosts: files dns' > /etc/nsswitch.conf - RUN apk add --no-cache ca-certificates COPY --from=builder /usr/local/bin/kubectl /usr/local/bin/ From fa217b8775ce695eb4129b9c4f43db32cdbd72ba Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Thu, 20 Oct 2022 19:12:22 +0000 Subject: [PATCH 290/818] RFC: draft proposal for artifact revision fmt Signed-off-by: Hidde Beydals --- rfcs/XXXX-artifact-revision-format/README.md | 175 +++++++++++++++++++ 1 file changed, 175 insertions(+) create mode 100644 rfcs/XXXX-artifact-revision-format/README.md diff --git a/rfcs/XXXX-artifact-revision-format/README.md b/rfcs/XXXX-artifact-revision-format/README.md new file mode 100644 index 00000000..e9e15763 --- /dev/null +++ b/rfcs/XXXX-artifact-revision-format/README.md @@ -0,0 +1,175 @@ +# RFC-NNNN Artifact Revision format and introduction of digests + +**Status:** provisional + + + +**Creation date:** 2022-10-20 + +**Last update:** 2022-10-20 + +## Summary + +This RFC proposes to establish a canonical format for an `Artifact` which +points to a specific checksum (e.g. an OCI manifest digest or Git commit SHA) +of a named pointer (e.g. an OCI image tag or Git tag). In addition, it proposes +to include the algorithm name (e.g. `sha256`) as a prefix to any advertised +checksum in an `Artifact` and further referring to it as a `Digest` opposed to +a `Checksum`. + +## Motivation + +The current `Artifact` type's `Revision` field format is not "officially" +standardized (albeit assumed throughout our code bases), and has mostly been +derived from `GitRepository` which uses `/` as a delimiter between the named +pointer (a Git branch or tag) and a specific (SHA-1, or theoretical SHA-256) +revision. + +Since the introduction of `OCIRepository` and with the recent changes around +`HelmChart` objects to allow the consumption of charts from OCI registries. +This could be seen as outdated or confusing due to the format differing from +the canonical format used by OCI, which is `@:` (the +part after `@` formally known as a "digest") to refer to a specific version +of a tagged OCI manifest. + +While also taking note that Git does not have an official canonical format for +e.g. branch references at a specific commit, and `/` has less of a symbolic +meaning than `@`. Which could be interpreted as "`` _at_ +``". + +In addition, with the introduction of algorithm prefixes for an `Artifact`'s +checksum. It would be possible to add support and allow user configuration of +other algorithms than SHA-256. For example SHA-384 and SHA-512, or the more +performant (parallelizable) [BLAKE3][]. + +Besides this, it would make it easier to implement a client that can verify the +checksum without having to resort to an assumed format or guessing +method based on the length of it, and allows for a more robust solution in +which it can continue to calculate against the algorithm of a previous +configuration. + +The inclusion of the `Artifact`'s algorithm prefix has been proposed before in +[source-controller#855](https://github.com/fluxcd/source-controller/issues/855), +with supportive response from Core Maintainers. + +### Goals + +- Establish a canonical format to refer to an `Artifact`'s `Revision` field + which consists of a named pointer and a specific checksum reference. +- Allow easier verification of the `Artifact`'s checksum by including an + alias for the algorithm. +- Allow configuration of the algorithm used to calculate the checksum of an + `Artifact`. +- Allow configuration of [BLAKE3][] as an alternative to SHA for calculating + checksums. This has promising performance improvements over SHA-256, which + could allow for performance improvements in large scale environments. +- Allow compatability with SemVer name references which might contain an `@` + symbol already (e.g. `package@v1.0.0@sha256:...`, opposed to OCI's + `tag:v1.0.0@sha256:...`). + +### Non-Goals + +- Define a canonical format for an `Artifact`'s `Revision` field which contains + a named pointer and a different reference than a checksum. + +## Proposal + +### Establish an Artifact Revision format + +Change the format of the `Revision` field of the `source.toolkit.fluxcd.io` +Group's `Artifact` type across all `Source` kinds to contain an `@` delimiter +opposed to `/`, and include the algorithm alias as a prefix to the checksum +(creating a "digest"). + +```text +[ ] [ [ "@" ] ":" ] +``` + +Where `` is the name of e.g. a Git branch or OCI tag, +`` is the exact revision (e.g. a Git commit SHA or OCI manifest +digest), and `` is the alias of the algorithm used to calculate the +checksum (e.g. `sha256`). In case only a named pointer or digest is advertised, +the `@` is omitted. + +For a `GitRepository`'s `Artifact` pointing towards an SHA-256 Git commit on +branch `main`, the `Revision` field value would become: + +```text +main@sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 +``` + +For a `GitRepository`'s `Artifact` pointing towards a specific SHA-1 Git commit +without a defined branch or tag, the `Revision` field value would become: + +```text +sha1:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 +``` + +### Change the Artifact Checksum to a Digest + +Change the format of the `Checksum` field of the `source.toolkit.fluxcd.io` +Group's `Artifact` to `Digest`, and include the alias of the algorithm used to +calculate the Artifact checksum as a prefix (creating a "digest"). + +```text + ":" +``` + +For a `GitRepository` `Artifact`'s checksum calculated using SHA-256, the +`Digest` field value would become: + +```text +sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 +``` + +### User Stories + +> As a user of the source-controller, I want to be able to see the exact +> revision of an Artifact that is being used, so that I can verify that it +> matches the expected revision. + +> As a user of the notification-controller, I want to be able to see the +> exact revision a notification is referring to. + +> As a Flux CLI user, I want to see the current revision of my Source in a +> listed overview. + + + +### Alternatives + + + +## Design Details + + + +## Implementation History + + + +[BLAKE3]: https://github.com/BLAKE3-team/BLAKE3 \ No newline at end of file From 2c12385344b4b749df755d48a775131fd6a8f418 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Fri, 21 Oct 2022 07:49:41 +0000 Subject: [PATCH 291/818] RFC: add revision format example for Buckets Signed-off-by: Hidde Beydals --- rfcs/XXXX-artifact-revision-format/README.md | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/rfcs/XXXX-artifact-revision-format/README.md b/rfcs/XXXX-artifact-revision-format/README.md index e9e15763..de988481 100644 --- a/rfcs/XXXX-artifact-revision-format/README.md +++ b/rfcs/XXXX-artifact-revision-format/README.md @@ -9,7 +9,7 @@ Must be one of `provisional`, `implementable`, `implemented`, `deferred`, `rejec **Creation date:** 2022-10-20 -**Last update:** 2022-10-20 +**Last update:** 2022-10-21 ## Summary @@ -17,8 +17,8 @@ This RFC proposes to establish a canonical format for an `Artifact` which points to a specific checksum (e.g. an OCI manifest digest or Git commit SHA) of a named pointer (e.g. an OCI image tag or Git tag). In addition, it proposes to include the algorithm name (e.g. `sha256`) as a prefix to any advertised -checksum in an `Artifact` and further referring to it as a `Digest` opposed to -a `Checksum`. +checksum in an `Artifact` and further referring to it as a `Digest` as opposed +to a `Checksum`. ## Motivation @@ -67,7 +67,7 @@ with supportive response from Core Maintainers. checksums. This has promising performance improvements over SHA-256, which could allow for performance improvements in large scale environments. - Allow compatability with SemVer name references which might contain an `@` - symbol already (e.g. `package@v1.0.0@sha256:...`, opposed to OCI's + symbol already (e.g. `package@v1.0.0@sha256:...`, as opposed to OCI's `tag:v1.0.0@sha256:...`). ### Non-Goals @@ -108,6 +108,13 @@ without a defined branch or tag, the `Revision` field value would become: sha1:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 ``` +For a `Bucket`'s `Artifact` with a revision based on an SHA-256 calculation of +a list of object keys and their etags, the `Revision` field value would become: + +```text +sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 +``` + ### Change the Artifact Checksum to a Digest Change the format of the `Checksum` field of the `source.toolkit.fluxcd.io` From cac36365ae54e5a65329e34a56c7e534c2c2f509 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Fri, 21 Oct 2022 08:38:12 +0000 Subject: [PATCH 292/818] RFC: add additional user story about algo config Signed-off-by: Hidde Beydals --- rfcs/XXXX-artifact-revision-format/README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/rfcs/XXXX-artifact-revision-format/README.md b/rfcs/XXXX-artifact-revision-format/README.md index de988481..b159aa93 100644 --- a/rfcs/XXXX-artifact-revision-format/README.md +++ b/rfcs/XXXX-artifact-revision-format/README.md @@ -138,6 +138,9 @@ sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 > revision of an Artifact that is being used, so that I can verify that it > matches the expected revision. +> As a user of the source-controller, I want to be able to configure the +> algorithm used to calculate the checksum of an Artifact. + > As a user of the notification-controller, I want to be able to see the > exact revision a notification is referring to. From 879041677ce164e7b12e260f48ab72aa78057fb9 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Fri, 21 Oct 2022 10:47:57 +0000 Subject: [PATCH 293/818] RFC: write down user stories Signed-off-by: Hidde Beydals --- rfcs/XXXX-artifact-revision-format/README.md | 76 ++++++++++++++++++-- 1 file changed, 72 insertions(+), 4 deletions(-) diff --git a/rfcs/XXXX-artifact-revision-format/README.md b/rfcs/XXXX-artifact-revision-format/README.md index b159aa93..7f66de2d 100644 --- a/rfcs/XXXX-artifact-revision-format/README.md +++ b/rfcs/XXXX-artifact-revision-format/README.md @@ -134,22 +134,90 @@ sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 ### User Stories +#### Artifact revision verification + > As a user of the source-controller, I want to be able to see the exact > revision of an Artifact that is being used, so that I can verify that it -> matches the expected revision. +> matches the expected revision at a remote source. + +For a Source kind that has an `Artifact` with a `Revision` which contains a +checksum, the field value can be retrieved using the Kubernetes API. For +example: + +```console +$ kubectl get gitrepository -o jsonpath='{.status.artifact.revision}' +main@sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 +``` + +#### Artifact checksum verification + +> As a user of the source-controller, I want to be able to verify the checksum +> of an Artifact. + +For a Source kind with an `Aritfact` the digest consisting of the algorithm +alias and checksum is advertised in the `Digest` field, and can be retrieved +using the Kubernetes API. For example: + +```console +$ kubectl get gitrepository -o jsonpath='{.status.artifact.digest}' +sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 +``` + +#### Artifact checksum algorithm configuration > As a user of the source-controller, I want to be able to configure the > algorithm used to calculate the checksum of an Artifact. +The source-controller binary accepts a `--artifact-digest-algo` flag which +configures the algorithm used to calculate the checksum of an `Artifact`. +The default value is `sha256`, but can be changed to `sha384`, `sha512` +or `blake3`. + +When set, newly advertised `Artifact`'s `Digest` fields will be calculated +using the configured algorithm. For previous `Artifact`'s that were set using +a previous configuration, the `Artifact`'s `Digest` field will be calculated +using the advertised algorithm. + +#### Artifact revisions in notifications + > As a user of the notification-controller, I want to be able to see the > exact revision a notification is referring to. +The notification-controller can use the revision for a Source's `Artifact` +attached as an annotation to an `Event`, and correctly parses the value field +when attempting to extract e.g. a Git commit digest from an event for a +`GitRepository`. As currently already applicable for the `/` delimiter. + +> As a user of the notification-controller, I want to be able to observe what +> commit has been applied on my (supported) Git provider. + +The notification-controller can use the revision attached as an annotation to +an `Event`, and is capable of extracting the correct reference for a Git +provider integration (e.g. GitHub, GitLab) to construct a payload. For example, +extracting `e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855` +from `main@sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855`. + +#### Artifact revisions in listed views + > As a Flux CLI user, I want to see the current revision of my Source in a > listed overview. - +By running `flux get source `, the listed view of Sources would show a +truncated version of the checksum in the `Revision` field. + +```console +$ flux get source gitrepository +NAME REVISION SUSPENDED READY MESSAGE +flux-monitoring main@sha1:6f6c0979 False True stored artifact for revision 'main@sha1:6f6c0979809c12ce4aa687fb42be913f5dc78a75' + +$ flux get source oci +NAME REVISION SUSPENDED READY MESSAGE +apps-source local@sha256:b1ad9be6 False True stored artifact for digest 'local@sha256:b1ad9be6fe5fefc76a93f462ef2be1295fa6693d57e9d783780af99cd7234dc8' + +$ flux get source bucket +NAME REVISION SUSPENDED READY MESSAGE +apps-source sha256:e3b0c442 False True stored artifact for revision 'sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855' +``` ### Alternatives From cf8ac4dd0e4258c2dfc0ba8d6dd48aaaf2ae5ea4 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Fri, 21 Oct 2022 11:07:04 +0000 Subject: [PATCH 294/818] RFC: document alternatives Signed-off-by: Hidde Beydals --- rfcs/XXXX-artifact-revision-format/README.md | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/rfcs/XXXX-artifact-revision-format/README.md b/rfcs/XXXX-artifact-revision-format/README.md index 7f66de2d..5a220cc3 100644 --- a/rfcs/XXXX-artifact-revision-format/README.md +++ b/rfcs/XXXX-artifact-revision-format/README.md @@ -221,11 +221,17 @@ apps-source sha256:e3b0c442 False True stored artifact for rev ### Alternatives - +The two main alternatives around the `Revision` parts in this RFC are to either +keep the current field value formats as is, or to invent another format. Given +the [motivation](#motivation) for this RFC outlines the reasoning for not +keeping the current `Revision` format, and the proposed is a commonly known +format. Neither strike as a better alternative. + +For the changes related to `Checksum` and `Digest`, the alternative is to keep +the current field name as is, and only change the field value format. However, +given the naming of the field is more correct with the introduction of the +algorithm alias, and now is the time to make last (breaking) changes to the +API. This does not strike as a better alternative. ## Design Details From 76c31c6303eb595c006a4a090c6f8516aa9f3f5b Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Fri, 21 Oct 2022 11:07:18 +0000 Subject: [PATCH 295/818] RFC: outline design details Signed-off-by: Hidde Beydals --- rfcs/XXXX-artifact-revision-format/README.md | 28 ++++++++++++-------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/rfcs/XXXX-artifact-revision-format/README.md b/rfcs/XXXX-artifact-revision-format/README.md index 5a220cc3..99201a4e 100644 --- a/rfcs/XXXX-artifact-revision-format/README.md +++ b/rfcs/XXXX-artifact-revision-format/README.md @@ -235,17 +235,23 @@ API. This does not strike as a better alternative. ## Design Details - +### Artifact Revision format + +#### Format + +#### Parsing the Revision field + +### Artifact Digest + +#### Library + +#### Configuration + +#### Calculation + +#### Verification + +#### Deprecation of Checksum ## Implementation History From f92d708051fccabf5a09dd2c299cb84e32d2c13c Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Fri, 21 Oct 2022 13:38:28 +0000 Subject: [PATCH 296/818] RFC: add design details artifact revision Signed-off-by: Hidde Beydals --- rfcs/XXXX-artifact-revision-format/README.md | 44 +++++++++++++++++++- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/rfcs/XXXX-artifact-revision-format/README.md b/rfcs/XXXX-artifact-revision-format/README.md index 99201a4e..9b6706f0 100644 --- a/rfcs/XXXX-artifact-revision-format/README.md +++ b/rfcs/XXXX-artifact-revision-format/README.md @@ -66,7 +66,7 @@ with supportive response from Core Maintainers. - Allow configuration of [BLAKE3][] as an alternative to SHA for calculating checksums. This has promising performance improvements over SHA-256, which could allow for performance improvements in large scale environments. -- Allow compatability with SemVer name references which might contain an `@` +- Allow compatibility with SemVer name references which might contain an `@` symbol already (e.g. `package@v1.0.0@sha256:...`, as opposed to OCI's `tag:v1.0.0@sha256:...`). @@ -237,9 +237,49 @@ API. This does not strike as a better alternative. ### Artifact Revision format +For an `Artifact`'s `Revision` which contains a checksum referring to an exact +revision, the checksum within the value MUST be appended with an alias for the +algorithm separated by `:` (e.g. `sha256:...`), further referred to as a +"digest". The algorithm alias and checksum of the digest MUST be lowercase and +alphanumeric. + +For an `Artifact`'s `Revision` which contains a digest and a named pointer, +it MUST be prefixed with `@`, and appended at the end of the `Revision` value. +The named pointer MAY contain arbitrary characters, including but not limited +to `/` and `@`. + #### Format -#### Parsing the Revision field +```text +[ ] [ [ "@" ] ":" ] +``` + +Where `[ ]` indicates an optional element, `" "` a literal string, and `< >` +a variable. + +#### Parsing + +When parsing the `Revision` field value of an `Artifact` to extract the digest, +the value after the last `@` is considered to be the digest. The remaining +value on the left side is considered to be the named pointer, which MAY contain +an additional `@` delimiter if applicable for the domain of the `Source` +implementation. + +#### Truncation + +When truncating the `Revision` field value of an `Artifact` to display in a +view with limited space, the `` of the digest MAY be truncated to +7 or more characters. The `` of the digest MUST NOT be truncated. +In addition, a digest MUST always contain the full length checksum for the +algorithm. + +#### Backwards compatibility + +To allow backwards compatability in the notification-controller, Flux CLI and +other applicable components. The `Revision` new field value format could be +detected by the presence of the `@` or `:` characters. Falling back to their +current behaviour if not present, phasing out the old format in a future +release. ### Artifact Digest From 5faf6ebadc2ddec1bef799eceed54d870cabe5e3 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Fri, 21 Oct 2022 15:09:03 +0000 Subject: [PATCH 297/818] RFC: add design details artifact digest Signed-off-by: Hidde Beydals --- rfcs/XXXX-artifact-revision-format/README.md | 50 +++++++++++++++++++- 1 file changed, 48 insertions(+), 2 deletions(-) diff --git a/rfcs/XXXX-artifact-revision-format/README.md b/rfcs/XXXX-artifact-revision-format/README.md index 9b6706f0..636aea6e 100644 --- a/rfcs/XXXX-artifact-revision-format/README.md +++ b/rfcs/XXXX-artifact-revision-format/README.md @@ -283,15 +283,60 @@ release. ### Artifact Digest +The `Artifact`'s `Digest` field advertises the checksum of the file in the +`URL`. The checksum within the value MUST be appended with an alias for the +algorithm separated by `:` (e.g. `sha256:...`). This follows the +[digest format][go-digest] of OCI. + +#### Format + +```text + ":" +``` + +Where `" "` indicates a literal string, and `< >` a variable. + #### Library +The library used for calculating the `Digest` field value is +`github.com/opencontainers/go-digest`. This library is used by various +OCI libraries which we already depend on, stable and extensible. + #### Configuration +The checksum MUST be calculated using the algorithm configured in the +`--artifact-digest-algo` flag of the source-controller binary. The default +value is `sha256`, but can be changed to `sha384`, `sha512` or `blake3`. + +**Note:** availability of BLAKE3 is at present dependent on an explicit import +of `github.com/opencontainers/go-digest/blake3`. + +When the provided algorithm is NOT supported, the source-controller MUST +fail to start. + +When the configured algorithm changes, the `Digest` MAY be recalculated to +update the value. + #### Calculation +The checksum MUST be calculated using the algorithm configured in the +`--artifact-digest-algo` flag of the source-controller binary. + #### Verification -#### Deprecation of Checksum +The checksum of a downloaded artifact MUST be verified against the `Digest` +field value. If the checksum does not match, the verification MUST fail. + +### Deprecation of Checksum + +The `Artifact`'s `Checksum` field is deprecated and MUST be removed in a +future release. The `Digest` field MUST be used instead. + +#### Backwards compatibility + +To allow backwards compatability, the source-controller could continue +to advertise the checksum part of a `Digest` in the `Checksum` field until +the field is removed. ## Implementation History @@ -302,4 +347,5 @@ Major milestones in the lifecycle of the RFC such as: - The version of Flux where the RFC was retired or superseded. --> -[BLAKE3]: https://github.com/BLAKE3-team/BLAKE3 \ No newline at end of file +[BLAKE3]: https://github.com/BLAKE3-team/BLAKE3 +[go-digest]: https://pkg.go.dev/github.com/opencontainers/go-digest#hdr-Basics \ No newline at end of file From 8801029d95e0ab12a59c540f7b79db0583d5232b Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Mon, 24 Oct 2022 09:32:29 +0000 Subject: [PATCH 298/818] RFC: avoid overlap between calculation and config Signed-off-by: Hidde Beydals --- rfcs/XXXX-artifact-revision-format/README.md | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/rfcs/XXXX-artifact-revision-format/README.md b/rfcs/XXXX-artifact-revision-format/README.md index 636aea6e..0f3b7eed 100644 --- a/rfcs/XXXX-artifact-revision-format/README.md +++ b/rfcs/XXXX-artifact-revision-format/README.md @@ -9,7 +9,7 @@ Must be one of `provisional`, `implementable`, `implemented`, `deferred`, `rejec **Creation date:** 2022-10-20 -**Last update:** 2022-10-21 +**Last update:** 2022-10-24 ## Summary @@ -302,11 +302,17 @@ The library used for calculating the `Digest` field value is `github.com/opencontainers/go-digest`. This library is used by various OCI libraries which we already depend on, stable and extensible. +#### Calculation + +The checksum in the `Digest` field value MUST be calculated using the canonical +algorithm [set at runtime](#configuration). + #### Configuration -The checksum MUST be calculated using the algorithm configured in the -`--artifact-digest-algo` flag of the source-controller binary. The default -value is `sha256`, but can be changed to `sha384`, `sha512` or `blake3`. +The algorithm used for calculating the `Digest` field value MAY be configured +using the `--artifact-digest-algo` flag of the source-controller binary. The +default value is `sha256`, but can be changed to `sha384`, `sha512` or +`blake3`. **Note:** availability of BLAKE3 is at present dependent on an explicit import of `github.com/opencontainers/go-digest/blake3`. @@ -317,11 +323,6 @@ fail to start. When the configured algorithm changes, the `Digest` MAY be recalculated to update the value. -#### Calculation - -The checksum MUST be calculated using the algorithm configured in the -`--artifact-digest-algo` flag of the source-controller binary. - #### Verification The checksum of a downloaded artifact MUST be verified against the `Digest` From 6ccdfa074fb34a74e18e99d098cab42e2f558b30 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Mon, 24 Oct 2022 09:55:07 +0000 Subject: [PATCH 299/818] RFC: wording nit Signed-off-by: Hidde Beydals --- rfcs/XXXX-artifact-revision-format/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rfcs/XXXX-artifact-revision-format/README.md b/rfcs/XXXX-artifact-revision-format/README.md index 0f3b7eed..88cf3480 100644 --- a/rfcs/XXXX-artifact-revision-format/README.md +++ b/rfcs/XXXX-artifact-revision-format/README.md @@ -229,7 +229,7 @@ format. Neither strike as a better alternative. For the changes related to `Checksum` and `Digest`, the alternative is to keep the current field name as is, and only change the field value format. However, -given the naming of the field is more correct with the introduction of the +given the naming of the field is more accurate with the introduction of the algorithm alias, and now is the time to make last (breaking) changes to the API. This does not strike as a better alternative. From c6be0b9389ecef0090837a91a7be958103ab236b Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Mon, 24 Oct 2022 09:59:04 +0000 Subject: [PATCH 300/818] RFC: add assigned reference number (0005) Signed-off-by: Hidde Beydals --- .../README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename rfcs/{XXXX-artifact-revision-format => 0005-artifact-revision-and-digest}/README.md (99%) diff --git a/rfcs/XXXX-artifact-revision-format/README.md b/rfcs/0005-artifact-revision-and-digest/README.md similarity index 99% rename from rfcs/XXXX-artifact-revision-format/README.md rename to rfcs/0005-artifact-revision-and-digest/README.md index 88cf3480..c900f704 100644 --- a/rfcs/XXXX-artifact-revision-format/README.md +++ b/rfcs/0005-artifact-revision-and-digest/README.md @@ -1,4 +1,4 @@ -# RFC-NNNN Artifact Revision format and introduction of digests +# RFC-0005 Artifact `Revision` format and introduction of `Digest` **Status:** provisional From 4b2af2ede25a195f2a6ddaa70f20aa179bde4b46 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Wed, 2 Nov 2022 15:21:50 +0000 Subject: [PATCH 301/818] RFC: address review nits Various typo and structural fixes. Signed-off-by: Hidde Beydals --- .../README.md | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/rfcs/0005-artifact-revision-and-digest/README.md b/rfcs/0005-artifact-revision-and-digest/README.md index c900f704..41d08bca 100644 --- a/rfcs/0005-artifact-revision-and-digest/README.md +++ b/rfcs/0005-artifact-revision-and-digest/README.md @@ -9,7 +9,7 @@ Must be one of `provisional`, `implementable`, `implemented`, `deferred`, `rejec **Creation date:** 2022-10-20 -**Last update:** 2022-10-24 +**Last update:** 2022-11-02 ## Summary @@ -24,24 +24,24 @@ to a `Checksum`. The current `Artifact` type's `Revision` field format is not "officially" standardized (albeit assumed throughout our code bases), and has mostly been -derived from `GitRepository` which uses `/` as a delimiter between the named +derived from `GitRepository` which uses `/` as a separator between the named pointer (a Git branch or tag) and a specific (SHA-1, or theoretical SHA-256) revision. Since the introduction of `OCIRepository` and with the recent changes around -`HelmChart` objects to allow the consumption of charts from OCI registries. -This could be seen as outdated or confusing due to the format differing from +`HelmChart` objects to allow the consumption of charts from OCI registries, +this could be seen as outdated or confusing due to the format differing from the canonical format used by OCI, which is `@:` (the part after `@` formally known as a "digest") to refer to a specific version of a tagged OCI manifest. While also taking note that Git does not have an official canonical format for e.g. branch references at a specific commit, and `/` has less of a symbolic -meaning than `@`. Which could be interpreted as "`` _at_ +meaning than `@`, which could be interpreted as "`` _at_ ``". In addition, with the introduction of algorithm prefixes for an `Artifact`'s -checksum. It would be possible to add support and allow user configuration of +checksum, it would be possible to add support and allow user configuration of other algorithms than SHA-256. For example SHA-384 and SHA-512, or the more performant (parallelizable) [BLAKE3][]. @@ -80,7 +80,7 @@ with supportive response from Core Maintainers. ### Establish an Artifact Revision format Change the format of the `Revision` field of the `source.toolkit.fluxcd.io` -Group's `Artifact` type across all `Source` kinds to contain an `@` delimiter +Group's `Artifact` type across all `Source` kinds to contain an `@` separator opposed to `/`, and include the algorithm alias as a prefix to the checksum (creating a "digest"). @@ -154,7 +154,7 @@ main@sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 > As a user of the source-controller, I want to be able to verify the checksum > of an Artifact. -For a Source kind with an `Aritfact` the digest consisting of the algorithm +For a Source kind with an `Artifact` the digest consisting of the algorithm alias and checksum is advertised in the `Digest` field, and can be retrieved using the Kubernetes API. For example: @@ -175,7 +175,7 @@ or `blake3`. When set, newly advertised `Artifact`'s `Digest` fields will be calculated using the configured algorithm. For previous `Artifact`'s that were set using -a previous configuration, the `Artifact`'s `Digest` field will be calculated +a previous configuration, the `Artifact`'s `Digest` field will be recalculated using the advertised algorithm. #### Artifact revisions in notifications @@ -186,7 +186,7 @@ using the advertised algorithm. The notification-controller can use the revision for a Source's `Artifact` attached as an annotation to an `Event`, and correctly parses the value field when attempting to extract e.g. a Git commit digest from an event for a -`GitRepository`. As currently already applicable for the `/` delimiter. +`GitRepository`. As currently already applicable for the `/` separator. > As a user of the notification-controller, I want to be able to observe what > commit has been applied on my (supported) Git provider. @@ -262,7 +262,7 @@ a variable. When parsing the `Revision` field value of an `Artifact` to extract the digest, the value after the last `@` is considered to be the digest. The remaining value on the left side is considered to be the named pointer, which MAY contain -an additional `@` delimiter if applicable for the domain of the `Source` +an additional `@` separator if applicable for the domain of the `Source` implementation. #### Truncation @@ -276,7 +276,7 @@ algorithm. #### Backwards compatibility To allow backwards compatability in the notification-controller, Flux CLI and -other applicable components. The `Revision` new field value format could be +other applicable components, the `Revision` new field value format could be detected by the presence of the `@` or `:` characters. Falling back to their current behaviour if not present, phasing out the old format in a future release. From fd08bae1c7ee70f2d9eceda6b1080b3a1b296a99 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Wed, 2 Nov 2022 15:46:33 +0000 Subject: [PATCH 302/818] RFC: reword summary Signed-off-by: Hidde Beydals --- rfcs/0005-artifact-revision-and-digest/README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/rfcs/0005-artifact-revision-and-digest/README.md b/rfcs/0005-artifact-revision-and-digest/README.md index 41d08bca..6e148681 100644 --- a/rfcs/0005-artifact-revision-and-digest/README.md +++ b/rfcs/0005-artifact-revision-and-digest/README.md @@ -13,12 +13,12 @@ Must be one of `provisional`, `implementable`, `implemented`, `deferred`, `rejec ## Summary -This RFC proposes to establish a canonical format for an `Artifact` which -points to a specific checksum (e.g. an OCI manifest digest or Git commit SHA) -of a named pointer (e.g. an OCI image tag or Git tag). In addition, it proposes -to include the algorithm name (e.g. `sha256`) as a prefix to any advertised -checksum in an `Artifact` and further referring to it as a `Digest` as opposed -to a `Checksum`. +This RFC proposes to establish a canonical `Revision` format for an `Artifact` +which points to a specific revision represented as a checksum (e.g. an OCI +manifest digest or Git commit SHA) of a named pointer (e.g. an OCI image tag or +Git tag). In addition, it proposes to include the algorithm name (e.g. +`sha256`) as a prefix to an advertised checksum for an `Artifact` and +further referring to it as a `Digest`, deprecating the `Checksum` field. ## Motivation From d9102150cf60f6baad85ae6baf43b5402ad96e27 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Fri, 4 Nov 2022 08:51:08 +0000 Subject: [PATCH 303/818] RFC: address more nits - Properly refer to OCI repository name - Ensure checksum examples are unique to help distinguish difference between Revision and Digest - Slightly change proposal wordings to explicitly mention deprecation of `Checksum` field - Add reference to OCI digests spec Signed-off-by: Hidde Beydals --- .../README.md | 75 +++++++++++-------- 1 file changed, 45 insertions(+), 30 deletions(-) diff --git a/rfcs/0005-artifact-revision-and-digest/README.md b/rfcs/0005-artifact-revision-and-digest/README.md index 6e148681..c3a2d586 100644 --- a/rfcs/0005-artifact-revision-and-digest/README.md +++ b/rfcs/0005-artifact-revision-and-digest/README.md @@ -9,14 +9,14 @@ Must be one of `provisional`, `implementable`, `implemented`, `deferred`, `rejec **Creation date:** 2022-10-20 -**Last update:** 2022-11-02 +**Last update:** 2022-11-04 ## Summary This RFC proposes to establish a canonical `Revision` format for an `Artifact` which points to a specific revision represented as a checksum (e.g. an OCI -manifest digest or Git commit SHA) of a named pointer (e.g. an OCI image tag or -Git tag). In addition, it proposes to include the algorithm name (e.g. +manifest digest or Git commit SHA) of a named pointer (e.g. an OCI repository +name or Git tag). In addition, it proposes to include the algorithm name (e.g. `sha256`) as a prefix to an advertised checksum for an `Artifact` and further referring to it as a `Digest`, deprecating the `Checksum` field. @@ -31,9 +31,9 @@ revision. Since the introduction of `OCIRepository` and with the recent changes around `HelmChart` objects to allow the consumption of charts from OCI registries, this could be seen as outdated or confusing due to the format differing from -the canonical format used by OCI, which is `@:` (the -part after `@` formally known as a "digest") to refer to a specific version -of a tagged OCI manifest. +the canonical format used by OCI, which is `@:` (the +part after `@` formally known as a ["digest"][digest-spec]) to refer to a +specific version of an OCI manifest. While also taking note that Git does not have an official canonical format for e.g. branch references at a specific commit, and `/` has less of a symbolic @@ -61,14 +61,14 @@ with supportive response from Core Maintainers. which consists of a named pointer and a specific checksum reference. - Allow easier verification of the `Artifact`'s checksum by including an alias for the algorithm. +- Deprecate the `Artifact`'s `Checksum` field in favor of the `Digest` field. - Allow configuration of the algorithm used to calculate the checksum of an `Artifact`. -- Allow configuration of [BLAKE3][] as an alternative to SHA for calculating - checksums. This has promising performance improvements over SHA-256, which - could allow for performance improvements in large scale environments. +- Allow configuration of algorithms other than SHA-256 to calculate the + `Digest` of an `Artifact`. - Allow compatibility with SemVer name references which might contain an `@` symbol already (e.g. `package@v1.0.0@sha256:...`, as opposed to OCI's - `tag:v1.0.0@sha256:...`). + `name:v1.0.0@sha256:...`). ### Non-Goals @@ -88,38 +88,46 @@ opposed to `/`, and include the algorithm alias as a prefix to the checksum [ ] [ [ "@" ] ":" ] ``` -Where `` is the name of e.g. a Git branch or OCI tag, -`` is the exact revision (e.g. a Git commit SHA or OCI manifest +Where `` is the name of e.g. a Git branch or OCI repository +name, `` is the exact revision (e.g. a Git commit SHA or OCI manifest digest), and `` is the alias of the algorithm used to calculate the checksum (e.g. `sha256`). In case only a named pointer or digest is advertised, the `@` is omitted. -For a `GitRepository`'s `Artifact` pointing towards an SHA-256 Git commit on +For a `GitRepository`'s `Artifact` pointing towards an SHA-1 Git commit on branch `main`, the `Revision` field value would become: ```text -main@sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 +main@sha1:1eabc9a41ca088515cab83f1cce49eb43e84b67f ``` For a `GitRepository`'s `Artifact` pointing towards a specific SHA-1 Git commit without a defined branch or tag, the `Revision` field value would become: ```text -sha1:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 +sha1:1eabc9a41ca088515cab83f1cce49eb43e84b67f ``` For a `Bucket`'s `Artifact` with a revision based on an SHA-256 calculation of a list of object keys and their etags, the `Revision` field value would become: ```text -sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 +sha256:8fb62a09c9e48ace5463bf940dc15e85f525be4f230e223bbceef6e13024110c ``` -### Change the Artifact Checksum to a Digest +For a `HelmChart`'s `Artifact` pointing towards a Helm chart version, the +`Revision` field value would become: -Change the format of the `Checksum` field of the `source.toolkit.fluxcd.io` -Group's `Artifact` to `Digest`, and include the alias of the algorithm used to -calculate the Artifact checksum as a prefix (creating a "digest"). +```text +1.2.3 +``` + +### Introduce a `Digest` field + +Introduce a new field to the `source.toolkit.fluxcd.io` Group's `Artifact` type +across all `Source` kinds called `Digest`, containing the checksum of the file +advertised in the `Path`, and alias of the algorithm used to calculate it +(creating a ["digest"][digest-spec]). ```text ":" @@ -129,9 +137,15 @@ For a `GitRepository` `Artifact`'s checksum calculated using SHA-256, the `Digest` field value would become: ```text -sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 +sha256:1111f92aba67995f108b3ee3ffdc00edcfe206b11fbbb459c8ef4c4a8209fca8 ``` +#### Deprecate the `Checksum` field + +In favor of the `Digest` field, the `Checksum` field of the `source.toolkit.fluxcd.io` +Group's `Artifact` type across all `Source` kinds is deprecated, and removed in +a future version. + ### User Stories #### Artifact revision verification @@ -146,7 +160,7 @@ example: ```console $ kubectl get gitrepository -o jsonpath='{.status.artifact.revision}' -main@sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 +main@sha1:1eabc9a41ca088515cab83f1cce49eb43e84b67f ``` #### Artifact checksum verification @@ -160,7 +174,7 @@ using the Kubernetes API. For example: ```console $ kubectl get gitrepository -o jsonpath='{.status.artifact.digest}' -sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 +sha256:1111f92aba67995f108b3ee3ffdc00edcfe206b11fbbb459c8ef4c4a8209fca8 ``` #### Artifact checksum algorithm configuration @@ -194,8 +208,8 @@ when attempting to extract e.g. a Git commit digest from an event for a The notification-controller can use the revision attached as an annotation to an `Event`, and is capable of extracting the correct reference for a Git provider integration (e.g. GitHub, GitLab) to construct a payload. For example, -extracting `e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855` -from `main@sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855`. +extracting `1eabc9a41ca088515cab83f1cce49eb43e84b67f` from +`main@sha1:1eabc9a41ca088515cab83f1cce49eb43e84b67f`. #### Artifact revisions in listed views @@ -208,15 +222,15 @@ truncated version of the checksum in the `Revision` field. ```console $ flux get source gitrepository NAME REVISION SUSPENDED READY MESSAGE -flux-monitoring main@sha1:6f6c0979 False True stored artifact for revision 'main@sha1:6f6c0979809c12ce4aa687fb42be913f5dc78a75' +flux-monitoring main@sha1:1eabc9a4 False True stored artifact for revision 'main@sha1:1eabc9a41ca088515cab83f1cce49eb43e84b67f' $ flux get source oci NAME REVISION SUSPENDED READY MESSAGE -apps-source local@sha256:b1ad9be6 False True stored artifact for digest 'local@sha256:b1ad9be6fe5fefc76a93f462ef2be1295fa6693d57e9d783780af99cd7234dc8' +apps-source local@sha256:e5fa481b False True stored artifact for digest 'local@sha256:e5fa481bb17327bd269927d0a223862d243d76c89fe697ea8c9adefc47c47e17' $ flux get source bucket NAME REVISION SUSPENDED READY MESSAGE -apps-source sha256:e3b0c442 False True stored artifact for revision 'sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855' +apps-source sha256:e3b0c442 False True stored artifact for revision 'sha256:8fb62a09c9e48ace5463bf940dc15e85f525be4f230e223bbceef6e13024110c' ``` ### Alternatives @@ -299,8 +313,8 @@ Where `" "` indicates a literal string, and `< >` a variable. #### Library The library used for calculating the `Digest` field value is -`github.com/opencontainers/go-digest`. This library is used by various -OCI libraries which we already depend on, stable and extensible. +`github.com/opencontainers/go-digest`. This library is stable and extensible, +and used by various OCI libraries which we already depend on. #### Calculation @@ -349,4 +363,5 @@ Major milestones in the lifecycle of the RFC such as: --> [BLAKE3]: https://github.com/BLAKE3-team/BLAKE3 +[digest-spec]: https://github.com/opencontainers/image-spec/blob/main/descriptor.md#digests [go-digest]: https://pkg.go.dev/github.com/opencontainers/go-digest#hdr-Basics \ No newline at end of file From 86e39919981876b58f0b89884e3a3c8de5f56385 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Wed, 16 Nov 2022 15:22:12 +0000 Subject: [PATCH 304/818] RFC: change 0005 status to implementable Signed-off-by: Hidde Beydals --- rfcs/0005-artifact-revision-and-digest/README.md | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/rfcs/0005-artifact-revision-and-digest/README.md b/rfcs/0005-artifact-revision-and-digest/README.md index c3a2d586..8036fbce 100644 --- a/rfcs/0005-artifact-revision-and-digest/README.md +++ b/rfcs/0005-artifact-revision-and-digest/README.md @@ -1,15 +1,10 @@ # RFC-0005 Artifact `Revision` format and introduction of `Digest` -**Status:** provisional - - +**Status:** implementable **Creation date:** 2022-10-20 -**Last update:** 2022-11-04 +**Last update:** 2022-11-16 ## Summary From 0a5048a56b7ee4495585ecb7aa3d3e345a472694 Mon Sep 17 00:00:00 2001 From: Sanskar Jaiswal Date: Tue, 8 Nov 2022 21:13:43 +0530 Subject: [PATCH 305/818] refactor bootstrap process to use fluxcd/pkg/git Signed-off-by: Sanskar Jaiswal --- cmd/flux/bootstrap_bitbucket_server.go | 19 +- cmd/flux/bootstrap_git.go | 80 ++++-- cmd/flux/bootstrap_github.go | 20 +- cmd/flux/bootstrap_gitlab.go | 19 +- go.mod | 8 +- go.sum | 30 +- pkg/bootstrap/bootstrap_plain_git.go | 157 ++++++---- pkg/bootstrap/bootstrap_provider.go | 9 +- pkg/bootstrap/git/commit_options.go | 46 --- pkg/bootstrap/git/git.go | 52 ---- pkg/bootstrap/git/gogit/gogit.go | 286 ------------------- pkg/bootstrap/git/gogit/gogit_test.go | 80 ------ pkg/bootstrap/git/gogit/testdata/private.key | Bin 7533 -> 0 bytes pkg/bootstrap/options.go | 30 +- pkg/manifestgen/sourcesecret/sourcesecret.go | 4 +- 15 files changed, 233 insertions(+), 607 deletions(-) delete mode 100644 pkg/bootstrap/git/commit_options.go delete mode 100644 pkg/bootstrap/git/git.go delete mode 100644 pkg/bootstrap/git/gogit/gogit.go delete mode 100644 pkg/bootstrap/git/gogit/gogit_test.go delete mode 100644 pkg/bootstrap/git/gogit/testdata/private.key diff --git a/cmd/flux/bootstrap_bitbucket_server.go b/cmd/flux/bootstrap_bitbucket_server.go index af93f8f0..4b827498 100644 --- a/cmd/flux/bootstrap_bitbucket_server.go +++ b/cmd/flux/bootstrap_bitbucket_server.go @@ -22,13 +22,13 @@ import ( "os" "time" - "github.com/go-git/go-git/v5/plumbing/transport/http" + "github.com/fluxcd/pkg/git" + "github.com/fluxcd/pkg/git/gogit" "github.com/spf13/cobra" "github.com/fluxcd/flux2/internal/flags" "github.com/fluxcd/flux2/internal/utils" "github.com/fluxcd/flux2/pkg/bootstrap" - "github.com/fluxcd/flux2/pkg/bootstrap/git/gogit" "github.com/fluxcd/flux2/pkg/bootstrap/provider" "github.com/fluxcd/flux2/pkg/manifestgen" "github.com/fluxcd/flux2/pkg/manifestgen/install" @@ -171,10 +171,16 @@ func bootstrapBServerCmdRun(cmd *cobra.Command, args []string) error { return fmt.Errorf("failed to create temporary working dir: %w", err) } defer os.RemoveAll(tmpDir) - gitClient := gogit.New(tmpDir, &http.BasicAuth{ - Username: user, - Password: bitbucketToken, + + gitClient, err := gogit.NewClient(tmpDir, &git.AuthOptions{ + Transport: git.HTTPS, + Username: user, + Password: bitbucketToken, + CAFile: caBundle, }) + if err != nil { + return err + } // Install manifest config installOptions := install.Options{ @@ -253,13 +259,12 @@ func bootstrapBServerCmdRun(cmd *cobra.Command, args []string) error { bootstrap.WithProviderRepository(bServerArgs.owner, bServerArgs.repository, bServerArgs.personal), bootstrap.WithBranch(bootstrapArgs.branch), bootstrap.WithBootstrapTransportType("https"), - bootstrap.WithAuthor(bootstrapArgs.authorName, bootstrapArgs.authorEmail), + bootstrap.WithSignature(bootstrapArgs.authorName, bootstrapArgs.authorEmail), bootstrap.WithCommitMessageAppendix(bootstrapArgs.commitMessageAppendix), bootstrap.WithProviderTeamPermissions(mapTeamSlice(bServerArgs.teams, bServerDefaultPermission)), bootstrap.WithReadWriteKeyPermissions(bServerArgs.readWriteKey), bootstrap.WithKubeconfig(kubeconfigArgs, kubeclientOptions), bootstrap.WithLogger(logger), - bootstrap.WithCABundle(caBundle), bootstrap.WithGitCommitSigning(entityList, bootstrapArgs.gpgPassphrase, bootstrapArgs.gpgKeyID), } if bootstrapArgs.sshHostname != "" { diff --git a/cmd/flux/bootstrap_git.go b/cmd/flux/bootstrap_git.go index 8d975749..1721faf8 100644 --- a/cmd/flux/bootstrap_git.go +++ b/cmd/flux/bootstrap_git.go @@ -24,9 +24,6 @@ import ( "strings" "time" - "github.com/go-git/go-git/v5/plumbing/transport" - "github.com/go-git/go-git/v5/plumbing/transport/http" - "github.com/go-git/go-git/v5/plumbing/transport/ssh" "github.com/manifoldco/promptui" "github.com/spf13/cobra" corev1 "k8s.io/api/core/v1" @@ -34,11 +31,12 @@ import ( "github.com/fluxcd/flux2/internal/flags" "github.com/fluxcd/flux2/internal/utils" "github.com/fluxcd/flux2/pkg/bootstrap" - "github.com/fluxcd/flux2/pkg/bootstrap/git/gogit" "github.com/fluxcd/flux2/pkg/manifestgen" "github.com/fluxcd/flux2/pkg/manifestgen/install" "github.com/fluxcd/flux2/pkg/manifestgen/sourcesecret" "github.com/fluxcd/flux2/pkg/manifestgen/sync" + "github.com/fluxcd/pkg/git" + "github.com/fluxcd/pkg/git/gogit" ) var bootstrapGitCmd = &cobra.Command{ @@ -116,10 +114,6 @@ func bootstrapGitCmdRun(cmd *cobra.Command, args []string) error { if err != nil { return err } - gitAuth, err := transportForURL(repositoryURL) - if err != nil { - return err - } ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) defer cancel() @@ -145,7 +139,28 @@ func bootstrapGitCmdRun(cmd *cobra.Command, args []string) error { return fmt.Errorf("failed to create temporary working dir: %w", err) } defer os.RemoveAll(tmpDir) - gitClient := gogit.New(tmpDir, gitAuth) + + var caBundle []byte + if bootstrapArgs.caFile != "" { + var err error + caBundle, err = os.ReadFile(bootstrapArgs.caFile) + if err != nil { + return fmt.Errorf("unable to read TLS CA file: %w", err) + } + } + authOpts, err := getAuthOpts(repositoryURL, caBundle) + if err != nil { + return fmt.Errorf("failed to create authentication options for %s: %w", repositoryURL.String(), err) + } + + clientOpts := []gogit.ClientOption{gogit.WithDiskStorage()} + if authOpts.Transport == git.HTTP { + clientOpts = append(clientOpts, gogit.WithInsecureCredentialsOverHTTP()) + } + gitClient, err := gogit.NewClient(tmpDir, authOpts, clientOpts...) + if err != nil { + return fmt.Errorf("failed to create a Git client: %w", err) + } // Install manifest config installOptions := install.Options{ @@ -169,15 +184,6 @@ func bootstrapGitCmdRun(cmd *cobra.Command, args []string) error { installOptions.BaseURL = customBaseURL } - var caBundle []byte - if bootstrapArgs.caFile != "" { - var err error - caBundle, err = os.ReadFile(bootstrapArgs.caFile) - if err != nil { - return fmt.Errorf("unable to read TLS CA file: %w", err) - } - } - // Source generation and secret config secretOpts := sourcesecret.Options{ Name: bootstrapArgs.secretName, @@ -253,12 +259,11 @@ func bootstrapGitCmdRun(cmd *cobra.Command, args []string) error { bootstrapOpts := []bootstrap.GitOption{ bootstrap.WithRepositoryURL(gitArgs.url), bootstrap.WithBranch(bootstrapArgs.branch), - bootstrap.WithAuthor(bootstrapArgs.authorName, bootstrapArgs.authorEmail), + bootstrap.WithSignature(bootstrapArgs.authorName, bootstrapArgs.authorEmail), bootstrap.WithCommitMessageAppendix(bootstrapArgs.commitMessageAppendix), bootstrap.WithKubeconfig(kubeconfigArgs, kubeclientOptions), bootstrap.WithPostGenerateSecretFunc(promptPublicKey), bootstrap.WithLogger(logger), - bootstrap.WithCABundle(caBundle), bootstrap.WithGitCommitSigning(entityList, bootstrapArgs.gpgPassphrase, bootstrapArgs.gpgKeyID), } @@ -272,28 +277,45 @@ func bootstrapGitCmdRun(cmd *cobra.Command, args []string) error { return bootstrap.Run(ctx, b, manifestsBase, installOptions, secretOpts, syncOpts, rootArgs.pollInterval, rootArgs.timeout) } -// transportForURL constructs a transport.AuthMethod based on the scheme +// getAuthOpts retruns a AuthOptions based on the scheme // of the given URL and the configured flags. If the protocol equals // "ssh" but no private key is configured, authentication using the local // SSH-agent is attempted. -func transportForURL(u *url.URL) (transport.AuthMethod, error) { +func getAuthOpts(u *url.URL, caBundle []byte) (*git.AuthOptions, error) { switch u.Scheme { case "http": if !gitArgs.insecureHttpAllowed { return nil, fmt.Errorf("scheme http is insecure, pass --allow-insecure-http=true to allow it") } - return &http.BasicAuth{ - Username: gitArgs.username, - Password: gitArgs.password, + return &git.AuthOptions{ + Transport: git.HTTP, + Username: gitArgs.username, + Password: gitArgs.password, }, nil case "https": - return &http.BasicAuth{ - Username: gitArgs.username, - Password: gitArgs.password, + return &git.AuthOptions{ + Transport: git.HTTPS, + Username: gitArgs.username, + Password: gitArgs.password, + CAFile: caBundle, }, nil case "ssh": if bootstrapArgs.privateKeyFile != "" { - return ssh.NewPublicKeysFromFile(u.User.Username(), bootstrapArgs.privateKeyFile, gitArgs.password) + pk, err := os.ReadFile(bootstrapArgs.privateKeyFile) + if err != nil { + return nil, err + } + kh, err := sourcesecret.ScanHostKey(u.Host) + if err != nil { + return nil, err + } + return &git.AuthOptions{ + Transport: git.SSH, + Username: u.User.Username(), + Password: gitArgs.password, + Identity: pk, + KnownHosts: kh, + }, nil } return nil, nil default: diff --git a/cmd/flux/bootstrap_github.go b/cmd/flux/bootstrap_github.go index 34ad8e2f..faca1c7b 100644 --- a/cmd/flux/bootstrap_github.go +++ b/cmd/flux/bootstrap_github.go @@ -22,13 +22,13 @@ import ( "os" "time" - "github.com/go-git/go-git/v5/plumbing/transport/http" + "github.com/fluxcd/pkg/git" + "github.com/fluxcd/pkg/git/gogit" "github.com/spf13/cobra" "github.com/fluxcd/flux2/internal/flags" "github.com/fluxcd/flux2/internal/utils" "github.com/fluxcd/flux2/pkg/bootstrap" - "github.com/fluxcd/flux2/pkg/bootstrap/git/gogit" "github.com/fluxcd/flux2/pkg/bootstrap/provider" "github.com/fluxcd/flux2/pkg/manifestgen" "github.com/fluxcd/flux2/pkg/manifestgen/install" @@ -161,16 +161,21 @@ func bootstrapGitHubCmdRun(cmd *cobra.Command, args []string) error { return err } - // Lazy go-git repository tmpDir, err := manifestgen.MkdirTempAbs("", "flux-bootstrap-") if err != nil { return fmt.Errorf("failed to create temporary working dir: %w", err) } defer os.RemoveAll(tmpDir) - gitClient := gogit.New(tmpDir, &http.BasicAuth{ - Username: githubArgs.owner, - Password: ghToken, + + gitClient, err := gogit.NewClient(tmpDir, &git.AuthOptions{ + Transport: git.HTTPS, + Username: githubArgs.owner, + Password: ghToken, + CAFile: caBundle, }) + if err != nil { + return err + } // Install manifest config installOptions := install.Options{ @@ -239,13 +244,12 @@ func bootstrapGitHubCmdRun(cmd *cobra.Command, args []string) error { bootstrap.WithProviderRepository(githubArgs.owner, githubArgs.repository, githubArgs.personal), bootstrap.WithBranch(bootstrapArgs.branch), bootstrap.WithBootstrapTransportType("https"), - bootstrap.WithAuthor(bootstrapArgs.authorName, bootstrapArgs.authorEmail), + bootstrap.WithSignature(bootstrapArgs.authorName, bootstrapArgs.authorEmail), bootstrap.WithCommitMessageAppendix(bootstrapArgs.commitMessageAppendix), bootstrap.WithProviderTeamPermissions(mapTeamSlice(githubArgs.teams, ghDefaultPermission)), bootstrap.WithReadWriteKeyPermissions(githubArgs.readWriteKey), bootstrap.WithKubeconfig(kubeconfigArgs, kubeclientOptions), bootstrap.WithLogger(logger), - bootstrap.WithCABundle(caBundle), bootstrap.WithGitCommitSigning(entityList, bootstrapArgs.gpgPassphrase, bootstrapArgs.gpgKeyID), } if bootstrapArgs.sshHostname != "" { diff --git a/cmd/flux/bootstrap_gitlab.go b/cmd/flux/bootstrap_gitlab.go index cb38cdae..55f5dc58 100644 --- a/cmd/flux/bootstrap_gitlab.go +++ b/cmd/flux/bootstrap_gitlab.go @@ -24,13 +24,13 @@ import ( "strings" "time" - "github.com/go-git/go-git/v5/plumbing/transport/http" + "github.com/fluxcd/pkg/git" + "github.com/fluxcd/pkg/git/gogit" "github.com/spf13/cobra" "github.com/fluxcd/flux2/internal/flags" "github.com/fluxcd/flux2/internal/utils" "github.com/fluxcd/flux2/pkg/bootstrap" - "github.com/fluxcd/flux2/pkg/bootstrap/git/gogit" "github.com/fluxcd/flux2/pkg/bootstrap/provider" "github.com/fluxcd/flux2/pkg/manifestgen" "github.com/fluxcd/flux2/pkg/manifestgen/install" @@ -178,10 +178,16 @@ func bootstrapGitLabCmdRun(cmd *cobra.Command, args []string) error { return fmt.Errorf("failed to create temporary working dir: %w", err) } defer os.RemoveAll(tmpDir) - gitClient := gogit.New(tmpDir, &http.BasicAuth{ - Username: gitlabArgs.owner, - Password: glToken, + + gitClient, err := gogit.NewClient(tmpDir, &git.AuthOptions{ + Transport: git.HTTPS, + Username: gitlabArgs.owner, + Password: glToken, + CAFile: caBundle, }) + if err != nil { + return err + } // Install manifest config installOptions := install.Options{ @@ -255,13 +261,12 @@ func bootstrapGitLabCmdRun(cmd *cobra.Command, args []string) error { bootstrap.WithProviderRepository(gitlabArgs.owner, gitlabArgs.repository, gitlabArgs.personal), bootstrap.WithBranch(bootstrapArgs.branch), bootstrap.WithBootstrapTransportType("https"), - bootstrap.WithAuthor(bootstrapArgs.authorName, bootstrapArgs.authorEmail), + bootstrap.WithSignature(bootstrapArgs.authorName, bootstrapArgs.authorEmail), bootstrap.WithCommitMessageAppendix(bootstrapArgs.commitMessageAppendix), bootstrap.WithProviderTeamPermissions(mapTeamSlice(gitlabArgs.teams, glDefaultPermission)), bootstrap.WithReadWriteKeyPermissions(gitlabArgs.readWriteKey), bootstrap.WithKubeconfig(kubeconfigArgs, kubeclientOptions), bootstrap.WithLogger(logger), - bootstrap.WithCABundle(caBundle), bootstrap.WithGitCommitSigning(entityList, bootstrapArgs.gpgPassphrase, bootstrapArgs.gpgKeyID), } if bootstrapArgs.sshHostname != "" { diff --git a/go.mod b/go.mod index 045d0e71..97329917 100644 --- a/go.mod +++ b/go.mod @@ -2,6 +2,9 @@ module github.com/fluxcd/flux2 go 1.18 +// Use Flux's version of go-git, which allows clones with multi_ack and multi_ack_detailed. +replace github.com/go-git/go-git/v5 => github.com/fluxcd/go-git/v5 v5.0.0-20221019082644-b33dae782906 + require ( github.com/Masterminds/semver/v3 v3.1.1 github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4 @@ -14,6 +17,8 @@ require ( github.com/fluxcd/kustomize-controller/api v0.30.0 github.com/fluxcd/notification-controller/api v0.28.0 github.com/fluxcd/pkg/apis/meta v0.18.0 + github.com/fluxcd/pkg/git v0.7.0 + github.com/fluxcd/pkg/git/gogit v0.2.0 github.com/fluxcd/pkg/kustomize v0.10.0 github.com/fluxcd/pkg/oci v0.15.0 github.com/fluxcd/pkg/runtime v0.24.0 @@ -87,7 +92,7 @@ require ( github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/chai2010/gettext-go v1.0.2 // indirect github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e // indirect - github.com/cloudflare/circl v1.1.0 // indirect + github.com/cloudflare/circl v1.3.0 // indirect github.com/containerd/stargz-snapshotter/estargz v0.12.1 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect @@ -181,6 +186,7 @@ require ( github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/sergi/go-diff v1.2.0 // indirect github.com/sirupsen/logrus v1.9.0 // indirect + github.com/skeema/knownhosts v1.1.0 // indirect github.com/texttheater/golang-levenshtein v1.0.1 // indirect github.com/vbatts/tar-split v0.11.2 // indirect github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74 // indirect diff --git a/go.sum b/go.sum index f1c3782f..2e7a3732 100644 --- a/go.sum +++ b/go.sum @@ -80,8 +80,7 @@ github.com/MakeNowJust/heredoc v1.0.0 h1:cXCdzVdstXyiTqTvfqk9SDHpKNjxuom+DOlyEeQ github.com/MakeNowJust/heredoc v1.0.0/go.mod h1:mG5amYoWBHf8vpLOuehzbGGw0EHxpZZ6lCpQ4fNJ8LE= github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030IGemrRc= github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= -github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= -github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= +github.com/Microsoft/go-winio v0.5.0/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= @@ -136,8 +135,9 @@ github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5P github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1 h1:q763qf9huN11kDQavWsoZXJNW3xEE4JJyHa5Q25/sd8= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cloudflare/circl v1.1.0 h1:bZgT/A+cikZnKIwn7xL2OBj012Bmvho/o6RpRvv3GKY= github.com/cloudflare/circl v1.1.0/go.mod h1:prBCrKB9DV4poKZY1l9zBXg2QJY7mvgRvtMxxK7fi4I= +github.com/cloudflare/circl v1.3.0 h1:Anq00jxDtoyX3+aCaYUZ0vXC5r4k4epberfWGDXV1zE= +github.com/cloudflare/circl v1.3.0/go.mod h1:+CauBF6R70Jqcyl8N2hC8pAXYbWkGIezuSbuGLtRhnw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= @@ -200,8 +200,11 @@ github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYF github.com/felixge/httpsnoop v1.0.1 h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8SPQ= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0= +github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= github.com/fluxcd/go-git-providers v0.9.0 h1:iiiKe3dzRCgVkjEi8rfpvaWTZwuGRfb3RJFhjSNz+Uc= github.com/fluxcd/go-git-providers v0.9.0/go.mod h1:GcaDVP9RlamLKJp25Nwi7X5t0MyZV3FY+qy1GiRdbtk= +github.com/fluxcd/go-git/v5 v5.0.0-20221019082644-b33dae782906 h1:VFNX84BWt3r4YVFYLdNvryRwFBix2lea8EVT5V/xH7Y= +github.com/fluxcd/go-git/v5 v5.0.0-20221019082644-b33dae782906/go.mod h1:YpPgMNvxopDCZUuSFjkbcx/vWhCDvPsuoBCTTEd9dDc= github.com/fluxcd/go-git/v5 v5.0.0-20221104190732-329fd6659b10 h1:au798417R1iWtgcgKe3Dg495mexQmuxelL+NebAtexE= github.com/fluxcd/go-git/v5 v5.0.0-20221104190732-329fd6659b10/go.mod h1:w8bjt1WtWUxMEmlifjBJP9bK9QAG1Vw1Lw7RzchJFNk= github.com/fluxcd/helm-controller/api v0.26.0 h1:UCod+R1Oct2jg5cXHlVBC57Jy01lMdpl9MA+8UPogvY= @@ -220,6 +223,11 @@ github.com/fluxcd/pkg/apis/kustomize v0.7.0 h1:X2htBmJ91nGYv4d93gin665MFWKNGiNwU github.com/fluxcd/pkg/apis/kustomize v0.7.0/go.mod h1:Mu+KdktsEKWA4l/33CZdY5lB4hz51mqfcLzBZSwAqVg= github.com/fluxcd/pkg/apis/meta v0.18.0 h1:s0LeulWcQ4DxVX6805vgDTxlA6bAYk+Lq1QHSnNdqLM= github.com/fluxcd/pkg/apis/meta v0.18.0/go.mod h1:pYvXRFi1UKNNrGR34jw3uqOnMXw9X6dTkML8j5Z7tis= +github.com/fluxcd/pkg/git v0.7.0 h1:sQHRpFMcOzEdqlyGMjFv2LKMdcoE5xeUr2UcRrsLRG8= +github.com/fluxcd/pkg/git v0.7.0/go.mod h1:3deiLPws4DSQ3hqwtQd7Dt66GXTN/4RcT/yHAljXaHo= +github.com/fluxcd/pkg/git/gogit v0.2.0 h1:vhFzk2Pky4tDZwisx8+26YZumRDPxERnkV8l2dbLSoo= +github.com/fluxcd/pkg/git/gogit v0.2.0/go.mod h1:d1RIwl6DVdU8/2dBIhw6n7GNokIKqs+b9cKc/8tz7ew= +github.com/fluxcd/pkg/gittestserver v0.8.0 h1:YrYe63KScKlLxx0GAiQthx2XqHDx0vKitIIx4JnDtIo= github.com/fluxcd/pkg/kustomize v0.10.0 h1:EG5MbYrLtxeCiZxeFUgvyBhFZaXnKfeqqpg7O+J7o3s= github.com/fluxcd/pkg/kustomize v0.10.0/go.mod h1:awHID4OKe2/WAfTFg4u0fURXZPUkrIslSZNSPX9MEFQ= github.com/fluxcd/pkg/oci v0.15.0 h1:M8fiWveUPoUxZqvHc6om1/5tDYMOEdbJAURfKK7mGAA= @@ -251,14 +259,10 @@ github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxI github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4= github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= -github.com/go-git/go-billy/v5 v5.2.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= github.com/go-git/go-billy/v5 v5.3.1 h1:CPiOUAzKtMRvolEKw+bG1PLRpT7D3LIs3/3ey4Aiu34= github.com/go-git/go-billy/v5 v5.3.1/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= -github.com/go-git/go-git-fixtures/v4 v4.2.1/go.mod h1:K8zd3kDUAykwTdDCr+I0per6Y6vMiRR/nnVTBtavnB0= github.com/go-git/go-git-fixtures/v4 v4.3.1 h1:y5z6dd3qi8Hl+stezc8p3JxDkoTRqMAlKnXHuzrfjTQ= github.com/go-git/go-git-fixtures/v4 v4.3.1/go.mod h1:8LHG1a3SRW71ettAD/jW13h8c6AqjVSeL11RAdgaqpo= -github.com/go-git/go-git/v5 v5.4.2 h1:BXyZu9t0VkbiHtqrsvdq39UDhGJTl1h55VW6CSC4aY4= -github.com/go-git/go-git/v5 v5.4.2/go.mod h1:gQ1kArt6d+n+BGd+/B/I74HwRTLhth2+zti4ihgckDc= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -283,6 +287,7 @@ github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g= github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/gofrs/uuid v4.2.0+incompatible h1:yyYWMnhkhrKwwr8gAOcOCYxOOscHgDS9yZgBrnJfGa0= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= @@ -591,12 +596,12 @@ github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/skeema/knownhosts v1.1.0 h1:Wvr9V0MxhjRbl3f9nMnKnFfiWTJmtECJ9Njkea3ysW0= github.com/skeema/knownhosts v1.1.0/go.mod h1:sKFq3RD6/TKZkSWn8boUbDC7Qkgcv+8XXijpFO6roag= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/cobra v1.6.1 h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA= @@ -625,7 +630,7 @@ github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74 h1:JwtAtb github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74/go.mod h1:RmMWU37GKR2s6pgrIEB4ixgpVCt/cf7dnJv3fuH1J1c= github.com/xanzy/go-gitlab v0.73.1 h1:UMagqUZLJdjss1SovIC+kJCH4k2AZWXl58gJd38Y/hI= github.com/xanzy/go-gitlab v0.73.1/go.mod h1:d/a0vswScO7Agg1CZNz15Ic6SSvBG9vfw8egL99t4kA= -github.com/xanzy/ssh-agent v0.3.0/go.mod h1:3s9xbODqPuuhK9JV1R321M/FlMZSBvE5aY6eAcqrDh0= +github.com/xanzy/ssh-agent v0.3.1/go.mod h1:QIE4lCeL7nkC25x+yA3LBIYfwCc1TFziCtG7cBAac6w= github.com/xanzy/ssh-agent v0.3.2 h1:eKj4SX2Fe7mui28ZgnFW5fmTz1EIr7ugo5s6wDxdHBM= github.com/xanzy/ssh-agent v0.3.2/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= @@ -660,14 +665,13 @@ go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk= go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= go.uber.org/zap v1.23.0 h1:OjGQ5KQDEUawVHxNwQgPpiypGHOxo2mNZsOqTak4fFY= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= @@ -749,7 +753,6 @@ golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= -golang.org/x/net v0.0.0-20210326060303-6b1517762897/go.mod h1:uSPa2vr4CLtc/ILN5odXGNXS6mhrKVzTaCXzk9m6W3k= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= @@ -809,7 +812,6 @@ golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -842,10 +844,8 @@ golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210502180810-71e4cd670f79/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/pkg/bootstrap/bootstrap_plain_git.go b/pkg/bootstrap/bootstrap_plain_git.go index 4f82a72e..70f2f49a 100644 --- a/pkg/bootstrap/bootstrap_plain_git.go +++ b/pkg/bootstrap/bootstrap_plain_git.go @@ -19,6 +19,7 @@ package bootstrap import ( "context" "fmt" + "io" "os" "path/filepath" "strings" @@ -40,21 +41,21 @@ import ( runclient "github.com/fluxcd/pkg/runtime/client" "github.com/fluxcd/flux2/internal/utils" - "github.com/fluxcd/flux2/pkg/bootstrap/git" "github.com/fluxcd/flux2/pkg/log" "github.com/fluxcd/flux2/pkg/manifestgen/install" "github.com/fluxcd/flux2/pkg/manifestgen/kustomization" "github.com/fluxcd/flux2/pkg/manifestgen/sourcesecret" "github.com/fluxcd/flux2/pkg/manifestgen/sync" "github.com/fluxcd/flux2/pkg/status" + "github.com/fluxcd/pkg/git" + "github.com/fluxcd/pkg/git/repository" ) type PlainGitBootstrapper struct { - url string - branch string - caBundle []byte + url string + branch string - author git.Author + signature git.Signature commitMessageAppendix string gpgKeyRing openpgp.EntityList @@ -66,9 +67,9 @@ type PlainGitBootstrapper struct { postGenerateSecret []PostGenerateSecretFunc - git git.Git - kube client.Client - logger log.Logger + gitClient repository.Client + kube client.Client + logger log.Logger } type GitOption interface { @@ -95,10 +96,10 @@ func (o postGenerateSecret) applyGit(b *PlainGitBootstrapper) { b.postGenerateSecret = append(b.postGenerateSecret, PostGenerateSecretFunc(o)) } -func NewPlainGitProvider(git git.Git, kube client.Client, opts ...GitOption) (*PlainGitBootstrapper, error) { +func NewPlainGitProvider(git repository.Client, kube client.Client, opts ...GitOption) (*PlainGitBootstrapper, error) { b := &PlainGitBootstrapper{ - git: git, - kube: kube, + gitClient: git, + kube: kube, } for _, opt := range opts { opt.applyGit(b) @@ -108,7 +109,7 @@ func NewPlainGitProvider(git git.Git, kube client.Client, opts ...GitOption) (*P func (b *PlainGitBootstrapper) ReconcileComponents(ctx context.Context, manifestsBase string, options install.Options, _ sourcesecret.Options) error { // Clone if not already - if _, err := b.git.Status(); err != nil { + if _, err := b.gitClient.Head(); err != nil { if err != git.ErrNoGitRepository { return err } @@ -116,7 +117,17 @@ func (b *PlainGitBootstrapper) ReconcileComponents(ctx context.Context, manifest b.logger.Actionf("cloning branch %q from Git repository %q", b.branch, b.url) var cloned bool if err = retry(1, 2*time.Second, func() (err error) { - cloned, err = b.git.Clone(ctx, b.url, b.branch, b.caBundle) + _, err = b.gitClient.Clone(ctx, b.url, repository.CloneOptions{ + CheckoutStrategy: repository.CheckoutStrategy{ + Branch: b.branch, + }, + }) + if err != nil { + b.logger.Warningf(" clone failure: %s", err) + } + if err == nil { + cloned = true + } return }); err != nil { return fmt.Errorf("failed to clone repository: %w", err) @@ -134,28 +145,33 @@ func (b *PlainGitBootstrapper) ReconcileComponents(ctx context.Context, manifest } b.logger.Successf("generated component manifests") - // Write manifest to Git repository - if err = b.git.Write(manifests.Path, strings.NewReader(manifests.Content)); err != nil { - return fmt.Errorf("failed to write manifest %q: %w", manifests.Path, err) + // Write generated files and make a commit + var signer *openpgp.Entity + if b.gpgKeyRing != nil { + signer, err = getOpenPgpEntity(b.gpgKeyRing, b.gpgPassphrase, b.gpgKeyID) + if err != nil { + return fmt.Errorf("failed to generate OpenPGP entity: %w", err) + } } - - // Git commit generated - gpgOpts := git.WithGpgSigningOption(b.gpgKeyRing, b.gpgPassphrase, b.gpgKeyID) commitMsg := fmt.Sprintf("Add Flux %s component manifests", options.Version) if b.commitMessageAppendix != "" { commitMsg = commitMsg + "\n\n" + b.commitMessageAppendix } - commit, err := b.git.Commit(git.Commit{ - Author: b.author, + + commit, err := b.gitClient.Commit(git.Commit{ + Author: b.signature, Message: commitMsg, - }, gpgOpts) + }, repository.WithFiles(map[string]io.Reader{ + manifests.Path: strings.NewReader(manifests.Content), + }), repository.WithSigner(signer)) if err != nil && err != git.ErrNoStagedFiles { return fmt.Errorf("failed to commit sync manifests: %w", err) } + if err == nil { b.logger.Successf("committed sync manifests to %q (%q)", b.branch, commit) b.logger.Actionf("pushing component manifests to %q", b.url) - if err = b.git.Push(ctx, b.caBundle); err != nil { + if err = b.gitClient.Push(ctx); err != nil { return fmt.Errorf("failed to push manifests: %w", err) } } else { @@ -166,16 +182,16 @@ func (b *PlainGitBootstrapper) ReconcileComponents(ctx context.Context, manifest if mustInstallManifests(ctx, b.kube, options.Namespace) { b.logger.Actionf("installing components in %q namespace", options.Namespace) - componentsYAML := filepath.Join(b.git.Path(), manifests.Path) + componentsYAML := filepath.Join(b.gitClient.Path(), manifests.Path) kfile := filepath.Join(filepath.Dir(componentsYAML), konfig.DefaultKustomizationFileName()) if _, err := os.Stat(kfile); err == nil { // Apply the components and their patches - if _, err := utils.Apply(ctx, b.restClientGetter, b.restClientOptions, b.git.Path(), kfile); err != nil { + if _, err := utils.Apply(ctx, b.restClientGetter, b.restClientOptions, b.gitClient.Path(), kfile); err != nil { return err } } else { // Apply the CRDs and controllers - if _, err := utils.Apply(ctx, b.restClientGetter, b.restClientOptions, b.git.Path(), componentsYAML); err != nil { + if _, err := utils.Apply(ctx, b.restClientGetter, b.restClientOptions, b.gitClient.Path(), componentsYAML); err != nil { return err } } @@ -237,12 +253,19 @@ func (b *PlainGitBootstrapper) ReconcileSyncConfig(ctx context.Context, options } // Clone if not already - if _, err := b.git.Status(); err != nil { + if _, err := b.gitClient.Head(); err != nil { if err == git.ErrNoGitRepository { b.logger.Actionf("cloning branch %q from Git repository %q", b.branch, b.url) var cloned bool if err = retry(1, 2*time.Second, func() (err error) { - cloned, err = b.git.Clone(ctx, b.url, b.branch, b.caBundle) + _, err = b.gitClient.Clone(ctx, b.url, repository.CloneOptions{ + CheckoutStrategy: repository.CheckoutStrategy{ + Branch: b.branch, + }, + }) + if err == nil { + cloned = true + } return }); err != nil { return fmt.Errorf("failed to clone repository: %w", err) @@ -260,41 +283,47 @@ func (b *PlainGitBootstrapper) ReconcileSyncConfig(ctx context.Context, options if err != nil { return fmt.Errorf("sync manifests generation failed: %w", err) } - if err = b.git.Write(manifests.Path, strings.NewReader(manifests.Content)); err != nil { - return fmt.Errorf("failed to write manifest %q: %w", manifests.Path, err) - } // Create secure Kustomize FS - fs, err := filesys.MakeFsOnDiskSecureBuild(b.git.Path()) + fs, err := filesys.MakeFsOnDiskSecureBuild(b.gitClient.Path()) if err != nil { return fmt.Errorf("failed to initialize Kustomize file system: %w", err) } + if err = fs.WriteFile(filepath.Join(b.gitClient.Path(), manifests.Path), []byte(manifests.Content)); err != nil { + return err + } + // Generate Kustomization kusManifests, err := kustomization.Generate(kustomization.Options{ FileSystem: fs, - BaseDir: b.git.Path(), + BaseDir: b.gitClient.Path(), TargetPath: filepath.Dir(manifests.Path), }) if err != nil { return fmt.Errorf("%s generation failed: %w", konfig.DefaultKustomizationFileName(), err) } - if err = b.git.Write(kusManifests.Path, strings.NewReader(kusManifests.Content)); err != nil { - return fmt.Errorf("failed to write manifest %q: %w", kusManifests.Path, err) - } b.logger.Successf("generated sync manifests") - // Git commit generated - gpgOpts := git.WithGpgSigningOption(b.gpgKeyRing, b.gpgPassphrase, b.gpgKeyID) + // Write generated files and make a commit + var signer *openpgp.Entity + if b.gpgKeyRing != nil { + signer, err = getOpenPgpEntity(b.gpgKeyRing, b.gpgPassphrase, b.gpgKeyID) + if err != nil { + return fmt.Errorf("failed to generate OpenPGP entity: %w", err) + } + } commitMsg := fmt.Sprintf("Add Flux sync manifests") if b.commitMessageAppendix != "" { commitMsg = commitMsg + "\n\n" + b.commitMessageAppendix } - commit, err := b.git.Commit(git.Commit{ - Author: b.author, - Message: commitMsg, - }, gpgOpts) + commit, err := b.gitClient.Commit(git.Commit{ + Author: b.signature, + Message: commitMsg, + }, repository.WithFiles(map[string]io.Reader{ + kusManifests.Path: strings.NewReader(kusManifests.Content), + }), repository.WithSigner(signer)) if err != nil && err != git.ErrNoStagedFiles { return fmt.Errorf("failed to commit sync manifests: %w", err) } @@ -302,18 +331,22 @@ func (b *PlainGitBootstrapper) ReconcileSyncConfig(ctx context.Context, options if err == nil { b.logger.Successf("committed sync manifests to %q (%q)", b.branch, commit) b.logger.Actionf("pushing sync manifests to %q", b.url) - err = b.git.Push(ctx, b.caBundle) + err = b.gitClient.Push(ctx) if err != nil { if strings.HasPrefix(err.Error(), gogit.ErrNonFastForwardUpdate.Error()) { b.logger.Waitingf("git conflict detected, retrying with a fresh clone") - if err := os.RemoveAll(b.git.Path()); err != nil { + if err := os.RemoveAll(b.gitClient.Path()); err != nil { return fmt.Errorf("failed to remove tmp dir: %w", err) } - if err := os.Mkdir(b.git.Path(), 0o700); err != nil { + if err := os.Mkdir(b.gitClient.Path(), 0o700); err != nil { return fmt.Errorf("failed to recreate tmp dir: %w", err) } if err = retry(1, 2*time.Second, func() (err error) { - _, err = b.git.Clone(ctx, b.url, b.branch, b.caBundle) + _, err = b.gitClient.Clone(ctx, b.url, repository.CloneOptions{ + CheckoutStrategy: repository.CheckoutStrategy{ + Branch: b.branch, + }, + }) return }); err != nil { return fmt.Errorf("failed to clone repository: %w", err) @@ -328,7 +361,7 @@ func (b *PlainGitBootstrapper) ReconcileSyncConfig(ctx context.Context, options // Apply to cluster b.logger.Actionf("applying sync manifests") - if _, err := utils.Apply(ctx, b.restClientGetter, b.restClientOptions, b.git.Path(), filepath.Join(b.git.Path(), kusManifests.Path)); err != nil { + if _, err := utils.Apply(ctx, b.restClientGetter, b.restClientOptions, b.gitClient.Path(), filepath.Join(b.gitClient.Path(), kusManifests.Path)); err != nil { return err } @@ -338,7 +371,7 @@ func (b *PlainGitBootstrapper) ReconcileSyncConfig(ctx context.Context, options } func (b *PlainGitBootstrapper) ReportKustomizationHealth(ctx context.Context, options sync.Options, pollInterval, timeout time.Duration) error { - head, err := b.git.Head() + head, err := b.gitClient.Head() if err != nil { return err } @@ -390,3 +423,31 @@ func (b *PlainGitBootstrapper) ReportComponentsHealth(ctx context.Context, insta b.logger.Successf("all components are healthy") return nil } + +func getOpenPgpEntity(keyRing openpgp.EntityList, passphrase, keyID string) (*openpgp.Entity, error) { + if len(keyRing) == 0 { + return nil, fmt.Errorf("empty GPG key ring") + } + + var entity *openpgp.Entity + if keyID != "" { + for _, ent := range keyRing { + if ent.PrimaryKey.KeyIdString() == keyID { + entity = ent + } + } + + if entity == nil { + return nil, fmt.Errorf("no GPG private key matching key id '%s' found", keyID) + } + } else { + entity = keyRing[0] + } + + err := entity.PrivateKey.Decrypt([]byte(passphrase)) + if err != nil { + return nil, fmt.Errorf("unable to decrypt GPG private key: %w", err) + } + + return entity, nil +} diff --git a/pkg/bootstrap/bootstrap_provider.go b/pkg/bootstrap/bootstrap_provider.go index 1d27cce0..63600926 100644 --- a/pkg/bootstrap/bootstrap_provider.go +++ b/pkg/bootstrap/bootstrap_provider.go @@ -29,10 +29,10 @@ import ( "github.com/fluxcd/go-git-providers/gitprovider" - "github.com/fluxcd/flux2/pkg/bootstrap/git" "github.com/fluxcd/flux2/pkg/bootstrap/provider" "github.com/fluxcd/flux2/pkg/manifestgen/sourcesecret" "github.com/fluxcd/flux2/pkg/manifestgen/sync" + "github.com/fluxcd/pkg/git/repository" ) type GitProviderBootstrapper struct { @@ -62,11 +62,12 @@ type GitProviderBootstrapper struct { provider gitprovider.Client } -func NewGitProviderBootstrapper(git git.Git, provider gitprovider.Client, kube client.Client, opts ...GitProviderOption) (*GitProviderBootstrapper, error) { +func NewGitProviderBootstrapper(git repository.Client, provider gitprovider.Client, + kube client.Client, opts ...GitProviderOption) (*GitProviderBootstrapper, error) { b := &GitProviderBootstrapper{ PlainGitBootstrapper: &PlainGitBootstrapper{ - git: git, - kube: kube, + gitClient: git, + kube: kube, }, bootstrapTransportType: "https", syncTransportType: "ssh", diff --git a/pkg/bootstrap/git/commit_options.go b/pkg/bootstrap/git/commit_options.go deleted file mode 100644 index b30491f6..00000000 --- a/pkg/bootstrap/git/commit_options.go +++ /dev/null @@ -1,46 +0,0 @@ -package git - -import ( - "github.com/ProtonMail/go-crypto/openpgp" -) - -// Option is a some configuration that modifies options for a commit. -type Option interface { - // ApplyToCommit applies this configuration to a given commit option. - ApplyToCommit(*CommitOptions) -} - -// CommitOptions contains options for making a commit. -type CommitOptions struct { - *GPGSigningInfo -} - -// GPGSigningInfo contains information for signing a commit. -type GPGSigningInfo struct { - KeyRing openpgp.EntityList - Passphrase string - KeyID string -} - -type GpgSigningOption struct { - *GPGSigningInfo -} - -func (w GpgSigningOption) ApplyToCommit(in *CommitOptions) { - in.GPGSigningInfo = w.GPGSigningInfo -} - -func WithGpgSigningOption(keyRing openpgp.EntityList, passphrase, keyID string) Option { - // Return nil if no path is set, even if other options are configured. - if len(keyRing) == 0 { - return GpgSigningOption{} - } - - return GpgSigningOption{ - GPGSigningInfo: &GPGSigningInfo{ - KeyRing: keyRing, - Passphrase: passphrase, - KeyID: keyID, - }, - } -} diff --git a/pkg/bootstrap/git/git.go b/pkg/bootstrap/git/git.go deleted file mode 100644 index 1a0f6d86..00000000 --- a/pkg/bootstrap/git/git.go +++ /dev/null @@ -1,52 +0,0 @@ -/* -Copyright 2021 The Flux authors - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package git - -import ( - "context" - "errors" - "io" -) - -var ( - ErrNoGitRepository = errors.New("no git repository") - ErrNoStagedFiles = errors.New("no staged files") -) - -type Author struct { - Name string - Email string -} - -type Commit struct { - Author - Hash string - Message string -} - -// Git is an interface for basic Git operations on a single branch of a -// remote repository. -type Git interface { - Init(url, branch string) (bool, error) - Clone(ctx context.Context, url, branch string, caBundle []byte) (bool, error) - Write(path string, reader io.Reader) error - Commit(message Commit, options ...Option) (string, error) - Push(ctx context.Context, caBundle []byte) error - Status() (bool, error) - Head() (string, error) - Path() string -} diff --git a/pkg/bootstrap/git/gogit/gogit.go b/pkg/bootstrap/git/gogit/gogit.go deleted file mode 100644 index c1c6200a..00000000 --- a/pkg/bootstrap/git/gogit/gogit.go +++ /dev/null @@ -1,286 +0,0 @@ -/* -Copyright 2021 The Flux authors - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package gogit - -import ( - "context" - "fmt" - "io" - "os" - "path/filepath" - "strings" - "time" - - "github.com/ProtonMail/go-crypto/openpgp" - gogit "github.com/go-git/go-git/v5" - "github.com/go-git/go-git/v5/config" - "github.com/go-git/go-git/v5/plumbing" - "github.com/go-git/go-git/v5/plumbing/object" - "github.com/go-git/go-git/v5/plumbing/transport" - - "github.com/fluxcd/flux2/pkg/bootstrap/git" -) - -type GoGit struct { - path string - auth transport.AuthMethod - repository *gogit.Repository -} - -type CommitOptions struct { - GpgKeyPath string - GpgKeyPassphrase string - KeyID string -} - -func New(path string, auth transport.AuthMethod) *GoGit { - return &GoGit{ - path: path, - auth: auth, - } -} - -func (g *GoGit) Init(url, branch string) (bool, error) { - if g.repository != nil { - return false, nil - } - - r, err := gogit.PlainInit(g.path, false) - if err != nil { - return false, err - } - if _, err = r.CreateRemote(&config.RemoteConfig{ - Name: gogit.DefaultRemoteName, - URLs: []string{url}, - }); err != nil { - return false, err - } - branchRef := plumbing.NewBranchReferenceName(branch) - if err = r.CreateBranch(&config.Branch{ - Name: branch, - Remote: gogit.DefaultRemoteName, - Merge: branchRef, - }); err != nil { - return false, err - } - // PlainInit assumes the initial branch to always be master, we can - // overwrite this by setting the reference of the Storer to a new - // symbolic reference (as there are no commits yet) that points - // the HEAD to our new branch. - if err = r.Storer.SetReference(plumbing.NewSymbolicReference(plumbing.HEAD, branchRef)); err != nil { - return false, err - } - - g.repository = r - return true, nil -} - -func (g *GoGit) Clone(ctx context.Context, url, branch string, caBundle []byte) (bool, error) { - branchRef := plumbing.NewBranchReferenceName(branch) - r, err := gogit.PlainCloneContext(ctx, g.path, false, &gogit.CloneOptions{ - URL: url, - Auth: g.auth, - RemoteName: gogit.DefaultRemoteName, - ReferenceName: branchRef, - SingleBranch: true, - - NoCheckout: false, - Progress: nil, - Tags: gogit.NoTags, - CABundle: caBundle, - }) - if err != nil { - if err == transport.ErrEmptyRemoteRepository || isRemoteBranchNotFoundErr(err, branchRef.String()) { - return g.Init(url, branch) - } - return false, err - } - - g.repository = r - return true, nil -} - -func (g *GoGit) Write(path string, reader io.Reader) error { - if g.repository == nil { - return git.ErrNoGitRepository - } - - wt, err := g.repository.Worktree() - if err != nil { - return err - } - - f, err := wt.Filesystem.Create(path) - if err != nil { - return err - } - defer f.Close() - - _, err = io.Copy(f, reader) - return err -} - -func (g *GoGit) Commit(message git.Commit, opts ...git.Option) (string, error) { - if g.repository == nil { - return "", git.ErrNoGitRepository - } - - wt, err := g.repository.Worktree() - if err != nil { - return "", err - } - - status, err := wt.Status() - if err != nil { - return "", err - } - - // apply the options - options := &git.CommitOptions{} - for _, opt := range opts { - opt.ApplyToCommit(options) - } - - // go-git has [a bug](https://github.com/go-git/go-git/issues/253) - // whereby it thinks broken symlinks to absolute paths are - // modified. There's no circumstance in which we want to commit a - // change to a broken symlink: so, detect and skip those. - var changed bool - for file, _ := range status { - abspath := filepath.Join(g.path, file) - info, err := os.Lstat(abspath) - if err != nil { - return "", fmt.Errorf("checking if %s is a symlink: %w", file, err) - } - if info.Mode()&os.ModeSymlink > 0 { - // symlinks are OK; broken symlinks are probably a result - // of the bug mentioned above, but not of interest in any - // case. - if _, err := os.Stat(abspath); os.IsNotExist(err) { - continue - } - } - _, _ = wt.Add(file) - changed = true - } - - if !changed { - head, err := g.repository.Head() - if err != nil { - return "", err - } - return head.Hash().String(), git.ErrNoStagedFiles - } - - commitOpts := &gogit.CommitOptions{ - Author: &object.Signature{ - Name: message.Name, - Email: message.Email, - When: time.Now(), - }, - } - - if options.GPGSigningInfo != nil { - entity, err := getOpenPgpEntity(*options.GPGSigningInfo) - if err != nil { - return "", err - } - - commitOpts.SignKey = entity - } - - commit, err := wt.Commit(message.Message, commitOpts) - if err != nil { - return "", err - } - return commit.String(), nil -} - -func (g *GoGit) Push(ctx context.Context, caBundle []byte) error { - if g.repository == nil { - return git.ErrNoGitRepository - } - - return g.repository.PushContext(ctx, &gogit.PushOptions{ - RemoteName: gogit.DefaultRemoteName, - Auth: g.auth, - Progress: nil, - CABundle: caBundle, - }) -} - -func (g *GoGit) Status() (bool, error) { - if g.repository == nil { - return false, git.ErrNoGitRepository - } - wt, err := g.repository.Worktree() - if err != nil { - return false, err - } - status, err := wt.Status() - if err != nil { - return false, err - } - return status.IsClean(), nil -} - -func (g *GoGit) Head() (string, error) { - if g.repository == nil { - return "", git.ErrNoGitRepository - } - head, err := g.repository.Head() - if err != nil { - return "", err - } - return head.Hash().String(), nil -} - -func (g *GoGit) Path() string { - return g.path -} - -func isRemoteBranchNotFoundErr(err error, ref string) bool { - return strings.Contains(err.Error(), fmt.Sprintf("couldn't find remote ref %q", ref)) -} - -func getOpenPgpEntity(info git.GPGSigningInfo) (*openpgp.Entity, error) { - if len(info.KeyRing) == 0 { - return nil, fmt.Errorf("empty GPG key ring") - } - - var entity *openpgp.Entity - if info.KeyID != "" { - for _, ent := range info.KeyRing { - if ent.PrimaryKey.KeyIdString() == info.KeyID { - entity = ent - } - } - - if entity == nil { - return nil, fmt.Errorf("no GPG private key matching key id '%s' found", info.KeyID) - } - } else { - entity = info.KeyRing[0] - } - - err := entity.PrivateKey.Decrypt([]byte(info.Passphrase)) - if err != nil { - return nil, fmt.Errorf("unable to decrypt GPG private key: %w", err) - } - - return entity, nil -} diff --git a/pkg/bootstrap/git/gogit/gogit_test.go b/pkg/bootstrap/git/gogit/gogit_test.go deleted file mode 100644 index 03e4545b..00000000 --- a/pkg/bootstrap/git/gogit/gogit_test.go +++ /dev/null @@ -1,80 +0,0 @@ -//go:build unit -// +build unit - -package gogit - -import ( - "os" - "testing" - - "github.com/ProtonMail/go-crypto/openpgp" - "github.com/fluxcd/flux2/pkg/bootstrap/git" -) - -func TestGetOpenPgpEntity(t *testing.T) { - tests := []struct { - name string - keyPath string - passphrase string - id string - expectErr bool - }{ - { - name: "no default key id given", - keyPath: "testdata/private.key", - passphrase: "flux", - id: "", - expectErr: false, - }, - { - name: "key id given", - keyPath: "testdata/private.key", - passphrase: "flux", - id: "0619327DBD777415", - expectErr: false, - }, - { - name: "wrong key id", - keyPath: "testdata/private.key", - passphrase: "flux", - id: "0619327DBD777416", - expectErr: true, - }, - { - name: "wrong password", - keyPath: "testdata/private.key", - passphrase: "fluxe", - id: "0619327DBD777415", - expectErr: true, - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - var entityList openpgp.EntityList - if tt.keyPath != "" { - r, err := os.Open(tt.keyPath) - if err != nil { - t.Errorf("unexpected error: %s", err) - } - entityList, err = openpgp.ReadKeyRing(r) - if err != nil { - t.Errorf("unexpected error: %s", err) - } - } - gpgInfo := git.GPGSigningInfo{ - KeyRing: entityList, - Passphrase: tt.passphrase, - KeyID: tt.id, - } - - _, err := getOpenPgpEntity(gpgInfo) - if err != nil && !tt.expectErr { - t.Errorf("unexpected error: %s", err) - } - if err == nil && tt.expectErr { - t.Errorf("expected error when %s", tt.name) - } - }) - } -} diff --git a/pkg/bootstrap/git/gogit/testdata/private.key b/pkg/bootstrap/git/gogit/testdata/private.key deleted file mode 100644 index 9e56432c627b84d068b2fe3f9abd07a8fcb5368a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7533 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 diff --git a/pkg/bootstrap/options.go b/pkg/bootstrap/options.go index be6ce3e8..c9ea0f81 100644 --- a/pkg/bootstrap/options.go +++ b/pkg/bootstrap/options.go @@ -23,9 +23,9 @@ import ( "k8s.io/cli-runtime/pkg/genericclioptions" "github.com/ProtonMail/go-crypto/openpgp" + "github.com/fluxcd/pkg/git" runclient "github.com/fluxcd/pkg/runtime/client" - "github.com/fluxcd/flux2/pkg/bootstrap/git" "github.com/fluxcd/flux2/pkg/log" ) @@ -48,42 +48,28 @@ func (o branchOption) applyGitProvider(b *GitProviderBootstrapper) { o.applyGit(b.PlainGitBootstrapper) } -func WithAuthor(name, email string) Option { - return authorOption{ +func WithSignature(name, email string) Option { + return signatureOption{ Name: name, Email: email, } } -type authorOption git.Author +type signatureOption git.Signature -func (o authorOption) applyGit(b *PlainGitBootstrapper) { +func (o signatureOption) applyGit(b *PlainGitBootstrapper) { if o.Name != "" { - b.author.Name = o.Name + b.signature.Name = o.Name } if o.Email != "" { - b.author.Email = o.Email + b.signature.Email = o.Email } } -func (o authorOption) applyGitProvider(b *GitProviderBootstrapper) { +func (o signatureOption) applyGitProvider(b *GitProviderBootstrapper) { o.applyGit(b.PlainGitBootstrapper) } -func WithCABundle(b []byte) Option { - return caBundleOption(b) -} - -type caBundleOption []byte - -func (o caBundleOption) applyGit(b *PlainGitBootstrapper) { - b.caBundle = o -} - -func (o caBundleOption) applyGitProvider(b *GitProviderBootstrapper) { - b.caBundle = o -} - func WithCommitMessageAppendix(appendix string) Option { return commitMessageAppendixOption(appendix) } diff --git a/pkg/manifestgen/sourcesecret/sourcesecret.go b/pkg/manifestgen/sourcesecret/sourcesecret.go index 575af3df..a5ab6c43 100644 --- a/pkg/manifestgen/sourcesecret/sourcesecret.go +++ b/pkg/manifestgen/sourcesecret/sourcesecret.go @@ -76,7 +76,7 @@ func Generate(options Options) (*manifestgen.Manifest, error) { var hostKey []byte if keypair != nil { - if hostKey, err = scanHostKey(options.SSHHostname); err != nil { + if hostKey, err = ScanHostKey(options.SSHHostname); err != nil { return nil, err } } @@ -194,7 +194,7 @@ func generateKeyPair(options Options) (*ssh.KeyPair, error) { return pair, nil } -func scanHostKey(host string) ([]byte, error) { +func ScanHostKey(host string) ([]byte, error) { if _, _, err := net.SplitHostPort(host); err != nil { // Assume we are dealing with a hostname without a port, // append the default SSH port as this is required for From 4ea253220a4600319a9f2bc599ecf5217ffaa8dc Mon Sep 17 00:00:00 2001 From: Sanskar Jaiswal Date: Wed, 9 Nov 2022 16:16:50 +0530 Subject: [PATCH 306/818] use fluxcd/go-git instead of go-git/go-git directly Signed-off-by: Sanskar Jaiswal --- go.mod | 7 ++----- go.sum | 19 ++++++++++++++----- pkg/bootstrap/bootstrap_plain_git.go | 2 +- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/go.mod b/go.mod index 97329917..351b716e 100644 --- a/go.mod +++ b/go.mod @@ -2,15 +2,13 @@ module github.com/fluxcd/flux2 go 1.18 -// Use Flux's version of go-git, which allows clones with multi_ack and multi_ack_detailed. -replace github.com/go-git/go-git/v5 => github.com/fluxcd/go-git/v5 v5.0.0-20221019082644-b33dae782906 - require ( github.com/Masterminds/semver/v3 v3.1.1 github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4 github.com/cyphar/filepath-securejoin v0.2.3 github.com/distribution/distribution/v3 v3.0.0-20221111170714-3b8fbf975279 github.com/fluxcd/go-git-providers v0.9.0 + github.com/fluxcd/go-git/v5 v5.0.0-20221104190732-329fd6659b10 github.com/fluxcd/helm-controller/api v0.26.0 github.com/fluxcd/image-automation-controller/api v0.26.1 github.com/fluxcd/image-reflector-controller/api v0.22.1 @@ -28,7 +26,6 @@ require ( github.com/fluxcd/pkg/untar v0.2.0 github.com/fluxcd/pkg/version v0.2.0 github.com/fluxcd/source-controller/api v0.31.0 - github.com/go-git/go-git/v5 v5.4.2 github.com/gonvenience/bunt v1.3.4 github.com/gonvenience/ytbx v1.4.4 github.com/google/go-cmp v0.5.9 @@ -111,7 +108,6 @@ require ( github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f // indirect github.com/fatih/color v1.13.0 // indirect github.com/felixge/httpsnoop v1.0.1 // indirect - github.com/fluxcd/go-git/v5 v5.0.0-20221104190732-329fd6659b10 // indirect github.com/fluxcd/pkg/apis/acl v0.1.0 // indirect github.com/fluxcd/pkg/apis/kustomize v0.7.0 // indirect github.com/fluxcd/pkg/tar v0.2.0 // indirect @@ -119,6 +115,7 @@ require ( github.com/go-errors/errors v1.4.2 // indirect github.com/go-git/gcfg v1.5.0 // indirect github.com/go-git/go-billy/v5 v5.3.1 // indirect + github.com/go-git/go-git/v5 v5.4.2 // indirect github.com/go-logr/logr v1.2.3 // indirect github.com/go-openapi/jsonpointer v0.19.5 // indirect github.com/go-openapi/jsonreference v0.20.0 // indirect diff --git a/go.sum b/go.sum index 2e7a3732..1c2c25ff 100644 --- a/go.sum +++ b/go.sum @@ -80,7 +80,8 @@ github.com/MakeNowJust/heredoc v1.0.0 h1:cXCdzVdstXyiTqTvfqk9SDHpKNjxuom+DOlyEeQ github.com/MakeNowJust/heredoc v1.0.0/go.mod h1:mG5amYoWBHf8vpLOuehzbGGw0EHxpZZ6lCpQ4fNJ8LE= github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030IGemrRc= github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= -github.com/Microsoft/go-winio v0.5.0/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= +github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= +github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= @@ -203,8 +204,6 @@ github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= github.com/fluxcd/go-git-providers v0.9.0 h1:iiiKe3dzRCgVkjEi8rfpvaWTZwuGRfb3RJFhjSNz+Uc= github.com/fluxcd/go-git-providers v0.9.0/go.mod h1:GcaDVP9RlamLKJp25Nwi7X5t0MyZV3FY+qy1GiRdbtk= -github.com/fluxcd/go-git/v5 v5.0.0-20221019082644-b33dae782906 h1:VFNX84BWt3r4YVFYLdNvryRwFBix2lea8EVT5V/xH7Y= -github.com/fluxcd/go-git/v5 v5.0.0-20221019082644-b33dae782906/go.mod h1:YpPgMNvxopDCZUuSFjkbcx/vWhCDvPsuoBCTTEd9dDc= github.com/fluxcd/go-git/v5 v5.0.0-20221104190732-329fd6659b10 h1:au798417R1iWtgcgKe3Dg495mexQmuxelL+NebAtexE= github.com/fluxcd/go-git/v5 v5.0.0-20221104190732-329fd6659b10/go.mod h1:w8bjt1WtWUxMEmlifjBJP9bK9QAG1Vw1Lw7RzchJFNk= github.com/fluxcd/helm-controller/api v0.26.0 h1:UCod+R1Oct2jg5cXHlVBC57Jy01lMdpl9MA+8UPogvY= @@ -259,10 +258,14 @@ github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxI github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4= github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= +github.com/go-git/go-billy/v5 v5.2.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= github.com/go-git/go-billy/v5 v5.3.1 h1:CPiOUAzKtMRvolEKw+bG1PLRpT7D3LIs3/3ey4Aiu34= github.com/go-git/go-billy/v5 v5.3.1/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= +github.com/go-git/go-git-fixtures/v4 v4.2.1/go.mod h1:K8zd3kDUAykwTdDCr+I0per6Y6vMiRR/nnVTBtavnB0= github.com/go-git/go-git-fixtures/v4 v4.3.1 h1:y5z6dd3qi8Hl+stezc8p3JxDkoTRqMAlKnXHuzrfjTQ= github.com/go-git/go-git-fixtures/v4 v4.3.1/go.mod h1:8LHG1a3SRW71ettAD/jW13h8c6AqjVSeL11RAdgaqpo= +github.com/go-git/go-git/v5 v5.4.2 h1:BXyZu9t0VkbiHtqrsvdq39UDhGJTl1h55VW6CSC4aY4= +github.com/go-git/go-git/v5 v5.4.2/go.mod h1:gQ1kArt6d+n+BGd+/B/I74HwRTLhth2+zti4ihgckDc= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -596,6 +599,7 @@ github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= @@ -630,7 +634,7 @@ github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74 h1:JwtAtb github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74/go.mod h1:RmMWU37GKR2s6pgrIEB4ixgpVCt/cf7dnJv3fuH1J1c= github.com/xanzy/go-gitlab v0.73.1 h1:UMagqUZLJdjss1SovIC+kJCH4k2AZWXl58gJd38Y/hI= github.com/xanzy/go-gitlab v0.73.1/go.mod h1:d/a0vswScO7Agg1CZNz15Ic6SSvBG9vfw8egL99t4kA= -github.com/xanzy/ssh-agent v0.3.1/go.mod h1:QIE4lCeL7nkC25x+yA3LBIYfwCc1TFziCtG7cBAac6w= +github.com/xanzy/ssh-agent v0.3.0/go.mod h1:3s9xbODqPuuhK9JV1R321M/FlMZSBvE5aY6eAcqrDh0= github.com/xanzy/ssh-agent v0.3.2 h1:eKj4SX2Fe7mui28ZgnFW5fmTz1EIr7ugo5s6wDxdHBM= github.com/xanzy/ssh-agent v0.3.2/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= @@ -665,13 +669,14 @@ go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk= go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= go.uber.org/zap v1.23.0 h1:OjGQ5KQDEUawVHxNwQgPpiypGHOxo2mNZsOqTak4fFY= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= @@ -753,6 +758,7 @@ golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= +golang.org/x/net v0.0.0-20210326060303-6b1517762897/go.mod h1:uSPa2vr4CLtc/ILN5odXGNXS6mhrKVzTaCXzk9m6W3k= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= @@ -812,6 +818,7 @@ golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -844,8 +851,10 @@ golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210502180810-71e4cd670f79/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/pkg/bootstrap/bootstrap_plain_git.go b/pkg/bootstrap/bootstrap_plain_git.go index 70f2f49a..8f137bbc 100644 --- a/pkg/bootstrap/bootstrap_plain_git.go +++ b/pkg/bootstrap/bootstrap_plain_git.go @@ -26,7 +26,7 @@ import ( "time" "github.com/ProtonMail/go-crypto/openpgp" - gogit "github.com/go-git/go-git/v5" + gogit "github.com/fluxcd/go-git/v5" corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/util/wait" From f8da3a1b448fc1c4484cf71c2c93da9da1cbb557 Mon Sep 17 00:00:00 2001 From: Sanskar Jaiswal Date: Thu, 10 Nov 2022 22:45:22 +0530 Subject: [PATCH 307/818] make gpg signing more robust for bootstrap Signed-off-by: Sanskar Jaiswal --- pkg/bootstrap/bootstrap_plain_git.go | 13 ++++++++++++- pkg/bootstrap/options.go | 2 +- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/pkg/bootstrap/bootstrap_plain_git.go b/pkg/bootstrap/bootstrap_plain_git.go index 8f137bbc..4583fe2f 100644 --- a/pkg/bootstrap/bootstrap_plain_git.go +++ b/pkg/bootstrap/bootstrap_plain_git.go @@ -431,6 +431,14 @@ func getOpenPgpEntity(keyRing openpgp.EntityList, passphrase, keyID string) (*op var entity *openpgp.Entity if keyID != "" { + if strings.HasPrefix(keyID, "0x") { + keyID = strings.TrimPrefix(keyID, "0x") + } + if len(keyID) != 16 { + return nil, fmt.Errorf("invalid GPG key id length; expected %d, got %d", 16, len(keyID)) + } + keyID = strings.ToUpper(keyID) + for _, ent := range keyRing { if ent.PrimaryKey.KeyIdString() == keyID { entity = ent @@ -438,7 +446,10 @@ func getOpenPgpEntity(keyRing openpgp.EntityList, passphrase, keyID string) (*op } if entity == nil { - return nil, fmt.Errorf("no GPG private key matching key id '%s' found", keyID) + return nil, fmt.Errorf("no GPG keyring matching key id '%s' found", keyID) + } + if entity.PrivateKey == nil { + return nil, fmt.Errorf("keyring does not contain private key for key id '%s'", keyID) } } else { entity = keyRing[0] diff --git a/pkg/bootstrap/options.go b/pkg/bootstrap/options.go index c9ea0f81..8b6ee790 100644 --- a/pkg/bootstrap/options.go +++ b/pkg/bootstrap/options.go @@ -155,7 +155,7 @@ func LoadEntityListFromPath(path string) (openpgp.EntityList, error) { } entityList, err := openpgp.ReadKeyRing(r) if err != nil { - return nil, err + return nil, fmt.Errorf("unable to read GPG key ring: %w", err) } return entityList, nil } From 35e1b5cbb9f951601588ad02776e7bf64d348122 Mon Sep 17 00:00:00 2001 From: Sanskar Jaiswal Date: Mon, 14 Nov 2022 19:32:35 +0530 Subject: [PATCH 308/818] add aws codecommit example and validation; azure devops example Signed-off-by: Sanskar Jaiswal --- cmd/flux/bootstrap_git.go | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/cmd/flux/bootstrap_git.go b/cmd/flux/bootstrap_git.go index 1721faf8..f5909788 100644 --- a/cmd/flux/bootstrap_git.go +++ b/cmd/flux/bootstrap_git.go @@ -60,6 +60,12 @@ command will perform an upgrade if needed.`, # Run bootstrap for a Git repository with a private key and password flux bootstrap git --url=ssh://git@example.com/repository.git --private-key-file= --password= + + # Run bootstrap for a Git repository on AWS CodeCommit + flux bootstrap git --url=ssh://@git-codecommit..amazonaws.com/v1/repos/ --private-key-file= --password= + + # Run bootstrap for a Git repository on Azure Devops + flux bootstrap git --url=ssh://git@ssh.dev.azure.com/v3/// --ssh-key-algorithm=rsa --ssh-rsa-bits=4096 `, RunE: bootstrapGitCmdRun, } @@ -115,6 +121,23 @@ func bootstrapGitCmdRun(cmd *cobra.Command, args []string) error { return err } + if strings.Contains(repositoryURL.Hostname(), "git-codecommit") && strings.Contains(repositoryURL.Hostname(), "amazonaws.com") { + if repositoryURL.Scheme == string(git.SSH) { + if repositoryURL.User == nil { + return fmt.Errorf("invalid AWS CodeCommit url: ssh username should be specified in the url") + } + if repositoryURL.User.Username() == git.DefaultPublicKeyAuthUser { + return fmt.Errorf("invalid AWS CodeCommit url: ssh username should be the SSH key ID for the provided private key") + } + if bootstrapArgs.privateKeyFile == "" { + return fmt.Errorf("private key file is required for bootstrapping against AWS CodeCommit using ssh") + } + } + if repositoryURL.Scheme == string(git.HTTPS) && !bootstrapArgs.tokenAuth { + return fmt.Errorf("--token-auth=true must be specified for using a HTTPS AWS CodeCommit url") + } + } + ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) defer cancel() @@ -154,7 +177,7 @@ func bootstrapGitCmdRun(cmd *cobra.Command, args []string) error { } clientOpts := []gogit.ClientOption{gogit.WithDiskStorage()} - if authOpts.Transport == git.HTTP { + if gitArgs.insecureHttpAllowed { clientOpts = append(clientOpts, gogit.WithInsecureCredentialsOverHTTP()) } gitClient, err := gogit.NewClient(tmpDir, authOpts, clientOpts...) From d0e6fcad3fbf5c9248ecadb6fa85602ab1695d73 Mon Sep 17 00:00:00 2001 From: Paulo Gomes Date: Thu, 17 Nov 2022 15:33:59 +0000 Subject: [PATCH 309/818] build: Pin GitHub Actions The main benefit of pinning GitHub actions is the determinism it brings in terms of what version of a given action will be executed. This is a step towards having hermetic builds. Once pinned to a commit, dependabot will automatically issue PRs to update to newer versions. Pinned versions is the only security metric from OpenSSF scorecard that this repository currently have a zero score. Signed-off-by: Paulo Gomes --- .github/dependabot.yml | 2 ++ .github/workflows/e2e-arm64.yaml | 4 ++-- .github/workflows/e2e-azure.yaml | 8 ++++---- .github/workflows/e2e-bootstrap.yaml | 8 ++++---- .github/workflows/e2e.yaml | 8 ++++---- .github/workflows/release.yaml | 30 +++++++++++++--------------- .github/workflows/scan.yaml | 20 +++++++++---------- .github/workflows/update.yaml | 6 +++--- 8 files changed, 43 insertions(+), 43 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 718572bf..6e4be739 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -3,5 +3,7 @@ version: 2 updates: - package-ecosystem: "github-actions" directory: "/" + labels: ["area/build"] schedule: + # by default this will be on a monday. interval: "weekly" diff --git a/.github/workflows/e2e-arm64.yaml b/.github/workflows/e2e-arm64.yaml index c39e45fe..3621304e 100644 --- a/.github/workflows/e2e-arm64.yaml +++ b/.github/workflows/e2e-arm64.yaml @@ -19,9 +19,9 @@ jobs: KUBERNETES_VERSION: [ 1.23.13, 1.24.7, 1.25.3 ] steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 - name: Setup Go - uses: actions/setup-go@v3 + uses: actions/setup-go@c4a742cab115ed795e34d4513e2cf7d472deb55f with: go-version: 1.19.x - name: Prepare diff --git a/.github/workflows/e2e-azure.yaml b/.github/workflows/e2e-azure.yaml index f1ad2f73..e4fed224 100644 --- a/.github/workflows/e2e-azure.yaml +++ b/.github/workflows/e2e-azure.yaml @@ -15,16 +15,16 @@ jobs: runs-on: ubuntu-22.04 steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 - name: Restore Go cache - uses: actions/cache@v3 + uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 with: path: ~/go/pkg/mod key: ${{ runner.os }}-go1.18-${{ hashFiles('**/go.sum') }} restore-keys: | ${{ runner.os }}-go1.18- - name: Setup Go - uses: actions/setup-go@v3 + uses: actions/setup-go@c4a742cab115ed795e34d4513e2cf7d472deb55f with: go-version: 1.19.x - name: Install libgit2 @@ -44,7 +44,7 @@ jobs: mkdir -p $HOME/.local/bin mv sops-v3.7.1.linux $HOME/.local/bin/sops - name: Setup Terraform - uses: hashicorp/setup-terraform@v2.0.3 + uses: hashicorp/setup-terraform@633666f66e0061ca3b725c73b2ec20cd13a8fdd1 # v2 with: terraform_version: 1.2.8 terraform_wrapper: false diff --git a/.github/workflows/e2e-bootstrap.yaml b/.github/workflows/e2e-bootstrap.yaml index 484aec1f..7f301de9 100644 --- a/.github/workflows/e2e-bootstrap.yaml +++ b/.github/workflows/e2e-bootstrap.yaml @@ -16,20 +16,20 @@ jobs: if: (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) && github.actor != 'dependabot[bot]' steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 - name: Restore Go cache - uses: actions/cache@v3 + uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 with: path: ~/go/pkg/mod key: ${{ runner.os }}-go1.18-${{ hashFiles('**/go.sum') }} restore-keys: | ${{ runner.os }}-go1.18- - name: Setup Go - uses: actions/setup-go@v3 + uses: actions/setup-go@c4a742cab115ed795e34d4513e2cf7d472deb55f with: go-version: 1.19.x - name: Setup Kubernetes - uses: engineerd/setup-kind@v0.5.0 + uses: engineerd/setup-kind@aa272fe2a7309878ffc2a81c56cfe3ef108ae7d0 # v0.5.0 with: version: v0.16.0 image: kindest/node:v1.25.2@sha256:9be91e9e9cdf116809841fc77ebdb8845443c4c72fe5218f3ae9eb57fdb4bace diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index c15e2ee2..23e4cc6b 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -20,20 +20,20 @@ jobs: - 5000:5000 steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 - name: Restore Go cache - uses: actions/cache@v3 + uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 with: path: ~/go/pkg/mod key: ${{ runner.os }}-go1.18-${{ hashFiles('**/go.sum') }} restore-keys: | ${{ runner.os }}-go1.18- - name: Setup Go - uses: actions/setup-go@v3 + uses: actions/setup-go@c4a742cab115ed795e34d4513e2cf7d472deb55f with: go-version: 1.19.x - name: Setup Kubernetes - uses: engineerd/setup-kind@v0.5.0 + uses: engineerd/setup-kind@aa272fe2a7309878ffc2a81c56cfe3ef108ae7d0 # v0.5.0 with: version: v0.11.1 image: kindest/node:v1.20.7 diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 885f8676..e07aa45e 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -16,32 +16,32 @@ jobs: packages: write # needed for ghcr access steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 - name: Unshallow run: git fetch --prune --unshallow - name: Setup Go - uses: actions/setup-go@v3 + uses: actions/setup-go@c4a742cab115ed795e34d4513e2cf7d472deb55f with: go-version: 1.19.x - name: Setup QEMU - uses: docker/setup-qemu-action@v2 + uses: docker/setup-qemu-action@e81a89b1732b9c48d79cd809d8d81d79c4647a18 # v2 - name: Setup Docker Buildx id: buildx - uses: docker/setup-buildx-action@v2 + uses: docker/setup-buildx-action@8c0edbc76e98fa90f69d9a2c020dcb50019dc325 # v2 - name: Setup Syft - uses: anchore/sbom-action/download-syft@v0 + uses: anchore/sbom-action/download-syft@06e109483e6aa305a2b2395eabae554e51530e1d # v0.13.1 - name: Setup Cosign - uses: sigstore/cosign-installer@main + uses: sigstore/cosign-installer@7bca8b41164994a7dc93749d266e2f1db492f8a2 - name: Setup Kustomize uses: fluxcd/pkg//actions/kustomize@main - name: Login to GitHub Container Registry - uses: docker/login-action@v2 + uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a # v2 with: registry: ghcr.io username: fluxcdbot password: ${{ secrets.GHCR_TOKEN }} - name: Login to Docker Hub - uses: docker/login-action@v2 + uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a # v2 with: username: fluxcdbot password: ${{ secrets.DOCKER_FLUXCD_PASSWORD }} @@ -53,10 +53,8 @@ jobs: - name: Build CRDs run: | kustomize build manifests/crds > all-crds.yaml - # Pinned to commit before https://github.com/fluxcd/pkg/pull/189 due to - # introduction faulty behavior. - name: Generate OpenAPI JSON schemas from CRDs - uses: fluxcd/pkg//actions/crdjsonschema@49e26aa2ee9e734c3233c560253fd9542afe18ae + uses: fluxcd/pkg//actions/crdjsonschema@main with: crd: all-crds.yaml output: schemas @@ -75,7 +73,7 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Run GoReleaser - uses: goreleaser/goreleaser-action@v3 + uses: goreleaser/goreleaser-action@b508e2e3ef3b19d4e4146d4f8fb3ba9db644a757 # v3 with: version: latest args: release --release-notes=output/notes.md --skip-validate @@ -90,7 +88,7 @@ jobs: id-token: write packages: write steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 - name: Setup Kustomize uses: fluxcd/pkg/actions/kustomize@main - name: Setup Flux CLI @@ -101,13 +99,13 @@ jobs: VERSION=$(flux version --client | awk '{ print $NF }') echo ::set-output name=VERSION::${VERSION} - name: Login to GHCR - uses: docker/login-action@v2 + uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a # v2 with: registry: ghcr.io username: fluxcdbot password: ${{ secrets.GHCR_TOKEN }} - name: Login to DockerHub - uses: docker/login-action@v2 + uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a # v2 with: username: fluxcdbot password: ${{ secrets.DOCKER_FLUXCD_PASSWORD }} @@ -135,7 +133,7 @@ jobs: --path="./flux-system" \ --source=${{ github.repositoryUrl }} \ --revision="${{ github.ref_name }}/${{ github.sha }}" - - uses: sigstore/cosign-installer@main + - uses: sigstore/cosign-installer@7cc35d7fdbe70d4278a0c96779081e6fac665f88 # v2.8.0 - name: Sign manifests env: COSIGN_EXPERIMENTAL: 1 diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index 3156d81c..6ea9b6ae 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -17,9 +17,9 @@ jobs: runs-on: ubuntu-latest if: github.actor != 'dependabot[bot]' steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 - name: Run FOSSA scan and upload build data - uses: fossa-contrib/fossa-action@v1 + uses: fossa-contrib/fossa-action@6cffaa064112e1cf9b5798c6224f9487dc1ec316 # v1 with: # FOSSA Push-Only API Token fossa-api-key: 5ee8bf422db1471e0bcf2bcb289185de @@ -31,21 +31,21 @@ jobs: security-events: write if: (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) && github.actor != 'dependabot[bot]' steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 - name: Setup Kustomize uses: fluxcd/pkg//actions/kustomize@main - name: Build manifests run: | make cmd/flux/.manifests.done - name: Run Snyk to check for vulnerabilities - uses: snyk/actions/golang@master + uses: snyk/actions/golang@a8dd587d8a94f5663fa3d67d51abd0cc66aff244 # v0.3.0 continue-on-error: true env: SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }} with: args: --sarif-file-output=snyk.sarif - name: Upload result to GitHub Code Scanning - uses: github/codeql-action/upload-sarif@v2 + uses: github/codeql-action/upload-sarif@678fc3afe258fb2e0cdc165ccf77b85719de7b3c # v2 with: sarif_file: snyk.sarif @@ -56,16 +56,16 @@ jobs: if: github.actor != 'dependabot[bot]' steps: - name: Checkout repository - uses: actions/checkout@v3 + uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 - name: Set up Go - uses: actions/setup-go@v3 + uses: actions/setup-go@c4a742cab115ed795e34d4513e2cf7d472deb55f with: go-version: 1.19.x - name: Initialize CodeQL - uses: github/codeql-action/init@v2 + uses: github/codeql-action/init@678fc3afe258fb2e0cdc165ccf77b85719de7b3c # v2 with: languages: go - name: Autobuild - uses: github/codeql-action/autobuild@v2 + uses: github/codeql-action/autobuild@678fc3afe258fb2e0cdc165ccf77b85719de7b3c # v2 - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v2 + uses: github/codeql-action/analyze@678fc3afe258fb2e0cdc165ccf77b85719de7b3c # v2 diff --git a/.github/workflows/update.yaml b/.github/workflows/update.yaml index 65a1f307..8a309eea 100644 --- a/.github/workflows/update.yaml +++ b/.github/workflows/update.yaml @@ -18,9 +18,9 @@ jobs: pull-requests: write steps: - name: Check out code - uses: actions/checkout@v3 + uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 - name: Setup Go - uses: actions/setup-go@v3 + uses: actions/setup-go@c4a742cab115ed795e34d4513e2cf7d472deb55f with: go-version: 1.19.x - name: Update component versions @@ -75,7 +75,7 @@ jobs: - name: Create Pull Request id: cpr - uses: peter-evans/create-pull-request@v4 + uses: peter-evans/create-pull-request@b4d51739f96fca8047ad065eccef63442d8e99f7 # v4 with: token: ${{ secrets.BOT_GITHUB_TOKEN }} commit-message: | From 5d944b69dfc1595f5a504f6ec39d47f0e6fe44df Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Tue, 22 Nov 2022 12:59:39 +0000 Subject: [PATCH 310/818] Update toolkit components - helm-controller to v0.27.0 https://github.com/fluxcd/helm-controller/blob/v0.27.0/CHANGELOG.md - kustomize-controller to v0.31.0 https://github.com/fluxcd/kustomize-controller/blob/v0.31.0/CHANGELOG.md - source-controller to v0.32.1 https://github.com/fluxcd/source-controller/blob/v0.32.1/CHANGELOG.md - notification-controller to v0.29.0 https://github.com/fluxcd/notification-controller/blob/v0.29.0/CHANGELOG.md - image-reflector-controller to v0.23.0 https://github.com/fluxcd/image-reflector-controller/blob/v0.23.0/CHANGELOG.md - image-automation-controller to v0.27.0 https://github.com/fluxcd/image-automation-controller/blob/v0.27.0/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 14 +++++----- go.sum | 28 +++++++++---------- .../bases/helm-controller/kustomization.yaml | 4 +-- .../kustomization.yaml | 4 +-- .../kustomization.yaml | 4 +-- .../kustomize-controller/kustomization.yaml | 4 +-- .../kustomization.yaml | 4 +-- .../source-controller/kustomization.yaml | 4 +-- manifests/crds/kustomization.yaml | 12 ++++---- 9 files changed, 39 insertions(+), 39 deletions(-) diff --git a/go.mod b/go.mod index 351b716e..5cb03eb0 100644 --- a/go.mod +++ b/go.mod @@ -9,11 +9,11 @@ require ( github.com/distribution/distribution/v3 v3.0.0-20221111170714-3b8fbf975279 github.com/fluxcd/go-git-providers v0.9.0 github.com/fluxcd/go-git/v5 v5.0.0-20221104190732-329fd6659b10 - github.com/fluxcd/helm-controller/api v0.26.0 - github.com/fluxcd/image-automation-controller/api v0.26.1 - github.com/fluxcd/image-reflector-controller/api v0.22.1 - github.com/fluxcd/kustomize-controller/api v0.30.0 - github.com/fluxcd/notification-controller/api v0.28.0 + github.com/fluxcd/helm-controller/api v0.27.0 + github.com/fluxcd/image-automation-controller/api v0.27.0 + github.com/fluxcd/image-reflector-controller/api v0.23.0 + github.com/fluxcd/kustomize-controller/api v0.31.0 + github.com/fluxcd/notification-controller/api v0.29.0 github.com/fluxcd/pkg/apis/meta v0.18.0 github.com/fluxcd/pkg/git v0.7.0 github.com/fluxcd/pkg/git/gogit v0.2.0 @@ -25,7 +25,7 @@ require ( github.com/fluxcd/pkg/ssh v0.7.0 github.com/fluxcd/pkg/untar v0.2.0 github.com/fluxcd/pkg/version v0.2.0 - github.com/fluxcd/source-controller/api v0.31.0 + github.com/fluxcd/source-controller/api v0.32.1 github.com/gonvenience/bunt v1.3.4 github.com/gonvenience/ytbx v1.4.4 github.com/google/go-cmp v0.5.9 @@ -213,6 +213,6 @@ require ( k8s.io/klog/v2 v2.80.1 // indirect k8s.io/kube-openapi v0.0.0-20221110221610-a28e98eb7c70 // indirect k8s.io/utils v0.0.0-20221108210102-8e77b1f39fe2 // indirect - sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 // indirect + sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect ) diff --git a/go.sum b/go.sum index 1c2c25ff..0e72bdee 100644 --- a/go.sum +++ b/go.sum @@ -206,16 +206,16 @@ github.com/fluxcd/go-git-providers v0.9.0 h1:iiiKe3dzRCgVkjEi8rfpvaWTZwuGRfb3RJF github.com/fluxcd/go-git-providers v0.9.0/go.mod h1:GcaDVP9RlamLKJp25Nwi7X5t0MyZV3FY+qy1GiRdbtk= github.com/fluxcd/go-git/v5 v5.0.0-20221104190732-329fd6659b10 h1:au798417R1iWtgcgKe3Dg495mexQmuxelL+NebAtexE= github.com/fluxcd/go-git/v5 v5.0.0-20221104190732-329fd6659b10/go.mod h1:w8bjt1WtWUxMEmlifjBJP9bK9QAG1Vw1Lw7RzchJFNk= -github.com/fluxcd/helm-controller/api v0.26.0 h1:UCod+R1Oct2jg5cXHlVBC57Jy01lMdpl9MA+8UPogvY= -github.com/fluxcd/helm-controller/api v0.26.0/go.mod h1:Ef7OnSHwMub7Z3F+UNe8p/mblOQ2aSQjCWSRfAqG2FA= -github.com/fluxcd/image-automation-controller/api v0.26.1 h1:+9ISIrgvrqPhJcEKrhlvocu29CEwSn6kjAvsG9XlTXY= -github.com/fluxcd/image-automation-controller/api v0.26.1/go.mod h1:stNr/kLPGu3DELAN0da7NBAjDPrA3TWZn818bAxBiW8= -github.com/fluxcd/image-reflector-controller/api v0.22.1 h1:n4G1UamjfG4aV12x5lMEB4tj9DLCQvUo4KAGZMmdzVs= -github.com/fluxcd/image-reflector-controller/api v0.22.1/go.mod h1:cZ8uWRExmULpIeQtoY5FmoPFfvpgMOZbR9qjyIgB2L0= -github.com/fluxcd/kustomize-controller/api v0.30.0 h1:kOl2wGX1yqz080Ej58WHnWUCGEs6PNo+6b74FA6rJL8= -github.com/fluxcd/kustomize-controller/api v0.30.0/go.mod h1:MisuQ92Y8CR0jR9jCWStvVIYiK5PiDBEq3rfyVRr5sg= -github.com/fluxcd/notification-controller/api v0.28.0 h1:7dRUoKgVatGB235iOl0Z2PXOAoHdbpvmCPnNoy+ljnc= -github.com/fluxcd/notification-controller/api v0.28.0/go.mod h1:USY8Mz7K9uoIn0cNBqq2WTix2cbzpFi9kbs4CMBjB+w= +github.com/fluxcd/helm-controller/api v0.27.0 h1:Ha5eCS9Xchz+TkbtUNJ6WIeUXYBR/ZXlGHAmHiqdrYY= +github.com/fluxcd/helm-controller/api v0.27.0/go.mod h1:/qCtlP718rveiAL7Mova4fGAk0aZv2qyYQn87zcUNhs= +github.com/fluxcd/image-automation-controller/api v0.27.0 h1:Dm2dY6JzTgoIGombOjl/h+ouxfmfjhjHFJQWBr8AlSE= +github.com/fluxcd/image-automation-controller/api v0.27.0/go.mod h1:XYlBpgZ8C2Kgm7SrQWIhDoNA3Hv1rLBZrI9u3s8z/Go= +github.com/fluxcd/image-reflector-controller/api v0.23.0 h1:Ww3EjZD6Xm+UebS+VdXh3UE7rkLSr/1ulIz0FLgUAf0= +github.com/fluxcd/image-reflector-controller/api v0.23.0/go.mod h1:uomyKK0ZWFOsG40wqmCJvIN8OpAiPKFteXe+cdhB/Z0= +github.com/fluxcd/kustomize-controller/api v0.31.0 h1:3KmZa/NYuC1zqc5Qp9jR3pxtkH5P/1UA513xUEJxkUY= +github.com/fluxcd/kustomize-controller/api v0.31.0/go.mod h1:t2pqIe1SMzdZIAG/aietrg3XpRXmpcubf0uxDJOryEA= +github.com/fluxcd/notification-controller/api v0.29.0 h1:aLl2HCtaiOpglaGb2iomKz2IJ77VdRW1gSB3VYjYxmM= +github.com/fluxcd/notification-controller/api v0.29.0/go.mod h1:Ve4SE6jeiGlyItvHa7/UpTPOVC6ac5K76Frv1P7hqLw= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= github.com/fluxcd/pkg/apis/kustomize v0.7.0 h1:X2htBmJ91nGYv4d93gin665MFWKNGiNwUiZ08/Zz0hY= @@ -245,8 +245,8 @@ github.com/fluxcd/pkg/untar v0.2.0 h1:sJXU+FbJcNUb2ffLJNjeR3hwt3X2loVpOMlCUjyFw6 github.com/fluxcd/pkg/untar v0.2.0/go.mod h1:33AyoWaPpjX/xXpczcfhQh2AkB63TFwiR2YwROtv23E= github.com/fluxcd/pkg/version v0.2.0 h1:jG22c59Bsv6vL51N7Bqn8tjHArYOXrjbIkGArlIrv5w= github.com/fluxcd/pkg/version v0.2.0/go.mod h1:umN1VAOV0sB1JDVwb8eXZzuuqIAEku+y+vcCVBBUIf0= -github.com/fluxcd/source-controller/api v0.31.0 h1:4PZQt2XILTUZ/2JOVGzAIpNDXjx8n10skAhuBHa9tVw= -github.com/fluxcd/source-controller/api v0.31.0/go.mod h1:XOf8hJB7jFcAKiOb8HVZcegkBeNSb4g0nxqnNjeVufg= +github.com/fluxcd/source-controller/api v0.32.1 h1:PD8XEG4k5otsnusZZNEQ9XYY5udHoNgp5bX2yZHcb6k= +github.com/fluxcd/source-controller/api v0.32.1/go.mod h1:+DiGND4WSNdGkS7loPUroSarif6dHU4VlVgtLMRKCR8= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= @@ -1152,8 +1152,8 @@ sigs.k8s.io/cli-utils v0.34.0 h1:zCUitt54f0/MYj/ajVFnG6XSXMhpZ72O/3RewIchW8w= sigs.k8s.io/cli-utils v0.34.0/go.mod h1:EXyMwPMu9OL+LRnj0JEMsGG/fRvbgFadcVlSnE8RhFs= sigs.k8s.io/controller-runtime v0.13.1 h1:tUsRCSJVM1QQOOeViGeX3GMT3dQF1eePPw6sEE3xSlg= sigs.k8s.io/controller-runtime v0.13.1/go.mod h1:Zbz+el8Yg31jubvAEyglRZGdLAjplZl+PgtYNI6WNTI= -sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 h1:iXTIw73aPyC+oRdyqqvVJuloN1p0AC/kzH07hu3NE+k= -sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= +sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= +sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= sigs.k8s.io/kustomize/api v0.12.1 h1:7YM7gW3kYBwtKvoY216ZzY+8hM+lV53LUayghNRJ0vM= sigs.k8s.io/kustomize/api v0.12.1/go.mod h1:y3JUhimkZkR6sbLNwfJHxvo1TCLwuwm14sCYnkH6S1s= sigs.k8s.io/kustomize/kyaml v0.13.9 h1:Qz53EAaFFANyNgyOEJbT/yoIHygK40/ZcvU3rgry2Tk= diff --git a/manifests/bases/helm-controller/kustomization.yaml b/manifests/bases/helm-controller/kustomization.yaml index cedf908f..44900345 100644 --- a/manifests/bases/helm-controller/kustomization.yaml +++ b/manifests/bases/helm-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/helm-controller/releases/download/v0.26.0/helm-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.26.0/helm-controller.deployment.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.27.0/helm-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.27.0/helm-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/image-automation-controller/kustomization.yaml b/manifests/bases/image-automation-controller/kustomization.yaml index d465b87f..92f41718 100644 --- a/manifests/bases/image-automation-controller/kustomization.yaml +++ b/manifests/bases/image-automation-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.26.1/image-automation-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.26.1/image-automation-controller.deployment.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.27.0/image-automation-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.27.0/image-automation-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/image-reflector-controller/kustomization.yaml b/manifests/bases/image-reflector-controller/kustomization.yaml index 4a013bf4..1d2e657e 100644 --- a/manifests/bases/image-reflector-controller/kustomization.yaml +++ b/manifests/bases/image-reflector-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.22.1/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.22.1/image-reflector-controller.deployment.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.23.0/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.23.0/image-reflector-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/kustomize-controller/kustomization.yaml b/manifests/bases/kustomize-controller/kustomization.yaml index f0faece0..1b7ac5b3 100644 --- a/manifests/bases/kustomize-controller/kustomization.yaml +++ b/manifests/bases/kustomize-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.30.0/kustomize-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.30.0/kustomize-controller.deployment.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.31.0/kustomize-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.31.0/kustomize-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/notification-controller/kustomization.yaml b/manifests/bases/notification-controller/kustomization.yaml index 928e93df..fa1efe39 100644 --- a/manifests/bases/notification-controller/kustomization.yaml +++ b/manifests/bases/notification-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/notification-controller/releases/download/v0.28.0/notification-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v0.28.0/notification-controller.deployment.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.29.0/notification-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.29.0/notification-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index 165d445e..61736565 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.31.0/source-controller.crds.yaml -- https://github.com/fluxcd/source-controller/releases/download/v0.31.0/source-controller.deployment.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.32.1/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.32.1/source-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index dfe697cb..5017f479 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -1,9 +1,9 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.31.0/source-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.30.0/kustomize-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.26.0/helm-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v0.28.0/notification-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.22.1/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.26.1/image-automation-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.32.1/source-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.31.0/kustomize-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.27.0/helm-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.29.0/notification-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.23.0/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.27.0/image-automation-controller.crds.yaml From 8c56ccc5b09ff0cf49a9e9ef4805ae2d06d6eaff Mon Sep 17 00:00:00 2001 From: Philip Laine Date: Mon, 7 Nov 2022 13:32:08 +0100 Subject: [PATCH 311/818] Aggregate errors in uninstall functions Signed-off-by: Philip Laine --- pkg/uninstall/uninstall.go | 39 ++++++++++++++++++++++++++++++++++---- 1 file changed, 35 insertions(+), 4 deletions(-) diff --git a/pkg/uninstall/uninstall.go b/pkg/uninstall/uninstall.go index ee3f678c..49b64c0c 100644 --- a/pkg/uninstall/uninstall.go +++ b/pkg/uninstall/uninstall.go @@ -35,10 +35,12 @@ import ( kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" notificationv1 "github.com/fluxcd/notification-controller/api/v1beta1" sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + "github.com/hashicorp/go-multierror" ) // Components removes all Kubernetes components that are part of Flux excluding the CRDs and namespace. -func Components(ctx context.Context, logger log.Logger, kubeClient client.Client, namespace string, dryRun bool) { +func Components(ctx context.Context, logger log.Logger, kubeClient client.Client, namespace string, dryRun bool) error { + var aggregateErr error opts, dryRunStr := getDeleteOptions(dryRun) selector := client.MatchingLabels{manifestgen.PartOfLabelKey: manifestgen.PartOfLabelValue} { @@ -47,6 +49,7 @@ func Components(ctx context.Context, logger log.Logger, kubeClient client.Client for _, r := range list.Items { if err := kubeClient.Delete(ctx, &r, opts); err != nil { logger.Failuref("Deployment/%s/%s deletion failed: %s", r.Namespace, r.Name, err.Error()) + aggregateErr = multierror.Append(aggregateErr, err) } else { logger.Successf("Deployment/%s/%s deleted %s", r.Namespace, r.Name, dryRunStr) } @@ -59,6 +62,7 @@ func Components(ctx context.Context, logger log.Logger, kubeClient client.Client for _, r := range list.Items { if err := kubeClient.Delete(ctx, &r, opts); err != nil { logger.Failuref("Service/%s/%s deletion failed: %s", r.Namespace, r.Name, err.Error()) + aggregateErr = multierror.Append(aggregateErr, err) } else { logger.Successf("Service/%s/%s deleted %s", r.Namespace, r.Name, dryRunStr) } @@ -71,6 +75,7 @@ func Components(ctx context.Context, logger log.Logger, kubeClient client.Client for _, r := range list.Items { if err := kubeClient.Delete(ctx, &r, opts); err != nil { logger.Failuref("NetworkPolicy/%s/%s deletion failed: %s", r.Namespace, r.Name, err.Error()) + aggregateErr = multierror.Append(aggregateErr, err) } else { logger.Successf("NetworkPolicy/%s/%s deleted %s", r.Namespace, r.Name, dryRunStr) } @@ -83,6 +88,7 @@ func Components(ctx context.Context, logger log.Logger, kubeClient client.Client for _, r := range list.Items { if err := kubeClient.Delete(ctx, &r, opts); err != nil { logger.Failuref("ServiceAccount/%s/%s deletion failed: %s", r.Namespace, r.Name, err.Error()) + aggregateErr = multierror.Append(aggregateErr, err) } else { logger.Successf("ServiceAccount/%s/%s deleted %s", r.Namespace, r.Name, dryRunStr) } @@ -95,6 +101,7 @@ func Components(ctx context.Context, logger log.Logger, kubeClient client.Client for _, r := range list.Items { if err := kubeClient.Delete(ctx, &r, opts); err != nil { logger.Failuref("ClusterRole/%s deletion failed: %s", r.Name, err.Error()) + aggregateErr = multierror.Append(aggregateErr, err) } else { logger.Successf("ClusterRole/%s deleted %s", r.Name, dryRunStr) } @@ -107,16 +114,20 @@ func Components(ctx context.Context, logger log.Logger, kubeClient client.Client for _, r := range list.Items { if err := kubeClient.Delete(ctx, &r, opts); err != nil { logger.Failuref("ClusterRoleBinding/%s deletion failed: %s", r.Name, err.Error()) + aggregateErr = multierror.Append(aggregateErr, err) } else { logger.Successf("ClusterRoleBinding/%s deleted %s", r.Name, dryRunStr) } } } } + + return aggregateErr } // Finalizers removes all finalizes on Kubernetes components that have been added by a Flux controller. -func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client, dryRun bool) { +func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client, dryRun bool) error { + var aggregateErr error opts, dryRunStr := getUpdateOptions(dryRun) { var list sourcev1.GitRepositoryList @@ -125,6 +136,7 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client r.Finalizers = []string{} if err := kubeClient.Update(ctx, &r, opts); err != nil { logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) + aggregateErr = multierror.Append(aggregateErr, err) } else { logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) } @@ -138,6 +150,7 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client r.Finalizers = []string{} if err := kubeClient.Update(ctx, &r, opts); err != nil { logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) + aggregateErr = multierror.Append(aggregateErr, err) } else { logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) } @@ -151,6 +164,7 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client r.Finalizers = []string{} if err := kubeClient.Update(ctx, &r, opts); err != nil { logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) + aggregateErr = multierror.Append(aggregateErr, err) } else { logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) } @@ -164,6 +178,7 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client r.Finalizers = []string{} if err := kubeClient.Update(ctx, &r, opts); err != nil { logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) + aggregateErr = multierror.Append(aggregateErr, err) } else { logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) } @@ -177,6 +192,7 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client r.Finalizers = []string{} if err := kubeClient.Update(ctx, &r, opts); err != nil { logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) + aggregateErr = multierror.Append(aggregateErr, err) } else { logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) } @@ -190,6 +206,7 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client r.Finalizers = []string{} if err := kubeClient.Update(ctx, &r, opts); err != nil { logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) + aggregateErr = multierror.Append(aggregateErr, err) } else { logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) } @@ -203,6 +220,7 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client r.Finalizers = []string{} if err := kubeClient.Update(ctx, &r, opts); err != nil { logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) + aggregateErr = multierror.Append(aggregateErr, err) } else { logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) } @@ -216,6 +234,7 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client r.Finalizers = []string{} if err := kubeClient.Update(ctx, &r, opts); err != nil { logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) + aggregateErr = multierror.Append(aggregateErr, err) } else { logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) } @@ -229,6 +248,7 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client r.Finalizers = []string{} if err := kubeClient.Update(ctx, &r, opts); err != nil { logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) + aggregateErr = multierror.Append(aggregateErr, err) } else { logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) } @@ -242,6 +262,7 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client r.Finalizers = []string{} if err := kubeClient.Update(ctx, &r, opts); err != nil { logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) + aggregateErr = multierror.Append(aggregateErr, err) } else { logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) } @@ -255,6 +276,7 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client r.Finalizers = []string{} if err := kubeClient.Update(ctx, &r, opts); err != nil { logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) + aggregateErr = multierror.Append(aggregateErr, err) } else { logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) } @@ -268,6 +290,7 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client r.Finalizers = []string{} if err := kubeClient.Update(ctx, &r, opts); err != nil { logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) + aggregateErr = multierror.Append(aggregateErr, err) } else { logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) } @@ -281,16 +304,19 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client r.Finalizers = []string{} if err := kubeClient.Update(ctx, &r, opts); err != nil { logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) + aggregateErr = multierror.Append(aggregateErr, err) } else { logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) } } } } + return aggregateErr } // CustomResourceDefinitions removes all Kubernetes CRDs that are a part of Flux. -func CustomResourceDefinitions(ctx context.Context, logger log.Logger, kubeClient client.Client, dryRun bool) { +func CustomResourceDefinitions(ctx context.Context, logger log.Logger, kubeClient client.Client, dryRun bool) error { + var aggregateErr error opts, dryRunStr := getDeleteOptions(dryRun) selector := client.MatchingLabels{manifestgen.PartOfLabelKey: manifestgen.PartOfLabelValue} { @@ -299,23 +325,28 @@ func CustomResourceDefinitions(ctx context.Context, logger log.Logger, kubeClien for _, r := range list.Items { if err := kubeClient.Delete(ctx, &r, opts); err != nil { logger.Failuref("CustomResourceDefinition/%s deletion failed: %s", r.Name, err.Error()) + aggregateErr = multierror.Append(aggregateErr, err) } else { logger.Successf("CustomResourceDefinition/%s deleted %s", r.Name, dryRunStr) } } } } + return aggregateErr } // Namespace removes the namespace Flux is installed in. -func Namespace(ctx context.Context, logger log.Logger, kubeClient client.Client, namespace string, dryRun bool) { +func Namespace(ctx context.Context, logger log.Logger, kubeClient client.Client, namespace string, dryRun bool) error { + var aggregateErr error opts, dryRunStr := getDeleteOptions(dryRun) ns := corev1.Namespace{ObjectMeta: metav1.ObjectMeta{Name: namespace}} if err := kubeClient.Delete(ctx, &ns, opts); err != nil { logger.Failuref("Namespace/%s deletion failed: %s", namespace, err.Error()) + aggregateErr = multierror.Append(aggregateErr, err) } else { logger.Successf("Namespace/%s deleted %s", namespace, dryRunStr) } + return aggregateErr } func getDeleteOptions(dryRun bool) (*client.DeleteOptions, string) { From b004fbfc417fa53243ff02db7c2e18feeda93f8e Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Tue, 22 Nov 2022 13:09:41 +0000 Subject: [PATCH 312/818] Use k8s.io/apimachinery/pkg for error aggregation Signed-off-by: Hidde Beydals --- go.mod | 2 +- internal/build/diff.go | 18 +++++++----- pkg/uninstall/uninstall.go | 60 +++++++++++++++++++------------------- 3 files changed, 41 insertions(+), 39 deletions(-) diff --git a/go.mod b/go.mod index 5cb03eb0..6d68a82d 100644 --- a/go.mod +++ b/go.mod @@ -30,7 +30,6 @@ require ( github.com/gonvenience/ytbx v1.4.4 github.com/google/go-cmp v0.5.9 github.com/google/go-containerregistry v0.12.1 - github.com/hashicorp/go-multierror v1.1.1 github.com/homeport/dyff v1.5.6 github.com/lucasb-eyer/go-colorful v1.2.0 github.com/manifoldco/promptui v0.9.0 @@ -141,6 +140,7 @@ require ( github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect + github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/go-retryablehttp v0.7.1 // indirect github.com/hashicorp/golang-lru v0.5.4 // indirect github.com/imdario/mergo v0.3.13 // indirect diff --git a/internal/build/diff.go b/internal/build/diff.go index b955989c..9709f1de 100644 --- a/internal/build/diff.go +++ b/internal/build/diff.go @@ -27,20 +27,22 @@ import ( "sort" "strings" - "github.com/fluxcd/flux2/pkg/printers" - kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" - "github.com/fluxcd/pkg/ssa" "github.com/gonvenience/bunt" "github.com/gonvenience/ytbx" "github.com/google/go-cmp/cmp" - "github.com/hashicorp/go-multierror" "github.com/homeport/dyff/pkg/dyff" "github.com/lucasb-eyer/go-colorful" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/util/errors" "sigs.k8s.io/cli-utils/pkg/kstatus/polling" "sigs.k8s.io/cli-utils/pkg/object" "sigs.k8s.io/yaml" + + "github.com/fluxcd/pkg/ssa" + + "github.com/fluxcd/flux2/pkg/printers" + kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" ) func (b *Builder) Manager() (*ssa.ResourceManager, error) { @@ -85,7 +87,7 @@ func (b *Builder) Diff() (string, bool, error) { } } - var diffErrs error + var diffErrs []error // create an inventory of objects to be reconciled newInventory := newInventory() for _, obj := range objects { @@ -97,7 +99,7 @@ func (b *Builder) Diff() (string, bool, error) { change, liveObject, mergedObject, err := resourceManager.Diff(ctx, obj, diffOptions) if err != nil { // gather errors and continue, as we want to see all the diffs - diffErrs = multierror.Append(diffErrs, err) + diffErrs = append(diffErrs, err) continue } @@ -135,7 +137,7 @@ func (b *Builder) Diff() (string, bool, error) { b.spinner.Message("processing inventory") } - if b.kustomization.Spec.Prune && diffErrs == nil { + if b.kustomization.Spec.Prune && len(diffErrs) == 0 { oldStatus := b.kustomization.Status.DeepCopy() if oldStatus.Inventory != nil { diffObjects, err := diffInventory(oldStatus.Inventory, newInventory) @@ -155,7 +157,7 @@ func (b *Builder) Diff() (string, bool, error) { } } - return output.String(), createdOrDrifted, diffErrs + return output.String(), createdOrDrifted, errors.Reduce(errors.Flatten(errors.NewAggregate(diffErrs))) } func writeYamls(liveObject, mergedObject *unstructured.Unstructured) (string, string, string, error) { diff --git a/pkg/uninstall/uninstall.go b/pkg/uninstall/uninstall.go index 49b64c0c..07f6ed49 100644 --- a/pkg/uninstall/uninstall.go +++ b/pkg/uninstall/uninstall.go @@ -25,6 +25,7 @@ import ( rbacv1 "k8s.io/api/rbac/v1" apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/errors" "sigs.k8s.io/controller-runtime/pkg/client" "github.com/fluxcd/flux2/pkg/log" @@ -35,12 +36,11 @@ import ( kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" notificationv1 "github.com/fluxcd/notification-controller/api/v1beta1" sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" - "github.com/hashicorp/go-multierror" ) // Components removes all Kubernetes components that are part of Flux excluding the CRDs and namespace. func Components(ctx context.Context, logger log.Logger, kubeClient client.Client, namespace string, dryRun bool) error { - var aggregateErr error + var aggregateErr []error opts, dryRunStr := getDeleteOptions(dryRun) selector := client.MatchingLabels{manifestgen.PartOfLabelKey: manifestgen.PartOfLabelValue} { @@ -49,7 +49,7 @@ func Components(ctx context.Context, logger log.Logger, kubeClient client.Client for _, r := range list.Items { if err := kubeClient.Delete(ctx, &r, opts); err != nil { logger.Failuref("Deployment/%s/%s deletion failed: %s", r.Namespace, r.Name, err.Error()) - aggregateErr = multierror.Append(aggregateErr, err) + aggregateErr = append(aggregateErr, err) } else { logger.Successf("Deployment/%s/%s deleted %s", r.Namespace, r.Name, dryRunStr) } @@ -62,7 +62,7 @@ func Components(ctx context.Context, logger log.Logger, kubeClient client.Client for _, r := range list.Items { if err := kubeClient.Delete(ctx, &r, opts); err != nil { logger.Failuref("Service/%s/%s deletion failed: %s", r.Namespace, r.Name, err.Error()) - aggregateErr = multierror.Append(aggregateErr, err) + aggregateErr = append(aggregateErr, err) } else { logger.Successf("Service/%s/%s deleted %s", r.Namespace, r.Name, dryRunStr) } @@ -75,7 +75,7 @@ func Components(ctx context.Context, logger log.Logger, kubeClient client.Client for _, r := range list.Items { if err := kubeClient.Delete(ctx, &r, opts); err != nil { logger.Failuref("NetworkPolicy/%s/%s deletion failed: %s", r.Namespace, r.Name, err.Error()) - aggregateErr = multierror.Append(aggregateErr, err) + aggregateErr = append(aggregateErr, err) } else { logger.Successf("NetworkPolicy/%s/%s deleted %s", r.Namespace, r.Name, dryRunStr) } @@ -88,7 +88,7 @@ func Components(ctx context.Context, logger log.Logger, kubeClient client.Client for _, r := range list.Items { if err := kubeClient.Delete(ctx, &r, opts); err != nil { logger.Failuref("ServiceAccount/%s/%s deletion failed: %s", r.Namespace, r.Name, err.Error()) - aggregateErr = multierror.Append(aggregateErr, err) + aggregateErr = append(aggregateErr, err) } else { logger.Successf("ServiceAccount/%s/%s deleted %s", r.Namespace, r.Name, dryRunStr) } @@ -101,7 +101,7 @@ func Components(ctx context.Context, logger log.Logger, kubeClient client.Client for _, r := range list.Items { if err := kubeClient.Delete(ctx, &r, opts); err != nil { logger.Failuref("ClusterRole/%s deletion failed: %s", r.Name, err.Error()) - aggregateErr = multierror.Append(aggregateErr, err) + aggregateErr = append(aggregateErr, err) } else { logger.Successf("ClusterRole/%s deleted %s", r.Name, dryRunStr) } @@ -114,7 +114,7 @@ func Components(ctx context.Context, logger log.Logger, kubeClient client.Client for _, r := range list.Items { if err := kubeClient.Delete(ctx, &r, opts); err != nil { logger.Failuref("ClusterRoleBinding/%s deletion failed: %s", r.Name, err.Error()) - aggregateErr = multierror.Append(aggregateErr, err) + aggregateErr = append(aggregateErr, err) } else { logger.Successf("ClusterRoleBinding/%s deleted %s", r.Name, dryRunStr) } @@ -122,12 +122,12 @@ func Components(ctx context.Context, logger log.Logger, kubeClient client.Client } } - return aggregateErr + return errors.Reduce(errors.Flatten(errors.NewAggregate(aggregateErr))) } // Finalizers removes all finalizes on Kubernetes components that have been added by a Flux controller. func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client, dryRun bool) error { - var aggregateErr error + var aggregateErr []error opts, dryRunStr := getUpdateOptions(dryRun) { var list sourcev1.GitRepositoryList @@ -136,7 +136,7 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client r.Finalizers = []string{} if err := kubeClient.Update(ctx, &r, opts); err != nil { logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) - aggregateErr = multierror.Append(aggregateErr, err) + aggregateErr = append(aggregateErr, err) } else { logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) } @@ -150,7 +150,7 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client r.Finalizers = []string{} if err := kubeClient.Update(ctx, &r, opts); err != nil { logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) - aggregateErr = multierror.Append(aggregateErr, err) + aggregateErr = append(aggregateErr, err) } else { logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) } @@ -164,7 +164,7 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client r.Finalizers = []string{} if err := kubeClient.Update(ctx, &r, opts); err != nil { logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) - aggregateErr = multierror.Append(aggregateErr, err) + aggregateErr = append(aggregateErr, err) } else { logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) } @@ -178,7 +178,7 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client r.Finalizers = []string{} if err := kubeClient.Update(ctx, &r, opts); err != nil { logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) - aggregateErr = multierror.Append(aggregateErr, err) + aggregateErr = append(aggregateErr, err) } else { logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) } @@ -192,7 +192,7 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client r.Finalizers = []string{} if err := kubeClient.Update(ctx, &r, opts); err != nil { logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) - aggregateErr = multierror.Append(aggregateErr, err) + aggregateErr = append(aggregateErr, err) } else { logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) } @@ -206,7 +206,7 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client r.Finalizers = []string{} if err := kubeClient.Update(ctx, &r, opts); err != nil { logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) - aggregateErr = multierror.Append(aggregateErr, err) + aggregateErr = append(aggregateErr, err) } else { logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) } @@ -220,7 +220,7 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client r.Finalizers = []string{} if err := kubeClient.Update(ctx, &r, opts); err != nil { logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) - aggregateErr = multierror.Append(aggregateErr, err) + aggregateErr = append(aggregateErr, err) } else { logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) } @@ -234,7 +234,7 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client r.Finalizers = []string{} if err := kubeClient.Update(ctx, &r, opts); err != nil { logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) - aggregateErr = multierror.Append(aggregateErr, err) + aggregateErr = append(aggregateErr, err) } else { logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) } @@ -248,7 +248,7 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client r.Finalizers = []string{} if err := kubeClient.Update(ctx, &r, opts); err != nil { logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) - aggregateErr = multierror.Append(aggregateErr, err) + aggregateErr = append(aggregateErr, err) } else { logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) } @@ -262,7 +262,7 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client r.Finalizers = []string{} if err := kubeClient.Update(ctx, &r, opts); err != nil { logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) - aggregateErr = multierror.Append(aggregateErr, err) + aggregateErr = append(aggregateErr, err) } else { logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) } @@ -276,7 +276,7 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client r.Finalizers = []string{} if err := kubeClient.Update(ctx, &r, opts); err != nil { logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) - aggregateErr = multierror.Append(aggregateErr, err) + aggregateErr = append(aggregateErr, err) } else { logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) } @@ -290,7 +290,7 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client r.Finalizers = []string{} if err := kubeClient.Update(ctx, &r, opts); err != nil { logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) - aggregateErr = multierror.Append(aggregateErr, err) + aggregateErr = append(aggregateErr, err) } else { logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) } @@ -304,19 +304,19 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client r.Finalizers = []string{} if err := kubeClient.Update(ctx, &r, opts); err != nil { logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) - aggregateErr = multierror.Append(aggregateErr, err) + aggregateErr = append(aggregateErr, err) } else { logger.Successf("%s/%s/%s finalizers deleted %s", r.Kind, r.Namespace, r.Name, dryRunStr) } } } } - return aggregateErr + return errors.Reduce(errors.Flatten(errors.NewAggregate(aggregateErr))) } // CustomResourceDefinitions removes all Kubernetes CRDs that are a part of Flux. func CustomResourceDefinitions(ctx context.Context, logger log.Logger, kubeClient client.Client, dryRun bool) error { - var aggregateErr error + var aggregateErr []error opts, dryRunStr := getDeleteOptions(dryRun) selector := client.MatchingLabels{manifestgen.PartOfLabelKey: manifestgen.PartOfLabelValue} { @@ -325,28 +325,28 @@ func CustomResourceDefinitions(ctx context.Context, logger log.Logger, kubeClien for _, r := range list.Items { if err := kubeClient.Delete(ctx, &r, opts); err != nil { logger.Failuref("CustomResourceDefinition/%s deletion failed: %s", r.Name, err.Error()) - aggregateErr = multierror.Append(aggregateErr, err) + aggregateErr = append(aggregateErr, err) } else { logger.Successf("CustomResourceDefinition/%s deleted %s", r.Name, dryRunStr) } } } } - return aggregateErr + return errors.Reduce(errors.Flatten(errors.NewAggregate(aggregateErr))) } // Namespace removes the namespace Flux is installed in. func Namespace(ctx context.Context, logger log.Logger, kubeClient client.Client, namespace string, dryRun bool) error { - var aggregateErr error + var aggregateErr []error opts, dryRunStr := getDeleteOptions(dryRun) ns := corev1.Namespace{ObjectMeta: metav1.ObjectMeta{Name: namespace}} if err := kubeClient.Delete(ctx, &ns, opts); err != nil { logger.Failuref("Namespace/%s deletion failed: %s", namespace, err.Error()) - aggregateErr = multierror.Append(aggregateErr, err) + aggregateErr = append(aggregateErr, err) } else { logger.Successf("Namespace/%s deleted %s", namespace, dryRunStr) } - return aggregateErr + return errors.Reduce(errors.Flatten(errors.NewAggregate(aggregateErr))) } func getDeleteOptions(dryRun bool) (*client.DeleteOptions, string) { From 12959dec88b7e6a671f9aa4e938accf3e6f05574 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Tue, 22 Nov 2022 13:50:55 +0000 Subject: [PATCH 313/818] Update dependencies - github.com/distribution/distribution/v3 to v3.0.0-20221119093643-85d4039064cc - github.com/fluxcd/go-git-providers to v0.11.0 - golang.org/x/crypto to v0.3.0 Signed-off-by: Hidde Beydals --- go.mod | 10 +++++----- go.sum | 20 ++++++++++---------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/go.mod b/go.mod index 6d68a82d..ea3fb607 100644 --- a/go.mod +++ b/go.mod @@ -6,8 +6,8 @@ require ( github.com/Masterminds/semver/v3 v3.1.1 github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4 github.com/cyphar/filepath-securejoin v0.2.3 - github.com/distribution/distribution/v3 v3.0.0-20221111170714-3b8fbf975279 - github.com/fluxcd/go-git-providers v0.9.0 + github.com/distribution/distribution/v3 v3.0.0-20221119093643-85d4039064cc + github.com/fluxcd/go-git-providers v0.11.0 github.com/fluxcd/go-git/v5 v5.0.0-20221104190732-329fd6659b10 github.com/fluxcd/helm-controller/api v0.27.0 github.com/fluxcd/image-automation-controller/api v0.27.0 @@ -40,7 +40,7 @@ require ( github.com/spf13/cobra v1.6.1 github.com/spf13/pflag v1.0.5 github.com/theckman/yacspin v0.13.12 - golang.org/x/crypto v0.2.0 + golang.org/x/crypto v0.3.0 golang.org/x/term v0.2.0 k8s.io/api v0.25.4 k8s.io/apiextensions-apiserver v0.25.4 @@ -130,7 +130,7 @@ require ( github.com/gonvenience/wrap v1.1.2 // indirect github.com/google/btree v1.1.2 // indirect github.com/google/gnostic v0.6.9 // indirect - github.com/google/go-github/v47 v47.0.0 // indirect + github.com/google/go-github/v47 v47.1.0 // indirect github.com/google/go-querystring v1.1.0 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect @@ -187,7 +187,7 @@ require ( github.com/texttheater/golang-levenshtein v1.0.1 // indirect github.com/vbatts/tar-split v0.11.2 // indirect github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74 // indirect - github.com/xanzy/go-gitlab v0.73.1 // indirect + github.com/xanzy/go-gitlab v0.74.0 // indirect github.com/xanzy/ssh-agent v0.3.2 // indirect github.com/xlab/treeprint v1.1.0 // indirect github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43 // indirect diff --git a/go.sum b/go.sum index 0e72bdee..e825ad97 100644 --- a/go.sum +++ b/go.sum @@ -155,8 +155,8 @@ github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxG github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/distribution/distribution/v3 v3.0.0-20221111170714-3b8fbf975279 h1:+lFUfSfK1/rMGIUUAwu6O+t4WGRwBU1EpaQTcN8KaeM= -github.com/distribution/distribution/v3 v3.0.0-20221111170714-3b8fbf975279/go.mod h1:4x0IxAMsdeCSTr9UopCvp6MnryD2nyRLycsOrgvveAs= +github.com/distribution/distribution/v3 v3.0.0-20221119093643-85d4039064cc h1:uTb+Gcyvk7kSNmGQqr4S+gan39B12Y1KDsADtOQpSX4= +github.com/distribution/distribution/v3 v3.0.0-20221119093643-85d4039064cc/go.mod h1:4x0IxAMsdeCSTr9UopCvp6MnryD2nyRLycsOrgvveAs= github.com/dnaeon/go-vcr v1.1.0 h1:ReYa/UBrRyQdant9B4fNHGoCNKw6qh6P0fsdGmZpR7c= github.com/docker/cli v20.10.20+incompatible h1:lWQbHSHUFs7KraSN2jOJK7zbMS2jNCHI4mt4xUFUVQ4= github.com/docker/cli v20.10.20+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= @@ -202,8 +202,8 @@ github.com/felixge/httpsnoop v1.0.1 h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8S github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0= github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= -github.com/fluxcd/go-git-providers v0.9.0 h1:iiiKe3dzRCgVkjEi8rfpvaWTZwuGRfb3RJFhjSNz+Uc= -github.com/fluxcd/go-git-providers v0.9.0/go.mod h1:GcaDVP9RlamLKJp25Nwi7X5t0MyZV3FY+qy1GiRdbtk= +github.com/fluxcd/go-git-providers v0.11.0 h1:uhERrv9LX1Z+R8w0MIXLajJZSBGEEqsJWCObItFYNW4= +github.com/fluxcd/go-git-providers v0.11.0/go.mod h1:d/Fu+FtvniNJo6B3HbeEQd4TDTUitsA/zjNOGbEjmDE= github.com/fluxcd/go-git/v5 v5.0.0-20221104190732-329fd6659b10 h1:au798417R1iWtgcgKe3Dg495mexQmuxelL+NebAtexE= github.com/fluxcd/go-git/v5 v5.0.0-20221104190732-329fd6659b10/go.mod h1:w8bjt1WtWUxMEmlifjBJP9bK9QAG1Vw1Lw7RzchJFNk= github.com/fluxcd/helm-controller/api v0.27.0 h1:Ha5eCS9Xchz+TkbtUNJ6WIeUXYBR/ZXlGHAmHiqdrYY= @@ -368,8 +368,8 @@ github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-containerregistry v0.12.1 h1:W1mzdNUTx4Zla4JaixCRLhORcR7G6KxE5hHl5fkPsp8= github.com/google/go-containerregistry v0.12.1/go.mod h1:sdIK+oHQO7B93xI8UweYdl887YhuIwg9vz8BSLH3+8k= -github.com/google/go-github/v47 v47.0.0 h1:eQap5bIRZibukP0VhngWgpuM0zhY4xntqOzn6DhdkE4= -github.com/google/go-github/v47 v47.0.0/go.mod h1:DRjdvizXE876j0YOZwInB1ESpOcU/xFBClNiQLSdorE= +github.com/google/go-github/v47 v47.1.0 h1:Cacm/WxQBOa9lF0FT0EMjZ2BWMetQ1TQfyurn4yF1z8= +github.com/google/go-github/v47 v47.1.0/go.mod h1:VPZBXNbFSJGjyjFRUKo9vZGawTajnWzC/YjGw/oFKi0= github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= @@ -632,8 +632,8 @@ github.com/vbatts/tar-split v0.11.2 h1:Via6XqJr0hceW4wff3QRzD5gAk/tatMw/4ZA7cTlI github.com/vbatts/tar-split v0.11.2/go.mod h1:vV3ZuO2yWSVsz+pfFzDG/upWH1JhjOiEaWq6kXyQ3VI= github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74 h1:JwtAtbp7r/7QSyGz8mKUbYJBg2+6Cd7OjM8o/GNOcVo= github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74/go.mod h1:RmMWU37GKR2s6pgrIEB4ixgpVCt/cf7dnJv3fuH1J1c= -github.com/xanzy/go-gitlab v0.73.1 h1:UMagqUZLJdjss1SovIC+kJCH4k2AZWXl58gJd38Y/hI= -github.com/xanzy/go-gitlab v0.73.1/go.mod h1:d/a0vswScO7Agg1CZNz15Ic6SSvBG9vfw8egL99t4kA= +github.com/xanzy/go-gitlab v0.74.0 h1:Ha1cokbjn0PXy6B19t3W324dwM4AOT52fuHr7nERPrc= +github.com/xanzy/go-gitlab v0.74.0/go.mod h1:d/a0vswScO7Agg1CZNz15Ic6SSvBG9vfw8egL99t4kA= github.com/xanzy/ssh-agent v0.3.0/go.mod h1:3s9xbODqPuuhK9JV1R321M/FlMZSBvE5aY6eAcqrDh0= github.com/xanzy/ssh-agent v0.3.2 h1:eKj4SX2Fe7mui28ZgnFW5fmTz1EIr7ugo5s6wDxdHBM= github.com/xanzy/ssh-agent v0.3.2/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= @@ -683,8 +683,8 @@ golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= -golang.org/x/crypto v0.2.0 h1:BRXPfhNivWL5Yq0BGQ39a2sW6t44aODpfxkWjYdzewE= -golang.org/x/crypto v0.2.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= +golang.org/x/crypto v0.3.0 h1:a06MkbcxBrEFc0w0QIZWXrH/9cCX6KJyWbBOIwAn+7A= +golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= From b518aad5ac8434eb226d0fcf0259b77a3c099e39 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Tue, 22 Nov 2022 13:54:37 +0000 Subject: [PATCH 314/818] tests/azure: update dependencies - github.com/Azure/azure-event-hubs-go/v3 to v3.3.20 - github.com/fluxcd/helm-controller/api to v0.27.0 - github.com/fluxcd/image-automation-controller/api to v0.27.0 - github.com/fluxcd/image-reflector-controller/api to v0.23.0 - github.com/fluxcd/kustomize-controller/api to v0.31.0 - github.com/fluxcd/notification-controller/api to v0.29.0 - github.com/fluxcd/pkg/apis/meta to v0.18.0 - github.com/fluxcd/pkg/runtime to v0.24.0 - github.com/fluxcd/source-controller/api to v0.32.1 - github.com/stretchr/testify to v1.8.1 - k8s.io/api to v0.25.4 - k8s.io/apimachinery to v0.25.4 - k8s.io/client-go to v0.25.4 - sigs.k8s.io/controller-runtime to v0.13.1 Signed-off-by: Hidde Beydals --- tests/azure/azure_test.go | 4 +- tests/azure/go.mod | 96 +++---- tests/azure/go.sum | 553 +++++++++----------------------------- 3 files changed, 167 insertions(+), 486 deletions(-) diff --git a/tests/azure/azure_test.go b/tests/azure/azure_test.go index b18fae58..eeb8e0c9 100644 --- a/tests/azure/azure_test.go +++ b/tests/azure/azure_test.go @@ -51,8 +51,8 @@ import ( reflectorv1beta1 "github.com/fluxcd/image-reflector-controller/api/v1beta1" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" notiv1beta1 "github.com/fluxcd/notification-controller/api/v1beta1" + eventv1 "github.com/fluxcd/pkg/apis/event/v1beta1" "github.com/fluxcd/pkg/apis/meta" - "github.com/fluxcd/pkg/runtime/events" sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" ) @@ -862,7 +862,7 @@ func TestEventHubNotification(t *testing.T) { require.Eventually(t, func() bool { select { case eventJson := <-c: - event := &events.Event{} + event := &eventv1.Event{} err := json.Unmarshal([]byte(eventJson), event) if err != nil { t.Logf("the received event type does not match Flux format, error: %v", err) diff --git a/tests/azure/go.mod b/tests/azure/go.mod index 2dc9ba2e..79bd51cf 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -3,26 +3,26 @@ module github.com/fluxcd/flux2/tests/azure go 1.18 require ( - github.com/Azure/azure-event-hubs-go/v3 v3.3.18 - github.com/fluxcd/helm-controller/api v0.26.0 - github.com/fluxcd/image-automation-controller/api v0.26.1 - github.com/fluxcd/image-reflector-controller/api v0.22.1 - github.com/fluxcd/kustomize-controller/api v0.30.0 - github.com/fluxcd/notification-controller/api v0.28.0 - github.com/fluxcd/pkg/apis/meta v0.17.0 - github.com/fluxcd/pkg/runtime v0.22.0 - github.com/fluxcd/source-controller/api v0.31.0 + github.com/Azure/azure-event-hubs-go/v3 v3.3.20 + github.com/fluxcd/helm-controller/api v0.27.0 + github.com/fluxcd/image-automation-controller/api v0.27.0 + github.com/fluxcd/image-reflector-controller/api v0.23.0 + github.com/fluxcd/kustomize-controller/api v0.31.0 + github.com/fluxcd/notification-controller/api v0.29.0 + github.com/fluxcd/pkg/apis/event v0.2.0 + github.com/fluxcd/pkg/apis/meta v0.18.0 + github.com/fluxcd/source-controller/api v0.32.1 github.com/hashicorp/hc-install v0.4.0 github.com/hashicorp/terraform-exec v0.17.3 github.com/libgit2/git2go/v33 v33.0.9 github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 - github.com/stretchr/testify v1.8.0 + github.com/stretchr/testify v1.8.1 github.com/whilp/git-urls v1.0.0 go.uber.org/multierr v1.8.0 - k8s.io/api v0.25.3 - k8s.io/apimachinery v0.25.3 - k8s.io/client-go v0.25.3 - sigs.k8s.io/controller-runtime v0.13.0 + k8s.io/api v0.25.4 + k8s.io/apimachinery v0.25.4 + k8s.io/client-go v0.25.4 + sigs.k8s.io/controller-runtime v0.13.1 ) // Fix CVE-2022-32149 @@ -33,85 +33,73 @@ replace gopkg.in/yaml.v3 => gopkg.in/yaml.v3 v3.0.1 require ( github.com/Azure/azure-amqp-common-go/v3 v3.2.3 // indirect - github.com/Azure/azure-sdk-for-go v51.1.0+incompatible // indirect + github.com/Azure/azure-sdk-for-go v65.0.0+incompatible // indirect github.com/Azure/go-amqp v0.17.0 // indirect github.com/Azure/go-autorest v14.2.0+incompatible // indirect - github.com/Azure/go-autorest/autorest v0.11.27 // indirect - github.com/Azure/go-autorest/autorest/adal v0.9.20 // indirect + github.com/Azure/go-autorest/autorest v0.11.28 // indirect + github.com/Azure/go-autorest/autorest/adal v0.9.21 // indirect github.com/Azure/go-autorest/autorest/date v0.3.0 // indirect github.com/Azure/go-autorest/autorest/to v0.4.0 // indirect github.com/Azure/go-autorest/autorest/validation v0.3.1 // indirect github.com/Azure/go-autorest/logger v0.2.1 // indirect github.com/Azure/go-autorest/tracing v0.6.0 // indirect - github.com/PuerkitoBio/purell v1.1.1 // indirect - github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect - github.com/beorn7/perks v1.0.1 // indirect - github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/devigned/tab v0.1.1 // indirect - github.com/emicklei/go-restful/v3 v3.8.0 // indirect + github.com/emicklei/go-restful/v3 v3.10.0 // indirect github.com/evanphx/json-patch/v5 v5.6.0 // indirect github.com/fluxcd/pkg/apis/acl v0.1.0 // indirect - github.com/fluxcd/pkg/apis/kustomize v0.6.0 // indirect - github.com/fsnotify/fsnotify v1.5.4 // indirect + github.com/fluxcd/pkg/apis/kustomize v0.7.0 // indirect + github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/go-logr/logr v1.2.3 // indirect - github.com/go-logr/zapr v1.2.3 // indirect github.com/go-openapi/jsonpointer v0.19.5 // indirect - github.com/go-openapi/jsonreference v0.19.5 // indirect - github.com/go-openapi/swag v0.19.14 // indirect + github.com/go-openapi/jsonreference v0.20.0 // indirect + github.com/go-openapi/swag v0.22.3 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang-jwt/jwt/v4 v4.2.0 // indirect - github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/golang-jwt/jwt/v4 v4.4.2 // indirect github.com/golang/protobuf v1.5.2 // indirect - github.com/google/gnostic v0.5.7-v3refs // indirect + github.com/google/gnostic v0.6.9 // indirect github.com/google/go-cmp v0.5.9 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/uuid v1.3.0 // indirect github.com/hashicorp/errwrap v1.0.0 // indirect - github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect - github.com/hashicorp/go-retryablehttp v0.7.1 // indirect github.com/hashicorp/go-version v1.6.0 // indirect github.com/hashicorp/terraform-json v0.14.0 // indirect - github.com/imdario/mergo v0.3.12 // indirect + github.com/imdario/mergo v0.3.13 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/jpillora/backoff v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect - github.com/mailru/easyjson v0.7.6 // indirect - github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect - github.com/mitchellh/mapstructure v1.4.1 // indirect + github.com/mailru/easyjson v0.7.7 // indirect + github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect + github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect + github.com/onsi/ginkgo/v2 v2.5.0 // indirect + github.com/onsi/gomega v1.24.1 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/prometheus/client_golang v1.13.0 // indirect - github.com/prometheus/client_model v0.2.0 // indirect - github.com/prometheus/common v0.37.0 // indirect - github.com/prometheus/procfs v0.8.0 // indirect - github.com/spf13/pflag v1.0.5 // indirect + github.com/prometheus/client_golang v1.14.0 // indirect github.com/zclconf/go-cty v1.11.0 // indirect - go.uber.org/atomic v1.7.0 // indirect + go.uber.org/atomic v1.10.0 // indirect go.uber.org/zap v1.23.0 // indirect - golang.org/x/crypto v0.0.0-20220315160706-3147a52a75dd // indirect - golang.org/x/net v0.0.0-20220722155237-a158d28d115b // indirect - golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b // indirect - golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f // indirect - golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect + golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa // indirect + golang.org/x/net v0.2.0 // indirect + golang.org/x/oauth2 v0.2.0 // indirect + golang.org/x/sys v0.2.0 // indirect + golang.org/x/term v0.2.0 // indirect golang.org/x/text v0.4.0 // indirect - golang.org/x/time v0.0.0-20220609170525-579cf78fd858 // indirect - gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect + golang.org/x/time v0.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/protobuf v1.28.1 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/apiextensions-apiserver v0.25.3 // indirect - k8s.io/component-base v0.25.3 // indirect + k8s.io/apiextensions-apiserver v0.25.4 // indirect k8s.io/klog/v2 v2.80.1 // indirect - k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1 // indirect - k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed // indirect - sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 // indirect + k8s.io/kube-openapi v0.0.0-20221110221610-a28e98eb7c70 // indirect + k8s.io/utils v0.0.0-20221108210102-8e77b1f39fe2 // indirect + sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect sigs.k8s.io/yaml v1.3.0 // indirect ) diff --git a/tests/azure/go.sum b/tests/azure/go.sum index 2d127c8b..7ed9466a 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -1,46 +1,13 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= -cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= -cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= -cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= -cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= -cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= -cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= -cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= -cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= -cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= -cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= -cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= -cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= -cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= -cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= -cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= -cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= -cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= -cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= -cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= -cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= -cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= -cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= -cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/AdaLogics/go-fuzz-headers v0.0.0-20220903154154-e8044f6e4c72 h1:1sCHCT0xRr7UArrI1WJxsl9S8QeYdf0fmuGIl2xb7YI= github.com/Azure/azure-amqp-common-go/v3 v3.2.3 h1:uDF62mbd9bypXWi19V1bN5NZEO84JqgmI5G73ibAmrk= github.com/Azure/azure-amqp-common-go/v3 v3.2.3/go.mod h1:7rPmbSfszeovxGfc5fSAXE4ehlXQZHpMja2OtxC2Tas= -github.com/Azure/azure-event-hubs-go/v3 v3.3.18 h1:jgWDk2qmknA0UsfyzjHiW5yciOw3aBY0Oq9p/M9lz2Q= -github.com/Azure/azure-event-hubs-go/v3 v3.3.18/go.mod h1:R5H325+EzgxcBDkUerEwtor7ZQg77G7HiOTwpcuIVXY= -github.com/Azure/azure-pipeline-go v0.1.8/go.mod h1:XA1kFWRVhSK+KNFiOhfv83Fv8L9achrP7OxIzeTn1Yg= -github.com/Azure/azure-pipeline-go v0.1.9/go.mod h1:XA1kFWRVhSK+KNFiOhfv83Fv8L9achrP7OxIzeTn1Yg= -github.com/Azure/azure-sdk-for-go v51.1.0+incompatible h1:7uk6GWtUqKg6weLv2dbKnzwb0ml1Qn70AdtRccZ543w= -github.com/Azure/azure-sdk-for-go v51.1.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/azure-storage-blob-go v0.6.0/go.mod h1:oGfmITT1V6x//CswqY2gtAHND+xIP64/qL7a5QJix0Y= +github.com/Azure/azure-event-hubs-go/v3 v3.3.20 h1:LRAy00JlV5aDqd0LFXwfwFReYzl03CtH/kD91OHrT94= +github.com/Azure/azure-event-hubs-go/v3 v3.3.20/go.mod h1:5GkwDWncbqGCPjf76khiylOAD2NjkrUrLFb/S99BiA8= +github.com/Azure/azure-pipeline-go v0.2.3/go.mod h1:x841ezTBIMG6O3lAcl8ATHnsOPVl2bqk7S3ta6S6u4k= +github.com/Azure/azure-sdk-for-go v65.0.0+incompatible h1:HzKLt3kIwMm4KeJYTdx9EbjRYTySD/t8i1Ee/W5EGXw= +github.com/Azure/azure-sdk-for-go v65.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +github.com/Azure/azure-storage-blob-go v0.15.0/go.mod h1:vbjsVbX0dlxnRc4FFMPsS9BsJWPcne7GB7onqlPvz58= github.com/Azure/go-amqp v0.17.0 h1:HHXa3149nKrI0IZwyM7DRcRy5810t9ZICDutn4BYzj4= github.com/Azure/go-amqp v0.17.0/go.mod h1:9YJ3RhxRT1gquYnzpZO1vcYMMpAdJT+QEg6fwmw9Zlg= github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs= @@ -48,15 +15,15 @@ github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSW github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= github.com/Azure/go-autorest/autorest v0.9.3/go.mod h1:GsRuLYvwzLjjjRoWEIyMUaYq8GNUx2nRB378IPt/1p0= github.com/Azure/go-autorest/autorest v0.11.18/go.mod h1:dSiJPy22c3u0OtOKDNttNgqpNFY/GeWa7GH/Pz56QRA= -github.com/Azure/go-autorest/autorest v0.11.27 h1:F3R3q42aWytozkV8ihzcgMO4OA4cuqr3bNlsEuF6//A= -github.com/Azure/go-autorest/autorest v0.11.27/go.mod h1:7l8ybrIdUmGqZMTD0sRtAr8NvbHjfofbf8RSP2q7w7U= +github.com/Azure/go-autorest/autorest v0.11.28 h1:ndAExarwr5Y+GaHE6VCaY1kyS/HwwGGyuimVhWsHOEM= +github.com/Azure/go-autorest/autorest v0.11.28/go.mod h1:MrkzG3Y3AH668QyF9KRk5neJnGgmhQ6krbhR8Q5eMvA= github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= github.com/Azure/go-autorest/autorest/adal v0.8.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S6HY6e6wcHn37qQMBQlvY3lc= github.com/Azure/go-autorest/autorest/adal v0.8.1/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= github.com/Azure/go-autorest/autorest/adal v0.9.13/go.mod h1:W/MM4U6nLxnIskrw4UwWzlHfGjwUS50aOsc/I3yuU8M= github.com/Azure/go-autorest/autorest/adal v0.9.18/go.mod h1:XVVeme+LZwABT8K5Lc3hA4nAe8LDBVle26gTrguhhPQ= -github.com/Azure/go-autorest/autorest/adal v0.9.20 h1:gJ3E98kMpFB1MFqQCvA1yFab8vthOeD4VlFRQULxahg= -github.com/Azure/go-autorest/autorest/adal v0.9.20/go.mod h1:XVVeme+LZwABT8K5Lc3hA4nAe8LDBVle26gTrguhhPQ= +github.com/Azure/go-autorest/autorest/adal v0.9.21 h1:jjQnVFXPfekaqb8vIsv2G1lxshoW+oGv4MDlhRtnYZk= +github.com/Azure/go-autorest/autorest/adal v0.9.21/go.mod h1:zua7mBUaCc5YnSLKYgGJR/w5ePdMDA6H56upLsHzA9U= github.com/Azure/go-autorest/autorest/azure/auth v0.4.2 h1:iM6UAvjR97ZIeR93qTcwpKNMpV+/FTWjwEbuPD495Tk= github.com/Azure/go-autorest/autorest/azure/auth v0.4.2/go.mod h1:90gmfKdlmKgfjUpnCEpOJzsUEjrWDSLwHIG73tSXddM= github.com/Azure/go-autorest/autorest/azure/cli v0.3.1 h1:LXl088ZQlP0SBppGFsRZonW6hSvwgL5gRByMbvUbx8U= @@ -82,44 +49,30 @@ github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbt github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo= github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= github.com/Microsoft/go-winio v0.4.16 h1:FtSW/jqD+l4ba5iPBj9CODVtgfYAD8w2wS923g/cFDk= github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7 h1:YoJbenK9C67SkzkDfmQuVln04ygHj3vjZfd9FL+GmQQ= github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= -github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= -github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= -github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/acomagu/bufpipe v1.0.3 h1:fxAGrHZTgQ9w5QqVItgzwj235/uYZYgbXitB+dLupOk= github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/apparentlymart/go-textseg v1.0.0/go.mod h1:z96Txxhf3xSFMPmb5X/1W05FF/Nj9VFpLOpjS5yuumk= github.com/apparentlymart/go-textseg/v13 v13.0.0/go.mod h1:ZK2fH7c4NqDTLtiYLvIkEghdlcqw7yxLeM89kiTRPUo= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= -github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= -github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= -github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= -github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/cyphar/filepath-securejoin v0.2.3 h1:YX6ebbZCZP7VkM3scTTokDgBL2TY741X51MTk3ycuNI= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -129,44 +82,46 @@ github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZm github.com/dimchansky/utfbom v1.1.0 h1:FcM3g+nofKgUteL8dm/UpdRXNC9KmADgTpLKsu0TRo4= github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= -github.com/emicklei/go-restful/v3 v3.8.0 h1:eCZ8ulSerjdAiaNpF7GxXIE7ZCMo1moN1qX+S609eVw= -github.com/emicklei/go-restful/v3 v3.8.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= +github.com/emicklei/go-restful/v3 v3.10.0 h1:X4gma4HM7hFm6WMeAsTfqA0GOfdNoCzBIkHGoRLGXuM= +github.com/emicklei/go-restful/v3 v3.10.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg= github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/evanphx/json-patch v0.5.2/go.mod h1:ZWS5hhDbVDyob71nXKNL0+PWn6ToqBHMikGIFbs31qQ= -github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH5pOlLGNtQ5lPWQu84= github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJCLunww= github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= -github.com/fluxcd/helm-controller/api v0.26.0 h1:UCod+R1Oct2jg5cXHlVBC57Jy01lMdpl9MA+8UPogvY= -github.com/fluxcd/helm-controller/api v0.26.0/go.mod h1:Ef7OnSHwMub7Z3F+UNe8p/mblOQ2aSQjCWSRfAqG2FA= -github.com/fluxcd/image-automation-controller/api v0.26.1 h1:+9ISIrgvrqPhJcEKrhlvocu29CEwSn6kjAvsG9XlTXY= -github.com/fluxcd/image-automation-controller/api v0.26.1/go.mod h1:stNr/kLPGu3DELAN0da7NBAjDPrA3TWZn818bAxBiW8= -github.com/fluxcd/image-reflector-controller/api v0.22.1 h1:n4G1UamjfG4aV12x5lMEB4tj9DLCQvUo4KAGZMmdzVs= -github.com/fluxcd/image-reflector-controller/api v0.22.1/go.mod h1:cZ8uWRExmULpIeQtoY5FmoPFfvpgMOZbR9qjyIgB2L0= -github.com/fluxcd/kustomize-controller/api v0.30.0 h1:kOl2wGX1yqz080Ej58WHnWUCGEs6PNo+6b74FA6rJL8= -github.com/fluxcd/kustomize-controller/api v0.30.0/go.mod h1:MisuQ92Y8CR0jR9jCWStvVIYiK5PiDBEq3rfyVRr5sg= -github.com/fluxcd/notification-controller/api v0.28.0 h1:7dRUoKgVatGB235iOl0Z2PXOAoHdbpvmCPnNoy+ljnc= -github.com/fluxcd/notification-controller/api v0.28.0/go.mod h1:USY8Mz7K9uoIn0cNBqq2WTix2cbzpFi9kbs4CMBjB+w= +github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0= +github.com/fluxcd/helm-controller/api v0.27.0 h1:Ha5eCS9Xchz+TkbtUNJ6WIeUXYBR/ZXlGHAmHiqdrYY= +github.com/fluxcd/helm-controller/api v0.27.0/go.mod h1:/qCtlP718rveiAL7Mova4fGAk0aZv2qyYQn87zcUNhs= +github.com/fluxcd/image-automation-controller/api v0.27.0 h1:Dm2dY6JzTgoIGombOjl/h+ouxfmfjhjHFJQWBr8AlSE= +github.com/fluxcd/image-automation-controller/api v0.27.0/go.mod h1:XYlBpgZ8C2Kgm7SrQWIhDoNA3Hv1rLBZrI9u3s8z/Go= +github.com/fluxcd/image-reflector-controller/api v0.23.0 h1:Ww3EjZD6Xm+UebS+VdXh3UE7rkLSr/1ulIz0FLgUAf0= +github.com/fluxcd/image-reflector-controller/api v0.23.0/go.mod h1:uomyKK0ZWFOsG40wqmCJvIN8OpAiPKFteXe+cdhB/Z0= +github.com/fluxcd/kustomize-controller/api v0.31.0 h1:3KmZa/NYuC1zqc5Qp9jR3pxtkH5P/1UA513xUEJxkUY= +github.com/fluxcd/kustomize-controller/api v0.31.0/go.mod h1:t2pqIe1SMzdZIAG/aietrg3XpRXmpcubf0uxDJOryEA= +github.com/fluxcd/notification-controller/api v0.29.0 h1:aLl2HCtaiOpglaGb2iomKz2IJ77VdRW1gSB3VYjYxmM= +github.com/fluxcd/notification-controller/api v0.29.0/go.mod h1:Ve4SE6jeiGlyItvHa7/UpTPOVC6ac5K76Frv1P7hqLw= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= -github.com/fluxcd/pkg/apis/kustomize v0.6.0 h1:Afxv3Uv+xiuettzqm3sP0ceWikDZTfHdHtLv6u2nFM8= -github.com/fluxcd/pkg/apis/kustomize v0.6.0/go.mod h1:iY0zSpK6eUiPfNt/yR6g0q/wQP+wH+Ax/L7KBOx5x2M= -github.com/fluxcd/pkg/apis/meta v0.17.0 h1:Y2dfo1syHZDb9Mexjr2SWdcj1FnxnRXm015hEnhl6wU= -github.com/fluxcd/pkg/apis/meta v0.17.0/go.mod h1:GrOVzWXiu22XjLNgLLe2EBYhQPqZetes5SIADb4bmHE= -github.com/fluxcd/pkg/runtime v0.22.0 h1:4YV/An41b+OGdSWDogwFfHr22CEE/in+lBLEK0fr1yc= -github.com/fluxcd/pkg/runtime v0.22.0/go.mod h1:Cm6jIhltzXIM3CRRY6SFASDn+z2m/1yPqOWwD73c3io= -github.com/fluxcd/source-controller/api v0.31.0 h1:4PZQt2XILTUZ/2JOVGzAIpNDXjx8n10skAhuBHa9tVw= -github.com/fluxcd/source-controller/api v0.31.0/go.mod h1:XOf8hJB7jFcAKiOb8HVZcegkBeNSb4g0nxqnNjeVufg= +github.com/fluxcd/pkg/apis/event v0.2.0 h1:cmAtkZfoEaNVYegI4SFM8XstdRAil3O9AoP+8fpbR34= +github.com/fluxcd/pkg/apis/event v0.2.0/go.mod h1:OyzKqs90J+MK7rQaEOFMMCkALpPkfmxlkabgyY2wSFQ= +github.com/fluxcd/pkg/apis/kustomize v0.7.0 h1:X2htBmJ91nGYv4d93gin665MFWKNGiNwUiZ08/Zz0hY= +github.com/fluxcd/pkg/apis/kustomize v0.7.0/go.mod h1:Mu+KdktsEKWA4l/33CZdY5lB4hz51mqfcLzBZSwAqVg= +github.com/fluxcd/pkg/apis/meta v0.18.0 h1:s0LeulWcQ4DxVX6805vgDTxlA6bAYk+Lq1QHSnNdqLM= +github.com/fluxcd/pkg/apis/meta v0.18.0/go.mod h1:pYvXRFi1UKNNrGR34jw3uqOnMXw9X6dTkML8j5Z7tis= +github.com/fluxcd/source-controller/api v0.32.1 h1:PD8XEG4k5otsnusZZNEQ9XYY5udHoNgp5bX2yZHcb6k= +github.com/fluxcd/source-controller/api v0.32.1/go.mod h1:+DiGND4WSNdGkS7loPUroSarif6dHU4VlVgtLMRKCR8= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= -github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= -github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= +github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= +github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4= github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= @@ -176,59 +131,32 @@ github.com/go-git/go-billy/v5 v5.3.1/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI github.com/go-git/go-git-fixtures/v4 v4.2.1/go.mod h1:K8zd3kDUAykwTdDCr+I0per6Y6vMiRR/nnVTBtavnB0= github.com/go-git/go-git/v5 v5.4.2 h1:BXyZu9t0VkbiHtqrsvdq39UDhGJTl1h55VW6CSC4aY4= github.com/go-git/go-git/v5 v5.4.2/go.mod h1:gQ1kArt6d+n+BGd+/B/I74HwRTLhth2+zti4ihgckDc= -github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= -github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= -github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= -github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= -github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/zapr v1.2.3 h1:a9vnzlIBPQBBkeaR9IuMUfmVOrQlkoC4YfPoFkX3T7A= -github.com/go-logr/zapr v1.2.3/go.mod h1:eIauM6P8qSvTw5o2ez6UEAfGjQKrxQTl5EoK+Qa2oG4= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonreference v0.19.5 h1:1WJP/wi4OjB4iV8KVbH73rQaoialJrqv8gitZLxGLtM= -github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg= +github.com/go-openapi/jsonreference v0.20.0 h1:MYlu0sBgChmCfJxxUKZ8g1cPWFOB37YSZqewK7OKeyA= +github.com/go-openapi/jsonreference v0.20.0/go.mod h1:Ag74Ico3lPc+zR+qjn4XBUmXymS4zJbYVCZmcgkasdo= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-openapi/swag v0.19.14 h1:gm3vOOXfiuw5i9p5N9xJvfjvuofpyvLA9Wr6QfK5Fng= -github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g= +github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= -github.com/golang-jwt/jwt/v4 v4.2.0 h1:besgBTC8w8HjP6NzQdxwKH9Z5oQMZ24ThTrHp3cZ8eU= github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= +github.com/golang-jwt/jwt/v4 v4.4.2 h1:rcc4lwaZgFMCZ5jxF9ABolDcIHdBytAFgqFPbSJQAYs= +github.com/golang-jwt/jwt/v4 v4.4.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= @@ -240,19 +168,15 @@ github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/gnostic v0.5.7-v3refs h1:FhTMOKj2VhjpouxvWJAV1TL304uMlb9zcDqkl6cEI54= -github.com/google/gnostic v0.5.7-v3refs/go.mod h1:73MKFl6jIHelAJNaBGFzt3SPtZULs9dYrGFt8OiIsHQ= +github.com/google/gnostic v0.6.9 h1:ZK/5VhkoX835RikCHpSUJV9a+S3e1zLh59YnyWeBW+0= +github.com/google/gnostic v0.6.9/go.mod h1:Nm8234We1lq6iB9OmlgNv3nH91XLLVZHCDayfA3xq+E= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= @@ -260,51 +184,35 @@ github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-checkpoint v0.5.0/go.mod h1:7nfLNL10NsxqO4iWuW6tWW0HjZuDrwkBuEQsVcpCOgg= github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= -github.com/hashicorp/go-hclog v0.9.2 h1:CG6TE5H9/JXsFWJCfoIVpKFIkFe6ysEuHirp4DxCsHI= -github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= -github.com/hashicorp/go-retryablehttp v0.7.1 h1:sUiuQAnLlbvmExtFQs72iFW/HXeUn8Z1aJLQ4LJJbTQ= -github.com/hashicorp/go-retryablehttp v0.7.1/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.5.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/hc-install v0.4.0 h1:cZkRFr1WVa0Ty6x5fTvL1TuO1flul231rWkGH92oYYk= github.com/hashicorp/hc-install v0.4.0/go.mod h1:5d155H8EC5ewegao9A4PUTMNPZaq+TbOzkJJZ4vrXeI= github.com/hashicorp/terraform-exec v0.17.3 h1:MX14Kvnka/oWGmIkyuyvL6POx25ZmKrjlaclkx3eErU= github.com/hashicorp/terraform-exec v0.17.3/go.mod h1:+NELG0EqQekJzhvikkeQsOAZpsw0cv/03rbeQJqscAI= github.com/hashicorp/terraform-json v0.14.0 h1:sh9iZ1Y8IFJLx+xQiKHGud6/TSUCM0N8e17dKDpqV7s= github.com/hashicorp/terraform-json v0.14.0/go.mod h1:5A9HIWPkk4e5aeeXIBbkcOvaZbIYnAIkEyqP2pNSckM= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= +github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk= +github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= @@ -313,25 +221,15 @@ github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= -github.com/jpillora/backoff v0.0.0-20180909062703-3050d21c67d7/go.mod h1:2iMrUgbbvHEiQClaW2NsSzMyGHqN+rDFqY705q49KG0= github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351 h1:DowS9hvgyYSX4TO5NpyC606/Z4SxnNYbT+WX27or6Ck= github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= @@ -345,84 +243,59 @@ github.com/libgit2/git2go/v33 v33.0.9 h1:4ch2DJed6IhJO28BEohkUoGvxLsRzUjxljoNFJ6 github.com/libgit2/git2go/v33 v33.0.9/go.mod h1:KdpqkU+6+++4oHna/MIOgx4GCQ92IPCdpVRMRI80J+4= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.7.6 h1:8yTIVnZgCoiM1TgqoeTl+LfU5Jg6/xL3QhGQnimLYnA= -github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= +github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= -github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/mattn/go-ieproxy v0.0.1/go.mod h1:pYabZ6IHcRpFh7vIaLfK7rdcWgFEb3SFJ6/gNWuh88E= +github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= +github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 h1:YH424zrwLTlyHSH/GzLMJeu5zhYVZSx5RQxGKm1h96s= github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5/go.mod h1:PoGiBqKSQK1vIfQ+yVaFcGjDySHvym6FM1cNYnwzbrY= github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.4.1 h1:CpVNEelQCZBooIPDn+AR3NpivK/TIKU8bDxdASFVQag= -github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= +github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= -github.com/onsi/ginkgo/v2 v2.1.6 h1:Fx2POJZfKRQcM1pH49qSZiYeu319wji004qX+GDovrU= -github.com/onsi/gomega v1.20.2 h1:8uQq0zMgLEfa0vRrrBgaJF2gyW9Da9BmfGV+OyUzfkY= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/onsi/ginkgo/v2 v2.5.0 h1:TRtrvv2vdQqzkwrQ1ke6vtXf7IK34RBUJafIy1wMwls= +github.com/onsi/ginkgo/v2 v2.5.0/go.mod h1:Luc4sArBICYCS8THh8v3i3i5CuSZO+RaQRaJoeNwomw= +github.com/onsi/gomega v1.24.1 h1:KORJXNNTzJXzu4ScJWssJfJMnJ+2QJqhoQSRwNlze9E= +github.com/onsi/gomega v1.24.1/go.mod h1:3AOiACssS3/MajrniINInwbfOOtfZvplPzuRSmvt1jM= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= -github.com/prometheus/client_golang v1.13.0 h1:b71QUfeo5M8gq2+evJdTPfZhYMAU0uKPkyPJ7TPsloU= -github.com/prometheus/client_golang v1.13.0/go.mod h1:vTeo+zgvILHsnnj/39Ou/1fPN5nJFOEMgftOUOmlvYQ= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_golang v1.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw= +github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= -github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= -github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4= github.com/prometheus/common v0.37.0 h1:ccBbHCgIiT9uSoFY0vX8H3zsNR5eLt17/RQLUvn8pXE= -github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo= -github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/sebdah/goldie v1.0.0/go.mod h1:jXP4hmWywNEwZzhMuv2ccnqTSFpuq8iyQhtQdkkZBH4= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= -github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= -github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= -github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -430,8 +303,9 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5 github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/vmihailenco/msgpack v3.3.3+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk= github.com/vmihailenco/msgpack/v4 v4.3.12/go.mod h1:gborTTJjAo/GWTqqRjrLCn9pgNN+NXzzngzBKDPIqw4= github.com/vmihailenco/tagparser v0.1.1/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= @@ -439,9 +313,10 @@ github.com/whilp/git-urls v1.0.0 h1:95f6UMWN5FKW71ECsXRUd3FVYiXdrE7aX4NZKcPmIjU= github.com/whilp/git-urls v1.0.0/go.mod h1:J16SAmobsqc3Qcy98brfl5f5+e0clUvg1krgwk/qCfE= github.com/xanzy/ssh-agent v0.3.0 h1:wUMzuKtKilRgBAD1sUb8gOwwRr2FGoBVumcjoOACClI= github.com/xanzy/ssh-agent v0.3.0/go.mod h1:3s9xbODqPuuhK9JV1R321M/FlMZSBvE5aY6eAcqrDh0= -github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= +github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/zclconf/go-cty v1.2.0/go.mod h1:hOPWgoHbaTUnI5k4D2ld+GRpFJSCe6bCM7m1q/N4PQ8= @@ -449,210 +324,93 @@ github.com/zclconf/go-cty v1.10.0/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uU github.com/zclconf/go-cty v1.11.0 h1:726SxLdi2SDnjY+BStqB9J1hNp4+2WlzyXLuimibIe0= github.com/zclconf/go-cty v1.11.0/go.mod h1:s9IfD1LK5ccNMSWCVFCE2rJfHiZgi7JijgeWIMfhLvA= github.com/zclconf/go-cty-debug v0.0.0-20191215020915-b22d67c1ba0b/go.mod h1:ZRKQfBXbGkpdV6QMzT3rU1kSTAnfu1dO8dPKjYprgj8= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= -go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= +go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= +go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= -go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= go.uber.org/zap v1.23.0 h1:OjGQ5KQDEUawVHxNwQgPpiypGHOxo2mNZsOqTak4fFY= go.uber.org/zap v1.23.0/go.mod h1:D+nX8jyLsMHMYrln8A0rJjFt/T/9/bGgIhAqxv5URuY= golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3 h1:0es+/5331RGQPcXlMfP+WrnIIS6dNnNRe0WB02W0F4M= golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= -golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -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/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= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= -golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= -golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180811021610-c39426892332/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191112182307-2180aed22343/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210326060303-6b1517762897/go.mod h1:uSPa2vr4CLtc/ILN5odXGNXS6mhrKVzTaCXzk9m6W3k= -golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b h1:PxfKdU9lEEDYjdIzOtC4qFWgkU2rGHdKlKowJSMN9h0= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220725212005-46097bf591d3/go.mod h1:AaygXjzTFtRAg2ttMY5RMuhpJ3cNnI0XpyFJD1iQRSM= +golang.org/x/net v0.2.0 h1:sZfSu1wtKLGlWI4ZZayP0ck9Y73K1ynO6gqzTdBVdPU= +golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= 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= -golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b h1:clP8eMhB30EHdc0bd2Twtq6kgU7yl5ub2cQLSdrv1Dg= -golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.2.0 h1:GtQkldQ9m7yvzCL1V+LrYow3Khe0eJH0w7RbX/VbaIU= +golang.org/x/oauth2 v0.2.0/go.mod h1:Cwn6afJ8jrQwYMxQDTpISoXmXW9I6qF6vDeuuoX3Ibs= 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= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191112214154-59a1497f0cea/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210502180810-71e4cd670f79/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f h1:v4INt8xihDGvnrfjMDVXGxw9wrfxYyCjk0KbXjhR55s= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.2.0 h1:ljd4t30dBnAvMZaQCevtY0xLLD0A+bRZXbgLMLU1F/A= +golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.2.0 h1:z85xZCsEl7bi/KwbNADeBYoOP0++7W1ipu+aGnpwzRM= +golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20220609170525-579cf78fd858 h1:Dpdu/EMxGMFgq0CeYMh4fazTD2vtlZRYE7wyynxJb9U= -golang.org/x/time v0.0.0-20220609170525-579cf78fd858/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.2.0 h1:52I/1L54xyEQAYdtcSuxtiT84KGYTBGXwayxmIpNJhE= +golang.org/x/time v0.2.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -660,73 +418,23 @@ golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gomodules.xyz/jsonpatch/v2 v2.2.0 h1:4pT439QV83L+G9FkcCriY6EkpcK6r6bK+A5FBUMI7qY= -gomodules.xyz/jsonpatch/v2 v2.2.0/go.mod h1:WXp+iVDkoLQqPudfQ9GBlwB2eZ5DKOnjQZCYdOS8GPY= -google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= -google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= -google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= -google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= 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= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= 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= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -735,30 +443,26 @@ google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzi google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -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= -gopkg.in/check.v1 v1.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= @@ -766,36 +470,25 @@ gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -k8s.io/api v0.25.3 h1:Q1v5UFfYe87vi5H7NU0p4RXC26PPMT8KOpr1TLQbCMQ= -k8s.io/api v0.25.3/go.mod h1:o42gKscFrEVjHdQnyRenACrMtbuJsVdP+WVjqejfzmI= -k8s.io/apiextensions-apiserver v0.25.3 h1:bfI4KS31w2f9WM1KLGwnwuVlW3RSRPuIsfNF/3HzR0k= -k8s.io/apiextensions-apiserver v0.25.3/go.mod h1:ZJqwpCkxIx9itilmZek7JgfUAM0dnTsA48I4krPqRmo= -k8s.io/apimachinery v0.25.3 h1:7o9ium4uyUOM76t6aunP0nZuex7gDf8VGwkR5RcJnQc= -k8s.io/apimachinery v0.25.3/go.mod h1:jaF9C/iPNM1FuLl7Zuy5b9v+n35HGSh6AQ4HYRkCqwo= -k8s.io/client-go v0.25.3 h1:oB4Dyl8d6UbfDHD8Bv8evKylzs3BXzzufLiO27xuPs0= -k8s.io/client-go v0.25.3/go.mod h1:t39LPczAIMwycjcXkVc+CB+PZV69jQuNx4um5ORDjQA= -k8s.io/component-base v0.25.3 h1:UrsxciGdrCY03ULT1h/S/gXFCOPnLhUVwSyx+hM/zq4= -k8s.io/component-base v0.25.3/go.mod h1:WYoS8L+IlTZgU7rhAl5Ctpw0WdMxDfCC5dkxcEFa/TI= -k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= +k8s.io/api v0.25.4 h1:3YO8J4RtmG7elEgaWMb4HgmpS2CfY1QlaOz9nwB+ZSs= +k8s.io/api v0.25.4/go.mod h1:IG2+RzyPQLllQxnhzD8KQNEu4c4YvyDTpSMztf4A0OQ= +k8s.io/apiextensions-apiserver v0.25.4 h1:7hu9pF+xikxQuQZ7/30z/qxIPZc2J1lFElPtr7f+B6U= +k8s.io/apiextensions-apiserver v0.25.4/go.mod h1:bkSGki5YBoZWdn5pWtNIdGvDrrsRWlmnvl9a+tAw5vQ= +k8s.io/apimachinery v0.25.4 h1:CtXsuaitMESSu339tfhVXhQrPET+EiWnIY1rcurKnAc= +k8s.io/apimachinery v0.25.4/go.mod h1:jaF9C/iPNM1FuLl7Zuy5b9v+n35HGSh6AQ4HYRkCqwo= +k8s.io/client-go v0.25.4 h1:3RNRDffAkNU56M/a7gUfXaEzdhZlYhoW8dgViGy5fn8= +k8s.io/client-go v0.25.4/go.mod h1:8trHCAC83XKY0wsBIpbirZU4NTUpbuhc2JnI7OruGZw= k8s.io/klog/v2 v2.80.1 h1:atnLQ121W371wYYFawwYx1aEY2eUfs4l3J72wtgAwV4= k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= -k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1 h1:MQ8BAZPZlWk3S9K4a9NCkIFQtZShWqoha7snGixVgEA= -k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1/go.mod h1:C/N6wCaBHeBHkHUesQOQy2/MZqGgMAFPqGsGQLdbZBU= -k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed h1:jAne/RjBTyawwAy0utX5eqigAwz/lQhTmy+Hr/Cpue4= -k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= -rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/controller-runtime v0.13.0 h1:iqa5RNciy7ADWnIc8QxCbOX5FEKVR3uxVxKHRMc2WIQ= -sigs.k8s.io/controller-runtime v0.13.0/go.mod h1:Zbz+el8Yg31jubvAEyglRZGdLAjplZl+PgtYNI6WNTI= -sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 h1:iXTIw73aPyC+oRdyqqvVJuloN1p0AC/kzH07hu3NE+k= -sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= +k8s.io/kube-openapi v0.0.0-20221110221610-a28e98eb7c70 h1:zfqQc1V6/ZgGpvrOVvr62OjiqQX4lZjfznK34NQwkqw= +k8s.io/kube-openapi v0.0.0-20221110221610-a28e98eb7c70/go.mod h1:+Axhij7bCpeqhklhUTe3xmOn6bWxolyZEeyaFpjGtl4= +k8s.io/utils v0.0.0-20221108210102-8e77b1f39fe2 h1:GfD9OzL11kvZN5iArC6oTS7RTj7oJOIfnislxYlqTj8= +k8s.io/utils v0.0.0-20221108210102-8e77b1f39fe2/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +sigs.k8s.io/controller-runtime v0.13.1 h1:tUsRCSJVM1QQOOeViGeX3GMT3dQF1eePPw6sEE3xSlg= +sigs.k8s.io/controller-runtime v0.13.1/go.mod h1:Zbz+el8Yg31jubvAEyglRZGdLAjplZl+PgtYNI6WNTI= +sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= +sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E= sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= From 3b7c40bbb3ec84f0419b8cb7064932a2f47e4dac Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Tue, 22 Nov 2022 23:11:40 +0100 Subject: [PATCH 315/818] e2e: Refactor Azure test suite to use go-git Signed-off-by: Somtochi Onyekwere --- .github/workflows/e2e-azure.yaml | 5 - tests/azure/README.md | 44 +++-- tests/azure/azure_test.go | 73 +++++--- tests/azure/go.mod | 26 ++- tests/azure/go.sum | 312 +++++++++++++++++++++++++++++-- tests/azure/util_test.go | 295 +++++++++++++---------------- 6 files changed, 521 insertions(+), 234 deletions(-) diff --git a/.github/workflows/e2e-azure.yaml b/.github/workflows/e2e-azure.yaml index e4fed224..9a076efd 100644 --- a/.github/workflows/e2e-azure.yaml +++ b/.github/workflows/e2e-azure.yaml @@ -27,11 +27,6 @@ jobs: uses: actions/setup-go@c4a742cab115ed795e34d4513e2cf7d472deb55f with: go-version: 1.19.x - - name: Install libgit2 - run: | - echo "deb http://archive.ubuntu.com/ubuntu/ kinetic universe" | sudo tee -a /etc/apt/sources.list - sudo apt-get update - sudo apt-get install -y -t kinetic libgit2-dev=1.3.0+dfsg.1-3ubuntu1 - name: Setup Flux CLI run: | make build diff --git a/tests/azure/README.md b/tests/azure/README.md index c86d6a08..7a51fd5d 100644 --- a/tests/azure/README.md +++ b/tests/azure/README.md @@ -1,31 +1,35 @@ # Azure E2E -E2E tests for Azure are needed to mitigate introduction of new bugs in dependencies like libgit2. The goal is to verify that Flux integration with -Azure services are actually working now and in the future. +The test suite goal is to verify that Flux integration with Azure services are working properly. ## Architecture -The tests are run with the help of pre-configured Azure subscriptions and Azure DevOps organization. Access to those accounts are currently limited to -Flux maintainers. +The tests are run with the help of pre-configured Azure subscriptions and Azure DevOps organization. +Access to those accounts are currently limited to Flux maintainers. * [Azure Subscription](https://portal.azure.com/#@weaveworksendtoend.onmicrosoft.com/resource/subscriptions/71e8dce4-9af6-405a-8e96-425f5d3c302b/overview) * [Azure DevOps organization](https://dev.azure.com/flux-azure/) -All infrastructure is and should be created with Terraform. There are two separate Terraform states. All state should be configured to use remote -state in Azure. They should all be placed in the [same container](https://portal.azure.com/#@weaveworksendtoend.onmicrosoft.com/resource/subscriptions/71e8dce4-9af6-405a-8e96-425f5d3c302b/resourceGroups/terraform-state/providers/Microsoft.Storage/storageAccounts/terraformstate0419/containersList) +All infrastructure is and should be created with Terraform. There are two separate Terraform states. +All state should be configured to use remote state in Azure. +They should all be placed in the [same container](https://portal.azure.com/#@weaveworksendtoend.onmicrosoft.com/resource/subscriptions/71e8dce4-9af6-405a-8e96-425f5d3c302b/resourceGroups/terraform-state/providers/Microsoft.Storage/storageAccounts/terraformstate0419/containersList) but use different keys. -The [shared](./terraform/shared) Terraform creates long running cheaper infrastructure that is used across all tests. This includes a Key Vault which -contains an ssh key and Azure DevOps Personal Access Token which cannot be created automatically. It also includes an Azure Container Registry which the -forked [podinfo](https://dev.azure.com/flux-azure/e2e/_git/podinfo) repository pushes an Helm Chart and Docker image to. +The [shared](./terraform/shared) Terraform creates long running cheaper infrastructure that is used across all tests. +This includes a Key Vault which contains an ssh key and Azure DevOps Personal Access Token +which cannot be created automatically. It also includes an Azure Container Registry which the +forked [podinfo](https://dev.azure.com/flux-azure/e2e/_git/podinfo) repository pushes +a Helm Chart and Docker image to. -The [aks](./terraform/aks) Terraform creates the AKS cluster and related resources to run the tests. It creates the AKS cluster, Azure DevOps -repositories, Key Vault Key for Sops, and Azure EventHub. The resources should be created and destroyed before and after every test run. Currently, +The [aks](./terraform/aks) Terraform creates the AKS cluster and related resources to run the tests. +It creates the AKS cluster, Azure DevOps repositories, Key Vault Key for Sops, and Azure EventHub. +The resources should be created and destroyed before and after every test run. Currently, the same state is reused between runs to make sure that resources are left running after each test run. ## Tests -Each test run is initiated by running `terraform apply` on the aks Terraform, it does this by using the library [terraform-exec](github.com/hashicorp/terraform-exec). -It then reads the output of the Terraform to get credentials and ssh keys, this means that a lot of the communication with the Azure API is offset to +Each test run is initiated by running `terraform apply` on the aks Terraform, it does this by using the library +[terraform-exec](https://github.com/hashicorp/terraform-exec). It then reads the output of the Terraform to get +credentials and ssh keys, this means that a lot of the communication with the Azure API is offset to Terraform instead of requiring it to be implemented in the test. The following tests are currently implemented: @@ -41,11 +45,13 @@ The following tests are currently implemented: ## Give User Access -There are a couple of steps required when adding a new user to get access to the Azure portal and Azure DevOps. To begin with add the new user to -[Azure AD](https://portal.azure.com/#blade/Microsoft_AAD_IAM/UsersManagementMenuBlade/MsGraphUsers), and add the user to the [Azure AD group -flux-contributors](https://portal.azure.com/#blade/Microsoft_AAD_IAM/GroupDetailsMenuBlade/Overview/groupId/24e0f3f6-6555-4d3d-99ab-414c869cab5d). The -new users should now go through the invite process, and be able to sign in to both the Azure Portal and Azure DevOps. +There are a couple of steps required when adding a new user to get access to the Azure portal and Azure DevOps. +To begin with add the new user to[Azure AD](https://portal.azure.com/#blade/Microsoft_AAD_IAM/UsersManagementMenuBlade/MsGraphUsers), +and add the user to the [Azure AD group flux-contributors](https://portal.azure.com/#blade/Microsoft_AAD_IAM/GroupDetailsMenuBlade/Overview/groupId/24e0f3f6-6555-4d3d-99ab-414c869cab5d). +The new users should now go through the invite process, and be able to sign in to both the Azure Portal and Azure DevOps. -After the new user has signed into Azure DevOps you will need to modify the users permissions. This cannot be done before the user has signed in a -first time. In the [organization users page](https://dev.azure.com/flux-azure/_settings/users) chose "Manage User" and set the "Access Level" to basic +After the new user has signed into Azure DevOps you will need to modify the users permissions. +This cannot be done before the user has signed in a first time. +In the [organization users page](https://dev.azure.com/flux-azure/_settings/users) +chose "Manage User" and set the "Access Level" to basic and make the user "Project Contributor" of the "e2e" Azure DevOps project. diff --git a/tests/azure/azure_test.go b/tests/azure/azure_test.go index eeb8e0c9..1397dd02 100644 --- a/tests/azure/azure_test.go +++ b/tests/azure/azure_test.go @@ -22,6 +22,7 @@ import ( b64 "encoding/base64" "encoding/json" "fmt" + "io" "log" "os" "path/filepath" @@ -35,7 +36,6 @@ import ( "github.com/hashicorp/hc-install/product" "github.com/hashicorp/hc-install/src" "github.com/hashicorp/terraform-exec/tfexec" - git2go "github.com/libgit2/git2go/v33" "github.com/microsoft/azure-devops-go-api/azuredevops" "github.com/microsoft/azure-devops-go-api/azuredevops/git" "github.com/stretchr/testify/require" @@ -47,6 +47,8 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" + extgogit "github.com/fluxcd/go-git/v5" + "github.com/fluxcd/go-git/v5/plumbing" automationv1beta1 "github.com/fluxcd/image-automation-controller/api/v1beta1" reflectorv1beta1 "github.com/fluxcd/image-reflector-controller/api/v1beta1" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" @@ -269,8 +271,10 @@ func TestAzureDevOpsCloning(t *testing.T) { } t.Log("Creating application sources") - repo, repoDir, err := getRepository(cfg.applicationRepository.http, branchName, true, cfg.azdoPat) + repo, _, err := getRepository(cfg.applicationRepository.http, branchName, true, cfg.azdoPat) require.NoError(t, err) + + files := make(map[string]io.Reader) for _, tt := range tests { manifest := fmt.Sprintf(` apiVersion: v1 @@ -279,12 +283,11 @@ func TestAzureDevOpsCloning(t *testing.T) { name: foobar namespace: %s `, tt.name) - err = runCommand(ctx, repoDir, fmt.Sprintf("mkdir -p ./cloning-test/%s", tt.name)) - require.NoError(t, err) - err = runCommand(ctx, repoDir, fmt.Sprintf("echo '%s' > ./cloning-test/%s/configmap.yaml", manifest, tt.name)) - require.NoError(t, err) + name := fmt.Sprintf("./cloning-test/%s/configmap.yaml", tt.name) + files[name] = strings.NewReader(manifest) } - err = commitAndPushAll(repo, branchName, cfg.azdoPat) + + err = commitAndPushAll(repo, files, branchName) require.NoError(t, err) err = createTagAndPush(repo, branchName, tagName, cfg.azdoPat) require.NoError(t, err) @@ -335,8 +338,7 @@ func TestAzureDevOpsCloning(t *testing.T) { source := &sourcev1.GitRepository{ObjectMeta: metav1.ObjectMeta{Name: tt.name, Namespace: namespace.Name}} _, err = controllerutil.CreateOrUpdate(ctx, cfg.kubeClient, source, func() error { source.Spec = sourcev1.GitRepositorySpec{ - GitImplementation: sourcev1.LibGit2Implementation, - Reference: ref, + Reference: ref, SecretRef: &meta.LocalObjectReference{ Name: gitSecret.Name, }, @@ -413,11 +415,11 @@ func TestImageRepositoryACR(t *testing.T) { initialDelaySeconds: 5 timeoutSeconds: 5`, name, cfg.acr.url, oldVersion, name) - repo, repoDir, err := getRepository(repoUrl, name, true, cfg.azdoPat) + repo, _, err := getRepository(repoUrl, name, true, cfg.azdoPat) require.NoError(t, err) - err = addFile(repoDir, "podinfo.yaml", manifest) - require.NoError(t, err) - err = commitAndPushAll(repo, name, cfg.azdoPat) + files := make(map[string]io.Reader) + files["podinfo.yaml"] = strings.NewReader(manifest) + err = commitAndPushAll(repo, files, name) require.NoError(t, err) err = setupNamespace(ctx, cfg.kubeClient, repoUrl, cfg.azdoPat, name) @@ -535,19 +537,25 @@ func TestKeyVaultSops(t *testing.T) { secretYaml := `apiVersion: v1 kind: Secret metadata: - name: "test" - namespace: "key-vault-sops" + name: "test" + namespace: "key-vault-sops" stringData: - foo: "bar"` + foo: "bar"` repo, tmpDir, err := getRepository(repoUrl, name, true, cfg.azdoPat) - err = runCommand(ctx, tmpDir, "mkdir -p ./key-vault-sops") + err = runCommand(ctx, 5*time.Minute, tmpDir, "mkdir -p ./key-vault-sops") + require.NoError(t, err) + err = runCommand(ctx, 5*time.Minute, tmpDir, fmt.Sprintf("echo \"%s\" > ./key-vault-sops/secret.enc.yaml", secretYaml)) require.NoError(t, err) - err = runCommand(ctx, tmpDir, fmt.Sprintf("echo \"%s\" > ./key-vault-sops/secret.enc.yaml", secretYaml)) + err = runCommand(ctx, 5*time.Minute, tmpDir, fmt.Sprintf("sops --encrypt --encrypted-regex '^(data|stringData)$' --azure-kv %s --in-place ./key-vault-sops/secret.enc.yaml", cfg.sopsId)) require.NoError(t, err) - err = runCommand(ctx, tmpDir, fmt.Sprintf("sops --encrypt --encrypted-regex '^(data|stringData)$' --azure-kv %s --in-place ./key-vault-sops/secret.enc.yaml", cfg.sopsId)) + + r, err := os.Open(fmt.Sprintf("%s/key-vault-sops/secret.enc.yaml", tmpDir)) require.NoError(t, err) - err = commitAndPushAll(repo, name, cfg.azdoPat) + + files := make(map[string]io.Reader) + files["./key-vault-sops/secret.enc.yaml"] = r + err = commitAndPushAll(repo, files, name) require.NoError(t, err) err = setupNamespace(ctx, cfg.kubeClient, repoUrl, cfg.azdoPat, name) @@ -557,7 +565,6 @@ stringData: require.Eventually(t, func() bool { _, err = controllerutil.CreateOrUpdate(ctx, cfg.kubeClient, source, func() error { source.Spec = sourcev1.GitRepositorySpec{ - GitImplementation: sourcev1.LibGit2Implementation, Reference: &sourcev1.GitRepositoryRef{ Branch: name, }, @@ -620,11 +627,13 @@ func TestAzureDevOpsCommitStatus(t *testing.T) { namespace: %s `, name) - repo, repoDir, err := getRepository(repoUrl, name, true, cfg.azdoPat) - require.NoError(t, err) - err = addFile(repoDir, "configmap.yaml", manifest) + c, _, err := getRepository(repoUrl, name, true, cfg.azdoPat) require.NoError(t, err) - err = commitAndPushAll(repo, name, cfg.azdoPat) + + files := make(map[string]io.Reader) + files["configmap.yaml"] = strings.NewReader(manifest) + + err = commitAndPushAll(c, files, name) require.NoError(t, err) err = setupNamespace(ctx, cfg.kubeClient, repoUrl, cfg.azdoPat, name) @@ -717,10 +726,14 @@ func TestAzureDevOpsCommitStatus(t *testing.T) { orgUrl := fmt.Sprintf("%s://%s/%v", u.Scheme, u.Host, comp[0]) project := comp[1] repoId := comp[3] - branch, err := repo.LookupBranch(name, git2go.BranchLocal) + + repo, err := extgogit.PlainOpen(c.Path()) + require.NoError(t, err) + + ref, err := repo.Reference(plumbing.NewBranchReferenceName(name), false) require.NoError(t, err) - commit, err := repo.LookupCommit(branch.Target()) - rev := commit.Id().String() + + rev := ref.Hash().String() connection := azuredevops.NewPatConnection(orgUrl, cfg.azdoPat) client, err := git.NewClient(ctx, connection) require.NoError(t, err) @@ -772,8 +785,10 @@ func TestEventHubNotification(t *testing.T) { repo, repoDir, err := getRepository(repoUrl, name, true, cfg.azdoPat) require.NoError(t, err) err = addFile(repoDir, "configmap.yaml", manifest) + files := make(map[string]io.Reader) + files["configmap.yaml"] = strings.NewReader(manifest) require.NoError(t, err) - err = commitAndPushAll(repo, name, cfg.azdoPat) + err = commitAndPushAll(repo, files, name) require.NoError(t, err) err = setupNamespace(ctx, cfg.kubeClient, repoUrl, cfg.azdoPat, name) diff --git a/tests/azure/go.mod b/tests/azure/go.mod index 79bd51cf..8a2959c5 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -4,6 +4,7 @@ go 1.18 require ( github.com/Azure/azure-event-hubs-go/v3 v3.3.20 + github.com/fluxcd/go-git/v5 v5.0.0-20221104190732-329fd6659b10 github.com/fluxcd/helm-controller/api v0.27.0 github.com/fluxcd/image-automation-controller/api v0.27.0 github.com/fluxcd/image-reflector-controller/api v0.23.0 @@ -11,10 +12,11 @@ require ( github.com/fluxcd/notification-controller/api v0.29.0 github.com/fluxcd/pkg/apis/event v0.2.0 github.com/fluxcd/pkg/apis/meta v0.18.0 + github.com/fluxcd/pkg/git v0.7.0 + github.com/fluxcd/pkg/git/gogit v0.2.0 github.com/fluxcd/source-controller/api v0.32.1 github.com/hashicorp/hc-install v0.4.0 github.com/hashicorp/terraform-exec v0.17.3 - github.com/libgit2/git2go/v33 v33.0.9 github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 github.com/stretchr/testify v1.8.1 github.com/whilp/git-urls v1.0.0 @@ -43,13 +45,24 @@ require ( github.com/Azure/go-autorest/autorest/validation v0.3.1 // indirect github.com/Azure/go-autorest/logger v0.2.1 // indirect github.com/Azure/go-autorest/tracing v0.6.0 // indirect + github.com/Masterminds/semver/v3 v3.1.1 // indirect + github.com/Microsoft/go-winio v0.5.2 // indirect + github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4 // indirect + github.com/acomagu/bufpipe v1.0.3 // indirect + github.com/cloudflare/circl v1.3.0 // indirect + github.com/cyphar/filepath-securejoin v0.2.3 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/devigned/tab v0.1.1 // indirect github.com/emicklei/go-restful/v3 v3.10.0 // indirect + github.com/emirpasic/gods v1.18.1 // indirect github.com/evanphx/json-patch/v5 v5.6.0 // indirect github.com/fluxcd/pkg/apis/acl v0.1.0 // indirect github.com/fluxcd/pkg/apis/kustomize v0.7.0 // indirect + github.com/fluxcd/pkg/ssh v0.7.0 // indirect + github.com/fluxcd/pkg/version v0.2.0 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect + github.com/go-git/gcfg v1.5.0 // indirect + github.com/go-git/go-billy/v5 v5.3.1 // indirect github.com/go-logr/logr v1.2.3 // indirect github.com/go-openapi/jsonpointer v0.19.5 // indirect github.com/go-openapi/jsonreference v0.20.0 // indirect @@ -66,9 +79,11 @@ require ( github.com/hashicorp/go-version v1.6.0 // indirect github.com/hashicorp/terraform-json v0.14.0 // indirect github.com/imdario/mergo v0.3.13 // indirect + github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/jpillora/backoff v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect + github.com/kevinburke/ssh_config v1.2.0 // indirect github.com/mailru/easyjson v0.7.7 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect @@ -76,16 +91,18 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/onsi/ginkgo/v2 v2.5.0 // indirect - github.com/onsi/gomega v1.24.1 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_golang v1.14.0 // indirect + github.com/sergi/go-diff v1.2.0 // indirect + github.com/skeema/knownhosts v1.1.0 // indirect + github.com/xanzy/ssh-agent v0.3.2 // indirect github.com/zclconf/go-cty v1.11.0 // indirect go.uber.org/atomic v1.10.0 // indirect go.uber.org/zap v1.23.0 // indirect - golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa // indirect + golang.org/x/crypto v0.2.0 // indirect golang.org/x/net v0.2.0 // indirect - golang.org/x/oauth2 v0.2.0 // indirect + golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b // indirect golang.org/x/sys v0.2.0 // indirect golang.org/x/term v0.2.0 // indirect golang.org/x/text v0.4.0 // indirect @@ -93,6 +110,7 @@ require ( google.golang.org/appengine v1.6.7 // indirect google.golang.org/protobuf v1.28.1 // indirect gopkg.in/inf.v0 v0.9.1 // indirect + gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect k8s.io/apiextensions-apiserver v0.25.4 // indirect diff --git a/tests/azure/go.sum b/tests/azure/go.sum index 7ed9466a..f56c4676 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -1,5 +1,36 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= +cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= +cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= +cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= +cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= +cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= +cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= +cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= +cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= +cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= +cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= +cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= +cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/Azure/azure-amqp-common-go/v3 v3.2.3 h1:uDF62mbd9bypXWi19V1bN5NZEO84JqgmI5G73ibAmrk= github.com/Azure/azure-amqp-common-go/v3 v3.2.3/go.mod h1:7rPmbSfszeovxGfc5fSAXE4ehlXQZHpMja2OtxC2Tas= github.com/Azure/azure-event-hubs-go/v3 v3.3.20 h1:LRAy00JlV5aDqd0LFXwfwFReYzl03CtH/kD91OHrT94= @@ -49,30 +80,47 @@ github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbt github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo= github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030IGemrRc= +github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= -github.com/Microsoft/go-winio v0.4.16 h1:FtSW/jqD+l4ba5iPBj9CODVtgfYAD8w2wS923g/cFDk= github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= +github.com/Microsoft/go-winio v0.5.2 h1:a9IhgEQBCUEk6QCdml9CiJGhAws+YwffDHEMp1VMrpA= +github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7 h1:YoJbenK9C67SkzkDfmQuVln04ygHj3vjZfd9FL+GmQQ= github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= +github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4 h1:ra2OtmuW0AE5csawV4YXMNGNQQXvLRps3z2Z59OPO+I= +github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4/go.mod h1:UBYPn8k0D56RtnR8RFQMjmh4KrZzWJ5o7Z9SYjossQ8= github.com/acomagu/bufpipe v1.0.3 h1:fxAGrHZTgQ9w5QqVItgzwj235/uYZYgbXitB+dLupOk= github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= +github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= +github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/apparentlymart/go-textseg v1.0.0/go.mod h1:z96Txxhf3xSFMPmb5X/1W05FF/Nj9VFpLOpjS5yuumk= github.com/apparentlymart/go-textseg/v13 v13.0.0/go.mod h1:ZK2fH7c4NqDTLtiYLvIkEghdlcqw7yxLeM89kiTRPUo= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= +github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= 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= github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cloudflare/circl v1.1.0/go.mod h1:prBCrKB9DV4poKZY1l9zBXg2QJY7mvgRvtMxxK7fi4I= +github.com/cloudflare/circl v1.3.0 h1:Anq00jxDtoyX3+aCaYUZ0vXC5r4k4epberfWGDXV1zE= +github.com/cloudflare/circl v1.3.0/go.mod h1:+CauBF6R70Jqcyl8N2hC8pAXYbWkGIezuSbuGLtRhnw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/cyphar/filepath-securejoin v0.2.3 h1:YX6ebbZCZP7VkM3scTTokDgBL2TY741X51MTk3ycuNI= +github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -84,8 +132,9 @@ github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQ github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/emicklei/go-restful/v3 v3.10.0 h1:X4gma4HM7hFm6WMeAsTfqA0GOfdNoCzBIkHGoRLGXuM= github.com/emicklei/go-restful/v3 v3.10.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= -github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg= github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= +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= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= @@ -95,6 +144,9 @@ github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7 github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJCLunww= github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0= +github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= +github.com/fluxcd/go-git/v5 v5.0.0-20221104190732-329fd6659b10 h1:au798417R1iWtgcgKe3Dg495mexQmuxelL+NebAtexE= +github.com/fluxcd/go-git/v5 v5.0.0-20221104190732-329fd6659b10/go.mod h1:w8bjt1WtWUxMEmlifjBJP9bK9QAG1Vw1Lw7RzchJFNk= github.com/fluxcd/helm-controller/api v0.27.0 h1:Ha5eCS9Xchz+TkbtUNJ6WIeUXYBR/ZXlGHAmHiqdrYY= github.com/fluxcd/helm-controller/api v0.27.0/go.mod h1:/qCtlP718rveiAL7Mova4fGAk0aZv2qyYQn87zcUNhs= github.com/fluxcd/image-automation-controller/api v0.27.0 h1:Dm2dY6JzTgoIGombOjl/h+ouxfmfjhjHFJQWBr8AlSE= @@ -113,6 +165,15 @@ github.com/fluxcd/pkg/apis/kustomize v0.7.0 h1:X2htBmJ91nGYv4d93gin665MFWKNGiNwU github.com/fluxcd/pkg/apis/kustomize v0.7.0/go.mod h1:Mu+KdktsEKWA4l/33CZdY5lB4hz51mqfcLzBZSwAqVg= github.com/fluxcd/pkg/apis/meta v0.18.0 h1:s0LeulWcQ4DxVX6805vgDTxlA6bAYk+Lq1QHSnNdqLM= github.com/fluxcd/pkg/apis/meta v0.18.0/go.mod h1:pYvXRFi1UKNNrGR34jw3uqOnMXw9X6dTkML8j5Z7tis= +github.com/fluxcd/pkg/git v0.7.0 h1:sQHRpFMcOzEdqlyGMjFv2LKMdcoE5xeUr2UcRrsLRG8= +github.com/fluxcd/pkg/git v0.7.0/go.mod h1:3deiLPws4DSQ3hqwtQd7Dt66GXTN/4RcT/yHAljXaHo= +github.com/fluxcd/pkg/git/gogit v0.2.0 h1:vhFzk2Pky4tDZwisx8+26YZumRDPxERnkV8l2dbLSoo= +github.com/fluxcd/pkg/git/gogit v0.2.0/go.mod h1:d1RIwl6DVdU8/2dBIhw6n7GNokIKqs+b9cKc/8tz7ew= +github.com/fluxcd/pkg/gittestserver v0.8.0 h1:YrYe63KScKlLxx0GAiQthx2XqHDx0vKitIIx4JnDtIo= +github.com/fluxcd/pkg/ssh v0.7.0 h1:FX5ky8SU9dYwbM6zEIDR3TSveLF01iyS95CtB5Ykpno= +github.com/fluxcd/pkg/ssh v0.7.0/go.mod h1:tCVZJI8jPOL0XCInJOrYGKapWA/zZCzqPtpiYUSQxww= +github.com/fluxcd/pkg/version v0.2.0 h1:jG22c59Bsv6vL51N7Bqn8tjHArYOXrjbIkGArlIrv5w= +github.com/fluxcd/pkg/version v0.2.0/go.mod h1:umN1VAOV0sB1JDVwb8eXZzuuqIAEku+y+vcCVBBUIf0= github.com/fluxcd/source-controller/api v0.32.1 h1:PD8XEG4k5otsnusZZNEQ9XYY5udHoNgp5bX2yZHcb6k= github.com/fluxcd/source-controller/api v0.32.1/go.mod h1:+DiGND4WSNdGkS7loPUroSarif6dHU4VlVgtLMRKCR8= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= @@ -123,14 +184,21 @@ github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4 github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= +github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY= +github.com/gliderlabs/ssh v0.3.5/go.mod h1:8XB4KraRrX39qHhT6yxPsHedjA08I/uBVwj4xC+/+z4= github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4= github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= github.com/go-git/go-billy/v5 v5.2.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= github.com/go-git/go-billy/v5 v5.3.1 h1:CPiOUAzKtMRvolEKw+bG1PLRpT7D3LIs3/3ey4Aiu34= github.com/go-git/go-billy/v5 v5.3.1/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= github.com/go-git/go-git-fixtures/v4 v4.2.1/go.mod h1:K8zd3kDUAykwTdDCr+I0per6Y6vMiRR/nnVTBtavnB0= +github.com/go-git/go-git-fixtures/v4 v4.3.1 h1:y5z6dd3qi8Hl+stezc8p3JxDkoTRqMAlKnXHuzrfjTQ= +github.com/go-git/go-git-fixtures/v4 v4.3.1/go.mod h1:8LHG1a3SRW71ettAD/jW13h8c6AqjVSeL11RAdgaqpo= github.com/go-git/go-git/v5 v5.4.2 h1:BXyZu9t0VkbiHtqrsvdq39UDhGJTl1h55VW6CSC4aY4= github.com/go-git/go-git/v5 v5.4.2/go.mod h1:gQ1kArt6d+n+BGd+/B/I74HwRTLhth2+zti4ihgckDc= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= @@ -143,6 +211,7 @@ github.com/go-openapi/jsonreference v0.20.0/go.mod h1:Ag74Ico3lPc+zR+qjn4XBUmXym github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g= github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= +github.com/gofrs/uuid v4.2.0+incompatible h1:yyYWMnhkhrKwwr8gAOcOCYxOOscHgDS9yZgBrnJfGa0= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= @@ -150,13 +219,23 @@ github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzw github.com/golang-jwt/jwt/v4 v4.4.2 h1:rcc4lwaZgFMCZ5jxF9ABolDcIHdBytAFgqFPbSJQAYs= github.com/golang-jwt/jwt/v4 v4.4.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= @@ -168,12 +247,15 @@ github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/gnostic v0.6.9 h1:ZK/5VhkoX835RikCHpSUJV9a+S3e1zLh59YnyWeBW+0= github.com/google/gnostic v0.6.9/go.mod h1:Nm8234We1lq6iB9OmlgNv3nH91XLLVZHCDayfA3xq+E= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= @@ -184,13 +266,23 @@ github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= -github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -204,12 +296,15 @@ github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/b github.com/hashicorp/go-version v1.5.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/hc-install v0.4.0 h1:cZkRFr1WVa0Ty6x5fTvL1TuO1flul231rWkGH92oYYk= github.com/hashicorp/hc-install v0.4.0/go.mod h1:5d155H8EC5ewegao9A4PUTMNPZaq+TbOzkJJZ4vrXeI= github.com/hashicorp/terraform-exec v0.17.3 h1:MX14Kvnka/oWGmIkyuyvL6POx25ZmKrjlaclkx3eErU= github.com/hashicorp/terraform-exec v0.17.3/go.mod h1:+NELG0EqQekJzhvikkeQsOAZpsw0cv/03rbeQJqscAI= github.com/hashicorp/terraform-json v0.14.0 h1:sh9iZ1Y8IFJLx+xQiKHGud6/TSUCM0N8e17dKDpqV7s= github.com/hashicorp/terraform-json v0.14.0/go.mod h1:5A9HIWPkk4e5aeeXIBbkcOvaZbIYnAIkEyqP2pNSckM= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk= github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= @@ -225,8 +320,11 @@ github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2E github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= -github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351 h1:DowS9hvgyYSX4TO5NpyC606/Z4SxnNYbT+WX27or6Ck= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= +github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= +github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= @@ -239,12 +337,11 @@ github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= -github.com/libgit2/git2go/v33 v33.0.9 h1:4ch2DJed6IhJO28BEohkUoGvxLsRzUjxljoNFJ6/O78= -github.com/libgit2/git2go/v33 v33.0.9/go.mod h1:KdpqkU+6+++4oHna/MIOgx4GCQ92IPCdpVRMRI80J+4= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/matryer/is v1.2.0 h1:92UTHpy8CDwaJ08GqLDzhhuixiBUUD1p3AU6PHddz4A= github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= github.com/mattn/go-ieproxy v0.0.1/go.mod h1:pYabZ6IHcRpFh7vIaLfK7rdcWgFEb3SFJ6/gNWuh88E= github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= @@ -270,7 +367,6 @@ github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo/v2 v2.5.0 h1:TRtrvv2vdQqzkwrQ1ke6vtXf7IK34RBUJafIy1wMwls= github.com/onsi/ginkgo/v2 v2.5.0/go.mod h1:Luc4sArBICYCS8THh8v3i3i5CuSZO+RaQRaJoeNwomw= github.com/onsi/gomega v1.24.1 h1:KORJXNNTzJXzu4ScJWssJfJMnJ+2QJqhoQSRwNlze9E= -github.com/onsi/gomega v1.24.1/go.mod h1:3AOiACssS3/MajrniINInwbfOOtfZvplPzuRSmvt1jM= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -283,12 +379,17 @@ github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvq github.com/prometheus/common v0.37.0 h1:ccBbHCgIiT9uSoFY0vX8H3zsNR5eLt17/RQLUvn8pXE= github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/sebdah/goldie v1.0.0/go.mod h1:jXP4hmWywNEwZzhMuv2ccnqTSFpuq8iyQhtQdkkZBH4= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= +github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= +github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= +github.com/skeema/knownhosts v1.1.0 h1:Wvr9V0MxhjRbl3f9nMnKnFfiWTJmtECJ9Njkea3ysW0= +github.com/skeema/knownhosts v1.1.0/go.mod h1:sKFq3RD6/TKZkSWn8boUbDC7Qkgcv+8XXijpFO6roag= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= @@ -311,12 +412,15 @@ github.com/vmihailenco/msgpack/v4 v4.3.12/go.mod h1:gborTTJjAo/GWTqqRjrLCn9pgNN+ github.com/vmihailenco/tagparser v0.1.1/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= github.com/whilp/git-urls v1.0.0 h1:95f6UMWN5FKW71ECsXRUd3FVYiXdrE7aX4NZKcPmIjU= github.com/whilp/git-urls v1.0.0/go.mod h1:J16SAmobsqc3Qcy98brfl5f5+e0clUvg1krgwk/qCfE= -github.com/xanzy/ssh-agent v0.3.0 h1:wUMzuKtKilRgBAD1sUb8gOwwRr2FGoBVumcjoOACClI= github.com/xanzy/ssh-agent v0.3.0/go.mod h1:3s9xbODqPuuhK9JV1R321M/FlMZSBvE5aY6eAcqrDh0= +github.com/xanzy/ssh-agent v0.3.2 h1:eKj4SX2Fe7mui28ZgnFW5fmTz1EIr7ugo5s6wDxdHBM= +github.com/xanzy/ssh-agent v0.3.2/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= +github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/zclconf/go-cty v1.2.0/go.mod h1:hOPWgoHbaTUnI5k4D2ld+GRpFJSCe6bCM7m1q/N4PQ8= @@ -324,6 +428,11 @@ github.com/zclconf/go-cty v1.10.0/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uU github.com/zclconf/go-cty v1.11.0 h1:726SxLdi2SDnjY+BStqB9J1hNp4+2WlzyXLuimibIe0= github.com/zclconf/go-cty v1.11.0/go.mod h1:s9IfD1LK5ccNMSWCVFCE2rJfHiZgi7JijgeWIMfhLvA= github.com/zclconf/go-cty-debug v0.0.0-20191215020915-b22d67c1ba0b/go.mod h1:ZRKQfBXbGkpdV6QMzT3rU1kSTAnfu1dO8dPKjYprgj8= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= @@ -335,9 +444,33 @@ go.uber.org/zap v1.23.0/go.mod h1:D+nX8jyLsMHMYrln8A0rJjFt/T/9/bGgIhAqxv5URuY= golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3 h1:0es+/5331RGQPcXlMfP+WrnIIS6dNnNRe0WB02W0F4M= golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +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/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= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= @@ -347,11 +480,26 @@ golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191112182307-2180aed22343/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210326060303-6b1517762897/go.mod h1:uSPa2vr4CLtc/ILN5odXGNXS6mhrKVzTaCXzk9m6W3k= @@ -359,32 +507,62 @@ golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96b golang.org/x/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220725212005-46097bf591d3/go.mod h1:AaygXjzTFtRAg2ttMY5RMuhpJ3cNnI0XpyFJD1iQRSM= +golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/net v0.2.0 h1:sZfSu1wtKLGlWI4ZZayP0ck9Y73K1ynO6gqzTdBVdPU= golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= 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= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.2.0 h1:GtQkldQ9m7yvzCL1V+LrYow3Khe0eJH0w7RbX/VbaIU= -golang.org/x/oauth2 v0.2.0/go.mod h1:Cwn6afJ8jrQwYMxQDTpISoXmXW9I6qF6vDeuuoX3Ibs= +golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b h1:clP8eMhB30EHdc0bd2Twtq6kgU7yl5ub2cQLSdrv1Dg= +golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= 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= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191112214154-59a1497f0cea/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -392,25 +570,70 @@ golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210502180810-71e4cd670f79/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0 h1:ljd4t30dBnAvMZaQCevtY0xLLD0A+bRZXbgLMLU1F/A= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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= +golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0 h1:z85xZCsEl7bi/KwbNADeBYoOP0++7W1ipu+aGnpwzRM= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.2.0 h1:52I/1L54xyEQAYdtcSuxtiT84KGYTBGXwayxmIpNJhE= golang.org/x/time v0.2.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -418,20 +641,73 @@ golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gomodules.xyz/jsonpatch/v2 v2.2.0 h1:4pT439QV83L+G9FkcCriY6EkpcK6r6bK+A5FBUMI7qY= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= +google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= +google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= 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= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= @@ -443,6 +719,7 @@ google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzi google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= @@ -455,6 +732,7 @@ gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= @@ -470,7 +748,12 @@ gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= k8s.io/api v0.25.4 h1:3YO8J4RtmG7elEgaWMb4HgmpS2CfY1QlaOz9nwB+ZSs= k8s.io/api v0.25.4/go.mod h1:IG2+RzyPQLllQxnhzD8KQNEu4c4YvyDTpSMztf4A0OQ= k8s.io/apiextensions-apiserver v0.25.4 h1:7hu9pF+xikxQuQZ7/30z/qxIPZc2J1lFElPtr7f+B6U= @@ -485,6 +768,9 @@ k8s.io/kube-openapi v0.0.0-20221110221610-a28e98eb7c70 h1:zfqQc1V6/ZgGpvrOVvr62O k8s.io/kube-openapi v0.0.0-20221110221610-a28e98eb7c70/go.mod h1:+Axhij7bCpeqhklhUTe3xmOn6bWxolyZEeyaFpjGtl4= k8s.io/utils v0.0.0-20221108210102-8e77b1f39fe2 h1:GfD9OzL11kvZN5iArC6oTS7RTj7oJOIfnislxYlqTj8= k8s.io/utils v0.0.0-20221108210102-8e77b1f39fe2/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/controller-runtime v0.13.1 h1:tUsRCSJVM1QQOOeViGeX3GMT3dQF1eePPw6sEE3xSlg= sigs.k8s.io/controller-runtime v0.13.1/go.mod h1:Zbz+el8Yg31jubvAEyglRZGdLAjplZl+PgtYNI6WNTI= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= diff --git a/tests/azure/util_test.go b/tests/azure/util_test.go index 2be4ecf1..55ae7be8 100644 --- a/tests/azure/util_test.go +++ b/tests/azure/util_test.go @@ -19,13 +19,13 @@ package test import ( "context" "fmt" + "io" "os" "os/exec" "path/filepath" + "strings" "time" - git2go "github.com/libgit2/git2go/v33" - corev1 "k8s.io/api/core/v1" apimeta "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -35,12 +35,21 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" + extgogit "github.com/fluxcd/go-git/v5" + gitconfig "github.com/fluxcd/go-git/v5/config" + "github.com/fluxcd/go-git/v5/plumbing" + "github.com/fluxcd/go-git/v5/plumbing/object" + "github.com/fluxcd/go-git/v5/plumbing/transport/http" helmv2beta1 "github.com/fluxcd/helm-controller/api/v2beta1" automationv1beta1 "github.com/fluxcd/image-automation-controller/api/v1beta1" reflectorv1beta1 "github.com/fluxcd/image-reflector-controller/api/v1beta1" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" notiv1beta1 "github.com/fluxcd/notification-controller/api/v1beta1" "github.com/fluxcd/pkg/apis/meta" + "github.com/fluxcd/pkg/git" + "github.com/fluxcd/pkg/git/gogit" + "github.com/fluxcd/pkg/git/repository" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" ) @@ -103,17 +112,7 @@ func installFlux(ctx context.Context, kubeClient client.Client, kubeconfigPath, _, err := controllerutil.CreateOrUpdate(ctx, cfg.kubeClient, &namespace, func() error { return nil }) - httpsCredentials := &corev1.Secret{ObjectMeta: metav1.ObjectMeta{Name: "https-credentials", Namespace: "flux-system"}} - _, err = controllerutil.CreateOrUpdate(ctx, kubeClient, httpsCredentials, func() error { - httpsCredentials.StringData = map[string]string{ - "username": "git", - "password": azdoPat, - } - return nil - }) - if err != nil { - return err - } + azureSp := &corev1.Secret{ObjectMeta: metav1.ObjectMeta{Name: "azure-sp", Namespace: "flux-system"}} _, err = controllerutil.CreateOrUpdate(ctx, kubeClient, azureSp, func() error { azureSp.StringData = map[string]string{ @@ -127,83 +126,68 @@ func installFlux(ctx context.Context, kubeClient client.Client, kubeconfigPath, return err } - // Install Flux and push files to git repository - repo, repoDir, err := getRepository(repoUrl, defaultBranch, true, azdoPat) - if err != nil { - return err - } - err = runCommand(ctx, repoDir, "mkdir -p ./clusters/e2e/flux-system") - if err != nil { - return err - } - err = runCommand(ctx, repoDir, "flux install --components-extra=\"image-reflector-controller,image-automation-controller\" --export > ./clusters/e2e/flux-system/gotk-components.yaml") - if err != nil { - return err - } - err = runCommand(ctx, repoDir, fmt.Sprintf("flux create source git flux-system --git-implementation=libgit2 --url=%s --branch=%s --secret-ref=https-credentials --interval=1m --export > ./clusters/e2e/flux-system/gotk-sync.yaml", repoUrl, defaultBranch)) - if err != nil { - return err - } - err = runCommand(ctx, repoDir, "flux create kustomization flux-system --source=flux-system --path='./clusters/e2e' --prune=true --interval=1m --export >> ./clusters/e2e/flux-system/gotk-sync.yaml") + //// Install Flux and push files to git repository + repo, _, err := getRepository(repoUrl, defaultBranch, true, azdoPat) if err != nil { return err } + kustomizeYaml := ` - resources: - - gotk-components.yaml - - gotk-sync.yaml - patchesStrategicMerge: - - |- - apiVersion: apps/v1 - kind: Deployment - metadata: - name: kustomize-controller - namespace: flux-system +resources: + - gotk-components.yaml + - gotk-sync.yaml +patchesStrategicMerge: + - |- + apiVersion: apps/v1 + kind: Deployment + metadata: + name: kustomize-controller + namespace: flux-system + spec: + template: spec: - template: - spec: - containers: - - name: manager - envFrom: - - secretRef: - name: azure-sp - - |- - apiVersion: apps/v1 - kind: Deployment - metadata: - name: source-controller - namespace: flux-system + containers: + - name: manager + envFrom: + - secretRef: + name: azure-sp + - |- + apiVersion: apps/v1 + kind: Deployment + metadata: + name: source-controller + namespace: flux-system + spec: + template: spec: - template: - spec: - containers: - - name: manager - envFrom: - - secretRef: - name: azure-sp - ` - err = runCommand(ctx, repoDir, fmt.Sprintf("echo \"%s\" > ./clusters/e2e/flux-system/kustomization.yaml", kustomizeYaml)) - if err != nil { - return err - } - err = commitAndPushAll(repo, defaultBranch, azdoPat) - if err != nil { - return err - } - // Need to apply CRDs first to make sure that the sync resources will apply properly - err = runCommand(ctx, repoDir, fmt.Sprintf("kubectl --kubeconfig=%s apply -f ./clusters/e2e/flux-system/gotk-components.yaml", kubeconfigPath)) + containers: + - name: manager + envFrom: + - secretRef: + name: azure-sp +` + + files := make(map[string]io.Reader) + files["./clusters/e2e/flux-system/kustomization.yaml"] = strings.NewReader(kustomizeYaml) + files["./clusters/e2e/flux-system/gotk-components.yaml"] = strings.NewReader("") + files["./clusters/e2e/flux-system/gotk-sync.yaml"] = strings.NewReader("") + err = commitAndPushAll(repo, files, defaultBranch) if err != nil { return err } - err = runCommand(ctx, repoDir, fmt.Sprintf("kubectl --kubeconfig=%s apply -k ./clusters/e2e/flux-system/", kubeconfigPath)) - if err != nil { + + bootstrapCmd := fmt.Sprintf("flux bootstrap git --url=%s --password=%s --kubeconfig=%s"+ + " --token-auth --path=clusters/e2e --components-extra image-reflector-controller,image-automation-controller", + repoUrl, azdoPat, kubeconfigPath) + if err := runCommand(context.Background(), 10*time.Minute, "./", bootstrapCmd); err != nil { return err } + return nil } -func runCommand(ctx context.Context, dir, command string) error { - timeoutCtx, cancel := context.WithTimeout(ctx, 5*time.Minute) +func runCommand(ctx context.Context, timeout time.Duration, dir, command string) error { + timeoutCtx, cancel := context.WithTimeout(ctx, timeout) defer cancel() cmd := exec.CommandContext(timeoutCtx, "bash", "-c", command) cmd.Dir = dir @@ -302,7 +286,7 @@ func setupNamespace(ctx context.Context, kubeClient client.Client, repoUrl, pass return nil } -func getRepository(url, branchName string, overrideBranch bool, password string) (*git2go.Repository, string, error) { +func getRepository(repoURL, branchName string, overrideBranch bool, password string) (*gogit.Client, string, error) { checkoutBranch := defaultBranch if overrideBranch == false { checkoutBranch = branchName @@ -312,37 +296,27 @@ func getRepository(url, branchName string, overrideBranch bool, password string) if err != nil { return nil, "", err } - repo, err := git2go.Clone(url, tmpDir, &git2go.CloneOptions{ - FetchOptions: git2go.FetchOptions{ - RemoteCallbacks: git2go.RemoteCallbacks{ - CredentialsCallback: credentialCallback("git", password), - }, - }, - CheckoutBranch: checkoutBranch, - CheckoutOptions: git2go.CheckoutOpts{ - Strategy: git2go.CheckoutSafe, - }, + c, err := gogit.NewClient(tmpDir, &git.AuthOptions{ + Transport: git.HTTPS, + Username: "git", + Password: password, }) if err != nil { return nil, "", err } - // Nothing to do further if correct branch is checked out - if checkoutBranch == branchName { - return repo, tmpDir, nil - } - head, err := repo.Head() - if err != nil { - return nil, "", err - } - headCommit, err := repo.LookupCommit(head.Target()) - if err != nil { - return nil, "", err - } - _, err = repo.CreateBranch(branchName, headCommit, true) + + _, err = c.Clone(context.Background(), repoURL, repository.CloneOptions{ + CheckoutStrategy: repository.CheckoutStrategy{ + Branch: checkoutBranch, + }, + }) + + err = c.SwitchBranch(context.Background(), branchName) if err != nil { return nil, "", err } - return repo, tmpDir, nil + + return c, tmpDir, nil } func addFile(dir, path, content string) error { @@ -353,114 +327,107 @@ func addFile(dir, path, content string) error { return nil } -func commitAndPushAll(repo *git2go.Repository, branchName, password string) error { - idx, err := repo.Index() +func commitAndPushAll(client *gogit.Client, files map[string]io.Reader, branchName string) error { + repo, err := extgogit.PlainOpen(client.Path()) if err != nil { return err } - err = idx.AddAll([]string{}, git2go.IndexAddDefault, nil) - if err != nil { - return err - } - treeId, err := idx.WriteTree() - if err != nil { - return err - } - err = idx.Write() - if err != nil { - return err - } - tree, err := repo.LookupTree(treeId) - if err != nil { - return err - } - branch, err := repo.LookupBranch(branchName, git2go.BranchLocal) - if err != nil { - return err - } - commitTarget, err := repo.LookupCommit(branch.Target()) + + wt, err := repo.Worktree() if err != nil { return err } - sig := &git2go.Signature{ - Name: "git", - Email: "test@example.com", - When: time.Now(), - } - _, err = repo.CreateCommit(fmt.Sprintf("refs/heads/%s", branchName), sig, sig, "add file", tree, commitTarget) + + err = wt.Checkout(&extgogit.CheckoutOptions{ + Branch: plumbing.NewBranchReferenceName(branchName), + Force: true, + }) if err != nil { return err } - origin, err := repo.Remotes.Lookup("origin") + + f := repository.WithFiles(files) + _, err = client.Commit(git.Commit{ + Author: git.Signature{ + Name: "git", + Email: "test@example.com", + When: time.Now(), + }, + Message: "add file", + }, f) + if err != nil { return err } - err = origin.Push([]string{fmt.Sprintf("+refs/heads/%s", branchName)}, &git2go.PushOptions{ - RemoteCallbacks: git2go.RemoteCallbacks{ - CredentialsCallback: credentialCallback("git", password), - }, - }) + + err = client.Push(context.Background()) if err != nil { return err } + return nil } -func createTagAndPush(repo *git2go.Repository, branchName, tag, password string) error { - branch, err := repo.LookupBranch(branchName, git2go.BranchAll) +func createTagAndPush(client *gogit.Client, branchName, newTag, password string) error { + repo, err := extgogit.PlainOpen(client.Path()) if err != nil { return err } - commit, err := repo.LookupCommit(branch.Target()) + + ref, err := repo.Reference(plumbing.NewBranchReferenceName(branchName), false) if err != nil { return err } - tags, err := repo.Tags.List() + tags, err := repo.TagObjects() if err != nil { return err } - for _, existingTag := range tags { - if existingTag == tag { - err = repo.Tags.Remove(tag) + + err = tags.ForEach(func(tag *object.Tag) error { + if tag.Name == newTag { + err = repo.DeleteTag(tag.Name) if err != nil { return err } } + + return nil + }) + if err != nil { + return err } - sig := &git2go.Signature{ + sig := &object.Signature{ Name: "git", Email: "test@example.com", When: time.Now(), } - _, err = repo.Tags.Create(tag, commit, sig, "create tag") + + _, err = repo.CreateTag(newTag, ref.Hash(), &extgogit.CreateTagOptions{ + Tagger: sig, + Message: "create tag", + }) if err != nil { return err } - origin, err := repo.Remotes.Lookup("origin") - if err != nil { - return err + + auth := &http.BasicAuth{ + Username: "git", + Password: password, } - err = origin.Push([]string{fmt.Sprintf("+refs/tags/%s", tag)}, &git2go.PushOptions{ - RemoteCallbacks: git2go.RemoteCallbacks{ - CredentialsCallback: credentialCallback("git", password), - }, - }) - if err != nil { + + po := &extgogit.PushOptions{ + RemoteName: "origin", + Progress: os.Stdout, + RefSpecs: []gitconfig.RefSpec{gitconfig.RefSpec("refs/tags/*:refs/tags/*")}, + Auth: auth, + } + if err := repo.Push(po); err != nil { return err } - return nil -} -func credentialCallback(username, password string) git2go.CredentialsCallback { - return func(url string, usernameFromURL string, allowedTypes git2go.CredType) (*git2go.Cred, error) { - cred, err := git2go.NewCredentialUserpassPlaintext(username, password) - if err != nil { - return nil, err - } - return cred, nil - } + return nil } func getTestManifest(namespace string) string { From c01023d8f8c1049d918d407a7c36e59067aa4853 Mon Sep 17 00:00:00 2001 From: Boris Kreitchman Date: Tue, 11 Oct 2022 13:59:56 +0300 Subject: [PATCH 316/818] Process getVersion error in bootstrap Signed-off-by: Boris Kreitchman --- cmd/flux/bootstrap_bitbucket_server.go | 4 +++- cmd/flux/bootstrap_git.go | 4 +++- cmd/flux/bootstrap_github.go | 4 +++- cmd/flux/bootstrap_gitlab.go | 4 +++- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/cmd/flux/bootstrap_bitbucket_server.go b/cmd/flux/bootstrap_bitbucket_server.go index 4b827498..baefbd75 100644 --- a/cmd/flux/bootstrap_bitbucket_server.go +++ b/cmd/flux/bootstrap_bitbucket_server.go @@ -128,7 +128,9 @@ func bootstrapBServerCmdRun(cmd *cobra.Command, args []string) error { } // Manifest base - if ver, err := getVersion(bootstrapArgs.version); err == nil { + if ver, err := getVersion(bootstrapArgs.version); err != nil { + return err + } else { bootstrapArgs.version = ver } manifestsBase, err := buildEmbeddedManifestBase() diff --git a/cmd/flux/bootstrap_git.go b/cmd/flux/bootstrap_git.go index f5909788..bd21fd4c 100644 --- a/cmd/flux/bootstrap_git.go +++ b/cmd/flux/bootstrap_git.go @@ -147,7 +147,9 @@ func bootstrapGitCmdRun(cmd *cobra.Command, args []string) error { } // Manifest base - if ver, err := getVersion(bootstrapArgs.version); err == nil { + if ver, err := getVersion(bootstrapArgs.version); err != nil { + return err + } else { bootstrapArgs.version = ver } manifestsBase, err := buildEmbeddedManifestBase() diff --git a/cmd/flux/bootstrap_github.go b/cmd/flux/bootstrap_github.go index faca1c7b..cc843407 100644 --- a/cmd/flux/bootstrap_github.go +++ b/cmd/flux/bootstrap_github.go @@ -132,7 +132,9 @@ func bootstrapGitHubCmdRun(cmd *cobra.Command, args []string) error { } // Manifest base - if ver, err := getVersion(bootstrapArgs.version); err == nil { + if ver, err := getVersion(bootstrapArgs.version); err != nil { + return err + } else { bootstrapArgs.version = ver } manifestsBase, err := buildEmbeddedManifestBase() diff --git a/cmd/flux/bootstrap_gitlab.go b/cmd/flux/bootstrap_gitlab.go index 55f5dc58..ea71f4af 100644 --- a/cmd/flux/bootstrap_gitlab.go +++ b/cmd/flux/bootstrap_gitlab.go @@ -136,7 +136,9 @@ func bootstrapGitLabCmdRun(cmd *cobra.Command, args []string) error { } // Manifest base - if ver, err := getVersion(bootstrapArgs.version); err == nil { + if ver, err := getVersion(bootstrapArgs.version); err != nil { + return err + } else { bootstrapArgs.version = ver } manifestsBase, err := buildEmbeddedManifestBase() From b3b50cf503857a9224d6c390996890d3814b28bb Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Fri, 25 Nov 2022 12:41:44 +0200 Subject: [PATCH 317/818] Set notification-controller image to GHCR Signed-off-by: Stefan Prodan --- manifests/install/kustomization.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/manifests/install/kustomization.yaml b/manifests/install/kustomization.yaml index 0e6ba62a..edce8ca8 100644 --- a/manifests/install/kustomization.yaml +++ b/manifests/install/kustomization.yaml @@ -20,6 +20,8 @@ images: newName: ghcr.io/fluxcd/kustomize-controller - name: fluxcd/helm-controller newName: ghcr.io/fluxcd/helm-controller + - name: fluxcd/notification-controller + newName: ghcr.io/fluxcd/notification-controller - name: fluxcd/image-reflector-controller newName: ghcr.io/fluxcd/image-reflector-controller - name: fluxcd/image-automation-controller From 9db661ae63989d6e6f3388d97c6325165cc2cd66 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 28 Nov 2022 01:15:01 +0000 Subject: [PATCH 318/818] Bump peter-evans/create-pull-request from 4.2.0 to 4.2.2 Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 4.2.0 to 4.2.2. - [Release notes](https://github.com/peter-evans/create-pull-request/releases) - [Commits](https://github.com/peter-evans/create-pull-request/compare/b4d51739f96fca8047ad065eccef63442d8e99f7...331d02c7e2104af23ad5974d4d5cbc58a3e6dc77) --- updated-dependencies: - dependency-name: peter-evans/create-pull-request dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/update.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/update.yaml b/.github/workflows/update.yaml index 8a309eea..59037deb 100644 --- a/.github/workflows/update.yaml +++ b/.github/workflows/update.yaml @@ -75,7 +75,7 @@ jobs: - name: Create Pull Request id: cpr - uses: peter-evans/create-pull-request@b4d51739f96fca8047ad065eccef63442d8e99f7 # v4 + uses: peter-evans/create-pull-request@331d02c7e2104af23ad5974d4d5cbc58a3e6dc77 # v4 with: token: ${{ secrets.BOT_GITHUB_TOKEN }} commit-message: | From f89525f8bd94476021096976b4bd83edf1113323 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 5 Dec 2022 00:43:23 +0000 Subject: [PATCH 319/818] Bump github/codeql-action from 2.1.33 to 2.1.35 Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2.1.33 to 2.1.35. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/678fc3afe258fb2e0cdc165ccf77b85719de7b3c...b2a92eb56d8cb930006a1c6ed86b0782dd8a4297) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/scan.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index 6ea9b6ae..594bce33 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -45,7 +45,7 @@ jobs: with: args: --sarif-file-output=snyk.sarif - name: Upload result to GitHub Code Scanning - uses: github/codeql-action/upload-sarif@678fc3afe258fb2e0cdc165ccf77b85719de7b3c # v2 + uses: github/codeql-action/upload-sarif@b2a92eb56d8cb930006a1c6ed86b0782dd8a4297 # v2 with: sarif_file: snyk.sarif @@ -62,10 +62,10 @@ jobs: with: go-version: 1.19.x - name: Initialize CodeQL - uses: github/codeql-action/init@678fc3afe258fb2e0cdc165ccf77b85719de7b3c # v2 + uses: github/codeql-action/init@b2a92eb56d8cb930006a1c6ed86b0782dd8a4297 # v2 with: languages: go - name: Autobuild - uses: github/codeql-action/autobuild@678fc3afe258fb2e0cdc165ccf77b85719de7b3c # v2 + uses: github/codeql-action/autobuild@b2a92eb56d8cb930006a1c6ed86b0782dd8a4297 # v2 - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@678fc3afe258fb2e0cdc165ccf77b85719de7b3c # v2 + uses: github/codeql-action/analyze@b2a92eb56d8cb930006a1c6ed86b0782dd8a4297 # v2 From 2c35880cbfc1fe6d37b560cb0d0e248a7dd818e4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 5 Dec 2022 06:46:50 +0000 Subject: [PATCH 320/818] Bump actions/setup-go from 3.3.1 to 3.4.0 Bumps [actions/setup-go](https://github.com/actions/setup-go) from 3.3.1 to 3.4.0. - [Release notes](https://github.com/actions/setup-go/releases) - [Commits](https://github.com/actions/setup-go/compare/c4a742cab115ed795e34d4513e2cf7d472deb55f...d0a58c1c4d2b25278816e339b944508c875f3613) --- updated-dependencies: - dependency-name: actions/setup-go dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/e2e-arm64.yaml | 2 +- .github/workflows/e2e-azure.yaml | 2 +- .github/workflows/e2e-bootstrap.yaml | 2 +- .github/workflows/e2e.yaml | 2 +- .github/workflows/release.yaml | 2 +- .github/workflows/scan.yaml | 2 +- .github/workflows/update.yaml | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/e2e-arm64.yaml b/.github/workflows/e2e-arm64.yaml index 3621304e..1bdb6846 100644 --- a/.github/workflows/e2e-arm64.yaml +++ b/.github/workflows/e2e-arm64.yaml @@ -21,7 +21,7 @@ jobs: - name: Checkout uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 - name: Setup Go - uses: actions/setup-go@c4a742cab115ed795e34d4513e2cf7d472deb55f + uses: actions/setup-go@d0a58c1c4d2b25278816e339b944508c875f3613 with: go-version: 1.19.x - name: Prepare diff --git a/.github/workflows/e2e-azure.yaml b/.github/workflows/e2e-azure.yaml index 9a076efd..216b75ea 100644 --- a/.github/workflows/e2e-azure.yaml +++ b/.github/workflows/e2e-azure.yaml @@ -24,7 +24,7 @@ jobs: restore-keys: | ${{ runner.os }}-go1.18- - name: Setup Go - uses: actions/setup-go@c4a742cab115ed795e34d4513e2cf7d472deb55f + uses: actions/setup-go@d0a58c1c4d2b25278816e339b944508c875f3613 with: go-version: 1.19.x - name: Setup Flux CLI diff --git a/.github/workflows/e2e-bootstrap.yaml b/.github/workflows/e2e-bootstrap.yaml index 7f301de9..47f56bf2 100644 --- a/.github/workflows/e2e-bootstrap.yaml +++ b/.github/workflows/e2e-bootstrap.yaml @@ -25,7 +25,7 @@ jobs: restore-keys: | ${{ runner.os }}-go1.18- - name: Setup Go - uses: actions/setup-go@c4a742cab115ed795e34d4513e2cf7d472deb55f + uses: actions/setup-go@d0a58c1c4d2b25278816e339b944508c875f3613 with: go-version: 1.19.x - name: Setup Kubernetes diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index 23e4cc6b..137f1447 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -29,7 +29,7 @@ jobs: restore-keys: | ${{ runner.os }}-go1.18- - name: Setup Go - uses: actions/setup-go@c4a742cab115ed795e34d4513e2cf7d472deb55f + uses: actions/setup-go@d0a58c1c4d2b25278816e339b944508c875f3613 with: go-version: 1.19.x - name: Setup Kubernetes diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index e07aa45e..b0451c64 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -20,7 +20,7 @@ jobs: - name: Unshallow run: git fetch --prune --unshallow - name: Setup Go - uses: actions/setup-go@c4a742cab115ed795e34d4513e2cf7d472deb55f + uses: actions/setup-go@d0a58c1c4d2b25278816e339b944508c875f3613 with: go-version: 1.19.x - name: Setup QEMU diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index 594bce33..17ad0dd8 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -58,7 +58,7 @@ jobs: - name: Checkout repository uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 - name: Set up Go - uses: actions/setup-go@c4a742cab115ed795e34d4513e2cf7d472deb55f + uses: actions/setup-go@d0a58c1c4d2b25278816e339b944508c875f3613 with: go-version: 1.19.x - name: Initialize CodeQL diff --git a/.github/workflows/update.yaml b/.github/workflows/update.yaml index 59037deb..885deb1e 100644 --- a/.github/workflows/update.yaml +++ b/.github/workflows/update.yaml @@ -20,7 +20,7 @@ jobs: - name: Check out code uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 - name: Setup Go - uses: actions/setup-go@c4a742cab115ed795e34d4513e2cf7d472deb55f + uses: actions/setup-go@d0a58c1c4d2b25278816e339b944508c875f3613 with: go-version: 1.19.x - name: Update component versions From 882fb3560147b86f0eee3f74705cd543049e4762 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 5 Dec 2022 07:47:09 +0000 Subject: [PATCH 321/818] Bump snyk/actions Bumps [snyk/actions](https://github.com/snyk/actions) from a8dd587d8a94f5663fa3d67d51abd0cc66aff244 to 1cc9026f51d822442cb4b872d8d7ead8cc69a018. - [Release notes](https://github.com/snyk/actions/releases) - [Commits](https://github.com/snyk/actions/compare/a8dd587d8a94f5663fa3d67d51abd0cc66aff244...1cc9026f51d822442cb4b872d8d7ead8cc69a018) --- updated-dependencies: - dependency-name: snyk/actions dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- .github/workflows/scan.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index 17ad0dd8..345a7504 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -38,7 +38,7 @@ jobs: run: | make cmd/flux/.manifests.done - name: Run Snyk to check for vulnerabilities - uses: snyk/actions/golang@a8dd587d8a94f5663fa3d67d51abd0cc66aff244 # v0.3.0 + uses: snyk/actions/golang@1cc9026f51d822442cb4b872d8d7ead8cc69a018 # v0.3.0 continue-on-error: true env: SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }} From 4eda5a7ccd4947c1248b97d9a6d849e03072c04e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 5 Dec 2022 08:08:45 +0000 Subject: [PATCH 322/818] Bump peter-evans/create-pull-request from 4.2.2 to 4.2.3 Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 4.2.2 to 4.2.3. - [Release notes](https://github.com/peter-evans/create-pull-request/releases) - [Commits](https://github.com/peter-evans/create-pull-request/compare/331d02c7e2104af23ad5974d4d5cbc58a3e6dc77...2b011faafdcbc9ceb11414d64d0573f37c774b04) --- updated-dependencies: - dependency-name: peter-evans/create-pull-request dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/update.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/update.yaml b/.github/workflows/update.yaml index 885deb1e..648822ed 100644 --- a/.github/workflows/update.yaml +++ b/.github/workflows/update.yaml @@ -75,7 +75,7 @@ jobs: - name: Create Pull Request id: cpr - uses: peter-evans/create-pull-request@331d02c7e2104af23ad5974d4d5cbc58a3e6dc77 # v4 + uses: peter-evans/create-pull-request@2b011faafdcbc9ceb11414d64d0573f37c774b04 # v4 with: token: ${{ secrets.BOT_GITHUB_TOKEN }} commit-message: | From 75b5b0fd3cf7340dfa78addd54ade18dc9269822 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Dec 2022 00:29:53 +0000 Subject: [PATCH 323/818] Bump github/codeql-action from 2.1.35 to 2.1.36 Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2.1.35 to 2.1.36. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/b2a92eb56d8cb930006a1c6ed86b0782dd8a4297...a669cc5936cc5e1b6a362ec1ff9e410dc570d190) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/scan.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index 345a7504..44dcaba2 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -45,7 +45,7 @@ jobs: with: args: --sarif-file-output=snyk.sarif - name: Upload result to GitHub Code Scanning - uses: github/codeql-action/upload-sarif@b2a92eb56d8cb930006a1c6ed86b0782dd8a4297 # v2 + uses: github/codeql-action/upload-sarif@a669cc5936cc5e1b6a362ec1ff9e410dc570d190 # v2 with: sarif_file: snyk.sarif @@ -62,10 +62,10 @@ jobs: with: go-version: 1.19.x - name: Initialize CodeQL - uses: github/codeql-action/init@b2a92eb56d8cb930006a1c6ed86b0782dd8a4297 # v2 + uses: github/codeql-action/init@a669cc5936cc5e1b6a362ec1ff9e410dc570d190 # v2 with: languages: go - name: Autobuild - uses: github/codeql-action/autobuild@b2a92eb56d8cb930006a1c6ed86b0782dd8a4297 # v2 + uses: github/codeql-action/autobuild@a669cc5936cc5e1b6a362ec1ff9e410dc570d190 # v2 - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@b2a92eb56d8cb930006a1c6ed86b0782dd8a4297 # v2 + uses: github/codeql-action/analyze@a669cc5936cc5e1b6a362ec1ff9e410dc570d190 # v2 From 28feb8b1d73892f128f19ae06229514388e8fee8 Mon Sep 17 00:00:00 2001 From: Sanskar Jaiswal Date: Tue, 6 Dec 2022 17:36:28 +0530 Subject: [PATCH 324/818] bootstrap: fallback to default known_hosts Use default known_hosts and ssh configuration when no private key file is provided while bootstraping using ssh. Signed-off-by: Sanskar Jaiswal --- cmd/flux/bootstrap_bitbucket_server.go | 5 +++-- cmd/flux/bootstrap_git.go | 18 +++++++++--------- cmd/flux/bootstrap_github.go | 5 +++-- cmd/flux/bootstrap_gitlab.go | 5 +++-- go.mod | 5 +++-- go.sum | 12 +++++++----- 6 files changed, 28 insertions(+), 22 deletions(-) diff --git a/cmd/flux/bootstrap_bitbucket_server.go b/cmd/flux/bootstrap_bitbucket_server.go index baefbd75..b656db4d 100644 --- a/cmd/flux/bootstrap_bitbucket_server.go +++ b/cmd/flux/bootstrap_bitbucket_server.go @@ -174,14 +174,15 @@ func bootstrapBServerCmdRun(cmd *cobra.Command, args []string) error { } defer os.RemoveAll(tmpDir) + clientOpts := []gogit.ClientOption{gogit.WithDiskStorage(), gogit.WithFallbackToDefaultKnownHosts()} gitClient, err := gogit.NewClient(tmpDir, &git.AuthOptions{ Transport: git.HTTPS, Username: user, Password: bitbucketToken, CAFile: caBundle, - }) + }, clientOpts...) if err != nil { - return err + return fmt.Errorf("failed to create a Git client: %w", err) } // Install manifest config diff --git a/cmd/flux/bootstrap_git.go b/cmd/flux/bootstrap_git.go index bd21fd4c..d7677e6e 100644 --- a/cmd/flux/bootstrap_git.go +++ b/cmd/flux/bootstrap_git.go @@ -178,7 +178,7 @@ func bootstrapGitCmdRun(cmd *cobra.Command, args []string) error { return fmt.Errorf("failed to create authentication options for %s: %w", repositoryURL.String(), err) } - clientOpts := []gogit.ClientOption{gogit.WithDiskStorage()} + clientOpts := []gogit.ClientOption{gogit.WithDiskStorage(), gogit.WithFallbackToDefaultKnownHosts()} if gitArgs.insecureHttpAllowed { clientOpts = append(clientOpts, gogit.WithInsecureCredentialsOverHTTP()) } @@ -325,6 +325,11 @@ func getAuthOpts(u *url.URL, caBundle []byte) (*git.AuthOptions, error) { CAFile: caBundle, }, nil case "ssh": + authOpts := &git.AuthOptions{ + Transport: git.SSH, + Username: u.User.Username(), + Password: gitArgs.password, + } if bootstrapArgs.privateKeyFile != "" { pk, err := os.ReadFile(bootstrapArgs.privateKeyFile) if err != nil { @@ -334,15 +339,10 @@ func getAuthOpts(u *url.URL, caBundle []byte) (*git.AuthOptions, error) { if err != nil { return nil, err } - return &git.AuthOptions{ - Transport: git.SSH, - Username: u.User.Username(), - Password: gitArgs.password, - Identity: pk, - KnownHosts: kh, - }, nil + authOpts.Identity = pk + authOpts.KnownHosts = kh } - return nil, nil + return authOpts, nil default: return nil, fmt.Errorf("scheme %q is not supported", u.Scheme) } diff --git a/cmd/flux/bootstrap_github.go b/cmd/flux/bootstrap_github.go index cc843407..f789aae8 100644 --- a/cmd/flux/bootstrap_github.go +++ b/cmd/flux/bootstrap_github.go @@ -169,14 +169,15 @@ func bootstrapGitHubCmdRun(cmd *cobra.Command, args []string) error { } defer os.RemoveAll(tmpDir) + clientOpts := []gogit.ClientOption{gogit.WithDiskStorage(), gogit.WithFallbackToDefaultKnownHosts()} gitClient, err := gogit.NewClient(tmpDir, &git.AuthOptions{ Transport: git.HTTPS, Username: githubArgs.owner, Password: ghToken, CAFile: caBundle, - }) + }, clientOpts...) if err != nil { - return err + return fmt.Errorf("failed to create a Git client: %w", err) } // Install manifest config diff --git a/cmd/flux/bootstrap_gitlab.go b/cmd/flux/bootstrap_gitlab.go index ea71f4af..7266545a 100644 --- a/cmd/flux/bootstrap_gitlab.go +++ b/cmd/flux/bootstrap_gitlab.go @@ -181,14 +181,15 @@ func bootstrapGitLabCmdRun(cmd *cobra.Command, args []string) error { } defer os.RemoveAll(tmpDir) + clientOpts := []gogit.ClientOption{gogit.WithDiskStorage(), gogit.WithFallbackToDefaultKnownHosts()} gitClient, err := gogit.NewClient(tmpDir, &git.AuthOptions{ Transport: git.HTTPS, Username: gitlabArgs.owner, Password: glToken, CAFile: caBundle, - }) + }, clientOpts...) if err != nil { - return err + return fmt.Errorf("failed to create a Git client: %w", err) } // Install manifest config diff --git a/go.mod b/go.mod index ea3fb607..50c28376 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/cyphar/filepath-securejoin v0.2.3 github.com/distribution/distribution/v3 v3.0.0-20221119093643-85d4039064cc github.com/fluxcd/go-git-providers v0.11.0 - github.com/fluxcd/go-git/v5 v5.0.0-20221104190732-329fd6659b10 + github.com/fluxcd/go-git/v5 v5.0.0-20221206140629-ec778c2c37df github.com/fluxcd/helm-controller/api v0.27.0 github.com/fluxcd/image-automation-controller/api v0.27.0 github.com/fluxcd/image-reflector-controller/api v0.23.0 @@ -16,7 +16,7 @@ require ( github.com/fluxcd/notification-controller/api v0.29.0 github.com/fluxcd/pkg/apis/meta v0.18.0 github.com/fluxcd/pkg/git v0.7.0 - github.com/fluxcd/pkg/git/gogit v0.2.0 + github.com/fluxcd/pkg/git/gogit v0.3.1 github.com/fluxcd/pkg/kustomize v0.10.0 github.com/fluxcd/pkg/oci v0.15.0 github.com/fluxcd/pkg/runtime v0.24.0 @@ -172,6 +172,7 @@ require ( github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.1.0-rc2 // indirect github.com/peterbourgon/diskv v2.0.1+incompatible // indirect + github.com/pjbgf/sha1cd v0.2.3 // indirect github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/prometheus/client_golang v1.14.0 // indirect diff --git a/go.sum b/go.sum index e825ad97..ce55d768 100644 --- a/go.sum +++ b/go.sum @@ -175,7 +175,7 @@ github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNE github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/drone/envsubst v1.0.3 h1:PCIBwNDYjs50AsLZPYdfhSATKaRg/FJmDc2D6+C2x8g= github.com/drone/envsubst v1.0.3/go.mod h1:N2jZmlMufstn1KEqvbHjw40h1KyTmnVzHcSc9bFiJ2g= -github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153 h1:yUdfgN0XgIJw7foRItutHYUIhlcKzcSf5vDpdhQAKTc= +github.com/elazarl/goproxy v0.0.0-20221015165544-a0805db90819 h1:RIB4cRk+lBqKK3Oy0r2gRX4ui7tuhiZq2SuTtTCi0/0= github.com/emicklei/go-restful/v3 v3.10.0 h1:X4gma4HM7hFm6WMeAsTfqA0GOfdNoCzBIkHGoRLGXuM= github.com/emicklei/go-restful/v3 v3.10.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= @@ -204,8 +204,8 @@ github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= github.com/fluxcd/go-git-providers v0.11.0 h1:uhERrv9LX1Z+R8w0MIXLajJZSBGEEqsJWCObItFYNW4= github.com/fluxcd/go-git-providers v0.11.0/go.mod h1:d/Fu+FtvniNJo6B3HbeEQd4TDTUitsA/zjNOGbEjmDE= -github.com/fluxcd/go-git/v5 v5.0.0-20221104190732-329fd6659b10 h1:au798417R1iWtgcgKe3Dg495mexQmuxelL+NebAtexE= -github.com/fluxcd/go-git/v5 v5.0.0-20221104190732-329fd6659b10/go.mod h1:w8bjt1WtWUxMEmlifjBJP9bK9QAG1Vw1Lw7RzchJFNk= +github.com/fluxcd/go-git/v5 v5.0.0-20221206140629-ec778c2c37df h1:2BHXJp1PwX7D47Q2oaKDekn+BZVZCmxeCWNi+FyownE= +github.com/fluxcd/go-git/v5 v5.0.0-20221206140629-ec778c2c37df/go.mod h1:raWgfUV7lDQVXp4QXUaeNNJkRVKz97UQuF+0kdY7Vmo= github.com/fluxcd/helm-controller/api v0.27.0 h1:Ha5eCS9Xchz+TkbtUNJ6WIeUXYBR/ZXlGHAmHiqdrYY= github.com/fluxcd/helm-controller/api v0.27.0/go.mod h1:/qCtlP718rveiAL7Mova4fGAk0aZv2qyYQn87zcUNhs= github.com/fluxcd/image-automation-controller/api v0.27.0 h1:Dm2dY6JzTgoIGombOjl/h+ouxfmfjhjHFJQWBr8AlSE= @@ -224,8 +224,8 @@ github.com/fluxcd/pkg/apis/meta v0.18.0 h1:s0LeulWcQ4DxVX6805vgDTxlA6bAYk+Lq1QHS github.com/fluxcd/pkg/apis/meta v0.18.0/go.mod h1:pYvXRFi1UKNNrGR34jw3uqOnMXw9X6dTkML8j5Z7tis= github.com/fluxcd/pkg/git v0.7.0 h1:sQHRpFMcOzEdqlyGMjFv2LKMdcoE5xeUr2UcRrsLRG8= github.com/fluxcd/pkg/git v0.7.0/go.mod h1:3deiLPws4DSQ3hqwtQd7Dt66GXTN/4RcT/yHAljXaHo= -github.com/fluxcd/pkg/git/gogit v0.2.0 h1:vhFzk2Pky4tDZwisx8+26YZumRDPxERnkV8l2dbLSoo= -github.com/fluxcd/pkg/git/gogit v0.2.0/go.mod h1:d1RIwl6DVdU8/2dBIhw6n7GNokIKqs+b9cKc/8tz7ew= +github.com/fluxcd/pkg/git/gogit v0.3.1 h1:00GjuVuNYcLwJXolwOqnL/tAcDXcNqZATS8cnrO22Pw= +github.com/fluxcd/pkg/git/gogit v0.3.1/go.mod h1:5b3+lylk3oPkKazfnK5K7DWC2d6MMhYj8wWG1Qx6v3U= github.com/fluxcd/pkg/gittestserver v0.8.0 h1:YrYe63KScKlLxx0GAiQthx2XqHDx0vKitIIx4JnDtIo= github.com/fluxcd/pkg/kustomize v0.10.0 h1:EG5MbYrLtxeCiZxeFUgvyBhFZaXnKfeqqpg7O+J7o3s= github.com/fluxcd/pkg/kustomize v0.10.0/go.mod h1:awHID4OKe2/WAfTFg4u0fURXZPUkrIslSZNSPX9MEFQ= @@ -548,6 +548,8 @@ github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+v github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= +github.com/pjbgf/sha1cd v0.2.3 h1:uKQP/7QOzNtKYH7UTohZLcjF5/55EnTw0jO/Ru4jZwI= +github.com/pjbgf/sha1cd v0.2.3/go.mod h1:HOK9QrgzdHpbc2Kzip0Q1yi3M2MFGPADtR6HjG65m5M= github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU= github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= From 319dbad795aca6ea40d0188f2dd46ac3c16bfd97 Mon Sep 17 00:00:00 2001 From: Sanskar Jaiswal Date: Fri, 9 Dec 2022 11:50:29 +0530 Subject: [PATCH 325/818] bump go-git packages in tests/azure Signed-off-by: Sanskar Jaiswal --- tests/azure/go.mod | 5 +++-- tests/azure/go.sum | 10 ++++++---- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/tests/azure/go.mod b/tests/azure/go.mod index 8a2959c5..4398f87c 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -4,7 +4,7 @@ go 1.18 require ( github.com/Azure/azure-event-hubs-go/v3 v3.3.20 - github.com/fluxcd/go-git/v5 v5.0.0-20221104190732-329fd6659b10 + github.com/fluxcd/go-git/v5 v5.0.0-20221206140629-ec778c2c37df github.com/fluxcd/helm-controller/api v0.27.0 github.com/fluxcd/image-automation-controller/api v0.27.0 github.com/fluxcd/image-reflector-controller/api v0.23.0 @@ -13,7 +13,7 @@ require ( github.com/fluxcd/pkg/apis/event v0.2.0 github.com/fluxcd/pkg/apis/meta v0.18.0 github.com/fluxcd/pkg/git v0.7.0 - github.com/fluxcd/pkg/git/gogit v0.2.0 + github.com/fluxcd/pkg/git/gogit v0.3.1 github.com/fluxcd/source-controller/api v0.32.1 github.com/hashicorp/hc-install v0.4.0 github.com/hashicorp/terraform-exec v0.17.3 @@ -91,6 +91,7 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/onsi/ginkgo/v2 v2.5.0 // indirect + github.com/pjbgf/sha1cd v0.2.3 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_golang v1.14.0 // indirect diff --git a/tests/azure/go.sum b/tests/azure/go.sum index f56c4676..7a2ea141 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -145,8 +145,8 @@ github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJ github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0= github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= -github.com/fluxcd/go-git/v5 v5.0.0-20221104190732-329fd6659b10 h1:au798417R1iWtgcgKe3Dg495mexQmuxelL+NebAtexE= -github.com/fluxcd/go-git/v5 v5.0.0-20221104190732-329fd6659b10/go.mod h1:w8bjt1WtWUxMEmlifjBJP9bK9QAG1Vw1Lw7RzchJFNk= +github.com/fluxcd/go-git/v5 v5.0.0-20221206140629-ec778c2c37df h1:2BHXJp1PwX7D47Q2oaKDekn+BZVZCmxeCWNi+FyownE= +github.com/fluxcd/go-git/v5 v5.0.0-20221206140629-ec778c2c37df/go.mod h1:raWgfUV7lDQVXp4QXUaeNNJkRVKz97UQuF+0kdY7Vmo= github.com/fluxcd/helm-controller/api v0.27.0 h1:Ha5eCS9Xchz+TkbtUNJ6WIeUXYBR/ZXlGHAmHiqdrYY= github.com/fluxcd/helm-controller/api v0.27.0/go.mod h1:/qCtlP718rveiAL7Mova4fGAk0aZv2qyYQn87zcUNhs= github.com/fluxcd/image-automation-controller/api v0.27.0 h1:Dm2dY6JzTgoIGombOjl/h+ouxfmfjhjHFJQWBr8AlSE= @@ -167,8 +167,8 @@ github.com/fluxcd/pkg/apis/meta v0.18.0 h1:s0LeulWcQ4DxVX6805vgDTxlA6bAYk+Lq1QHS github.com/fluxcd/pkg/apis/meta v0.18.0/go.mod h1:pYvXRFi1UKNNrGR34jw3uqOnMXw9X6dTkML8j5Z7tis= github.com/fluxcd/pkg/git v0.7.0 h1:sQHRpFMcOzEdqlyGMjFv2LKMdcoE5xeUr2UcRrsLRG8= github.com/fluxcd/pkg/git v0.7.0/go.mod h1:3deiLPws4DSQ3hqwtQd7Dt66GXTN/4RcT/yHAljXaHo= -github.com/fluxcd/pkg/git/gogit v0.2.0 h1:vhFzk2Pky4tDZwisx8+26YZumRDPxERnkV8l2dbLSoo= -github.com/fluxcd/pkg/git/gogit v0.2.0/go.mod h1:d1RIwl6DVdU8/2dBIhw6n7GNokIKqs+b9cKc/8tz7ew= +github.com/fluxcd/pkg/git/gogit v0.3.1 h1:00GjuVuNYcLwJXolwOqnL/tAcDXcNqZATS8cnrO22Pw= +github.com/fluxcd/pkg/git/gogit v0.3.1/go.mod h1:5b3+lylk3oPkKazfnK5K7DWC2d6MMhYj8wWG1Qx6v3U= github.com/fluxcd/pkg/gittestserver v0.8.0 h1:YrYe63KScKlLxx0GAiQthx2XqHDx0vKitIIx4JnDtIo= github.com/fluxcd/pkg/ssh v0.7.0 h1:FX5ky8SU9dYwbM6zEIDR3TSveLF01iyS95CtB5Ykpno= github.com/fluxcd/pkg/ssh v0.7.0/go.mod h1:tCVZJI8jPOL0XCInJOrYGKapWA/zZCzqPtpiYUSQxww= @@ -367,6 +367,8 @@ github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo/v2 v2.5.0 h1:TRtrvv2vdQqzkwrQ1ke6vtXf7IK34RBUJafIy1wMwls= github.com/onsi/ginkgo/v2 v2.5.0/go.mod h1:Luc4sArBICYCS8THh8v3i3i5CuSZO+RaQRaJoeNwomw= github.com/onsi/gomega v1.24.1 h1:KORJXNNTzJXzu4ScJWssJfJMnJ+2QJqhoQSRwNlze9E= +github.com/pjbgf/sha1cd v0.2.3 h1:uKQP/7QOzNtKYH7UTohZLcjF5/55EnTw0jO/Ru4jZwI= +github.com/pjbgf/sha1cd v0.2.3/go.mod h1:HOK9QrgzdHpbc2Kzip0Q1yi3M2MFGPADtR6HjG65m5M= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= From d5e5a26f5cc2cd4af4fff75e1a066ec4c4cc8572 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Dec 2022 10:27:54 +0000 Subject: [PATCH 326/818] Update sigstore/cosign-installer requirement to b6757d8360bb6b9803c38b68e8cb7442baaf7eb5 Updates the requirements on [sigstore/cosign-installer](https://github.com/sigstore/cosign-installer) to permit the latest version. - [Release notes](https://github.com/sigstore/cosign-installer/releases) - [Commits](https://github.com/sigstore/cosign-installer/commits/b6757d8360bb6b9803c38b68e8cb7442baaf7eb5) --- updated-dependencies: - dependency-name: sigstore/cosign-installer dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- .github/workflows/release.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index b0451c64..b9a873f2 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -31,7 +31,7 @@ jobs: - name: Setup Syft uses: anchore/sbom-action/download-syft@06e109483e6aa305a2b2395eabae554e51530e1d # v0.13.1 - name: Setup Cosign - uses: sigstore/cosign-installer@7bca8b41164994a7dc93749d266e2f1db492f8a2 + uses: sigstore/cosign-installer@b6757d8360bb6b9803c38b68e8cb7442baaf7eb5 - name: Setup Kustomize uses: fluxcd/pkg//actions/kustomize@main - name: Login to GitHub Container Registry @@ -133,7 +133,7 @@ jobs: --path="./flux-system" \ --source=${{ github.repositoryUrl }} \ --revision="${{ github.ref_name }}/${{ github.sha }}" - - uses: sigstore/cosign-installer@7cc35d7fdbe70d4278a0c96779081e6fac665f88 # v2.8.0 + - uses: sigstore/cosign-installer@b6757d8360bb6b9803c38b68e8cb7442baaf7eb5 # v2.8.0 - name: Sign manifests env: COSIGN_EXPERIMENTAL: 1 From 6924a16ac778545aadf5a810a56b83a798554ad9 Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Wed, 14 Dec 2022 01:26:27 +0100 Subject: [PATCH 327/818] use proper paths for committing Signed-off-by: Somtochi Onyekwere --- tests/azure/azure_test.go | 4 ++-- tests/azure/util_test.go | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/azure/azure_test.go b/tests/azure/azure_test.go index 1397dd02..492fd4f8 100644 --- a/tests/azure/azure_test.go +++ b/tests/azure/azure_test.go @@ -283,7 +283,7 @@ func TestAzureDevOpsCloning(t *testing.T) { name: foobar namespace: %s `, tt.name) - name := fmt.Sprintf("./cloning-test/%s/configmap.yaml", tt.name) + name := fmt.Sprintf("cloning-test/%s/configmap.yaml", tt.name) files[name] = strings.NewReader(manifest) } @@ -554,7 +554,7 @@ stringData: require.NoError(t, err) files := make(map[string]io.Reader) - files["./key-vault-sops/secret.enc.yaml"] = r + files["key-vault-sops/secret.enc.yaml"] = r err = commitAndPushAll(repo, files, name) require.NoError(t, err) diff --git a/tests/azure/util_test.go b/tests/azure/util_test.go index 55ae7be8..ba6b88dc 100644 --- a/tests/azure/util_test.go +++ b/tests/azure/util_test.go @@ -168,9 +168,9 @@ patchesStrategicMerge: ` files := make(map[string]io.Reader) - files["./clusters/e2e/flux-system/kustomization.yaml"] = strings.NewReader(kustomizeYaml) - files["./clusters/e2e/flux-system/gotk-components.yaml"] = strings.NewReader("") - files["./clusters/e2e/flux-system/gotk-sync.yaml"] = strings.NewReader("") + files["clusters/e2e/flux-system/kustomization.yaml"] = strings.NewReader(kustomizeYaml) + files["clusters/e2e/flux-system/gotk-components.yaml"] = strings.NewReader("") + files["clusters/e2e/flux-system/gotk-sync.yaml"] = strings.NewReader("") err = commitAndPushAll(repo, files, defaultBranch) if err != nil { return err From 645f9df4f0efc65eee1ba37a5e15e92d61804328 Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Wed, 14 Dec 2022 01:30:29 +0100 Subject: [PATCH 328/818] add detail to returned error Signed-off-by: Somtochi Onyekwere --- tests/azure/util_test.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/azure/util_test.go b/tests/azure/util_test.go index ba6b88dc..2983b403 100644 --- a/tests/azure/util_test.go +++ b/tests/azure/util_test.go @@ -129,7 +129,7 @@ func installFlux(ctx context.Context, kubeClient client.Client, kubeconfigPath, //// Install Flux and push files to git repository repo, _, err := getRepository(repoUrl, defaultBranch, true, azdoPat) if err != nil { - return err + return fmt.Errorf("error cloning repositoriy: %w", err) } kustomizeYaml := ` @@ -173,14 +173,14 @@ patchesStrategicMerge: files["clusters/e2e/flux-system/gotk-sync.yaml"] = strings.NewReader("") err = commitAndPushAll(repo, files, defaultBranch) if err != nil { - return err + return fmt.Errorf("error commiting and pushing manifests: %w", err) } bootstrapCmd := fmt.Sprintf("flux bootstrap git --url=%s --password=%s --kubeconfig=%s"+ " --token-auth --path=clusters/e2e --components-extra image-reflector-controller,image-automation-controller", repoUrl, azdoPat, kubeconfigPath) if err := runCommand(context.Background(), 10*time.Minute, "./", bootstrapCmd); err != nil { - return err + return fmt.Errorf("error running bootstrap: %w", err) } return nil From a9a63b84231179c9606ccde6933a3f1331d205e5 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 14 Dec 2022 12:20:18 +0200 Subject: [PATCH 329/818] Fix flux2-kustomize-helm-example test Signed-off-by: Stefan Prodan --- .github/workflows/e2e.yaml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index 137f1447..9d2d1ed1 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -222,14 +222,13 @@ jobs: /tmp/flux create source git flux-system \ --url=https://github.com/fluxcd/flux2-kustomize-helm-example \ --branch=main \ + --ignore-paths="./clusters/**/flux-system/" \ --recurse-submodules /tmp/flux create kustomization flux-system \ --source=flux-system \ --path=./clusters/staging - kubectl -n flux-system wait kustomization/infrastructure --for=condition=ready --timeout=5m + kubectl -n flux-system wait kustomization/infra-controllers --for=condition=ready --timeout=5m kubectl -n flux-system wait kustomization/apps --for=condition=ready --timeout=5m - kubectl -n nginx wait helmrelease/nginx --for=condition=ready --timeout=5m - kubectl -n redis wait helmrelease/redis --for=condition=ready --timeout=5m kubectl -n podinfo wait helmrelease/podinfo --for=condition=ready --timeout=5m - name: flux tree run: | From 0bd78ca80ca697430da3357e2dd95d98928719d7 Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Mon, 28 Nov 2022 17:25:23 +0100 Subject: [PATCH 330/818] read manifests from stdin Signed-off-by: Somtochi Onyekwere --- cmd/flux/build_artifact.go | 44 ++++++++++++++++++++++++++++++++------ cmd/flux/push_artifact.go | 17 ++++++++++++++- go.mod | 8 +++++-- go.sum | 18 ++++++++++++---- 4 files changed, 74 insertions(+), 13 deletions(-) diff --git a/cmd/flux/build_artifact.go b/cmd/flux/build_artifact.go index 591d4995..48dd8872 100644 --- a/cmd/flux/build_artifact.go +++ b/cmd/flux/build_artifact.go @@ -17,7 +17,10 @@ limitations under the License. package main import ( + "bufio" + "bytes" "fmt" + "io" "os" "strings" @@ -54,7 +57,7 @@ var excludeOCI = append(strings.Split(sourceignore.ExcludeVCS, ","), strings.Spl var buildArtifactArgs buildArtifactFlags func init() { - buildArtifactCmd.Flags().StringVar(&buildArtifactArgs.path, "path", "", "Path to the directory where the Kubernetes manifests are located.") + buildArtifactCmd.Flags().StringVarP(&buildArtifactArgs.path, "path", "p", "", "Path to the directory where the Kubernetes manifests are located.") buildArtifactCmd.Flags().StringVarP(&buildArtifactArgs.output, "output", "o", "artifact.tgz", "Path to where the artifact tgz file should be written.") buildArtifactCmd.Flags().StringSliceVar(&buildArtifactArgs.ignorePaths, "ignore-paths", excludeOCI, "set paths to ignore in .gitignore format") @@ -66,18 +69,47 @@ func buildArtifactCmdRun(cmd *cobra.Command, args []string) error { return fmt.Errorf("invalid path %q", buildArtifactArgs.path) } - if _, err := os.Stat(buildArtifactArgs.path); err != nil { - return fmt.Errorf("invalid path '%s', must point to an existing directory or file", buildArtifactArgs.path) + path := buildArtifactArgs.path + var err error + if buildArtifactArgs.path == "-" { + path, err = saveStdinToFile() + if err != nil { + return err + } + + defer os.Remove(path) + } + + if _, err := os.Stat(path); err != nil { + return fmt.Errorf("invalid path '%s', must point to an existing directory or file", path) } - logger.Actionf("building artifact from %s", buildArtifactArgs.path) + logger.Actionf("building artifact from %s", path) ociClient := oci.NewLocalClient() - if err := ociClient.Build(buildArtifactArgs.output, buildArtifactArgs.path, buildArtifactArgs.ignorePaths); err != nil { + if err := ociClient.Build(buildArtifactArgs.output, path, buildArtifactArgs.ignorePaths); err != nil { return fmt.Errorf("bulding artifact failed, error: %w", err) } logger.Successf("artifact created at %s", buildArtifactArgs.output) - return nil } + +func saveStdinToFile() (string, error) { + b, err := io.ReadAll(bufio.NewReader(os.Stdin)) + if err != nil { + return "", err + } + b = bytes.TrimRight(b, "\r\n") + f, err := os.CreateTemp("", "*.yaml") + if err != nil { + return "", fmt.Errorf("unable to create temp dir for stdin") + } + + _, err = f.Write(b) + if err != nil { + return "", fmt.Errorf("error writing stdin to file: %w", err) + } + + return f.Name(), nil +} diff --git a/cmd/flux/push_artifact.go b/cmd/flux/push_artifact.go index 1c2725e2..75384d2d 100644 --- a/cmd/flux/push_artifact.go +++ b/cmd/flux/push_artifact.go @@ -40,6 +40,11 @@ The command can read the credentials from '~/.docker/config.json' but they can a --source="$(git config --get remote.origin.url)" \ --revision="$(git branch --show-current)/$(git rev-parse HEAD)" + # Push manifests passed into stdin to GHCR + kustomize build . | flux push artifact oci://ghcr.io/org/config/app:$(git rev-parse --short HEAD) -p - \ + --source="$(git config --get remote.origin.url)" \ + --revision="$(git branch --show-current)/$(git rev-parse HEAD)" + # Push single manifest file to GHCR using the short Git SHA as the OCI artifact tag echo $GITHUB_PAT | docker login ghcr.io --username flux --password-stdin flux push artifact oci://ghcr.io/org/config/app:$(git rev-parse --short HEAD) \ @@ -159,7 +164,17 @@ func pushArtifactCmdRun(cmd *cobra.Command, args []string) error { logger.Actionf("pushing artifact to %s", url) - digest, err := ociClient.Push(ctx, url, pushArtifactArgs.path, meta, pushArtifactArgs.ignorePaths) + path := pushArtifactArgs.path + if buildArtifactArgs.path == "-" { + path, err = saveStdinToFile() + if err != nil { + return err + } + + defer os.Remove(path) + } + + digest, err := ociClient.Push(ctx, url, path, meta, pushArtifactArgs.ignorePaths) if err != nil { return fmt.Errorf("pushing artifact failed: %w", err) } diff --git a/go.mod b/go.mod index 50c28376..a4a926a3 100644 --- a/go.mod +++ b/go.mod @@ -18,7 +18,7 @@ require ( github.com/fluxcd/pkg/git v0.7.0 github.com/fluxcd/pkg/git/gogit v0.3.1 github.com/fluxcd/pkg/kustomize v0.10.0 - github.com/fluxcd/pkg/oci v0.15.0 + github.com/fluxcd/pkg/oci v0.16.0 github.com/fluxcd/pkg/runtime v0.24.0 github.com/fluxcd/pkg/sourceignore v0.3.0 github.com/fluxcd/pkg/ssa v0.22.0 @@ -79,7 +79,11 @@ require ( github.com/Microsoft/go-winio v0.6.0 // indirect github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d // indirect github.com/acomagu/bufpipe v1.0.3 // indirect - github.com/aws/aws-sdk-go v1.44.137 // indirect + github.com/aws/aws-sdk-go-v2 v1.17.1 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.25 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.19 // indirect + github.com/aws/aws-sdk-go-v2/service/ecr v1.17.22 // indirect + github.com/aws/smithy-go v1.13.4 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bshuster-repo/logrus-logstash-hook v1.0.0 // indirect github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd // indirect diff --git a/go.sum b/go.sum index ce55d768..e1c5fee5 100644 --- a/go.sum +++ b/go.sum @@ -104,8 +104,17 @@ github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuW github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= -github.com/aws/aws-sdk-go v1.44.137 h1:GH2bUPiW7/gHtB04NxQOSOrKqFNjLGKmqt5YaO+K1SE= -github.com/aws/aws-sdk-go v1.44.137/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= +github.com/aws/aws-sdk-go-v2 v1.17.1 h1:02c72fDJr87N8RAC2s3Qu0YuvMRZKNZJ9F+lAehCazk= +github.com/aws/aws-sdk-go-v2 v1.17.1/go.mod h1:JLnGeGONAyi2lWXI1p0PCIOIy333JMVK1U7Hf0aRFLw= +github.com/aws/aws-sdk-go-v2/credentials v1.13.2 h1:F/v1w0XcFDZjL0bCdi9XWJenoPKjGbzljBhDKcryzEQ= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.25 h1:nBO/RFxeq/IS5G9Of+ZrgucRciie2qpLy++3UGZ+q2E= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.25/go.mod h1:Zb29PYkf42vVYQY6pvSyJCJcFHlPIiY+YKdPtwnvMkY= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.19 h1:oRHDrwCTVT8ZXi4sr9Ld+EXk7N/KGssOr2ygNeojEhw= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.19/go.mod h1:6Q0546uHDp421okhmmGfbxzq2hBqbXFNpi4k+Q1JnQA= +github.com/aws/aws-sdk-go-v2/service/ecr v1.17.22 h1:cC+NNTWWyV0DZF94k2Ugz6NFSdcBoo08oNdYtj9hg5g= +github.com/aws/aws-sdk-go-v2/service/ecr v1.17.22/go.mod h1:kEVGiy2tACP0cegVqx4MrjsgQMSgrtgRq1fSa+Ix6F0= +github.com/aws/smithy-go v1.13.4 h1:/RN2z1txIJWeXeOkzX+Hk/4Uuvv7dWtCjbmVJcrskyk= +github.com/aws/smithy-go v1.13.4/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= @@ -229,8 +238,8 @@ github.com/fluxcd/pkg/git/gogit v0.3.1/go.mod h1:5b3+lylk3oPkKazfnK5K7DWC2d6MMhY github.com/fluxcd/pkg/gittestserver v0.8.0 h1:YrYe63KScKlLxx0GAiQthx2XqHDx0vKitIIx4JnDtIo= github.com/fluxcd/pkg/kustomize v0.10.0 h1:EG5MbYrLtxeCiZxeFUgvyBhFZaXnKfeqqpg7O+J7o3s= github.com/fluxcd/pkg/kustomize v0.10.0/go.mod h1:awHID4OKe2/WAfTFg4u0fURXZPUkrIslSZNSPX9MEFQ= -github.com/fluxcd/pkg/oci v0.15.0 h1:M8fiWveUPoUxZqvHc6om1/5tDYMOEdbJAURfKK7mGAA= -github.com/fluxcd/pkg/oci v0.15.0/go.mod h1:OcLmssDP65I5OUVZQY5GpqDtgaU9VypKgQVJElbyLs8= +github.com/fluxcd/pkg/oci v0.16.0 h1:GKCbAoRMnSi1D5BpxeU9auWHYp7v/vMC7UWT1RXYdN8= +github.com/fluxcd/pkg/oci v0.16.0/go.mod h1:5suv5R+6X2YOTazKcaJ7dqZv0PaVs8A1KHur+wN8YPA= github.com/fluxcd/pkg/runtime v0.24.0 h1:rQmm5Xq8K7f8xcPj1oNOInM1x4YwmgTucZJOP51Xmr4= github.com/fluxcd/pkg/runtime v0.24.0/go.mod h1:I2T+HWVNzX0cxm9TgH+SVNHTwqlmEDiSke43JXsq9iY= github.com/fluxcd/pkg/sourceignore v0.3.0 h1:pFO3hKV9ub+2SrNZPZE7xfiRhxsycRrd7JK7qB26nVw= @@ -364,6 +373,7 @@ github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-containerregistry v0.12.1 h1:W1mzdNUTx4Zla4JaixCRLhORcR7G6KxE5hHl5fkPsp8= From da9df03675fe0c1d696735a2f8b258f48e29d7cc Mon Sep 17 00:00:00 2001 From: Soule BA Date: Thu, 15 Dec 2022 12:51:39 +0100 Subject: [PATCH 331/818] Update fluxcd/pkg/kustomize dependency This fixes the issue where only .yaml was accepted by `flux build/diff` for a kustomization file extension. It also adds support for kustomize componenents. Signed-off-by: Soule BA --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index a4a926a3..c442e090 100644 --- a/go.mod +++ b/go.mod @@ -17,7 +17,7 @@ require ( github.com/fluxcd/pkg/apis/meta v0.18.0 github.com/fluxcd/pkg/git v0.7.0 github.com/fluxcd/pkg/git/gogit v0.3.1 - github.com/fluxcd/pkg/kustomize v0.10.0 + github.com/fluxcd/pkg/kustomize v0.12.0 github.com/fluxcd/pkg/oci v0.16.0 github.com/fluxcd/pkg/runtime v0.24.0 github.com/fluxcd/pkg/sourceignore v0.3.0 diff --git a/go.sum b/go.sum index e1c5fee5..1e134a34 100644 --- a/go.sum +++ b/go.sum @@ -236,8 +236,8 @@ github.com/fluxcd/pkg/git v0.7.0/go.mod h1:3deiLPws4DSQ3hqwtQd7Dt66GXTN/4RcT/yHA github.com/fluxcd/pkg/git/gogit v0.3.1 h1:00GjuVuNYcLwJXolwOqnL/tAcDXcNqZATS8cnrO22Pw= github.com/fluxcd/pkg/git/gogit v0.3.1/go.mod h1:5b3+lylk3oPkKazfnK5K7DWC2d6MMhYj8wWG1Qx6v3U= github.com/fluxcd/pkg/gittestserver v0.8.0 h1:YrYe63KScKlLxx0GAiQthx2XqHDx0vKitIIx4JnDtIo= -github.com/fluxcd/pkg/kustomize v0.10.0 h1:EG5MbYrLtxeCiZxeFUgvyBhFZaXnKfeqqpg7O+J7o3s= -github.com/fluxcd/pkg/kustomize v0.10.0/go.mod h1:awHID4OKe2/WAfTFg4u0fURXZPUkrIslSZNSPX9MEFQ= +github.com/fluxcd/pkg/kustomize v0.12.0 h1:4MQdbP3M8NTIcr8TgNMxRCN+2xZoMWtCDDS3RiOT+8M= +github.com/fluxcd/pkg/kustomize v0.12.0/go.mod h1:awHID4OKe2/WAfTFg4u0fURXZPUkrIslSZNSPX9MEFQ= github.com/fluxcd/pkg/oci v0.16.0 h1:GKCbAoRMnSi1D5BpxeU9auWHYp7v/vMC7UWT1RXYdN8= github.com/fluxcd/pkg/oci v0.16.0/go.mod h1:5suv5R+6X2YOTazKcaJ7dqZv0PaVs8A1KHur+wN8YPA= github.com/fluxcd/pkg/runtime v0.24.0 h1:rQmm5Xq8K7f8xcPj1oNOInM1x4YwmgTucZJOP51Xmr4= From 8e23989418f6559161e402e555a890e8529ee952 Mon Sep 17 00:00:00 2001 From: Sanskar Jaiswal Date: Fri, 16 Dec 2022 16:03:40 +0530 Subject: [PATCH 332/818] update dependencies - github.com/Masterminds/semver/v3 to v3.2.0 - github.com/fluxcd/notification-controller/api to v0.29.1 - github.com/fluxcd/pkg/git/gogit to v0.4.0 - github.com/fluxcd/pkg/oci to v0.17.0 - github.com/onsi/gomega to v1.24.2 - golang.org/x/crypto to v0.4.0 - golang.org/x/term to v0.3.0 Signed-off-by: Sanskar Jaiswal --- go.mod | 42 +++++++++++++++++++------------- go.sum | 77 +++++++++++++++++++++++++++++++++++++--------------------- 2 files changed, 74 insertions(+), 45 deletions(-) diff --git a/go.mod b/go.mod index c442e090..351fe0bb 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/fluxcd/flux2 go 1.18 require ( - github.com/Masterminds/semver/v3 v3.1.1 + github.com/Masterminds/semver/v3 v3.2.0 github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4 github.com/cyphar/filepath-securejoin v0.2.3 github.com/distribution/distribution/v3 v3.0.0-20221119093643-85d4039064cc @@ -13,12 +13,12 @@ require ( github.com/fluxcd/image-automation-controller/api v0.27.0 github.com/fluxcd/image-reflector-controller/api v0.23.0 github.com/fluxcd/kustomize-controller/api v0.31.0 - github.com/fluxcd/notification-controller/api v0.29.0 + github.com/fluxcd/notification-controller/api v0.29.1 github.com/fluxcd/pkg/apis/meta v0.18.0 github.com/fluxcd/pkg/git v0.7.0 - github.com/fluxcd/pkg/git/gogit v0.3.1 + github.com/fluxcd/pkg/git/gogit v0.4.0 github.com/fluxcd/pkg/kustomize v0.12.0 - github.com/fluxcd/pkg/oci v0.16.0 + github.com/fluxcd/pkg/oci v0.17.0 github.com/fluxcd/pkg/runtime v0.24.0 github.com/fluxcd/pkg/sourceignore v0.3.0 github.com/fluxcd/pkg/ssa v0.22.0 @@ -35,13 +35,13 @@ require ( github.com/manifoldco/promptui v0.9.0 github.com/mattn/go-shellwords v1.0.12 github.com/olekukonko/tablewriter v0.0.5 - github.com/onsi/gomega v1.24.1 + github.com/onsi/gomega v1.24.2 github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 github.com/spf13/cobra v1.6.1 github.com/spf13/pflag v1.0.5 github.com/theckman/yacspin v0.13.12 - golang.org/x/crypto v0.3.0 - golang.org/x/term v0.2.0 + golang.org/x/crypto v0.4.0 + golang.org/x/term v0.3.0 k8s.io/api v0.25.4 k8s.io/apiextensions-apiserver v0.25.4 k8s.io/apimachinery v0.25.4 @@ -79,11 +79,19 @@ require ( github.com/Microsoft/go-winio v0.6.0 // indirect github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d // indirect github.com/acomagu/bufpipe v1.0.3 // indirect - github.com/aws/aws-sdk-go-v2 v1.17.1 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.25 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.19 // indirect + github.com/aws/aws-sdk-go-v2 v1.17.2 // indirect + github.com/aws/aws-sdk-go-v2/config v1.18.4 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.13.4 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.20 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.26 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.20 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.3.27 // indirect github.com/aws/aws-sdk-go-v2/service/ecr v1.17.22 // indirect - github.com/aws/smithy-go v1.13.4 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.20 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.11.26 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.13.9 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.17.6 // indirect + github.com/aws/smithy-go v1.13.5 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bshuster-repo/logrus-logstash-hook v1.0.0 // indirect github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd // indirect @@ -193,20 +201,20 @@ require ( github.com/vbatts/tar-split v0.11.2 // indirect github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74 // indirect github.com/xanzy/go-gitlab v0.74.0 // indirect - github.com/xanzy/ssh-agent v0.3.2 // indirect + github.com/xanzy/ssh-agent v0.3.3 // indirect github.com/xlab/treeprint v1.1.0 // indirect github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43 // indirect github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50 // indirect github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f // indirect go.starlark.net v0.0.0-20221028183056-acb66ad56dd2 // indirect - golang.org/x/mod v0.6.0 // indirect - golang.org/x/net v0.2.0 // indirect + golang.org/x/mod v0.7.0 // indirect + golang.org/x/net v0.4.0 // indirect golang.org/x/oauth2 v0.2.0 // indirect golang.org/x/sync v0.1.0 // indirect - golang.org/x/sys v0.2.0 // indirect - golang.org/x/text v0.4.0 // indirect + golang.org/x/sys v0.3.0 // indirect + golang.org/x/text v0.5.0 // indirect golang.org/x/time v0.2.0 // indirect - golang.org/x/tools v0.1.12 // indirect + golang.org/x/tools v0.4.0 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/protobuf v1.28.1 // indirect diff --git a/go.sum b/go.sum index 1e134a34..f8488932 100644 --- a/go.sum +++ b/go.sum @@ -78,8 +78,8 @@ github.com/BurntSushi/toml v1.0.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbi github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/MakeNowJust/heredoc v1.0.0 h1:cXCdzVdstXyiTqTvfqk9SDHpKNjxuom+DOlyEeQ4pzQ= github.com/MakeNowJust/heredoc v1.0.0/go.mod h1:mG5amYoWBHf8vpLOuehzbGGw0EHxpZZ6lCpQ4fNJ8LE= -github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030IGemrRc= -github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= +github.com/Masterminds/semver/v3 v3.2.0 h1:3MEsd0SM6jqZojhjLWWeBY+Kcjy9i6MQAeY7YgDP83g= +github.com/Masterminds/semver/v3 v3.2.0/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= @@ -104,17 +104,36 @@ github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuW github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= -github.com/aws/aws-sdk-go-v2 v1.17.1 h1:02c72fDJr87N8RAC2s3Qu0YuvMRZKNZJ9F+lAehCazk= github.com/aws/aws-sdk-go-v2 v1.17.1/go.mod h1:JLnGeGONAyi2lWXI1p0PCIOIy333JMVK1U7Hf0aRFLw= -github.com/aws/aws-sdk-go-v2/credentials v1.13.2 h1:F/v1w0XcFDZjL0bCdi9XWJenoPKjGbzljBhDKcryzEQ= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.25 h1:nBO/RFxeq/IS5G9Of+ZrgucRciie2qpLy++3UGZ+q2E= +github.com/aws/aws-sdk-go-v2 v1.17.2 h1:r0yRZInwiPBNpQ4aDy/Ssh3ROWsGtKDwar2JS8Lm+N8= +github.com/aws/aws-sdk-go-v2 v1.17.2/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw= +github.com/aws/aws-sdk-go-v2/config v1.18.4 h1:VZKhr3uAADXHStS/Gf9xSYVmmaluTUfkc0dcbPiDsKE= +github.com/aws/aws-sdk-go-v2/config v1.18.4/go.mod h1:EZxMPLSdGAZ3eAmkqXfYbRppZJTzFTkv8VyEzJhKko4= +github.com/aws/aws-sdk-go-v2/credentials v1.13.4 h1:nEbHIyJy7mCvQ/kzGG7VWHSBpRB4H6sJy3bWierWUtg= +github.com/aws/aws-sdk-go-v2/credentials v1.13.4/go.mod h1:/Cj5w9LRsNTLSwexsohwDME32OzJ6U81Zs33zr2ZWOM= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.20 h1:tpNOglTZ8kg9T38NpcGBxudqfUAwUzyUnLQ4XSd0CHE= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.20/go.mod h1:d9xFpWd3qYwdIXM0fvu7deD08vvdRXyc/ueV+0SqaWE= github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.25/go.mod h1:Zb29PYkf42vVYQY6pvSyJCJcFHlPIiY+YKdPtwnvMkY= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.19 h1:oRHDrwCTVT8ZXi4sr9Ld+EXk7N/KGssOr2ygNeojEhw= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.26 h1:5WU31cY7m0tG+AiaXuXGoMzo2GBQ1IixtWa8Yywsgco= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.26/go.mod h1:2E0LdbJW6lbeU4uxjum99GZzI0ZjDpAb0CoSCM0oeEY= github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.19/go.mod h1:6Q0546uHDp421okhmmGfbxzq2hBqbXFNpi4k+Q1JnQA= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.20 h1:WW0qSzDWoiWU2FS5DbKpxGilFVlCEJPwx4YtjdfI0Jw= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.20/go.mod h1:/+6lSiby8TBFpTVXZgKiN/rCfkYXEGvhlM4zCgPpt7w= +github.com/aws/aws-sdk-go-v2/internal/ini v1.3.27 h1:N2eKFw2S+JWRCtTt0IhIX7uoGGQciD4p6ba+SJv4WEU= +github.com/aws/aws-sdk-go-v2/internal/ini v1.3.27/go.mod h1:RdwFVc7PBYWY33fa2+8T1mSqQ7ZEK4ILpM0wfioDC3w= github.com/aws/aws-sdk-go-v2/service/ecr v1.17.22 h1:cC+NNTWWyV0DZF94k2Ugz6NFSdcBoo08oNdYtj9hg5g= github.com/aws/aws-sdk-go-v2/service/ecr v1.17.22/go.mod h1:kEVGiy2tACP0cegVqx4MrjsgQMSgrtgRq1fSa+Ix6F0= -github.com/aws/smithy-go v1.13.4 h1:/RN2z1txIJWeXeOkzX+Hk/4Uuvv7dWtCjbmVJcrskyk= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.20 h1:jlgyHbkZQAgAc7VIxJDmtouH8eNjOk2REVAQfVhdaiQ= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.20/go.mod h1:Xs52xaLBqDEKRcAfX/hgjmD3YQ7c/W+BEyfamlO/W2E= +github.com/aws/aws-sdk-go-v2/service/sso v1.11.26 h1:ActQgdTNQej/RuUJjB9uxYVLDOvRGtUreXF8L3c8wyg= +github.com/aws/aws-sdk-go-v2/service/sso v1.11.26/go.mod h1:uB9tV79ULEZUXc6Ob18A46KSQ0JDlrplPni9XW6Ot60= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.13.9 h1:wihKuqYUlA2T/Rx+yu2s6NDAns8B9DgnRooB1PVhY+Q= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.13.9/go.mod h1:2E/3D/mB8/r2J7nK42daoKP/ooCwbf0q1PznNc+DZTU= +github.com/aws/aws-sdk-go-v2/service/sts v1.17.6 h1:VQFOLQVL3BrKM/NLO/7FiS4vcp5bqK0mGMyk09xLoAY= +github.com/aws/aws-sdk-go-v2/service/sts v1.17.6/go.mod h1:Az3OXXYGyfNwQNsK/31L4R75qFYnO641RZGAoV3uH1c= github.com/aws/smithy-go v1.13.4/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= +github.com/aws/smithy-go v1.13.5 h1:hgz0X/DX0dGqTYpGALqXJoRKRj5oQ7150i5FdTePzO8= +github.com/aws/smithy-go v1.13.5/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= @@ -223,8 +242,8 @@ github.com/fluxcd/image-reflector-controller/api v0.23.0 h1:Ww3EjZD6Xm+UebS+VdXh github.com/fluxcd/image-reflector-controller/api v0.23.0/go.mod h1:uomyKK0ZWFOsG40wqmCJvIN8OpAiPKFteXe+cdhB/Z0= github.com/fluxcd/kustomize-controller/api v0.31.0 h1:3KmZa/NYuC1zqc5Qp9jR3pxtkH5P/1UA513xUEJxkUY= github.com/fluxcd/kustomize-controller/api v0.31.0/go.mod h1:t2pqIe1SMzdZIAG/aietrg3XpRXmpcubf0uxDJOryEA= -github.com/fluxcd/notification-controller/api v0.29.0 h1:aLl2HCtaiOpglaGb2iomKz2IJ77VdRW1gSB3VYjYxmM= -github.com/fluxcd/notification-controller/api v0.29.0/go.mod h1:Ve4SE6jeiGlyItvHa7/UpTPOVC6ac5K76Frv1P7hqLw= +github.com/fluxcd/notification-controller/api v0.29.1 h1:gNLbJ18TprLPFVYNXpDRNOX42nzLBi/UYj/HPH19nAk= +github.com/fluxcd/notification-controller/api v0.29.1/go.mod h1:Ve4SE6jeiGlyItvHa7/UpTPOVC6ac5K76Frv1P7hqLw= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= github.com/fluxcd/pkg/apis/kustomize v0.7.0 h1:X2htBmJ91nGYv4d93gin665MFWKNGiNwUiZ08/Zz0hY= @@ -233,13 +252,13 @@ github.com/fluxcd/pkg/apis/meta v0.18.0 h1:s0LeulWcQ4DxVX6805vgDTxlA6bAYk+Lq1QHS github.com/fluxcd/pkg/apis/meta v0.18.0/go.mod h1:pYvXRFi1UKNNrGR34jw3uqOnMXw9X6dTkML8j5Z7tis= github.com/fluxcd/pkg/git v0.7.0 h1:sQHRpFMcOzEdqlyGMjFv2LKMdcoE5xeUr2UcRrsLRG8= github.com/fluxcd/pkg/git v0.7.0/go.mod h1:3deiLPws4DSQ3hqwtQd7Dt66GXTN/4RcT/yHAljXaHo= -github.com/fluxcd/pkg/git/gogit v0.3.1 h1:00GjuVuNYcLwJXolwOqnL/tAcDXcNqZATS8cnrO22Pw= -github.com/fluxcd/pkg/git/gogit v0.3.1/go.mod h1:5b3+lylk3oPkKazfnK5K7DWC2d6MMhYj8wWG1Qx6v3U= +github.com/fluxcd/pkg/git/gogit v0.4.0 h1:u2Rcd/jHdvXUfgv72CES5Gq/nxAp/PblgrBDAm8ZQtQ= +github.com/fluxcd/pkg/git/gogit v0.4.0/go.mod h1:fMBM6efbAPqDEoU2M/ve+P3b/oQCuwRbia4bn9006jM= github.com/fluxcd/pkg/gittestserver v0.8.0 h1:YrYe63KScKlLxx0GAiQthx2XqHDx0vKitIIx4JnDtIo= github.com/fluxcd/pkg/kustomize v0.12.0 h1:4MQdbP3M8NTIcr8TgNMxRCN+2xZoMWtCDDS3RiOT+8M= github.com/fluxcd/pkg/kustomize v0.12.0/go.mod h1:awHID4OKe2/WAfTFg4u0fURXZPUkrIslSZNSPX9MEFQ= -github.com/fluxcd/pkg/oci v0.16.0 h1:GKCbAoRMnSi1D5BpxeU9auWHYp7v/vMC7UWT1RXYdN8= -github.com/fluxcd/pkg/oci v0.16.0/go.mod h1:5suv5R+6X2YOTazKcaJ7dqZv0PaVs8A1KHur+wN8YPA= +github.com/fluxcd/pkg/oci v0.17.0 h1:DYoT0HG3DogEmeXRif6ZzTYwAZe+iqYWP4QpsP37ZBE= +github.com/fluxcd/pkg/oci v0.17.0/go.mod h1:UjxCQcdcKtog/ad9Vr2yPYjz9keNSoLdTOOiUNqCRiY= github.com/fluxcd/pkg/runtime v0.24.0 h1:rQmm5Xq8K7f8xcPj1oNOInM1x4YwmgTucZJOP51Xmr4= github.com/fluxcd/pkg/runtime v0.24.0/go.mod h1:I2T+HWVNzX0cxm9TgH+SVNHTwqlmEDiSke43JXsq9iY= github.com/fluxcd/pkg/sourceignore v0.3.0 h1:pFO3hKV9ub+2SrNZPZE7xfiRhxsycRrd7JK7qB26nVw= @@ -546,9 +565,9 @@ github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= -github.com/onsi/ginkgo/v2 v2.5.0 h1:TRtrvv2vdQqzkwrQ1ke6vtXf7IK34RBUJafIy1wMwls= -github.com/onsi/gomega v1.24.1 h1:KORJXNNTzJXzu4ScJWssJfJMnJ+2QJqhoQSRwNlze9E= -github.com/onsi/gomega v1.24.1/go.mod h1:3AOiACssS3/MajrniINInwbfOOtfZvplPzuRSmvt1jM= +github.com/onsi/ginkgo/v2 v2.6.1 h1:1xQPCjcqYw/J5LchOcp4/2q/jzJFjiAOc25chhnDw+Q= +github.com/onsi/gomega v1.24.2 h1:J/tulyYK6JwBldPViHJReihxxZ+22FHs0piGjQAvoUE= +github.com/onsi/gomega v1.24.2/go.mod h1:gs3J10IS7Z7r7eXRoNJIrNqU4ToQukCJhFtKrWgHWnk= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= @@ -647,8 +666,9 @@ github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74/go.mod h1 github.com/xanzy/go-gitlab v0.74.0 h1:Ha1cokbjn0PXy6B19t3W324dwM4AOT52fuHr7nERPrc= github.com/xanzy/go-gitlab v0.74.0/go.mod h1:d/a0vswScO7Agg1CZNz15Ic6SSvBG9vfw8egL99t4kA= github.com/xanzy/ssh-agent v0.3.0/go.mod h1:3s9xbODqPuuhK9JV1R321M/FlMZSBvE5aY6eAcqrDh0= -github.com/xanzy/ssh-agent v0.3.2 h1:eKj4SX2Fe7mui28ZgnFW5fmTz1EIr7ugo5s6wDxdHBM= github.com/xanzy/ssh-agent v0.3.2/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= +github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= +github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= @@ -695,8 +715,8 @@ golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= -golang.org/x/crypto v0.3.0 h1:a06MkbcxBrEFc0w0QIZWXrH/9cCX6KJyWbBOIwAn+7A= -golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= +golang.org/x/crypto v0.4.0 h1:UVQgzMY87xqpKNgb+kDsll2Igd33HszWHFLmpaRMq/8= +golang.org/x/crypto v0.4.0/go.mod h1:3quD/ATkf6oY+rnes5c3ExXTbLc8mueNue5/DoinL80= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -733,8 +753,8 @@ golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 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.6.0 h1:b9gGHsz9/HhJ3HF5DHQytPpuwocVTChQJK3AvoLRD5I= -golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI= +golang.org/x/mod v0.7.0 h1:LapD9S96VoQRhi/GrNTqeBJFrUjs5UHCAtTlgwA5oZA= +golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -781,8 +801,8 @@ golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.2.0 h1:sZfSu1wtKLGlWI4ZZayP0ck9Y73K1ynO6gqzTdBVdPU= -golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= +golang.org/x/net v0.4.0 h1:Q5QPcMlvfxFTAPV0+07Xz/MpK9NTXu2VDUuy0FeMfaU= +golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= 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= @@ -890,15 +910,15 @@ golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.2.0 h1:ljd4t30dBnAvMZaQCevtY0xLLD0A+bRZXbgLMLU1F/A= -golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.3.0 h1:w8ZOecv6NaNa/zC8944JTU3vz4u6Lagfk4RPQxv92NQ= +golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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= golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.2.0 h1:z85xZCsEl7bi/KwbNADeBYoOP0++7W1ipu+aGnpwzRM= -golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= +golang.org/x/term v0.3.0 h1:qoo4akIqOcDME5bhc/NgxUdovd6BSS2uMsVjB56q1xI= +golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -958,8 +978,9 @@ golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= 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 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.4.0 h1:7mTAgkunk3fr4GAloyyCasadO6h9zSsQZbwvcaIciV4= +golang.org/x/tools v0.4.0/go.mod h1:UE5sM2OK9E/d67R0ANs2xJizIymRP5gJU295PvKXxjQ= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= From 81dc4adc69a5b010b6510dc505d081523619740f Mon Sep 17 00:00:00 2001 From: Sanskar Jaiswal Date: Fri, 16 Dec 2022 16:06:18 +0530 Subject: [PATCH 333/818] tests/azure: update dependencies - github.com/Azure/azure-event-hubs-go/v3 to v3.4.0 - github.com/fluxcd/notification-controller/api to v0.29.1 - github.com/fluxcd/pkg/git/gogit to v0.4.0 - go.uber.org/multierr to v1.9.0 Signed-off-by: Sanskar Jaiswal --- tests/azure/go.mod | 12 +++++----- tests/azure/go.sum | 57 ++++++++++------------------------------------ 2 files changed, 18 insertions(+), 51 deletions(-) diff --git a/tests/azure/go.mod b/tests/azure/go.mod index 4398f87c..d942fba7 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -3,24 +3,24 @@ module github.com/fluxcd/flux2/tests/azure go 1.18 require ( - github.com/Azure/azure-event-hubs-go/v3 v3.3.20 + github.com/Azure/azure-event-hubs-go/v3 v3.4.0 github.com/fluxcd/go-git/v5 v5.0.0-20221206140629-ec778c2c37df github.com/fluxcd/helm-controller/api v0.27.0 github.com/fluxcd/image-automation-controller/api v0.27.0 github.com/fluxcd/image-reflector-controller/api v0.23.0 github.com/fluxcd/kustomize-controller/api v0.31.0 - github.com/fluxcd/notification-controller/api v0.29.0 + github.com/fluxcd/notification-controller/api v0.29.1 github.com/fluxcd/pkg/apis/event v0.2.0 github.com/fluxcd/pkg/apis/meta v0.18.0 github.com/fluxcd/pkg/git v0.7.0 - github.com/fluxcd/pkg/git/gogit v0.3.1 + github.com/fluxcd/pkg/git/gogit v0.4.0 github.com/fluxcd/source-controller/api v0.32.1 github.com/hashicorp/hc-install v0.4.0 github.com/hashicorp/terraform-exec v0.17.3 github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 github.com/stretchr/testify v1.8.1 github.com/whilp/git-urls v1.0.0 - go.uber.org/multierr v1.8.0 + go.uber.org/multierr v1.9.0 k8s.io/api v0.25.4 k8s.io/apimachinery v0.25.4 k8s.io/client-go v0.25.4 @@ -34,9 +34,9 @@ replace golang.org/x/text => golang.org/x/text v0.4.0 replace gopkg.in/yaml.v3 => gopkg.in/yaml.v3 v3.0.1 require ( - github.com/Azure/azure-amqp-common-go/v3 v3.2.3 // indirect + github.com/Azure/azure-amqp-common-go/v4 v4.0.0 // indirect github.com/Azure/azure-sdk-for-go v65.0.0+incompatible // indirect - github.com/Azure/go-amqp v0.17.0 // indirect + github.com/Azure/go-amqp v0.18.0 // indirect github.com/Azure/go-autorest v14.2.0+incompatible // indirect github.com/Azure/go-autorest/autorest v0.11.28 // indirect github.com/Azure/go-autorest/autorest/adal v0.9.21 // indirect diff --git a/tests/azure/go.sum b/tests/azure/go.sum index 7a2ea141..030aacc4 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -31,41 +31,25 @@ cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohl cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/Azure/azure-amqp-common-go/v3 v3.2.3 h1:uDF62mbd9bypXWi19V1bN5NZEO84JqgmI5G73ibAmrk= -github.com/Azure/azure-amqp-common-go/v3 v3.2.3/go.mod h1:7rPmbSfszeovxGfc5fSAXE4ehlXQZHpMja2OtxC2Tas= -github.com/Azure/azure-event-hubs-go/v3 v3.3.20 h1:LRAy00JlV5aDqd0LFXwfwFReYzl03CtH/kD91OHrT94= -github.com/Azure/azure-event-hubs-go/v3 v3.3.20/go.mod h1:5GkwDWncbqGCPjf76khiylOAD2NjkrUrLFb/S99BiA8= -github.com/Azure/azure-pipeline-go v0.2.3/go.mod h1:x841ezTBIMG6O3lAcl8ATHnsOPVl2bqk7S3ta6S6u4k= +github.com/Azure/azure-amqp-common-go/v4 v4.0.0 h1:mV5O74KYmonn0ZXtwfMjGUtZ9Z+Hv7AIFVS1s03sRvo= +github.com/Azure/azure-amqp-common-go/v4 v4.0.0/go.mod h1:4+qRvizIo4+CbGG552O6a8ONkEwRgWXqes3SUt1Ftrc= +github.com/Azure/azure-event-hubs-go/v3 v3.4.0 h1:LtH0nHkXivyV/GajOu5ZFC5sb/5KZ8j+9U8UsfHVTOo= +github.com/Azure/azure-event-hubs-go/v3 v3.4.0/go.mod h1:ODgt5C1/c73FToYj+mWojUJLXF877ALc6G4XnfRFlAY= github.com/Azure/azure-sdk-for-go v65.0.0+incompatible h1:HzKLt3kIwMm4KeJYTdx9EbjRYTySD/t8i1Ee/W5EGXw= github.com/Azure/azure-sdk-for-go v65.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/azure-storage-blob-go v0.15.0/go.mod h1:vbjsVbX0dlxnRc4FFMPsS9BsJWPcne7GB7onqlPvz58= -github.com/Azure/go-amqp v0.17.0 h1:HHXa3149nKrI0IZwyM7DRcRy5810t9ZICDutn4BYzj4= -github.com/Azure/go-amqp v0.17.0/go.mod h1:9YJ3RhxRT1gquYnzpZO1vcYMMpAdJT+QEg6fwmw9Zlg= +github.com/Azure/go-amqp v0.18.0 h1:95bTiJq0oxjK1RUlt5T3HF/THj6jWTRZpSXMPSOJLz8= +github.com/Azure/go-amqp v0.18.0/go.mod h1:+bg0x3ce5+Q3ahCEXnCsGG3ETpDQe3MEVnOuT2ywPwc= github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs= github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= -github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= -github.com/Azure/go-autorest/autorest v0.9.3/go.mod h1:GsRuLYvwzLjjjRoWEIyMUaYq8GNUx2nRB378IPt/1p0= -github.com/Azure/go-autorest/autorest v0.11.18/go.mod h1:dSiJPy22c3u0OtOKDNttNgqpNFY/GeWa7GH/Pz56QRA= github.com/Azure/go-autorest/autorest v0.11.28 h1:ndAExarwr5Y+GaHE6VCaY1kyS/HwwGGyuimVhWsHOEM= github.com/Azure/go-autorest/autorest v0.11.28/go.mod h1:MrkzG3Y3AH668QyF9KRk5neJnGgmhQ6krbhR8Q5eMvA= -github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= -github.com/Azure/go-autorest/autorest/adal v0.8.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S6HY6e6wcHn37qQMBQlvY3lc= -github.com/Azure/go-autorest/autorest/adal v0.8.1/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= -github.com/Azure/go-autorest/autorest/adal v0.9.13/go.mod h1:W/MM4U6nLxnIskrw4UwWzlHfGjwUS50aOsc/I3yuU8M= github.com/Azure/go-autorest/autorest/adal v0.9.18/go.mod h1:XVVeme+LZwABT8K5Lc3hA4nAe8LDBVle26gTrguhhPQ= github.com/Azure/go-autorest/autorest/adal v0.9.21 h1:jjQnVFXPfekaqb8vIsv2G1lxshoW+oGv4MDlhRtnYZk= github.com/Azure/go-autorest/autorest/adal v0.9.21/go.mod h1:zua7mBUaCc5YnSLKYgGJR/w5ePdMDA6H56upLsHzA9U= github.com/Azure/go-autorest/autorest/azure/auth v0.4.2 h1:iM6UAvjR97ZIeR93qTcwpKNMpV+/FTWjwEbuPD495Tk= -github.com/Azure/go-autorest/autorest/azure/auth v0.4.2/go.mod h1:90gmfKdlmKgfjUpnCEpOJzsUEjrWDSLwHIG73tSXddM= github.com/Azure/go-autorest/autorest/azure/cli v0.3.1 h1:LXl088ZQlP0SBppGFsRZonW6hSvwgL5gRByMbvUbx8U= -github.com/Azure/go-autorest/autorest/azure/cli v0.3.1/go.mod h1:ZG5p860J94/0kI9mNJVoIoLgXcirM2gF5i2kWloofxw= -github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= -github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g= github.com/Azure/go-autorest/autorest/date v0.3.0 h1:7gUk1U5M/CQbp9WoqinNzJar+8KY+LPI6wiWrP/myHw= github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74= -github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= -github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= -github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= github.com/Azure/go-autorest/autorest/mocks v0.4.2 h1:PGN4EDXnuQbojHbU0UWoNvmu9AGVwYHG9/fkDYhtAfw= github.com/Azure/go-autorest/autorest/mocks v0.4.2/go.mod h1:Vy7OitM9Kei0i1Oj+LvyAWMXJHeKH1MVlzFugfVrmyU= @@ -73,10 +57,8 @@ github.com/Azure/go-autorest/autorest/to v0.4.0 h1:oXVqrxakqqV1UZdSazDOPOLvOIz+X github.com/Azure/go-autorest/autorest/to v0.4.0/go.mod h1:fE8iZBn7LQR7zH/9XU2NcPR4o9jEImooCeWJcYV/zLE= github.com/Azure/go-autorest/autorest/validation v0.3.1 h1:AgyqjAd94fwNAoTjl/WQXg4VvFeRFpO+UhNyRXqF1ac= github.com/Azure/go-autorest/autorest/validation v0.3.1/go.mod h1:yhLgjC0Wda5DYXl6JAsWyUe4KVNffhoDhG0zVzUMo3E= -github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= github.com/Azure/go-autorest/logger v0.2.1 h1:IG7i4p/mDa2Ce4TRyAO8IHnVhAVF3RFU+ZtXWSmf4Tg= github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= -github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo= github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= @@ -126,9 +108,7 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/devigned/tab v0.1.1 h1:3mD6Kb1mUOYeLpJvTVSDwSg5ZsfSxfvxGRTxRsJsITA= github.com/devigned/tab v0.1.1/go.mod h1:XG9mPq0dFghrYvoBF3xdRrJzSTX1b7IQrvaL9mzjeJY= -github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dimchansky/utfbom v1.1.0 h1:FcM3g+nofKgUteL8dm/UpdRXNC9KmADgTpLKsu0TRo4= -github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/emicklei/go-restful/v3 v3.10.0 h1:X4gma4HM7hFm6WMeAsTfqA0GOfdNoCzBIkHGoRLGXuM= github.com/emicklei/go-restful/v3 v3.10.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= @@ -155,8 +135,8 @@ github.com/fluxcd/image-reflector-controller/api v0.23.0 h1:Ww3EjZD6Xm+UebS+VdXh github.com/fluxcd/image-reflector-controller/api v0.23.0/go.mod h1:uomyKK0ZWFOsG40wqmCJvIN8OpAiPKFteXe+cdhB/Z0= github.com/fluxcd/kustomize-controller/api v0.31.0 h1:3KmZa/NYuC1zqc5Qp9jR3pxtkH5P/1UA513xUEJxkUY= github.com/fluxcd/kustomize-controller/api v0.31.0/go.mod h1:t2pqIe1SMzdZIAG/aietrg3XpRXmpcubf0uxDJOryEA= -github.com/fluxcd/notification-controller/api v0.29.0 h1:aLl2HCtaiOpglaGb2iomKz2IJ77VdRW1gSB3VYjYxmM= -github.com/fluxcd/notification-controller/api v0.29.0/go.mod h1:Ve4SE6jeiGlyItvHa7/UpTPOVC6ac5K76Frv1P7hqLw= +github.com/fluxcd/notification-controller/api v0.29.1 h1:gNLbJ18TprLPFVYNXpDRNOX42nzLBi/UYj/HPH19nAk= +github.com/fluxcd/notification-controller/api v0.29.1/go.mod h1:Ve4SE6jeiGlyItvHa7/UpTPOVC6ac5K76Frv1P7hqLw= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= github.com/fluxcd/pkg/apis/event v0.2.0 h1:cmAtkZfoEaNVYegI4SFM8XstdRAil3O9AoP+8fpbR34= @@ -167,8 +147,8 @@ github.com/fluxcd/pkg/apis/meta v0.18.0 h1:s0LeulWcQ4DxVX6805vgDTxlA6bAYk+Lq1QHS github.com/fluxcd/pkg/apis/meta v0.18.0/go.mod h1:pYvXRFi1UKNNrGR34jw3uqOnMXw9X6dTkML8j5Z7tis= github.com/fluxcd/pkg/git v0.7.0 h1:sQHRpFMcOzEdqlyGMjFv2LKMdcoE5xeUr2UcRrsLRG8= github.com/fluxcd/pkg/git v0.7.0/go.mod h1:3deiLPws4DSQ3hqwtQd7Dt66GXTN/4RcT/yHAljXaHo= -github.com/fluxcd/pkg/git/gogit v0.3.1 h1:00GjuVuNYcLwJXolwOqnL/tAcDXcNqZATS8cnrO22Pw= -github.com/fluxcd/pkg/git/gogit v0.3.1/go.mod h1:5b3+lylk3oPkKazfnK5K7DWC2d6MMhYj8wWG1Qx6v3U= +github.com/fluxcd/pkg/git/gogit v0.4.0 h1:u2Rcd/jHdvXUfgv72CES5Gq/nxAp/PblgrBDAm8ZQtQ= +github.com/fluxcd/pkg/git/gogit v0.4.0/go.mod h1:fMBM6efbAPqDEoU2M/ve+P3b/oQCuwRbia4bn9006jM= github.com/fluxcd/pkg/gittestserver v0.8.0 h1:YrYe63KScKlLxx0GAiQthx2XqHDx0vKitIIx4JnDtIo= github.com/fluxcd/pkg/ssh v0.7.0 h1:FX5ky8SU9dYwbM6zEIDR3TSveLF01iyS95CtB5Ykpno= github.com/fluxcd/pkg/ssh v0.7.0/go.mod h1:tCVZJI8jPOL0XCInJOrYGKapWA/zZCzqPtpiYUSQxww= @@ -177,9 +157,7 @@ github.com/fluxcd/pkg/version v0.2.0/go.mod h1:umN1VAOV0sB1JDVwb8eXZzuuqIAEku+y+ github.com/fluxcd/source-controller/api v0.32.1 h1:PD8XEG4k5otsnusZZNEQ9XYY5udHoNgp5bX2yZHcb6k= github.com/fluxcd/source-controller/api v0.32.1/go.mod h1:+DiGND4WSNdGkS7loPUroSarif6dHU4VlVgtLMRKCR8= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= -github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= -github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= @@ -258,7 +236,6 @@ github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= @@ -278,7 +255,6 @@ github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hf github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= @@ -313,7 +289,6 @@ github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc= -github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA= @@ -343,7 +318,6 @@ github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0 github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/matryer/is v1.2.0 h1:92UTHpy8CDwaJ08GqLDzhhuixiBUUD1p3AU6PHddz4A= github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= -github.com/mattn/go-ieproxy v0.0.1/go.mod h1:pYabZ6IHcRpFh7vIaLfK7rdcWgFEb3SFJ6/gNWuh88E= github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 h1:YH424zrwLTlyHSH/GzLMJeu5zhYVZSx5RQxGKm1h96s= @@ -386,7 +360,6 @@ github.com/sebdah/goldie v1.0.0/go.mod h1:jXP4hmWywNEwZzhMuv2ccnqTSFpuq8iyQhtQdk github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= @@ -403,7 +376,6 @@ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXf github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= @@ -436,11 +408,10 @@ go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= -go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= -go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= +go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= +go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= go.uber.org/zap v1.23.0 h1:OjGQ5KQDEUawVHxNwQgPpiypGHOxo2mNZsOqTak4fFY= go.uber.org/zap v1.23.0/go.mod h1:D+nX8jyLsMHMYrln8A0rJjFt/T/9/bGgIhAqxv5URuY= golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3 h1:0es+/5331RGQPcXlMfP+WrnIIS6dNnNRe0WB02W0F4M= @@ -488,7 +459,6 @@ golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191112182307-2180aed22343/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -506,12 +476,10 @@ golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81R golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210326060303-6b1517762897/go.mod h1:uSPa2vr4CLtc/ILN5odXGNXS6mhrKVzTaCXzk9m6W3k= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220725212005-46097bf591d3/go.mod h1:AaygXjzTFtRAg2ttMY5RMuhpJ3cNnI0XpyFJD1iQRSM= golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/net v0.2.0 h1:sZfSu1wtKLGlWI4ZZayP0ck9Y73K1ynO6gqzTdBVdPU= @@ -546,7 +514,6 @@ golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191112214154-59a1497f0cea/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= From 2c1085d9ce7f964ae0cefadf92c43c7e11c0425c Mon Sep 17 00:00:00 2001 From: Soule BA Date: Sat, 17 Dec 2022 00:29:10 +0100 Subject: [PATCH 334/818] Fix dry-run still loading kubeconfig issue If this is implemented, it will not assume that access to a kubeconfig is guaranteed even if just for retrieving configured namespace. Signed-off-by: Soule BA --- cmd/flux/build_kustomization.go | 22 ++++++++++++++----- .../delete-service/hpa.yaml | 2 +- .../build-kustomization/podinfo-result.yaml | 2 +- .../podinfo-without-service-result.yaml | 2 +- .../build-kustomization/podinfo/hpa.yaml | 2 +- internal/build/build.go | 8 +++++++ 6 files changed, 28 insertions(+), 10 deletions(-) diff --git a/cmd/flux/build_kustomization.go b/cmd/flux/build_kustomization.go index dd10ea11..0c968ddf 100644 --- a/cmd/flux/build_kustomization.go +++ b/cmd/flux/build_kustomization.go @@ -88,12 +88,22 @@ func buildKsCmdRun(cmd *cobra.Command, args []string) (err error) { } } - builder, err := build.NewBuilder(name, buildKsArgs.path, - build.WithClientConfig(kubeconfigArgs, kubeclientOptions), - build.WithTimeout(rootArgs.timeout), - build.WithKustomizationFile(buildKsArgs.kustomizationFile), - build.WithDryRun(buildKsArgs.dryRun), - ) + var builder *build.Builder + if buildKsArgs.dryRun { + builder, err = build.NewBuilder(name, buildKsArgs.path, + build.WithTimeout(rootArgs.timeout), + build.WithKustomizationFile(buildKsArgs.kustomizationFile), + build.WithDryRun(buildKsArgs.dryRun), + build.WithNamespace(*kubeconfigArgs.Namespace), + ) + } else { + builder, err = build.NewBuilder(name, buildKsArgs.path, + build.WithClientConfig(kubeconfigArgs, kubeclientOptions), + build.WithTimeout(rootArgs.timeout), + build.WithKustomizationFile(buildKsArgs.kustomizationFile), + ) + } + if err != nil { return err } diff --git a/cmd/flux/testdata/build-kustomization/delete-service/hpa.yaml b/cmd/flux/testdata/build-kustomization/delete-service/hpa.yaml index 6bd46a2c..263e9128 100644 --- a/cmd/flux/testdata/build-kustomization/delete-service/hpa.yaml +++ b/cmd/flux/testdata/build-kustomization/delete-service/hpa.yaml @@ -1,4 +1,4 @@ -apiVersion: autoscaling/v2beta2 +apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: podinfo diff --git a/cmd/flux/testdata/build-kustomization/podinfo-result.yaml b/cmd/flux/testdata/build-kustomization/podinfo-result.yaml index e4646dd3..009347d8 100644 --- a/cmd/flux/testdata/build-kustomization/podinfo-result.yaml +++ b/cmd/flux/testdata/build-kustomization/podinfo-result.yaml @@ -77,7 +77,7 @@ spec: cpu: 100m memory: 64Mi --- -apiVersion: autoscaling/v2beta2 +apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: labels: diff --git a/cmd/flux/testdata/build-kustomization/podinfo-without-service-result.yaml b/cmd/flux/testdata/build-kustomization/podinfo-without-service-result.yaml index 943381c8..e1e1885f 100644 --- a/cmd/flux/testdata/build-kustomization/podinfo-without-service-result.yaml +++ b/cmd/flux/testdata/build-kustomization/podinfo-without-service-result.yaml @@ -77,7 +77,7 @@ spec: cpu: 100m memory: 64Mi --- -apiVersion: autoscaling/v2beta2 +apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: labels: diff --git a/cmd/flux/testdata/build-kustomization/podinfo/hpa.yaml b/cmd/flux/testdata/build-kustomization/podinfo/hpa.yaml index 6bd46a2c..263e9128 100644 --- a/cmd/flux/testdata/build-kustomization/podinfo/hpa.yaml +++ b/cmd/flux/testdata/build-kustomization/podinfo/hpa.yaml @@ -1,4 +1,4 @@ -apiVersion: autoscaling/v2beta2 +apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: podinfo diff --git a/internal/build/build.go b/internal/build/build.go index f4c3fca9..04befbc0 100644 --- a/internal/build/build.go +++ b/internal/build/build.go @@ -139,6 +139,14 @@ func WithClientConfig(rcg *genericclioptions.ConfigFlags, clientOpts *runclient. } } +// WithNamespace sets the namespace +func WithNamespace(namespace string) BuilderOptionFunc { + return func(b *Builder) error { + b.namespace = namespace + return nil + } +} + // WithDryRun sets the dry-run flag func WithDryRun(dryRun bool) BuilderOptionFunc { return func(b *Builder) error { From fdd3fd1d06f292076335d61aa1d0033a2f21b835 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Dec 2022 01:01:28 +0000 Subject: [PATCH 335/818] Bump github/codeql-action from 2.1.36 to 2.1.37 Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2.1.36 to 2.1.37. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/a669cc5936cc5e1b6a362ec1ff9e410dc570d190...959cbb7472c4d4ad70cdfe6f4976053fe48ab394) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/scan.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index 44dcaba2..c0bef1aa 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -45,7 +45,7 @@ jobs: with: args: --sarif-file-output=snyk.sarif - name: Upload result to GitHub Code Scanning - uses: github/codeql-action/upload-sarif@a669cc5936cc5e1b6a362ec1ff9e410dc570d190 # v2 + uses: github/codeql-action/upload-sarif@959cbb7472c4d4ad70cdfe6f4976053fe48ab394 # v2 with: sarif_file: snyk.sarif @@ -62,10 +62,10 @@ jobs: with: go-version: 1.19.x - name: Initialize CodeQL - uses: github/codeql-action/init@a669cc5936cc5e1b6a362ec1ff9e410dc570d190 # v2 + uses: github/codeql-action/init@959cbb7472c4d4ad70cdfe6f4976053fe48ab394 # v2 with: languages: go - name: Autobuild - uses: github/codeql-action/autobuild@a669cc5936cc5e1b6a362ec1ff9e410dc570d190 # v2 + uses: github/codeql-action/autobuild@959cbb7472c4d4ad70cdfe6f4976053fe48ab394 # v2 - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@a669cc5936cc5e1b6a362ec1ff9e410dc570d190 # v2 + uses: github/codeql-action/analyze@959cbb7472c4d4ad70cdfe6f4976053fe48ab394 # v2 From bd284ab28b6c316371de87c4f17addae81dc43b0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Dec 2022 12:14:24 +0000 Subject: [PATCH 336/818] Bump actions/setup-go from 3.4.0 to 3.5.0 Bumps [actions/setup-go](https://github.com/actions/setup-go) from 3.4.0 to 3.5.0. - [Release notes](https://github.com/actions/setup-go/releases) - [Commits](https://github.com/actions/setup-go/compare/d0a58c1c4d2b25278816e339b944508c875f3613...6edd4406fa81c3da01a34fa6f6343087c207a568) --- updated-dependencies: - dependency-name: actions/setup-go dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/e2e-arm64.yaml | 2 +- .github/workflows/e2e-azure.yaml | 2 +- .github/workflows/e2e-bootstrap.yaml | 2 +- .github/workflows/e2e.yaml | 2 +- .github/workflows/release.yaml | 2 +- .github/workflows/scan.yaml | 2 +- .github/workflows/update.yaml | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/e2e-arm64.yaml b/.github/workflows/e2e-arm64.yaml index 1bdb6846..ec3475f5 100644 --- a/.github/workflows/e2e-arm64.yaml +++ b/.github/workflows/e2e-arm64.yaml @@ -21,7 +21,7 @@ jobs: - name: Checkout uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 - name: Setup Go - uses: actions/setup-go@d0a58c1c4d2b25278816e339b944508c875f3613 + uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 with: go-version: 1.19.x - name: Prepare diff --git a/.github/workflows/e2e-azure.yaml b/.github/workflows/e2e-azure.yaml index 216b75ea..8a5f0b5b 100644 --- a/.github/workflows/e2e-azure.yaml +++ b/.github/workflows/e2e-azure.yaml @@ -24,7 +24,7 @@ jobs: restore-keys: | ${{ runner.os }}-go1.18- - name: Setup Go - uses: actions/setup-go@d0a58c1c4d2b25278816e339b944508c875f3613 + uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 with: go-version: 1.19.x - name: Setup Flux CLI diff --git a/.github/workflows/e2e-bootstrap.yaml b/.github/workflows/e2e-bootstrap.yaml index 47f56bf2..92725baf 100644 --- a/.github/workflows/e2e-bootstrap.yaml +++ b/.github/workflows/e2e-bootstrap.yaml @@ -25,7 +25,7 @@ jobs: restore-keys: | ${{ runner.os }}-go1.18- - name: Setup Go - uses: actions/setup-go@d0a58c1c4d2b25278816e339b944508c875f3613 + uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 with: go-version: 1.19.x - name: Setup Kubernetes diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index 9d2d1ed1..592821d4 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -29,7 +29,7 @@ jobs: restore-keys: | ${{ runner.os }}-go1.18- - name: Setup Go - uses: actions/setup-go@d0a58c1c4d2b25278816e339b944508c875f3613 + uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 with: go-version: 1.19.x - name: Setup Kubernetes diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index b9a873f2..ce997ecb 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -20,7 +20,7 @@ jobs: - name: Unshallow run: git fetch --prune --unshallow - name: Setup Go - uses: actions/setup-go@d0a58c1c4d2b25278816e339b944508c875f3613 + uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 with: go-version: 1.19.x - name: Setup QEMU diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index c0bef1aa..b6c34144 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -58,7 +58,7 @@ jobs: - name: Checkout repository uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 - name: Set up Go - uses: actions/setup-go@d0a58c1c4d2b25278816e339b944508c875f3613 + uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 with: go-version: 1.19.x - name: Initialize CodeQL diff --git a/.github/workflows/update.yaml b/.github/workflows/update.yaml index 648822ed..9f77605d 100644 --- a/.github/workflows/update.yaml +++ b/.github/workflows/update.yaml @@ -20,7 +20,7 @@ jobs: - name: Check out code uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 - name: Setup Go - uses: actions/setup-go@d0a58c1c4d2b25278816e339b944508c875f3613 + uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 with: go-version: 1.19.x - name: Update component versions From 0014bc4c439d6a297f55490a631e368ed74b347c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Dec 2022 12:32:31 +0000 Subject: [PATCH 337/818] Bump actions/checkout from 3.1.0 to 3.2.0 Bumps [actions/checkout](https://github.com/actions/checkout) from 3.1.0 to 3.2.0. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8...755da8c3cf115ac066823e79a1e1788f8940201b) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/e2e-arm64.yaml | 2 +- .github/workflows/e2e-azure.yaml | 2 +- .github/workflows/e2e-bootstrap.yaml | 2 +- .github/workflows/e2e.yaml | 2 +- .github/workflows/release.yaml | 4 ++-- .github/workflows/scan.yaml | 6 +++--- .github/workflows/update.yaml | 2 +- 7 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/e2e-arm64.yaml b/.github/workflows/e2e-arm64.yaml index ec3475f5..daeb157b 100644 --- a/.github/workflows/e2e-arm64.yaml +++ b/.github/workflows/e2e-arm64.yaml @@ -19,7 +19,7 @@ jobs: KUBERNETES_VERSION: [ 1.23.13, 1.24.7, 1.25.3 ] steps: - name: Checkout - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 + uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b - name: Setup Go uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 with: diff --git a/.github/workflows/e2e-azure.yaml b/.github/workflows/e2e-azure.yaml index 8a5f0b5b..f51dfbc6 100644 --- a/.github/workflows/e2e-azure.yaml +++ b/.github/workflows/e2e-azure.yaml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-22.04 steps: - name: Checkout - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 + uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b - name: Restore Go cache uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 with: diff --git a/.github/workflows/e2e-bootstrap.yaml b/.github/workflows/e2e-bootstrap.yaml index 92725baf..319bade0 100644 --- a/.github/workflows/e2e-bootstrap.yaml +++ b/.github/workflows/e2e-bootstrap.yaml @@ -16,7 +16,7 @@ jobs: if: (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) && github.actor != 'dependabot[bot]' steps: - name: Checkout - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 + uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b - name: Restore Go cache uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 with: diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index 592821d4..fdc7c52d 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -20,7 +20,7 @@ jobs: - 5000:5000 steps: - name: Checkout - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 + uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b - name: Restore Go cache uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 with: diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index ce997ecb..cb89a034 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -16,7 +16,7 @@ jobs: packages: write # needed for ghcr access steps: - name: Checkout - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 + uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b - name: Unshallow run: git fetch --prune --unshallow - name: Setup Go @@ -88,7 +88,7 @@ jobs: id-token: write packages: write steps: - - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 + - uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b - name: Setup Kustomize uses: fluxcd/pkg/actions/kustomize@main - name: Setup Flux CLI diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index b6c34144..5c5efad9 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -17,7 +17,7 @@ jobs: runs-on: ubuntu-latest if: github.actor != 'dependabot[bot]' steps: - - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 + - uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b - name: Run FOSSA scan and upload build data uses: fossa-contrib/fossa-action@6cffaa064112e1cf9b5798c6224f9487dc1ec316 # v1 with: @@ -31,7 +31,7 @@ jobs: security-events: write if: (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) && github.actor != 'dependabot[bot]' steps: - - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 + - uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b - name: Setup Kustomize uses: fluxcd/pkg//actions/kustomize@main - name: Build manifests @@ -56,7 +56,7 @@ jobs: if: github.actor != 'dependabot[bot]' steps: - name: Checkout repository - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 + uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b - name: Set up Go uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 with: diff --git a/.github/workflows/update.yaml b/.github/workflows/update.yaml index 9f77605d..5b76a5cc 100644 --- a/.github/workflows/update.yaml +++ b/.github/workflows/update.yaml @@ -18,7 +18,7 @@ jobs: pull-requests: write steps: - name: Check out code - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 + uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b - name: Setup Go uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 with: From c605f9a44fb360288dd9342c158e553942d1ec81 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Dec 2022 13:07:50 +0000 Subject: [PATCH 338/818] Bump goreleaser/goreleaser-action from 3.2.0 to 4.1.0 Bumps [goreleaser/goreleaser-action](https://github.com/goreleaser/goreleaser-action) from 3.2.0 to 4.1.0. - [Release notes](https://github.com/goreleaser/goreleaser-action/releases) - [Commits](https://github.com/goreleaser/goreleaser-action/compare/b508e2e3ef3b19d4e4146d4f8fb3ba9db644a757...8f67e590f2d095516493f017008adc464e63adb1) --- updated-dependencies: - dependency-name: goreleaser/goreleaser-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/release.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index cb89a034..2e311c6b 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -73,7 +73,7 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Run GoReleaser - uses: goreleaser/goreleaser-action@b508e2e3ef3b19d4e4146d4f8fb3ba9db644a757 # v3 + uses: goreleaser/goreleaser-action@8f67e590f2d095516493f017008adc464e63adb1 # v3 with: version: latest args: release --release-notes=output/notes.md --skip-validate From 131c05d9c74f8316e1d8bbbaedbff49411c58e8e Mon Sep 17 00:00:00 2001 From: Paulo Gomes Date: Mon, 19 Dec 2022 11:43:41 +0000 Subject: [PATCH 339/818] build: Revert sigstore/cosign-installer to v2.8.1 Dependabot should stick to tagged versions if the existing hash relates to the tag made in the comment. Signed-off-by: Paulo Gomes --- .github/workflows/release.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 2e311c6b..571de91a 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -31,7 +31,7 @@ jobs: - name: Setup Syft uses: anchore/sbom-action/download-syft@06e109483e6aa305a2b2395eabae554e51530e1d # v0.13.1 - name: Setup Cosign - uses: sigstore/cosign-installer@b6757d8360bb6b9803c38b68e8cb7442baaf7eb5 + uses: sigstore/cosign-installer@9becc617647dfa20ae7b1151972e9b3a2c338a2b # v2.8.1 - name: Setup Kustomize uses: fluxcd/pkg//actions/kustomize@main - name: Login to GitHub Container Registry @@ -133,7 +133,7 @@ jobs: --path="./flux-system" \ --source=${{ github.repositoryUrl }} \ --revision="${{ github.ref_name }}/${{ github.sha }}" - - uses: sigstore/cosign-installer@b6757d8360bb6b9803c38b68e8cb7442baaf7eb5 # v2.8.0 + - uses: sigstore/cosign-installer@9becc617647dfa20ae7b1151972e9b3a2c338a2b # v2.8.1 - name: Sign manifests env: COSIGN_EXPERIMENTAL: 1 From d79e49f80b61499e83bddde873de3789fbaced67 Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Sat, 17 Dec 2022 06:58:08 +0100 Subject: [PATCH 340/818] fix path on flux push Signed-off-by: Somtochi Onyekwere --- cmd/flux/build_artifact.go | 11 +++--- cmd/flux/build_artifact_test.go | 70 +++++++++++++++++++++++++++++++++ cmd/flux/push_artifact.go | 24 +++++------ 3 files changed, 88 insertions(+), 17 deletions(-) create mode 100644 cmd/flux/build_artifact_test.go diff --git a/cmd/flux/build_artifact.go b/cmd/flux/build_artifact.go index 48dd8872..b0c4a931 100644 --- a/cmd/flux/build_artifact.go +++ b/cmd/flux/build_artifact.go @@ -72,7 +72,7 @@ func buildArtifactCmdRun(cmd *cobra.Command, args []string) error { path := buildArtifactArgs.path var err error if buildArtifactArgs.path == "-" { - path, err = saveStdinToFile() + path, err = saveReaderToFile(os.Stdin) if err != nil { return err } @@ -95,8 +95,8 @@ func buildArtifactCmdRun(cmd *cobra.Command, args []string) error { return nil } -func saveStdinToFile() (string, error) { - b, err := io.ReadAll(bufio.NewReader(os.Stdin)) +func saveReaderToFile(reader io.Reader) (string, error) { + b, err := io.ReadAll(bufio.NewReader(reader)) if err != nil { return "", err } @@ -106,8 +106,9 @@ func saveStdinToFile() (string, error) { return "", fmt.Errorf("unable to create temp dir for stdin") } - _, err = f.Write(b) - if err != nil { + defer f.Close() + + if _, err := f.Write(b); err != nil { return "", fmt.Errorf("error writing stdin to file: %w", err) } diff --git a/cmd/flux/build_artifact_test.go b/cmd/flux/build_artifact_test.go new file mode 100644 index 00000000..37ed8f02 --- /dev/null +++ b/cmd/flux/build_artifact_test.go @@ -0,0 +1,70 @@ +/* +Copyright 2022 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "os" + "strings" + "testing" + + . "github.com/onsi/gomega" +) + +func Test_saveReaderToFile(t *testing.T) { + g := NewWithT(t) + + testString := `apiVersion: v1 +kind: ConfigMap +metadata: + name: myapp +data: + foo: bar` + + tests := []struct { + name string + string string + expectErr bool + }{ + { + name: "yaml", + string: testString, + }, + { + name: "yaml with carriage return", + string: testString + "\r\n", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + tmpFile, err := saveReaderToFile(strings.NewReader(tt.string)) + g.Expect(err).To(BeNil()) + + defer os.Remove(tmpFile) + + b, err := os.ReadFile(tmpFile) + if tt.expectErr { + g.Expect(err).To(Not(BeNil())) + return + } + + g.Expect(err).To(BeNil()) + g.Expect(string(b)).To(BeEquivalentTo(testString)) + }) + + } +} diff --git a/cmd/flux/push_artifact.go b/cmd/flux/push_artifact.go index 75384d2d..66d6807b 100644 --- a/cmd/flux/push_artifact.go +++ b/cmd/flux/push_artifact.go @@ -129,8 +129,18 @@ func pushArtifactCmdRun(cmd *cobra.Command, args []string) error { return err } - if _, err := os.Stat(pushArtifactArgs.path); err != nil { - return fmt.Errorf("invalid path '%s', must point to an existing directory or file", buildArtifactArgs.path) + path := pushArtifactArgs.path + if pushArtifactArgs.path == "-" { + path, err = saveReaderToFile(os.Stdin) + if err != nil { + return err + } + + defer os.Remove(path) + } + + if _, err := os.Stat(path); err != nil { + return fmt.Errorf("invalid path '%s', must point to an existing directory or file: %w", path, err) } meta := oci.Metadata{ @@ -164,16 +174,6 @@ func pushArtifactCmdRun(cmd *cobra.Command, args []string) error { logger.Actionf("pushing artifact to %s", url) - path := pushArtifactArgs.path - if buildArtifactArgs.path == "-" { - path, err = saveStdinToFile() - if err != nil { - return err - } - - defer os.Remove(path) - } - digest, err := ociClient.Push(ctx, url, path, meta, pushArtifactArgs.ignorePaths) if err != nil { return fmt.Errorf("pushing artifact failed: %w", err) From 58b799fa83bfdc9afdcbe7c4ee93454d4a25184f Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Wed, 21 Dec 2022 09:54:10 +0000 Subject: [PATCH 341/818] Update toolkit components - helm-controller to v0.28.0 https://github.com/fluxcd/helm-controller/blob/v0.28.0/CHANGELOG.md - kustomize-controller to v0.32.0 https://github.com/fluxcd/kustomize-controller/blob/v0.32.0/CHANGELOG.md - source-controller to v0.33.0 https://github.com/fluxcd/source-controller/blob/v0.33.0/CHANGELOG.md - notification-controller to v0.30.0 https://github.com/fluxcd/notification-controller/blob/v0.30.0/CHANGELOG.md - image-reflector-controller to v0.23.1 https://github.com/fluxcd/image-reflector-controller/blob/v0.23.1/CHANGELOG.md - image-automation-controller to v0.28.0 https://github.com/fluxcd/image-automation-controller/blob/v0.28.0/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 12 +++++----- go.sum | 24 +++++++++---------- .../bases/helm-controller/kustomization.yaml | 4 ++-- .../kustomization.yaml | 4 ++-- .../kustomization.yaml | 4 ++-- .../kustomize-controller/kustomization.yaml | 4 ++-- .../kustomization.yaml | 4 ++-- .../source-controller/kustomization.yaml | 4 ++-- manifests/crds/kustomization.yaml | 12 +++++----- 9 files changed, 36 insertions(+), 36 deletions(-) diff --git a/go.mod b/go.mod index 351fe0bb..b603a67b 100644 --- a/go.mod +++ b/go.mod @@ -9,11 +9,11 @@ require ( github.com/distribution/distribution/v3 v3.0.0-20221119093643-85d4039064cc github.com/fluxcd/go-git-providers v0.11.0 github.com/fluxcd/go-git/v5 v5.0.0-20221206140629-ec778c2c37df - github.com/fluxcd/helm-controller/api v0.27.0 - github.com/fluxcd/image-automation-controller/api v0.27.0 - github.com/fluxcd/image-reflector-controller/api v0.23.0 - github.com/fluxcd/kustomize-controller/api v0.31.0 - github.com/fluxcd/notification-controller/api v0.29.1 + github.com/fluxcd/helm-controller/api v0.28.0 + github.com/fluxcd/image-automation-controller/api v0.28.0 + github.com/fluxcd/image-reflector-controller/api v0.23.1 + github.com/fluxcd/kustomize-controller/api v0.32.0 + github.com/fluxcd/notification-controller/api v0.30.0 github.com/fluxcd/pkg/apis/meta v0.18.0 github.com/fluxcd/pkg/git v0.7.0 github.com/fluxcd/pkg/git/gogit v0.4.0 @@ -25,7 +25,7 @@ require ( github.com/fluxcd/pkg/ssh v0.7.0 github.com/fluxcd/pkg/untar v0.2.0 github.com/fluxcd/pkg/version v0.2.0 - github.com/fluxcd/source-controller/api v0.32.1 + github.com/fluxcd/source-controller/api v0.33.0 github.com/gonvenience/bunt v1.3.4 github.com/gonvenience/ytbx v1.4.4 github.com/google/go-cmp v0.5.9 diff --git a/go.sum b/go.sum index f8488932..8ea1b14a 100644 --- a/go.sum +++ b/go.sum @@ -234,16 +234,16 @@ github.com/fluxcd/go-git-providers v0.11.0 h1:uhERrv9LX1Z+R8w0MIXLajJZSBGEEqsJWC github.com/fluxcd/go-git-providers v0.11.0/go.mod h1:d/Fu+FtvniNJo6B3HbeEQd4TDTUitsA/zjNOGbEjmDE= github.com/fluxcd/go-git/v5 v5.0.0-20221206140629-ec778c2c37df h1:2BHXJp1PwX7D47Q2oaKDekn+BZVZCmxeCWNi+FyownE= github.com/fluxcd/go-git/v5 v5.0.0-20221206140629-ec778c2c37df/go.mod h1:raWgfUV7lDQVXp4QXUaeNNJkRVKz97UQuF+0kdY7Vmo= -github.com/fluxcd/helm-controller/api v0.27.0 h1:Ha5eCS9Xchz+TkbtUNJ6WIeUXYBR/ZXlGHAmHiqdrYY= -github.com/fluxcd/helm-controller/api v0.27.0/go.mod h1:/qCtlP718rveiAL7Mova4fGAk0aZv2qyYQn87zcUNhs= -github.com/fluxcd/image-automation-controller/api v0.27.0 h1:Dm2dY6JzTgoIGombOjl/h+ouxfmfjhjHFJQWBr8AlSE= -github.com/fluxcd/image-automation-controller/api v0.27.0/go.mod h1:XYlBpgZ8C2Kgm7SrQWIhDoNA3Hv1rLBZrI9u3s8z/Go= -github.com/fluxcd/image-reflector-controller/api v0.23.0 h1:Ww3EjZD6Xm+UebS+VdXh3UE7rkLSr/1ulIz0FLgUAf0= -github.com/fluxcd/image-reflector-controller/api v0.23.0/go.mod h1:uomyKK0ZWFOsG40wqmCJvIN8OpAiPKFteXe+cdhB/Z0= -github.com/fluxcd/kustomize-controller/api v0.31.0 h1:3KmZa/NYuC1zqc5Qp9jR3pxtkH5P/1UA513xUEJxkUY= -github.com/fluxcd/kustomize-controller/api v0.31.0/go.mod h1:t2pqIe1SMzdZIAG/aietrg3XpRXmpcubf0uxDJOryEA= -github.com/fluxcd/notification-controller/api v0.29.1 h1:gNLbJ18TprLPFVYNXpDRNOX42nzLBi/UYj/HPH19nAk= -github.com/fluxcd/notification-controller/api v0.29.1/go.mod h1:Ve4SE6jeiGlyItvHa7/UpTPOVC6ac5K76Frv1P7hqLw= +github.com/fluxcd/helm-controller/api v0.28.0 h1:X2l1iC7nb8YWnN7EsOZBOALYyhGn9BxI599kQog3SDw= +github.com/fluxcd/helm-controller/api v0.28.0/go.mod h1:/qCtlP718rveiAL7Mova4fGAk0aZv2qyYQn87zcUNhs= +github.com/fluxcd/image-automation-controller/api v0.28.0 h1:BYiOP28h/QRuZTZixlmMJ3RnQw+FGAn54nVsoUjNXi8= +github.com/fluxcd/image-automation-controller/api v0.28.0/go.mod h1:ztBI5X/dEzZuJOf7igqnx6ZvrSGtrXLmCvP5ieb3fWc= +github.com/fluxcd/image-reflector-controller/api v0.23.1 h1:ysYzSDhFV5JPzrhTnyabbjFne6GyXsH3Sk/Kd58+Rwk= +github.com/fluxcd/image-reflector-controller/api v0.23.1/go.mod h1:uomyKK0ZWFOsG40wqmCJvIN8OpAiPKFteXe+cdhB/Z0= +github.com/fluxcd/kustomize-controller/api v0.32.0 h1:5QGLV5xRI8S3tUFJNV+vVzy/pdl0d6Ua0AccWwGRKfs= +github.com/fluxcd/kustomize-controller/api v0.32.0/go.mod h1:t2pqIe1SMzdZIAG/aietrg3XpRXmpcubf0uxDJOryEA= +github.com/fluxcd/notification-controller/api v0.30.0 h1:m8wEBtPFcO9ZMSO0NLuONhIKDsiPFJ4ys3JYs4jlvCE= +github.com/fluxcd/notification-controller/api v0.30.0/go.mod h1:Ve4SE6jeiGlyItvHa7/UpTPOVC6ac5K76Frv1P7hqLw= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= github.com/fluxcd/pkg/apis/kustomize v0.7.0 h1:X2htBmJ91nGYv4d93gin665MFWKNGiNwUiZ08/Zz0hY= @@ -273,8 +273,8 @@ github.com/fluxcd/pkg/untar v0.2.0 h1:sJXU+FbJcNUb2ffLJNjeR3hwt3X2loVpOMlCUjyFw6 github.com/fluxcd/pkg/untar v0.2.0/go.mod h1:33AyoWaPpjX/xXpczcfhQh2AkB63TFwiR2YwROtv23E= github.com/fluxcd/pkg/version v0.2.0 h1:jG22c59Bsv6vL51N7Bqn8tjHArYOXrjbIkGArlIrv5w= github.com/fluxcd/pkg/version v0.2.0/go.mod h1:umN1VAOV0sB1JDVwb8eXZzuuqIAEku+y+vcCVBBUIf0= -github.com/fluxcd/source-controller/api v0.32.1 h1:PD8XEG4k5otsnusZZNEQ9XYY5udHoNgp5bX2yZHcb6k= -github.com/fluxcd/source-controller/api v0.32.1/go.mod h1:+DiGND4WSNdGkS7loPUroSarif6dHU4VlVgtLMRKCR8= +github.com/fluxcd/source-controller/api v0.33.0 h1:NZYU3+MNf9puyrTbBa7AJbBDlN7tmt0uw8lyye++5fE= +github.com/fluxcd/source-controller/api v0.33.0/go.mod h1:+DiGND4WSNdGkS7loPUroSarif6dHU4VlVgtLMRKCR8= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= diff --git a/manifests/bases/helm-controller/kustomization.yaml b/manifests/bases/helm-controller/kustomization.yaml index 44900345..559153c3 100644 --- a/manifests/bases/helm-controller/kustomization.yaml +++ b/manifests/bases/helm-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/helm-controller/releases/download/v0.27.0/helm-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.27.0/helm-controller.deployment.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.28.0/helm-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.28.0/helm-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/image-automation-controller/kustomization.yaml b/manifests/bases/image-automation-controller/kustomization.yaml index 92f41718..bcc3f9bb 100644 --- a/manifests/bases/image-automation-controller/kustomization.yaml +++ b/manifests/bases/image-automation-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.27.0/image-automation-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.27.0/image-automation-controller.deployment.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.28.0/image-automation-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.28.0/image-automation-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/image-reflector-controller/kustomization.yaml b/manifests/bases/image-reflector-controller/kustomization.yaml index 1d2e657e..bc2cbe2f 100644 --- a/manifests/bases/image-reflector-controller/kustomization.yaml +++ b/manifests/bases/image-reflector-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.23.0/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.23.0/image-reflector-controller.deployment.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.23.1/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.23.1/image-reflector-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/kustomize-controller/kustomization.yaml b/manifests/bases/kustomize-controller/kustomization.yaml index 1b7ac5b3..e02ce5fa 100644 --- a/manifests/bases/kustomize-controller/kustomization.yaml +++ b/manifests/bases/kustomize-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.31.0/kustomize-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.31.0/kustomize-controller.deployment.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.32.0/kustomize-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.32.0/kustomize-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/notification-controller/kustomization.yaml b/manifests/bases/notification-controller/kustomization.yaml index fa1efe39..77ce19a3 100644 --- a/manifests/bases/notification-controller/kustomization.yaml +++ b/manifests/bases/notification-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/notification-controller/releases/download/v0.29.0/notification-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v0.29.0/notification-controller.deployment.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.30.0/notification-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.30.0/notification-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index 61736565..9049750f 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.32.1/source-controller.crds.yaml -- https://github.com/fluxcd/source-controller/releases/download/v0.32.1/source-controller.deployment.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.33.0/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.33.0/source-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index 5017f479..91395422 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -1,9 +1,9 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.32.1/source-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.31.0/kustomize-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.27.0/helm-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v0.29.0/notification-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.23.0/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.27.0/image-automation-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.33.0/source-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.32.0/kustomize-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.28.0/helm-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.30.0/notification-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.23.1/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.28.0/image-automation-controller.crds.yaml From 7621418b72dc3af6a41a1d5be594ec228c88c04a Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Wed, 21 Dec 2022 10:31:33 +0000 Subject: [PATCH 342/818] tests/azure: update toolkit components - github.com/fluxcd/helm-controller/api to v0.28.0 - github.com/fluxcd/image-automation-controller/api to v0.28.0 - github.com/fluxcd/image-reflector-controller/api to v0.23.1 - github.com/fluxcd/kustomize-controller/api to v0.32.0 - github.com/fluxcd/notification-controller/api to v0.30.0 - github.com/fluxcd/source-controller/api to v0.33.0 Signed-off-by: Hidde Beydals --- tests/azure/go.mod | 14 +++++++------- tests/azure/go.sum | 24 ++++++++++++------------ 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/tests/azure/go.mod b/tests/azure/go.mod index d942fba7..23557c1a 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -1,20 +1,20 @@ module github.com/fluxcd/flux2/tests/azure -go 1.18 +go 1.19 require ( github.com/Azure/azure-event-hubs-go/v3 v3.4.0 github.com/fluxcd/go-git/v5 v5.0.0-20221206140629-ec778c2c37df - github.com/fluxcd/helm-controller/api v0.27.0 - github.com/fluxcd/image-automation-controller/api v0.27.0 - github.com/fluxcd/image-reflector-controller/api v0.23.0 - github.com/fluxcd/kustomize-controller/api v0.31.0 - github.com/fluxcd/notification-controller/api v0.29.1 + github.com/fluxcd/helm-controller/api v0.28.0 + github.com/fluxcd/image-automation-controller/api v0.28.0 + github.com/fluxcd/image-reflector-controller/api v0.23.1 + github.com/fluxcd/kustomize-controller/api v0.32.0 + github.com/fluxcd/notification-controller/api v0.30.0 github.com/fluxcd/pkg/apis/event v0.2.0 github.com/fluxcd/pkg/apis/meta v0.18.0 github.com/fluxcd/pkg/git v0.7.0 github.com/fluxcd/pkg/git/gogit v0.4.0 - github.com/fluxcd/source-controller/api v0.32.1 + github.com/fluxcd/source-controller/api v0.33.0 github.com/hashicorp/hc-install v0.4.0 github.com/hashicorp/terraform-exec v0.17.3 github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 diff --git a/tests/azure/go.sum b/tests/azure/go.sum index 030aacc4..f0914e6d 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -127,16 +127,16 @@ github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= github.com/fluxcd/go-git/v5 v5.0.0-20221206140629-ec778c2c37df h1:2BHXJp1PwX7D47Q2oaKDekn+BZVZCmxeCWNi+FyownE= github.com/fluxcd/go-git/v5 v5.0.0-20221206140629-ec778c2c37df/go.mod h1:raWgfUV7lDQVXp4QXUaeNNJkRVKz97UQuF+0kdY7Vmo= -github.com/fluxcd/helm-controller/api v0.27.0 h1:Ha5eCS9Xchz+TkbtUNJ6WIeUXYBR/ZXlGHAmHiqdrYY= -github.com/fluxcd/helm-controller/api v0.27.0/go.mod h1:/qCtlP718rveiAL7Mova4fGAk0aZv2qyYQn87zcUNhs= -github.com/fluxcd/image-automation-controller/api v0.27.0 h1:Dm2dY6JzTgoIGombOjl/h+ouxfmfjhjHFJQWBr8AlSE= -github.com/fluxcd/image-automation-controller/api v0.27.0/go.mod h1:XYlBpgZ8C2Kgm7SrQWIhDoNA3Hv1rLBZrI9u3s8z/Go= -github.com/fluxcd/image-reflector-controller/api v0.23.0 h1:Ww3EjZD6Xm+UebS+VdXh3UE7rkLSr/1ulIz0FLgUAf0= -github.com/fluxcd/image-reflector-controller/api v0.23.0/go.mod h1:uomyKK0ZWFOsG40wqmCJvIN8OpAiPKFteXe+cdhB/Z0= -github.com/fluxcd/kustomize-controller/api v0.31.0 h1:3KmZa/NYuC1zqc5Qp9jR3pxtkH5P/1UA513xUEJxkUY= -github.com/fluxcd/kustomize-controller/api v0.31.0/go.mod h1:t2pqIe1SMzdZIAG/aietrg3XpRXmpcubf0uxDJOryEA= -github.com/fluxcd/notification-controller/api v0.29.1 h1:gNLbJ18TprLPFVYNXpDRNOX42nzLBi/UYj/HPH19nAk= -github.com/fluxcd/notification-controller/api v0.29.1/go.mod h1:Ve4SE6jeiGlyItvHa7/UpTPOVC6ac5K76Frv1P7hqLw= +github.com/fluxcd/helm-controller/api v0.28.0 h1:X2l1iC7nb8YWnN7EsOZBOALYyhGn9BxI599kQog3SDw= +github.com/fluxcd/helm-controller/api v0.28.0/go.mod h1:/qCtlP718rveiAL7Mova4fGAk0aZv2qyYQn87zcUNhs= +github.com/fluxcd/image-automation-controller/api v0.28.0 h1:BYiOP28h/QRuZTZixlmMJ3RnQw+FGAn54nVsoUjNXi8= +github.com/fluxcd/image-automation-controller/api v0.28.0/go.mod h1:ztBI5X/dEzZuJOf7igqnx6ZvrSGtrXLmCvP5ieb3fWc= +github.com/fluxcd/image-reflector-controller/api v0.23.1 h1:ysYzSDhFV5JPzrhTnyabbjFne6GyXsH3Sk/Kd58+Rwk= +github.com/fluxcd/image-reflector-controller/api v0.23.1/go.mod h1:uomyKK0ZWFOsG40wqmCJvIN8OpAiPKFteXe+cdhB/Z0= +github.com/fluxcd/kustomize-controller/api v0.32.0 h1:5QGLV5xRI8S3tUFJNV+vVzy/pdl0d6Ua0AccWwGRKfs= +github.com/fluxcd/kustomize-controller/api v0.32.0/go.mod h1:t2pqIe1SMzdZIAG/aietrg3XpRXmpcubf0uxDJOryEA= +github.com/fluxcd/notification-controller/api v0.30.0 h1:m8wEBtPFcO9ZMSO0NLuONhIKDsiPFJ4ys3JYs4jlvCE= +github.com/fluxcd/notification-controller/api v0.30.0/go.mod h1:Ve4SE6jeiGlyItvHa7/UpTPOVC6ac5K76Frv1P7hqLw= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= github.com/fluxcd/pkg/apis/event v0.2.0 h1:cmAtkZfoEaNVYegI4SFM8XstdRAil3O9AoP+8fpbR34= @@ -154,8 +154,8 @@ github.com/fluxcd/pkg/ssh v0.7.0 h1:FX5ky8SU9dYwbM6zEIDR3TSveLF01iyS95CtB5Ykpno= github.com/fluxcd/pkg/ssh v0.7.0/go.mod h1:tCVZJI8jPOL0XCInJOrYGKapWA/zZCzqPtpiYUSQxww= github.com/fluxcd/pkg/version v0.2.0 h1:jG22c59Bsv6vL51N7Bqn8tjHArYOXrjbIkGArlIrv5w= github.com/fluxcd/pkg/version v0.2.0/go.mod h1:umN1VAOV0sB1JDVwb8eXZzuuqIAEku+y+vcCVBBUIf0= -github.com/fluxcd/source-controller/api v0.32.1 h1:PD8XEG4k5otsnusZZNEQ9XYY5udHoNgp5bX2yZHcb6k= -github.com/fluxcd/source-controller/api v0.32.1/go.mod h1:+DiGND4WSNdGkS7loPUroSarif6dHU4VlVgtLMRKCR8= +github.com/fluxcd/source-controller/api v0.33.0 h1:NZYU3+MNf9puyrTbBa7AJbBDlN7tmt0uw8lyye++5fE= +github.com/fluxcd/source-controller/api v0.33.0/go.mod h1:+DiGND4WSNdGkS7loPUroSarif6dHU4VlVgtLMRKCR8= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= From 96f177b101f2215105f745778172815e4095a2b1 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Wed, 21 Dec 2022 10:34:28 +0000 Subject: [PATCH 343/818] Update dependencies - github.com/distribution/distribution/v3 to v3.0.0-20221208165359-362910506bc2 - github.com/fluxcd/go-git/v5 to v5.0.0-20221219190809-2e5c9d01cfc4 - github.com/fluxcd/go-git-providers to v0.12.0 Signed-off-by: Hidde Beydals --- go.mod | 12 ++++++------ go.sum | 24 ++++++++++++------------ 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/go.mod b/go.mod index b603a67b..52376e28 100644 --- a/go.mod +++ b/go.mod @@ -6,9 +6,9 @@ require ( github.com/Masterminds/semver/v3 v3.2.0 github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4 github.com/cyphar/filepath-securejoin v0.2.3 - github.com/distribution/distribution/v3 v3.0.0-20221119093643-85d4039064cc - github.com/fluxcd/go-git-providers v0.11.0 - github.com/fluxcd/go-git/v5 v5.0.0-20221206140629-ec778c2c37df + github.com/distribution/distribution/v3 v3.0.0-20221208165359-362910506bc2 + github.com/fluxcd/go-git-providers v0.12.0 + github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 github.com/fluxcd/helm-controller/api v0.28.0 github.com/fluxcd/image-automation-controller/api v0.28.0 github.com/fluxcd/image-reflector-controller/api v0.23.1 @@ -100,7 +100,7 @@ require ( github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/chai2010/gettext-go v1.0.2 // indirect github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e // indirect - github.com/cloudflare/circl v1.3.0 // indirect + github.com/cloudflare/circl v1.3.1 // indirect github.com/containerd/stargz-snapshotter/estargz v0.12.1 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect @@ -142,7 +142,7 @@ require ( github.com/gonvenience/wrap v1.1.2 // indirect github.com/google/btree v1.1.2 // indirect github.com/google/gnostic v0.6.9 // indirect - github.com/google/go-github/v47 v47.1.0 // indirect + github.com/google/go-github/v48 v48.2.0 // indirect github.com/google/go-querystring v1.1.0 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect @@ -200,7 +200,7 @@ require ( github.com/texttheater/golang-levenshtein v1.0.1 // indirect github.com/vbatts/tar-split v0.11.2 // indirect github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74 // indirect - github.com/xanzy/go-gitlab v0.74.0 // indirect + github.com/xanzy/go-gitlab v0.77.0 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect github.com/xlab/treeprint v1.1.0 // indirect github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43 // indirect diff --git a/go.sum b/go.sum index 8ea1b14a..932cc7ce 100644 --- a/go.sum +++ b/go.sum @@ -165,8 +165,8 @@ github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1 h1:q763qf9huN11kDQavWs github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cloudflare/circl v1.1.0/go.mod h1:prBCrKB9DV4poKZY1l9zBXg2QJY7mvgRvtMxxK7fi4I= -github.com/cloudflare/circl v1.3.0 h1:Anq00jxDtoyX3+aCaYUZ0vXC5r4k4epberfWGDXV1zE= -github.com/cloudflare/circl v1.3.0/go.mod h1:+CauBF6R70Jqcyl8N2hC8pAXYbWkGIezuSbuGLtRhnw= +github.com/cloudflare/circl v1.3.1 h1:4OVCZRL62ijwEwxnF6I7hLwxvIYi3VaZt8TflkqtrtA= +github.com/cloudflare/circl v1.3.1/go.mod h1:+CauBF6R70Jqcyl8N2hC8pAXYbWkGIezuSbuGLtRhnw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= @@ -183,8 +183,8 @@ github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxG github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/distribution/distribution/v3 v3.0.0-20221119093643-85d4039064cc h1:uTb+Gcyvk7kSNmGQqr4S+gan39B12Y1KDsADtOQpSX4= -github.com/distribution/distribution/v3 v3.0.0-20221119093643-85d4039064cc/go.mod h1:4x0IxAMsdeCSTr9UopCvp6MnryD2nyRLycsOrgvveAs= +github.com/distribution/distribution/v3 v3.0.0-20221208165359-362910506bc2 h1:aBfCb7iqHmDEIp6fBvC/hQUddQfg+3qdYjwzaiP9Hnc= +github.com/distribution/distribution/v3 v3.0.0-20221208165359-362910506bc2/go.mod h1:WHNsWjnIn2V1LYOrME7e8KxSeKunYHsxEm4am0BUtcI= github.com/dnaeon/go-vcr v1.1.0 h1:ReYa/UBrRyQdant9B4fNHGoCNKw6qh6P0fsdGmZpR7c= github.com/docker/cli v20.10.20+incompatible h1:lWQbHSHUFs7KraSN2jOJK7zbMS2jNCHI4mt4xUFUVQ4= github.com/docker/cli v20.10.20+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= @@ -230,10 +230,10 @@ github.com/felixge/httpsnoop v1.0.1 h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8S github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0= github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= -github.com/fluxcd/go-git-providers v0.11.0 h1:uhERrv9LX1Z+R8w0MIXLajJZSBGEEqsJWCObItFYNW4= -github.com/fluxcd/go-git-providers v0.11.0/go.mod h1:d/Fu+FtvniNJo6B3HbeEQd4TDTUitsA/zjNOGbEjmDE= -github.com/fluxcd/go-git/v5 v5.0.0-20221206140629-ec778c2c37df h1:2BHXJp1PwX7D47Q2oaKDekn+BZVZCmxeCWNi+FyownE= -github.com/fluxcd/go-git/v5 v5.0.0-20221206140629-ec778c2c37df/go.mod h1:raWgfUV7lDQVXp4QXUaeNNJkRVKz97UQuF+0kdY7Vmo= +github.com/fluxcd/go-git-providers v0.12.0 h1:G9aK7+fZ8jTOTrGfIIWpx76TjdceshOwelazx3FHVZ8= +github.com/fluxcd/go-git-providers v0.12.0/go.mod h1:VEItGJ67Xc/7Cadh/oPMPUimXv75R0XqHFtF3J4tIdE= +github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 h1:Gm5sGGk+/Wq6RhX4xpCZ2IqjDp5XkjlhENaAuAlpdKc= +github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4/go.mod h1:raWgfUV7lDQVXp4QXUaeNNJkRVKz97UQuF+0kdY7Vmo= github.com/fluxcd/helm-controller/api v0.28.0 h1:X2l1iC7nb8YWnN7EsOZBOALYyhGn9BxI599kQog3SDw= github.com/fluxcd/helm-controller/api v0.28.0/go.mod h1:/qCtlP718rveiAL7Mova4fGAk0aZv2qyYQn87zcUNhs= github.com/fluxcd/image-automation-controller/api v0.28.0 h1:BYiOP28h/QRuZTZixlmMJ3RnQw+FGAn54nVsoUjNXi8= @@ -397,8 +397,8 @@ github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-containerregistry v0.12.1 h1:W1mzdNUTx4Zla4JaixCRLhORcR7G6KxE5hHl5fkPsp8= github.com/google/go-containerregistry v0.12.1/go.mod h1:sdIK+oHQO7B93xI8UweYdl887YhuIwg9vz8BSLH3+8k= -github.com/google/go-github/v47 v47.1.0 h1:Cacm/WxQBOa9lF0FT0EMjZ2BWMetQ1TQfyurn4yF1z8= -github.com/google/go-github/v47 v47.1.0/go.mod h1:VPZBXNbFSJGjyjFRUKo9vZGawTajnWzC/YjGw/oFKi0= +github.com/google/go-github/v48 v48.2.0 h1:68puzySE6WqUY9KWmpOsDEQfDZsso98rT6pZcz9HqcE= +github.com/google/go-github/v48 v48.2.0/go.mod h1:dDlehKBDo850ZPvCTK0sEqTCVWcrGl2LcDiajkYi89Y= github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= @@ -663,8 +663,8 @@ github.com/vbatts/tar-split v0.11.2 h1:Via6XqJr0hceW4wff3QRzD5gAk/tatMw/4ZA7cTlI github.com/vbatts/tar-split v0.11.2/go.mod h1:vV3ZuO2yWSVsz+pfFzDG/upWH1JhjOiEaWq6kXyQ3VI= github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74 h1:JwtAtbp7r/7QSyGz8mKUbYJBg2+6Cd7OjM8o/GNOcVo= github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74/go.mod h1:RmMWU37GKR2s6pgrIEB4ixgpVCt/cf7dnJv3fuH1J1c= -github.com/xanzy/go-gitlab v0.74.0 h1:Ha1cokbjn0PXy6B19t3W324dwM4AOT52fuHr7nERPrc= -github.com/xanzy/go-gitlab v0.74.0/go.mod h1:d/a0vswScO7Agg1CZNz15Ic6SSvBG9vfw8egL99t4kA= +github.com/xanzy/go-gitlab v0.77.0 h1:UrbGlxkWVCbkpa6Fk6cM8ARh+rLACWemkJnsawT7t98= +github.com/xanzy/go-gitlab v0.77.0/go.mod h1:d/a0vswScO7Agg1CZNz15Ic6SSvBG9vfw8egL99t4kA= github.com/xanzy/ssh-agent v0.3.0/go.mod h1:3s9xbODqPuuhK9JV1R321M/FlMZSBvE5aY6eAcqrDh0= github.com/xanzy/ssh-agent v0.3.2/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= From cb1b117d175ea26e867b6f466006119c6a1fdbf3 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Wed, 21 Dec 2022 10:50:10 +0000 Subject: [PATCH 344/818] tests/azure: update dependencies - github.com/fluxcd/go-git/v5 to v5.0.0-20221219190809-2e5c9d01cfc4 Signed-off-by: Hidde Beydals --- tests/azure/go.mod | 20 +++++++++++--------- tests/azure/go.sum | 31 +++++++++++++++++++------------ 2 files changed, 30 insertions(+), 21 deletions(-) diff --git a/tests/azure/go.mod b/tests/azure/go.mod index 23557c1a..d3e7b8ea 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -4,7 +4,7 @@ go 1.19 require ( github.com/Azure/azure-event-hubs-go/v3 v3.4.0 - github.com/fluxcd/go-git/v5 v5.0.0-20221206140629-ec778c2c37df + github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 github.com/fluxcd/helm-controller/api v0.28.0 github.com/fluxcd/image-automation-controller/api v0.28.0 github.com/fluxcd/image-reflector-controller/api v0.23.1 @@ -46,10 +46,10 @@ require ( github.com/Azure/go-autorest/logger v0.2.1 // indirect github.com/Azure/go-autorest/tracing v0.6.0 // indirect github.com/Masterminds/semver/v3 v3.1.1 // indirect - github.com/Microsoft/go-winio v0.5.2 // indirect + github.com/Microsoft/go-winio v0.6.0 // indirect github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4 // indirect github.com/acomagu/bufpipe v1.0.3 // indirect - github.com/cloudflare/circl v1.3.0 // indirect + github.com/cloudflare/circl v1.3.1 // indirect github.com/cyphar/filepath-securejoin v0.2.3 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/devigned/tab v0.1.1 // indirect @@ -97,17 +97,19 @@ require ( github.com/prometheus/client_golang v1.14.0 // indirect github.com/sergi/go-diff v1.2.0 // indirect github.com/skeema/knownhosts v1.1.0 // indirect - github.com/xanzy/ssh-agent v0.3.2 // indirect + github.com/xanzy/ssh-agent v0.3.3 // indirect github.com/zclconf/go-cty v1.11.0 // indirect go.uber.org/atomic v1.10.0 // indirect go.uber.org/zap v1.23.0 // indirect - golang.org/x/crypto v0.2.0 // indirect - golang.org/x/net v0.2.0 // indirect + golang.org/x/crypto v0.4.0 // indirect + golang.org/x/mod v0.7.0 // indirect + golang.org/x/net v0.4.0 // indirect golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b // indirect - golang.org/x/sys v0.2.0 // indirect - golang.org/x/term v0.2.0 // indirect - golang.org/x/text v0.4.0 // indirect + golang.org/x/sys v0.3.0 // indirect + golang.org/x/term v0.3.0 // indirect + golang.org/x/text v0.5.0 // indirect golang.org/x/time v0.2.0 // indirect + golang.org/x/tools v0.4.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/protobuf v1.28.1 // indirect gopkg.in/inf.v0 v0.9.1 // indirect diff --git a/tests/azure/go.sum b/tests/azure/go.sum index f0914e6d..a14e166e 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -67,8 +67,9 @@ github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030I github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= -github.com/Microsoft/go-winio v0.5.2 h1:a9IhgEQBCUEk6QCdml9CiJGhAws+YwffDHEMp1VMrpA= github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= +github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= +github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4 h1:ra2OtmuW0AE5csawV4YXMNGNQQXvLRps3z2Z59OPO+I= @@ -95,8 +96,8 @@ github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5P github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cloudflare/circl v1.1.0/go.mod h1:prBCrKB9DV4poKZY1l9zBXg2QJY7mvgRvtMxxK7fi4I= -github.com/cloudflare/circl v1.3.0 h1:Anq00jxDtoyX3+aCaYUZ0vXC5r4k4epberfWGDXV1zE= -github.com/cloudflare/circl v1.3.0/go.mod h1:+CauBF6R70Jqcyl8N2hC8pAXYbWkGIezuSbuGLtRhnw= +github.com/cloudflare/circl v1.3.1 h1:4OVCZRL62ijwEwxnF6I7hLwxvIYi3VaZt8TflkqtrtA= +github.com/cloudflare/circl v1.3.1/go.mod h1:+CauBF6R70Jqcyl8N2hC8pAXYbWkGIezuSbuGLtRhnw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= @@ -125,8 +126,8 @@ github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJ github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0= github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= -github.com/fluxcd/go-git/v5 v5.0.0-20221206140629-ec778c2c37df h1:2BHXJp1PwX7D47Q2oaKDekn+BZVZCmxeCWNi+FyownE= -github.com/fluxcd/go-git/v5 v5.0.0-20221206140629-ec778c2c37df/go.mod h1:raWgfUV7lDQVXp4QXUaeNNJkRVKz97UQuF+0kdY7Vmo= +github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 h1:Gm5sGGk+/Wq6RhX4xpCZ2IqjDp5XkjlhENaAuAlpdKc= +github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4/go.mod h1:raWgfUV7lDQVXp4QXUaeNNJkRVKz97UQuF+0kdY7Vmo= github.com/fluxcd/helm-controller/api v0.28.0 h1:X2l1iC7nb8YWnN7EsOZBOALYyhGn9BxI599kQog3SDw= github.com/fluxcd/helm-controller/api v0.28.0/go.mod h1:/qCtlP718rveiAL7Mova4fGAk0aZv2qyYQn87zcUNhs= github.com/fluxcd/image-automation-controller/api v0.28.0 h1:BYiOP28h/QRuZTZixlmMJ3RnQw+FGAn54nVsoUjNXi8= @@ -387,8 +388,9 @@ github.com/vmihailenco/tagparser v0.1.1/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgq github.com/whilp/git-urls v1.0.0 h1:95f6UMWN5FKW71ECsXRUd3FVYiXdrE7aX4NZKcPmIjU= github.com/whilp/git-urls v1.0.0/go.mod h1:J16SAmobsqc3Qcy98brfl5f5+e0clUvg1krgwk/qCfE= github.com/xanzy/ssh-agent v0.3.0/go.mod h1:3s9xbODqPuuhK9JV1R321M/FlMZSBvE5aY6eAcqrDh0= -github.com/xanzy/ssh-agent v0.3.2 h1:eKj4SX2Fe7mui28ZgnFW5fmTz1EIr7ugo5s6wDxdHBM= github.com/xanzy/ssh-agent v0.3.2/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= +github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= +github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= @@ -447,6 +449,8 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.7.0 h1:LapD9S96VoQRhi/GrNTqeBJFrUjs5UHCAtTlgwA5oZA= +golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180811021610-c39426892332/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -482,8 +486,8 @@ golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.2.0 h1:sZfSu1wtKLGlWI4ZZayP0ck9Y73K1ynO6gqzTdBVdPU= -golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= +golang.org/x/net v0.4.0 h1:Q5QPcMlvfxFTAPV0+07Xz/MpK9NTXu2VDUuy0FeMfaU= +golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= 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= @@ -501,6 +505,7 @@ golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -548,14 +553,14 @@ golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.2.0 h1:ljd4t30dBnAvMZaQCevtY0xLLD0A+bRZXbgLMLU1F/A= -golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.3.0 h1:w8ZOecv6NaNa/zC8944JTU3vz4u6Lagfk4RPQxv92NQ= +golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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= golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.2.0 h1:z85xZCsEl7bi/KwbNADeBYoOP0++7W1ipu+aGnpwzRM= -golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= +golang.org/x/term v0.3.0 h1:qoo4akIqOcDME5bhc/NgxUdovd6BSS2uMsVjB56q1xI= +golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -605,6 +610,8 @@ golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.4.0 h1:7mTAgkunk3fr4GAloyyCasadO6h9zSsQZbwvcaIciV4= +golang.org/x/tools v0.4.0/go.mod h1:UE5sM2OK9E/d67R0ANs2xJizIymRP5gJU295PvKXxjQ= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= From 21a943e6f9db133cbe3023c21b5ee071ea56c460 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 21 Dec 2022 13:49:05 +0200 Subject: [PATCH 345/818] e2e: Update Kubernetes to v1.23.13 on AMD64 Signed-off-by: Stefan Prodan --- .github/workflows/e2e.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index fdc7c52d..7eb4b967 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -36,7 +36,7 @@ jobs: uses: engineerd/setup-kind@aa272fe2a7309878ffc2a81c56cfe3ef108ae7d0 # v0.5.0 with: version: v0.11.1 - image: kindest/node:v1.20.7 + image: kindest/node:v1.23.13 config: .github/kind/config.yaml # disable KIND-net - name: Setup Calico for network policy run: | From 7be91884b795c24d95408a8925ad63955a235119 Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Wed, 21 Dec 2022 14:38:45 +0000 Subject: [PATCH 346/818] Update toolkit components - notification-controller to v0.30.1 https://github.com/fluxcd/notification-controller/blob/v0.30.1/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 2 +- go.sum | 4 ++-- manifests/bases/notification-controller/kustomization.yaml | 4 ++-- manifests/crds/kustomization.yaml | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index 52376e28..481a67c4 100644 --- a/go.mod +++ b/go.mod @@ -13,7 +13,7 @@ require ( github.com/fluxcd/image-automation-controller/api v0.28.0 github.com/fluxcd/image-reflector-controller/api v0.23.1 github.com/fluxcd/kustomize-controller/api v0.32.0 - github.com/fluxcd/notification-controller/api v0.30.0 + github.com/fluxcd/notification-controller/api v0.30.1 github.com/fluxcd/pkg/apis/meta v0.18.0 github.com/fluxcd/pkg/git v0.7.0 github.com/fluxcd/pkg/git/gogit v0.4.0 diff --git a/go.sum b/go.sum index 932cc7ce..817ab8bb 100644 --- a/go.sum +++ b/go.sum @@ -242,8 +242,8 @@ github.com/fluxcd/image-reflector-controller/api v0.23.1 h1:ysYzSDhFV5JPzrhTnyab github.com/fluxcd/image-reflector-controller/api v0.23.1/go.mod h1:uomyKK0ZWFOsG40wqmCJvIN8OpAiPKFteXe+cdhB/Z0= github.com/fluxcd/kustomize-controller/api v0.32.0 h1:5QGLV5xRI8S3tUFJNV+vVzy/pdl0d6Ua0AccWwGRKfs= github.com/fluxcd/kustomize-controller/api v0.32.0/go.mod h1:t2pqIe1SMzdZIAG/aietrg3XpRXmpcubf0uxDJOryEA= -github.com/fluxcd/notification-controller/api v0.30.0 h1:m8wEBtPFcO9ZMSO0NLuONhIKDsiPFJ4ys3JYs4jlvCE= -github.com/fluxcd/notification-controller/api v0.30.0/go.mod h1:Ve4SE6jeiGlyItvHa7/UpTPOVC6ac5K76Frv1P7hqLw= +github.com/fluxcd/notification-controller/api v0.30.1 h1:7523fRatqKJPeZcJsR7D0PW/h5ND/DeNgHLzEfOFmA0= +github.com/fluxcd/notification-controller/api v0.30.1/go.mod h1:Ve4SE6jeiGlyItvHa7/UpTPOVC6ac5K76Frv1P7hqLw= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= github.com/fluxcd/pkg/apis/kustomize v0.7.0 h1:X2htBmJ91nGYv4d93gin665MFWKNGiNwUiZ08/Zz0hY= diff --git a/manifests/bases/notification-controller/kustomization.yaml b/manifests/bases/notification-controller/kustomization.yaml index 77ce19a3..d9ea5088 100644 --- a/manifests/bases/notification-controller/kustomization.yaml +++ b/manifests/bases/notification-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/notification-controller/releases/download/v0.30.0/notification-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v0.30.0/notification-controller.deployment.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.30.1/notification-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.30.1/notification-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index 91395422..747af16f 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -4,6 +4,6 @@ resources: - https://github.com/fluxcd/source-controller/releases/download/v0.33.0/source-controller.crds.yaml - https://github.com/fluxcd/kustomize-controller/releases/download/v0.32.0/kustomize-controller.crds.yaml - https://github.com/fluxcd/helm-controller/releases/download/v0.28.0/helm-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v0.30.0/notification-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.30.1/notification-controller.crds.yaml - https://github.com/fluxcd/image-reflector-controller/releases/download/v0.23.1/image-reflector-controller.crds.yaml - https://github.com/fluxcd/image-automation-controller/releases/download/v0.28.0/image-automation-controller.crds.yaml From f9e69089ea9086917e41fb6e48a7ffb74e110028 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 21 Dec 2022 17:14:18 +0200 Subject: [PATCH 347/818] Update CLI commands to Notification API v1beta2 Signed-off-by: Stefan Prodan --- cmd/flux/alert.go | 2 +- cmd/flux/alert_provider.go | 2 +- cmd/flux/create_alert.go | 2 +- cmd/flux/create_alertprovider.go | 2 +- cmd/flux/create_receiver.go | 2 +- cmd/flux/delete_alert.go | 2 +- cmd/flux/delete_alertprovider.go | 2 +- cmd/flux/delete_receiver.go | 2 +- cmd/flux/export_alert.go | 2 +- cmd/flux/export_alertprovider.go | 2 +- cmd/flux/export_receiver.go | 2 +- cmd/flux/get_alert.go | 2 +- cmd/flux/get_alertprovider.go | 2 +- cmd/flux/get_all.go | 2 +- cmd/flux/get_receiver.go | 2 +- cmd/flux/receiver.go | 2 +- cmd/flux/reconcile.go | 4 ++-- cmd/flux/reconcile_alert.go | 2 +- cmd/flux/reconcile_alertprovider.go | 2 +- cmd/flux/reconcile_receiver.go | 2 +- cmd/flux/resume_alert.go | 2 +- cmd/flux/resume_receiver.go | 2 +- cmd/flux/suspend_alert.go | 2 +- cmd/flux/suspend_receiver.go | 2 +- cmd/flux/testdata/export/alert.yaml | 2 +- cmd/flux/testdata/export/objects.yaml | 6 +++--- cmd/flux/testdata/export/provider.yaml | 3 ++- cmd/flux/testdata/export/receiver.yaml | 3 ++- internal/utils/utils.go | 2 +- pkg/uninstall/uninstall.go | 2 +- rfcs/0001-authorization/README.md | 4 ++-- tests/azure/azure_test.go | 2 +- tests/azure/go.mod | 2 +- tests/azure/go.sum | 4 ++-- tests/azure/util_test.go | 2 +- 35 files changed, 42 insertions(+), 40 deletions(-) diff --git a/cmd/flux/alert.go b/cmd/flux/alert.go index a0a5b0e6..366a9a4a 100644 --- a/cmd/flux/alert.go +++ b/cmd/flux/alert.go @@ -19,7 +19,7 @@ package main import ( "sigs.k8s.io/controller-runtime/pkg/client" - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta1" + notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" ) // notificationv1.Alert diff --git a/cmd/flux/alert_provider.go b/cmd/flux/alert_provider.go index d434ffac..3ee071ce 100644 --- a/cmd/flux/alert_provider.go +++ b/cmd/flux/alert_provider.go @@ -19,7 +19,7 @@ package main import ( "sigs.k8s.io/controller-runtime/pkg/client" - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta1" + notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" ) // notificationv1.Provider diff --git a/cmd/flux/create_alert.go b/cmd/flux/create_alert.go index 282f8a70..79a3bf3f 100644 --- a/cmd/flux/create_alert.go +++ b/cmd/flux/create_alert.go @@ -28,7 +28,7 @@ import ( "k8s.io/apimachinery/pkg/util/wait" "sigs.k8s.io/controller-runtime/pkg/client" - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta1" + notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" "github.com/fluxcd/pkg/apis/meta" "github.com/fluxcd/flux2/internal/utils" diff --git a/cmd/flux/create_alertprovider.go b/cmd/flux/create_alertprovider.go index fe4d0651..915997c4 100644 --- a/cmd/flux/create_alertprovider.go +++ b/cmd/flux/create_alertprovider.go @@ -28,7 +28,7 @@ import ( "k8s.io/apimachinery/pkg/util/wait" "sigs.k8s.io/controller-runtime/pkg/client" - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta1" + notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" "github.com/fluxcd/pkg/apis/meta" "github.com/fluxcd/flux2/internal/utils" diff --git a/cmd/flux/create_receiver.go b/cmd/flux/create_receiver.go index 47b2570f..f8669172 100644 --- a/cmd/flux/create_receiver.go +++ b/cmd/flux/create_receiver.go @@ -28,7 +28,7 @@ import ( "k8s.io/apimachinery/pkg/util/wait" "sigs.k8s.io/controller-runtime/pkg/client" - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta1" + notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" "github.com/fluxcd/pkg/apis/meta" "github.com/fluxcd/flux2/internal/utils" diff --git a/cmd/flux/delete_alert.go b/cmd/flux/delete_alert.go index c9e6f1ab..91077ca0 100644 --- a/cmd/flux/delete_alert.go +++ b/cmd/flux/delete_alert.go @@ -19,7 +19,7 @@ package main import ( "github.com/spf13/cobra" - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta1" + notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" ) var deleteAlertCmd = &cobra.Command{ diff --git a/cmd/flux/delete_alertprovider.go b/cmd/flux/delete_alertprovider.go index 08f0526c..8cd2c5d2 100644 --- a/cmd/flux/delete_alertprovider.go +++ b/cmd/flux/delete_alertprovider.go @@ -19,7 +19,7 @@ package main import ( "github.com/spf13/cobra" - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta1" + notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" ) var deleteAlertProviderCmd = &cobra.Command{ diff --git a/cmd/flux/delete_receiver.go b/cmd/flux/delete_receiver.go index bfdc5dbc..42eb6ca6 100644 --- a/cmd/flux/delete_receiver.go +++ b/cmd/flux/delete_receiver.go @@ -19,7 +19,7 @@ package main import ( "github.com/spf13/cobra" - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta1" + notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" ) var deleteReceiverCmd = &cobra.Command{ diff --git a/cmd/flux/export_alert.go b/cmd/flux/export_alert.go index 9c358e0c..cf125d89 100644 --- a/cmd/flux/export_alert.go +++ b/cmd/flux/export_alert.go @@ -20,7 +20,7 @@ import ( "github.com/spf13/cobra" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta1" + notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" ) var exportAlertCmd = &cobra.Command{ diff --git a/cmd/flux/export_alertprovider.go b/cmd/flux/export_alertprovider.go index eb47294f..f6caaad3 100644 --- a/cmd/flux/export_alertprovider.go +++ b/cmd/flux/export_alertprovider.go @@ -20,7 +20,7 @@ import ( "github.com/spf13/cobra" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta1" + notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" ) var exportAlertProviderCmd = &cobra.Command{ diff --git a/cmd/flux/export_receiver.go b/cmd/flux/export_receiver.go index 0a79d853..22526f7e 100644 --- a/cmd/flux/export_receiver.go +++ b/cmd/flux/export_receiver.go @@ -20,7 +20,7 @@ import ( "github.com/spf13/cobra" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta1" + notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" ) var exportReceiverCmd = &cobra.Command{ diff --git a/cmd/flux/get_alert.go b/cmd/flux/get_alert.go index b23a7637..64c170c5 100644 --- a/cmd/flux/get_alert.go +++ b/cmd/flux/get_alert.go @@ -24,7 +24,7 @@ import ( "github.com/spf13/cobra" "k8s.io/apimachinery/pkg/runtime" - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta1" + notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" ) var getAlertCmd = &cobra.Command{ diff --git a/cmd/flux/get_alertprovider.go b/cmd/flux/get_alertprovider.go index cb27973f..c87b9253 100644 --- a/cmd/flux/get_alertprovider.go +++ b/cmd/flux/get_alertprovider.go @@ -22,7 +22,7 @@ import ( "github.com/spf13/cobra" "k8s.io/apimachinery/pkg/runtime" - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta1" + notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" ) var getAlertProviderCmd = &cobra.Command{ diff --git a/cmd/flux/get_all.go b/cmd/flux/get_all.go index 5d4d03f2..c4567f04 100644 --- a/cmd/flux/get_all.go +++ b/cmd/flux/get_all.go @@ -23,7 +23,7 @@ import ( helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta1" + notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" ) var getAllCmd = &cobra.Command{ diff --git a/cmd/flux/get_receiver.go b/cmd/flux/get_receiver.go index ef7eb376..0123b664 100644 --- a/cmd/flux/get_receiver.go +++ b/cmd/flux/get_receiver.go @@ -24,7 +24,7 @@ import ( "github.com/spf13/cobra" "k8s.io/apimachinery/pkg/runtime" - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta1" + notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" ) var getReceiverCmd = &cobra.Command{ diff --git a/cmd/flux/receiver.go b/cmd/flux/receiver.go index 7fa5db77..f97bcb19 100644 --- a/cmd/flux/receiver.go +++ b/cmd/flux/receiver.go @@ -19,7 +19,7 @@ package main import ( "sigs.k8s.io/controller-runtime/pkg/client" - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta1" + notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" ) // notificationv1.Receiver diff --git a/cmd/flux/reconcile.go b/cmd/flux/reconcile.go index d116dddb..7c41fee9 100644 --- a/cmd/flux/reconcile.go +++ b/cmd/flux/reconcile.go @@ -30,7 +30,7 @@ import ( "k8s.io/client-go/util/retry" "sigs.k8s.io/controller-runtime/pkg/client" - "github.com/fluxcd/notification-controller/api/v1beta1" + notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" "github.com/fluxcd/pkg/apis/meta" "github.com/fluxcd/flux2/internal/utils" @@ -111,7 +111,7 @@ func (reconcile reconcileCommand) run(cmd *cobra.Command, args []string) error { } logger.Successf("%s annotated", reconcile.kind) - if reconcile.kind == v1beta1.AlertKind || reconcile.kind == v1beta1.ReceiverKind { + if reconcile.kind == notificationv1.AlertKind || reconcile.kind == notificationv1.ReceiverKind { if err = wait.PollImmediate(rootArgs.pollInterval, rootArgs.timeout, isReconcileReady(ctx, kubeClient, namespacedName, reconcile.object)); err != nil { return err diff --git a/cmd/flux/reconcile_alert.go b/cmd/flux/reconcile_alert.go index 6027da3e..655b366f 100644 --- a/cmd/flux/reconcile_alert.go +++ b/cmd/flux/reconcile_alert.go @@ -19,7 +19,7 @@ package main import ( "github.com/spf13/cobra" - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta1" + notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" ) var reconcileAlertCmd = &cobra.Command{ diff --git a/cmd/flux/reconcile_alertprovider.go b/cmd/flux/reconcile_alertprovider.go index f5399802..86a737b7 100644 --- a/cmd/flux/reconcile_alertprovider.go +++ b/cmd/flux/reconcile_alertprovider.go @@ -25,7 +25,7 @@ import ( "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/wait" - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta1" + notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" "github.com/fluxcd/pkg/apis/meta" "github.com/fluxcd/flux2/internal/utils" diff --git a/cmd/flux/reconcile_receiver.go b/cmd/flux/reconcile_receiver.go index 6f13a35f..4c43f80f 100644 --- a/cmd/flux/reconcile_receiver.go +++ b/cmd/flux/reconcile_receiver.go @@ -25,7 +25,7 @@ import ( "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/wait" - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta1" + notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" "github.com/fluxcd/pkg/apis/meta" "github.com/fluxcd/flux2/internal/utils" diff --git a/cmd/flux/resume_alert.go b/cmd/flux/resume_alert.go index bede1e3e..5b86fb45 100644 --- a/cmd/flux/resume_alert.go +++ b/cmd/flux/resume_alert.go @@ -19,7 +19,7 @@ package main import ( "github.com/spf13/cobra" - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta1" + notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" ) var resumeAlertCmd = &cobra.Command{ diff --git a/cmd/flux/resume_receiver.go b/cmd/flux/resume_receiver.go index d4d3c64b..1aa8993d 100644 --- a/cmd/flux/resume_receiver.go +++ b/cmd/flux/resume_receiver.go @@ -19,7 +19,7 @@ package main import ( "github.com/spf13/cobra" - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta1" + notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" ) var resumeReceiverCmd = &cobra.Command{ diff --git a/cmd/flux/suspend_alert.go b/cmd/flux/suspend_alert.go index 42ee60df..c922be98 100644 --- a/cmd/flux/suspend_alert.go +++ b/cmd/flux/suspend_alert.go @@ -19,7 +19,7 @@ package main import ( "github.com/spf13/cobra" - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta1" + notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" ) var suspendAlertCmd = &cobra.Command{ diff --git a/cmd/flux/suspend_receiver.go b/cmd/flux/suspend_receiver.go index 2edf1572..fec5cc88 100644 --- a/cmd/flux/suspend_receiver.go +++ b/cmd/flux/suspend_receiver.go @@ -19,7 +19,7 @@ package main import ( "github.com/spf13/cobra" - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta1" + notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" ) var suspendReceiverCmd = &cobra.Command{ diff --git a/cmd/flux/testdata/export/alert.yaml b/cmd/flux/testdata/export/alert.yaml index a8a7883a..930a2853 100644 --- a/cmd/flux/testdata/export/alert.yaml +++ b/cmd/flux/testdata/export/alert.yaml @@ -1,5 +1,5 @@ --- -apiVersion: notification.toolkit.fluxcd.io/v1beta1 +apiVersion: notification.toolkit.fluxcd.io/v1beta2 kind: Alert metadata: name: flux-system diff --git a/cmd/flux/testdata/export/objects.yaml b/cmd/flux/testdata/export/objects.yaml index 6d46e187..426a6e00 100644 --- a/cmd/flux/testdata/export/objects.yaml +++ b/cmd/flux/testdata/export/objects.yaml @@ -4,7 +4,7 @@ kind: Namespace metadata: name: {{ .fluxns }} --- -apiVersion: notification.toolkit.fluxcd.io/v1beta1 +apiVersion: notification.toolkit.fluxcd.io/v1beta2 kind: Provider metadata: name: slack @@ -14,7 +14,7 @@ spec: channel: 'A channel with spacess' address: https://hooks.slack.com/services/mock --- -apiVersion: notification.toolkit.fluxcd.io/v1beta1 +apiVersion: notification.toolkit.fluxcd.io/v1beta2 kind: Alert metadata: name: flux-system @@ -97,7 +97,7 @@ spec: interval: 5m prune: true --- -apiVersion: notification.toolkit.fluxcd.io/v1beta1 +apiVersion: notification.toolkit.fluxcd.io/v1beta2 kind: Receiver metadata: name: flux-system diff --git a/cmd/flux/testdata/export/provider.yaml b/cmd/flux/testdata/export/provider.yaml index ce91902f..d62e6ba5 100644 --- a/cmd/flux/testdata/export/provider.yaml +++ b/cmd/flux/testdata/export/provider.yaml @@ -1,5 +1,5 @@ --- -apiVersion: notification.toolkit.fluxcd.io/v1beta1 +apiVersion: notification.toolkit.fluxcd.io/v1beta2 kind: Provider metadata: name: slack @@ -7,5 +7,6 @@ metadata: spec: address: https://hooks.slack.com/services/mock channel: A channel with spacess + interval: 10m0s type: slack diff --git a/cmd/flux/testdata/export/receiver.yaml b/cmd/flux/testdata/export/receiver.yaml index e4fefadb..19df2429 100644 --- a/cmd/flux/testdata/export/receiver.yaml +++ b/cmd/flux/testdata/export/receiver.yaml @@ -1,5 +1,5 @@ --- -apiVersion: notification.toolkit.fluxcd.io/v1beta1 +apiVersion: notification.toolkit.fluxcd.io/v1beta2 kind: Receiver metadata: name: flux-system @@ -8,6 +8,7 @@ spec: events: - ping - push + interval: 10m0s resources: - kind: GitRepository name: flux-system diff --git a/internal/utils/utils.go b/internal/utils/utils.go index c41b2f4e..a1cb9a3d 100644 --- a/internal/utils/utils.go +++ b/internal/utils/utils.go @@ -45,7 +45,7 @@ import ( imageautov1 "github.com/fluxcd/image-automation-controller/api/v1beta1" imagereflectv1 "github.com/fluxcd/image-reflector-controller/api/v1beta1" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta1" + notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" "github.com/fluxcd/pkg/apis/meta" runclient "github.com/fluxcd/pkg/runtime/client" "github.com/fluxcd/pkg/version" diff --git a/pkg/uninstall/uninstall.go b/pkg/uninstall/uninstall.go index 07f6ed49..0ec48176 100644 --- a/pkg/uninstall/uninstall.go +++ b/pkg/uninstall/uninstall.go @@ -34,7 +34,7 @@ import ( autov1 "github.com/fluxcd/image-automation-controller/api/v1beta1" imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta1" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta1" + notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" ) diff --git a/rfcs/0001-authorization/README.md b/rfcs/0001-authorization/README.md index 4410dd4d..9f5f8cb7 100644 --- a/rfcs/0001-authorization/README.md +++ b/rfcs/0001-authorization/README.md @@ -109,8 +109,8 @@ fields that are not restricted to the namespace of the containing object, listed | | `.spec.targetNamespace` | This gives the namespace into which a Helm chart is installed (note: using impersonation) | | | `.spec.storageNamespace` | This gives the namespace in which the record of a Helm install is created (note: using impersonation) | | | `.spec.chart.spec.sourceRef` | This is a reference (in the created `HelmChart` object) that can include a namespace | -| **`alerts.notification.toolkit.fluxcd.io/v1beta1`** | `.spec.eventSources` | Items are references that can include a namespace | -| **`receivers.notification.toolkit.fluxcd.io/v1beta1`** | `.spec.resources` | Items in this field are references that can include a namespace | +| **`alerts.notification.toolkit.fluxcd.io/v1beta2`** | `.spec.eventSources` | Items are references that can include a namespace | +| **`receivers.notification.toolkit.fluxcd.io/v1beta2`** | `.spec.resources` | Items in this field are references that can include a namespace | | **`imagepolicies.image.toolkit.fluxcd.io/v1beta1`** | `.spec.imageRepositoryRef` | This reference can include a namespace[1] | [1] This particular cross-namespace reference is subject to additional access control; see "Access diff --git a/tests/azure/azure_test.go b/tests/azure/azure_test.go index 492fd4f8..30fde85a 100644 --- a/tests/azure/azure_test.go +++ b/tests/azure/azure_test.go @@ -52,7 +52,7 @@ import ( automationv1beta1 "github.com/fluxcd/image-automation-controller/api/v1beta1" reflectorv1beta1 "github.com/fluxcd/image-reflector-controller/api/v1beta1" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" - notiv1beta1 "github.com/fluxcd/notification-controller/api/v1beta1" + notiv1beta1 "github.com/fluxcd/notification-controller/api/v1beta2" eventv1 "github.com/fluxcd/pkg/apis/event/v1beta1" "github.com/fluxcd/pkg/apis/meta" sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" diff --git a/tests/azure/go.mod b/tests/azure/go.mod index d3e7b8ea..c35d5b24 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -9,7 +9,7 @@ require ( github.com/fluxcd/image-automation-controller/api v0.28.0 github.com/fluxcd/image-reflector-controller/api v0.23.1 github.com/fluxcd/kustomize-controller/api v0.32.0 - github.com/fluxcd/notification-controller/api v0.30.0 + github.com/fluxcd/notification-controller/api v0.30.1 github.com/fluxcd/pkg/apis/event v0.2.0 github.com/fluxcd/pkg/apis/meta v0.18.0 github.com/fluxcd/pkg/git v0.7.0 diff --git a/tests/azure/go.sum b/tests/azure/go.sum index a14e166e..94ef3e8b 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -136,8 +136,8 @@ github.com/fluxcd/image-reflector-controller/api v0.23.1 h1:ysYzSDhFV5JPzrhTnyab github.com/fluxcd/image-reflector-controller/api v0.23.1/go.mod h1:uomyKK0ZWFOsG40wqmCJvIN8OpAiPKFteXe+cdhB/Z0= github.com/fluxcd/kustomize-controller/api v0.32.0 h1:5QGLV5xRI8S3tUFJNV+vVzy/pdl0d6Ua0AccWwGRKfs= github.com/fluxcd/kustomize-controller/api v0.32.0/go.mod h1:t2pqIe1SMzdZIAG/aietrg3XpRXmpcubf0uxDJOryEA= -github.com/fluxcd/notification-controller/api v0.30.0 h1:m8wEBtPFcO9ZMSO0NLuONhIKDsiPFJ4ys3JYs4jlvCE= -github.com/fluxcd/notification-controller/api v0.30.0/go.mod h1:Ve4SE6jeiGlyItvHa7/UpTPOVC6ac5K76Frv1P7hqLw= +github.com/fluxcd/notification-controller/api v0.30.1 h1:7523fRatqKJPeZcJsR7D0PW/h5ND/DeNgHLzEfOFmA0= +github.com/fluxcd/notification-controller/api v0.30.1/go.mod h1:Ve4SE6jeiGlyItvHa7/UpTPOVC6ac5K76Frv1P7hqLw= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= github.com/fluxcd/pkg/apis/event v0.2.0 h1:cmAtkZfoEaNVYegI4SFM8XstdRAil3O9AoP+8fpbR34= diff --git a/tests/azure/util_test.go b/tests/azure/util_test.go index 2983b403..f06cfccd 100644 --- a/tests/azure/util_test.go +++ b/tests/azure/util_test.go @@ -44,7 +44,7 @@ import ( automationv1beta1 "github.com/fluxcd/image-automation-controller/api/v1beta1" reflectorv1beta1 "github.com/fluxcd/image-reflector-controller/api/v1beta1" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" - notiv1beta1 "github.com/fluxcd/notification-controller/api/v1beta1" + notiv1beta1 "github.com/fluxcd/notification-controller/api/v1beta2" "github.com/fluxcd/pkg/apis/meta" "github.com/fluxcd/pkg/git" "github.com/fluxcd/pkg/git/gogit" From be361a44d5e14e673d73f47e1e3c2ea28ee5d02b Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Thu, 22 Dec 2022 13:32:05 +0000 Subject: [PATCH 348/818] Update toolkit components - helm-controller to v0.28.1 https://github.com/fluxcd/helm-controller/blob/v0.28.1/CHANGELOG.md - notification-controller to v0.30.2 https://github.com/fluxcd/notification-controller/blob/v0.30.2/CHANGELOG.md Signed-off-by: Stefan Prodan --- cmd/flux/testdata/export/provider.yaml | 1 - cmd/flux/testdata/export/receiver.yaml | 1 - go.mod | 4 ++-- go.sum | 8 ++++---- manifests/bases/helm-controller/kustomization.yaml | 4 ++-- .../bases/notification-controller/kustomization.yaml | 4 ++-- manifests/crds/kustomization.yaml | 4 ++-- 7 files changed, 12 insertions(+), 14 deletions(-) diff --git a/cmd/flux/testdata/export/provider.yaml b/cmd/flux/testdata/export/provider.yaml index d62e6ba5..5656415c 100644 --- a/cmd/flux/testdata/export/provider.yaml +++ b/cmd/flux/testdata/export/provider.yaml @@ -7,6 +7,5 @@ metadata: spec: address: https://hooks.slack.com/services/mock channel: A channel with spacess - interval: 10m0s type: slack diff --git a/cmd/flux/testdata/export/receiver.yaml b/cmd/flux/testdata/export/receiver.yaml index 19df2429..0561d3db 100644 --- a/cmd/flux/testdata/export/receiver.yaml +++ b/cmd/flux/testdata/export/receiver.yaml @@ -8,7 +8,6 @@ spec: events: - ping - push - interval: 10m0s resources: - kind: GitRepository name: flux-system diff --git a/go.mod b/go.mod index 481a67c4..4af77165 100644 --- a/go.mod +++ b/go.mod @@ -9,11 +9,11 @@ require ( github.com/distribution/distribution/v3 v3.0.0-20221208165359-362910506bc2 github.com/fluxcd/go-git-providers v0.12.0 github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 - github.com/fluxcd/helm-controller/api v0.28.0 + github.com/fluxcd/helm-controller/api v0.28.1 github.com/fluxcd/image-automation-controller/api v0.28.0 github.com/fluxcd/image-reflector-controller/api v0.23.1 github.com/fluxcd/kustomize-controller/api v0.32.0 - github.com/fluxcd/notification-controller/api v0.30.1 + github.com/fluxcd/notification-controller/api v0.30.2 github.com/fluxcd/pkg/apis/meta v0.18.0 github.com/fluxcd/pkg/git v0.7.0 github.com/fluxcd/pkg/git/gogit v0.4.0 diff --git a/go.sum b/go.sum index 817ab8bb..f39d4903 100644 --- a/go.sum +++ b/go.sum @@ -234,16 +234,16 @@ github.com/fluxcd/go-git-providers v0.12.0 h1:G9aK7+fZ8jTOTrGfIIWpx76TjdceshOwel github.com/fluxcd/go-git-providers v0.12.0/go.mod h1:VEItGJ67Xc/7Cadh/oPMPUimXv75R0XqHFtF3J4tIdE= github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 h1:Gm5sGGk+/Wq6RhX4xpCZ2IqjDp5XkjlhENaAuAlpdKc= github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4/go.mod h1:raWgfUV7lDQVXp4QXUaeNNJkRVKz97UQuF+0kdY7Vmo= -github.com/fluxcd/helm-controller/api v0.28.0 h1:X2l1iC7nb8YWnN7EsOZBOALYyhGn9BxI599kQog3SDw= -github.com/fluxcd/helm-controller/api v0.28.0/go.mod h1:/qCtlP718rveiAL7Mova4fGAk0aZv2qyYQn87zcUNhs= +github.com/fluxcd/helm-controller/api v0.28.1 h1:2qjZymRAbl/OqId2lpKCzuleKhId34X1zQ0rcPlMKFQ= +github.com/fluxcd/helm-controller/api v0.28.1/go.mod h1:/qCtlP718rveiAL7Mova4fGAk0aZv2qyYQn87zcUNhs= github.com/fluxcd/image-automation-controller/api v0.28.0 h1:BYiOP28h/QRuZTZixlmMJ3RnQw+FGAn54nVsoUjNXi8= github.com/fluxcd/image-automation-controller/api v0.28.0/go.mod h1:ztBI5X/dEzZuJOf7igqnx6ZvrSGtrXLmCvP5ieb3fWc= github.com/fluxcd/image-reflector-controller/api v0.23.1 h1:ysYzSDhFV5JPzrhTnyabbjFne6GyXsH3Sk/Kd58+Rwk= github.com/fluxcd/image-reflector-controller/api v0.23.1/go.mod h1:uomyKK0ZWFOsG40wqmCJvIN8OpAiPKFteXe+cdhB/Z0= github.com/fluxcd/kustomize-controller/api v0.32.0 h1:5QGLV5xRI8S3tUFJNV+vVzy/pdl0d6Ua0AccWwGRKfs= github.com/fluxcd/kustomize-controller/api v0.32.0/go.mod h1:t2pqIe1SMzdZIAG/aietrg3XpRXmpcubf0uxDJOryEA= -github.com/fluxcd/notification-controller/api v0.30.1 h1:7523fRatqKJPeZcJsR7D0PW/h5ND/DeNgHLzEfOFmA0= -github.com/fluxcd/notification-controller/api v0.30.1/go.mod h1:Ve4SE6jeiGlyItvHa7/UpTPOVC6ac5K76Frv1P7hqLw= +github.com/fluxcd/notification-controller/api v0.30.2 h1:IOxRm/ALdKTk6Xwwc3Tpsfybze3/zVruaI3GN6F+KrA= +github.com/fluxcd/notification-controller/api v0.30.2/go.mod h1:Ve4SE6jeiGlyItvHa7/UpTPOVC6ac5K76Frv1P7hqLw= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= github.com/fluxcd/pkg/apis/kustomize v0.7.0 h1:X2htBmJ91nGYv4d93gin665MFWKNGiNwUiZ08/Zz0hY= diff --git a/manifests/bases/helm-controller/kustomization.yaml b/manifests/bases/helm-controller/kustomization.yaml index 559153c3..77f12fbf 100644 --- a/manifests/bases/helm-controller/kustomization.yaml +++ b/manifests/bases/helm-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/helm-controller/releases/download/v0.28.0/helm-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.28.0/helm-controller.deployment.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.28.1/helm-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.28.1/helm-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/notification-controller/kustomization.yaml b/manifests/bases/notification-controller/kustomization.yaml index d9ea5088..738f7429 100644 --- a/manifests/bases/notification-controller/kustomization.yaml +++ b/manifests/bases/notification-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/notification-controller/releases/download/v0.30.1/notification-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v0.30.1/notification-controller.deployment.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.30.2/notification-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.30.2/notification-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index 747af16f..43ed395c 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -3,7 +3,7 @@ kind: Kustomization resources: - https://github.com/fluxcd/source-controller/releases/download/v0.33.0/source-controller.crds.yaml - https://github.com/fluxcd/kustomize-controller/releases/download/v0.32.0/kustomize-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.28.0/helm-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v0.30.1/notification-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.28.1/helm-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.30.2/notification-controller.crds.yaml - https://github.com/fluxcd/image-reflector-controller/releases/download/v0.23.1/image-reflector-controller.crds.yaml - https://github.com/fluxcd/image-automation-controller/releases/download/v0.28.0/image-automation-controller.crds.yaml From 9d38ea6ffcfa028499087c2c01da3d84fc6d71a4 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Fri, 23 Dec 2022 11:44:28 +0200 Subject: [PATCH 349/818] check: Show the latest stored version of CRDs Signed-off-by: Stefan Prodan --- cmd/flux/check.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/cmd/flux/check.go b/cmd/flux/check.go index cf43654a..1aa0a44e 100644 --- a/cmd/flux/check.go +++ b/cmd/flux/check.go @@ -242,8 +242,9 @@ func crdsCheck() bool { } for _, crd := range list.Items { - if len(crd.Status.StoredVersions) > 0 { - logger.Successf(crd.Name + "/" + crd.Status.StoredVersions[0]) + versions := crd.Status.StoredVersions + if len(versions) > 0 { + logger.Successf(crd.Name + "/" + versions[len(versions)-1]) } else { ok = false logger.Failuref("no stored versions for %s", crd.Name) From f5563de144ab847e7371b29e46f2de7ca7b61c30 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Jan 2023 00:36:13 +0000 Subject: [PATCH 350/818] Bump actions/cache from 3.0.11 to 3.2.2 Bumps [actions/cache](https://github.com/actions/cache) from 3.0.11 to 3.2.2. - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](https://github.com/actions/cache/compare/9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7...4723a57e26efda3a62cbde1812113b730952852d) --- updated-dependencies: - dependency-name: actions/cache dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/e2e-azure.yaml | 2 +- .github/workflows/e2e-bootstrap.yaml | 2 +- .github/workflows/e2e.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/e2e-azure.yaml b/.github/workflows/e2e-azure.yaml index f51dfbc6..ee5581a8 100644 --- a/.github/workflows/e2e-azure.yaml +++ b/.github/workflows/e2e-azure.yaml @@ -17,7 +17,7 @@ jobs: - name: Checkout uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b - name: Restore Go cache - uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 + uses: actions/cache@4723a57e26efda3a62cbde1812113b730952852d with: path: ~/go/pkg/mod key: ${{ runner.os }}-go1.18-${{ hashFiles('**/go.sum') }} diff --git a/.github/workflows/e2e-bootstrap.yaml b/.github/workflows/e2e-bootstrap.yaml index 319bade0..677b931b 100644 --- a/.github/workflows/e2e-bootstrap.yaml +++ b/.github/workflows/e2e-bootstrap.yaml @@ -18,7 +18,7 @@ jobs: - name: Checkout uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b - name: Restore Go cache - uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 + uses: actions/cache@4723a57e26efda3a62cbde1812113b730952852d with: path: ~/go/pkg/mod key: ${{ runner.os }}-go1.18-${{ hashFiles('**/go.sum') }} diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index 7eb4b967..ded2aede 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -22,7 +22,7 @@ jobs: - name: Checkout uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b - name: Restore Go cache - uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 + uses: actions/cache@4723a57e26efda3a62cbde1812113b730952852d with: path: ~/go/pkg/mod key: ${{ runner.os }}-go1.18-${{ hashFiles('**/go.sum') }} From ddd377b997fd7652ceafd1a1d4a149e10b3ecd2a Mon Sep 17 00:00:00 2001 From: Kingdon Barrett Date: Thu, 5 Jan 2023 20:19:53 -0500 Subject: [PATCH 351/818] Fix fluxcd/website#1347 Signed-off-by: Kingdon Barrett --- cmd/flux/completion_powershell.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/flux/completion_powershell.go b/cmd/flux/completion_powershell.go index 77efd87a..5d23e927 100644 --- a/cmd/flux/completion_powershell.go +++ b/cmd/flux/completion_powershell.go @@ -34,12 +34,12 @@ To configure your powershell shell to load completions for each session add to y Windows: cd "$env:USERPROFILE\Documents\WindowsPowerShell\Modules" -flux completion >> flux-completion.ps1 +flux completion powershell >> flux-completion.ps1 Linux: cd "${XDG_CONFIG_HOME:-"$HOME/.config/"}/powershell/modules" -flux completion >> flux-completions.ps1`, +flux completion powershell >> flux-completions.ps1`, Run: func(cmd *cobra.Command, args []string) { rootCmd.GenPowerShellCompletion(os.Stdout) }, From 1d80ff2b091e494b691290cbfbe57a7a404d3ee7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Jan 2023 00:57:58 +0000 Subject: [PATCH 352/818] Bump actions/checkout from 3.2.0 to 3.3.0 Bumps [actions/checkout](https://github.com/actions/checkout) from 3.2.0 to 3.3.0. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/755da8c3cf115ac066823e79a1e1788f8940201b...ac593985615ec2ede58e132d2e21d2b1cbd6127c) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/e2e-arm64.yaml | 2 +- .github/workflows/e2e-azure.yaml | 2 +- .github/workflows/e2e-bootstrap.yaml | 2 +- .github/workflows/e2e.yaml | 2 +- .github/workflows/release.yaml | 4 ++-- .github/workflows/scan.yaml | 6 +++--- .github/workflows/update.yaml | 2 +- 7 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/e2e-arm64.yaml b/.github/workflows/e2e-arm64.yaml index daeb157b..e1a6fd0d 100644 --- a/.github/workflows/e2e-arm64.yaml +++ b/.github/workflows/e2e-arm64.yaml @@ -19,7 +19,7 @@ jobs: KUBERNETES_VERSION: [ 1.23.13, 1.24.7, 1.25.3 ] steps: - name: Checkout - uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b + uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c - name: Setup Go uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 with: diff --git a/.github/workflows/e2e-azure.yaml b/.github/workflows/e2e-azure.yaml index ee5581a8..1b1ec639 100644 --- a/.github/workflows/e2e-azure.yaml +++ b/.github/workflows/e2e-azure.yaml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-22.04 steps: - name: Checkout - uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b + uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c - name: Restore Go cache uses: actions/cache@4723a57e26efda3a62cbde1812113b730952852d with: diff --git a/.github/workflows/e2e-bootstrap.yaml b/.github/workflows/e2e-bootstrap.yaml index 677b931b..e3d84294 100644 --- a/.github/workflows/e2e-bootstrap.yaml +++ b/.github/workflows/e2e-bootstrap.yaml @@ -16,7 +16,7 @@ jobs: if: (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) && github.actor != 'dependabot[bot]' steps: - name: Checkout - uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b + uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c - name: Restore Go cache uses: actions/cache@4723a57e26efda3a62cbde1812113b730952852d with: diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index ded2aede..f4bf91e3 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -20,7 +20,7 @@ jobs: - 5000:5000 steps: - name: Checkout - uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b + uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c - name: Restore Go cache uses: actions/cache@4723a57e26efda3a62cbde1812113b730952852d with: diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 571de91a..888e9b5e 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -16,7 +16,7 @@ jobs: packages: write # needed for ghcr access steps: - name: Checkout - uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b + uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c - name: Unshallow run: git fetch --prune --unshallow - name: Setup Go @@ -88,7 +88,7 @@ jobs: id-token: write packages: write steps: - - uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b + - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c - name: Setup Kustomize uses: fluxcd/pkg/actions/kustomize@main - name: Setup Flux CLI diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index 5c5efad9..2d98eeb7 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -17,7 +17,7 @@ jobs: runs-on: ubuntu-latest if: github.actor != 'dependabot[bot]' steps: - - uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b + - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c - name: Run FOSSA scan and upload build data uses: fossa-contrib/fossa-action@6cffaa064112e1cf9b5798c6224f9487dc1ec316 # v1 with: @@ -31,7 +31,7 @@ jobs: security-events: write if: (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) && github.actor != 'dependabot[bot]' steps: - - uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b + - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c - name: Setup Kustomize uses: fluxcd/pkg//actions/kustomize@main - name: Build manifests @@ -56,7 +56,7 @@ jobs: if: github.actor != 'dependabot[bot]' steps: - name: Checkout repository - uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b + uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c - name: Set up Go uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 with: diff --git a/.github/workflows/update.yaml b/.github/workflows/update.yaml index 5b76a5cc..06a8a9b6 100644 --- a/.github/workflows/update.yaml +++ b/.github/workflows/update.yaml @@ -18,7 +18,7 @@ jobs: pull-requests: write steps: - name: Check out code - uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b + uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c - name: Setup Go uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 with: From 7327b14a621763f9b87d665ffe91949ed52a04a7 Mon Sep 17 00:00:00 2001 From: Sanskar Jaiswal Date: Tue, 10 Jan 2023 17:12:06 +0530 Subject: [PATCH 353/818] update git/gogit to v0.4.1 Signed-off-by: Sanskar Jaiswal --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 4af77165..d411eb36 100644 --- a/go.mod +++ b/go.mod @@ -16,7 +16,7 @@ require ( github.com/fluxcd/notification-controller/api v0.30.2 github.com/fluxcd/pkg/apis/meta v0.18.0 github.com/fluxcd/pkg/git v0.7.0 - github.com/fluxcd/pkg/git/gogit v0.4.0 + github.com/fluxcd/pkg/git/gogit v0.4.1 github.com/fluxcd/pkg/kustomize v0.12.0 github.com/fluxcd/pkg/oci v0.17.0 github.com/fluxcd/pkg/runtime v0.24.0 diff --git a/go.sum b/go.sum index f39d4903..f05b6f65 100644 --- a/go.sum +++ b/go.sum @@ -252,8 +252,8 @@ github.com/fluxcd/pkg/apis/meta v0.18.0 h1:s0LeulWcQ4DxVX6805vgDTxlA6bAYk+Lq1QHS github.com/fluxcd/pkg/apis/meta v0.18.0/go.mod h1:pYvXRFi1UKNNrGR34jw3uqOnMXw9X6dTkML8j5Z7tis= github.com/fluxcd/pkg/git v0.7.0 h1:sQHRpFMcOzEdqlyGMjFv2LKMdcoE5xeUr2UcRrsLRG8= github.com/fluxcd/pkg/git v0.7.0/go.mod h1:3deiLPws4DSQ3hqwtQd7Dt66GXTN/4RcT/yHAljXaHo= -github.com/fluxcd/pkg/git/gogit v0.4.0 h1:u2Rcd/jHdvXUfgv72CES5Gq/nxAp/PblgrBDAm8ZQtQ= -github.com/fluxcd/pkg/git/gogit v0.4.0/go.mod h1:fMBM6efbAPqDEoU2M/ve+P3b/oQCuwRbia4bn9006jM= +github.com/fluxcd/pkg/git/gogit v0.4.1 h1:0KIZRvBBeTcoYVF34ys7mWimxzyuQkx5bBMs0/hfzZ4= +github.com/fluxcd/pkg/git/gogit v0.4.1/go.mod h1:fMBM6efbAPqDEoU2M/ve+P3b/oQCuwRbia4bn9006jM= github.com/fluxcd/pkg/gittestserver v0.8.0 h1:YrYe63KScKlLxx0GAiQthx2XqHDx0vKitIIx4JnDtIo= github.com/fluxcd/pkg/kustomize v0.12.0 h1:4MQdbP3M8NTIcr8TgNMxRCN+2xZoMWtCDDS3RiOT+8M= github.com/fluxcd/pkg/kustomize v0.12.0/go.mod h1:awHID4OKe2/WAfTFg4u0fURXZPUkrIslSZNSPX9MEFQ= From d1b4851fbe64ee26064fca1fc6bade184a4eda87 Mon Sep 17 00:00:00 2001 From: Raffael Sahli Date: Wed, 11 Jan 2023 08:05:49 +0000 Subject: [PATCH 354/818] fix(install-script): support github api auth Signed-off-by: Raffael Sahli --- install/README.md | 4 ++++ install/flux.sh | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/install/README.md b/install/README.md index 99bb0487..61db6639 100644 --- a/install/README.md +++ b/install/README.md @@ -9,6 +9,10 @@ To install the latest release run: curl -s https://raw.githubusercontent.com/fluxcd/flux2/main/install/flux.sh | sudo bash ``` +**Note**: You may export an env `GITHUB_TOKEN` which is a [personal access token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token) +to avoid running into Github API rate limiting while executing the install script. +This is recommended if you execute the install script multiple times within the same rate limting window. + The install script does the following: * attempts to detect your OS * downloads and unpacks the release tar file in a temporary directory diff --git a/install/flux.sh b/install/flux.sh index 496f2158..34e6a980 100755 --- a/install/flux.sh +++ b/install/flux.sh @@ -112,10 +112,10 @@ download() { case $DOWNLOADER in curl) - curl -o "$1" -sfL "$2" + curl -u user:$GITHUB_TOKEN -o "$1" -sfL "$2" ;; wget) - wget -qO "$1" "$2" + wget --auth-no-challenge --user=user --password=$GITHUB_TOKEN -qO "$1" "$2" ;; *) fatal "Incorrect executable '${DOWNLOADER}'" From da7af5ab5fbd0a06035492fa32e87df733dffbda Mon Sep 17 00:00:00 2001 From: raffis Date: Wed, 11 Jan 2023 13:13:20 +0100 Subject: [PATCH 355/818] Update install/README.md Co-authored-by: Aurel Canciu Signed-off-by: raffis --- install/README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/install/README.md b/install/README.md index 61db6639..05c0a488 100644 --- a/install/README.md +++ b/install/README.md @@ -9,9 +9,8 @@ To install the latest release run: curl -s https://raw.githubusercontent.com/fluxcd/flux2/main/install/flux.sh | sudo bash ``` -**Note**: You may export an env `GITHUB_TOKEN` which is a [personal access token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token) -to avoid running into Github API rate limiting while executing the install script. -This is recommended if you execute the install script multiple times within the same rate limting window. +**Note**: You may want to export the `GITHUB_TOKEN` environment variable using a [personal access token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token) +to avoid GitHub API rate-limiting errors if executing the install script repeatedly during a short time frame. The install script does the following: * attempts to detect your OS From 58b4ed586aa902687b39829f26a8538aac608474 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Jan 2023 01:16:39 +0000 Subject: [PATCH 356/818] Bump github/codeql-action from 2.1.37 to 2.1.38 Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2.1.37 to 2.1.38. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/959cbb7472c4d4ad70cdfe6f4976053fe48ab394...515828d97454b8354517688ddc5b48402b723750) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/scan.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index 2d98eeb7..69083498 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -45,7 +45,7 @@ jobs: with: args: --sarif-file-output=snyk.sarif - name: Upload result to GitHub Code Scanning - uses: github/codeql-action/upload-sarif@959cbb7472c4d4ad70cdfe6f4976053fe48ab394 # v2 + uses: github/codeql-action/upload-sarif@515828d97454b8354517688ddc5b48402b723750 # v2 with: sarif_file: snyk.sarif @@ -62,10 +62,10 @@ jobs: with: go-version: 1.19.x - name: Initialize CodeQL - uses: github/codeql-action/init@959cbb7472c4d4ad70cdfe6f4976053fe48ab394 # v2 + uses: github/codeql-action/init@515828d97454b8354517688ddc5b48402b723750 # v2 with: languages: go - name: Autobuild - uses: github/codeql-action/autobuild@959cbb7472c4d4ad70cdfe6f4976053fe48ab394 # v2 + uses: github/codeql-action/autobuild@515828d97454b8354517688ddc5b48402b723750 # v2 - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@959cbb7472c4d4ad70cdfe6f4976053fe48ab394 # v2 + uses: github/codeql-action/analyze@515828d97454b8354517688ddc5b48402b723750 # v2 From ece3a075672464d405892a969555cd648eccb7a3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Jan 2023 09:07:24 +0000 Subject: [PATCH 357/818] Bump actions/cache from 3.2.2 to 3.2.3 Bumps [actions/cache](https://github.com/actions/cache) from 3.2.2 to 3.2.3. - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](https://github.com/actions/cache/compare/4723a57e26efda3a62cbde1812113b730952852d...58c146cc91c5b9e778e71775dfe9bf1442ad9a12) --- updated-dependencies: - dependency-name: actions/cache dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/e2e-azure.yaml | 2 +- .github/workflows/e2e-bootstrap.yaml | 2 +- .github/workflows/e2e.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/e2e-azure.yaml b/.github/workflows/e2e-azure.yaml index 1b1ec639..81eb88d4 100644 --- a/.github/workflows/e2e-azure.yaml +++ b/.github/workflows/e2e-azure.yaml @@ -17,7 +17,7 @@ jobs: - name: Checkout uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c - name: Restore Go cache - uses: actions/cache@4723a57e26efda3a62cbde1812113b730952852d + uses: actions/cache@58c146cc91c5b9e778e71775dfe9bf1442ad9a12 with: path: ~/go/pkg/mod key: ${{ runner.os }}-go1.18-${{ hashFiles('**/go.sum') }} diff --git a/.github/workflows/e2e-bootstrap.yaml b/.github/workflows/e2e-bootstrap.yaml index e3d84294..bdfcc280 100644 --- a/.github/workflows/e2e-bootstrap.yaml +++ b/.github/workflows/e2e-bootstrap.yaml @@ -18,7 +18,7 @@ jobs: - name: Checkout uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c - name: Restore Go cache - uses: actions/cache@4723a57e26efda3a62cbde1812113b730952852d + uses: actions/cache@58c146cc91c5b9e778e71775dfe9bf1442ad9a12 with: path: ~/go/pkg/mod key: ${{ runner.os }}-go1.18-${{ hashFiles('**/go.sum') }} diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index f4bf91e3..5a826cf6 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -22,7 +22,7 @@ jobs: - name: Checkout uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c - name: Restore Go cache - uses: actions/cache@4723a57e26efda3a62cbde1812113b730952852d + uses: actions/cache@58c146cc91c5b9e778e71775dfe9bf1442ad9a12 with: path: ~/go/pkg/mod key: ${{ runner.os }}-go1.18-${{ hashFiles('**/go.sum') }} From e7e05f870b18c93f1909ef725c50a5367f353894 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Jan 2023 13:43:09 +0000 Subject: [PATCH 358/818] Bump snyk/actions Bumps [snyk/actions](https://github.com/snyk/actions) from 1cc9026f51d822442cb4b872d8d7ead8cc69a018 to e25b2e6f5658d1bb7a6671b113260f13134cc3af. - [Release notes](https://github.com/snyk/actions/releases) - [Commits](https://github.com/snyk/actions/compare/1cc9026f51d822442cb4b872d8d7ead8cc69a018...e25b2e6f5658d1bb7a6671b113260f13134cc3af) --- updated-dependencies: - dependency-name: snyk/actions dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- .github/workflows/scan.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index 69083498..f9cda97e 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -38,7 +38,7 @@ jobs: run: | make cmd/flux/.manifests.done - name: Run Snyk to check for vulnerabilities - uses: snyk/actions/golang@1cc9026f51d822442cb4b872d8d7ead8cc69a018 # v0.3.0 + uses: snyk/actions/golang@e25b2e6f5658d1bb7a6671b113260f13134cc3af # v0.3.0 continue-on-error: true env: SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }} From 8ff8295d0cd84a3f505d72666e7264d1473d30bc Mon Sep 17 00:00:00 2001 From: Erik Kristensen Date: Sat, 21 Jan 2023 13:07:23 -0500 Subject: [PATCH 359/818] fix: update example to use correct output method feat: add ability to auth to github api docs: add authentication snippet example docs: update checkout@v3, create-pull-request@v4 docs: add documentation about the github token secret Review: Add suggested change from last week (per https://github.com/fluxcd/flux2/pull/3474#discussion_r1067178730) Signed-off-by: Erik Kristensen Signed-off-by: Kingdon Barrett --- action/README.md | 22 ++++++++++++++++++---- action/action.yml | 10 +++++++++- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/action/README.md b/action/README.md index daeada31..f8ebcb8e 100644 --- a/action/README.md +++ b/action/README.md @@ -35,6 +35,20 @@ You can download a specific version with: version: 0.32.0 ``` +You can also authenticate against the GitHub API using GitHub Actions' `GITHUB_TOKEN` secret. + +For more information, please [read about the GitHub token secret](https://docs.github.com/en/actions/security-guides/automatic-token-authentication#about-the-github_token-secret). + +```yaml + steps: + - name: Setup Flux CLI + uses: fluxcd/flux2/action@main + with: + token: ${{ secrets.GITHUB_TOKEN }} +``` + +This is useful if you are seeing failures on shared runners, those failures are usually API limits being hit. + ### Automate Flux updates Example workflow for updating Flux's components generated with `flux bootstrap --path=clusters/production`: @@ -52,7 +66,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out code - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Setup Flux CLI uses: fluxcd/flux2/action@main - name: Check for updates @@ -62,9 +76,9 @@ jobs: --export > ./clusters/production/flux-system/gotk-components.yaml VERSION="$(flux -v)" - echo "::set-output name=flux_version::$VERSION" + echo "flux_version=$VERSION" >> $GITHUB_OUTPUT - name: Create Pull Request - uses: peter-evans/create-pull-request@v3 + uses: peter-evans/create-pull-request@v4 with: token: ${{ secrets.GITHUB_TOKEN }} branch: update-flux @@ -177,7 +191,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Setup Flux CLI uses: fluxcd/flux2/action@main - name: Setup Kubernetes Kind diff --git a/action/action.yml b/action/action.yml index 7bb0be5c..f92686a9 100644 --- a/action/action.yml +++ b/action/action.yml @@ -15,6 +15,9 @@ inputs: bindir: description: "Optional location of the Flux binary. Will not use sudo if set. Updates System Path." required: false + token: + description: "GitHub Token used to authentication against the API (generally only needed to prevent quota limit errors)" + required: false runs: using: composite steps: @@ -23,9 +26,14 @@ runs: run: | ARCH=${{ inputs.arch }} VERSION=${{ inputs.version }} + TOKEN=${{ inputs.token }} + + if [ -n $TOKEN ]; then + TOKEN=(-H "Authorization: token $TOKEN") + fi if [ -z $VERSION ]; then - VERSION=$(curl https://api.github.com/repos/fluxcd/flux2/releases/latest -sL | grep tag_name | sed -E 's/.*"([^"]+)".*/\1/' | cut -c 2-) + VERSION=$(curl https://api.github.com/repos/fluxcd/flux2/releases/latest -sL "${TOKEN[@]}" | grep tag_name | sed -E 's/.*"([^"]+)".*/\1/' | cut -c 2-) fi BIN_URL="https://github.com/fluxcd/flux2/releases/download/v${VERSION}/flux_${VERSION}_linux_${ARCH}.tar.gz" From 369ae5aa7103b17a19559a8cd9066705379d0896 Mon Sep 17 00:00:00 2001 From: Kingdon Barrett Date: Mon, 23 Jan 2023 13:33:46 -0500 Subject: [PATCH 360/818] Quote tested values in fluxcd/flux GitHub Action Fix an issue with improperly quoted variables created by #3474 Also, curl should fail with an error code if the download results in 404 not found * + (x3) Update action/action.yml * for consistent format Co-authored-by: Steven E. Harris Signed-off-by: Kingdon Barrett --- action/action.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/action/action.yml b/action/action.yml index f92686a9..ee15c7df 100644 --- a/action/action.yml +++ b/action/action.yml @@ -28,23 +28,23 @@ runs: VERSION=${{ inputs.version }} TOKEN=${{ inputs.token }} - if [ -n $TOKEN ]; then - TOKEN=(-H "Authorization: token $TOKEN") + if [ -n "${TOKEN}" ]; then + TOKEN=(-H "Authorization: token ${TOKEN}") fi - if [ -z $VERSION ]; then + if [ -z "${VERSION}" ]; then VERSION=$(curl https://api.github.com/repos/fluxcd/flux2/releases/latest -sL "${TOKEN[@]}" | grep tag_name | sed -E 's/.*"([^"]+)".*/\1/' | cut -c 2-) fi BIN_URL="https://github.com/fluxcd/flux2/releases/download/v${VERSION}/flux_${VERSION}_linux_${ARCH}.tar.gz" - curl -sL ${BIN_URL} -o /tmp/flux.tar.gz + curl --silent --fail --location "${BIN_URL}" --output /tmp/flux.tar.gz mkdir -p /tmp/flux tar -C /tmp/flux/ -zxvf /tmp/flux.tar.gz - name: "Copy Flux binary to execute location" shell: bash run: | BINDIR=${{ inputs.bindir }} - if [ -z $BINDIR ]; then + if [ -z "${BINDIR}" ]; then sudo cp /tmp/flux/flux /usr/local/bin else cp /tmp/flux/flux "${BINDIR}" From 536f4c31ce580a5bc64fb27e4c199050248a6067 Mon Sep 17 00:00:00 2001 From: Kingdon Barrett Date: Mon, 23 Jan 2023 17:47:22 -0500 Subject: [PATCH 361/818] do not quote token here Adding quotes here, when the variable is empty you get: curl https://api.github.com/repos/fluxcd/flux2/releases/latest -sL '' (ref: https://github.com/kingdonb/bootstrap-repo/actions/runs/3991169408/jobs/6845685491#step:3:31 ) That does curl twice, once for the URL provided and again for the empty string, which results in curl returning error code 3 "malformed URL" Signed-off-by: Kingdon Barrett --- action/action.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/action/action.yml b/action/action.yml index ee15c7df..574936c9 100644 --- a/action/action.yml +++ b/action/action.yml @@ -33,7 +33,7 @@ runs: fi if [ -z "${VERSION}" ]; then - VERSION=$(curl https://api.github.com/repos/fluxcd/flux2/releases/latest -sL "${TOKEN[@]}" | grep tag_name | sed -E 's/.*"([^"]+)".*/\1/' | cut -c 2-) + VERSION=$(curl https://api.github.com/repos/fluxcd/flux2/releases/latest -sL ${TOKEN[@]} | grep tag_name | sed -E 's/.*"([^"]+)".*/\1/' | cut -c 2-) fi BIN_URL="https://github.com/fluxcd/flux2/releases/download/v${VERSION}/flux_${VERSION}_linux_${ARCH}.tar.gz" From ed13067ff2ecbc427f83b969503ad676060448d1 Mon Sep 17 00:00:00 2001 From: Kingdon Barrett Date: Tue, 24 Jan 2023 11:09:46 -0500 Subject: [PATCH 362/818] test conditionals in a nested structure add an "else" branch (https://github.com/fluxcd/flux2/pull/3511 failed to fix #3509) * factor out sed and cut so we at least do not repeat the most complex part of the expression * eliminate intermediary array TOKEN * delete reassignment of token * wording Signed-off-by: Kingdon Barrett --- action/action.yml | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/action/action.yml b/action/action.yml index 574936c9..19a47bb4 100644 --- a/action/action.yml +++ b/action/action.yml @@ -28,14 +28,18 @@ runs: VERSION=${{ inputs.version }} TOKEN=${{ inputs.token }} - if [ -n "${TOKEN}" ]; then - TOKEN=(-H "Authorization: token ${TOKEN}") - fi - if [ -z "${VERSION}" ]; then - VERSION=$(curl https://api.github.com/repos/fluxcd/flux2/releases/latest -sL ${TOKEN[@]} | grep tag_name | sed -E 's/.*"([^"]+)".*/\1/' | cut -c 2-) + if [ -n "${TOKEN}" ]; then + VERSION_SLUG=$(curl https://api.github.com/repos/fluxcd/flux2/releases/latest --silent --location --header "Authorization: token ${TOKEN}" | grep tag_name) + else + # With no GITHUB_TOKEN you will experience occasional failures due to rate limiting + # Ref: https://github.com/fluxcd/flux2/issues/3509#issuecomment-1400820992 + VERSION_SLUG=$(curl https://api.github.com/repos/fluxcd/flux2/releases/latest --silent --location | grep tag_name) + fi fi + VERSION=$(echo "${VERSION_SLUG}" | sed -E 's/.*"([^"]+)".*/\1/' | cut -c 2-) + BIN_URL="https://github.com/fluxcd/flux2/releases/download/v${VERSION}/flux_${VERSION}_linux_${ARCH}.tar.gz" curl --silent --fail --location "${BIN_URL}" --output /tmp/flux.tar.gz mkdir -p /tmp/flux From 5b422bef179694900b6e5b511c0a2a4e43e427c8 Mon Sep 17 00:00:00 2001 From: Joel Guedj Date: Thu, 26 Jan 2023 11:33:51 +0100 Subject: [PATCH 363/818] Handle case where VERSION is provided as an input If VERSION is provided, VERSION_SLUG will never be set and VERSION will be overwritten with a bad value. Signed-off-by: Joel Guedj --- action/action.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/action/action.yml b/action/action.yml index 19a47bb4..75b749c7 100644 --- a/action/action.yml +++ b/action/action.yml @@ -36,9 +36,9 @@ runs: # Ref: https://github.com/fluxcd/flux2/issues/3509#issuecomment-1400820992 VERSION_SLUG=$(curl https://api.github.com/repos/fluxcd/flux2/releases/latest --silent --location | grep tag_name) fi - fi - VERSION=$(echo "${VERSION_SLUG}" | sed -E 's/.*"([^"]+)".*/\1/' | cut -c 2-) + VERSION=$(echo "${VERSION_SLUG}" | sed -E 's/.*"([^"]+)".*/\1/' | cut -c 2-) + fi BIN_URL="https://github.com/fluxcd/flux2/releases/download/v${VERSION}/flux_${VERSION}_linux_${ARCH}.tar.gz" curl --silent --fail --location "${BIN_URL}" --output /tmp/flux.tar.gz From f22222f71d4d2aaaa06d717f1e58d8041f3e646c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Jan 2023 01:03:33 +0000 Subject: [PATCH 364/818] Bump goreleaser/goreleaser-action from 4.1.0 to 4.1.1 Bumps [goreleaser/goreleaser-action](https://github.com/goreleaser/goreleaser-action) from 4.1.0 to 4.1.1. - [Release notes](https://github.com/goreleaser/goreleaser-action/releases) - [Commits](https://github.com/goreleaser/goreleaser-action/compare/8f67e590f2d095516493f017008adc464e63adb1...9754a253a8673b0ea869c2e863b4e975497efd0c) --- updated-dependencies: - dependency-name: goreleaser/goreleaser-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/release.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 888e9b5e..355b5073 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -73,7 +73,7 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Run GoReleaser - uses: goreleaser/goreleaser-action@8f67e590f2d095516493f017008adc464e63adb1 # v3 + uses: goreleaser/goreleaser-action@9754a253a8673b0ea869c2e863b4e975497efd0c # v3 with: version: latest args: release --release-notes=output/notes.md --skip-validate From e5eb4d4a6736f77ec0d17c2659026c672acecafe Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Jan 2023 10:23:13 +0000 Subject: [PATCH 365/818] Bump github/codeql-action from 2.1.38 to 2.2.1 Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2.1.38 to 2.2.1. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/515828d97454b8354517688ddc5b48402b723750...3ebbd71c74ef574dbc558c82f70e52732c8b44fe) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/scan.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index f9cda97e..0bf182db 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -45,7 +45,7 @@ jobs: with: args: --sarif-file-output=snyk.sarif - name: Upload result to GitHub Code Scanning - uses: github/codeql-action/upload-sarif@515828d97454b8354517688ddc5b48402b723750 # v2 + uses: github/codeql-action/upload-sarif@3ebbd71c74ef574dbc558c82f70e52732c8b44fe # v2 with: sarif_file: snyk.sarif @@ -62,10 +62,10 @@ jobs: with: go-version: 1.19.x - name: Initialize CodeQL - uses: github/codeql-action/init@515828d97454b8354517688ddc5b48402b723750 # v2 + uses: github/codeql-action/init@3ebbd71c74ef574dbc558c82f70e52732c8b44fe # v2 with: languages: go - name: Autobuild - uses: github/codeql-action/autobuild@515828d97454b8354517688ddc5b48402b723750 # v2 + uses: github/codeql-action/autobuild@3ebbd71c74ef574dbc558c82f70e52732c8b44fe # v2 - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@515828d97454b8354517688ddc5b48402b723750 # v2 + uses: github/codeql-action/analyze@3ebbd71c74ef574dbc558c82f70e52732c8b44fe # v2 From 18924d29a7a5ff969891f9338cda6e40c5676848 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Jan 2023 11:38:26 +0000 Subject: [PATCH 366/818] Bump anchore/sbom-action from 0.13.1 to 0.13.3 Bumps [anchore/sbom-action](https://github.com/anchore/sbom-action) from 0.13.1 to 0.13.3. - [Release notes](https://github.com/anchore/sbom-action/releases) - [Commits](https://github.com/anchore/sbom-action/compare/06e109483e6aa305a2b2395eabae554e51530e1d...07978da4bdb4faa726e52dfc6b1bed63d4b56479) --- updated-dependencies: - dependency-name: anchore/sbom-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/release.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 355b5073..f2b6c528 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -29,7 +29,7 @@ jobs: id: buildx uses: docker/setup-buildx-action@8c0edbc76e98fa90f69d9a2c020dcb50019dc325 # v2 - name: Setup Syft - uses: anchore/sbom-action/download-syft@06e109483e6aa305a2b2395eabae554e51530e1d # v0.13.1 + uses: anchore/sbom-action/download-syft@07978da4bdb4faa726e52dfc6b1bed63d4b56479 # v0.13.3 - name: Setup Cosign uses: sigstore/cosign-installer@9becc617647dfa20ae7b1151972e9b3a2c338a2b # v2.8.1 - name: Setup Kustomize From 65481c223eea34266bbee1d433a892f41138f164 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Jan 2023 12:12:38 +0000 Subject: [PATCH 367/818] build(deps): bump docker/setup-buildx-action from 2.2.1 to 2.4.0 Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 2.2.1 to 2.4.0. - [Release notes](https://github.com/docker/setup-buildx-action/releases) - [Commits](https://github.com/docker/setup-buildx-action/compare/8c0edbc76e98fa90f69d9a2c020dcb50019dc325...15c905b16b06416d2086efa066dd8e3a35cc7f98) --- updated-dependencies: - dependency-name: docker/setup-buildx-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/release.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index f2b6c528..cc4afdca 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -27,7 +27,7 @@ jobs: uses: docker/setup-qemu-action@e81a89b1732b9c48d79cd809d8d81d79c4647a18 # v2 - name: Setup Docker Buildx id: buildx - uses: docker/setup-buildx-action@8c0edbc76e98fa90f69d9a2c020dcb50019dc325 # v2 + uses: docker/setup-buildx-action@15c905b16b06416d2086efa066dd8e3a35cc7f98 # v2 - name: Setup Syft uses: anchore/sbom-action/download-syft@07978da4bdb4faa726e52dfc6b1bed63d4b56479 # v0.13.3 - name: Setup Cosign From 0394c4d5ef42f37893d71b44fba54357a71c9ad3 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Mon, 30 Jan 2023 17:05:14 +0200 Subject: [PATCH 368/818] Update Alpine to v3.17 Bump kubectl binary to v1.26.1 Signed-off-by: Stefan Prodan --- Dockerfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index fc0332a2..6a9eba67 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,15 +1,15 @@ -FROM alpine:3.16 as builder +FROM alpine:3.17 as builder RUN apk add --no-cache ca-certificates curl ARG ARCH=linux/amd64 -ARG KUBECTL_VER=1.25.4 +ARG KUBECTL_VER=1.26.1 RUN curl -sL https://storage.googleapis.com/kubernetes-release/release/v${KUBECTL_VER}/bin/${ARCH}/kubectl \ -o /usr/local/bin/kubectl && chmod +x /usr/local/bin/kubectl && \ kubectl version --client=true -FROM alpine:3.16 as flux-cli +FROM alpine:3.17 as flux-cli RUN apk add --no-cache ca-certificates From 79f900b82e3fb9be75ab59647cecd9bca22a3d3f Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Mon, 30 Jan 2023 17:18:35 +0200 Subject: [PATCH 369/818] ci: Replace engineerd/setup-kind with helm/kind-action Signed-off-by: Stefan Prodan --- .github/workflows/e2e-bootstrap.yaml | 7 ++++--- .github/workflows/e2e.yaml | 7 ++++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/.github/workflows/e2e-bootstrap.yaml b/.github/workflows/e2e-bootstrap.yaml index bdfcc280..f76e1aba 100644 --- a/.github/workflows/e2e-bootstrap.yaml +++ b/.github/workflows/e2e-bootstrap.yaml @@ -29,10 +29,11 @@ jobs: with: go-version: 1.19.x - name: Setup Kubernetes - uses: engineerd/setup-kind@aa272fe2a7309878ffc2a81c56cfe3ef108ae7d0 # v0.5.0 + uses: helm/kind-action@d8ccf8fb623ce1bb360ae2f45f323d9d5c5e9f00 # v1.5.0 with: - version: v0.16.0 - image: kindest/node:v1.25.2@sha256:9be91e9e9cdf116809841fc77ebdb8845443c4c72fe5218f3ae9eb57fdb4bace + version: v0.17.0 + cluster_name: kind + node_image: kindest/node:v1.25.2 - name: Setup Kustomize uses: fluxcd/pkg//actions/kustomize@main - name: Build diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index 5a826cf6..d9c41285 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -33,11 +33,12 @@ jobs: with: go-version: 1.19.x - name: Setup Kubernetes - uses: engineerd/setup-kind@aa272fe2a7309878ffc2a81c56cfe3ef108ae7d0 # v0.5.0 + uses: helm/kind-action@d8ccf8fb623ce1bb360ae2f45f323d9d5c5e9f00 # v1.5.0 with: - version: v0.11.1 - image: kindest/node:v1.23.13 + version: v0.17.0 + cluster_name: kind config: .github/kind/config.yaml # disable KIND-net + node_image: kindest/node:v1.23.13 - name: Setup Calico for network policy run: | kubectl apply -f https://docs.projectcalico.org/v3.20/manifests/calico.yaml From 0648f5604951bca32e58477f3cb56f6136e1b805 Mon Sep 17 00:00:00 2001 From: Max Jonas Werner Date: Mon, 30 Jan 2023 16:19:10 +0100 Subject: [PATCH 370/818] fix misleading messaging when using `-A` flag MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Before: ``` $ flux get source git -A ✗ no GitRepository objects found in flux-system namespace ``` After: ``` $ flux get source git -A ✗ no GitRepository objects found in any namespace ``` Signed-off-by: Max Jonas Werner --- cmd/flux/get.go | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/cmd/flux/get.go b/cmd/flux/get.go index 2236e36e..6723fb22 100644 --- a/cmd/flux/get.go +++ b/cmd/flux/get.go @@ -163,9 +163,16 @@ func (get getCommand) run(cmd *cobra.Command, args []string) error { if get.list.len() == 0 { if len(args) > 0 { - logger.Failuref("%s object '%s' not found in '%s' namespace", get.kind, args[0], *kubeconfigArgs.Namespace) + logger.Failuref("%s object '%s' not found in %s namespace", + get.kind, + args[0], + namespaceNameOrAny(getArgs.allNamespaces, *kubeconfigArgs.Namespace), + ) } else if !getAll { - logger.Failuref("no %s objects found in %s namespace", get.kind, *kubeconfigArgs.Namespace) + logger.Failuref("no %s objects found in %s namespace", + get.kind, + namespaceNameOrAny(getArgs.allNamespaces, *kubeconfigArgs.Namespace), + ) } return nil } @@ -192,6 +199,13 @@ func (get getCommand) run(cmd *cobra.Command, args []string) error { return nil } +func namespaceNameOrAny(allNamespaces bool, namespaceName string) string { + if allNamespaces { + return "any" + } + return fmt.Sprintf("%q", namespaceName) +} + func getRowsToPrint(getAll bool, list summarisable) ([][]string, error) { noFilter := true var conditionType, conditionStatus string From 87f792915ad73876ee9efa39dc6edf7ccf78f9ca Mon Sep 17 00:00:00 2001 From: Alex Howard Date: Mon, 23 Jan 2023 12:14:15 -0500 Subject: [PATCH 371/818] Fix kube-prometheus-stack manifests Updates the HelmRepository and HelmRelease to remove chart verification and switch to using the official HTTPS repository at https://prometheus-community.github.io/helm-charts. OCI builds have temporarily been suspended for these charts due to pipeline errors. See: prometheus-community/helm-charts#2841 Signed-off-by: Alex Howard --- manifests/monitoring/kube-prometheus-stack/release.yaml | 2 -- manifests/monitoring/kube-prometheus-stack/repository.yaml | 5 +++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/manifests/monitoring/kube-prometheus-stack/release.yaml b/manifests/monitoring/kube-prometheus-stack/release.yaml index 30b87357..d7bab61a 100644 --- a/manifests/monitoring/kube-prometheus-stack/release.yaml +++ b/manifests/monitoring/kube-prometheus-stack/release.yaml @@ -11,8 +11,6 @@ spec: sourceRef: kind: HelmRepository name: prometheus-community - verify: - provider: cosign interval: 60m install: crds: Create diff --git a/manifests/monitoring/kube-prometheus-stack/repository.yaml b/manifests/monitoring/kube-prometheus-stack/repository.yaml index d2beb6b4..82d36073 100644 --- a/manifests/monitoring/kube-prometheus-stack/repository.yaml +++ b/manifests/monitoring/kube-prometheus-stack/repository.yaml @@ -4,5 +4,6 @@ metadata: name: prometheus-community spec: interval: 120m - type: oci - url: oci://ghcr.io/prometheus-community/charts + # OCI builds for kube-prometheus-stack have been temporarily disabled (see https://github.com/prometheus-community/helm-charts/issues/2940). + type: default + url: https://prometheus-community.github.io/helm-charts From d28cdd9726276dbebf12751d8e6c1b2aeecaf629 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Tue, 31 Jan 2023 11:26:44 +0200 Subject: [PATCH 372/818] Update dependencies - github.com/fluxcd/go-git-providers v0.13.0 - github.com/fluxcd/pkg/runtime v0.27.0 - github.com/fluxcd/pkg/ssa v0.23.0 - github.com/google/go-containerregistry v0.13.0 - sigs.k8s.io/controller-runtime v0.14.2 - k8s.io/* v0.26.1 Signed-off-by: Stefan Prodan --- go.mod | 98 ++++++------- go.sum | 345 ++++++++++++--------------------------------- tests/azure/go.mod | 30 ++-- tests/azure/go.sum | 64 ++++----- 4 files changed, 178 insertions(+), 359 deletions(-) diff --git a/go.mod b/go.mod index d411eb36..26dfd400 100644 --- a/go.mod +++ b/go.mod @@ -4,24 +4,24 @@ go 1.18 require ( github.com/Masterminds/semver/v3 v3.2.0 - github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4 + github.com/ProtonMail/go-crypto v0.0.0-20230127202215-f7f10de891d5 github.com/cyphar/filepath-securejoin v0.2.3 - github.com/distribution/distribution/v3 v3.0.0-20221208165359-362910506bc2 - github.com/fluxcd/go-git-providers v0.12.0 + github.com/distribution/distribution/v3 v3.0.0-20230131081513-cf87e8d07e8d + github.com/fluxcd/go-git-providers v0.13.0 github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 github.com/fluxcd/helm-controller/api v0.28.1 github.com/fluxcd/image-automation-controller/api v0.28.0 github.com/fluxcd/image-reflector-controller/api v0.23.1 github.com/fluxcd/kustomize-controller/api v0.32.0 github.com/fluxcd/notification-controller/api v0.30.2 - github.com/fluxcd/pkg/apis/meta v0.18.0 - github.com/fluxcd/pkg/git v0.7.0 - github.com/fluxcd/pkg/git/gogit v0.4.1 - github.com/fluxcd/pkg/kustomize v0.12.0 - github.com/fluxcd/pkg/oci v0.17.0 - github.com/fluxcd/pkg/runtime v0.24.0 + github.com/fluxcd/pkg/apis/meta v0.19.0 + github.com/fluxcd/pkg/git v0.8.0 + github.com/fluxcd/pkg/git/gogit v0.5.0 + github.com/fluxcd/pkg/kustomize v0.13.0 + github.com/fluxcd/pkg/oci v0.18.0 + github.com/fluxcd/pkg/runtime v0.27.0 github.com/fluxcd/pkg/sourceignore v0.3.0 - github.com/fluxcd/pkg/ssa v0.22.0 + github.com/fluxcd/pkg/ssa v0.23.0 github.com/fluxcd/pkg/ssh v0.7.0 github.com/fluxcd/pkg/untar v0.2.0 github.com/fluxcd/pkg/version v0.2.0 @@ -29,27 +29,27 @@ require ( github.com/gonvenience/bunt v1.3.4 github.com/gonvenience/ytbx v1.4.4 github.com/google/go-cmp v0.5.9 - github.com/google/go-containerregistry v0.12.1 + github.com/google/go-containerregistry v0.13.0 github.com/homeport/dyff v1.5.6 github.com/lucasb-eyer/go-colorful v1.2.0 github.com/manifoldco/promptui v0.9.0 github.com/mattn/go-shellwords v1.0.12 github.com/olekukonko/tablewriter v0.0.5 - github.com/onsi/gomega v1.24.2 + github.com/onsi/gomega v1.26.0 github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 github.com/spf13/cobra v1.6.1 github.com/spf13/pflag v1.0.5 github.com/theckman/yacspin v0.13.12 - golang.org/x/crypto v0.4.0 - golang.org/x/term v0.3.0 - k8s.io/api v0.25.4 - k8s.io/apiextensions-apiserver v0.25.4 - k8s.io/apimachinery v0.25.4 - k8s.io/cli-runtime v0.25.4 - k8s.io/client-go v0.25.4 - k8s.io/kubectl v0.25.4 + golang.org/x/crypto v0.5.0 + golang.org/x/term v0.4.0 + k8s.io/api v0.26.1 + k8s.io/apiextensions-apiserver v0.26.1 + k8s.io/apimachinery v0.26.1 + k8s.io/cli-runtime v0.26.1 + k8s.io/client-go v0.26.1 + k8s.io/kubectl v0.26.1 sigs.k8s.io/cli-utils v0.34.0 - sigs.k8s.io/controller-runtime v0.13.1 + sigs.k8s.io/controller-runtime v0.14.2 sigs.k8s.io/kustomize/api v0.12.1 sigs.k8s.io/kustomize/kyaml v0.13.9 sigs.k8s.io/yaml v1.3.0 @@ -62,35 +62,28 @@ replace golang.org/x/text => golang.org/x/text v0.4.0 replace gopkg.in/yaml.v3 => gopkg.in/yaml.v3 v3.0.1 require ( - cloud.google.com/go v0.99.0 // indirect - github.com/Azure/azure-sdk-for-go/sdk/azcore v1.2.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.3.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.2.0 // indirect - github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/internal v1.1.1 // indirect github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect - github.com/Azure/go-autorest v14.2.0+incompatible // indirect - github.com/Azure/go-autorest/autorest v0.11.27 // indirect - github.com/Azure/go-autorest/autorest/adal v0.9.20 // indirect - github.com/Azure/go-autorest/autorest/date v0.3.0 // indirect - github.com/Azure/go-autorest/logger v0.2.1 // indirect - github.com/Azure/go-autorest/tracing v0.6.0 // indirect github.com/AzureAD/microsoft-authentication-library-for-go v0.7.0 // indirect github.com/BurntSushi/toml v1.0.0 // indirect github.com/MakeNowJust/heredoc v1.0.0 // indirect github.com/Microsoft/go-winio v0.6.0 // indirect github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d // indirect github.com/acomagu/bufpipe v1.0.3 // indirect - github.com/aws/aws-sdk-go-v2 v1.17.2 // indirect - github.com/aws/aws-sdk-go-v2/config v1.18.4 // indirect - github.com/aws/aws-sdk-go-v2/credentials v1.13.4 // indirect - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.20 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.26 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.20 // indirect - github.com/aws/aws-sdk-go-v2/internal/ini v1.3.27 // indirect - github.com/aws/aws-sdk-go-v2/service/ecr v1.17.22 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.20 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.11.26 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.13.9 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.17.6 // indirect + github.com/aws/aws-sdk-go-v2 v1.17.3 // indirect + github.com/aws/aws-sdk-go-v2/config v1.18.10 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.13.10 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.21 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.27 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.21 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.3.28 // indirect + github.com/aws/aws-sdk-go-v2/service/ecr v1.18.1 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.21 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.12.0 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.0 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.18.2 // indirect github.com/aws/smithy-go v1.13.5 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bshuster-repo/logrus-logstash-hook v1.0.0 // indirect @@ -118,9 +111,9 @@ require ( github.com/evanphx/json-patch/v5 v5.6.0 // indirect github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f // indirect github.com/fatih/color v1.13.0 // indirect - github.com/felixge/httpsnoop v1.0.1 // indirect + github.com/felixge/httpsnoop v1.0.3 // indirect github.com/fluxcd/pkg/apis/acl v0.1.0 // indirect - github.com/fluxcd/pkg/apis/kustomize v0.7.0 // indirect + github.com/fluxcd/pkg/apis/kustomize v0.8.0 // indirect github.com/fluxcd/pkg/tar v0.2.0 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/go-errors/errors v1.4.2 // indirect @@ -153,7 +146,7 @@ require ( github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect - github.com/hashicorp/go-retryablehttp v0.7.1 // indirect + github.com/hashicorp/go-retryablehttp v0.7.2 // indirect github.com/hashicorp/golang-lru v0.5.4 // indirect github.com/imdario/mergo v0.3.13 // indirect github.com/inconshreveable/mousetrap v1.0.1 // indirect @@ -192,7 +185,6 @@ require ( github.com/prometheus/common v0.37.0 // indirect github.com/prometheus/procfs v0.8.0 // indirect github.com/rivo/uniseg v0.2.0 // indirect - github.com/russross/blackfriday v1.6.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/sergi/go-diff v1.2.0 // indirect github.com/sirupsen/logrus v1.9.0 // indirect @@ -208,12 +200,12 @@ require ( github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f // indirect go.starlark.net v0.0.0-20221028183056-acb66ad56dd2 // indirect golang.org/x/mod v0.7.0 // indirect - golang.org/x/net v0.4.0 // indirect + golang.org/x/net v0.5.0 // indirect golang.org/x/oauth2 v0.2.0 // indirect golang.org/x/sync v0.1.0 // indirect - golang.org/x/sys v0.3.0 // indirect - golang.org/x/text v0.5.0 // indirect - golang.org/x/time v0.2.0 // indirect + golang.org/x/sys v0.4.0 // indirect + golang.org/x/text v0.6.0 // indirect + golang.org/x/time v0.3.0 // indirect golang.org/x/tools v0.4.0 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect @@ -222,10 +214,10 @@ require ( gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/component-base v0.25.4 // indirect - k8s.io/klog/v2 v2.80.1 // indirect + k8s.io/component-base v0.26.1 // indirect + k8s.io/klog/v2 v2.90.0 // indirect k8s.io/kube-openapi v0.0.0-20221110221610-a28e98eb7c70 // indirect - k8s.io/utils v0.0.0-20221108210102-8e77b1f39fe2 // indirect + k8s.io/utils v0.0.0-20221128185143-99ec85e7a448 // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect ) diff --git a/go.sum b/go.sum index f05b6f65..dbf60e0b 100644 --- a/go.sum +++ b/go.sum @@ -13,20 +13,6 @@ cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKV cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= -cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= -cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= -cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= -cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= -cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= -cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= -cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= -cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= -cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= -cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= -cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= -cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= -cloud.google.com/go v0.99.0 h1:y/cM2iqGgGi5D5DQZl6D9STN/3dR/Vx5Mp8s752oJTY= -cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= @@ -45,31 +31,15 @@ cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohl cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/AdaLogics/go-fuzz-headers v0.0.0-20221103172237-443f56ff4ba8 h1:d+pBUmsteW5tM87xmVXHZ4+LibHRFn40SPAoZJOg2ak= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.2.0 h1:sVW/AFBTGyJxDaMYlq0ct3jUXTtj12tQ6zE2GZUgVQw= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.2.0/go.mod h1:uGG2W01BaETf0Ozp+QxxKJdMBNRWPdstHG0Fmdwn1/U= +github.com/AdaLogics/go-fuzz-headers v0.0.0-20230106234847-43070de90fa1 h1:EKPd1INOIyr5hWOWhvpmQpY6tKjeG0hT1s3AMC/9fic= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.3.0 h1:VuHAcMq8pU1IWNT/m5yRaGqbK0BiQKHT8X4DTp9CHdI= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.3.0/go.mod h1:tZoQYdDZNOiIjdSn0dVWVfl0NEPGOJqVLzSrcFk4Is0= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.2.0 h1:t/W5MYAuQy81cvM8VUNfRLzhtKpXhVUAN7Cd7KVbTyc= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.2.0/go.mod h1:NBanQUfSWiWn3QEpWDTCU0IjBECKOYvl2R8xdRtMtiM= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0 h1:jp0dGvZ7ZK0mgqnTSClMxa5xuRL7NZgHameVYF6BurY= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0/go.mod h1:eWRD7oawr1Mu1sLCawqVc0CUiF43ia3qQMxLscsKQ9w= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.1.1 h1:Oj853U9kG+RLTCQXpjvOnrv0WaZHxgmZz1TlLywgOPY= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.1.1/go.mod h1:eWRD7oawr1Mu1sLCawqVc0CUiF43ia3qQMxLscsKQ9w= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= -github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs= -github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= -github.com/Azure/go-autorest/autorest v0.11.27 h1:F3R3q42aWytozkV8ihzcgMO4OA4cuqr3bNlsEuF6//A= -github.com/Azure/go-autorest/autorest v0.11.27/go.mod h1:7l8ybrIdUmGqZMTD0sRtAr8NvbHjfofbf8RSP2q7w7U= -github.com/Azure/go-autorest/autorest/adal v0.9.18/go.mod h1:XVVeme+LZwABT8K5Lc3hA4nAe8LDBVle26gTrguhhPQ= -github.com/Azure/go-autorest/autorest/adal v0.9.20 h1:gJ3E98kMpFB1MFqQCvA1yFab8vthOeD4VlFRQULxahg= -github.com/Azure/go-autorest/autorest/adal v0.9.20/go.mod h1:XVVeme+LZwABT8K5Lc3hA4nAe8LDBVle26gTrguhhPQ= -github.com/Azure/go-autorest/autorest/date v0.3.0 h1:7gUk1U5M/CQbp9WoqinNzJar+8KY+LPI6wiWrP/myHw= -github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74= -github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= -github.com/Azure/go-autorest/autorest/mocks v0.4.2 h1:PGN4EDXnuQbojHbU0UWoNvmu9AGVwYHG9/fkDYhtAfw= -github.com/Azure/go-autorest/autorest/mocks v0.4.2/go.mod h1:Vy7OitM9Kei0i1Oj+LvyAWMXJHeKH1MVlzFugfVrmyU= -github.com/Azure/go-autorest/logger v0.2.1 h1:IG7i4p/mDa2Ce4TRyAO8IHnVhAVF3RFU+ZtXWSmf4Tg= -github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= -github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo= -github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= github.com/AzureAD/microsoft-authentication-library-for-go v0.7.0 h1:VgSJlZH5u0k2qxSpqyghcFQKmvYckj46uymKK5XzkBM= github.com/AzureAD/microsoft-authentication-library-for-go v0.7.0/go.mod h1:BDJ5qMFKx9DugEg3+uQSDCdbYPr5s9vBTrL9P8TpqOU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= @@ -87,8 +57,9 @@ github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2y github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= -github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4 h1:ra2OtmuW0AE5csawV4YXMNGNQQXvLRps3z2Z59OPO+I= github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4/go.mod h1:UBYPn8k0D56RtnR8RFQMjmh4KrZzWJ5o7Z9SYjossQ8= +github.com/ProtonMail/go-crypto v0.0.0-20230127202215-f7f10de891d5 h1:Fu4D/i1HBoWql9xVIfW50Kohujz+T3xXPV60JVb3Fao= +github.com/ProtonMail/go-crypto v0.0.0-20230127202215-f7f10de891d5/go.mod h1:I0gYDMZ6Z5GRU7l58bNFSkPTFN6Yl12dsUlAZ8xy98g= github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d h1:UrqY+r/OJnIp5u0s1SbQ8dVfLCZJsnvazdBP5hS4iRs= github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ= github.com/acomagu/bufpipe v1.0.3 h1:fxAGrHZTgQ9w5QqVItgzwj235/uYZYgbXitB+dLupOk= @@ -104,34 +75,30 @@ github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuW github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= -github.com/aws/aws-sdk-go-v2 v1.17.1/go.mod h1:JLnGeGONAyi2lWXI1p0PCIOIy333JMVK1U7Hf0aRFLw= -github.com/aws/aws-sdk-go-v2 v1.17.2 h1:r0yRZInwiPBNpQ4aDy/Ssh3ROWsGtKDwar2JS8Lm+N8= -github.com/aws/aws-sdk-go-v2 v1.17.2/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw= -github.com/aws/aws-sdk-go-v2/config v1.18.4 h1:VZKhr3uAADXHStS/Gf9xSYVmmaluTUfkc0dcbPiDsKE= -github.com/aws/aws-sdk-go-v2/config v1.18.4/go.mod h1:EZxMPLSdGAZ3eAmkqXfYbRppZJTzFTkv8VyEzJhKko4= -github.com/aws/aws-sdk-go-v2/credentials v1.13.4 h1:nEbHIyJy7mCvQ/kzGG7VWHSBpRB4H6sJy3bWierWUtg= -github.com/aws/aws-sdk-go-v2/credentials v1.13.4/go.mod h1:/Cj5w9LRsNTLSwexsohwDME32OzJ6U81Zs33zr2ZWOM= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.20 h1:tpNOglTZ8kg9T38NpcGBxudqfUAwUzyUnLQ4XSd0CHE= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.20/go.mod h1:d9xFpWd3qYwdIXM0fvu7deD08vvdRXyc/ueV+0SqaWE= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.25/go.mod h1:Zb29PYkf42vVYQY6pvSyJCJcFHlPIiY+YKdPtwnvMkY= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.26 h1:5WU31cY7m0tG+AiaXuXGoMzo2GBQ1IixtWa8Yywsgco= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.26/go.mod h1:2E0LdbJW6lbeU4uxjum99GZzI0ZjDpAb0CoSCM0oeEY= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.19/go.mod h1:6Q0546uHDp421okhmmGfbxzq2hBqbXFNpi4k+Q1JnQA= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.20 h1:WW0qSzDWoiWU2FS5DbKpxGilFVlCEJPwx4YtjdfI0Jw= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.20/go.mod h1:/+6lSiby8TBFpTVXZgKiN/rCfkYXEGvhlM4zCgPpt7w= -github.com/aws/aws-sdk-go-v2/internal/ini v1.3.27 h1:N2eKFw2S+JWRCtTt0IhIX7uoGGQciD4p6ba+SJv4WEU= -github.com/aws/aws-sdk-go-v2/internal/ini v1.3.27/go.mod h1:RdwFVc7PBYWY33fa2+8T1mSqQ7ZEK4ILpM0wfioDC3w= -github.com/aws/aws-sdk-go-v2/service/ecr v1.17.22 h1:cC+NNTWWyV0DZF94k2Ugz6NFSdcBoo08oNdYtj9hg5g= -github.com/aws/aws-sdk-go-v2/service/ecr v1.17.22/go.mod h1:kEVGiy2tACP0cegVqx4MrjsgQMSgrtgRq1fSa+Ix6F0= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.20 h1:jlgyHbkZQAgAc7VIxJDmtouH8eNjOk2REVAQfVhdaiQ= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.20/go.mod h1:Xs52xaLBqDEKRcAfX/hgjmD3YQ7c/W+BEyfamlO/W2E= -github.com/aws/aws-sdk-go-v2/service/sso v1.11.26 h1:ActQgdTNQej/RuUJjB9uxYVLDOvRGtUreXF8L3c8wyg= -github.com/aws/aws-sdk-go-v2/service/sso v1.11.26/go.mod h1:uB9tV79ULEZUXc6Ob18A46KSQ0JDlrplPni9XW6Ot60= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.13.9 h1:wihKuqYUlA2T/Rx+yu2s6NDAns8B9DgnRooB1PVhY+Q= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.13.9/go.mod h1:2E/3D/mB8/r2J7nK42daoKP/ooCwbf0q1PznNc+DZTU= -github.com/aws/aws-sdk-go-v2/service/sts v1.17.6 h1:VQFOLQVL3BrKM/NLO/7FiS4vcp5bqK0mGMyk09xLoAY= -github.com/aws/aws-sdk-go-v2/service/sts v1.17.6/go.mod h1:Az3OXXYGyfNwQNsK/31L4R75qFYnO641RZGAoV3uH1c= -github.com/aws/smithy-go v1.13.4/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= +github.com/aws/aws-sdk-go-v2 v1.17.3 h1:shN7NlnVzvDUgPQ+1rLMSxY8OWRNDRYtiqe0p/PgrhY= +github.com/aws/aws-sdk-go-v2 v1.17.3/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw= +github.com/aws/aws-sdk-go-v2/config v1.18.10 h1:Znce11DWswdh+5kOsIp+QaNfY9igp1QUN+fZHCKmeCI= +github.com/aws/aws-sdk-go-v2/config v1.18.10/go.mod h1:VATKco+pl+Qe1WW+RzvZTlPPe/09Gg9+vM0ZXsqb16k= +github.com/aws/aws-sdk-go-v2/credentials v1.13.10 h1:T4Y39IhelTLg1f3xiKJssThnFxsndS8B6OnmcXtKK+8= +github.com/aws/aws-sdk-go-v2/credentials v1.13.10/go.mod h1:tqAm4JmQaShel+Qi38hmd1QglSnnxaYt50k/9yGQzzc= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.21 h1:j9wi1kQ8b+e0FBVHxCqCGo4kxDU175hoDHcWAi0sauU= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.21/go.mod h1:ugwW57Z5Z48bpvUyZuaPy4Kv+vEfJWnIrky7RmkBvJg= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.27 h1:I3cakv2Uy1vNmmhRQmFptYDxOvBnwCdNwyw63N0RaRU= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.27/go.mod h1:a1/UpzeyBBerajpnP5nGZa9mGzsBn5cOKxm6NWQsvoI= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.21 h1:5NbbMrIzmUn/TXFqAle6mgrH5m9cOvMLRGL7pnG8tRE= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.21/go.mod h1:+Gxn8jYn5k9ebfHEqlhrMirFjSW0v0C9fI+KN5vk2kE= +github.com/aws/aws-sdk-go-v2/internal/ini v1.3.28 h1:KeTxcGdNnQudb46oOl4d90f2I33DF/c6q3RnZAmvQdQ= +github.com/aws/aws-sdk-go-v2/internal/ini v1.3.28/go.mod h1:yRZVr/iT0AqyHeep00SZ4YfBAKojXz08w3XMBscdi0c= +github.com/aws/aws-sdk-go-v2/service/ecr v1.18.1 h1:fZNQcqqyAcb34XZ6uNuDlmKIaZKRGdoXYfK5WLRjBbQ= +github.com/aws/aws-sdk-go-v2/service/ecr v1.18.1/go.mod h1:9yGOFsa2OcdyePojE89xNGtdBusTyc8ocjpiuFtFc0g= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.21 h1:5C6XgTViSb0bunmU57b3CT+MhxULqHH2721FVA+/kDM= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.21/go.mod h1:lRToEJsn+DRA9lW4O9L9+/3hjTkUzlzyzHqn8MTds5k= +github.com/aws/aws-sdk-go-v2/service/sso v1.12.0 h1:/2gzjhQowRLarkkBOGPXSRnb8sQ2RVsjdG1C/UliK/c= +github.com/aws/aws-sdk-go-v2/service/sso v1.12.0/go.mod h1:wo/B7uUm/7zw/dWhBJ4FXuw1sySU5lyIhVg1Bu2yL9A= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.0 h1:Jfly6mRxk2ZOSlbCvZfKNS7TukSx1mIzhSsqZ/IGSZI= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.0/go.mod h1:TZSH7xLO7+phDtViY/KUp9WGCJMQkLJ/VpgkTFd5gh8= +github.com/aws/aws-sdk-go-v2/service/sts v1.18.2 h1:J/4wIaGInCEYCGhTSruxCxeoA5cy91a+JT7cHFKFSHQ= +github.com/aws/aws-sdk-go-v2/service/sts v1.18.2/go.mod h1:+lGbb3+1ugwKrNTWcf2RT05Xmp543B06zDFTwiTLp7I= github.com/aws/smithy-go v1.13.5 h1:hgz0X/DX0dGqTYpGALqXJoRKRj5oQ7150i5FdTePzO8= github.com/aws/smithy-go v1.13.5/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= @@ -168,7 +135,6 @@ github.com/cloudflare/circl v1.1.0/go.mod h1:prBCrKB9DV4poKZY1l9zBXg2QJY7mvgRvtM github.com/cloudflare/circl v1.3.1 h1:4OVCZRL62ijwEwxnF6I7hLwxvIYi3VaZt8TflkqtrtA= github.com/cloudflare/circl v1.3.1/go.mod h1:+CauBF6R70Jqcyl8N2hC8pAXYbWkGIezuSbuGLtRhnw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/containerd/stargz-snapshotter/estargz v0.12.1 h1:+7nYmHJb0tEkcRaAW+MHqoKaJYZmkikupxCqVtmPuY0= @@ -183,8 +149,8 @@ github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxG github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/distribution/distribution/v3 v3.0.0-20221208165359-362910506bc2 h1:aBfCb7iqHmDEIp6fBvC/hQUddQfg+3qdYjwzaiP9Hnc= -github.com/distribution/distribution/v3 v3.0.0-20221208165359-362910506bc2/go.mod h1:WHNsWjnIn2V1LYOrME7e8KxSeKunYHsxEm4am0BUtcI= +github.com/distribution/distribution/v3 v3.0.0-20230131081513-cf87e8d07e8d h1:q1rtMRnFYz9NAVV4k2iL/w5mNkur3TJysH3Phi9Ns08= +github.com/distribution/distribution/v3 v3.0.0-20230131081513-cf87e8d07e8d/go.mod h1:WHNsWjnIn2V1LYOrME7e8KxSeKunYHsxEm4am0BUtcI= github.com/dnaeon/go-vcr v1.1.0 h1:ReYa/UBrRyQdant9B4fNHGoCNKw6qh6P0fsdGmZpR7c= github.com/docker/cli v20.10.20+incompatible h1:lWQbHSHUFs7KraSN2jOJK7zbMS2jNCHI4mt4xUFUVQ4= github.com/docker/cli v20.10.20+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= @@ -212,9 +178,7 @@ github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FM github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/evanphx/json-patch v0.5.2/go.mod h1:ZWS5hhDbVDyob71nXKNL0+PWn6ToqBHMikGIFbs31qQ= @@ -226,12 +190,13 @@ github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f h1:Wl78ApPPB2 github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f/go.mod h1:OSYXu++VVOHnXeitef/D8n/6y4QV8uLHSFXX4NeXMGc= github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= -github.com/felixge/httpsnoop v1.0.1 h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8SPQ= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/felixge/httpsnoop v1.0.3 h1:s/nj+GCswXYzN5v2DpNMuMQYe+0DDwt5WVCU6CWBdXk= +github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0= github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= -github.com/fluxcd/go-git-providers v0.12.0 h1:G9aK7+fZ8jTOTrGfIIWpx76TjdceshOwelazx3FHVZ8= -github.com/fluxcd/go-git-providers v0.12.0/go.mod h1:VEItGJ67Xc/7Cadh/oPMPUimXv75R0XqHFtF3J4tIdE= +github.com/fluxcd/go-git-providers v0.13.0 h1:VTuOMfatoqkCrEUOX5CVpSMiA1TIs0ioLh3LPmFCqiw= +github.com/fluxcd/go-git-providers v0.13.0/go.mod h1:VEItGJ67Xc/7Cadh/oPMPUimXv75R0XqHFtF3J4tIdE= github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 h1:Gm5sGGk+/Wq6RhX4xpCZ2IqjDp5XkjlhENaAuAlpdKc= github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4/go.mod h1:raWgfUV7lDQVXp4QXUaeNNJkRVKz97UQuF+0kdY7Vmo= github.com/fluxcd/helm-controller/api v0.28.1 h1:2qjZymRAbl/OqId2lpKCzuleKhId34X1zQ0rcPlMKFQ= @@ -246,25 +211,25 @@ github.com/fluxcd/notification-controller/api v0.30.2 h1:IOxRm/ALdKTk6Xwwc3Tpsfy github.com/fluxcd/notification-controller/api v0.30.2/go.mod h1:Ve4SE6jeiGlyItvHa7/UpTPOVC6ac5K76Frv1P7hqLw= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= -github.com/fluxcd/pkg/apis/kustomize v0.7.0 h1:X2htBmJ91nGYv4d93gin665MFWKNGiNwUiZ08/Zz0hY= -github.com/fluxcd/pkg/apis/kustomize v0.7.0/go.mod h1:Mu+KdktsEKWA4l/33CZdY5lB4hz51mqfcLzBZSwAqVg= -github.com/fluxcd/pkg/apis/meta v0.18.0 h1:s0LeulWcQ4DxVX6805vgDTxlA6bAYk+Lq1QHSnNdqLM= -github.com/fluxcd/pkg/apis/meta v0.18.0/go.mod h1:pYvXRFi1UKNNrGR34jw3uqOnMXw9X6dTkML8j5Z7tis= -github.com/fluxcd/pkg/git v0.7.0 h1:sQHRpFMcOzEdqlyGMjFv2LKMdcoE5xeUr2UcRrsLRG8= -github.com/fluxcd/pkg/git v0.7.0/go.mod h1:3deiLPws4DSQ3hqwtQd7Dt66GXTN/4RcT/yHAljXaHo= -github.com/fluxcd/pkg/git/gogit v0.4.1 h1:0KIZRvBBeTcoYVF34ys7mWimxzyuQkx5bBMs0/hfzZ4= -github.com/fluxcd/pkg/git/gogit v0.4.1/go.mod h1:fMBM6efbAPqDEoU2M/ve+P3b/oQCuwRbia4bn9006jM= +github.com/fluxcd/pkg/apis/kustomize v0.8.0 h1:A6aLolxPV2Sll44SOHiX96lbXXmRZmS5BoEerkRHrfM= +github.com/fluxcd/pkg/apis/kustomize v0.8.0/go.mod h1:9DPEVSfVIkiC2H3Dk6Ght4YJkswhYIaufXla4tB5Y84= +github.com/fluxcd/pkg/apis/meta v0.19.0 h1:CX75e/eaRWZDTzNdMSWomY1InlssLKcS8GQDSg/aopI= +github.com/fluxcd/pkg/apis/meta v0.19.0/go.mod h1:7b6prDPsViyAzoY7eRfSPS0/MbXpGGsOMvRq2QrTKa4= +github.com/fluxcd/pkg/git v0.8.0 h1:7mIbdqSf+qXwY17+A+Kge2yWIJCMJ1p1DiBDGnKRohg= +github.com/fluxcd/pkg/git v0.8.0/go.mod h1:3deiLPws4DSQ3hqwtQd7Dt66GXTN/4RcT/yHAljXaHo= +github.com/fluxcd/pkg/git/gogit v0.5.0 h1:3Fzx2W16K/37ZHT6WmLFuRYgs+CGvzka+dwY7ktoxJE= +github.com/fluxcd/pkg/git/gogit v0.5.0/go.mod h1:cqoJhKXCmWuN2ezD/2ECUYwR8gR7svMRJoHRr9VyTQc= github.com/fluxcd/pkg/gittestserver v0.8.0 h1:YrYe63KScKlLxx0GAiQthx2XqHDx0vKitIIx4JnDtIo= -github.com/fluxcd/pkg/kustomize v0.12.0 h1:4MQdbP3M8NTIcr8TgNMxRCN+2xZoMWtCDDS3RiOT+8M= -github.com/fluxcd/pkg/kustomize v0.12.0/go.mod h1:awHID4OKe2/WAfTFg4u0fURXZPUkrIslSZNSPX9MEFQ= -github.com/fluxcd/pkg/oci v0.17.0 h1:DYoT0HG3DogEmeXRif6ZzTYwAZe+iqYWP4QpsP37ZBE= -github.com/fluxcd/pkg/oci v0.17.0/go.mod h1:UjxCQcdcKtog/ad9Vr2yPYjz9keNSoLdTOOiUNqCRiY= -github.com/fluxcd/pkg/runtime v0.24.0 h1:rQmm5Xq8K7f8xcPj1oNOInM1x4YwmgTucZJOP51Xmr4= -github.com/fluxcd/pkg/runtime v0.24.0/go.mod h1:I2T+HWVNzX0cxm9TgH+SVNHTwqlmEDiSke43JXsq9iY= +github.com/fluxcd/pkg/kustomize v0.13.0 h1:oC50lpGdz/04aH4dPS/kRBjo+7PUx7BgGsJtSS0CmmE= +github.com/fluxcd/pkg/kustomize v0.13.0/go.mod h1:6vAmxEe/41jBEspGq4OZA/4WlnszPyavm74TGSEVpXg= +github.com/fluxcd/pkg/oci v0.18.0 h1:x5n3gW1lX6wrqvWP4ZkOXJ8LqLKy891uKwifCXSqKi4= +github.com/fluxcd/pkg/oci v0.18.0/go.mod h1:zXoxvE4uuIEOgA98IM5Wv/uRxs7sdbaTlGDjzHb9yiA= +github.com/fluxcd/pkg/runtime v0.27.0 h1:zVA95Z0KvNjvZxEZhvIbJyJIwtaiv1aVttHZ4YB/FzY= +github.com/fluxcd/pkg/runtime v0.27.0/go.mod h1:fC1l4Wv1hnsqPKB46eDZBXF8RMZm5FXeU4bnJkwGkqk= github.com/fluxcd/pkg/sourceignore v0.3.0 h1:pFO3hKV9ub+2SrNZPZE7xfiRhxsycRrd7JK7qB26nVw= github.com/fluxcd/pkg/sourceignore v0.3.0/go.mod h1:ak3Tve/KwVzytZ5V2yBlGGpTJ/2oQ9kcP3iuwBOAHGo= -github.com/fluxcd/pkg/ssa v0.22.0 h1:HvJTuiYLZMxCjin7bAqBgnc2RjSqEfYrMbV5yINoM64= -github.com/fluxcd/pkg/ssa v0.22.0/go.mod h1:QND0ZNOQ5EzFxoNKfjUxE9J46AbRK3WKF8YkURwbVg0= +github.com/fluxcd/pkg/ssa v0.23.0 h1:e51n2642tyl8iytYQ68geg8E/6tLJcYqXl83HFrJcr4= +github.com/fluxcd/pkg/ssa v0.23.0/go.mod h1:fbnulY5zeKBC6dXwNIgMc9DfPjEgjfhweL031/9ZFKQ= github.com/fluxcd/pkg/ssh v0.7.0 h1:FX5ky8SU9dYwbM6zEIDR3TSveLF01iyS95CtB5Ykpno= github.com/fluxcd/pkg/ssh v0.7.0/go.mod h1:tCVZJI8jPOL0XCInJOrYGKapWA/zZCzqPtpiYUSQxww= github.com/fluxcd/pkg/tar v0.2.0 h1:HEUHgONQYsJGeZZ4x6h5nQU9Aox1I4T3bOp1faWTqf8= @@ -322,8 +287,6 @@ github.com/gofrs/uuid v4.2.0+incompatible h1:yyYWMnhkhrKwwr8gAOcOCYxOOscHgDS9yZg github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= -github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang-jwt/jwt/v4 v4.4.2 h1:rcc4lwaZgFMCZ5jxF9ABolDcIHdBytAFgqFPbSJQAYs= github.com/golang-jwt/jwt/v4 v4.4.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= @@ -339,8 +302,6 @@ github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= -github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -356,10 +317,8 @@ github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QD github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/gomodule/redigo v1.8.2 h1:H5XSIre1MB5NbPYFp+i1NBbb5qN1W8Y8YAQoAYbkm8k= github.com/gomodule/redigo v1.8.2/go.mod h1:P9dn9mFrCBvWhGE1wpxx6fgq7BAeLBk+UUUzlpkBYO0= github.com/gonvenience/bunt v1.3.4 h1:Row599Ohja2BPooaqd1tHYdTAKu6SWq7W/UeakTXddM= @@ -388,15 +347,13 @@ github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-containerregistry v0.12.1 h1:W1mzdNUTx4Zla4JaixCRLhORcR7G6KxE5hHl5fkPsp8= -github.com/google/go-containerregistry v0.12.1/go.mod h1:sdIK+oHQO7B93xI8UweYdl887YhuIwg9vz8BSLH3+8k= +github.com/google/go-containerregistry v0.13.0 h1:y1C7Z3e149OJbOPDBxLYR8ITPz8dTKqQwjErKVHJC8k= +github.com/google/go-containerregistry v0.13.0/go.mod h1:J9FQ+eSS4a1aC2GNZxvNpbWhgp0487v+cgiilB4FqDo= github.com/google/go-github/v48 v48.2.0 h1:68puzySE6WqUY9KWmpOsDEQfDZsso98rT6pZcz9HqcE= github.com/google/go-github/v48 v48.2.0/go.mod h1:dDlehKBDo850ZPvCTK0sEqTCVWcrGl2LcDiajkYi89Y= github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= @@ -406,8 +363,6 @@ github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= @@ -415,13 +370,6 @@ github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= @@ -430,8 +378,6 @@ github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= -github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= @@ -443,15 +389,14 @@ github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFb github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= github.com/hashicorp/go-hclog v0.9.2 h1:CG6TE5H9/JXsFWJCfoIVpKFIkFe6ysEuHirp4DxCsHI= github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= -github.com/hashicorp/go-retryablehttp v0.7.1 h1:sUiuQAnLlbvmExtFQs72iFW/HXeUn8Z1aJLQ4LJJbTQ= -github.com/hashicorp/go-retryablehttp v0.7.1/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= +github.com/hashicorp/go-retryablehttp v0.7.2 h1:AcYqCvkpalPnPF2pn0KamgwamS42TqUDDYFRKq/RAd0= +github.com/hashicorp/go-retryablehttp v0.7.2/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= @@ -459,7 +404,6 @@ github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uG github.com/homeport/dyff v1.5.6 h1:6PNzGM0azeYXs401RZSLyIUS4sIX+YY3WBEZ3bnzkiE= github.com/homeport/dyff v1.5.6/go.mod h1:cMmplDz/DeUWPB4T/sD9GDpuTnMD2nk3rjn2f+5roEU= 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.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk= github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= @@ -565,14 +509,14 @@ github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= -github.com/onsi/ginkgo/v2 v2.6.1 h1:1xQPCjcqYw/J5LchOcp4/2q/jzJFjiAOc25chhnDw+Q= -github.com/onsi/gomega v1.24.2 h1:J/tulyYK6JwBldPViHJReihxxZ+22FHs0piGjQAvoUE= -github.com/onsi/gomega v1.24.2/go.mod h1:gs3J10IS7Z7r7eXRoNJIrNqU4ToQukCJhFtKrWgHWnk= +github.com/onsi/ginkgo/v2 v2.7.0 h1:/XxtEV3I3Eif/HobnVx9YmJgk8ENdRsuUmM+fLCFNow= +github.com/onsi/gomega v1.26.0 h1:03cDLK28U6hWvCAns6NeydX3zIm4SF3ci69ulidS32Q= +github.com/onsi/gomega v1.26.0/go.mod h1:r+zV744Re+DiYCIPRlYOTxn0YkOLcAnW8k1xXdMPGhM= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= github.com/opencontainers/image-spec v1.1.0-rc2/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= -github.com/otiai10/copy v1.7.0 h1:hVoPiN+t+7d2nzzwMiDHPSOogsWAStewq3TwU05+clE= +github.com/otiai10/copy v1.9.0 h1:7KFNiCgZ91Ru4qW4CWPf/7jqtxLagGRmIxWldPP9VY4= github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= @@ -620,8 +564,6 @@ github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/russross/blackfriday v1.6.0 h1:KqfZb0pUVN2lYqZUYRddxF4OR8ZMURnJIG5Y3VRLtww= -github.com/russross/blackfriday v1.6.0/go.mod h1:ti0ldHuxg49ri4ksnFxlkCfN+hvslNlmVHqNRXXJNAY= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= @@ -678,7 +620,6 @@ github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43 h1:+lm10QQTNSBd8DVTNGHx7o/IKu9HYDvLMffDhbyLccI= github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43/go.mod h1:aX5oPXxHm3bOH+xeAttToC8pqch2ScQN/JoXYupl6xs= @@ -691,15 +632,13 @@ go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= -go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.starlark.net v0.0.0-20221028183056-acb66ad56dd2 h1:5/KzhcSqd4UgY51l17r7C5g/JiE6DRw1Vq7VJfQHuMc= go.starlark.net v0.0.0-20221028183056-acb66ad56dd2/go.mod h1:kIVgS18CjmEC3PqMd5kaJSGEifyV/CeB9x506ZJ1Vbk= go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk= go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= -go.uber.org/zap v1.23.0 h1:OjGQ5KQDEUawVHxNwQgPpiypGHOxo2mNZsOqTak4fFY= +go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= @@ -710,13 +649,12 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= -golang.org/x/crypto v0.4.0 h1:UVQgzMY87xqpKNgb+kDsll2Igd33HszWHFLmpaRMq/8= -golang.org/x/crypto v0.4.0/go.mod h1:3quD/ATkf6oY+rnes5c3ExXTbLc8mueNue5/DoinL80= +golang.org/x/crypto v0.5.0 h1:U/0M97KRkSFvyD/3FSmdP5W5swImpNgle/EHFhOsQPE= +golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -739,8 +677,6 @@ golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHl golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= @@ -749,9 +685,6 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -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.7.0 h1:LapD9S96VoQRhi/GrNTqeBJFrUjs5UHCAtTlgwA5oZA= golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= @@ -784,15 +717,9 @@ golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81R golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210326060303-6b1517762897/go.mod h1:uSPa2vr4CLtc/ILN5odXGNXS6mhrKVzTaCXzk9m6W3k= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= @@ -801,24 +728,14 @@ golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.4.0 h1:Q5QPcMlvfxFTAPV0+07Xz/MpK9NTXu2VDUuy0FeMfaU= -golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= +golang.org/x/net v0.5.0 h1:GyT4nK/YDHSqa1c4753ouYCDajOYKTja9Xb/OHtgvSw= +golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= 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= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= golang.org/x/oauth2 v0.2.0 h1:GtQkldQ9m7yvzCL1V+LrYow3Khe0eJH0w7RbX/VbaIU= golang.org/x/oauth2 v0.2.0/go.mod h1:Cwn6afJ8jrQwYMxQDTpISoXmXW9I6qF6vDeuuoX3Ibs= @@ -832,7 +749,6 @@ golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -872,35 +788,22 @@ golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210502180810-71e4cd670f79/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -910,22 +813,22 @@ golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.3.0 h1:w8ZOecv6NaNa/zC8944JTU3vz4u6Lagfk4RPQxv92NQ= -golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18= +golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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= golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.3.0 h1:qoo4akIqOcDME5bhc/NgxUdovd6BSS2uMsVjB56q1xI= -golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= +golang.org/x/term v0.4.0 h1:O7UWfv5+A2qiuulQk30kVinPoMtoIPeVaKLEgLpVkvg= +golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.2.0 h1:52I/1L54xyEQAYdtcSuxtiT84KGYTBGXwayxmIpNJhE= -golang.org/x/time v0.2.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= +golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= @@ -966,18 +869,7 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -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.4.0 h1:7mTAgkunk3fr4GAloyyCasadO6h9zSsQZbwvcaIciV4= golang.org/x/tools v0.4.0/go.mod h1:UE5sM2OK9E/d67R0ANs2xJizIymRP5gJU295PvKXxjQ= @@ -1003,20 +895,6 @@ google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0M google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= -google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= -google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= -google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= -google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= -google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= -google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= -google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= -google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= -google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= -google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= -google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= -google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= -google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= -google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1055,34 +933,6 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= -google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= -google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= -google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= -google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= -google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= -google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= @@ -1096,20 +946,9 @@ google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKa google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= -google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= -google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= -google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -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= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -1158,33 +997,33 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -k8s.io/api v0.25.4 h1:3YO8J4RtmG7elEgaWMb4HgmpS2CfY1QlaOz9nwB+ZSs= -k8s.io/api v0.25.4/go.mod h1:IG2+RzyPQLllQxnhzD8KQNEu4c4YvyDTpSMztf4A0OQ= -k8s.io/apiextensions-apiserver v0.25.4 h1:7hu9pF+xikxQuQZ7/30z/qxIPZc2J1lFElPtr7f+B6U= -k8s.io/apiextensions-apiserver v0.25.4/go.mod h1:bkSGki5YBoZWdn5pWtNIdGvDrrsRWlmnvl9a+tAw5vQ= -k8s.io/apimachinery v0.25.4 h1:CtXsuaitMESSu339tfhVXhQrPET+EiWnIY1rcurKnAc= -k8s.io/apimachinery v0.25.4/go.mod h1:jaF9C/iPNM1FuLl7Zuy5b9v+n35HGSh6AQ4HYRkCqwo= -k8s.io/cli-runtime v0.25.4 h1:GTSBN7aKBrc2LqpdO30CmHQqJtRmotxV7XsMSP+QZIk= -k8s.io/cli-runtime v0.25.4/go.mod h1:JGOw1CR8v4Mcz6cEKA7bFQe0bPrNn1l5sGAX1/Ke4Eg= -k8s.io/client-go v0.25.4 h1:3RNRDffAkNU56M/a7gUfXaEzdhZlYhoW8dgViGy5fn8= -k8s.io/client-go v0.25.4/go.mod h1:8trHCAC83XKY0wsBIpbirZU4NTUpbuhc2JnI7OruGZw= -k8s.io/component-base v0.25.4 h1:n1bjg9Yt+G1C0WnIDJmg2fo6wbEU1UGMRiQSjmj7hNQ= -k8s.io/component-base v0.25.4/go.mod h1:nnZJU8OP13PJEm6/p5V2ztgX2oyteIaAGKGMYb2L2cY= -k8s.io/klog/v2 v2.80.1 h1:atnLQ121W371wYYFawwYx1aEY2eUfs4l3J72wtgAwV4= -k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/api v0.26.1 h1:f+SWYiPd/GsiWwVRz+NbFyCgvv75Pk9NK6dlkZgpCRQ= +k8s.io/api v0.26.1/go.mod h1:xd/GBNgR0f707+ATNyPmQ1oyKSgndzXij81FzWGsejg= +k8s.io/apiextensions-apiserver v0.26.1 h1:cB8h1SRk6e/+i3NOrQgSFij1B2S0Y0wDoNl66bn8RMI= +k8s.io/apiextensions-apiserver v0.26.1/go.mod h1:AptjOSXDGuE0JICx/Em15PaoO7buLwTs0dGleIHixSM= +k8s.io/apimachinery v0.26.1 h1:8EZ/eGJL+hY/MYCNwhmDzVqq2lPl3N3Bo8rvweJwXUQ= +k8s.io/apimachinery v0.26.1/go.mod h1:tnPmbONNJ7ByJNz9+n9kMjNP8ON+1qoAIIC70lztu74= +k8s.io/cli-runtime v0.26.1 h1:f9+bRQ1V3elQsx37KmZy5fRAh56mVLbE9A7EMdlqVdI= +k8s.io/cli-runtime v0.26.1/go.mod h1:+e5Ym/ARySKscUhZ8K3hZ+ZBo/wYPIcg+7b5sFYi6Gg= +k8s.io/client-go v0.26.1 h1:87CXzYJnAMGaa/IDDfRdhTzxk/wzGZ+/HUQpqgVSZXU= +k8s.io/client-go v0.26.1/go.mod h1:IWNSglg+rQ3OcvDkhY6+QLeasV4OYHDjdqeWkDQZwGE= +k8s.io/component-base v0.26.1 h1:4ahudpeQXHZL5kko+iDHqLj/FSGAEUnSVO0EBbgDd+4= +k8s.io/component-base v0.26.1/go.mod h1:VHrLR0b58oC035w6YQiBSbtsf0ThuSwXP+p5dD/kAWU= +k8s.io/klog/v2 v2.90.0 h1:VkTxIV/FjRXn1fgNNcKGM8cfmL1Z33ZjXRTVxKCoF5M= +k8s.io/klog/v2 v2.90.0/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/kube-openapi v0.0.0-20221110221610-a28e98eb7c70 h1:zfqQc1V6/ZgGpvrOVvr62OjiqQX4lZjfznK34NQwkqw= k8s.io/kube-openapi v0.0.0-20221110221610-a28e98eb7c70/go.mod h1:+Axhij7bCpeqhklhUTe3xmOn6bWxolyZEeyaFpjGtl4= -k8s.io/kubectl v0.25.4 h1:O3OA1z4V1ZyvxCvScjq0pxAP7ABgznr8UvnVObgI6Dc= -k8s.io/kubectl v0.25.4/go.mod h1:CKMrQ67Bn2YCP26tZStPQGq62zr9pvzEf65A0navm8k= -k8s.io/utils v0.0.0-20221108210102-8e77b1f39fe2 h1:GfD9OzL11kvZN5iArC6oTS7RTj7oJOIfnislxYlqTj8= -k8s.io/utils v0.0.0-20221108210102-8e77b1f39fe2/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +k8s.io/kubectl v0.26.1 h1:K8A0Jjlwg8GqrxOXxAbjY5xtmXYeYjLU96cHp2WMQ7s= +k8s.io/kubectl v0.26.1/go.mod h1:miYFVzldVbdIiXMrHZYmL/EDWwJKM+F0sSsdxsATFPo= +k8s.io/utils v0.0.0-20221128185143-99ec85e7a448 h1:KTgPnR10d5zhztWptI952TNtt/4u5h3IzDXkdIMuo2Y= +k8s.io/utils v0.0.0-20221128185143-99ec85e7a448/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/cli-utils v0.34.0 h1:zCUitt54f0/MYj/ajVFnG6XSXMhpZ72O/3RewIchW8w= sigs.k8s.io/cli-utils v0.34.0/go.mod h1:EXyMwPMu9OL+LRnj0JEMsGG/fRvbgFadcVlSnE8RhFs= -sigs.k8s.io/controller-runtime v0.13.1 h1:tUsRCSJVM1QQOOeViGeX3GMT3dQF1eePPw6sEE3xSlg= -sigs.k8s.io/controller-runtime v0.13.1/go.mod h1:Zbz+el8Yg31jubvAEyglRZGdLAjplZl+PgtYNI6WNTI= +sigs.k8s.io/controller-runtime v0.14.2 h1:P6IwDhbsRWsBClt/8/h8Zy36bCuGuW5Op7MHpFrN/60= +sigs.k8s.io/controller-runtime v0.14.2/go.mod h1:WqIdsAY6JBsjfc/CqO0CORmNtoCtE4S6qbPc9s68h+0= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= sigs.k8s.io/kustomize/api v0.12.1 h1:7YM7gW3kYBwtKvoY216ZzY+8hM+lV53LUayghNRJ0vM= diff --git a/tests/azure/go.mod b/tests/azure/go.mod index c35d5b24..f12fc094 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -5,15 +5,15 @@ go 1.19 require ( github.com/Azure/azure-event-hubs-go/v3 v3.4.0 github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 - github.com/fluxcd/helm-controller/api v0.28.0 + github.com/fluxcd/helm-controller/api v0.28.1 github.com/fluxcd/image-automation-controller/api v0.28.0 github.com/fluxcd/image-reflector-controller/api v0.23.1 github.com/fluxcd/kustomize-controller/api v0.32.0 - github.com/fluxcd/notification-controller/api v0.30.1 - github.com/fluxcd/pkg/apis/event v0.2.0 - github.com/fluxcd/pkg/apis/meta v0.18.0 - github.com/fluxcd/pkg/git v0.7.0 - github.com/fluxcd/pkg/git/gogit v0.4.0 + github.com/fluxcd/notification-controller/api v0.30.2 + github.com/fluxcd/pkg/apis/event v0.3.0 + github.com/fluxcd/pkg/apis/meta v0.19.0 + github.com/fluxcd/pkg/git v0.8.0 + github.com/fluxcd/pkg/git/gogit v0.5.0 github.com/fluxcd/source-controller/api v0.33.0 github.com/hashicorp/hc-install v0.4.0 github.com/hashicorp/terraform-exec v0.17.3 @@ -21,10 +21,10 @@ require ( github.com/stretchr/testify v1.8.1 github.com/whilp/git-urls v1.0.0 go.uber.org/multierr v1.9.0 - k8s.io/api v0.25.4 - k8s.io/apimachinery v0.25.4 - k8s.io/client-go v0.25.4 - sigs.k8s.io/controller-runtime v0.13.1 + k8s.io/api v0.26.1 + k8s.io/apimachinery v0.26.1 + k8s.io/client-go v0.26.1 + sigs.k8s.io/controller-runtime v0.14.2 ) // Fix CVE-2022-32149 @@ -60,7 +60,6 @@ require ( github.com/fluxcd/pkg/apis/kustomize v0.7.0 // indirect github.com/fluxcd/pkg/ssh v0.7.0 // indirect github.com/fluxcd/pkg/version v0.2.0 // indirect - github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/go-git/gcfg v1.5.0 // indirect github.com/go-git/go-billy/v5 v5.3.1 // indirect github.com/go-logr/logr v1.2.3 // indirect @@ -90,17 +89,14 @@ require ( github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect - github.com/onsi/ginkgo/v2 v2.5.0 // indirect github.com/pjbgf/sha1cd v0.2.3 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/prometheus/client_golang v1.14.0 // indirect github.com/sergi/go-diff v1.2.0 // indirect github.com/skeema/knownhosts v1.1.0 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect github.com/zclconf/go-cty v1.11.0 // indirect go.uber.org/atomic v1.10.0 // indirect - go.uber.org/zap v1.23.0 // indirect golang.org/x/crypto v0.4.0 // indirect golang.org/x/mod v0.7.0 // indirect golang.org/x/net v0.4.0 // indirect @@ -108,7 +104,7 @@ require ( golang.org/x/sys v0.3.0 // indirect golang.org/x/term v0.3.0 // indirect golang.org/x/text v0.5.0 // indirect - golang.org/x/time v0.2.0 // indirect + golang.org/x/time v0.3.0 // indirect golang.org/x/tools v0.4.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/protobuf v1.28.1 // indirect @@ -116,10 +112,10 @@ require ( gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/apiextensions-apiserver v0.25.4 // indirect + k8s.io/apiextensions-apiserver v0.26.1 // indirect k8s.io/klog/v2 v2.80.1 // indirect k8s.io/kube-openapi v0.0.0-20221110221610-a28e98eb7c70 // indirect - k8s.io/utils v0.0.0-20221108210102-8e77b1f39fe2 // indirect + k8s.io/utils v0.0.0-20221128185143-99ec85e7a448 // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect sigs.k8s.io/yaml v1.3.0 // indirect diff --git a/tests/azure/go.sum b/tests/azure/go.sum index 94ef3e8b..c6767602 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -128,28 +128,28 @@ github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 h1:Gm5sGGk+/Wq6RhX4xpCZ2IqjDp5XkjlhENaAuAlpdKc= github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4/go.mod h1:raWgfUV7lDQVXp4QXUaeNNJkRVKz97UQuF+0kdY7Vmo= -github.com/fluxcd/helm-controller/api v0.28.0 h1:X2l1iC7nb8YWnN7EsOZBOALYyhGn9BxI599kQog3SDw= -github.com/fluxcd/helm-controller/api v0.28.0/go.mod h1:/qCtlP718rveiAL7Mova4fGAk0aZv2qyYQn87zcUNhs= +github.com/fluxcd/helm-controller/api v0.28.1 h1:2qjZymRAbl/OqId2lpKCzuleKhId34X1zQ0rcPlMKFQ= +github.com/fluxcd/helm-controller/api v0.28.1/go.mod h1:/qCtlP718rveiAL7Mova4fGAk0aZv2qyYQn87zcUNhs= github.com/fluxcd/image-automation-controller/api v0.28.0 h1:BYiOP28h/QRuZTZixlmMJ3RnQw+FGAn54nVsoUjNXi8= github.com/fluxcd/image-automation-controller/api v0.28.0/go.mod h1:ztBI5X/dEzZuJOf7igqnx6ZvrSGtrXLmCvP5ieb3fWc= github.com/fluxcd/image-reflector-controller/api v0.23.1 h1:ysYzSDhFV5JPzrhTnyabbjFne6GyXsH3Sk/Kd58+Rwk= github.com/fluxcd/image-reflector-controller/api v0.23.1/go.mod h1:uomyKK0ZWFOsG40wqmCJvIN8OpAiPKFteXe+cdhB/Z0= github.com/fluxcd/kustomize-controller/api v0.32.0 h1:5QGLV5xRI8S3tUFJNV+vVzy/pdl0d6Ua0AccWwGRKfs= github.com/fluxcd/kustomize-controller/api v0.32.0/go.mod h1:t2pqIe1SMzdZIAG/aietrg3XpRXmpcubf0uxDJOryEA= -github.com/fluxcd/notification-controller/api v0.30.1 h1:7523fRatqKJPeZcJsR7D0PW/h5ND/DeNgHLzEfOFmA0= -github.com/fluxcd/notification-controller/api v0.30.1/go.mod h1:Ve4SE6jeiGlyItvHa7/UpTPOVC6ac5K76Frv1P7hqLw= +github.com/fluxcd/notification-controller/api v0.30.2 h1:IOxRm/ALdKTk6Xwwc3Tpsfybze3/zVruaI3GN6F+KrA= +github.com/fluxcd/notification-controller/api v0.30.2/go.mod h1:Ve4SE6jeiGlyItvHa7/UpTPOVC6ac5K76Frv1P7hqLw= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= -github.com/fluxcd/pkg/apis/event v0.2.0 h1:cmAtkZfoEaNVYegI4SFM8XstdRAil3O9AoP+8fpbR34= -github.com/fluxcd/pkg/apis/event v0.2.0/go.mod h1:OyzKqs90J+MK7rQaEOFMMCkALpPkfmxlkabgyY2wSFQ= +github.com/fluxcd/pkg/apis/event v0.3.0 h1:B+IXmfSniUGfoczheNAH0YULgS+ejxMl58RyWlvLa1c= +github.com/fluxcd/pkg/apis/event v0.3.0/go.mod h1:xYOOlf+9gCBSYcs93N2XAbJvSVwuVBDBUzqhR+cAo7M= github.com/fluxcd/pkg/apis/kustomize v0.7.0 h1:X2htBmJ91nGYv4d93gin665MFWKNGiNwUiZ08/Zz0hY= github.com/fluxcd/pkg/apis/kustomize v0.7.0/go.mod h1:Mu+KdktsEKWA4l/33CZdY5lB4hz51mqfcLzBZSwAqVg= -github.com/fluxcd/pkg/apis/meta v0.18.0 h1:s0LeulWcQ4DxVX6805vgDTxlA6bAYk+Lq1QHSnNdqLM= -github.com/fluxcd/pkg/apis/meta v0.18.0/go.mod h1:pYvXRFi1UKNNrGR34jw3uqOnMXw9X6dTkML8j5Z7tis= -github.com/fluxcd/pkg/git v0.7.0 h1:sQHRpFMcOzEdqlyGMjFv2LKMdcoE5xeUr2UcRrsLRG8= -github.com/fluxcd/pkg/git v0.7.0/go.mod h1:3deiLPws4DSQ3hqwtQd7Dt66GXTN/4RcT/yHAljXaHo= -github.com/fluxcd/pkg/git/gogit v0.4.0 h1:u2Rcd/jHdvXUfgv72CES5Gq/nxAp/PblgrBDAm8ZQtQ= -github.com/fluxcd/pkg/git/gogit v0.4.0/go.mod h1:fMBM6efbAPqDEoU2M/ve+P3b/oQCuwRbia4bn9006jM= +github.com/fluxcd/pkg/apis/meta v0.19.0 h1:CX75e/eaRWZDTzNdMSWomY1InlssLKcS8GQDSg/aopI= +github.com/fluxcd/pkg/apis/meta v0.19.0/go.mod h1:7b6prDPsViyAzoY7eRfSPS0/MbXpGGsOMvRq2QrTKa4= +github.com/fluxcd/pkg/git v0.8.0 h1:7mIbdqSf+qXwY17+A+Kge2yWIJCMJ1p1DiBDGnKRohg= +github.com/fluxcd/pkg/git v0.8.0/go.mod h1:3deiLPws4DSQ3hqwtQd7Dt66GXTN/4RcT/yHAljXaHo= +github.com/fluxcd/pkg/git/gogit v0.5.0 h1:3Fzx2W16K/37ZHT6WmLFuRYgs+CGvzka+dwY7ktoxJE= +github.com/fluxcd/pkg/git/gogit v0.5.0/go.mod h1:cqoJhKXCmWuN2ezD/2ECUYwR8gR7svMRJoHRr9VyTQc= github.com/fluxcd/pkg/gittestserver v0.8.0 h1:YrYe63KScKlLxx0GAiQthx2XqHDx0vKitIIx4JnDtIo= github.com/fluxcd/pkg/ssh v0.7.0 h1:FX5ky8SU9dYwbM6zEIDR3TSveLF01iyS95CtB5Ykpno= github.com/fluxcd/pkg/ssh v0.7.0/go.mod h1:tCVZJI8jPOL0XCInJOrYGKapWA/zZCzqPtpiYUSQxww= @@ -160,7 +160,6 @@ github.com/fluxcd/source-controller/api v0.33.0/go.mod h1:+DiGND4WSNdGkS7loPUroS github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= -github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY= @@ -337,10 +336,7 @@ github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjY github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= -github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= -github.com/onsi/ginkgo/v2 v2.5.0 h1:TRtrvv2vdQqzkwrQ1ke6vtXf7IK34RBUJafIy1wMwls= -github.com/onsi/ginkgo/v2 v2.5.0/go.mod h1:Luc4sArBICYCS8THh8v3i3i5CuSZO+RaQRaJoeNwomw= +github.com/onsi/ginkgo/v2 v2.6.0 h1:9t9b9vRUbFq3C4qKFCGkVuq/fIHji802N1nrtkh1mNc= github.com/onsi/gomega v1.24.1 h1:KORJXNNTzJXzu4ScJWssJfJMnJ+2QJqhoQSRwNlze9E= github.com/pjbgf/sha1cd v0.2.3 h1:uKQP/7QOzNtKYH7UTohZLcjF5/55EnTw0jO/Ru4jZwI= github.com/pjbgf/sha1cd v0.2.3/go.mod h1:HOK9QrgzdHpbc2Kzip0Q1yi3M2MFGPADtR6HjG65m5M= @@ -350,7 +346,6 @@ github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_golang v1.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw= -github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4= github.com/prometheus/common v0.37.0 h1:ccBbHCgIiT9uSoFY0vX8H3zsNR5eLt17/RQLUvn8pXE= @@ -414,8 +409,7 @@ go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= -go.uber.org/zap v1.23.0 h1:OjGQ5KQDEUawVHxNwQgPpiypGHOxo2mNZsOqTak4fFY= -go.uber.org/zap v1.23.0/go.mod h1:D+nX8jyLsMHMYrln8A0rJjFt/T/9/bGgIhAqxv5URuY= +go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3 h1:0es+/5331RGQPcXlMfP+WrnIIS6dNnNRe0WB02W0F4M= golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -551,7 +545,6 @@ golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0 h1:w8ZOecv6NaNa/zC8944JTU3vz4u6Lagfk4RPQxv92NQ= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -566,8 +559,8 @@ golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.2.0 h1:52I/1L54xyEQAYdtcSuxtiT84KGYTBGXwayxmIpNJhE= -golang.org/x/time v0.2.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= +golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= @@ -711,7 +704,6 @@ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EV gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -730,25 +722,25 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -k8s.io/api v0.25.4 h1:3YO8J4RtmG7elEgaWMb4HgmpS2CfY1QlaOz9nwB+ZSs= -k8s.io/api v0.25.4/go.mod h1:IG2+RzyPQLllQxnhzD8KQNEu4c4YvyDTpSMztf4A0OQ= -k8s.io/apiextensions-apiserver v0.25.4 h1:7hu9pF+xikxQuQZ7/30z/qxIPZc2J1lFElPtr7f+B6U= -k8s.io/apiextensions-apiserver v0.25.4/go.mod h1:bkSGki5YBoZWdn5pWtNIdGvDrrsRWlmnvl9a+tAw5vQ= -k8s.io/apimachinery v0.25.4 h1:CtXsuaitMESSu339tfhVXhQrPET+EiWnIY1rcurKnAc= -k8s.io/apimachinery v0.25.4/go.mod h1:jaF9C/iPNM1FuLl7Zuy5b9v+n35HGSh6AQ4HYRkCqwo= -k8s.io/client-go v0.25.4 h1:3RNRDffAkNU56M/a7gUfXaEzdhZlYhoW8dgViGy5fn8= -k8s.io/client-go v0.25.4/go.mod h1:8trHCAC83XKY0wsBIpbirZU4NTUpbuhc2JnI7OruGZw= +k8s.io/api v0.26.1 h1:f+SWYiPd/GsiWwVRz+NbFyCgvv75Pk9NK6dlkZgpCRQ= +k8s.io/api v0.26.1/go.mod h1:xd/GBNgR0f707+ATNyPmQ1oyKSgndzXij81FzWGsejg= +k8s.io/apiextensions-apiserver v0.26.1 h1:cB8h1SRk6e/+i3NOrQgSFij1B2S0Y0wDoNl66bn8RMI= +k8s.io/apiextensions-apiserver v0.26.1/go.mod h1:AptjOSXDGuE0JICx/Em15PaoO7buLwTs0dGleIHixSM= +k8s.io/apimachinery v0.26.1 h1:8EZ/eGJL+hY/MYCNwhmDzVqq2lPl3N3Bo8rvweJwXUQ= +k8s.io/apimachinery v0.26.1/go.mod h1:tnPmbONNJ7ByJNz9+n9kMjNP8ON+1qoAIIC70lztu74= +k8s.io/client-go v0.26.1 h1:87CXzYJnAMGaa/IDDfRdhTzxk/wzGZ+/HUQpqgVSZXU= +k8s.io/client-go v0.26.1/go.mod h1:IWNSglg+rQ3OcvDkhY6+QLeasV4OYHDjdqeWkDQZwGE= k8s.io/klog/v2 v2.80.1 h1:atnLQ121W371wYYFawwYx1aEY2eUfs4l3J72wtgAwV4= k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/kube-openapi v0.0.0-20221110221610-a28e98eb7c70 h1:zfqQc1V6/ZgGpvrOVvr62OjiqQX4lZjfznK34NQwkqw= k8s.io/kube-openapi v0.0.0-20221110221610-a28e98eb7c70/go.mod h1:+Axhij7bCpeqhklhUTe3xmOn6bWxolyZEeyaFpjGtl4= -k8s.io/utils v0.0.0-20221108210102-8e77b1f39fe2 h1:GfD9OzL11kvZN5iArC6oTS7RTj7oJOIfnislxYlqTj8= -k8s.io/utils v0.0.0-20221108210102-8e77b1f39fe2/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +k8s.io/utils v0.0.0-20221128185143-99ec85e7a448 h1:KTgPnR10d5zhztWptI952TNtt/4u5h3IzDXkdIMuo2Y= +k8s.io/utils v0.0.0-20221128185143-99ec85e7a448/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/controller-runtime v0.13.1 h1:tUsRCSJVM1QQOOeViGeX3GMT3dQF1eePPw6sEE3xSlg= -sigs.k8s.io/controller-runtime v0.13.1/go.mod h1:Zbz+el8Yg31jubvAEyglRZGdLAjplZl+PgtYNI6WNTI= +sigs.k8s.io/controller-runtime v0.14.2 h1:P6IwDhbsRWsBClt/8/h8Zy36bCuGuW5Op7MHpFrN/60= +sigs.k8s.io/controller-runtime v0.14.2/go.mod h1:WqIdsAY6JBsjfc/CqO0CORmNtoCtE4S6qbPc9s68h+0= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= From 56807fddf6c1e59b0ecceb4db4a1a450e598fd30 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Tue, 31 Jan 2023 13:18:53 +0200 Subject: [PATCH 373/818] Add json/yaml output to flux push artifact Signed-off-by: Stefan Prodan --- cmd/flux/push_artifact.go | 61 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 58 insertions(+), 3 deletions(-) diff --git a/cmd/flux/push_artifact.go b/cmd/flux/push_artifact.go index 66d6807b..6920a41a 100644 --- a/cmd/flux/push_artifact.go +++ b/cmd/flux/push_artifact.go @@ -18,12 +18,15 @@ package main import ( "context" + "encoding/json" "fmt" "os" "github.com/fluxcd/flux2/internal/flags" sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + reg "github.com/google/go-containerregistry/pkg/name" "github.com/spf13/cobra" + "sigs.k8s.io/yaml" oci "github.com/fluxcd/pkg/oci/client" ) @@ -40,6 +43,15 @@ The command can read the credentials from '~/.docker/config.json' but they can a --source="$(git config --get remote.origin.url)" \ --revision="$(git branch --show-current)/$(git rev-parse HEAD)" + # Push and sign artifact with cosgin + digest_url = $(flux push artifact \ + oci://ghcr.io/org/config/app:$(git rev-parse --short HEAD) \ + --source="$(git config --get remote.origin.url)" \ + --revision="$(git branch --show-current)/$(git rev-parse HEAD)" \ + --path="./path/to/local/manifest.yaml" | \ + jq -r '. | .image + "@" + .digest') + cosign sign $digest_url + # Push manifests passed into stdin to GHCR kustomize build . | flux push artifact oci://ghcr.io/org/config/app:$(git rev-parse --short HEAD) -p - \ --source="$(git config --get remote.origin.url)" \ @@ -85,6 +97,7 @@ type pushArtifactFlags struct { creds string provider flags.SourceOCIProvider ignorePaths []string + output string } var pushArtifactArgs = newPushArtifactFlags() @@ -102,6 +115,8 @@ func init() { pushArtifactCmd.Flags().StringVar(&pushArtifactArgs.creds, "creds", "", "credentials for OCI registry in the format [:] if --provider is generic") pushArtifactCmd.Flags().Var(&pushArtifactArgs.provider, "provider", pushArtifactArgs.provider.Description()) pushArtifactCmd.Flags().StringSliceVar(&pushArtifactArgs.ignorePaths, "ignore-paths", excludeOCI, "set paths to ignore in .gitignore format") + pushArtifactCmd.Flags().StringVarP(&pushArtifactArgs.output, "output", "o", "", + "the format in which the artifact digest should be printed. can be 'json' or 'yaml'") pushCmd.AddCommand(pushArtifactCmd) } @@ -172,14 +187,54 @@ func pushArtifactCmdRun(cmd *cobra.Command, args []string) error { } } - logger.Actionf("pushing artifact to %s", url) + if pushArtifactArgs.output == "" { + logger.Actionf("pushing artifact to %s", url) + } - digest, err := ociClient.Push(ctx, url, path, meta, pushArtifactArgs.ignorePaths) + digestURL, err := ociClient.Push(ctx, url, path, meta, pushArtifactArgs.ignorePaths) if err != nil { return fmt.Errorf("pushing artifact failed: %w", err) } - logger.Successf("artifact successfully pushed to %s", digest) + digest, err := reg.NewDigest(digestURL) + if err != nil { + return fmt.Errorf("artifact digest parsing failed: %w", err) + } + + tag, err := reg.NewTag(url) + if err != nil { + return fmt.Errorf("artifact tag parsing failed: %w", err) + } + + info := struct { + URL string `json:"url"` + Image string `json:"image"` + Tag string `json:"tag"` + Digest string `json:"digest"` + }{ + URL: fmt.Sprintf("oci://%s", digestURL), + Image: fmt.Sprintf("%s/%s", digest.RegistryStr(), digest.RepositoryStr()), + Tag: tag.TagStr(), + Digest: digest.DigestStr(), + } + + switch pushArtifactArgs.output { + case "json": + marshalled, err := json.MarshalIndent(&info, "", " ") + if err != nil { + return fmt.Errorf("artifact digest JSON conversion failed: %w", err) + } + marshalled = append(marshalled, "\n"...) + rootCmd.Print(string(marshalled)) + case "yaml": + marshalled, err := yaml.Marshal(&info) + if err != nil { + return fmt.Errorf("artifact digest YAML conversion failed: %w", err) + } + rootCmd.Print(string(marshalled)) + default: + logger.Successf("artifact successfully pushed to %s", digestURL) + } return nil } From 6681cd05a999cf3e1754fa71cafabc83dea4c93c Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Tue, 31 Jan 2023 13:38:30 +0200 Subject: [PATCH 374/818] Add example of push and sign OCI artifacts Signed-off-by: Stefan Prodan --- action/README.md | 46 +++++++++++++++++++++++---------------- cmd/flux/push_artifact.go | 25 +++++++++++---------- 2 files changed, 40 insertions(+), 31 deletions(-) diff --git a/action/README.md b/action/README.md index f8ebcb8e..6c2db0f2 100644 --- a/action/README.md +++ b/action/README.md @@ -134,18 +134,25 @@ jobs: flux tag artifact $OCI_REPO:$(git rev-parse --short HEAD) --tag staging ``` -Example workflow for publishing Kubernetes manifests bundled as OCI artifacts to Docker Hub: +### Push and sign Kubernetes manifests to container registries + +Example workflow for publishing Kubernetes manifests bundled as OCI artifacts +which are signed with Cosign and GitHub OIDC: ```yaml -name: push-artifact-production +name: push-sign-artifact on: push: - tags: - - '*' + branches: + - 'main' + +permissions: + packages: write # needed for ghcr.io access + id-token: write # needed for keyless signing env: - OCI_REPO: "oci://docker.io/my-org/app-config" + OCI_REPO: "oci://ghcr.io/my-org/manifests/${{ github.event.repository.name }}" jobs: kubernetes: @@ -155,23 +162,24 @@ jobs: uses: actions/checkout@v3 - name: Setup Flux CLI uses: fluxcd/flux2/action@main - - name: Login to Docker Hub + - name: Setup Cosign + uses: sigstore/cosign-installer@main + - name: Login to GHCR uses: docker/login-action@v2 with: - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} - - name: Generate manifests - run: | - kustomize build ./manifests/production > ./deploy/app.yaml - - name: Push manifests - run: | - flux push artifact $OCI_REPO:$(git tag --points-at HEAD) \ - --path="./deploy" \ - --source="$(git config --get remote.origin.url)" \ - --revision="$(git tag --points-at HEAD)/$(git rev-parse HEAD)" - - name: Deploy manifests to production + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Push and sign manifests run: | - flux tag artifact $OCI_REPO:$(git tag --points-at HEAD) --tag production + digest_url=$(flux push artifact \ + $OCI_REPO:$(git rev-parse --short HEAD) \ + --path="./manifests" \ + --source="$(git config --get remote.origin.url)" \ + --revision="$(git branch --show-current)/$(git rev-parse HEAD)" |\ + jq -r '. | .repository + "@" + .digest') + + cosign sign $digest_url ``` ### End-to-end testing diff --git a/cmd/flux/push_artifact.go b/cmd/flux/push_artifact.go index 6920a41a..6664c201 100644 --- a/cmd/flux/push_artifact.go +++ b/cmd/flux/push_artifact.go @@ -43,13 +43,14 @@ The command can read the credentials from '~/.docker/config.json' but they can a --source="$(git config --get remote.origin.url)" \ --revision="$(git branch --show-current)/$(git rev-parse HEAD)" - # Push and sign artifact with cosgin + # Push and sign artifact with cosign digest_url = $(flux push artifact \ oci://ghcr.io/org/config/app:$(git rev-parse --short HEAD) \ --source="$(git config --get remote.origin.url)" \ --revision="$(git branch --show-current)/$(git rev-parse HEAD)" \ - --path="./path/to/local/manifest.yaml" | \ - jq -r '. | .image + "@" + .digest') + --path="./path/to/local/manifest.yaml" \ + --output json | \ + jq -r '. | .repository + "@" + .digest') cosign sign $digest_url # Push manifests passed into stdin to GHCR @@ -116,7 +117,7 @@ func init() { pushArtifactCmd.Flags().Var(&pushArtifactArgs.provider, "provider", pushArtifactArgs.provider.Description()) pushArtifactCmd.Flags().StringSliceVar(&pushArtifactArgs.ignorePaths, "ignore-paths", excludeOCI, "set paths to ignore in .gitignore format") pushArtifactCmd.Flags().StringVarP(&pushArtifactArgs.output, "output", "o", "", - "the format in which the artifact digest should be printed. can be 'json' or 'yaml'") + "the format in which the artifact digest should be printed, can be 'json' or 'yaml'") pushCmd.AddCommand(pushArtifactCmd) } @@ -207,15 +208,15 @@ func pushArtifactCmdRun(cmd *cobra.Command, args []string) error { } info := struct { - URL string `json:"url"` - Image string `json:"image"` - Tag string `json:"tag"` - Digest string `json:"digest"` + URL string `json:"url"` + Repository string `json:"repository"` + Tag string `json:"tag"` + Digest string `json:"digest"` }{ - URL: fmt.Sprintf("oci://%s", digestURL), - Image: fmt.Sprintf("%s/%s", digest.RegistryStr(), digest.RepositoryStr()), - Tag: tag.TagStr(), - Digest: digest.DigestStr(), + URL: fmt.Sprintf("oci://%s", digestURL), + Repository: digest.Repository.Name(), + Tag: tag.TagStr(), + Digest: digest.DigestStr(), } switch pushArtifactArgs.output { From 06b8ad2402eab84e5cf2d5a705e1b0aea4a10cba Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Tue, 31 Jan 2023 15:52:18 +0200 Subject: [PATCH 375/818] flux tree: Add namespaces to objects reconcile from HRs Signed-off-by: Stefan Prodan --- cmd/flux/tree_kustomization.go | 12 +++++++ internal/utils/objectutil.go | 63 ++++++++++++++++++++++++++++++++++ internal/utils/utils.go | 3 -- 3 files changed, 75 insertions(+), 3 deletions(-) create mode 100644 internal/utils/objectutil.go diff --git a/cmd/flux/tree_kustomization.go b/cmd/flux/tree_kustomization.go index c471295f..bf770cc6 100644 --- a/cmd/flux/tree_kustomization.go +++ b/cmd/flux/tree_kustomization.go @@ -272,5 +272,17 @@ func getHelmReleaseInventory(ctx context.Context, objectKey client.ObjectKey, ku return nil, fmt.Errorf("failed to read the Helm storage object for HelmRelease '%s': %w", objectKey.String(), err) } + for _, obj := range objects { + if obj.GetNamespace() == "" { + if isNamespaced, _ := utils.IsAPINamespaced(obj, kubeClient.Scheme(), kubeClient.RESTMapper()); isNamespaced { + if hr.Spec.TargetNamespace != "" { + obj.SetNamespace(hr.Spec.TargetNamespace) + } else { + obj.SetNamespace(hr.GetNamespace()) + } + } + } + } + return object.UnstructuredSetToObjMetadataSet(objects), nil } diff --git a/internal/utils/objectutil.go b/internal/utils/objectutil.go new file mode 100644 index 00000000..35b381bc --- /dev/null +++ b/internal/utils/objectutil.go @@ -0,0 +1,63 @@ +/* +Copyright 2023 The Flux authors +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// TODO: Remove this when +// https://github.com/kubernetes-sigs/controller-runtime/blob/c783d2527a7da76332a2d8d563a6ca0b80c12122/pkg/client/apiutil/apimachinery.go#L76-L104 +// is included in a semver release. + +package utils + +import ( + "errors" + "fmt" + + apimeta "k8s.io/apimachinery/pkg/api/meta" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + "sigs.k8s.io/controller-runtime/pkg/client/apiutil" +) + +// IsAPINamespaced returns true if the object is namespace scoped. +// For unstructured objects the gvk is found from the object itself. +func IsAPINamespaced(obj runtime.Object, scheme *runtime.Scheme, restmapper apimeta.RESTMapper) (bool, error) { + gvk, err := apiutil.GVKForObject(obj, scheme) + if err != nil { + return false, err + } + + return IsAPINamespacedWithGVK(gvk, scheme, restmapper) +} + +// IsAPINamespacedWithGVK returns true if the object having the provided +// GVK is namespace scoped. +func IsAPINamespacedWithGVK(gk schema.GroupVersionKind, scheme *runtime.Scheme, restmapper apimeta.RESTMapper) (bool, error) { + restmapping, err := restmapper.RESTMapping(schema.GroupKind{Group: gk.Group, Kind: gk.Kind}) + if err != nil { + return false, fmt.Errorf("failed to get restmapping: %w", err) + } + + scope := restmapping.Scope.Name() + + if scope == "" { + return false, errors.New("scope cannot be identified, empty scope returned") + } + + if scope != apimeta.RESTScopeNameRoot { + return true, nil + } + return false, nil +} diff --git a/internal/utils/utils.go b/internal/utils/utils.go index a1cb9a3d..ab9abe2e 100644 --- a/internal/utils/utils.go +++ b/internal/utils/utils.go @@ -54,9 +54,6 @@ import ( "github.com/fluxcd/flux2/pkg/manifestgen/install" ) -type Utils struct { -} - type ExecMode string const ( From be154d079bc3e82ca040f9d2dbe9e8dab8f9f951 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 1 Feb 2023 11:44:36 +0200 Subject: [PATCH 376/818] flux tree: Track CRDs managed by HelmReleases Signed-off-by: Stefan Prodan --- cmd/flux/tree_kustomization.go | 47 +++++++++++++++++++++++++++++----- 1 file changed, 41 insertions(+), 6 deletions(-) diff --git a/cmd/flux/tree_kustomization.go b/cmd/flux/tree_kustomization.go index bf770cc6..59dd3dd3 100644 --- a/cmd/flux/tree_kustomization.go +++ b/cmd/flux/tree_kustomization.go @@ -26,18 +26,21 @@ import ( "io" "strings" - "github.com/fluxcd/flux2/internal/tree" - "github.com/fluxcd/flux2/internal/utils" - helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" - kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" - "github.com/fluxcd/pkg/ssa" "github.com/spf13/cobra" corev1 "k8s.io/api/core/v1" + apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/runtime/schema" "sigs.k8s.io/cli-utils/pkg/object" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/yaml" + + helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" + kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" + "github.com/fluxcd/pkg/ssa" + + "github.com/fluxcd/flux2/internal/tree" + "github.com/fluxcd/flux2/internal/utils" ) var treeKsCmd = &cobra.Command{ @@ -262,6 +265,7 @@ func getHelmReleaseInventory(ctx context.Context, objectKey client.ObjectKey, ku b = b2 } + // extract objects from Helm storage var rls hrStorage if err := json.Unmarshal(b, &rls); err != nil { return nil, fmt.Errorf("failed to decode the Helm storage object for HelmRelease '%s': %w", objectKey.String(), err) @@ -272,6 +276,7 @@ func getHelmReleaseInventory(ctx context.Context, objectKey client.ObjectKey, ku return nil, fmt.Errorf("failed to read the Helm storage object for HelmRelease '%s': %w", objectKey.String(), err) } + // set the namespace on namespaced objects for _, obj := range objects { if obj.GetNamespace() == "" { if isNamespaced, _ := utils.IsAPINamespaced(obj, kubeClient.Scheme(), kubeClient.RESTMapper()); isNamespaced { @@ -284,5 +289,35 @@ func getHelmReleaseInventory(ctx context.Context, objectKey client.ObjectKey, ku } } - return object.UnstructuredSetToObjMetadataSet(objects), nil + result := object.UnstructuredSetToObjMetadataSet(objects) + + // search for CRDs managed by the HelmRelease if installing or upgrading CRDs is enabled in spec + if (hr.Spec.Install != nil && len(hr.Spec.Install.CRDs) > 0 && hr.Spec.Install.CRDs != helmv2.Skip) || + (hr.Spec.Upgrade != nil && len(hr.Spec.Upgrade.CRDs) > 0 && hr.Spec.Upgrade.CRDs != helmv2.Skip) { + selector := client.MatchingLabels{ + fmt.Sprintf("%s/name", helmv2.GroupVersion.Group): hr.GetName(), + fmt.Sprintf("%s/namespace", helmv2.GroupVersion.Group): hr.GetNamespace(), + } + var list apiextensionsv1.CustomResourceDefinitionList + if err := kubeClient.List(ctx, &list, selector); err == nil { + for _, crd := range list.Items { + found := false + for _, r := range result { + if r.Name == crd.GetName() && r.GroupKind == crd.GroupVersionKind().GroupKind() { + found = true + break + } + } + + if !found { + result = append(result, object.ObjMetadata{ + Name: crd.GetName(), + GroupKind: crd.GroupVersionKind().GroupKind(), + }) + } + } + } + } + + return result, nil } From 87232fd4ddbd17ec5eda7c6f4098e9fe6a86aec2 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 1 Feb 2023 12:41:35 +0200 Subject: [PATCH 377/818] flux tree: Set CRDs GroupKind in output Signed-off-by: Stefan Prodan --- cmd/flux/tree_kustomization.go | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/cmd/flux/tree_kustomization.go b/cmd/flux/tree_kustomization.go index 59dd3dd3..3d9bc370 100644 --- a/cmd/flux/tree_kustomization.go +++ b/cmd/flux/tree_kustomization.go @@ -298,12 +298,13 @@ func getHelmReleaseInventory(ctx context.Context, objectKey client.ObjectKey, ku fmt.Sprintf("%s/name", helmv2.GroupVersion.Group): hr.GetName(), fmt.Sprintf("%s/namespace", helmv2.GroupVersion.Group): hr.GetNamespace(), } + crdKind := "CustomResourceDefinition" var list apiextensionsv1.CustomResourceDefinitionList if err := kubeClient.List(ctx, &list, selector); err == nil { for _, crd := range list.Items { found := false for _, r := range result { - if r.Name == crd.GetName() && r.GroupKind == crd.GroupVersionKind().GroupKind() { + if r.Name == crd.GetName() && r.GroupKind.Kind == crdKind { found = true break } @@ -311,8 +312,11 @@ func getHelmReleaseInventory(ctx context.Context, objectKey client.ObjectKey, ku if !found { result = append(result, object.ObjMetadata{ - Name: crd.GetName(), - GroupKind: crd.GroupVersionKind().GroupKind(), + Name: crd.GetName(), + GroupKind: schema.GroupKind{ + Group: apiextensionsv1.GroupName, + Kind: crdKind, + }, }) } } From 4e009a716781a1193ddaba864f8f1518711b1812 Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Wed, 1 Feb 2023 18:02:11 +0000 Subject: [PATCH 378/818] Update toolkit components - helm-controller to v0.29.0 https://github.com/fluxcd/helm-controller/blob/v0.29.0/CHANGELOG.md - kustomize-controller to v0.33.0 https://github.com/fluxcd/kustomize-controller/blob/v0.33.0/CHANGELOG.md - source-controller to v0.34.0 https://github.com/fluxcd/source-controller/blob/v0.34.0/CHANGELOG.md - notification-controller to v0.31.0 https://github.com/fluxcd/notification-controller/blob/v0.31.0/CHANGELOG.md - image-reflector-controller to v0.24.0 https://github.com/fluxcd/image-reflector-controller/blob/v0.24.0/CHANGELOG.md - image-automation-controller to v0.29.0 https://github.com/fluxcd/image-automation-controller/blob/v0.29.0/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 12 +++++----- go.sum | 24 +++++++++---------- .../bases/helm-controller/kustomization.yaml | 4 ++-- .../kustomization.yaml | 4 ++-- .../kustomization.yaml | 4 ++-- .../kustomize-controller/kustomization.yaml | 4 ++-- .../kustomization.yaml | 4 ++-- .../source-controller/kustomization.yaml | 4 ++-- manifests/crds/kustomization.yaml | 12 +++++----- 9 files changed, 36 insertions(+), 36 deletions(-) diff --git a/go.mod b/go.mod index 26dfd400..e32b48af 100644 --- a/go.mod +++ b/go.mod @@ -9,11 +9,11 @@ require ( github.com/distribution/distribution/v3 v3.0.0-20230131081513-cf87e8d07e8d github.com/fluxcd/go-git-providers v0.13.0 github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 - github.com/fluxcd/helm-controller/api v0.28.1 - github.com/fluxcd/image-automation-controller/api v0.28.0 - github.com/fluxcd/image-reflector-controller/api v0.23.1 - github.com/fluxcd/kustomize-controller/api v0.32.0 - github.com/fluxcd/notification-controller/api v0.30.2 + github.com/fluxcd/helm-controller/api v0.29.0 + github.com/fluxcd/image-automation-controller/api v0.29.0 + github.com/fluxcd/image-reflector-controller/api v0.24.0 + github.com/fluxcd/kustomize-controller/api v0.33.0 + github.com/fluxcd/notification-controller/api v0.31.0 github.com/fluxcd/pkg/apis/meta v0.19.0 github.com/fluxcd/pkg/git v0.8.0 github.com/fluxcd/pkg/git/gogit v0.5.0 @@ -25,7 +25,7 @@ require ( github.com/fluxcd/pkg/ssh v0.7.0 github.com/fluxcd/pkg/untar v0.2.0 github.com/fluxcd/pkg/version v0.2.0 - github.com/fluxcd/source-controller/api v0.33.0 + github.com/fluxcd/source-controller/api v0.34.0 github.com/gonvenience/bunt v1.3.4 github.com/gonvenience/ytbx v1.4.4 github.com/google/go-cmp v0.5.9 diff --git a/go.sum b/go.sum index dbf60e0b..32db9696 100644 --- a/go.sum +++ b/go.sum @@ -199,16 +199,16 @@ github.com/fluxcd/go-git-providers v0.13.0 h1:VTuOMfatoqkCrEUOX5CVpSMiA1TIs0ioLh github.com/fluxcd/go-git-providers v0.13.0/go.mod h1:VEItGJ67Xc/7Cadh/oPMPUimXv75R0XqHFtF3J4tIdE= github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 h1:Gm5sGGk+/Wq6RhX4xpCZ2IqjDp5XkjlhENaAuAlpdKc= github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4/go.mod h1:raWgfUV7lDQVXp4QXUaeNNJkRVKz97UQuF+0kdY7Vmo= -github.com/fluxcd/helm-controller/api v0.28.1 h1:2qjZymRAbl/OqId2lpKCzuleKhId34X1zQ0rcPlMKFQ= -github.com/fluxcd/helm-controller/api v0.28.1/go.mod h1:/qCtlP718rveiAL7Mova4fGAk0aZv2qyYQn87zcUNhs= -github.com/fluxcd/image-automation-controller/api v0.28.0 h1:BYiOP28h/QRuZTZixlmMJ3RnQw+FGAn54nVsoUjNXi8= -github.com/fluxcd/image-automation-controller/api v0.28.0/go.mod h1:ztBI5X/dEzZuJOf7igqnx6ZvrSGtrXLmCvP5ieb3fWc= -github.com/fluxcd/image-reflector-controller/api v0.23.1 h1:ysYzSDhFV5JPzrhTnyabbjFne6GyXsH3Sk/Kd58+Rwk= -github.com/fluxcd/image-reflector-controller/api v0.23.1/go.mod h1:uomyKK0ZWFOsG40wqmCJvIN8OpAiPKFteXe+cdhB/Z0= -github.com/fluxcd/kustomize-controller/api v0.32.0 h1:5QGLV5xRI8S3tUFJNV+vVzy/pdl0d6Ua0AccWwGRKfs= -github.com/fluxcd/kustomize-controller/api v0.32.0/go.mod h1:t2pqIe1SMzdZIAG/aietrg3XpRXmpcubf0uxDJOryEA= -github.com/fluxcd/notification-controller/api v0.30.2 h1:IOxRm/ALdKTk6Xwwc3Tpsfybze3/zVruaI3GN6F+KrA= -github.com/fluxcd/notification-controller/api v0.30.2/go.mod h1:Ve4SE6jeiGlyItvHa7/UpTPOVC6ac5K76Frv1P7hqLw= +github.com/fluxcd/helm-controller/api v0.29.0 h1:aoyI2fQNR/8rmUCz6l4kqQzgS3oAvP3/K6qP/uKk2C0= +github.com/fluxcd/helm-controller/api v0.29.0/go.mod h1:BXivPOvBtSKRmcs2HdAtlR5hlC0UGU5Zg847KmtXvkQ= +github.com/fluxcd/image-automation-controller/api v0.29.0 h1:86g4NgPCzfBaE4CRKc2EtyaVrEdbFVs81KLOz4vHZjA= +github.com/fluxcd/image-automation-controller/api v0.29.0/go.mod h1:mmRgP6i2TzEQUzIIjay0G7fPb6Y11Qzw1CTD7aj1zMc= +github.com/fluxcd/image-reflector-controller/api v0.24.0 h1:F0X+IaRSPAWeV5ZDzeqw7hKbq74AmxLSU/SwdXCcc3c= +github.com/fluxcd/image-reflector-controller/api v0.24.0/go.mod h1:F4l0tBvVk2XAKoRt4xzZmj+XmuaD6fc44n8waAEZMjE= +github.com/fluxcd/kustomize-controller/api v0.33.0 h1:ELTDIBC9dYaQjwIOtQxXAX2S4ydD6VQbmgf9p8wxIpE= +github.com/fluxcd/kustomize-controller/api v0.33.0/go.mod h1:6dVUIhT3Dge4Fyljv/qILYygwUTpAXl5IDjoOFLebfE= +github.com/fluxcd/notification-controller/api v0.31.0 h1:KcxsVwL1DU1BGro0raAt5+FwHCgGJwNsa915DdrAehs= +github.com/fluxcd/notification-controller/api v0.31.0/go.mod h1:K+Jxxbj8NRI9L2+NjV7T0TqUtq5NspZaH2fidHbguZ0= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= github.com/fluxcd/pkg/apis/kustomize v0.8.0 h1:A6aLolxPV2Sll44SOHiX96lbXXmRZmS5BoEerkRHrfM= @@ -238,8 +238,8 @@ github.com/fluxcd/pkg/untar v0.2.0 h1:sJXU+FbJcNUb2ffLJNjeR3hwt3X2loVpOMlCUjyFw6 github.com/fluxcd/pkg/untar v0.2.0/go.mod h1:33AyoWaPpjX/xXpczcfhQh2AkB63TFwiR2YwROtv23E= github.com/fluxcd/pkg/version v0.2.0 h1:jG22c59Bsv6vL51N7Bqn8tjHArYOXrjbIkGArlIrv5w= github.com/fluxcd/pkg/version v0.2.0/go.mod h1:umN1VAOV0sB1JDVwb8eXZzuuqIAEku+y+vcCVBBUIf0= -github.com/fluxcd/source-controller/api v0.33.0 h1:NZYU3+MNf9puyrTbBa7AJbBDlN7tmt0uw8lyye++5fE= -github.com/fluxcd/source-controller/api v0.33.0/go.mod h1:+DiGND4WSNdGkS7loPUroSarif6dHU4VlVgtLMRKCR8= +github.com/fluxcd/source-controller/api v0.34.0 h1:M2kD95IdpmHcDNy78K6T6p7niC38LGwSrKq8XAZEJY0= +github.com/fluxcd/source-controller/api v0.34.0/go.mod h1:w3PDdR+FZyq3zyyUDxz6vY3CKByZfYAjkzJUxuUXCuc= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= diff --git a/manifests/bases/helm-controller/kustomization.yaml b/manifests/bases/helm-controller/kustomization.yaml index 77f12fbf..0bae8162 100644 --- a/manifests/bases/helm-controller/kustomization.yaml +++ b/manifests/bases/helm-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/helm-controller/releases/download/v0.28.1/helm-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.28.1/helm-controller.deployment.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.29.0/helm-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.29.0/helm-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/image-automation-controller/kustomization.yaml b/manifests/bases/image-automation-controller/kustomization.yaml index bcc3f9bb..85b54b7a 100644 --- a/manifests/bases/image-automation-controller/kustomization.yaml +++ b/manifests/bases/image-automation-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.28.0/image-automation-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.28.0/image-automation-controller.deployment.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.29.0/image-automation-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.29.0/image-automation-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/image-reflector-controller/kustomization.yaml b/manifests/bases/image-reflector-controller/kustomization.yaml index bc2cbe2f..ec599097 100644 --- a/manifests/bases/image-reflector-controller/kustomization.yaml +++ b/manifests/bases/image-reflector-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.23.1/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.23.1/image-reflector-controller.deployment.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.24.0/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.24.0/image-reflector-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/kustomize-controller/kustomization.yaml b/manifests/bases/kustomize-controller/kustomization.yaml index e02ce5fa..494234ca 100644 --- a/manifests/bases/kustomize-controller/kustomization.yaml +++ b/manifests/bases/kustomize-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.32.0/kustomize-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.32.0/kustomize-controller.deployment.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.33.0/kustomize-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.33.0/kustomize-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/notification-controller/kustomization.yaml b/manifests/bases/notification-controller/kustomization.yaml index 738f7429..9f9eb6f7 100644 --- a/manifests/bases/notification-controller/kustomization.yaml +++ b/manifests/bases/notification-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/notification-controller/releases/download/v0.30.2/notification-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v0.30.2/notification-controller.deployment.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.31.0/notification-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.31.0/notification-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index 9049750f..c0b6af2c 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.33.0/source-controller.crds.yaml -- https://github.com/fluxcd/source-controller/releases/download/v0.33.0/source-controller.deployment.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.34.0/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.34.0/source-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index 43ed395c..4fe699f4 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -1,9 +1,9 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.33.0/source-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.32.0/kustomize-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.28.1/helm-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v0.30.2/notification-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.23.1/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.28.0/image-automation-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.34.0/source-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.33.0/kustomize-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.29.0/helm-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.31.0/notification-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.24.0/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.29.0/image-automation-controller.crds.yaml From 3fc5f34344e9ce533f2fdcabc6d0bfd9272736b0 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Fri, 3 Feb 2023 16:51:22 +0200 Subject: [PATCH 379/818] docs: Add permissions to update workflow Signed-off-by: Stefan Prodan --- action/README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/action/README.md b/action/README.md index 6c2db0f2..5301c8c1 100644 --- a/action/README.md +++ b/action/README.md @@ -61,6 +61,10 @@ on: schedule: - cron: "0 * * * *" +permissions: + contents: write + pull-requests: write + jobs: components: runs-on: ubuntu-latest From 0cd0bf3b58aea445b4d6bc08f73431a5e8312d3d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Feb 2023 01:05:36 +0000 Subject: [PATCH 380/818] build(deps): bump goreleaser/goreleaser-action from 4.1.1 to 4.2.0 Bumps [goreleaser/goreleaser-action](https://github.com/goreleaser/goreleaser-action) from 4.1.1 to 4.2.0. - [Release notes](https://github.com/goreleaser/goreleaser-action/releases) - [Commits](https://github.com/goreleaser/goreleaser-action/compare/9754a253a8673b0ea869c2e863b4e975497efd0c...f82d6c1c344bcacabba2c841718984797f664a6b) --- updated-dependencies: - dependency-name: goreleaser/goreleaser-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/release.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index cc4afdca..f6970390 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -73,7 +73,7 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Run GoReleaser - uses: goreleaser/goreleaser-action@9754a253a8673b0ea869c2e863b4e975497efd0c # v3 + uses: goreleaser/goreleaser-action@f82d6c1c344bcacabba2c841718984797f664a6b # v3 with: version: latest args: release --release-notes=output/notes.md --skip-validate From ae5294f010c13762244854037eccb15f7ada4858 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Feb 2023 09:41:09 +0000 Subject: [PATCH 381/818] build(deps): bump actions/cache from 3.2.3 to 3.2.4 Bumps [actions/cache](https://github.com/actions/cache) from 3.2.3 to 3.2.4. - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](https://github.com/actions/cache/compare/58c146cc91c5b9e778e71775dfe9bf1442ad9a12...627f0f41f6904a5b1efbaed9f96d9eb58e92e920) --- updated-dependencies: - dependency-name: actions/cache dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/e2e-azure.yaml | 2 +- .github/workflows/e2e-bootstrap.yaml | 2 +- .github/workflows/e2e.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/e2e-azure.yaml b/.github/workflows/e2e-azure.yaml index 81eb88d4..34b52423 100644 --- a/.github/workflows/e2e-azure.yaml +++ b/.github/workflows/e2e-azure.yaml @@ -17,7 +17,7 @@ jobs: - name: Checkout uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c - name: Restore Go cache - uses: actions/cache@58c146cc91c5b9e778e71775dfe9bf1442ad9a12 + uses: actions/cache@627f0f41f6904a5b1efbaed9f96d9eb58e92e920 with: path: ~/go/pkg/mod key: ${{ runner.os }}-go1.18-${{ hashFiles('**/go.sum') }} diff --git a/.github/workflows/e2e-bootstrap.yaml b/.github/workflows/e2e-bootstrap.yaml index f76e1aba..0b37327d 100644 --- a/.github/workflows/e2e-bootstrap.yaml +++ b/.github/workflows/e2e-bootstrap.yaml @@ -18,7 +18,7 @@ jobs: - name: Checkout uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c - name: Restore Go cache - uses: actions/cache@58c146cc91c5b9e778e71775dfe9bf1442ad9a12 + uses: actions/cache@627f0f41f6904a5b1efbaed9f96d9eb58e92e920 with: path: ~/go/pkg/mod key: ${{ runner.os }}-go1.18-${{ hashFiles('**/go.sum') }} diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index d9c41285..47e44c23 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -22,7 +22,7 @@ jobs: - name: Checkout uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c - name: Restore Go cache - uses: actions/cache@58c146cc91c5b9e778e71775dfe9bf1442ad9a12 + uses: actions/cache@627f0f41f6904a5b1efbaed9f96d9eb58e92e920 with: path: ~/go/pkg/mod key: ${{ runner.os }}-go1.18-${{ hashFiles('**/go.sum') }} From e93b3d8d7516a0d556c2bce0f620a571ce93b65c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Feb 2023 02:06:09 +0000 Subject: [PATCH 382/818] build(deps): bump docker/setup-buildx-action from 2.4.0 to 2.4.1 Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 2.4.0 to 2.4.1. - [Release notes](https://github.com/docker/setup-buildx-action/releases) - [Commits](https://github.com/docker/setup-buildx-action/compare/15c905b16b06416d2086efa066dd8e3a35cc7f98...f03ac48505955848960e80bbb68046aa35c7b9e7) --- updated-dependencies: - dependency-name: docker/setup-buildx-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/release.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index f6970390..cb719637 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -27,7 +27,7 @@ jobs: uses: docker/setup-qemu-action@e81a89b1732b9c48d79cd809d8d81d79c4647a18 # v2 - name: Setup Docker Buildx id: buildx - uses: docker/setup-buildx-action@15c905b16b06416d2086efa066dd8e3a35cc7f98 # v2 + uses: docker/setup-buildx-action@f03ac48505955848960e80bbb68046aa35c7b9e7 # v2 - name: Setup Syft uses: anchore/sbom-action/download-syft@07978da4bdb4faa726e52dfc6b1bed63d4b56479 # v0.13.3 - name: Setup Cosign From c09371459769a11aa47f3b14eedbc9f56b091bb3 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Fri, 10 Feb 2023 10:57:42 +0200 Subject: [PATCH 383/818] RFC-0003: Introduce Flux OCI media type Signed-off-by: Stefan Prodan --- rfcs/0003-kubernetes-oci/README.md | 65 +++++++++++++----------------- 1 file changed, 29 insertions(+), 36 deletions(-) diff --git a/rfcs/0003-kubernetes-oci/README.md b/rfcs/0003-kubernetes-oci/README.md index 686f4b6e..5622a80b 100644 --- a/rfcs/0003-kubernetes-oci/README.md +++ b/rfcs/0003-kubernetes-oci/README.md @@ -4,7 +4,7 @@ **Creation date:** 2022-03-31 -**Last update:** 2022-09-29 +**Last update:** 2023-02-10 ## Summary @@ -35,7 +35,7 @@ they do today for container images. ### Non-Goals -- Introduce a new OCI media type for artifacts containing Kubernetes manifests. +- Enforce a specific OCI media type for artifacts containing Kubernetes manifests or any other configs. ## Proposal @@ -47,25 +47,26 @@ and push the archive to a container registry as an OCI artifact. ```sh flux push artifact oci://docker.io/org/app-config:v1.0.0 \ --source="$(git config --get remote.origin.url)" \ - --revision="$(git branch --show-current)/$(git rev-parse HEAD)" \ + --revision="$(git rev-parse HEAD)" \ --path="./deploy" ``` -The Flux CLI will produce artifacts of type `application/vnd.docker.distribution.manifest.v2+json` -which ensures compatibility with container registries that don't support custom OCI media types. +The Flux CLI will produce OCI artifacts by setting the config layer +media type to `application/vnd.cncf.flux.config.v1+json`. The directory pointed to by `--path` is archived and compressed in the `tar+gzip` format -and the layer media type is set to `application/vnd.docker.image.rootfs.diff.tar.gzip`. +and the layer media type is set to `application/vnd.cncf.flux.content.v1.tar+gzip`. -The source URL and revision are added to the OCI artifact as annotations in the format: +The source and revision are added to the OCI artifact as Open Containers standard annotations: ```json { "schemaVersion": 2, - "mediaType": "application/vnd.docker.distribution.manifest.v2+json", + "mediaType": "application/vnd.oci.image.manifest.v1+json", "annotations": { - "source.toolkit.fluxcd.io/url": "https://github.com/org/app.git", - "source.toolkit.fluxcd.io/revision": "main/450796ddb2ab6724ee1cc32a4be56da032d1cca0" + "org.opencontainers.image.created": "2023-02-10T09:06:09Z", + "org.opencontainers.image.revision": "6ea3e5b4da159fcb4a1288f072d34c3315644bcc", + "org.opencontainers.image.source": "https://github.com/fluxcd/flux2" } } ``` @@ -136,7 +137,7 @@ which contains the tarball with Kubernetes manifests. ```yaml spec: layerSelector: - mediaType: "application/deployment.content.v1.tar+gzip" + mediaType: "application/vnd.cncf.flux.content.v1.tar+gzip" ``` If the layer selector matches more than one layer, @@ -287,7 +288,7 @@ Then push the Kubernetes manifests to GHCR: ```sh flux push artifact oci://ghcr.io/org/my-app-config:v1.0.0 \ --source="$(git config --get remote.origin.url)" \ - --revision="$(git tag --points-at HEAD)/$(git rev-parse HEAD)"\ + --revision="$(git rev-parse HEAD)"\ --path="./deploy" ``` @@ -308,8 +309,8 @@ List the artifacts and their metadata with: ```console $ flux list artifacts oci://ghcr.io/org/my-app-config ARTIFACT DIGEST SOURCE REVISION -ghcr.io/org/my-app-config:latest sha256:45b95019d30af335137977a369ad56e9ea9e9c75bb01afb081a629ba789b890c https://github.com/org/my-app-config.git v1.0.0/20b3a674391df53f05e59a33554973d1cbd4d549 -ghcr.io/org/my-app-config:v1.0.0 sha256:45b95019d30af335137977a369ad56e9ea9e9c75bb01afb081a629ba789b890c https://github.com/org/my-app-config.git v1.0.0/3f45e72f0d3457e91e3c530c346d86969f9f4034 +ghcr.io/org/my-app-config:latest sha256:45b95019d30af335137977a369ad56e9ea9e9c75bb01afb081a629ba789b890c https://github.com/org/my-app-config.git 20b3a674391df53f05e59a33554973d1cbd4d549 +ghcr.io/org/my-app-config:v1.0.0 sha256:45b95019d30af335137977a369ad56e9ea9e9c75bb01afb081a629ba789b890c https://github.com/org/my-app-config.git 3f45e72f0d3457e91e3c530c346d86969f9f4034 ``` #### Story 2 @@ -372,45 +373,37 @@ spec: timeout: 2m ``` -### Alternatives - -An alternative solution is to introduce an OCI artifact type especially made for Kubernetes configuration. -That is considered unpractical, as introducing an OCI type has to go through the -IANA process and Flux is not the owner of those type as Helm is for Helm artifact for example. - ## Design Details -Both the Flux CLI and source-controller will use the [go-containerregistry](https://github.com/google/go-containerregistry) +The Flux controllers and CLI will use the [fluxcd/pkg/oci](https://github.com/fluxcd/pkg/tree/main/oci) library for OCI operations such as push, pull, tag, list tags, etc. For authentication purposes, the `flux artifact` commands will use the `~/.docker/config.json` -config file and the Docker credential helpers. - -The source-controller will reuse the authentication library from -[image-reflector-controller](https://github.com/fluxcd/image-reflector-controller). +config file and the Docker credential helpers. On Cloud VMs without Docker installed, the CLI will +use context-based authorization for AWS, Azure and GCP. The Flux CLI will produce OCI artifacts with the following format: ```json { "schemaVersion": 2, - "mediaType": "application/vnd.docker.distribution.manifest.v2+json", + "mediaType": "application/vnd.oci.image.manifest.v1+json", "config": { - "mediaType": "application/vnd.docker.container.image.v1+json", + "mediaType": "application/vnd.cncf.flux.config.v1+json", "size": 233, - "digest": "sha256:3b6cdcc7adcc9a84d3214ee1c029543789d90b5ae69debe9efa3f66e982875de" + "digest": "sha256:1b80ecb1c04d4a9718a6094a00ed17b76ea8ff2bb846695fa38e7492d34f505c" }, "layers": [ { - "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", - "size": 1091, - "digest": "sha256:ad804afeae14a8a5c9a45b29f4931104a887844691d040c8737ee3cce6fd6735" + "mediaType": "application/vnd.cncf.flux.content.v1.tar+gzip", + "size": 19081, + "digest": "sha256:46c2b334705cd08db1a6fa46f860cd3364fc1a3636eea37a9b35537549086a1c" } ], "annotations": { - "org.opencontainers.image.created": "2022-08-08T12:31:41+03:00", - "org.opencontainers.image.revision": "6.1.8/b3b00fe35424a45d373bf4c7214178bc36fd7872", - "org.opencontainers.image.source": "https://github.com/stefanprodan/podinfo.git" + "org.opencontainers.image.created": "2023-02-10T09:06:09Z", + "org.opencontainers.image.revision": "6ea3e5b4da159fcb4a1288f072d34c3315644bcc", + "org.opencontainers.image.source": "https://github.com/fluxcd/flux2" } } ``` @@ -442,8 +435,8 @@ status: checksum: d7e924b4882e55b97627355c7b3d2e711e9b54303afa2f50c25377f4df66a83b lastUpdateTime: "2022-06-22T09:14:21Z" metadata: - org.opencontainers.image.created: "2022-08-08T12:31:41+03:00" - org.opencontainers.image.revision: 6.1.8/b3b00fe35424a45d373bf4c7214178bc36fd7872 + org.opencontainers.image.created: "2023-02-10T09:06:09Z" + org.opencontainers.image.revision: b3b00fe35424a45d373bf4c7214178bc36fd7872 org.opencontainers.image.source: https://github.com/stefanprodan/podinfo.git path: ocirepository/oci/podinfo/3b6cdcc7adcc9a84d3214ee1c029543789d90b5ae69debe9efa3f66e982875de.tar.gz revision: 3b6cdcc7adcc9a84d3214ee1c029543789d90b5ae69debe9efa3f66e982875de From 577d4e71afccc3a85ad651aa0d246b33e2c1cf70 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Feb 2023 11:40:21 +0000 Subject: [PATCH 384/818] build(deps): bump snyk/actions Bumps [snyk/actions](https://github.com/snyk/actions) from e25b2e6f5658d1bb7a6671b113260f13134cc3af to 806182742461562b67788a64410098c9d9b96adb. - [Release notes](https://github.com/snyk/actions/releases) - [Commits](https://github.com/snyk/actions/compare/e25b2e6f5658d1bb7a6671b113260f13134cc3af...806182742461562b67788a64410098c9d9b96adb) --- updated-dependencies: - dependency-name: snyk/actions dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- .github/workflows/scan.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index 0bf182db..117ca036 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -38,7 +38,7 @@ jobs: run: | make cmd/flux/.manifests.done - name: Run Snyk to check for vulnerabilities - uses: snyk/actions/golang@e25b2e6f5658d1bb7a6671b113260f13134cc3af # v0.3.0 + uses: snyk/actions/golang@806182742461562b67788a64410098c9d9b96adb # v0.3.0 continue-on-error: true env: SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }} From 3c330b71aabdb6a1a9b92c00a824a0fc90952f4a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Feb 2023 13:37:02 +0000 Subject: [PATCH 385/818] build(deps): bump github/codeql-action from 2.2.1 to 2.2.4 Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2.2.1 to 2.2.4. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/3ebbd71c74ef574dbc558c82f70e52732c8b44fe...17573ee1cc1b9d061760f3a006fc4aac4f944fd5) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/scan.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index 117ca036..e8bacb75 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -45,7 +45,7 @@ jobs: with: args: --sarif-file-output=snyk.sarif - name: Upload result to GitHub Code Scanning - uses: github/codeql-action/upload-sarif@3ebbd71c74ef574dbc558c82f70e52732c8b44fe # v2 + uses: github/codeql-action/upload-sarif@17573ee1cc1b9d061760f3a006fc4aac4f944fd5 # v2 with: sarif_file: snyk.sarif @@ -62,10 +62,10 @@ jobs: with: go-version: 1.19.x - name: Initialize CodeQL - uses: github/codeql-action/init@3ebbd71c74ef574dbc558c82f70e52732c8b44fe # v2 + uses: github/codeql-action/init@17573ee1cc1b9d061760f3a006fc4aac4f944fd5 # v2 with: languages: go - name: Autobuild - uses: github/codeql-action/autobuild@3ebbd71c74ef574dbc558c82f70e52732c8b44fe # v2 + uses: github/codeql-action/autobuild@17573ee1cc1b9d061760f3a006fc4aac4f944fd5 # v2 - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@3ebbd71c74ef574dbc558c82f70e52732c8b44fe # v2 + uses: github/codeql-action/analyze@17573ee1cc1b9d061760f3a006fc4aac4f944fd5 # v2 From f4acc0cfc9a38f8a5e2ebfecb50d94fbddd528bb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Feb 2023 14:05:50 +0000 Subject: [PATCH 386/818] build(deps): bump actions/cache from 3.2.4 to 3.2.5 Bumps [actions/cache](https://github.com/actions/cache) from 3.2.4 to 3.2.5. - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](https://github.com/actions/cache/compare/627f0f41f6904a5b1efbaed9f96d9eb58e92e920...6998d139ddd3e68c71e9e398d8e40b71a2f39812) --- updated-dependencies: - dependency-name: actions/cache dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/e2e-azure.yaml | 2 +- .github/workflows/e2e-bootstrap.yaml | 2 +- .github/workflows/e2e.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/e2e-azure.yaml b/.github/workflows/e2e-azure.yaml index 34b52423..c4684a73 100644 --- a/.github/workflows/e2e-azure.yaml +++ b/.github/workflows/e2e-azure.yaml @@ -17,7 +17,7 @@ jobs: - name: Checkout uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c - name: Restore Go cache - uses: actions/cache@627f0f41f6904a5b1efbaed9f96d9eb58e92e920 + uses: actions/cache@6998d139ddd3e68c71e9e398d8e40b71a2f39812 with: path: ~/go/pkg/mod key: ${{ runner.os }}-go1.18-${{ hashFiles('**/go.sum') }} diff --git a/.github/workflows/e2e-bootstrap.yaml b/.github/workflows/e2e-bootstrap.yaml index 0b37327d..2bf2951c 100644 --- a/.github/workflows/e2e-bootstrap.yaml +++ b/.github/workflows/e2e-bootstrap.yaml @@ -18,7 +18,7 @@ jobs: - name: Checkout uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c - name: Restore Go cache - uses: actions/cache@627f0f41f6904a5b1efbaed9f96d9eb58e92e920 + uses: actions/cache@6998d139ddd3e68c71e9e398d8e40b71a2f39812 with: path: ~/go/pkg/mod key: ${{ runner.os }}-go1.18-${{ hashFiles('**/go.sum') }} diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index 47e44c23..940ce55a 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -22,7 +22,7 @@ jobs: - name: Checkout uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c - name: Restore Go cache - uses: actions/cache@627f0f41f6904a5b1efbaed9f96d9eb58e92e920 + uses: actions/cache@6998d139ddd3e68c71e9e398d8e40b71a2f39812 with: path: ~/go/pkg/mod key: ${{ runner.os }}-go1.18-${{ hashFiles('**/go.sum') }} From b263e14fa8c603babf2908989672f849ab1ae5cc Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Wed, 15 Feb 2023 13:11:37 +0100 Subject: [PATCH 387/818] tests: only provide template values when used As otherwise the `.golden` values can not be automatically updated using `-update` as documented in `CONTRIBUTING.md`. Also ensure we do not use `defer` but rather `t.Cleanup` in tests, as this will always be called even if e.g. `t.Fatal` absruptly stops the test. Signed-off-by: Hidde Beydals --- cmd/flux/build_artifact_test.go | 2 +- cmd/flux/build_kustomization_test.go | 3 +-- cmd/flux/diff_kustomization_test.go | 4 +++- cmd/flux/export_test.go | 28 +++++++++++++++++++++------- cmd/flux/helmrelease_test.go | 26 ++++++++++++++++++-------- cmd/flux/image_test.go | 14 +++++++------- cmd/flux/install_test.go | 4 +--- cmd/flux/kustomization_test.go | 26 ++++++++++++++++++-------- cmd/flux/source_oci_test.go | 25 +++++++++++++++++-------- 9 files changed, 87 insertions(+), 45 deletions(-) diff --git a/cmd/flux/build_artifact_test.go b/cmd/flux/build_artifact_test.go index 37ed8f02..ba84186c 100644 --- a/cmd/flux/build_artifact_test.go +++ b/cmd/flux/build_artifact_test.go @@ -54,7 +54,7 @@ data: tmpFile, err := saveReaderToFile(strings.NewReader(tt.string)) g.Expect(err).To(BeNil()) - defer os.Remove(tmpFile) + t.Cleanup(func() { _ = os.Remove(tmpFile) }) b, err := os.ReadFile(tmpFile) if tt.expectErr { diff --git a/cmd/flux/build_kustomization_test.go b/cmd/flux/build_kustomization_test.go index 5d78a7cb..b4078195 100644 --- a/cmd/flux/build_kustomization_test.go +++ b/cmd/flux/build_kustomization_test.go @@ -171,8 +171,7 @@ spec: if err != nil { t.Fatal(err) } - - defer os.Remove("./testdata/build-kustomization/podinfo.yaml") + t.Cleanup(func() { _ = os.Remove("./testdata/build-kustomization/podinfo.yaml") }) for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { diff --git a/cmd/flux/diff_kustomization_test.go b/cmd/flux/diff_kustomization_test.go index 3c7a3071..1c92268c 100644 --- a/cmd/flux/diff_kustomization_test.go +++ b/cmd/flux/diff_kustomization_test.go @@ -109,7 +109,9 @@ func TestDiffKustomization(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { if tt.objectFile != "" { - resourceManager.ApplyAll(context.Background(), createObjectFromFile(tt.objectFile, tmpl, t), ssa.DefaultApplyOptions()) + if _, err := resourceManager.ApplyAll(context.Background(), createObjectFromFile(tt.objectFile, tmpl, t), ssa.DefaultApplyOptions()); err != nil { + t.Error(err) + } } cmd := cmdTestCase{ args: tt.args + " -n " + tmpl["fluxns"], diff --git a/cmd/flux/export_test.go b/cmd/flux/export_test.go index dc59caa2..85ae174a 100644 --- a/cmd/flux/export_test.go +++ b/cmd/flux/export_test.go @@ -8,78 +8,92 @@ import ( ) func TestExport(t *testing.T) { + namespace := allocateNamespace("flux-system") + + objectFile := "testdata/export/objects.yaml" + tmpl := map[string]string{ + "fluxns": namespace, + } + testEnv.CreateObjectFile(objectFile, tmpl, t) + cases := []struct { name string arg string goldenFile string + tmpl map[string]string }{ { "alert-provider", "export alert-provider slack", "testdata/export/provider.yaml", + tmpl, }, { "alert", "export alert flux-system", "testdata/export/alert.yaml", + tmpl, }, { "image policy", "export image policy flux-system", "testdata/export/image-policy.yaml", + tmpl, }, { "image repository", "export image repository flux-system", "testdata/export/image-repo.yaml", + tmpl, }, { "image update", "export image update flux-system", "testdata/export/image-update.yaml", + tmpl, }, { "source git", "export source git flux-system", "testdata/export/git-repo.yaml", + tmpl, }, { "source helm", "export source helm flux-system", "testdata/export/helm-repo.yaml", + tmpl, }, { "receiver", "export receiver flux-system", "testdata/export/receiver.yaml", + tmpl, }, { "kustomization", "export kustomization flux-system", "testdata/export/ks.yaml", + tmpl, }, { "helmrelease", "export helmrelease flux-system", "testdata/export/helm-release.yaml", + tmpl, }, { "bucket", "export source bucket flux-system", "testdata/export/bucket.yaml", + tmpl, }, } - objectFile := "testdata/export/objects.yaml" - tmpl := map[string]string{ - "fluxns": allocateNamespace("flux-system"), - } - testEnv.CreateObjectFile(objectFile, tmpl, t) - for _, tt := range cases { t.Run(tt.name, func(t *testing.T) { cmd := cmdTestCase{ - args: tt.arg + " -n=" + tmpl["fluxns"], + args: tt.arg + " -n=" + namespace, assert: assertGoldenTemplateFile(tt.goldenFile, tmpl), } diff --git a/cmd/flux/helmrelease_test.go b/cmd/flux/helmrelease_test.go index dcb9ff58..2596ca48 100644 --- a/cmd/flux/helmrelease_test.go +++ b/cmd/flux/helmrelease_test.go @@ -22,51 +22,61 @@ package main import "testing" func TestHelmReleaseFromGit(t *testing.T) { + namespace := allocateNamespace("thrfg") + del, err := setupTestNamespace(namespace) + if err != nil { + t.Fatal(err) + } + t.Cleanup(del) + + tmpl := map[string]string{"ns": namespace} + cases := []struct { args string goldenFile string + tmpl map[string]string }{ { "create source git thrfg --url=https://github.com/stefanprodan/podinfo --branch=main --tag=6.0.0", "testdata/helmrelease/create_source_git.golden", + nil, }, { "create helmrelease thrfg --source=GitRepository/thrfg --chart=./charts/podinfo", "testdata/helmrelease/create_helmrelease_from_git.golden", + nil, }, { "get helmrelease thrfg", "testdata/helmrelease/get_helmrelease_from_git.golden", + nil, }, { "reconcile helmrelease thrfg --with-source", "testdata/helmrelease/reconcile_helmrelease_from_git.golden", + tmpl, }, { "suspend helmrelease thrfg", "testdata/helmrelease/suspend_helmrelease_from_git.golden", + tmpl, }, { "resume helmrelease thrfg", "testdata/helmrelease/resume_helmrelease_from_git.golden", + tmpl, }, { "delete helmrelease thrfg --silent", "testdata/helmrelease/delete_helmrelease_from_git.golden", + tmpl, }, } - namespace := allocateNamespace("thrfg") - del, err := setupTestNamespace(namespace) - if err != nil { - t.Fatal(err) - } - defer del() - for _, tc := range cases { cmd := cmdTestCase{ args: tc.args + " -n=" + namespace, - assert: assertGoldenTemplateFile(tc.goldenFile, map[string]string{"ns": namespace}), + assert: assertGoldenTemplateFile(tc.goldenFile, tc.tmpl), } cmd.runTestCmd(t) } diff --git a/cmd/flux/image_test.go b/cmd/flux/image_test.go index 155326fa..7b705283 100644 --- a/cmd/flux/image_test.go +++ b/cmd/flux/image_test.go @@ -22,6 +22,13 @@ package main import "testing" func TestImageScanning(t *testing.T) { + namespace := allocateNamespace("tis") + del, err := setupTestNamespace(namespace) + if err != nil { + t.Fatal(err) + } + t.Cleanup(del) + cases := []struct { args string goldenFile string @@ -48,13 +55,6 @@ func TestImageScanning(t *testing.T) { }, } - namespace := allocateNamespace("tis") - del, err := setupTestNamespace(namespace) - if err != nil { - t.Fatal(err) - } - defer del() - for _, tc := range cases { cmd := cmdTestCase{ args: tc.args + " -n=" + namespace, diff --git a/cmd/flux/install_test.go b/cmd/flux/install_test.go index a0251206..f10f7d62 100644 --- a/cmd/flux/install_test.go +++ b/cmd/flux/install_test.go @@ -25,9 +25,7 @@ func TestInstall(t *testing.T) { // Given that this test uses an invalid namespace, it ensures // to restore whatever value it had previously. currentNamespace := *kubeconfigArgs.Namespace - defer func() { - *kubeconfigArgs.Namespace = currentNamespace - }() + t.Cleanup(func() { *kubeconfigArgs.Namespace = currentNamespace }) tests := []struct { name string diff --git a/cmd/flux/kustomization_test.go b/cmd/flux/kustomization_test.go index f2a16fb0..a08936f3 100644 --- a/cmd/flux/kustomization_test.go +++ b/cmd/flux/kustomization_test.go @@ -22,51 +22,61 @@ package main import "testing" func TestKustomizationFromGit(t *testing.T) { + namespace := allocateNamespace("tkfg") + del, err := setupTestNamespace(namespace) + if err != nil { + t.Fatal(err) + } + t.Cleanup(del) + + tmpl := map[string]string{"ns": namespace} + cases := []struct { args string goldenFile string + tmpl map[string]string }{ { "create source git tkfg --url=https://github.com/stefanprodan/podinfo --branch=main --tag=6.0.0", "testdata/kustomization/create_source_git.golden", + nil, }, { "create kustomization tkfg --source=tkfg --path=./deploy/overlays/dev --prune=true --interval=5m --health-check=Deployment/frontend.dev --health-check=Deployment/backend.dev --health-check-timeout=3m", "testdata/kustomization/create_kustomization_from_git.golden", + nil, }, { "get kustomization tkfg", "testdata/kustomization/get_kustomization_from_git.golden", + nil, }, { "reconcile kustomization tkfg --with-source", "testdata/kustomization/reconcile_kustomization_from_git.golden", + tmpl, }, { "suspend kustomization tkfg", "testdata/kustomization/suspend_kustomization_from_git.golden", + tmpl, }, { "resume kustomization tkfg", "testdata/kustomization/resume_kustomization_from_git.golden", + tmpl, }, { "delete kustomization tkfg --silent", "testdata/kustomization/delete_kustomization_from_git.golden", + tmpl, }, } - namespace := allocateNamespace("tkfg") - del, err := setupTestNamespace(namespace) - if err != nil { - t.Fatal(err) - } - defer del() - for _, tc := range cases { cmd := cmdTestCase{ args: tc.args + " -n=" + namespace, - assert: assertGoldenTemplateFile(tc.goldenFile, map[string]string{"ns": namespace}), + assert: assertGoldenTemplateFile(tc.goldenFile, tc.tmpl), } cmd.runTestCmd(t) } diff --git a/cmd/flux/source_oci_test.go b/cmd/flux/source_oci_test.go index c0f8125c..12afa957 100644 --- a/cmd/flux/source_oci_test.go +++ b/cmd/flux/source_oci_test.go @@ -24,47 +24,56 @@ import ( ) func TestSourceOCI(t *testing.T) { + namespace := allocateNamespace("oci-test") + del, err := setupTestNamespace(namespace) + if err != nil { + t.Fatal(err) + } + t.Cleanup(del) + + tmpl := map[string]string{"ns": namespace} + cases := []struct { args string goldenFile string + tmpl map[string]string }{ { "create source oci thrfg --url=oci://ghcr.io/stefanprodan/manifests/podinfo --tag=6.1.6 --interval 10m", "testdata/oci/create_source_oci.golden", + nil, }, { "get source oci thrfg", "testdata/oci/get_oci.golden", + nil, }, { "reconcile source oci thrfg", "testdata/oci/reconcile_oci.golden", + tmpl, }, { "suspend source oci thrfg", "testdata/oci/suspend_oci.golden", + tmpl, }, { "resume source oci thrfg", "testdata/oci/resume_oci.golden", + tmpl, }, { "delete source oci thrfg --silent", "testdata/oci/delete_oci.golden", + tmpl, }, } - namespace := allocateNamespace("oci-test") - del, err := setupTestNamespace(namespace) - if err != nil { - t.Fatal(err) - } - defer del() - for _, tc := range cases { cmd := cmdTestCase{ args: tc.args + " -n=" + namespace, - assert: assertGoldenTemplateFile(tc.goldenFile, map[string]string{"ns": namespace}), + assert: assertGoldenTemplateFile(tc.goldenFile, tc.tmpl), } cmd.runTestCmd(t) } From 1f5961d2ad301595ca648858a9962ff26168fc2e Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Wed, 15 Feb 2023 13:50:51 +0100 Subject: [PATCH 388/818] tests: deal with remaining `defer` Signed-off-by: Hidde Beydals --- internal/utils/utils_test.go | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/internal/utils/utils_test.go b/internal/utils/utils_test.go index c51e3e3c..2cec902c 100644 --- a/internal/utils/utils_test.go +++ b/internal/utils/utils_test.go @@ -20,7 +20,6 @@ limitations under the License. package utils import ( - "os" "path/filepath" "reflect" "testing" @@ -135,16 +134,9 @@ func TestExtractCRDs(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - // Create temporary directory to write the result in. - dir, err := os.MkdirTemp("", "flux-TestExtractCRDs") - if err != nil { - t.Fatalf("failed to create temporary directory: %v", err) - } - defer os.RemoveAll(dir) - - outManifestPath := filepath.Join(dir, "crds.yaml") + outManifestPath := filepath.Join(t.TempDir(), "crds.yaml") inManifestPath := filepath.Join("testdata", tt.inManifestFile) - if err = ExtractCRDs(inManifestPath, outManifestPath); (err != nil) != tt.expectErr { + if err := ExtractCRDs(inManifestPath, outManifestPath); (err != nil) != tt.expectErr { t.Errorf("ExtractCRDs() error = %v, expectErr %v", err, tt.expectErr) } }) From 662f0d8cae08b86a0f40d8017c3debb231046aa7 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Wed, 15 Feb 2023 13:56:55 +0100 Subject: [PATCH 389/818] tests: rename "kubectl" `setupTestNamespace` As the other version has a different signature, but exists for a different build tag. Resulting in my IDE becoming absolutely confused when I tried to enable both at the same time. Opted for "exec" because this one shells out. Signed-off-by: Hidde Beydals --- cmd/flux/helmrelease_test.go | 2 +- cmd/flux/image_test.go | 2 +- cmd/flux/kustomization_test.go | 2 +- cmd/flux/main_e2e_test.go | 2 +- cmd/flux/source_oci_test.go | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/cmd/flux/helmrelease_test.go b/cmd/flux/helmrelease_test.go index 2596ca48..0686592e 100644 --- a/cmd/flux/helmrelease_test.go +++ b/cmd/flux/helmrelease_test.go @@ -23,7 +23,7 @@ import "testing" func TestHelmReleaseFromGit(t *testing.T) { namespace := allocateNamespace("thrfg") - del, err := setupTestNamespace(namespace) + del, err := execSetupTestNamespace(namespace) if err != nil { t.Fatal(err) } diff --git a/cmd/flux/image_test.go b/cmd/flux/image_test.go index 7b705283..8fe76a1e 100644 --- a/cmd/flux/image_test.go +++ b/cmd/flux/image_test.go @@ -23,7 +23,7 @@ import "testing" func TestImageScanning(t *testing.T) { namespace := allocateNamespace("tis") - del, err := setupTestNamespace(namespace) + del, err := execSetupTestNamespace(namespace) if err != nil { t.Fatal(err) } diff --git a/cmd/flux/kustomization_test.go b/cmd/flux/kustomization_test.go index a08936f3..b76022f3 100644 --- a/cmd/flux/kustomization_test.go +++ b/cmd/flux/kustomization_test.go @@ -23,7 +23,7 @@ import "testing" func TestKustomizationFromGit(t *testing.T) { namespace := allocateNamespace("tkfg") - del, err := setupTestNamespace(namespace) + del, err := execSetupTestNamespace(namespace) if err != nil { t.Fatal(err) } diff --git a/cmd/flux/main_e2e_test.go b/cmd/flux/main_e2e_test.go index 20a51c5f..22e27fdf 100644 --- a/cmd/flux/main_e2e_test.go +++ b/cmd/flux/main_e2e_test.go @@ -65,7 +65,7 @@ func TestMain(m *testing.M) { os.Exit(code) } -func setupTestNamespace(namespace string) (func(), error) { +func execSetupTestNamespace(namespace string) (func(), error) { kubectlArgs := []string{"create", "namespace", namespace} _, err := utils.ExecKubectlCommand(context.TODO(), utils.ModeStderrOS, *kubeconfigArgs.KubeConfig, *kubeconfigArgs.Context, kubectlArgs...) if err != nil { diff --git a/cmd/flux/source_oci_test.go b/cmd/flux/source_oci_test.go index 12afa957..051af4f8 100644 --- a/cmd/flux/source_oci_test.go +++ b/cmd/flux/source_oci_test.go @@ -25,7 +25,7 @@ import ( func TestSourceOCI(t *testing.T) { namespace := allocateNamespace("oci-test") - del, err := setupTestNamespace(namespace) + del, err := execSetupTestNamespace(namespace) if err != nil { t.Fatal(err) } From bb6a7b8f07a9b5e5e59aa99f64a3616d366a2d1d Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Mon, 13 Feb 2023 14:01:25 +0100 Subject: [PATCH 390/818] Support shortening of revision with digest The `\b` in the regular expression ensures we only match with a hexadecimal notation as awhole, while still allowing to match with e.g. `sha1:...` which would not have been possible by using `\W` as this includes `_`. Signed-off-by: Hidde Beydals --- cmd/flux/get_kustomization.go | 20 +--- cmd/flux/get_source_bucket.go | 4 + cmd/flux/get_source_chart.go | 5 + cmd/flux/get_source_git.go | 9 +- cmd/flux/get_source_helm.go | 4 + cmd/flux/get_source_oci.go | 4 + .../get_kustomization_from_git.golden | 4 +- cmd/flux/testdata/oci/get_oci.golden | 4 +- internal/utils/hex.go | 39 +++++++ internal/utils/hex_test.go | 104 ++++++++++++++++++ 10 files changed, 172 insertions(+), 25 deletions(-) create mode 100644 internal/utils/hex.go create mode 100644 internal/utils/hex_test.go diff --git a/cmd/flux/get_kustomization.go b/cmd/flux/get_kustomization.go index 5d20f639..0dc9f72d 100644 --- a/cmd/flux/get_kustomization.go +++ b/cmd/flux/get_kustomization.go @@ -18,15 +18,15 @@ package main import ( "fmt" - "regexp" "strconv" "strings" "github.com/spf13/cobra" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" + + "github.com/fluxcd/flux2/internal/utils" ) var getKsCmd = &cobra.Command{ @@ -80,10 +80,8 @@ func (a kustomizationListAdapter) summariseItem(i int, includeNamespace bool, in item := a.Items[i] revision := item.Status.LastAppliedRevision status, msg := statusAndMessage(item.Status.Conditions) - if status == string(metav1.ConditionTrue) { - revision = shortenCommitSha(revision) - msg = shortenCommitSha(msg) - } + revision = utils.TruncateHex(revision) + msg = utils.TruncateHex(msg) return append(nameColumns(&item, includeNamespace, includeKind), revision, strings.Title(strconv.FormatBool(item.Spec.Suspend)), status, msg) } @@ -100,13 +98,3 @@ func (a kustomizationListAdapter) statusSelectorMatches(i int, conditionType, co item := a.Items[i] return statusMatches(conditionType, conditionStatus, item.Status.Conditions) } - -func shortenCommitSha(msg string) string { - r := regexp.MustCompile("/([a-f0-9]{40})$") - sha := r.FindString(msg) - if sha != "" { - msg = strings.Replace(msg, sha, string([]rune(sha)[:8]), -1) - } - - return msg -} diff --git a/cmd/flux/get_source_bucket.go b/cmd/flux/get_source_bucket.go index 4eed78e1..b1b283c4 100644 --- a/cmd/flux/get_source_bucket.go +++ b/cmd/flux/get_source_bucket.go @@ -25,6 +25,8 @@ import ( "k8s.io/apimachinery/pkg/runtime" sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + + "github.com/fluxcd/flux2/internal/utils" ) var getSourceBucketCmd = &cobra.Command{ @@ -80,6 +82,8 @@ func (a *bucketListAdapter) summariseItem(i int, includeNamespace bool, includeK revision = item.GetArtifact().Revision } status, msg := statusAndMessage(item.Status.Conditions) + revision = utils.TruncateHex(revision) + msg = utils.TruncateHex(msg) return append(nameColumns(&item, includeNamespace, includeKind), revision, strings.Title(strconv.FormatBool(item.Spec.Suspend)), status, msg) } diff --git a/cmd/flux/get_source_chart.go b/cmd/flux/get_source_chart.go index 6f5ccecd..bb275f60 100644 --- a/cmd/flux/get_source_chart.go +++ b/cmd/flux/get_source_chart.go @@ -25,6 +25,8 @@ import ( "k8s.io/apimachinery/pkg/runtime" sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + + "github.com/fluxcd/flux2/internal/utils" ) var getSourceHelmChartCmd = &cobra.Command{ @@ -80,6 +82,9 @@ func (a *helmChartListAdapter) summariseItem(i int, includeNamespace bool, inclu revision = item.GetArtifact().Revision } status, msg := statusAndMessage(item.Status.Conditions) + // NB: do not shorten revision as it contains a SemVer + // Message may still contain reference of e.g. commit chart was build from + msg = utils.TruncateHex(msg) return append(nameColumns(&item, includeNamespace, includeKind), revision, strings.Title(strconv.FormatBool(item.Spec.Suspend)), status, msg) } diff --git a/cmd/flux/get_source_git.go b/cmd/flux/get_source_git.go index 4b4f7c43..5df1b907 100644 --- a/cmd/flux/get_source_git.go +++ b/cmd/flux/get_source_git.go @@ -22,10 +22,11 @@ import ( "strings" "github.com/spf13/cobra" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + + "github.com/fluxcd/flux2/internal/utils" ) var getSourceGitCmd = &cobra.Command{ @@ -81,10 +82,8 @@ func (a *gitRepositoryListAdapter) summariseItem(i int, includeNamespace bool, i revision = item.GetArtifact().Revision } status, msg := statusAndMessage(item.Status.Conditions) - if status == string(metav1.ConditionTrue) { - revision = shortenCommitSha(revision) - msg = shortenCommitSha(msg) - } + revision = utils.TruncateHex(revision) + msg = utils.TruncateHex(msg) return append(nameColumns(&item, includeNamespace, includeKind), revision, strings.Title(strconv.FormatBool(item.Spec.Suspend)), status, msg) } diff --git a/cmd/flux/get_source_helm.go b/cmd/flux/get_source_helm.go index 7b4eb8e8..2ac0f0f9 100644 --- a/cmd/flux/get_source_helm.go +++ b/cmd/flux/get_source_helm.go @@ -25,6 +25,8 @@ import ( "k8s.io/apimachinery/pkg/runtime" sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + + "github.com/fluxcd/flux2/internal/utils" ) var getSourceHelmCmd = &cobra.Command{ @@ -80,6 +82,8 @@ func (a *helmRepositoryListAdapter) summariseItem(i int, includeNamespace bool, revision = item.GetArtifact().Revision } status, msg := statusAndMessage(item.Status.Conditions) + revision = utils.TruncateHex(revision) + msg = utils.TruncateHex(msg) return append(nameColumns(&item, includeNamespace, includeKind), revision, strings.Title(strconv.FormatBool(item.Spec.Suspend)), status, msg) } diff --git a/cmd/flux/get_source_oci.go b/cmd/flux/get_source_oci.go index b79f73f8..aac2a60e 100644 --- a/cmd/flux/get_source_oci.go +++ b/cmd/flux/get_source_oci.go @@ -25,6 +25,8 @@ import ( "k8s.io/apimachinery/pkg/runtime" sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + + "github.com/fluxcd/flux2/internal/utils" ) var getSourceOCIRepositoryCmd = &cobra.Command{ @@ -80,6 +82,8 @@ func (a *ociRepositoryListAdapter) summariseItem(i int, includeNamespace bool, i revision = item.GetArtifact().Revision } status, msg := statusAndMessage(item.Status.Conditions) + revision = utils.TruncateHex(revision) + msg = utils.TruncateHex(msg) return append(nameColumns(&item, includeNamespace, includeKind), revision, strings.Title(strconv.FormatBool(item.Spec.Suspend)), status, msg) } diff --git a/cmd/flux/testdata/kustomization/get_kustomization_from_git.golden b/cmd/flux/testdata/kustomization/get_kustomization_from_git.golden index b4f7e31c..8aa32cc6 100644 --- a/cmd/flux/testdata/kustomization/get_kustomization_from_git.golden +++ b/cmd/flux/testdata/kustomization/get_kustomization_from_git.golden @@ -1,2 +1,2 @@ -NAME REVISION SUSPENDED READY MESSAGE -tkfg 6.0.0/627d5c4 False True Applied revision: 6.0.0/627d5c4 +NAME REVISION SUSPENDED READY MESSAGE +tkfg 6.0.0/627d5c4b False True Applied revision: 6.0.0/627d5c4b diff --git a/cmd/flux/testdata/oci/get_oci.golden b/cmd/flux/testdata/oci/get_oci.golden index 5397cae2..153ebd0d 100644 --- a/cmd/flux/testdata/oci/get_oci.golden +++ b/cmd/flux/testdata/oci/get_oci.golden @@ -1,2 +1,2 @@ -NAME REVISION SUSPENDED READY MESSAGE -thrfg 6.1.6/dbdb109711ffb3be77504d2670dbe13c24dd63d8d7f1fb489d350e5bfe930dd3 False True stored artifact for digest '6.1.6/dbdb109711ffb3be77504d2670dbe13c24dd63d8d7f1fb489d350e5bfe930dd3' +NAME REVISION SUSPENDED READY MESSAGE +thrfg 6.1.6/dbdb1097 False True stored artifact for digest '6.1.6/dbdb1097' diff --git a/internal/utils/hex.go b/internal/utils/hex.go new file mode 100644 index 00000000..310e7432 --- /dev/null +++ b/internal/utils/hex.go @@ -0,0 +1,39 @@ +/* +Copyright 2023 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package utils + +import ( + "regexp" + "strings" +) + +// hexRegexp matches any hexadecimal notation between 40 and 128 characters. +var hexRegexp = regexp.MustCompile(`\b[a-f0-9]{40,128}\b`) + +// TruncateHex will replace any hexadecimal notation between 40 and 128 +// characters (SHA-1 up to SHA-512) within the given string with a truncated +// version of 8 characters. +func TruncateHex(str string) string { + if str == "" { + return "" + } + hits := hexRegexp.FindAllString(str, -1) + for _, v := range hits { + str = strings.Replace(str, v, string([]rune(v)[:8]), -1) + } + return str +} diff --git a/internal/utils/hex_test.go b/internal/utils/hex_test.go new file mode 100644 index 00000000..5cbc9d3c --- /dev/null +++ b/internal/utils/hex_test.go @@ -0,0 +1,104 @@ +/* +Copyright 2023 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package utils + +import ( + "testing" + + . "github.com/onsi/gomega" +) + +func TestTruncateHex(t *testing.T) { + tests := []struct { + name string + str string + want string + }{ + { + name: "SHA1 hash", + str: "16cfcc0b9066b3234dda29927ac1c19860d9663f", + want: "16cfcc0b", + }, + { + name: "SHA256 hash", + str: "c2448c95e262b10f9c1137bf1472f51c04dffca76966ff15eff409d0b300c0b0", + want: "c2448c95", + }, + { + name: "BLAKE3 hash", + str: "d7b332559f4e57c01dcbe24e53346b4e47696fd2a07f39639a4017a8c3a1d045", + want: "d7b33255", + }, + { + name: "SHA512 hash", + str: "dd81564b7e1e1d5986b166c21963d602f47f8610bf2a6ebbfd2f9c1e5ef05ef134f07e587383cbc049325c43e0e6817b5a282a74c0d569a5e057118484989781", + want: "dd81564b", + }, + { + name: "part of digest", + str: "sha256:c2448c95e262b10f9c1137bf1472f51c04dffca76966ff15eff409d0b300c0b0", + want: "sha256:c2448c95", + }, + { + name: "part of revision with digest", + str: "tag@sha256:c2448c95e262b10f9c1137bf1472f51c04dffca76966ff15eff409d0b300c0b0", + want: "tag@sha256:c2448c95", + }, + { + name: "legacy revision with hash", + str: "HEAD/16cfcc0b9066b3234dda29927ac1c19860d9663f", + want: "HEAD/16cfcc0b", + }, + { + name: "hex exceeding max length", + str: "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + want: "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + }, + { + name: "hex under min length", + str: "ffffffffffffff", + want: "ffffffffffffff", + }, + { + name: "within string", + str: "this is a lengthy string with a hash 16cfcc0b9066b3234dda29927ac1c19860d9663f in it", + want: "this is a lengthy string with a hash 16cfcc0b in it", + }, + { + name: "within string (quoted)", + str: "this is a lengthy string with a hash \"c2448c95e262b10f9c1137bf1472f51c04dffca76966ff15eff409d0b300c0b0\" in it", + want: "this is a lengthy string with a hash \"c2448c95\" in it", + }, + { + name: "within string (single quoted)", + str: "this is a lengthy string with a hash 'sha256:c2448c95e262b10f9c1137bf1472f51c04dffca76966ff15eff409d0b300c0b0' in it", + want: "this is a lengthy string with a hash 'sha256:c2448c95' in it", + }, + { + name: "arbitrary string", + str: "which should not be modified", + want: "which should not be modified", + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + g := NewWithT(t) + + g.Expect(TruncateHex(tt.str)).To(Equal(tt.want)) + }) + } +} From 9dd98fb2b20f87e4119785405e8d33ab178e472f Mon Sep 17 00:00:00 2001 From: Sunny Date: Thu, 16 Feb 2023 19:02:48 +0000 Subject: [PATCH 391/818] Update image-reflector API to v1beta2 Signed-off-by: Sunny --- cmd/flux/create_image_policy.go | 2 +- cmd/flux/create_image_repository.go | 2 +- cmd/flux/delete_image_policy.go | 2 +- cmd/flux/delete_image_repository.go | 2 +- cmd/flux/export_image_policy.go | 2 +- cmd/flux/export_image_repository.go | 2 +- cmd/flux/get_image_all.go | 2 +- cmd/flux/get_image_policy.go | 2 +- cmd/flux/get_image_repository.go | 2 +- cmd/flux/image.go | 2 +- cmd/flux/reconcile_image_repository.go | 2 +- cmd/flux/resume_image_repository.go | 2 +- cmd/flux/suspend_image_repository.go | 2 +- cmd/flux/testdata/export/image-policy.yaml | 2 +- cmd/flux/testdata/export/image-repo.yaml | 5 ++++- cmd/flux/testdata/export/objects.yaml | 4 ++-- .../testdata/image/get_image_policy_regex.golden | 4 ++-- .../image/get_image_policy_semver.golden | 4 ++-- go.mod | 4 ++-- go.sum | 8 ++++---- internal/utils/utils.go | 2 +- .../kustomization.yaml | 4 ++-- manifests/crds/kustomization.yaml | 2 +- pkg/uninstall/uninstall.go | 2 +- tests/azure/azure_test.go | 16 ++++++++-------- tests/azure/go.mod | 4 ++-- tests/azure/go.sum | 8 ++++---- tests/azure/util_test.go | 4 ++-- tests/image-automation/auto.yaml | 4 ++-- 29 files changed, 53 insertions(+), 50 deletions(-) diff --git a/cmd/flux/create_image_policy.go b/cmd/flux/create_image_policy.go index b9d8eb1a..0b9564ae 100644 --- a/cmd/flux/create_image_policy.go +++ b/cmd/flux/create_image_policy.go @@ -28,7 +28,7 @@ import ( "github.com/fluxcd/pkg/apis/meta" - imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta1" + imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta2" ) var createImagePolicyCmd = &cobra.Command{ diff --git a/cmd/flux/create_image_repository.go b/cmd/flux/create_image_repository.go index 140658f3..d4ce1fe6 100644 --- a/cmd/flux/create_image_repository.go +++ b/cmd/flux/create_image_repository.go @@ -26,7 +26,7 @@ import ( "github.com/fluxcd/pkg/apis/meta" - imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta1" + imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta2" ) var createImageRepositoryCmd = &cobra.Command{ diff --git a/cmd/flux/delete_image_policy.go b/cmd/flux/delete_image_policy.go index e86924da..7d02f742 100644 --- a/cmd/flux/delete_image_policy.go +++ b/cmd/flux/delete_image_policy.go @@ -19,7 +19,7 @@ package main import ( "github.com/spf13/cobra" - imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta1" + imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta2" ) var deleteImagePolicyCmd = &cobra.Command{ diff --git a/cmd/flux/delete_image_repository.go b/cmd/flux/delete_image_repository.go index a8769788..de5388a6 100644 --- a/cmd/flux/delete_image_repository.go +++ b/cmd/flux/delete_image_repository.go @@ -19,7 +19,7 @@ package main import ( "github.com/spf13/cobra" - imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta1" + imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta2" ) var deleteImageRepositoryCmd = &cobra.Command{ diff --git a/cmd/flux/export_image_policy.go b/cmd/flux/export_image_policy.go index 5302dd63..7bc24273 100644 --- a/cmd/flux/export_image_policy.go +++ b/cmd/flux/export_image_policy.go @@ -20,7 +20,7 @@ import ( "github.com/spf13/cobra" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta1" + imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta2" ) var exportImagePolicyCmd = &cobra.Command{ diff --git a/cmd/flux/export_image_repository.go b/cmd/flux/export_image_repository.go index 13f72f7d..29485789 100644 --- a/cmd/flux/export_image_repository.go +++ b/cmd/flux/export_image_repository.go @@ -20,7 +20,7 @@ import ( "github.com/spf13/cobra" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta1" + imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta2" ) var exportImageRepositoryCmd = &cobra.Command{ diff --git a/cmd/flux/get_image_all.go b/cmd/flux/get_image_all.go index f554232e..f861a26b 100644 --- a/cmd/flux/get_image_all.go +++ b/cmd/flux/get_image_all.go @@ -22,7 +22,7 @@ import ( "github.com/spf13/cobra" autov1 "github.com/fluxcd/image-automation-controller/api/v1beta1" - imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta1" + imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta2" ) var getImageAllCmd = &cobra.Command{ diff --git a/cmd/flux/get_image_policy.go b/cmd/flux/get_image_policy.go index a853817e..9d261fe8 100644 --- a/cmd/flux/get_image_policy.go +++ b/cmd/flux/get_image_policy.go @@ -22,7 +22,7 @@ import ( "github.com/spf13/cobra" "k8s.io/apimachinery/pkg/runtime" - imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta1" + imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta2" ) var getImagePolicyCmd = &cobra.Command{ diff --git a/cmd/flux/get_image_repository.go b/cmd/flux/get_image_repository.go index 3b190b7d..0e9bf865 100644 --- a/cmd/flux/get_image_repository.go +++ b/cmd/flux/get_image_repository.go @@ -25,7 +25,7 @@ import ( "github.com/spf13/cobra" "k8s.io/apimachinery/pkg/runtime" - imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta1" + imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta2" ) var getImageRepositoryCmd = &cobra.Command{ diff --git a/cmd/flux/image.go b/cmd/flux/image.go index 4659788b..38c264a7 100644 --- a/cmd/flux/image.go +++ b/cmd/flux/image.go @@ -20,7 +20,7 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" autov1 "github.com/fluxcd/image-automation-controller/api/v1beta1" - imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta1" + imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta2" ) // These are general-purpose adapters for attaching methods to, for diff --git a/cmd/flux/reconcile_image_repository.go b/cmd/flux/reconcile_image_repository.go index efd89e9c..04e20d04 100644 --- a/cmd/flux/reconcile_image_repository.go +++ b/cmd/flux/reconcile_image_repository.go @@ -21,7 +21,7 @@ import ( "github.com/spf13/cobra" - imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta1" + imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta2" ) var reconcileImageRepositoryCmd = &cobra.Command{ diff --git a/cmd/flux/resume_image_repository.go b/cmd/flux/resume_image_repository.go index b0c15b18..a5e69c26 100644 --- a/cmd/flux/resume_image_repository.go +++ b/cmd/flux/resume_image_repository.go @@ -19,7 +19,7 @@ package main import ( "github.com/spf13/cobra" - imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta1" + imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta2" ) var resumeImageRepositoryCmd = &cobra.Command{ diff --git a/cmd/flux/suspend_image_repository.go b/cmd/flux/suspend_image_repository.go index 826c4de4..000708cb 100644 --- a/cmd/flux/suspend_image_repository.go +++ b/cmd/flux/suspend_image_repository.go @@ -19,7 +19,7 @@ package main import ( "github.com/spf13/cobra" - imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta1" + imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta2" ) var suspendImageRepositoryCmd = &cobra.Command{ diff --git a/cmd/flux/testdata/export/image-policy.yaml b/cmd/flux/testdata/export/image-policy.yaml index 4a1bcbca..d61b535e 100644 --- a/cmd/flux/testdata/export/image-policy.yaml +++ b/cmd/flux/testdata/export/image-policy.yaml @@ -1,5 +1,5 @@ --- -apiVersion: image.toolkit.fluxcd.io/v1beta1 +apiVersion: image.toolkit.fluxcd.io/v1beta2 kind: ImagePolicy metadata: name: flux-system diff --git a/cmd/flux/testdata/export/image-repo.yaml b/cmd/flux/testdata/export/image-repo.yaml index 959126be..ca472928 100644 --- a/cmd/flux/testdata/export/image-repo.yaml +++ b/cmd/flux/testdata/export/image-repo.yaml @@ -1,10 +1,13 @@ --- -apiVersion: image.toolkit.fluxcd.io/v1beta1 +apiVersion: image.toolkit.fluxcd.io/v1beta2 kind: ImageRepository metadata: name: flux-system namespace: {{ .fluxns }} spec: + exclusionList: + - ^.*\.sig$ image: ghcr.io/test/podinfo interval: 1m0s + provider: generic diff --git a/cmd/flux/testdata/export/objects.yaml b/cmd/flux/testdata/export/objects.yaml index 426a6e00..b052199d 100644 --- a/cmd/flux/testdata/export/objects.yaml +++ b/cmd/flux/testdata/export/objects.yaml @@ -30,7 +30,7 @@ spec: - kind: "Kustomization" name: "*" --- -apiVersion: image.toolkit.fluxcd.io/v1beta1 +apiVersion: image.toolkit.fluxcd.io/v1beta2 kind: ImageRepository metadata: name: flux-system @@ -39,7 +39,7 @@ spec: image: ghcr.io/test/podinfo interval: 1m0s --- -apiVersion: image.toolkit.fluxcd.io/v1beta1 +apiVersion: image.toolkit.fluxcd.io/v1beta2 kind: ImagePolicy metadata: name: flux-system diff --git a/cmd/flux/testdata/image/get_image_policy_regex.golden b/cmd/flux/testdata/image/get_image_policy_regex.golden index b7cf40a9..9f654d4e 100644 --- a/cmd/flux/testdata/image/get_image_policy_regex.golden +++ b/cmd/flux/testdata/image/get_image_policy_regex.golden @@ -1,2 +1,2 @@ -NAME LATEST IMAGE READY MESSAGE -podinfo-regex ghcr.io/stefanprodan/podinfo:5.0.0 True Latest image tag for 'ghcr.io/stefanprodan/podinfo' resolved to: 5.0.0 +NAME LATEST IMAGE READY MESSAGE +podinfo-regex ghcr.io/stefanprodan/podinfo:5.0.0 True Latest image tag for 'ghcr.io/stefanprodan/podinfo' resolved to 5.0.0 diff --git a/cmd/flux/testdata/image/get_image_policy_semver.golden b/cmd/flux/testdata/image/get_image_policy_semver.golden index 30ce52b7..7100445e 100644 --- a/cmd/flux/testdata/image/get_image_policy_semver.golden +++ b/cmd/flux/testdata/image/get_image_policy_semver.golden @@ -1,2 +1,2 @@ -NAME LATEST IMAGE READY MESSAGE -podinfo-semver ghcr.io/stefanprodan/podinfo:5.0.3 True Latest image tag for 'ghcr.io/stefanprodan/podinfo' resolved to: 5.0.3 +NAME LATEST IMAGE READY MESSAGE +podinfo-semver ghcr.io/stefanprodan/podinfo:5.0.3 True Latest image tag for 'ghcr.io/stefanprodan/podinfo' resolved to 5.0.3 diff --git a/go.mod b/go.mod index e32b48af..c64240e3 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 github.com/fluxcd/helm-controller/api v0.29.0 github.com/fluxcd/image-automation-controller/api v0.29.0 - github.com/fluxcd/image-reflector-controller/api v0.24.0 + github.com/fluxcd/image-reflector-controller/api v0.25.0 github.com/fluxcd/kustomize-controller/api v0.33.0 github.com/fluxcd/notification-controller/api v0.31.0 github.com/fluxcd/pkg/apis/meta v0.19.0 @@ -49,7 +49,7 @@ require ( k8s.io/client-go v0.26.1 k8s.io/kubectl v0.26.1 sigs.k8s.io/cli-utils v0.34.0 - sigs.k8s.io/controller-runtime v0.14.2 + sigs.k8s.io/controller-runtime v0.14.4 sigs.k8s.io/kustomize/api v0.12.1 sigs.k8s.io/kustomize/kyaml v0.13.9 sigs.k8s.io/yaml v1.3.0 diff --git a/go.sum b/go.sum index 32db9696..aa65c0e3 100644 --- a/go.sum +++ b/go.sum @@ -203,8 +203,8 @@ github.com/fluxcd/helm-controller/api v0.29.0 h1:aoyI2fQNR/8rmUCz6l4kqQzgS3oAvP3 github.com/fluxcd/helm-controller/api v0.29.0/go.mod h1:BXivPOvBtSKRmcs2HdAtlR5hlC0UGU5Zg847KmtXvkQ= github.com/fluxcd/image-automation-controller/api v0.29.0 h1:86g4NgPCzfBaE4CRKc2EtyaVrEdbFVs81KLOz4vHZjA= github.com/fluxcd/image-automation-controller/api v0.29.0/go.mod h1:mmRgP6i2TzEQUzIIjay0G7fPb6Y11Qzw1CTD7aj1zMc= -github.com/fluxcd/image-reflector-controller/api v0.24.0 h1:F0X+IaRSPAWeV5ZDzeqw7hKbq74AmxLSU/SwdXCcc3c= -github.com/fluxcd/image-reflector-controller/api v0.24.0/go.mod h1:F4l0tBvVk2XAKoRt4xzZmj+XmuaD6fc44n8waAEZMjE= +github.com/fluxcd/image-reflector-controller/api v0.25.0 h1:tK0Hc7Xxr5z6wtBvLTX/cEwjt9YZdidwQ6JQRZuni3w= +github.com/fluxcd/image-reflector-controller/api v0.25.0/go.mod h1:VXMXfQ5nLZtP+VKuqxYlQOyJ5aFjvC8YpFp1fSwcEAQ= github.com/fluxcd/kustomize-controller/api v0.33.0 h1:ELTDIBC9dYaQjwIOtQxXAX2S4ydD6VQbmgf9p8wxIpE= github.com/fluxcd/kustomize-controller/api v0.33.0/go.mod h1:6dVUIhT3Dge4Fyljv/qILYygwUTpAXl5IDjoOFLebfE= github.com/fluxcd/notification-controller/api v0.31.0 h1:KcxsVwL1DU1BGro0raAt5+FwHCgGJwNsa915DdrAehs= @@ -1022,8 +1022,8 @@ rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/cli-utils v0.34.0 h1:zCUitt54f0/MYj/ajVFnG6XSXMhpZ72O/3RewIchW8w= sigs.k8s.io/cli-utils v0.34.0/go.mod h1:EXyMwPMu9OL+LRnj0JEMsGG/fRvbgFadcVlSnE8RhFs= -sigs.k8s.io/controller-runtime v0.14.2 h1:P6IwDhbsRWsBClt/8/h8Zy36bCuGuW5Op7MHpFrN/60= -sigs.k8s.io/controller-runtime v0.14.2/go.mod h1:WqIdsAY6JBsjfc/CqO0CORmNtoCtE4S6qbPc9s68h+0= +sigs.k8s.io/controller-runtime v0.14.4 h1:Kd/Qgx5pd2XUL08eOV2vwIq3L9GhIbJ5Nxengbd4/0M= +sigs.k8s.io/controller-runtime v0.14.4/go.mod h1:WqIdsAY6JBsjfc/CqO0CORmNtoCtE4S6qbPc9s68h+0= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= sigs.k8s.io/kustomize/api v0.12.1 h1:7YM7gW3kYBwtKvoY216ZzY+8hM+lV53LUayghNRJ0vM= diff --git a/internal/utils/utils.go b/internal/utils/utils.go index ab9abe2e..8b876bdf 100644 --- a/internal/utils/utils.go +++ b/internal/utils/utils.go @@ -43,7 +43,7 @@ import ( helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" imageautov1 "github.com/fluxcd/image-automation-controller/api/v1beta1" - imagereflectv1 "github.com/fluxcd/image-reflector-controller/api/v1beta1" + imagereflectv1 "github.com/fluxcd/image-reflector-controller/api/v1beta2" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" "github.com/fluxcd/pkg/apis/meta" diff --git a/manifests/bases/image-reflector-controller/kustomization.yaml b/manifests/bases/image-reflector-controller/kustomization.yaml index ec599097..a854e6b5 100644 --- a/manifests/bases/image-reflector-controller/kustomization.yaml +++ b/manifests/bases/image-reflector-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.24.0/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.24.0/image-reflector-controller.deployment.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.25.0/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.25.0/image-reflector-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index 4fe699f4..d0ef5470 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -5,5 +5,5 @@ resources: - https://github.com/fluxcd/kustomize-controller/releases/download/v0.33.0/kustomize-controller.crds.yaml - https://github.com/fluxcd/helm-controller/releases/download/v0.29.0/helm-controller.crds.yaml - https://github.com/fluxcd/notification-controller/releases/download/v0.31.0/notification-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.24.0/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.25.0/image-reflector-controller.crds.yaml - https://github.com/fluxcd/image-automation-controller/releases/download/v0.29.0/image-automation-controller.crds.yaml diff --git a/pkg/uninstall/uninstall.go b/pkg/uninstall/uninstall.go index 0ec48176..ce32328b 100644 --- a/pkg/uninstall/uninstall.go +++ b/pkg/uninstall/uninstall.go @@ -32,7 +32,7 @@ import ( "github.com/fluxcd/flux2/pkg/manifestgen" helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" autov1 "github.com/fluxcd/image-automation-controller/api/v1beta1" - imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta1" + imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta2" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" diff --git a/tests/azure/azure_test.go b/tests/azure/azure_test.go index 30fde85a..5a20e94a 100644 --- a/tests/azure/azure_test.go +++ b/tests/azure/azure_test.go @@ -31,7 +31,7 @@ import ( "time" eventhub "github.com/Azure/azure-event-hubs-go/v3" - "github.com/hashicorp/hc-install" + install "github.com/hashicorp/hc-install" "github.com/hashicorp/hc-install/fs" "github.com/hashicorp/hc-install/product" "github.com/hashicorp/hc-install/src" @@ -50,7 +50,7 @@ import ( extgogit "github.com/fluxcd/go-git/v5" "github.com/fluxcd/go-git/v5/plumbing" automationv1beta1 "github.com/fluxcd/image-automation-controller/api/v1beta1" - reflectorv1beta1 "github.com/fluxcd/image-reflector-controller/api/v1beta1" + reflectorv1beta2 "github.com/fluxcd/image-reflector-controller/api/v1beta2" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" notiv1beta1 "github.com/fluxcd/notification-controller/api/v1beta2" eventv1 "github.com/fluxcd/pkg/apis/event/v1beta1" @@ -441,14 +441,14 @@ func TestImageRepositoryACR(t *testing.T) { return nil }) require.NoError(t, err) - imageRepository := reflectorv1beta1.ImageRepository{ + imageRepository := reflectorv1beta2.ImageRepository{ ObjectMeta: metav1.ObjectMeta{ Name: "podinfo", Namespace: name, }, } _, err = controllerutil.CreateOrUpdate(ctx, cfg.kubeClient, &imageRepository, func() error { - imageRepository.Spec = reflectorv1beta1.ImageRepositorySpec{ + imageRepository.Spec = reflectorv1beta2.ImageRepositorySpec{ Image: fmt.Sprintf("%s/container/podinfo", cfg.acr.url), Interval: metav1.Duration{ Duration: 1 * time.Minute, @@ -460,19 +460,19 @@ func TestImageRepositoryACR(t *testing.T) { return nil }) require.NoError(t, err) - imagePolicy := reflectorv1beta1.ImagePolicy{ + imagePolicy := reflectorv1beta2.ImagePolicy{ ObjectMeta: metav1.ObjectMeta{ Name: "podinfo", Namespace: name, }, } _, err = controllerutil.CreateOrUpdate(ctx, cfg.kubeClient, &imagePolicy, func() error { - imagePolicy.Spec = reflectorv1beta1.ImagePolicySpec{ + imagePolicy.Spec = reflectorv1beta2.ImagePolicySpec{ ImageRepositoryRef: meta.NamespacedObjectReference{ Name: imageRepository.Name, }, - Policy: reflectorv1beta1.ImagePolicyChoice{ - SemVer: &reflectorv1beta1.SemVerPolicy{ + Policy: reflectorv1beta2.ImagePolicyChoice{ + SemVer: &reflectorv1beta2.SemVerPolicy{ Range: "1.0.x", }, }, diff --git a/tests/azure/go.mod b/tests/azure/go.mod index f12fc094..88f0fa44 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -7,7 +7,7 @@ require ( github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 github.com/fluxcd/helm-controller/api v0.28.1 github.com/fluxcd/image-automation-controller/api v0.28.0 - github.com/fluxcd/image-reflector-controller/api v0.23.1 + github.com/fluxcd/image-reflector-controller/api v0.25.0 github.com/fluxcd/kustomize-controller/api v0.32.0 github.com/fluxcd/notification-controller/api v0.30.2 github.com/fluxcd/pkg/apis/event v0.3.0 @@ -24,7 +24,7 @@ require ( k8s.io/api v0.26.1 k8s.io/apimachinery v0.26.1 k8s.io/client-go v0.26.1 - sigs.k8s.io/controller-runtime v0.14.2 + sigs.k8s.io/controller-runtime v0.14.4 ) // Fix CVE-2022-32149 diff --git a/tests/azure/go.sum b/tests/azure/go.sum index c6767602..a83bc3a9 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -132,8 +132,8 @@ github.com/fluxcd/helm-controller/api v0.28.1 h1:2qjZymRAbl/OqId2lpKCzuleKhId34X github.com/fluxcd/helm-controller/api v0.28.1/go.mod h1:/qCtlP718rveiAL7Mova4fGAk0aZv2qyYQn87zcUNhs= github.com/fluxcd/image-automation-controller/api v0.28.0 h1:BYiOP28h/QRuZTZixlmMJ3RnQw+FGAn54nVsoUjNXi8= github.com/fluxcd/image-automation-controller/api v0.28.0/go.mod h1:ztBI5X/dEzZuJOf7igqnx6ZvrSGtrXLmCvP5ieb3fWc= -github.com/fluxcd/image-reflector-controller/api v0.23.1 h1:ysYzSDhFV5JPzrhTnyabbjFne6GyXsH3Sk/Kd58+Rwk= -github.com/fluxcd/image-reflector-controller/api v0.23.1/go.mod h1:uomyKK0ZWFOsG40wqmCJvIN8OpAiPKFteXe+cdhB/Z0= +github.com/fluxcd/image-reflector-controller/api v0.25.0 h1:tK0Hc7Xxr5z6wtBvLTX/cEwjt9YZdidwQ6JQRZuni3w= +github.com/fluxcd/image-reflector-controller/api v0.25.0/go.mod h1:VXMXfQ5nLZtP+VKuqxYlQOyJ5aFjvC8YpFp1fSwcEAQ= github.com/fluxcd/kustomize-controller/api v0.32.0 h1:5QGLV5xRI8S3tUFJNV+vVzy/pdl0d6Ua0AccWwGRKfs= github.com/fluxcd/kustomize-controller/api v0.32.0/go.mod h1:t2pqIe1SMzdZIAG/aietrg3XpRXmpcubf0uxDJOryEA= github.com/fluxcd/notification-controller/api v0.30.2 h1:IOxRm/ALdKTk6Xwwc3Tpsfybze3/zVruaI3GN6F+KrA= @@ -739,8 +739,8 @@ k8s.io/utils v0.0.0-20221128185143-99ec85e7a448/go.mod h1:OLgZIPagt7ERELqWJFomSt rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/controller-runtime v0.14.2 h1:P6IwDhbsRWsBClt/8/h8Zy36bCuGuW5Op7MHpFrN/60= -sigs.k8s.io/controller-runtime v0.14.2/go.mod h1:WqIdsAY6JBsjfc/CqO0CORmNtoCtE4S6qbPc9s68h+0= +sigs.k8s.io/controller-runtime v0.14.4 h1:Kd/Qgx5pd2XUL08eOV2vwIq3L9GhIbJ5Nxengbd4/0M= +sigs.k8s.io/controller-runtime v0.14.4/go.mod h1:WqIdsAY6JBsjfc/CqO0CORmNtoCtE4S6qbPc9s68h+0= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= diff --git a/tests/azure/util_test.go b/tests/azure/util_test.go index f06cfccd..f2e8cc31 100644 --- a/tests/azure/util_test.go +++ b/tests/azure/util_test.go @@ -42,7 +42,7 @@ import ( "github.com/fluxcd/go-git/v5/plumbing/transport/http" helmv2beta1 "github.com/fluxcd/helm-controller/api/v2beta1" automationv1beta1 "github.com/fluxcd/image-automation-controller/api/v1beta1" - reflectorv1beta1 "github.com/fluxcd/image-reflector-controller/api/v1beta1" + reflectorv1beta2 "github.com/fluxcd/image-reflector-controller/api/v1beta2" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" notiv1beta1 "github.com/fluxcd/notification-controller/api/v1beta2" "github.com/fluxcd/pkg/apis/meta" @@ -83,7 +83,7 @@ func getKubernetesCredentials(kubeconfig, aksHost, aksCert, aksKey, aksCa string if err != nil { return "", nil, err } - err = reflectorv1beta1.AddToScheme(scheme.Scheme) + err = reflectorv1beta2.AddToScheme(scheme.Scheme) if err != nil { return "", nil, err } diff --git a/tests/image-automation/auto.yaml b/tests/image-automation/auto.yaml index 321012c0..8f71c881 100644 --- a/tests/image-automation/auto.yaml +++ b/tests/image-automation/auto.yaml @@ -1,4 +1,4 @@ -apiVersion: image.toolkit.fluxcd.io/v1beta1 +apiVersion: image.toolkit.fluxcd.io/v1beta2 kind: ImageRepository metadata: name: podinfo @@ -7,7 +7,7 @@ spec: image: ghcr.io/stefanprodan/podinfo interval: 1m0s --- -apiVersion: image.toolkit.fluxcd.io/v1beta1 +apiVersion: image.toolkit.fluxcd.io/v1beta2 kind: ImagePolicy metadata: name: podinfo From 65055c273f7c62ed843e2421a6354c365ca0b2cb Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Tue, 7 Feb 2023 13:59:29 +0200 Subject: [PATCH 392/818] rbac: Add view and edit aggregated cluster roles Signed-off-by: Stefan Prodan --- .../bases/helm-controller/kustomization.yaml | 2 +- .../kustomization.yaml | 2 +- .../kustomization.yaml | 2 +- .../kustomize-controller/kustomization.yaml | 2 +- .../kustomization.yaml | 2 +- .../source-controller/kustomization.yaml | 2 +- manifests/rbac/edit.yaml | 21 +++++++++++++++++++ manifests/rbac/kustomization.yaml | 2 ++ manifests/rbac/view.yaml | 20 ++++++++++++++++++ 9 files changed, 49 insertions(+), 6 deletions(-) create mode 100644 manifests/rbac/edit.yaml create mode 100644 manifests/rbac/view.yaml diff --git a/manifests/bases/helm-controller/kustomization.yaml b/manifests/bases/helm-controller/kustomization.yaml index 0bae8162..1e92cadf 100644 --- a/manifests/bases/helm-controller/kustomization.yaml +++ b/manifests/bases/helm-controller/kustomization.yaml @@ -6,7 +6,7 @@ resources: - account.yaml transformers: - labels.yaml -patchesJson6902: +patches: - target: group: apps version: v1 diff --git a/manifests/bases/image-automation-controller/kustomization.yaml b/manifests/bases/image-automation-controller/kustomization.yaml index 85b54b7a..f8c783ec 100644 --- a/manifests/bases/image-automation-controller/kustomization.yaml +++ b/manifests/bases/image-automation-controller/kustomization.yaml @@ -6,7 +6,7 @@ resources: - account.yaml transformers: - labels.yaml -patchesJson6902: +patches: - target: group: apps version: v1 diff --git a/manifests/bases/image-reflector-controller/kustomization.yaml b/manifests/bases/image-reflector-controller/kustomization.yaml index a854e6b5..77c8b17b 100644 --- a/manifests/bases/image-reflector-controller/kustomization.yaml +++ b/manifests/bases/image-reflector-controller/kustomization.yaml @@ -6,7 +6,7 @@ resources: - account.yaml transformers: - labels.yaml -patchesJson6902: +patches: - target: group: apps version: v1 diff --git a/manifests/bases/kustomize-controller/kustomization.yaml b/manifests/bases/kustomize-controller/kustomization.yaml index 494234ca..e0e4157b 100644 --- a/manifests/bases/kustomize-controller/kustomization.yaml +++ b/manifests/bases/kustomize-controller/kustomization.yaml @@ -6,7 +6,7 @@ resources: - account.yaml transformers: - labels.yaml -patchesJson6902: +patches: - target: group: apps version: v1 diff --git a/manifests/bases/notification-controller/kustomization.yaml b/manifests/bases/notification-controller/kustomization.yaml index 9f9eb6f7..bdee75e5 100644 --- a/manifests/bases/notification-controller/kustomization.yaml +++ b/manifests/bases/notification-controller/kustomization.yaml @@ -6,7 +6,7 @@ resources: - account.yaml transformers: - labels.yaml -patchesJson6902: +patches: - target: group: apps version: v1 diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index c0b6af2c..7d5bf73b 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -6,7 +6,7 @@ resources: - account.yaml transformers: - labels.yaml -patchesJson6902: +patches: - target: group: apps version: v1 diff --git a/manifests/rbac/edit.yaml b/manifests/rbac/edit.yaml new file mode 100644 index 00000000..34569105 --- /dev/null +++ b/manifests/rbac/edit.yaml @@ -0,0 +1,21 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: flux-edit + labels: + rbac.authorization.k8s.io/aggregate-to-edit: "true" + rbac.authorization.k8s.io/aggregate-to-admin: "true" +rules: + - apiGroups: + - notification.toolkit.fluxcd.io + - source.toolkit.fluxcd.io + - helm.toolkit.fluxcd.io + - image.toolkit.fluxcd.io + - kustomize.toolkit.fluxcd.io + resources: ["*"] + verbs: + - create + - delete + - deletecollection + - patch + - update diff --git a/manifests/rbac/kustomization.yaml b/manifests/rbac/kustomization.yaml index 6a1d4a69..cd0afef0 100644 --- a/manifests/rbac/kustomization.yaml +++ b/manifests/rbac/kustomization.yaml @@ -3,3 +3,5 @@ kind: Kustomization resources: - controller.yaml - reconciler.yaml + - edit.yaml + - view.yaml diff --git a/manifests/rbac/view.yaml b/manifests/rbac/view.yaml new file mode 100644 index 00000000..f0caf5be --- /dev/null +++ b/manifests/rbac/view.yaml @@ -0,0 +1,20 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: flux-view + labels: + rbac.authorization.k8s.io/aggregate-to-admin: "true" + rbac.authorization.k8s.io/aggregate-to-edit: "true" + rbac.authorization.k8s.io/aggregate-to-view: "true" +rules: + - apiGroups: + - notification.toolkit.fluxcd.io + - source.toolkit.fluxcd.io + - helm.toolkit.fluxcd.io + - image.toolkit.fluxcd.io + - kustomize.toolkit.fluxcd.io + resources: ["*"] + verbs: + - get + - list + - watch From 873950dc5528fb6e477b4c93620b94abefb8545b Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Fri, 17 Feb 2023 12:01:07 +0200 Subject: [PATCH 393/818] ci: Fix Snyk Go build VCS stamping error Signed-off-by: Stefan Prodan --- .github/workflows/scan.yaml | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index e8bacb75..e2b95886 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -34,16 +34,21 @@ jobs: - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c - name: Setup Kustomize uses: fluxcd/pkg//actions/kustomize@main - - name: Build manifests + - name: Setup Go + uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 + with: + go-version: 1.19.x + - name: Download modules and build manifests run: | + make tidy make cmd/flux/.manifests.done - - name: Run Snyk to check for vulnerabilities - uses: snyk/actions/golang@806182742461562b67788a64410098c9d9b96adb # v0.3.0 + - uses: snyk/actions/setup@806182742461562b67788a64410098c9d9b96adb + - name: Run Snyk to check for vulnerabilities continue-on-error: true + run: | + snyk test --sarif-file-output=snyk.sarif env: SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }} - with: - args: --sarif-file-output=snyk.sarif - name: Upload result to GitHub Code Scanning uses: github/codeql-action/upload-sarif@17573ee1cc1b9d061760f3a006fc4aac4f944fd5 # v2 with: From d56844010fe4d87ca3d3f33e9bb89b0318298d86 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Fri, 17 Feb 2023 10:57:41 +0100 Subject: [PATCH 394/818] Update source-controller to v0.35.1 Signed-off-by: Hidde Beydals --- go.mod | 2 +- go.sum | 4 ++-- manifests/bases/source-controller/kustomization.yaml | 4 ++-- manifests/crds/kustomization.yaml | 2 +- tests/azure/go.mod | 2 +- tests/azure/go.sum | 4 ++-- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/go.mod b/go.mod index c64240e3..ba3285f1 100644 --- a/go.mod +++ b/go.mod @@ -25,7 +25,7 @@ require ( github.com/fluxcd/pkg/ssh v0.7.0 github.com/fluxcd/pkg/untar v0.2.0 github.com/fluxcd/pkg/version v0.2.0 - github.com/fluxcd/source-controller/api v0.34.0 + github.com/fluxcd/source-controller/api v0.35.1 github.com/gonvenience/bunt v1.3.4 github.com/gonvenience/ytbx v1.4.4 github.com/google/go-cmp v0.5.9 diff --git a/go.sum b/go.sum index aa65c0e3..50f9dfed 100644 --- a/go.sum +++ b/go.sum @@ -238,8 +238,8 @@ github.com/fluxcd/pkg/untar v0.2.0 h1:sJXU+FbJcNUb2ffLJNjeR3hwt3X2loVpOMlCUjyFw6 github.com/fluxcd/pkg/untar v0.2.0/go.mod h1:33AyoWaPpjX/xXpczcfhQh2AkB63TFwiR2YwROtv23E= github.com/fluxcd/pkg/version v0.2.0 h1:jG22c59Bsv6vL51N7Bqn8tjHArYOXrjbIkGArlIrv5w= github.com/fluxcd/pkg/version v0.2.0/go.mod h1:umN1VAOV0sB1JDVwb8eXZzuuqIAEku+y+vcCVBBUIf0= -github.com/fluxcd/source-controller/api v0.34.0 h1:M2kD95IdpmHcDNy78K6T6p7niC38LGwSrKq8XAZEJY0= -github.com/fluxcd/source-controller/api v0.34.0/go.mod h1:w3PDdR+FZyq3zyyUDxz6vY3CKByZfYAjkzJUxuUXCuc= +github.com/fluxcd/source-controller/api v0.35.1 h1:IHlbN7giz5kY4z9oWZ9QLNKtHAaxHdk9RbIurUPS1aI= +github.com/fluxcd/source-controller/api v0.35.1/go.mod h1:TImPMy/MEwNpDu6qHsw9LlCznXaB8bSO8mnxBSFsX4Q= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index 7d5bf73b..551c85bf 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.34.0/source-controller.crds.yaml -- https://github.com/fluxcd/source-controller/releases/download/v0.34.0/source-controller.deployment.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.35.1/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.35.1/source-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index d0ef5470..28cdb7cc 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -1,7 +1,7 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.34.0/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.35.1/source-controller.crds.yaml - https://github.com/fluxcd/kustomize-controller/releases/download/v0.33.0/kustomize-controller.crds.yaml - https://github.com/fluxcd/helm-controller/releases/download/v0.29.0/helm-controller.crds.yaml - https://github.com/fluxcd/notification-controller/releases/download/v0.31.0/notification-controller.crds.yaml diff --git a/tests/azure/go.mod b/tests/azure/go.mod index 88f0fa44..22b2c8c4 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -14,7 +14,7 @@ require ( github.com/fluxcd/pkg/apis/meta v0.19.0 github.com/fluxcd/pkg/git v0.8.0 github.com/fluxcd/pkg/git/gogit v0.5.0 - github.com/fluxcd/source-controller/api v0.33.0 + github.com/fluxcd/source-controller/api v0.35.1 github.com/hashicorp/hc-install v0.4.0 github.com/hashicorp/terraform-exec v0.17.3 github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 diff --git a/tests/azure/go.sum b/tests/azure/go.sum index a83bc3a9..1cb6b7c3 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -155,8 +155,8 @@ github.com/fluxcd/pkg/ssh v0.7.0 h1:FX5ky8SU9dYwbM6zEIDR3TSveLF01iyS95CtB5Ykpno= github.com/fluxcd/pkg/ssh v0.7.0/go.mod h1:tCVZJI8jPOL0XCInJOrYGKapWA/zZCzqPtpiYUSQxww= github.com/fluxcd/pkg/version v0.2.0 h1:jG22c59Bsv6vL51N7Bqn8tjHArYOXrjbIkGArlIrv5w= github.com/fluxcd/pkg/version v0.2.0/go.mod h1:umN1VAOV0sB1JDVwb8eXZzuuqIAEku+y+vcCVBBUIf0= -github.com/fluxcd/source-controller/api v0.33.0 h1:NZYU3+MNf9puyrTbBa7AJbBDlN7tmt0uw8lyye++5fE= -github.com/fluxcd/source-controller/api v0.33.0/go.mod h1:+DiGND4WSNdGkS7loPUroSarif6dHU4VlVgtLMRKCR8= +github.com/fluxcd/source-controller/api v0.35.1 h1:IHlbN7giz5kY4z9oWZ9QLNKtHAaxHdk9RbIurUPS1aI= +github.com/fluxcd/source-controller/api v0.35.1/go.mod h1:TImPMy/MEwNpDu6qHsw9LlCznXaB8bSO8mnxBSFsX4Q= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= From 7f99655a2b7e5f24372d1b7e114db69f59950fac Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Fri, 17 Feb 2023 11:11:30 +0100 Subject: [PATCH 395/818] Update golden files with RFC-0005 revision formats Signed-off-by: Hidde Beydals --- cmd/flux/testdata/helmrelease/create_source_git.golden | 2 +- .../helmrelease/reconcile_helmrelease_from_git.golden | 2 +- .../kustomization/create_kustomization_from_git.golden | 2 +- .../testdata/kustomization/create_source_git.golden | 2 +- .../kustomization/get_kustomization_from_git.golden | 4 ++-- .../reconcile_kustomization_from_git.golden | 4 ++-- .../kustomization/resume_kustomization_from_git.golden | 2 +- cmd/flux/testdata/oci/create_source_oci.golden | 2 +- cmd/flux/testdata/oci/get_oci.golden | 4 ++-- cmd/flux/testdata/oci/reconcile_oci.golden | 2 +- cmd/flux/testdata/oci/resume_oci.golden | 2 +- cmd/flux/testdata/trace/deployment.golden | 4 ++-- cmd/flux/testdata/trace/deployment.yaml | 6 +++--- cmd/flux/testdata/trace/helmrelease-oci.golden | 10 +++++----- cmd/flux/testdata/trace/helmrelease-oci.yaml | 10 +++++----- cmd/flux/testdata/trace/helmrelease.golden | 8 ++++---- cmd/flux/testdata/trace/helmrelease.yaml | 8 ++++---- cmd/flux/testdata/tree/kustomizations.yaml | 6 +++--- 18 files changed, 40 insertions(+), 40 deletions(-) diff --git a/cmd/flux/testdata/helmrelease/create_source_git.golden b/cmd/flux/testdata/helmrelease/create_source_git.golden index e7db754b..61d4d7c8 100644 --- a/cmd/flux/testdata/helmrelease/create_source_git.golden +++ b/cmd/flux/testdata/helmrelease/create_source_git.golden @@ -3,4 +3,4 @@ ✔ GitRepository source created ◎ waiting for GitRepository source reconciliation ✔ GitRepository source reconciliation completed -✔ fetched revision: 6.0.0/627d5c4bb67b77185f37e31d734b085019ff2951 +✔ fetched revision: 6.0.0@sha1:627d5c4bb67b77185f37e31d734b085019ff2951 diff --git a/cmd/flux/testdata/helmrelease/reconcile_helmrelease_from_git.golden b/cmd/flux/testdata/helmrelease/reconcile_helmrelease_from_git.golden index a1cf24b4..968c220b 100644 --- a/cmd/flux/testdata/helmrelease/reconcile_helmrelease_from_git.golden +++ b/cmd/flux/testdata/helmrelease/reconcile_helmrelease_from_git.golden @@ -1,7 +1,7 @@ ► annotating GitRepository thrfg in {{ .ns }} namespace ✔ GitRepository annotated ◎ waiting for GitRepository reconciliation -✔ fetched revision 6.0.0/627d5c4bb67b77185f37e31d734b085019ff2951 +✔ fetched revision 6.0.0@sha1:627d5c4bb67b77185f37e31d734b085019ff2951 ► annotating HelmRelease thrfg in {{ .ns }} namespace ✔ HelmRelease annotated ◎ waiting for HelmRelease reconciliation diff --git a/cmd/flux/testdata/kustomization/create_kustomization_from_git.golden b/cmd/flux/testdata/kustomization/create_kustomization_from_git.golden index 82fa5938..814b8802 100644 --- a/cmd/flux/testdata/kustomization/create_kustomization_from_git.golden +++ b/cmd/flux/testdata/kustomization/create_kustomization_from_git.golden @@ -3,4 +3,4 @@ ✔ Kustomization created ◎ waiting for Kustomization reconciliation ✔ Kustomization tkfg is ready -✔ applied revision 6.0.0/627d5c4bb67b77185f37e31d734b085019ff2951 +✔ applied revision 6.0.0@sha1:627d5c4bb67b77185f37e31d734b085019ff2951 diff --git a/cmd/flux/testdata/kustomization/create_source_git.golden b/cmd/flux/testdata/kustomization/create_source_git.golden index e7db754b..61d4d7c8 100644 --- a/cmd/flux/testdata/kustomization/create_source_git.golden +++ b/cmd/flux/testdata/kustomization/create_source_git.golden @@ -3,4 +3,4 @@ ✔ GitRepository source created ◎ waiting for GitRepository source reconciliation ✔ GitRepository source reconciliation completed -✔ fetched revision: 6.0.0/627d5c4bb67b77185f37e31d734b085019ff2951 +✔ fetched revision: 6.0.0@sha1:627d5c4bb67b77185f37e31d734b085019ff2951 diff --git a/cmd/flux/testdata/kustomization/get_kustomization_from_git.golden b/cmd/flux/testdata/kustomization/get_kustomization_from_git.golden index 8aa32cc6..55d327c2 100644 --- a/cmd/flux/testdata/kustomization/get_kustomization_from_git.golden +++ b/cmd/flux/testdata/kustomization/get_kustomization_from_git.golden @@ -1,2 +1,2 @@ -NAME REVISION SUSPENDED READY MESSAGE -tkfg 6.0.0/627d5c4b False True Applied revision: 6.0.0/627d5c4b +NAME REVISION SUSPENDED READY MESSAGE +tkfg 6.0.0@sha1:627d5c4b False True Applied revision: 6.0.0@sha1:627d5c4b diff --git a/cmd/flux/testdata/kustomization/reconcile_kustomization_from_git.golden b/cmd/flux/testdata/kustomization/reconcile_kustomization_from_git.golden index e87dc391..41cbb716 100644 --- a/cmd/flux/testdata/kustomization/reconcile_kustomization_from_git.golden +++ b/cmd/flux/testdata/kustomization/reconcile_kustomization_from_git.golden @@ -1,8 +1,8 @@ ► annotating GitRepository tkfg in {{ .ns }} namespace ✔ GitRepository annotated ◎ waiting for GitRepository reconciliation -✔ fetched revision 6.0.0/627d5c4bb67b77185f37e31d734b085019ff2951 +✔ fetched revision 6.0.0@sha1:627d5c4bb67b77185f37e31d734b085019ff2951 ► annotating Kustomization tkfg in {{ .ns }} namespace ✔ Kustomization annotated ◎ waiting for Kustomization reconciliation -✔ applied revision 6.0.0/627d5c4bb67b77185f37e31d734b085019ff2951 +✔ applied revision 6.0.0@sha1:627d5c4bb67b77185f37e31d734b085019ff2951 diff --git a/cmd/flux/testdata/kustomization/resume_kustomization_from_git.golden b/cmd/flux/testdata/kustomization/resume_kustomization_from_git.golden index a59e904d..c9a4b67f 100644 --- a/cmd/flux/testdata/kustomization/resume_kustomization_from_git.golden +++ b/cmd/flux/testdata/kustomization/resume_kustomization_from_git.golden @@ -2,4 +2,4 @@ ✔ kustomization resumed ◎ waiting for Kustomization reconciliation ✔ Kustomization reconciliation completed -✔ applied revision 6.0.0/627d5c4bb67b77185f37e31d734b085019ff2951 +✔ applied revision 6.0.0@sha1:627d5c4bb67b77185f37e31d734b085019ff2951 diff --git a/cmd/flux/testdata/oci/create_source_oci.golden b/cmd/flux/testdata/oci/create_source_oci.golden index b2c2d3a3..f7e8afa2 100644 --- a/cmd/flux/testdata/oci/create_source_oci.golden +++ b/cmd/flux/testdata/oci/create_source_oci.golden @@ -2,4 +2,4 @@ ✔ OCIRepository created ◎ waiting for OCIRepository reconciliation ✔ OCIRepository reconciliation completed -✔ fetched revision: 6.1.6/dbdb109711ffb3be77504d2670dbe13c24dd63d8d7f1fb489d350e5bfe930dd3 +✔ fetched revision: 6.1.6@sha256:dbdb109711ffb3be77504d2670dbe13c24dd63d8d7f1fb489d350e5bfe930dd3 diff --git a/cmd/flux/testdata/oci/get_oci.golden b/cmd/flux/testdata/oci/get_oci.golden index 153ebd0d..ecd3a5b2 100644 --- a/cmd/flux/testdata/oci/get_oci.golden +++ b/cmd/flux/testdata/oci/get_oci.golden @@ -1,2 +1,2 @@ -NAME REVISION SUSPENDED READY MESSAGE -thrfg 6.1.6/dbdb1097 False True stored artifact for digest '6.1.6/dbdb1097' +NAME REVISION SUSPENDED READY MESSAGE +thrfg 6.1.6@sha256:dbdb1097 False True stored artifact for digest '6.1.6@sha256:dbdb1097' diff --git a/cmd/flux/testdata/oci/reconcile_oci.golden b/cmd/flux/testdata/oci/reconcile_oci.golden index 6f095770..c1501f87 100644 --- a/cmd/flux/testdata/oci/reconcile_oci.golden +++ b/cmd/flux/testdata/oci/reconcile_oci.golden @@ -1,4 +1,4 @@ ► annotating OCIRepository thrfg in {{ .ns }} namespace ✔ OCIRepository annotated ◎ waiting for OCIRepository reconciliation -✔ fetched revision 6.1.6/dbdb109711ffb3be77504d2670dbe13c24dd63d8d7f1fb489d350e5bfe930dd3 +✔ fetched revision 6.1.6@sha256:dbdb109711ffb3be77504d2670dbe13c24dd63d8d7f1fb489d350e5bfe930dd3 diff --git a/cmd/flux/testdata/oci/resume_oci.golden b/cmd/flux/testdata/oci/resume_oci.golden index 4b022bad..fe6531d7 100644 --- a/cmd/flux/testdata/oci/resume_oci.golden +++ b/cmd/flux/testdata/oci/resume_oci.golden @@ -2,4 +2,4 @@ ✔ source oci resumed ◎ waiting for OCIRepository reconciliation ✔ OCIRepository reconciliation completed -✔ fetched revision 6.1.6/dbdb109711ffb3be77504d2670dbe13c24dd63d8d7f1fb489d350e5bfe930dd3 +✔ fetched revision 6.1.6@sha256:dbdb109711ffb3be77504d2670dbe13c24dd63d8d7f1fb489d350e5bfe930dd3 diff --git a/cmd/flux/testdata/trace/deployment.golden b/cmd/flux/testdata/trace/deployment.golden index d02e8a56..b567388a 100644 --- a/cmd/flux/testdata/trace/deployment.golden +++ b/cmd/flux/testdata/trace/deployment.golden @@ -20,6 +20,6 @@ Message: Fetched revision: 6.0.0 HelmRepository: podinfo Namespace: {{ .fluxns }} URL: https://stefanprodan.github.io/podinfo -Revision: 8411f23d07d3701f0e96e7d9e503b7936d7e1d56 +Revision: sha1:8411f23d07d3701f0e96e7d9e503b7936d7e1d56 Status: Last reconciled at {{ .helmRepositoryLastReconcile }} -Message: Fetched revision: 8411f23d07d3701f0e96e7d9e503b7936d7e1d56 +Message: Fetched revision: main@sha1:8411f23d07d3701f0e96e7d9e503b7936d7e1d56 diff --git a/cmd/flux/testdata/trace/deployment.yaml b/cmd/flux/testdata/trace/deployment.yaml index 4ea81141..11d947ce 100644 --- a/cmd/flux/testdata/trace/deployment.yaml +++ b/cmd/flux/testdata/trace/deployment.yaml @@ -106,12 +106,12 @@ status: artifact: checksum: 8411f23d07d3701f0e96e7d9e503b7936d7e1d56 lastUpdateTime: "2021-07-11T00:25:46Z" - revision: 8411f23d07d3701f0e96e7d9e503b7936d7e1d56 + revision: sha1:8411f23d07d3701f0e96e7d9e503b7936d7e1d56 path: "example" url: "example" conditions: - lastTransitionTime: "2021-07-11T00:25:46Z" - message: 'Fetched revision: 8411f23d07d3701f0e96e7d9e503b7936d7e1d56' + message: 'Fetched revision: main@sha1:8411f23d07d3701f0e96e7d9e503b7936d7e1d56' reason: IndexationSucceed status: "True" type: Ready @@ -132,7 +132,7 @@ spec: status: conditions: - lastTransitionTime: "2021-08-01T04:52:56Z" - message: 'Applied revision: main/696f056df216eea4f9401adbee0ff744d4df390f' + message: 'Applied revision: main@sha1:696f056df216eea4f9401adbee0ff744d4df390f' reason: ReconciliationSucceeded status: "True" type: Ready diff --git a/cmd/flux/testdata/trace/helmrelease-oci.golden b/cmd/flux/testdata/trace/helmrelease-oci.golden index 768c4616..01b314da 100644 --- a/cmd/flux/testdata/trace/helmrelease-oci.golden +++ b/cmd/flux/testdata/trace/helmrelease-oci.golden @@ -6,16 +6,16 @@ Status: Managed by Flux Kustomization: infrastructure Namespace: {{ .fluxns }} Path: ./infrastructure -Revision: main/696f056df216eea4f9401adbee0ff744d4df390f +Revision: main@sha1:696f056df216eea4f9401adbee0ff744d4df390f Status: Last reconciled at {{ .kustomizationLastReconcile }} -Message: Applied revision: main/696f056df216eea4f9401adbee0ff744d4df390f +Message: Applied revision: main@sha1:696f056df216eea4f9401adbee0ff744d4df390f --- OCIRepository: flux-system Namespace: {{ .fluxns }} URL: oci://ghcr.io/example/repo Tag: 1.2.3 -Revision: dbdb109711ffb3be77504d2670dbe13c24dd63d8d7f1fb489d350e5bfe930dd3 -Origin Revision: 6.1.6/450796ddb2ab6724ee1cc32a4be56da032d1cca0 +Revision: sha256:dbdb109711ffb3be77504d2670dbe13c24dd63d8d7f1fb489d350e5bfe930dd3 +Origin Revision: 6.1.6@sha1:450796ddb2ab6724ee1cc32a4be56da032d1cca0 Origin Source: https://github.com/stefanprodan/podinfo.git Status: Last reconciled at {{ .ociRepositoryLastReconcile }} -Message: stored artifact for digest 'dbdb109711ffb3be77504d2670dbe13c24dd63d8d7f1fb489d350e5bfe930dd3' +Message: stored artifact for digest 'sha256:dbdb109711ffb3be77504d2670dbe13c24dd63d8d7f1fb489d350e5bfe930dd3' diff --git a/cmd/flux/testdata/trace/helmrelease-oci.yaml b/cmd/flux/testdata/trace/helmrelease-oci.yaml index 7c3fa2da..bc2f5fef 100644 --- a/cmd/flux/testdata/trace/helmrelease-oci.yaml +++ b/cmd/flux/testdata/trace/helmrelease-oci.yaml @@ -54,11 +54,11 @@ spec: status: conditions: - lastTransitionTime: "2021-08-01T04:52:56Z" - message: 'Applied revision: main/696f056df216eea4f9401adbee0ff744d4df390f' + message: 'Applied revision: main@sha1:696f056df216eea4f9401adbee0ff744d4df390f' reason: ReconciliationSucceeded status: "True" type: Ready - lastAppliedRevision: main/696f056df216eea4f9401adbee0ff744d4df390f + lastAppliedRevision: main@sha1:696f056df216eea4f9401adbee0ff744d4df390f --- apiVersion: source.toolkit.fluxcd.io/v1beta2 kind: OCIRepository @@ -79,14 +79,14 @@ status: artifact: lastUpdateTime: "2022-08-10T10:07:59Z" metadata: - org.opencontainers.image.revision: 6.1.6/450796ddb2ab6724ee1cc32a4be56da032d1cca0 + org.opencontainers.image.revision: 6.1.6@sha1:450796ddb2ab6724ee1cc32a4be56da032d1cca0 org.opencontainers.image.source: https://github.com/stefanprodan/podinfo.git path: "example" - revision: dbdb109711ffb3be77504d2670dbe13c24dd63d8d7f1fb489d350e5bfe930dd3 + revision: sha256:dbdb109711ffb3be77504d2670dbe13c24dd63d8d7f1fb489d350e5bfe930dd3 url: "example" conditions: - lastTransitionTime: "2021-07-20T00:48:16Z" - message: "stored artifact for digest 'dbdb109711ffb3be77504d2670dbe13c24dd63d8d7f1fb489d350e5bfe930dd3'" + message: "stored artifact for digest 'sha256:dbdb109711ffb3be77504d2670dbe13c24dd63d8d7f1fb489d350e5bfe930dd3'" reason: Succeed status: "True" type: Ready diff --git a/cmd/flux/testdata/trace/helmrelease.golden b/cmd/flux/testdata/trace/helmrelease.golden index 310d2192..384e2181 100644 --- a/cmd/flux/testdata/trace/helmrelease.golden +++ b/cmd/flux/testdata/trace/helmrelease.golden @@ -6,14 +6,14 @@ Status: Managed by Flux Kustomization: infrastructure Namespace: {{ .fluxns }} Path: ./infrastructure -Revision: main/696f056df216eea4f9401adbee0ff744d4df390f +Revision: main@sha1:696f056df216eea4f9401adbee0ff744d4df390f Status: Last reconciled at {{ .kustomizationLastReconcile }} -Message: Applied revision: main/696f056df216eea4f9401adbee0ff744d4df390f +Message: Applied revision: main@sha1:696f056df216eea4f9401adbee0ff744d4df390f --- GitRepository: flux-system Namespace: {{ .fluxns }} URL: ssh://git@github.com/example/repo Branch: main -Revision: main/696f056df216eea4f9401adbee0ff744d4df390f +Revision: main@sha1:696f056df216eea4f9401adbee0ff744d4df390f Status: Last reconciled at {{ .gitRepositoryLastReconcile }} -Message: Fetched revision: main/696f056df216eea4f9401adbee0ff744d4df390f +Message: Fetched revision: main@sha1:696f056df216eea4f9401adbee0ff744d4df390f diff --git a/cmd/flux/testdata/trace/helmrelease.yaml b/cmd/flux/testdata/trace/helmrelease.yaml index 80a8b8f9..a30663b0 100644 --- a/cmd/flux/testdata/trace/helmrelease.yaml +++ b/cmd/flux/testdata/trace/helmrelease.yaml @@ -54,11 +54,11 @@ spec: status: conditions: - lastTransitionTime: "2021-08-01T04:52:56Z" - message: 'Applied revision: main/696f056df216eea4f9401adbee0ff744d4df390f' + message: 'Applied revision: main@sha1:696f056df216eea4f9401adbee0ff744d4df390f' reason: ReconciliationSucceeded status: "True" type: Ready - lastAppliedRevision: main/696f056df216eea4f9401adbee0ff744d4df390f + lastAppliedRevision: main@sha1:696f056df216eea4f9401adbee0ff744d4df390f --- apiVersion: source.toolkit.fluxcd.io/v1beta1 kind: GitRepository @@ -79,12 +79,12 @@ spec: status: artifact: lastUpdateTime: "2021-08-01T04:28:42Z" - revision: main/696f056df216eea4f9401adbee0ff744d4df390f + revision: main@sha1:696f056df216eea4f9401adbee0ff744d4df390f path: "example" url: "example" conditions: - lastTransitionTime: "2021-07-20T00:48:16Z" - message: 'Fetched revision: main/696f056df216eea4f9401adbee0ff744d4df390f' + message: 'Fetched revision: main@sha1:696f056df216eea4f9401adbee0ff744d4df390f' reason: GitOperationSucceed status: "True" type: Ready diff --git a/cmd/flux/testdata/tree/kustomizations.yaml b/cmd/flux/testdata/tree/kustomizations.yaml index 45055da2..3c471b20 100644 --- a/cmd/flux/testdata/tree/kustomizations.yaml +++ b/cmd/flux/testdata/tree/kustomizations.yaml @@ -19,7 +19,7 @@ spec: status: conditions: - lastTransitionTime: "2021-08-01T04:52:56Z" - message: 'Applied revision: main/696f056df216eea4f9401adbee0ff744d4df390f' + message: 'Applied revision: main@sha1:696f056df216eea4f9401adbee0ff744d4df390f' reason: ReconciliationSucceeded status: "True" type: Ready @@ -55,7 +55,7 @@ spec: status: conditions: - lastTransitionTime: "2021-08-01T04:52:56Z" - message: 'Applied revision: main/696f056df216eea4f9401adbee0ff744d4df390f' + message: 'Applied revision: main@sha1:696f056df216eea4f9401adbee0ff744d4df390f' reason: ReconciliationSucceeded status: "True" type: Ready @@ -81,7 +81,7 @@ spec: status: conditions: - lastTransitionTime: "2021-08-01T04:52:56Z" - message: 'Applied revision: main/696f056df216eea4f9401adbee0ff744d4df390f' + message: 'Applied revision: main@sha1:696f056df216eea4f9401adbee0ff744d4df390f' reason: ReconciliationSucceeded status: "True" type: Ready From 71d59e36cc748c8df29034a0c19b494d83ffa485 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Fri, 17 Feb 2023 12:16:30 +0100 Subject: [PATCH 396/818] bootstrap: support legacy revision while polling Signed-off-by: Hidde Beydals --- go.mod | 16 ++++++++-------- go.sum | 28 ++++++++++++++-------------- pkg/bootstrap/bootstrap.go | 3 ++- pkg/bootstrap/bootstrap_plain_git.go | 2 +- 4 files changed, 25 insertions(+), 24 deletions(-) diff --git a/go.mod b/go.mod index ba3285f1..30ba7b5b 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.18 require ( github.com/Masterminds/semver/v3 v3.2.0 - github.com/ProtonMail/go-crypto v0.0.0-20230127202215-f7f10de891d5 + github.com/ProtonMail/go-crypto v0.0.0-20230214155104-81033d7f4442 github.com/cyphar/filepath-securejoin v0.2.3 github.com/distribution/distribution/v3 v3.0.0-20230131081513-cf87e8d07e8d github.com/fluxcd/go-git-providers v0.13.0 @@ -15,7 +15,7 @@ require ( github.com/fluxcd/kustomize-controller/api v0.33.0 github.com/fluxcd/notification-controller/api v0.31.0 github.com/fluxcd/pkg/apis/meta v0.19.0 - github.com/fluxcd/pkg/git v0.8.0 + github.com/fluxcd/pkg/git v0.10.0 github.com/fluxcd/pkg/git/gogit v0.5.0 github.com/fluxcd/pkg/kustomize v0.13.0 github.com/fluxcd/pkg/oci v0.18.0 @@ -40,8 +40,8 @@ require ( github.com/spf13/cobra v1.6.1 github.com/spf13/pflag v1.0.5 github.com/theckman/yacspin v0.13.12 - golang.org/x/crypto v0.5.0 - golang.org/x/term v0.4.0 + golang.org/x/crypto v0.6.0 + golang.org/x/term v0.5.0 k8s.io/api v0.26.1 k8s.io/apiextensions-apiserver v0.26.1 k8s.io/apimachinery v0.26.1 @@ -93,7 +93,7 @@ require ( github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/chai2010/gettext-go v1.0.2 // indirect github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e // indirect - github.com/cloudflare/circl v1.3.1 // indirect + github.com/cloudflare/circl v1.3.2 // indirect github.com/containerd/stargz-snapshotter/estargz v0.12.1 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect @@ -200,11 +200,11 @@ require ( github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f // indirect go.starlark.net v0.0.0-20221028183056-acb66ad56dd2 // indirect golang.org/x/mod v0.7.0 // indirect - golang.org/x/net v0.5.0 // indirect + golang.org/x/net v0.6.0 // indirect golang.org/x/oauth2 v0.2.0 // indirect golang.org/x/sync v0.1.0 // indirect - golang.org/x/sys v0.4.0 // indirect - golang.org/x/text v0.6.0 // indirect + golang.org/x/sys v0.5.0 // indirect + golang.org/x/text v0.7.0 // indirect golang.org/x/time v0.3.0 // indirect golang.org/x/tools v0.4.0 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect diff --git a/go.sum b/go.sum index 50f9dfed..95b1043e 100644 --- a/go.sum +++ b/go.sum @@ -58,8 +58,8 @@ github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2B github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4/go.mod h1:UBYPn8k0D56RtnR8RFQMjmh4KrZzWJ5o7Z9SYjossQ8= -github.com/ProtonMail/go-crypto v0.0.0-20230127202215-f7f10de891d5 h1:Fu4D/i1HBoWql9xVIfW50Kohujz+T3xXPV60JVb3Fao= -github.com/ProtonMail/go-crypto v0.0.0-20230127202215-f7f10de891d5/go.mod h1:I0gYDMZ6Z5GRU7l58bNFSkPTFN6Yl12dsUlAZ8xy98g= +github.com/ProtonMail/go-crypto v0.0.0-20230214155104-81033d7f4442 h1:OUJ54Fkd+AQXYmr9eOUxZfWNzpK3/e/KD40qa2rKHS4= +github.com/ProtonMail/go-crypto v0.0.0-20230214155104-81033d7f4442/go.mod h1:I0gYDMZ6Z5GRU7l58bNFSkPTFN6Yl12dsUlAZ8xy98g= github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d h1:UrqY+r/OJnIp5u0s1SbQ8dVfLCZJsnvazdBP5hS4iRs= github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ= github.com/acomagu/bufpipe v1.0.3 h1:fxAGrHZTgQ9w5QqVItgzwj235/uYZYgbXitB+dLupOk= @@ -132,8 +132,8 @@ github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1 h1:q763qf9huN11kDQavWs github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cloudflare/circl v1.1.0/go.mod h1:prBCrKB9DV4poKZY1l9zBXg2QJY7mvgRvtMxxK7fi4I= -github.com/cloudflare/circl v1.3.1 h1:4OVCZRL62ijwEwxnF6I7hLwxvIYi3VaZt8TflkqtrtA= -github.com/cloudflare/circl v1.3.1/go.mod h1:+CauBF6R70Jqcyl8N2hC8pAXYbWkGIezuSbuGLtRhnw= +github.com/cloudflare/circl v1.3.2 h1:VWp8dY3yH69fdM7lM6A1+NhhVoDu9vqK0jOgmkQHFWk= +github.com/cloudflare/circl v1.3.2/go.mod h1:+CauBF6R70Jqcyl8N2hC8pAXYbWkGIezuSbuGLtRhnw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= @@ -215,8 +215,8 @@ github.com/fluxcd/pkg/apis/kustomize v0.8.0 h1:A6aLolxPV2Sll44SOHiX96lbXXmRZmS5B github.com/fluxcd/pkg/apis/kustomize v0.8.0/go.mod h1:9DPEVSfVIkiC2H3Dk6Ght4YJkswhYIaufXla4tB5Y84= github.com/fluxcd/pkg/apis/meta v0.19.0 h1:CX75e/eaRWZDTzNdMSWomY1InlssLKcS8GQDSg/aopI= github.com/fluxcd/pkg/apis/meta v0.19.0/go.mod h1:7b6prDPsViyAzoY7eRfSPS0/MbXpGGsOMvRq2QrTKa4= -github.com/fluxcd/pkg/git v0.8.0 h1:7mIbdqSf+qXwY17+A+Kge2yWIJCMJ1p1DiBDGnKRohg= -github.com/fluxcd/pkg/git v0.8.0/go.mod h1:3deiLPws4DSQ3hqwtQd7Dt66GXTN/4RcT/yHAljXaHo= +github.com/fluxcd/pkg/git v0.10.0 h1:tO04FyUV3kmyJOpAKjMFZWClqr1JNGxS8RxI7znq6is= +github.com/fluxcd/pkg/git v0.10.0/go.mod h1:zn3pJ4mRItezf6J0okHZbZ+3YNAGsjnhrS+Kbo+56Jw= github.com/fluxcd/pkg/git/gogit v0.5.0 h1:3Fzx2W16K/37ZHT6WmLFuRYgs+CGvzka+dwY7ktoxJE= github.com/fluxcd/pkg/git/gogit v0.5.0/go.mod h1:cqoJhKXCmWuN2ezD/2ECUYwR8gR7svMRJoHRr9VyTQc= github.com/fluxcd/pkg/gittestserver v0.8.0 h1:YrYe63KScKlLxx0GAiQthx2XqHDx0vKitIIx4JnDtIo= @@ -653,8 +653,8 @@ golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= -golang.org/x/crypto v0.5.0 h1:U/0M97KRkSFvyD/3FSmdP5W5swImpNgle/EHFhOsQPE= -golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= +golang.org/x/crypto v0.6.0 h1:qfktjS5LUO+fFKeJXZ+ikTRijMmljikvG68fpMMruSc= +golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -728,8 +728,8 @@ golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.5.0 h1:GyT4nK/YDHSqa1c4753ouYCDajOYKTja9Xb/OHtgvSw= -golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= +golang.org/x/net v0.6.0 h1:L4ZwwTvKW9gr0ZMS1yrHD9GZhIuVjOBBnaKH+SPQK0Q= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= 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= @@ -813,15 +813,15 @@ golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18= -golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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= golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.4.0 h1:O7UWfv5+A2qiuulQk30kVinPoMtoIPeVaKLEgLpVkvg= -golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= +golang.org/x/term v0.5.0 h1:n2a8QNdAb0sZNpU9R1ALUXBbY+w51fCQDN+7EdxNBsY= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= diff --git a/pkg/bootstrap/bootstrap.go b/pkg/bootstrap/bootstrap.go index d3b79ed6..e1224d36 100644 --- a/pkg/bootstrap/bootstrap.go +++ b/pkg/bootstrap/bootstrap.go @@ -32,6 +32,7 @@ import ( kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" "github.com/fluxcd/pkg/apis/meta" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" "github.com/fluxcd/flux2/pkg/manifestgen/install" "github.com/fluxcd/flux2/pkg/manifestgen/sourcesecret" @@ -190,7 +191,7 @@ func kustomizationReconciled(ctx context.Context, kube client.Client, objKey cli } // Confirm the given revision has been attempted by the controller - if kustomization.Status.LastAttemptedRevision != expectRevision { + if sourcev1.TransformLegacyRevision(kustomization.Status.LastAttemptedRevision) != expectRevision { return false, nil } diff --git a/pkg/bootstrap/bootstrap_plain_git.go b/pkg/bootstrap/bootstrap_plain_git.go index 4583fe2f..17ec48ec 100644 --- a/pkg/bootstrap/bootstrap_plain_git.go +++ b/pkg/bootstrap/bootstrap_plain_git.go @@ -380,7 +380,7 @@ func (b *PlainGitBootstrapper) ReportKustomizationHealth(ctx context.Context, op b.logger.Waitingf("waiting for Kustomization %q to be reconciled", objKey.String()) - expectRevision := fmt.Sprintf("%s/%s", options.Branch, head) + expectRevision := fmt.Sprintf("%s@%s", options.Branch, git.Hash(head).Digest()) var k kustomizev1.Kustomization if err := wait.PollImmediate(pollInterval, timeout, kustomizationReconciled( ctx, b.kube, objKey, &k, expectRevision), From 0f7b903acee678099dfe68857316912f0bfe1a89 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Fri, 17 Feb 2023 12:26:31 +0100 Subject: [PATCH 397/818] Update `push artifact`'s `--revision` to RFC-0005 Signed-off-by: Hidde Beydals --- .github/workflows/e2e.yaml | 2 +- .github/workflows/release.yaml | 4 ++-- action/README.md | 4 ++-- cmd/flux/push_artifact.go | 16 ++++++++-------- rfcs/0003-kubernetes-oci/README.md | 20 ++++++++++---------- 5 files changed, 23 insertions(+), 23 deletions(-) diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index 940ce55a..593446bb 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -183,7 +183,7 @@ jobs: /tmp/flux push artifact oci://localhost:5000/fluxcd/flux:${{ github.sha }} \ --path="./manifests" \ --source="${{ github.repositoryUrl }}" \ - --revision="${{ github.ref }}/${{ github.sha }}" + --revision="${{ github.ref }}@sha1:${{ github.sha }}" /tmp/flux tag artifact oci://localhost:5000/fluxcd/flux:${{ github.sha }} \ --tag latest /tmp/flux list artifacts oci://localhost:5000/fluxcd/flux diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index cb719637..75cf6205 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -120,7 +120,7 @@ jobs: oci://ghcr.io/fluxcd/flux-manifests:${{ steps.prep.outputs.VERSION }} \ --path="./flux-system" \ --source=${{ github.repositoryUrl }} \ - --revision="${{ github.ref_name }}/${{ github.sha }}" + --revision="${{ github.ref_name }}@sha1:${{ github.sha }}" - name: Push manifests to DockerHub run: | mkdir -p ./docker.io/flux-system @@ -132,7 +132,7 @@ jobs: oci://docker.io/fluxcd/flux-manifests:${{ steps.prep.outputs.VERSION }} \ --path="./flux-system" \ --source=${{ github.repositoryUrl }} \ - --revision="${{ github.ref_name }}/${{ github.sha }}" + --revision="${{ github.ref_name }}@sha1:${{ github.sha }}" - uses: sigstore/cosign-installer@9becc617647dfa20ae7b1151972e9b3a2c338a2b # v2.8.1 - name: Sign manifests env: diff --git a/action/README.md b/action/README.md index 5301c8c1..ba094484 100644 --- a/action/README.md +++ b/action/README.md @@ -132,7 +132,7 @@ jobs: flux push artifact $OCI_REPO:$(git rev-parse --short HEAD) \ --path="./deploy" \ --source="$(git config --get remote.origin.url)" \ - --revision="$(git branch --show-current)/$(git rev-parse HEAD)" + --revision="$(git branch --show-current)@sha1:$(git rev-parse HEAD)" - name: Deploy manifests to staging run: | flux tag artifact $OCI_REPO:$(git rev-parse --short HEAD) --tag staging @@ -180,7 +180,7 @@ jobs: $OCI_REPO:$(git rev-parse --short HEAD) \ --path="./manifests" \ --source="$(git config --get remote.origin.url)" \ - --revision="$(git branch --show-current)/$(git rev-parse HEAD)" |\ + --revision="$(git branch --show-current)@sha1:$(git rev-parse HEAD)" |\ jq -r '. | .repository + "@" + .digest') cosign sign $digest_url diff --git a/cmd/flux/push_artifact.go b/cmd/flux/push_artifact.go index 6664c201..badea6a9 100644 --- a/cmd/flux/push_artifact.go +++ b/cmd/flux/push_artifact.go @@ -41,13 +41,13 @@ The command can read the credentials from '~/.docker/config.json' but they can a flux push artifact oci://ghcr.io/org/config/app:$(git rev-parse --short HEAD) \ --path="./path/to/local/manifests" \ --source="$(git config --get remote.origin.url)" \ - --revision="$(git branch --show-current)/$(git rev-parse HEAD)" + --revision="$(git branch --show-current)@sha1:$(git rev-parse HEAD)" # Push and sign artifact with cosign digest_url = $(flux push artifact \ oci://ghcr.io/org/config/app:$(git rev-parse --short HEAD) \ --source="$(git config --get remote.origin.url)" \ - --revision="$(git branch --show-current)/$(git rev-parse HEAD)" \ + --revision="$(git branch --show-current)@sha1:$(git rev-parse HEAD)" \ --path="./path/to/local/manifest.yaml" \ --output json | \ jq -r '. | .repository + "@" + .digest') @@ -56,21 +56,21 @@ The command can read the credentials from '~/.docker/config.json' but they can a # Push manifests passed into stdin to GHCR kustomize build . | flux push artifact oci://ghcr.io/org/config/app:$(git rev-parse --short HEAD) -p - \ --source="$(git config --get remote.origin.url)" \ - --revision="$(git branch --show-current)/$(git rev-parse HEAD)" + --revision="$(git branch --show-current)@sha1:$(git rev-parse HEAD)" # Push single manifest file to GHCR using the short Git SHA as the OCI artifact tag echo $GITHUB_PAT | docker login ghcr.io --username flux --password-stdin flux push artifact oci://ghcr.io/org/config/app:$(git rev-parse --short HEAD) \ --path="./path/to/local/manifest.yaml" \ --source="$(git config --get remote.origin.url)" \ - --revision="$(git branch --show-current)/$(git rev-parse HEAD)" + --revision="$(git branch --show-current)@sha1:$(git rev-parse HEAD)" # Push manifests to Docker Hub using the Git tag as the OCI artifact tag echo $DOCKER_PAT | docker login --username flux --password-stdin flux push artifact oci://docker.io/org/app-config:$(git tag --points-at HEAD) \ --path="./path/to/local/manifests" \ --source="$(git config --get remote.origin.url)" \ - --revision="$(git tag --points-at HEAD)/$(git rev-parse HEAD)" + --revision="$(git tag --points-at HEAD)@sha1:$(git rev-parse HEAD)" # Login directly to the registry provider # You might need to export the following variable if you use local config files for AWS: @@ -78,14 +78,14 @@ The command can read the credentials from '~/.docker/config.json' but they can a flux push artifact oci://.dkr.ecr..amazonaws.com/foo:v1:$(git tag --points-at HEAD) \ --path="./path/to/local/manifests" \ --source="$(git config --get remote.origin.url)" \ - --revision="$(git tag --points-at HEAD)/$(git rev-parse HEAD)" \ + --revision="$(git tag --points-at HEAD)@sha1:$(git rev-parse HEAD)" \ --provider aws # Or pass credentials directly flux push artifact oci://docker.io/org/app-config:$(git tag --points-at HEAD) \ --path="./path/to/local/manifests" \ --source="$(git config --get remote.origin.url)" \ - --revision="$(git tag --points-at HEAD)/$(git rev-parse HEAD)" \ + --revision="$(git tag --points-at HEAD)@sha1:$(git rev-parse HEAD)" \ --creds flux:$DOCKER_PAT `, RunE: pushArtifactCmdRun, @@ -112,7 +112,7 @@ func newPushArtifactFlags() pushArtifactFlags { func init() { pushArtifactCmd.Flags().StringVar(&pushArtifactArgs.path, "path", "", "path to the directory where the Kubernetes manifests are located") pushArtifactCmd.Flags().StringVar(&pushArtifactArgs.source, "source", "", "the source address, e.g. the Git URL") - pushArtifactCmd.Flags().StringVar(&pushArtifactArgs.revision, "revision", "", "the source revision in the format '/'") + pushArtifactCmd.Flags().StringVar(&pushArtifactArgs.revision, "revision", "", "the source revision in the format '@sha1:'") pushArtifactCmd.Flags().StringVar(&pushArtifactArgs.creds, "creds", "", "credentials for OCI registry in the format [:] if --provider is generic") pushArtifactCmd.Flags().Var(&pushArtifactArgs.provider, "provider", pushArtifactArgs.provider.Description()) pushArtifactCmd.Flags().StringSliceVar(&pushArtifactArgs.ignorePaths, "ignore-paths", excludeOCI, "set paths to ignore in .gitignore format") diff --git a/rfcs/0003-kubernetes-oci/README.md b/rfcs/0003-kubernetes-oci/README.md index 5622a80b..428c34ec 100644 --- a/rfcs/0003-kubernetes-oci/README.md +++ b/rfcs/0003-kubernetes-oci/README.md @@ -47,7 +47,7 @@ and push the archive to a container registry as an OCI artifact. ```sh flux push artifact oci://docker.io/org/app-config:v1.0.0 \ --source="$(git config --get remote.origin.url)" \ - --revision="$(git rev-parse HEAD)" \ + --revision="sha1:$(git rev-parse HEAD)" \ --path="./deploy" ``` @@ -65,7 +65,7 @@ The source and revision are added to the OCI artifact as Open Containers standar "mediaType": "application/vnd.oci.image.manifest.v1+json", "annotations": { "org.opencontainers.image.created": "2023-02-10T09:06:09Z", - "org.opencontainers.image.revision": "6ea3e5b4da159fcb4a1288f072d34c3315644bcc", + "org.opencontainers.image.revision": "sha1:6ea3e5b4da159fcb4a1288f072d34c3315644bcc", "org.opencontainers.image.source": "https://github.com/fluxcd/flux2" } } @@ -288,7 +288,7 @@ Then push the Kubernetes manifests to GHCR: ```sh flux push artifact oci://ghcr.io/org/my-app-config:v1.0.0 \ --source="$(git config --get remote.origin.url)" \ - --revision="$(git rev-parse HEAD)"\ + --revision="sha1:$(git rev-parse HEAD)"\ --path="./deploy" ``` @@ -309,8 +309,8 @@ List the artifacts and their metadata with: ```console $ flux list artifacts oci://ghcr.io/org/my-app-config ARTIFACT DIGEST SOURCE REVISION -ghcr.io/org/my-app-config:latest sha256:45b95019d30af335137977a369ad56e9ea9e9c75bb01afb081a629ba789b890c https://github.com/org/my-app-config.git 20b3a674391df53f05e59a33554973d1cbd4d549 -ghcr.io/org/my-app-config:v1.0.0 sha256:45b95019d30af335137977a369ad56e9ea9e9c75bb01afb081a629ba789b890c https://github.com/org/my-app-config.git 3f45e72f0d3457e91e3c530c346d86969f9f4034 +ghcr.io/org/my-app-config:latest sha256:45b95019d30af335137977a369ad56e9ea9e9c75bb01afb081a629ba789b890c https://github.com/org/my-app-config.git sha1:20b3a674391df53f05e59a33554973d1cbd4d549 +ghcr.io/org/my-app-config:v1.0.0 sha256:45b95019d30af335137977a369ad56e9ea9e9c75bb01afb081a629ba789b890c https://github.com/org/my-app-config.git sha1:3f45e72f0d3457e91e3c530c346d86969f9f4034 ``` #### Story 2 @@ -402,7 +402,7 @@ The Flux CLI will produce OCI artifacts with the following format: ], "annotations": { "org.opencontainers.image.created": "2023-02-10T09:06:09Z", - "org.opencontainers.image.revision": "6ea3e5b4da159fcb4a1288f072d34c3315644bcc", + "org.opencontainers.image.revision": "sha1:6ea3e5b4da159fcb4a1288f072d34c3315644bcc", "org.opencontainers.image.source": "https://github.com/fluxcd/flux2" } } @@ -436,21 +436,21 @@ status: lastUpdateTime: "2022-06-22T09:14:21Z" metadata: org.opencontainers.image.created: "2023-02-10T09:06:09Z" - org.opencontainers.image.revision: b3b00fe35424a45d373bf4c7214178bc36fd7872 + org.opencontainers.image.revision: sha1:b3b00fe35424a45d373bf4c7214178bc36fd7872 org.opencontainers.image.source: https://github.com/stefanprodan/podinfo.git path: ocirepository/oci/podinfo/3b6cdcc7adcc9a84d3214ee1c029543789d90b5ae69debe9efa3f66e982875de.tar.gz - revision: 3b6cdcc7adcc9a84d3214ee1c029543789d90b5ae69debe9efa3f66e982875de + revision: sha256:3b6cdcc7adcc9a84d3214ee1c029543789d90b5ae69debe9efa3f66e982875de size: 1105 url: http://source-controller.flux-system.svc.cluster.local./ocirepository/oci/podinfo/3b6cdcc7adcc9a84d3214ee1c029543789d90b5ae69debe9efa3f66e982875de.tar.gz conditions: - lastTransitionTime: "2022-06-22T09:14:21Z" - message: stored artifact for revision '3b6cdcc7adcc9a84d3214ee1c029543789d90b5ae69debe9efa3f66e982875de' + message: stored artifact for revision 'sha256:3b6cdcc7adcc9a84d3214ee1c029543789d90b5ae69debe9efa3f66e982875de' observedGeneration: 1 reason: Succeeded status: "True" type: Ready - lastTransitionTime: "2022-06-22T09:14:21Z" - message: stored artifact for revision '3b6cdcc7adcc9a84d3214ee1c029543789d90b5ae69debe9efa3f66e982875de' + message: stored artifact for revision 'sha256:3b6cdcc7adcc9a84d3214ee1c029543789d90b5ae69debe9efa3f66e982875de' observedGeneration: 1 reason: Succeeded status: "True" From b44a3d36baca15d09f97e2fafd92e8a23b295e72 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Fri, 17 Feb 2023 14:10:54 +0200 Subject: [PATCH 398/818] Remove deprecated flags Signed-off-by: Stefan Prodan --- .github/workflows/e2e-bootstrap.yaml | 7 --- .github/workflows/e2e.yaml | 7 --- cmd/flux/bootstrap.go | 20 ++++----- cmd/flux/bootstrap_bitbucket_server.go | 18 +++----- cmd/flux/bootstrap_git.go | 25 +++++------ cmd/flux/bootstrap_github.go | 26 +++++------ cmd/flux/bootstrap_gitlab.go | 9 ++-- cmd/flux/create_source_git.go | 10 ----- cmd/flux/install.go | 13 +----- internal/flags/arch.go | 54 ---------------------- internal/flags/arch_test.go | 45 ------------------- internal/flags/git_implementation.go | 55 ----------------------- internal/flags/git_implementation_test.go | 50 --------------------- pkg/manifestgen/sync/options.go | 18 ++++---- pkg/manifestgen/sync/sync.go | 1 - 15 files changed, 52 insertions(+), 306 deletions(-) delete mode 100644 internal/flags/arch.go delete mode 100644 internal/flags/arch_test.go delete mode 100644 internal/flags/git_implementation.go delete mode 100644 internal/flags/git_implementation_test.go diff --git a/.github/workflows/e2e-bootstrap.yaml b/.github/workflows/e2e-bootstrap.yaml index 2bf2951c..6484a88e 100644 --- a/.github/workflows/e2e-bootstrap.yaml +++ b/.github/workflows/e2e-bootstrap.yaml @@ -85,13 +85,6 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITPROVIDER_BOT_TOKEN }} GITHUB_REPO_NAME: ${{ steps.vars.outputs.test_repo_name }} GITHUB_ORG_NAME: fluxcd-testing - - name: libgit2 - run: | - /tmp/flux create source git test-libgit2 \ - --url=ssh://git@github.com/fluxcd-testing/${{ steps.vars.outputs.test_repo_name }} \ - --git-implementation=libgit2 \ - --secret-ref=flux-system \ - --branch=main - name: uninstall run: | /tmp/flux uninstall -s --keep-namespace diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index 593446bb..b4de7dd2 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -86,13 +86,6 @@ jobs: --tag-semver=">=3.2.3" \ --export | kubectl apply -f - /tmp/flux delete source git podinfo-export --silent - - name: flux create source git libgit2 semver - run: | - /tmp/flux create source git podinfo-libgit2 \ - --url https://github.com/stefanprodan/podinfo \ - --tag-semver=">=3.2.3" \ - --git-implementation=libgit2 - /tmp/flux delete source git podinfo-libgit2 --silent - name: flux get sources git run: | /tmp/flux get sources git diff --git a/cmd/flux/bootstrap.go b/cmd/flux/bootstrap.go index 9e390a89..09b4ec9d 100644 --- a/cmd/flux/bootstrap.go +++ b/cmd/flux/bootstrap.go @@ -31,13 +31,13 @@ import ( var bootstrapCmd = &cobra.Command{ Use: "bootstrap", - Short: "Bootstrap toolkit components", - Long: "The bootstrap sub-commands bootstrap the toolkit components on the targeted Git provider.", + Short: "Deploy Flux on a cluster the GitOps way.", + Long: `The bootstrap sub-commands push the Flux manifests to a Git repository +and deploy Flux on the cluster.`, } type bootstrapFlags struct { version string - arch flags.Arch logLevel flags.LogLevel branch string @@ -91,9 +91,9 @@ func init() { "list of components in addition to those supplied or defaulted, accepts values such as 'image-reflector-controller,image-automation-controller'") bootstrapCmd.PersistentFlags().StringVar(&bootstrapArgs.registry, "registry", "ghcr.io/fluxcd", - "container registry where the toolkit images are published") + "container registry where the Flux controller images are published") bootstrapCmd.PersistentFlags().StringVar(&bootstrapArgs.imagePullSecret, "image-pull-secret", "", - "Kubernetes secret name used for pulling the toolkit images from a private registry") + "Kubernetes secret name used for pulling the controller images from a private registry") bootstrapCmd.PersistentFlags().StringVar(&bootstrapArgs.branch, "branch", bootstrapDefaultBranch, "Git branch") bootstrapCmd.PersistentFlags().BoolVar(&bootstrapArgs.recurseSubmodules, "recurse-submodules", false, @@ -102,15 +102,15 @@ func init() { bootstrapCmd.PersistentFlags().StringVar(&bootstrapArgs.manifestsPath, "manifests", "", "path to the manifest directory") bootstrapCmd.PersistentFlags().BoolVar(&bootstrapArgs.watchAllNamespaces, "watch-all-namespaces", true, - "watch for custom resources in all namespaces, if set to false it will only watch the namespace where the toolkit is installed") + "watch for custom resources in all namespaces, if set to false it will only watch the namespace where the Flux controllers are installed") bootstrapCmd.PersistentFlags().BoolVar(&bootstrapArgs.networkPolicy, "network-policy", true, - "deny ingress access to the toolkit controllers from other namespaces using network policies") + "setup Kubernetes network policies to deny ingress access to the Flux controllers from other namespaces") bootstrapCmd.PersistentFlags().BoolVar(&bootstrapArgs.tokenAuth, "token-auth", false, - "when enabled, the personal access token will be used instead of SSH deploy key") + "when enabled, the personal access token will be used instead of the SSH deploy key") bootstrapCmd.PersistentFlags().Var(&bootstrapArgs.logLevel, "log-level", bootstrapArgs.logLevel.Description()) bootstrapCmd.PersistentFlags().StringVar(&bootstrapArgs.clusterDomain, "cluster-domain", rootArgs.defaults.ClusterDomain, "internal cluster domain") bootstrapCmd.PersistentFlags().StringSliceVar(&bootstrapArgs.tolerationKeys, "toleration-keys", nil, - "list of toleration keys used to schedule the components pods onto nodes with matching taints") + "list of toleration keys used to schedule the controller pods onto nodes with matching taints") bootstrapCmd.PersistentFlags().StringVar(&bootstrapArgs.secretName, "secret-name", rootArgs.defaults.Namespace, "name of the secret the sync credentials can be found in or stored to") bootstrapCmd.PersistentFlags().Var(&bootstrapArgs.keyAlgorithm, "ssh-key-algorithm", bootstrapArgs.keyAlgorithm.Description()) @@ -129,8 +129,6 @@ func init() { bootstrapCmd.PersistentFlags().StringVar(&bootstrapArgs.commitMessageAppendix, "commit-message-appendix", "", "string to add to the commit messages, e.g. '[ci skip]'") - bootstrapCmd.PersistentFlags().Var(&bootstrapArgs.arch, "arch", bootstrapArgs.arch.Description()) - bootstrapCmd.PersistentFlags().MarkDeprecated("arch", "multi-arch container image is now available for AMD64, ARMv7 and ARM64") bootstrapCmd.PersistentFlags().MarkHidden("manifests") rootCmd.AddCommand(bootstrapCmd) diff --git a/cmd/flux/bootstrap_bitbucket_server.go b/cmd/flux/bootstrap_bitbucket_server.go index b656db4d..ee56a32d 100644 --- a/cmd/flux/bootstrap_bitbucket_server.go +++ b/cmd/flux/bootstrap_bitbucket_server.go @@ -38,29 +38,26 @@ import ( var bootstrapBServerCmd = &cobra.Command{ Use: "bitbucket-server", - Short: "Bootstrap toolkit components in a Bitbucket Server repository", + Short: "Deploy Flux on a cluster connected to a Bitbucket Server repository", Long: `The bootstrap bitbucket-server command creates the Bitbucket Server repository if it doesn't exists and -commits the toolkit components manifests to the master branch. +commits the Flux manifests to the master branch. Then it configures the target cluster to synchronize with the repository. -If the toolkit components are present on the cluster, +If the Flux components are present on the cluster, the bootstrap command will perform an upgrade if needed.`, Example: ` # Create a Bitbucket Server API token and export it as an env var export BITBUCKET_TOKEN= # Run bootstrap for a private repository using HTTPS token authentication - flux bootstrap bitbucket-server --owner= --username= --repository= --hostname= --token-auth + flux bootstrap bitbucket-server --owner= --username= --repository= --hostname= --token-auth --path=clusters/my-cluster # Run bootstrap for a private repository using SSH authentication - flux bootstrap bitbucket-server --owner= --username= --repository= --hostname= - - # Run bootstrap for a repository path - flux bootstrap bitbucket-server --owner= --username= --repository= --path=dev-cluster --hostname= + flux bootstrap bitbucket-server --owner= --username= --repository= --hostname= --path=clusters/my-cluster # Run bootstrap for a public repository on a personal account - flux bootstrap bitbucket-server --owner= --repository= --private=false --personal --hostname= --token-auth + flux bootstrap bitbucket-server --owner= --repository= --private=false --personal --hostname= --token-auth --path=clusters/my-cluster # Run bootstrap for a an existing repository with a branch named main - flux bootstrap bitbucket-server --owner= --username= --repository= --branch=main --hostname= --token-auth`, + flux bootstrap bitbucket-server --owner= --username= --repository= --branch=main --hostname= --token-auth --path=clusters/my-cluster`, RunE: bootstrapBServerCmdRun, } @@ -247,7 +244,6 @@ func bootstrapBServerCmdRun(cmd *cobra.Command, args []string) error { Secret: bootstrapArgs.secretName, TargetPath: bServerArgs.path.ToSlash(), ManifestFile: sync.MakeDefaultOptions().ManifestFile, - GitImplementation: sourceGitArgs.gitImplementation.String(), RecurseSubmodules: bootstrapArgs.recurseSubmodules, } diff --git a/cmd/flux/bootstrap_git.go b/cmd/flux/bootstrap_git.go index d7677e6e..3d1dd255 100644 --- a/cmd/flux/bootstrap_git.go +++ b/cmd/flux/bootstrap_git.go @@ -41,31 +41,31 @@ import ( var bootstrapGitCmd = &cobra.Command{ Use: "git", - Short: "Bootstrap toolkit components in a Git repository", - Long: `The bootstrap git command commits the toolkit components manifests to the -branch of a Git repository. It then configures the target cluster to synchronize with -the repository. If the toolkit components are present on the cluster, the bootstrap + Short: "Deploy Flux on a cluster connected to a Git repository", + Long: `The bootstrap git command commits the Flux manifests to the +branch of a Git repository. And then it configures the target cluster to synchronize with +that repository. If the Flux components are present on the cluster, the bootstrap command will perform an upgrade if needed.`, Example: ` # Run bootstrap for a Git repository and authenticate with your SSH agent - flux bootstrap git --url=ssh://git@example.com/repository.git + flux bootstrap git --url=ssh://git@example.com/repository.git --path=clusters/my-cluster # Run bootstrap for a Git repository and authenticate using a password - flux bootstrap git --url=https://example.com/repository.git --password= + flux bootstrap git --url=https://example.com/repository.git --password= --path=clusters/my-cluster # Run bootstrap for a Git repository and authenticate using a password from environment variable - GIT_PASSWORD= && flux bootstrap git --url=https://example.com/repository.git + GIT_PASSWORD= && flux bootstrap git --url=https://example.com/repository.git --path=clusters/my-cluster # Run bootstrap for a Git repository with a passwordless private key - flux bootstrap git --url=ssh://git@example.com/repository.git --private-key-file= + flux bootstrap git --url=ssh://git@example.com/repository.git --private-key-file= --path=clusters/my-cluster # Run bootstrap for a Git repository with a private key and password - flux bootstrap git --url=ssh://git@example.com/repository.git --private-key-file= --password= + flux bootstrap git --url=ssh://git@example.com/repository.git --private-key-file= --password= --path=clusters/my-cluster # Run bootstrap for a Git repository on AWS CodeCommit - flux bootstrap git --url=ssh://@git-codecommit..amazonaws.com/v1/repos/ --private-key-file= --password= + flux bootstrap git --url=ssh://@git-codecommit..amazonaws.com/v1/repos/ --private-key-file= --password= --path=clusters/my-cluster # Run bootstrap for a Git repository on Azure Devops - flux bootstrap git --url=ssh://git@ssh.dev.azure.com/v3/// --ssh-key-algorithm=rsa --ssh-rsa-bits=4096 + flux bootstrap git --url=ssh://git@ssh.dev.azure.com/v3/// --ssh-key-algorithm=rsa --ssh-rsa-bits=4096 --path=clusters/my-cluster `, RunE: bootstrapGitCmdRun, } @@ -93,7 +93,7 @@ func init() { bootstrapGitCmd.Flags().StringVarP(&gitArgs.username, "username", "u", "git", "basic authentication username") bootstrapGitCmd.Flags().StringVarP(&gitArgs.password, "password", "p", "", "basic authentication password") bootstrapGitCmd.Flags().BoolVarP(&gitArgs.silent, "silent", "s", false, "assumes the deploy key is already setup, skips confirmation") - bootstrapGitCmd.Flags().BoolVar(&gitArgs.insecureHttpAllowed, "allow-insecure-http", false, "allows http git url connections") + bootstrapGitCmd.Flags().BoolVar(&gitArgs.insecureHttpAllowed, "allow-insecure-http", false, "allows insecure HTTP connections") bootstrapCmd.AddCommand(bootstrapGitCmd) } @@ -271,7 +271,6 @@ func bootstrapGitCmdRun(cmd *cobra.Command, args []string) error { Secret: bootstrapArgs.secretName, TargetPath: gitArgs.path.ToSlash(), ManifestFile: sync.MakeDefaultOptions().ManifestFile, - GitImplementation: sourceGitArgs.gitImplementation.String(), RecurseSubmodules: bootstrapArgs.recurseSubmodules, } diff --git a/cmd/flux/bootstrap_github.go b/cmd/flux/bootstrap_github.go index f789aae8..e015e4bb 100644 --- a/cmd/flux/bootstrap_github.go +++ b/cmd/flux/bootstrap_github.go @@ -38,38 +38,35 @@ import ( var bootstrapGitHubCmd = &cobra.Command{ Use: "github", - Short: "Bootstrap toolkit components in a GitHub repository", + Short: "Deploy Flux on a cluster connected to a GitHub repository", Long: `The bootstrap github command creates the GitHub repository if it doesn't exists and -commits the toolkit components manifests to the main branch. -Then it configures the target cluster to synchronize with the repository. -If the toolkit components are present on the cluster, +commits the Flux manifests to the specified branch. +Then it configures the target cluster to synchronize with that repository. +If the Flux components are present on the cluster, the bootstrap command will perform an upgrade if needed.`, Example: ` # Create a GitHub personal access token and export it as an env var export GITHUB_TOKEN= # Run bootstrap for a private repository owned by a GitHub organization - flux bootstrap github --owner= --repository= + flux bootstrap github --owner= --repository= --path=clusters/my-cluster # Run bootstrap for a private repository and assign organization teams to it - flux bootstrap github --owner= --repository= --team= --team= + flux bootstrap github --owner= --repository= --team= --team= --path=clusters/my-cluster # Run bootstrap for a private repository and assign organization teams with their access level(e.g maintain, admin) to it - flux bootstrap github --owner= --repository= --team=: - - # Run bootstrap for a repository path - flux bootstrap github --owner= --repository= --path=dev-cluster + flux bootstrap github --owner= --repository= --team=: --path=clusters/my-cluster # Run bootstrap for a public repository on a personal account - flux bootstrap github --owner= --repository= --private=false --personal=true + flux bootstrap github --owner= --repository= --private=false --personal=true --path=clusters/my-cluster # Run bootstrap for a private repository hosted on GitHub Enterprise using SSH auth - flux bootstrap github --owner= --repository= --hostname= --ssh-hostname= + flux bootstrap github --owner= --repository= --hostname= --ssh-hostname= --path=clusters/my-cluster # Run bootstrap for a private repository hosted on GitHub Enterprise using HTTPS auth - flux bootstrap github --owner= --repository= --hostname= --token-auth + flux bootstrap github --owner= --repository= --hostname= --token-auth --path=clusters/my-cluster # Run bootstrap for an existing repository with a branch named main - flux bootstrap github --owner= --repository= --branch=main`, + flux bootstrap github --owner= --repository= --branch=main --path=clusters/my-cluster`, RunE: bootstrapGitHubCmdRun, } @@ -233,7 +230,6 @@ func bootstrapGitHubCmdRun(cmd *cobra.Command, args []string) error { Secret: bootstrapArgs.secretName, TargetPath: githubArgs.path.ToSlash(), ManifestFile: sync.MakeDefaultOptions().ManifestFile, - GitImplementation: sourceGitArgs.gitImplementation.String(), RecurseSubmodules: bootstrapArgs.recurseSubmodules, } diff --git a/cmd/flux/bootstrap_gitlab.go b/cmd/flux/bootstrap_gitlab.go index 7266545a..e5d27229 100644 --- a/cmd/flux/bootstrap_gitlab.go +++ b/cmd/flux/bootstrap_gitlab.go @@ -40,11 +40,11 @@ import ( var bootstrapGitLabCmd = &cobra.Command{ Use: "gitlab", - Short: "Bootstrap toolkit components in a GitLab repository", + Short: "Deploy Flux on a cluster connected to a GitLab repository", Long: `The bootstrap gitlab command creates the GitLab repository if it doesn't exists and -commits the toolkit components manifests to the master branch. -Then it configures the target cluster to synchronize with the repository. -If the toolkit components are present on the cluster, +commits the Flux manifests to the specified branch. +Then it configures the target cluster to synchronize with that repository. +If the Flux components are present on the cluster, the bootstrap command will perform an upgrade if needed.`, Example: ` # Create a GitLab API token and export it as an env var export GITLAB_TOKEN= @@ -250,7 +250,6 @@ func bootstrapGitLabCmdRun(cmd *cobra.Command, args []string) error { Secret: bootstrapArgs.secretName, TargetPath: gitlabArgs.path.ToSlash(), ManifestFile: sync.MakeDefaultOptions().ManifestFile, - GitImplementation: sourceGitArgs.gitImplementation.String(), RecurseSubmodules: bootstrapArgs.recurseSubmodules, } diff --git a/cmd/flux/create_source_git.go b/cmd/flux/create_source_git.go index 22306dc5..5a321c08 100644 --- a/cmd/flux/create_source_git.go +++ b/cmd/flux/create_source_git.go @@ -55,7 +55,6 @@ type sourceGitFlags struct { keyRSABits flags.RSAKeyBits keyECDSACurve flags.ECDSACurve secretRef string - gitImplementation flags.GitImplementation caFile string privateKeyFile string recurseSubmodules bool @@ -136,7 +135,6 @@ func init() { createSourceGitCmd.Flags().Var(&sourceGitArgs.keyRSABits, "ssh-rsa-bits", sourceGitArgs.keyRSABits.Description()) createSourceGitCmd.Flags().Var(&sourceGitArgs.keyECDSACurve, "ssh-ecdsa-curve", sourceGitArgs.keyECDSACurve.Description()) createSourceGitCmd.Flags().StringVar(&sourceGitArgs.secretRef, "secret-ref", "", "the name of an existing secret containing SSH or basic credentials") - createSourceGitCmd.Flags().Var(&sourceGitArgs.gitImplementation, "git-implementation", sourceGitArgs.gitImplementation.Description()) createSourceGitCmd.Flags().StringVar(&sourceGitArgs.caFile, "ca-file", "", "path to TLS CA file used for validating self-signed certificates") createSourceGitCmd.Flags().StringVar(&sourceGitArgs.privateKeyFile, "private-key-file", "", "path to a passwordless private key file used for authenticating to the Git SSH server") createSourceGitCmd.Flags().BoolVar(&sourceGitArgs.recurseSubmodules, "recurse-submodules", false, @@ -178,10 +176,6 @@ func createSourceGitCmdRun(cmd *cobra.Command, args []string) error { return fmt.Errorf("specifying a CA file is not supported for Git over SSH") } - if sourceGitArgs.recurseSubmodules && sourceGitArgs.gitImplementation == sourcev1.LibGit2Implementation { - return fmt.Errorf("recurse submodules requires --git-implementation=%s", sourcev1.GoGitImplementation) - } - tmpDir, err := os.MkdirTemp("", name) if err != nil { return err @@ -220,10 +214,6 @@ func createSourceGitCmdRun(cmd *cobra.Command, args []string) error { gitRepository.Spec.Timeout = &metav1.Duration{Duration: createSourceArgs.fetchTimeout} } - if sourceGitArgs.gitImplementation != "" { - gitRepository.Spec.GitImplementation = sourceGitArgs.gitImplementation.String() - } - if sourceGitArgs.semver != "" { gitRepository.Spec.Reference.SemVer = sourceGitArgs.semver } else if sourceGitArgs.tag != "" { diff --git a/cmd/flux/install.go b/cmd/flux/install.go index 4d0e6d82..4c645640 100644 --- a/cmd/flux/install.go +++ b/cmd/flux/install.go @@ -59,7 +59,6 @@ If a previous version is installed, then an in-place upgrade will be performed.` type installFlags struct { export bool - dryRun bool version string defaultComponents []string extraComponents []string @@ -69,7 +68,6 @@ type installFlags struct { watchAllNamespaces bool networkPolicy bool manifestsPath string - arch flags.Arch logLevel flags.LogLevel tokenAuth bool clusterDomain string @@ -81,8 +79,6 @@ var installArgs = NewInstallFlags() func init() { installCmd.Flags().BoolVar(&installArgs.export, "export", false, "write the install manifests to stdout and exit") - installCmd.Flags().BoolVarP(&installArgs.dryRun, "dry-run", "", false, - "only print the object that would be applied") installCmd.Flags().StringVarP(&installArgs.version, "version", "v", "", "toolkit version, when specified the manifests are downloaded from https://github.com/fluxcd/flux2/releases") installCmd.Flags().StringSliceVar(&installArgs.defaultComponents, "components", rootArgs.defaults.Components, @@ -94,7 +90,6 @@ func init() { "container registry where the toolkit images are published") installCmd.Flags().StringVar(&installArgs.imagePullSecret, "image-pull-secret", "", "Kubernetes secret name used for pulling the toolkit images from a private registry") - installCmd.Flags().Var(&installArgs.arch, "arch", installArgs.arch.Description()) installCmd.Flags().BoolVar(&installArgs.watchAllNamespaces, "watch-all-namespaces", rootArgs.defaults.WatchAllNamespaces, "watch for custom resources in all namespaces, if set to false it will only watch the namespace where the toolkit is installed") installCmd.Flags().Var(&installArgs.logLevel, "log-level", installArgs.logLevel.Description()) @@ -104,8 +99,7 @@ func init() { installCmd.Flags().StringSliceVar(&installArgs.tolerationKeys, "toleration-keys", nil, "list of toleration keys used to schedule the components pods onto nodes with matching taints") installCmd.Flags().MarkHidden("manifests") - installCmd.Flags().MarkDeprecated("arch", "multi-arch container image is now available for AMD64, ARMv7 and ARM64") - installCmd.Flags().MarkDeprecated("dry-run", "use 'flux install --export | kubectl apply --dry-run=client -f-'") + rootCmd.AddCommand(installCmd) } @@ -189,11 +183,6 @@ func installCmdRun(cmd *cobra.Command, args []string) error { logger.Successf("manifests build completed") logger.Actionf("installing components in %s namespace", *kubeconfigArgs.Namespace) - if installArgs.dryRun { - logger.Successf("install dry-run finished") - return nil - } - applyOutput, err := utils.Apply(ctx, kubeconfigArgs, kubeclientOptions, tmpDir, filepath.Join(tmpDir, manifest.Path)) if err != nil { return fmt.Errorf("install failed: %w", err) diff --git a/internal/flags/arch.go b/internal/flags/arch.go deleted file mode 100644 index 7d39a4ea..00000000 --- a/internal/flags/arch.go +++ /dev/null @@ -1,54 +0,0 @@ -/* -Copyright 2020 The Flux authors - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package flags - -import ( - "fmt" - "strings" - - "github.com/fluxcd/flux2/internal/utils" -) - -var supportedArchs = []string{"amd64", "arm", "arm64"} - -type Arch string - -func (a *Arch) String() string { - return string(*a) -} - -func (a *Arch) Set(str string) error { - if strings.TrimSpace(str) == "" { - return fmt.Errorf("no arch given, must be one of: %s", - strings.Join(supportedArchs, ", ")) - } - if !utils.ContainsItemString(supportedArchs, str) { - return fmt.Errorf("unsupported arch '%s', must be one of: %s", - str, strings.Join(supportedArchs, ", ")) - - } - *a = Arch(str) - return nil -} - -func (a *Arch) Type() string { - return "arch" -} - -func (a *Arch) Description() string { - return fmt.Sprintf("cluster architecture, available options are: (%s)", strings.Join(supportedArchs, ", ")) -} diff --git a/internal/flags/arch_test.go b/internal/flags/arch_test.go deleted file mode 100644 index 9902fff4..00000000 --- a/internal/flags/arch_test.go +++ /dev/null @@ -1,45 +0,0 @@ -/* -Copyright 2020 The Flux authors - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package flags - -import ( - "testing" -) - -func TestArch_Set(t *testing.T) { - tests := []struct { - name string - str string - expect string - expectErr bool - }{ - {"supported", "amd64", "amd64", false}, - {"unsupported", "unsupported", "", true}, - {"empty", "", "", true}, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - var a Arch - if err := a.Set(tt.str); (err != nil) != tt.expectErr { - t.Errorf("Set() error = %v, expectErr %v", err, tt.expectErr) - } - if str := a.String(); str != tt.expect { - t.Errorf("Set() = %v, expect %v", str, tt.expect) - } - }) - } -} diff --git a/internal/flags/git_implementation.go b/internal/flags/git_implementation.go deleted file mode 100644 index 77512c2e..00000000 --- a/internal/flags/git_implementation.go +++ /dev/null @@ -1,55 +0,0 @@ -/* -Copyright 2021 The Flux authors - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package flags - -import ( - "fmt" - "strings" - - sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" - - "github.com/fluxcd/flux2/internal/utils" -) - -var supportedGitImplementations = []string{sourcev1.GoGitImplementation, sourcev1.LibGit2Implementation} - -type GitImplementation string - -func (i *GitImplementation) String() string { - return string(*i) -} - -func (i *GitImplementation) Set(str string) error { - if str == "" { - return nil - } - if !utils.ContainsItemString(supportedGitImplementations, str) { - return fmt.Errorf("unsupported Git implementation '%s', must be one of: %s", - str, strings.Join(supportedGitImplementations, ", ")) - - } - *i = GitImplementation(str) - return nil -} - -func (i *GitImplementation) Type() string { - return "gitImplementation" -} - -func (i *GitImplementation) Description() string { - return fmt.Sprintf("the Git implementation to use, available options are: (%s)", strings.Join(supportedGitImplementations, ", ")) -} diff --git a/internal/flags/git_implementation_test.go b/internal/flags/git_implementation_test.go deleted file mode 100644 index 9af8cfe2..00000000 --- a/internal/flags/git_implementation_test.go +++ /dev/null @@ -1,50 +0,0 @@ -//go:build !e2e -// +build !e2e - -/* -Copyright 2021 The Flux authors - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package flags - -import ( - "testing" - - sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" -) - -func TestGitImplementation_Set(t *testing.T) { - tests := []struct { - name string - str string - expect string - expectErr bool - }{ - {"supported", sourcev1.GoGitImplementation, sourcev1.GoGitImplementation, false}, - {"unsupported", "unsupported", "", true}, - {"empty", "", "", false}, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - var i GitImplementation - if err := i.Set(tt.str); (err != nil) != tt.expectErr { - t.Errorf("Set() error = %v, expectErr %v", err, tt.expectErr) - } - if str := i.String(); str != tt.expect { - t.Errorf("Set() = %v, expect %v", str, tt.expect) - } - }) - } -} diff --git a/pkg/manifestgen/sync/options.go b/pkg/manifestgen/sync/options.go index 7085d56e..4a209827 100644 --- a/pkg/manifestgen/sync/options.go +++ b/pkg/manifestgen/sync/options.go @@ -32,20 +32,18 @@ type Options struct { Secret string TargetPath string ManifestFile string - GitImplementation string RecurseSubmodules bool } func MakeDefaultOptions() Options { return Options{ - Interval: 1 * time.Minute, - URL: "", - Name: "flux-system", - Namespace: "flux-system", - Branch: "main", - Secret: "flux-system", - ManifestFile: "gotk-sync.yaml", - TargetPath: "", - GitImplementation: "", + Interval: 1 * time.Minute, + URL: "", + Name: "flux-system", + Namespace: "flux-system", + Branch: "main", + Secret: "flux-system", + ManifestFile: "gotk-sync.yaml", + TargetPath: "", } } diff --git a/pkg/manifestgen/sync/sync.go b/pkg/manifestgen/sync/sync.go index 818c11f4..6b7953fc 100644 --- a/pkg/manifestgen/sync/sync.go +++ b/pkg/manifestgen/sync/sync.go @@ -67,7 +67,6 @@ func Generate(options Options) (*manifestgen.Manifest, error) { SecretRef: &meta.LocalObjectReference{ Name: options.Secret, }, - GitImplementation: options.GitImplementation, RecurseSubmodules: options.RecurseSubmodules, }, } From bca26ebf0a35fc8ac0832f15e9c30b3b4cddf550 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Fri, 17 Feb 2023 13:33:52 +0100 Subject: [PATCH 399/818] build: convert ::set-output to $GITHUB_OUTPUT Signed-off-by: Hidde Beydals --- .github/workflows/e2e-bootstrap.yaml | 2 +- .github/workflows/release.yaml | 14 +++++++------- .github/workflows/update.yaml | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/e2e-bootstrap.yaml b/.github/workflows/e2e-bootstrap.yaml index 6484a88e..7c3076fb 100644 --- a/.github/workflows/e2e-bootstrap.yaml +++ b/.github/workflows/e2e-bootstrap.yaml @@ -48,7 +48,7 @@ jobs: COMMIT_SHA=$(git rev-parse HEAD) PSEUDO_RAND_SUFFIX=$(echo "${BRANCH_NAME}-${COMMIT_SHA}" | shasum | awk '{print $1}') TEST_REPO_NAME="${REPOSITORY_NAME}-${PSEUDO_RAND_SUFFIX}" - echo "::set-output name=test_repo_name::$TEST_REPO_NAME" + echo "test_repo_name=$TEST_REPO_NAME" >> $GITHUB_OUTPUT - name: bootstrap init run: | /tmp/flux bootstrap github --manifests ./manifests/install/ \ diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 75cf6205..f417bc7f 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -97,7 +97,7 @@ jobs: id: prep run: | VERSION=$(flux version --client | awk '{ print $NF }') - echo ::set-output name=VERSION::${VERSION} + echo "version=${VERSION}" >> $GITHUB_OUTPUT - name: Login to GHCR uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a # v2 with: @@ -117,7 +117,7 @@ jobs: --export > ./ghcr.io/flux-system/gotk-components.yaml cd ./ghcr.io && flux push artifact \ - oci://ghcr.io/fluxcd/flux-manifests:${{ steps.prep.outputs.VERSION }} \ + oci://ghcr.io/fluxcd/flux-manifests:${{ steps.prep.outputs.version }} \ --path="./flux-system" \ --source=${{ github.repositoryUrl }} \ --revision="${{ github.ref_name }}@sha1:${{ github.sha }}" @@ -129,7 +129,7 @@ jobs: --export > ./docker.io/flux-system/gotk-components.yaml cd ./docker.io && flux push artifact \ - oci://docker.io/fluxcd/flux-manifests:${{ steps.prep.outputs.VERSION }} \ + oci://docker.io/fluxcd/flux-manifests:${{ steps.prep.outputs.version }} \ --path="./flux-system" \ --source=${{ github.repositoryUrl }} \ --revision="${{ github.ref_name }}@sha1:${{ github.sha }}" @@ -138,12 +138,12 @@ jobs: env: COSIGN_EXPERIMENTAL: 1 run: | - cosign sign ghcr.io/fluxcd/flux-manifests:${{ steps.prep.outputs.VERSION }} - cosign sign docker.io/fluxcd/flux-manifests:${{ steps.prep.outputs.VERSION }} + cosign sign ghcr.io/fluxcd/flux-manifests:${{ steps.prep.outputs.version }} + cosign sign docker.io/fluxcd/flux-manifests:${{ steps.prep.outputs.version }} - name: Tag manifests run: | - flux tag artifact oci://ghcr.io/fluxcd/flux-manifests:${{ steps.prep.outputs.VERSION }} \ + flux tag artifact oci://ghcr.io/fluxcd/flux-manifests:${{ steps.prep.outputs.version }} \ --tag latest - flux tag artifact oci://docker.io/fluxcd/flux-manifests:${{ steps.prep.outputs.VERSION }} \ + flux tag artifact oci://docker.io/fluxcd/flux-manifests:${{ steps.prep.outputs.version }} \ --tag latest diff --git a/.github/workflows/update.yaml b/.github/workflows/update.yaml index 06a8a9b6..74c17bab 100644 --- a/.github/workflows/update.yaml +++ b/.github/workflows/update.yaml @@ -70,7 +70,7 @@ jobs: git diff # export PR_BODY for PR and commit - echo "::set-output name=pr_body::$PR_BODY" + echo "pr_body=$PR_BODY" >> $GITHUB_OUTPUT } - name: Create Pull Request From 2e1e4106fd2bf20ac8827ed2f6b3a632e29dc079 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Fri, 17 Feb 2023 14:21:16 +0100 Subject: [PATCH 400/818] build: ensure newlines work with $GITHUB_OUTPUT Signed-off-by: Hidde Beydals --- .github/workflows/update.yaml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/update.yaml b/.github/workflows/update.yaml index 74c17bab..dff93bda 100644 --- a/.github/workflows/update.yaml +++ b/.github/workflows/update.yaml @@ -70,7 +70,12 @@ jobs: git diff # export PR_BODY for PR and commit - echo "pr_body=$PR_BODY" >> $GITHUB_OUTPUT + # NB: this may look strange but it is the way it should be done to + # maintain our precious newlines + # Ref: https://github.com/github/docs/issues/21529 + echo 'pr_body<> $GITHUB_OUTPUT + echo "${PR_BODY}" >> $GITHUB_OUTPUT + echo 'EOF' >> $GITHUB_OUTPUT } - name: Create Pull Request From a59aaa4dfbbe6ece0d775038f7f7be3d46be6f5a Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Fri, 17 Feb 2023 14:57:12 +0100 Subject: [PATCH 401/818] build: further solve issue release workflow Signed-off-by: Hidde Beydals --- .github/workflows/update.yaml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/update.yaml b/.github/workflows/update.yaml index dff93bda..a967cb64 100644 --- a/.github/workflows/update.yaml +++ b/.github/workflows/update.yaml @@ -26,7 +26,7 @@ jobs: - name: Update component versions id: update run: | - PR_BODY="" + PR_BODY=$(mktemp) bump_version() { local LATEST_VERSION=$(curl -s https://api.github.com/repos/fluxcd/$1/releases | jq -r 'sort_by(.published_at) | .[-1] | .tag_name') @@ -53,7 +53,8 @@ jobs: fi if [[ "$changed" == true ]]; then - PR_BODY="$PR_BODY- $1 to ${LATEST_VERSION}%0A https://github.com/fluxcd/$1/blob/${LATEST_VERSION}/CHANGELOG.md%0A" + echo "- $1 to ${LATEST_VERSION}" >> $PR_BODY + echo " https://github.com/fluxcd/$1/blob/${LATEST_VERSION}/CHANGELOG.md" >> $PR_BODY fi } @@ -74,7 +75,7 @@ jobs: # maintain our precious newlines # Ref: https://github.com/github/docs/issues/21529 echo 'pr_body<> $GITHUB_OUTPUT - echo "${PR_BODY}" >> $GITHUB_OUTPUT + cat $PR_BODY >> $GITHUB_OUTPUT echo 'EOF' >> $GITHUB_OUTPUT } From 04afc09d5874f8de6d91268790840795f15fd6ce Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Fri, 17 Feb 2023 14:07:05 +0000 Subject: [PATCH 402/818] Update toolkit components - helm-controller to v0.30.0 https://github.com/fluxcd/helm-controller/blob/v0.30.0/CHANGELOG.md - kustomize-controller to v0.34.0 https://github.com/fluxcd/kustomize-controller/blob/v0.34.0/CHANGELOG.md - notification-controller to v0.32.0 https://github.com/fluxcd/notification-controller/blob/v0.32.0/CHANGELOG.md - image-automation-controller to v0.30.0 https://github.com/fluxcd/image-automation-controller/blob/v0.30.0/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 8 ++++---- go.sum | 16 ++++++++-------- .../bases/helm-controller/kustomization.yaml | 4 ++-- .../kustomization.yaml | 4 ++-- .../kustomize-controller/kustomization.yaml | 4 ++-- .../notification-controller/kustomization.yaml | 4 ++-- manifests/crds/kustomization.yaml | 8 ++++---- 7 files changed, 24 insertions(+), 24 deletions(-) diff --git a/go.mod b/go.mod index 30ba7b5b..50ff4709 100644 --- a/go.mod +++ b/go.mod @@ -9,11 +9,11 @@ require ( github.com/distribution/distribution/v3 v3.0.0-20230131081513-cf87e8d07e8d github.com/fluxcd/go-git-providers v0.13.0 github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 - github.com/fluxcd/helm-controller/api v0.29.0 - github.com/fluxcd/image-automation-controller/api v0.29.0 + github.com/fluxcd/helm-controller/api v0.30.0 + github.com/fluxcd/image-automation-controller/api v0.30.0 github.com/fluxcd/image-reflector-controller/api v0.25.0 - github.com/fluxcd/kustomize-controller/api v0.33.0 - github.com/fluxcd/notification-controller/api v0.31.0 + github.com/fluxcd/kustomize-controller/api v0.34.0 + github.com/fluxcd/notification-controller/api v0.32.0 github.com/fluxcd/pkg/apis/meta v0.19.0 github.com/fluxcd/pkg/git v0.10.0 github.com/fluxcd/pkg/git/gogit v0.5.0 diff --git a/go.sum b/go.sum index 95b1043e..2ebcd422 100644 --- a/go.sum +++ b/go.sum @@ -199,16 +199,16 @@ github.com/fluxcd/go-git-providers v0.13.0 h1:VTuOMfatoqkCrEUOX5CVpSMiA1TIs0ioLh github.com/fluxcd/go-git-providers v0.13.0/go.mod h1:VEItGJ67Xc/7Cadh/oPMPUimXv75R0XqHFtF3J4tIdE= github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 h1:Gm5sGGk+/Wq6RhX4xpCZ2IqjDp5XkjlhENaAuAlpdKc= github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4/go.mod h1:raWgfUV7lDQVXp4QXUaeNNJkRVKz97UQuF+0kdY7Vmo= -github.com/fluxcd/helm-controller/api v0.29.0 h1:aoyI2fQNR/8rmUCz6l4kqQzgS3oAvP3/K6qP/uKk2C0= -github.com/fluxcd/helm-controller/api v0.29.0/go.mod h1:BXivPOvBtSKRmcs2HdAtlR5hlC0UGU5Zg847KmtXvkQ= -github.com/fluxcd/image-automation-controller/api v0.29.0 h1:86g4NgPCzfBaE4CRKc2EtyaVrEdbFVs81KLOz4vHZjA= -github.com/fluxcd/image-automation-controller/api v0.29.0/go.mod h1:mmRgP6i2TzEQUzIIjay0G7fPb6Y11Qzw1CTD7aj1zMc= +github.com/fluxcd/helm-controller/api v0.30.0 h1:zunzaHGak5IThITRncqOsWqyvdoO6lDd5sP98ryTIcs= +github.com/fluxcd/helm-controller/api v0.30.0/go.mod h1:EfT8NQAybkDbfmqQlb1JoMtwEKudaQcHSsWQpWRdhGE= +github.com/fluxcd/image-automation-controller/api v0.30.0 h1:gO8guWCTAMUzMk0UsWbRfbJyURpg1hUR7Cva3CpAQYg= +github.com/fluxcd/image-automation-controller/api v0.30.0/go.mod h1:bYbRyiyLEuVJkA+8WxLvRAsW9+OHbf8q9FHZVE2pJFs= github.com/fluxcd/image-reflector-controller/api v0.25.0 h1:tK0Hc7Xxr5z6wtBvLTX/cEwjt9YZdidwQ6JQRZuni3w= github.com/fluxcd/image-reflector-controller/api v0.25.0/go.mod h1:VXMXfQ5nLZtP+VKuqxYlQOyJ5aFjvC8YpFp1fSwcEAQ= -github.com/fluxcd/kustomize-controller/api v0.33.0 h1:ELTDIBC9dYaQjwIOtQxXAX2S4ydD6VQbmgf9p8wxIpE= -github.com/fluxcd/kustomize-controller/api v0.33.0/go.mod h1:6dVUIhT3Dge4Fyljv/qILYygwUTpAXl5IDjoOFLebfE= -github.com/fluxcd/notification-controller/api v0.31.0 h1:KcxsVwL1DU1BGro0raAt5+FwHCgGJwNsa915DdrAehs= -github.com/fluxcd/notification-controller/api v0.31.0/go.mod h1:K+Jxxbj8NRI9L2+NjV7T0TqUtq5NspZaH2fidHbguZ0= +github.com/fluxcd/kustomize-controller/api v0.34.0 h1:azw0y8AUfNSc1r3ZJkpbf8JKfpEs1Po980NqxuaJ8Iw= +github.com/fluxcd/kustomize-controller/api v0.34.0/go.mod h1:3KgYtDR0oSVU/CL4nokdQEGKOWSq/jXvmRh9AQ8sRF8= +github.com/fluxcd/notification-controller/api v0.32.0 h1:PAWyqUEksEt/lY+0+MyW4jtWlu1k4rrmoYo7RvKcrGI= +github.com/fluxcd/notification-controller/api v0.32.0/go.mod h1:0yUeBG8O6R5O9L3NS7TnLxZdni6auheTxM9gPMlgxMY= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= github.com/fluxcd/pkg/apis/kustomize v0.8.0 h1:A6aLolxPV2Sll44SOHiX96lbXXmRZmS5BoEerkRHrfM= diff --git a/manifests/bases/helm-controller/kustomization.yaml b/manifests/bases/helm-controller/kustomization.yaml index 1e92cadf..24b1b61f 100644 --- a/manifests/bases/helm-controller/kustomization.yaml +++ b/manifests/bases/helm-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/helm-controller/releases/download/v0.29.0/helm-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.29.0/helm-controller.deployment.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.30.0/helm-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.30.0/helm-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/image-automation-controller/kustomization.yaml b/manifests/bases/image-automation-controller/kustomization.yaml index f8c783ec..9660563f 100644 --- a/manifests/bases/image-automation-controller/kustomization.yaml +++ b/manifests/bases/image-automation-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.29.0/image-automation-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.29.0/image-automation-controller.deployment.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.30.0/image-automation-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.30.0/image-automation-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/kustomize-controller/kustomization.yaml b/manifests/bases/kustomize-controller/kustomization.yaml index e0e4157b..074464c5 100644 --- a/manifests/bases/kustomize-controller/kustomization.yaml +++ b/manifests/bases/kustomize-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.33.0/kustomize-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.33.0/kustomize-controller.deployment.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.34.0/kustomize-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.34.0/kustomize-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/notification-controller/kustomization.yaml b/manifests/bases/notification-controller/kustomization.yaml index bdee75e5..6c48237d 100644 --- a/manifests/bases/notification-controller/kustomization.yaml +++ b/manifests/bases/notification-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/notification-controller/releases/download/v0.31.0/notification-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v0.31.0/notification-controller.deployment.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.32.0/notification-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.32.0/notification-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index 28cdb7cc..2c5f7fcc 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -2,8 +2,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - https://github.com/fluxcd/source-controller/releases/download/v0.35.1/source-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.33.0/kustomize-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.29.0/helm-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v0.31.0/notification-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.34.0/kustomize-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.30.0/helm-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.32.0/notification-controller.crds.yaml - https://github.com/fluxcd/image-reflector-controller/releases/download/v0.25.0/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.29.0/image-automation-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.30.0/image-automation-controller.crds.yaml From e0131f22dde250668abeba816cb6535972403c79 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Fri, 17 Feb 2023 16:54:31 +0100 Subject: [PATCH 403/818] Update dependencies - github.com/ProtonMail/go-crypto to v0.0.0-20230217124315-7d5c6f04bbb8 - github.com/distribution/distribution/v3 to v3.0.0-20230217093620-e64b08ada6c3 - github.com/fluxcd/go-git-providers to v0.14.0 - github.com/fluxcd/pkg/git/gogit to v0.7.1 - github.com/fluxcd/pkg/kustomize to v0.13.1 - github.com/fluxcd/pkg/oci to v0.19.1 - github.com/fluxcd/pkg/runtime to v0.29.0 - github.com/fluxcd/pkg/sourceignore to v0.3.1 - github.com/fluxcd/pkg/ssa to v0.23.1 - github.com/fluxcd/pkg/ssh to v0.7.1 - github.com/fluxcd/pkg/version to v0.2.1 - github.com/onsi/gomega to v1.27.0 Signed-off-by: Hidde Beydals --- go.mod | 81 ++++++++++++------------- go.sum | 183 ++++++++++++++++++++++++++++++--------------------------- 2 files changed, 137 insertions(+), 127 deletions(-) diff --git a/go.mod b/go.mod index 50ff4709..628939fd 100644 --- a/go.mod +++ b/go.mod @@ -4,10 +4,10 @@ go 1.18 require ( github.com/Masterminds/semver/v3 v3.2.0 - github.com/ProtonMail/go-crypto v0.0.0-20230214155104-81033d7f4442 + github.com/ProtonMail/go-crypto v0.0.0-20230217124315-7d5c6f04bbb8 github.com/cyphar/filepath-securejoin v0.2.3 - github.com/distribution/distribution/v3 v3.0.0-20230131081513-cf87e8d07e8d - github.com/fluxcd/go-git-providers v0.13.0 + github.com/distribution/distribution/v3 v3.0.0-20230217093620-e64b08ada6c3 + github.com/fluxcd/go-git-providers v0.14.0 github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 github.com/fluxcd/helm-controller/api v0.30.0 github.com/fluxcd/image-automation-controller/api v0.30.0 @@ -16,15 +16,15 @@ require ( github.com/fluxcd/notification-controller/api v0.32.0 github.com/fluxcd/pkg/apis/meta v0.19.0 github.com/fluxcd/pkg/git v0.10.0 - github.com/fluxcd/pkg/git/gogit v0.5.0 - github.com/fluxcd/pkg/kustomize v0.13.0 - github.com/fluxcd/pkg/oci v0.18.0 - github.com/fluxcd/pkg/runtime v0.27.0 - github.com/fluxcd/pkg/sourceignore v0.3.0 - github.com/fluxcd/pkg/ssa v0.23.0 - github.com/fluxcd/pkg/ssh v0.7.0 + github.com/fluxcd/pkg/git/gogit v0.7.1 + github.com/fluxcd/pkg/kustomize v0.13.1 + github.com/fluxcd/pkg/oci v0.19.1 + github.com/fluxcd/pkg/runtime v0.29.0 + github.com/fluxcd/pkg/sourceignore v0.3.1 + github.com/fluxcd/pkg/ssa v0.23.1 + github.com/fluxcd/pkg/ssh v0.7.1 github.com/fluxcd/pkg/untar v0.2.0 - github.com/fluxcd/pkg/version v0.2.0 + github.com/fluxcd/pkg/version v0.2.1 github.com/fluxcd/source-controller/api v0.35.1 github.com/gonvenience/bunt v1.3.4 github.com/gonvenience/ytbx v1.4.4 @@ -35,7 +35,7 @@ require ( github.com/manifoldco/promptui v0.9.0 github.com/mattn/go-shellwords v1.0.12 github.com/olekukonko/tablewriter v0.0.5 - github.com/onsi/gomega v1.26.0 + github.com/onsi/gomega v1.27.0 github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 github.com/spf13/cobra v1.6.1 github.com/spf13/pflag v1.0.5 @@ -55,35 +55,32 @@ require ( sigs.k8s.io/yaml v1.3.0 ) -// Fix CVE-2022-32149 -replace golang.org/x/text => golang.org/x/text v0.4.0 - // Fix CVE-2022-28948 replace gopkg.in/yaml.v3 => gopkg.in/yaml.v3 v3.0.1 require ( - github.com/Azure/azure-sdk-for-go/sdk/azcore v1.3.0 // indirect - github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.2.0 // indirect - github.com/Azure/azure-sdk-for-go/sdk/internal v1.1.1 // indirect + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.3.1 // indirect + github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.2.1 // indirect + github.com/Azure/azure-sdk-for-go/sdk/internal v1.1.2 // indirect github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect - github.com/AzureAD/microsoft-authentication-library-for-go v0.7.0 // indirect + github.com/AzureAD/microsoft-authentication-library-for-go v0.8.1 // indirect github.com/BurntSushi/toml v1.0.0 // indirect github.com/MakeNowJust/heredoc v1.0.0 // indirect github.com/Microsoft/go-winio v0.6.0 // indirect github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d // indirect github.com/acomagu/bufpipe v1.0.3 // indirect - github.com/aws/aws-sdk-go-v2 v1.17.3 // indirect - github.com/aws/aws-sdk-go-v2/config v1.18.10 // indirect - github.com/aws/aws-sdk-go-v2/credentials v1.13.10 // indirect - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.21 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.27 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.21 // indirect - github.com/aws/aws-sdk-go-v2/internal/ini v1.3.28 // indirect - github.com/aws/aws-sdk-go-v2/service/ecr v1.18.1 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.21 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.12.0 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.0 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.18.2 // indirect + github.com/aws/aws-sdk-go-v2 v1.17.4 // indirect + github.com/aws/aws-sdk-go-v2/config v1.18.13 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.13.13 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.22 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.28 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.22 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.3.29 // indirect + github.com/aws/aws-sdk-go-v2/service/ecr v1.18.3 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.22 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.12.2 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.2 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.18.3 // indirect github.com/aws/smithy-go v1.13.5 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bshuster-repo/logrus-logstash-hook v1.0.0 // indirect @@ -118,11 +115,11 @@ require ( github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/go-errors/errors v1.4.2 // indirect github.com/go-git/gcfg v1.5.0 // indirect - github.com/go-git/go-billy/v5 v5.3.1 // indirect + github.com/go-git/go-billy/v5 v5.4.1 // indirect github.com/go-git/go-git/v5 v5.4.2 // indirect github.com/go-logr/logr v1.2.3 // indirect - github.com/go-openapi/jsonpointer v0.19.5 // indirect - github.com/go-openapi/jsonreference v0.20.0 // indirect + github.com/go-openapi/jsonpointer v0.19.6 // indirect + github.com/go-openapi/jsonreference v0.20.1 // indirect github.com/go-openapi/swag v0.22.3 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang-jwt/jwt/v4 v4.4.2 // indirect @@ -135,7 +132,7 @@ require ( github.com/gonvenience/wrap v1.1.2 // indirect github.com/google/btree v1.1.2 // indirect github.com/google/gnostic v0.6.9 // indirect - github.com/google/go-github/v48 v48.2.0 // indirect + github.com/google/go-github/v49 v49.1.0 // indirect github.com/google/go-querystring v1.1.0 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect @@ -186,27 +183,27 @@ require ( github.com/prometheus/procfs v0.8.0 // indirect github.com/rivo/uniseg v0.2.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect - github.com/sergi/go-diff v1.2.0 // indirect + github.com/sergi/go-diff v1.3.1 // indirect github.com/sirupsen/logrus v1.9.0 // indirect github.com/skeema/knownhosts v1.1.0 // indirect github.com/texttheater/golang-levenshtein v1.0.1 // indirect github.com/vbatts/tar-split v0.11.2 // indirect github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74 // indirect - github.com/xanzy/go-gitlab v0.77.0 // indirect + github.com/xanzy/go-gitlab v0.78.0 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect github.com/xlab/treeprint v1.1.0 // indirect github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43 // indirect github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50 // indirect github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f // indirect go.starlark.net v0.0.0-20221028183056-acb66ad56dd2 // indirect - golang.org/x/mod v0.7.0 // indirect - golang.org/x/net v0.6.0 // indirect - golang.org/x/oauth2 v0.2.0 // indirect + golang.org/x/mod v0.8.0 // indirect + golang.org/x/net v0.7.0 // indirect + golang.org/x/oauth2 v0.3.0 // indirect golang.org/x/sync v0.1.0 // indirect golang.org/x/sys v0.5.0 // indirect golang.org/x/text v0.7.0 // indirect golang.org/x/time v0.3.0 // indirect - golang.org/x/tools v0.4.0 // indirect + golang.org/x/tools v0.6.0 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/protobuf v1.28.1 // indirect @@ -216,7 +213,7 @@ require ( gopkg.in/yaml.v3 v3.0.1 // indirect k8s.io/component-base v0.26.1 // indirect k8s.io/klog/v2 v2.90.0 // indirect - k8s.io/kube-openapi v0.0.0-20221110221610-a28e98eb7c70 // indirect + k8s.io/kube-openapi v0.0.0-20230109183929-3758b55a6596 // indirect k8s.io/utils v0.0.0-20221128185143-99ec85e7a448 // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect diff --git a/go.sum b/go.sum index 2ebcd422..ab4d9902 100644 --- a/go.sum +++ b/go.sum @@ -32,16 +32,16 @@ cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RX cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/AdaLogics/go-fuzz-headers v0.0.0-20230106234847-43070de90fa1 h1:EKPd1INOIyr5hWOWhvpmQpY6tKjeG0hT1s3AMC/9fic= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.3.0 h1:VuHAcMq8pU1IWNT/m5yRaGqbK0BiQKHT8X4DTp9CHdI= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.3.0/go.mod h1:tZoQYdDZNOiIjdSn0dVWVfl0NEPGOJqVLzSrcFk4Is0= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.2.0 h1:t/W5MYAuQy81cvM8VUNfRLzhtKpXhVUAN7Cd7KVbTyc= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.2.0/go.mod h1:NBanQUfSWiWn3QEpWDTCU0IjBECKOYvl2R8xdRtMtiM= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.1.1 h1:Oj853U9kG+RLTCQXpjvOnrv0WaZHxgmZz1TlLywgOPY= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.1.1/go.mod h1:eWRD7oawr1Mu1sLCawqVc0CUiF43ia3qQMxLscsKQ9w= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.3.1 h1:gVXuXcWd1i4C2Ruxe321aU+IKGaStvGB/S90PUPB/W8= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.3.1/go.mod h1:DffdKW9RFqa5VgmsjUOsS7UE7eiA5iAvYUs63bhKQ0M= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.2.1 h1:T8quHYlUGyb/oqtSTwqlCr1ilJHrDv+ZtpSfo+hm1BU= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.2.1/go.mod h1:gLa1CL2RNE4s7M3yopJ/p0iq5DdY6Yv5ZUt9MTRZOQM= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.1.2 h1:+5VZ72z0Qan5Bog5C+ZkgSqUbeVUd9wgtHOrIKuc5b8= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.1.2/go.mod h1:eWRD7oawr1Mu1sLCawqVc0CUiF43ia3qQMxLscsKQ9w= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= -github.com/AzureAD/microsoft-authentication-library-for-go v0.7.0 h1:VgSJlZH5u0k2qxSpqyghcFQKmvYckj46uymKK5XzkBM= -github.com/AzureAD/microsoft-authentication-library-for-go v0.7.0/go.mod h1:BDJ5qMFKx9DugEg3+uQSDCdbYPr5s9vBTrL9P8TpqOU= +github.com/AzureAD/microsoft-authentication-library-for-go v0.8.1 h1:oPdPEZFSbl7oSPEAIPMPBMUmiL+mqgzBJwM/9qYcwNg= +github.com/AzureAD/microsoft-authentication-library-for-go v0.8.1/go.mod h1:4qFor3D/HDsvBME35Xy9rwW9DecL+M2sNw1ybjPtwA0= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v1.0.0 h1:dtDWrepsVPfW9H/4y7dDgFc2MBUSeJhlaDtK13CxFlU= github.com/BurntSushi/toml v1.0.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= @@ -58,8 +58,8 @@ github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2B github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4/go.mod h1:UBYPn8k0D56RtnR8RFQMjmh4KrZzWJ5o7Z9SYjossQ8= -github.com/ProtonMail/go-crypto v0.0.0-20230214155104-81033d7f4442 h1:OUJ54Fkd+AQXYmr9eOUxZfWNzpK3/e/KD40qa2rKHS4= -github.com/ProtonMail/go-crypto v0.0.0-20230214155104-81033d7f4442/go.mod h1:I0gYDMZ6Z5GRU7l58bNFSkPTFN6Yl12dsUlAZ8xy98g= +github.com/ProtonMail/go-crypto v0.0.0-20230217124315-7d5c6f04bbb8 h1:wPbRQzjjwFc0ih8puEVAOFGELsn1zoIIYdxvML7mDxA= +github.com/ProtonMail/go-crypto v0.0.0-20230217124315-7d5c6f04bbb8/go.mod h1:I0gYDMZ6Z5GRU7l58bNFSkPTFN6Yl12dsUlAZ8xy98g= github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d h1:UrqY+r/OJnIp5u0s1SbQ8dVfLCZJsnvazdBP5hS4iRs= github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ= github.com/acomagu/bufpipe v1.0.3 h1:fxAGrHZTgQ9w5QqVItgzwj235/uYZYgbXitB+dLupOk= @@ -75,30 +75,30 @@ github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuW github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= -github.com/aws/aws-sdk-go-v2 v1.17.3 h1:shN7NlnVzvDUgPQ+1rLMSxY8OWRNDRYtiqe0p/PgrhY= -github.com/aws/aws-sdk-go-v2 v1.17.3/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw= -github.com/aws/aws-sdk-go-v2/config v1.18.10 h1:Znce11DWswdh+5kOsIp+QaNfY9igp1QUN+fZHCKmeCI= -github.com/aws/aws-sdk-go-v2/config v1.18.10/go.mod h1:VATKco+pl+Qe1WW+RzvZTlPPe/09Gg9+vM0ZXsqb16k= -github.com/aws/aws-sdk-go-v2/credentials v1.13.10 h1:T4Y39IhelTLg1f3xiKJssThnFxsndS8B6OnmcXtKK+8= -github.com/aws/aws-sdk-go-v2/credentials v1.13.10/go.mod h1:tqAm4JmQaShel+Qi38hmd1QglSnnxaYt50k/9yGQzzc= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.21 h1:j9wi1kQ8b+e0FBVHxCqCGo4kxDU175hoDHcWAi0sauU= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.21/go.mod h1:ugwW57Z5Z48bpvUyZuaPy4Kv+vEfJWnIrky7RmkBvJg= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.27 h1:I3cakv2Uy1vNmmhRQmFptYDxOvBnwCdNwyw63N0RaRU= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.27/go.mod h1:a1/UpzeyBBerajpnP5nGZa9mGzsBn5cOKxm6NWQsvoI= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.21 h1:5NbbMrIzmUn/TXFqAle6mgrH5m9cOvMLRGL7pnG8tRE= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.21/go.mod h1:+Gxn8jYn5k9ebfHEqlhrMirFjSW0v0C9fI+KN5vk2kE= -github.com/aws/aws-sdk-go-v2/internal/ini v1.3.28 h1:KeTxcGdNnQudb46oOl4d90f2I33DF/c6q3RnZAmvQdQ= -github.com/aws/aws-sdk-go-v2/internal/ini v1.3.28/go.mod h1:yRZVr/iT0AqyHeep00SZ4YfBAKojXz08w3XMBscdi0c= -github.com/aws/aws-sdk-go-v2/service/ecr v1.18.1 h1:fZNQcqqyAcb34XZ6uNuDlmKIaZKRGdoXYfK5WLRjBbQ= -github.com/aws/aws-sdk-go-v2/service/ecr v1.18.1/go.mod h1:9yGOFsa2OcdyePojE89xNGtdBusTyc8ocjpiuFtFc0g= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.21 h1:5C6XgTViSb0bunmU57b3CT+MhxULqHH2721FVA+/kDM= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.21/go.mod h1:lRToEJsn+DRA9lW4O9L9+/3hjTkUzlzyzHqn8MTds5k= -github.com/aws/aws-sdk-go-v2/service/sso v1.12.0 h1:/2gzjhQowRLarkkBOGPXSRnb8sQ2RVsjdG1C/UliK/c= -github.com/aws/aws-sdk-go-v2/service/sso v1.12.0/go.mod h1:wo/B7uUm/7zw/dWhBJ4FXuw1sySU5lyIhVg1Bu2yL9A= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.0 h1:Jfly6mRxk2ZOSlbCvZfKNS7TukSx1mIzhSsqZ/IGSZI= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.0/go.mod h1:TZSH7xLO7+phDtViY/KUp9WGCJMQkLJ/VpgkTFd5gh8= -github.com/aws/aws-sdk-go-v2/service/sts v1.18.2 h1:J/4wIaGInCEYCGhTSruxCxeoA5cy91a+JT7cHFKFSHQ= -github.com/aws/aws-sdk-go-v2/service/sts v1.18.2/go.mod h1:+lGbb3+1ugwKrNTWcf2RT05Xmp543B06zDFTwiTLp7I= +github.com/aws/aws-sdk-go-v2 v1.17.4 h1:wyC6p9Yfq6V2y98wfDsj6OnNQa4w2BLGCLIxzNhwOGY= +github.com/aws/aws-sdk-go-v2 v1.17.4/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw= +github.com/aws/aws-sdk-go-v2/config v1.18.13 h1:v0xlYqbO6/EVlM8tUn2QEOA7btQxcgidEq2JRDBPTho= +github.com/aws/aws-sdk-go-v2/config v1.18.13/go.mod h1:r39wGSZB7wPDW1i54JyQXUpc5KsWjh5z/3S5D9eCqDg= +github.com/aws/aws-sdk-go-v2/credentials v1.13.13 h1:zw1KAc1kl00NYd3ofVmFrb09qnYlSQMeh+fmlQRAihI= +github.com/aws/aws-sdk-go-v2/credentials v1.13.13/go.mod h1:DW9nbIIF9MrIja0cBQrUpeWYQMSlNmP8fevLUyF9W38= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.22 h1:3aMfcTmoXtTZnaT86QlVaYh+BRMbvrrmZwIQ5jWqCZQ= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.22/go.mod h1:YGSIJyQ6D6FjKMQh16hVFSIUD54L4F7zTGePqYMYYJU= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.28 h1:r+XwaCLpIvCKjBIYy/HVZujQS9tsz5ohHG3ZIe0wKoE= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.28/go.mod h1:3lwChorpIM/BhImY/hy+Z6jekmN92cXGPI1QJasVPYY= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.22 h1:7AwGYXDdqRQYsluvKFmWoqpcOQJ4bH634SkYf3FNj/A= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.22/go.mod h1:EqK7gVrIGAHyZItrD1D8B0ilgwMD1GiWAmbU4u/JHNk= +github.com/aws/aws-sdk-go-v2/internal/ini v1.3.29 h1:J4xhFd6zHhdF9jPP0FQJ6WknzBboGMBNjKOv4iTuw4A= +github.com/aws/aws-sdk-go-v2/internal/ini v1.3.29/go.mod h1:TwuqRBGzxjQJIwH16/fOZodwXt2Zxa9/cwJC5ke4j7s= +github.com/aws/aws-sdk-go-v2/service/ecr v1.18.3 h1:kekMsmCO0l4ldUbz/GWUomiNgSZgpt0xnvdc72KAqfg= +github.com/aws/aws-sdk-go-v2/service/ecr v1.18.3/go.mod h1:53xgmccefO+AwKsxVKuTh2vo/IDOkeMWNpmDuhZH1Vc= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.22 h1:LjFQf8hFuMO22HkV5VWGLBvmCLBCLPivUAmpdpnp4Vs= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.22/go.mod h1:xt0Au8yPIwYXf/GYPy/vl4K3CgwhfQMYbrH7DlUUIws= +github.com/aws/aws-sdk-go-v2/service/sso v1.12.2 h1:EN102fWY7hI5u/2FPheTrwwMHkSXfl49RYkeEnJsrCU= +github.com/aws/aws-sdk-go-v2/service/sso v1.12.2/go.mod h1:IgV8l3sj22nQDd5qcAGY0WenwCzCphqdbFOpfktZPrI= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.2 h1:f1lmlce7r13CX1BPyPqt9oh/H+uqOWc9367lDoGGwNQ= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.2/go.mod h1:O1YSOg3aekZibh2SngvCRRG+cRHKKlYgxf/JBF/Kr/k= +github.com/aws/aws-sdk-go-v2/service/sts v1.18.3 h1:s49mSnsBZEXjfGBkRfmK+nPqzT7Lt3+t2SmAKNyHblw= +github.com/aws/aws-sdk-go-v2/service/sts v1.18.3/go.mod h1:b+psTJn33Q4qGoDaM7ZiOVVG8uVjGI6HaZ8WBHdgDgU= github.com/aws/smithy-go v1.13.5 h1:hgz0X/DX0dGqTYpGALqXJoRKRj5oQ7150i5FdTePzO8= github.com/aws/smithy-go v1.13.5/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= @@ -149,8 +149,8 @@ github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxG github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/distribution/distribution/v3 v3.0.0-20230131081513-cf87e8d07e8d h1:q1rtMRnFYz9NAVV4k2iL/w5mNkur3TJysH3Phi9Ns08= -github.com/distribution/distribution/v3 v3.0.0-20230131081513-cf87e8d07e8d/go.mod h1:WHNsWjnIn2V1LYOrME7e8KxSeKunYHsxEm4am0BUtcI= +github.com/distribution/distribution/v3 v3.0.0-20230217093620-e64b08ada6c3 h1:MyB9NThZnIXjes6iUBvxUSHZB8b2Gy1FrY+cAd3FNww= +github.com/distribution/distribution/v3 v3.0.0-20230217093620-e64b08ada6c3/go.mod h1:WHNsWjnIn2V1LYOrME7e8KxSeKunYHsxEm4am0BUtcI= github.com/dnaeon/go-vcr v1.1.0 h1:ReYa/UBrRyQdant9B4fNHGoCNKw6qh6P0fsdGmZpR7c= github.com/docker/cli v20.10.20+incompatible h1:lWQbHSHUFs7KraSN2jOJK7zbMS2jNCHI4mt4xUFUVQ4= github.com/docker/cli v20.10.20+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= @@ -195,8 +195,8 @@ github.com/felixge/httpsnoop v1.0.3 h1:s/nj+GCswXYzN5v2DpNMuMQYe+0DDwt5WVCU6CWBd github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0= github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= -github.com/fluxcd/go-git-providers v0.13.0 h1:VTuOMfatoqkCrEUOX5CVpSMiA1TIs0ioLh3LPmFCqiw= -github.com/fluxcd/go-git-providers v0.13.0/go.mod h1:VEItGJ67Xc/7Cadh/oPMPUimXv75R0XqHFtF3J4tIdE= +github.com/fluxcd/go-git-providers v0.14.0 h1:F662wkiMevhGYKCwe9AJItpq42aJbd+tQq7d5Yskh/k= +github.com/fluxcd/go-git-providers v0.14.0/go.mod h1:cxVVQEBEswAIgbRVi50Cf6pEM/+RhNcNwDpsIkN6pG0= github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 h1:Gm5sGGk+/Wq6RhX4xpCZ2IqjDp5XkjlhENaAuAlpdKc= github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4/go.mod h1:raWgfUV7lDQVXp4QXUaeNNJkRVKz97UQuF+0kdY7Vmo= github.com/fluxcd/helm-controller/api v0.30.0 h1:zunzaHGak5IThITRncqOsWqyvdoO6lDd5sP98ryTIcs= @@ -217,27 +217,27 @@ github.com/fluxcd/pkg/apis/meta v0.19.0 h1:CX75e/eaRWZDTzNdMSWomY1InlssLKcS8GQDS github.com/fluxcd/pkg/apis/meta v0.19.0/go.mod h1:7b6prDPsViyAzoY7eRfSPS0/MbXpGGsOMvRq2QrTKa4= github.com/fluxcd/pkg/git v0.10.0 h1:tO04FyUV3kmyJOpAKjMFZWClqr1JNGxS8RxI7znq6is= github.com/fluxcd/pkg/git v0.10.0/go.mod h1:zn3pJ4mRItezf6J0okHZbZ+3YNAGsjnhrS+Kbo+56Jw= -github.com/fluxcd/pkg/git/gogit v0.5.0 h1:3Fzx2W16K/37ZHT6WmLFuRYgs+CGvzka+dwY7ktoxJE= -github.com/fluxcd/pkg/git/gogit v0.5.0/go.mod h1:cqoJhKXCmWuN2ezD/2ECUYwR8gR7svMRJoHRr9VyTQc= -github.com/fluxcd/pkg/gittestserver v0.8.0 h1:YrYe63KScKlLxx0GAiQthx2XqHDx0vKitIIx4JnDtIo= -github.com/fluxcd/pkg/kustomize v0.13.0 h1:oC50lpGdz/04aH4dPS/kRBjo+7PUx7BgGsJtSS0CmmE= -github.com/fluxcd/pkg/kustomize v0.13.0/go.mod h1:6vAmxEe/41jBEspGq4OZA/4WlnszPyavm74TGSEVpXg= -github.com/fluxcd/pkg/oci v0.18.0 h1:x5n3gW1lX6wrqvWP4ZkOXJ8LqLKy891uKwifCXSqKi4= -github.com/fluxcd/pkg/oci v0.18.0/go.mod h1:zXoxvE4uuIEOgA98IM5Wv/uRxs7sdbaTlGDjzHb9yiA= -github.com/fluxcd/pkg/runtime v0.27.0 h1:zVA95Z0KvNjvZxEZhvIbJyJIwtaiv1aVttHZ4YB/FzY= -github.com/fluxcd/pkg/runtime v0.27.0/go.mod h1:fC1l4Wv1hnsqPKB46eDZBXF8RMZm5FXeU4bnJkwGkqk= -github.com/fluxcd/pkg/sourceignore v0.3.0 h1:pFO3hKV9ub+2SrNZPZE7xfiRhxsycRrd7JK7qB26nVw= -github.com/fluxcd/pkg/sourceignore v0.3.0/go.mod h1:ak3Tve/KwVzytZ5V2yBlGGpTJ/2oQ9kcP3iuwBOAHGo= -github.com/fluxcd/pkg/ssa v0.23.0 h1:e51n2642tyl8iytYQ68geg8E/6tLJcYqXl83HFrJcr4= -github.com/fluxcd/pkg/ssa v0.23.0/go.mod h1:fbnulY5zeKBC6dXwNIgMc9DfPjEgjfhweL031/9ZFKQ= -github.com/fluxcd/pkg/ssh v0.7.0 h1:FX5ky8SU9dYwbM6zEIDR3TSveLF01iyS95CtB5Ykpno= -github.com/fluxcd/pkg/ssh v0.7.0/go.mod h1:tCVZJI8jPOL0XCInJOrYGKapWA/zZCzqPtpiYUSQxww= +github.com/fluxcd/pkg/git/gogit v0.7.1 h1:9QQtx8olL9CE0RaDUIPGBvkuh1IYZ5i5iFLQbcSvcyU= +github.com/fluxcd/pkg/git/gogit v0.7.1/go.mod h1:QrYVKE25QpLTvM83Toec6KtVJ3WCnvvGTybL+2Zabxs= +github.com/fluxcd/pkg/gittestserver v0.8.1 h1:FMqnZBuS/11+9NhtLv9UAg+wm/v0Nf+hHeUOi2wJR3Q= +github.com/fluxcd/pkg/kustomize v0.13.1 h1:xfDghn/kRaa5vYN64dLTAL1b1B1tDwcXlnOAqmz5W28= +github.com/fluxcd/pkg/kustomize v0.13.1/go.mod h1:W+Nm9P8yUhTb8n3hpvceUnCAjl6DFsU0k5yI+HT2NE8= +github.com/fluxcd/pkg/oci v0.19.1 h1:18wiQDhp7OIx3+adezYX5nFTUb19tBe1r2E98ADBvwM= +github.com/fluxcd/pkg/oci v0.19.1/go.mod h1:R0uT66o2ZSiwGSrXBpakVhheG4Y+Xz68A6QoMFh7JU4= +github.com/fluxcd/pkg/runtime v0.29.0 h1:/BDitj/y5shWqczECCiZFsEm9FH7do4VBgMHBiRiol0= +github.com/fluxcd/pkg/runtime v0.29.0/go.mod h1:NrBONYHO5Piuzm6Y7QTS3cJRlgkgsDPn2EKB6gJ4BQw= +github.com/fluxcd/pkg/sourceignore v0.3.1 h1:Whub3VgltuCqzddTEZUdfq63VV/7bfOUOdigbLs5gHI= +github.com/fluxcd/pkg/sourceignore v0.3.1/go.mod h1:4LeIc8JccW189gj2nB6hDevBTGdVR9RNbJHdq4xaLNs= +github.com/fluxcd/pkg/ssa v0.23.1 h1:om5u4O2xU9ESZHf1wBzeyrsqe/nKf2+eIs9aXocnVW4= +github.com/fluxcd/pkg/ssa v0.23.1/go.mod h1:3RvpJRHRzE4z168elHxEJit76Ol7uyoBtNNDV5H85es= +github.com/fluxcd/pkg/ssh v0.7.1 h1:2Gn4gYAw06RmZuzNy5nbtG6ueV6k7wFntUARpFtylTM= +github.com/fluxcd/pkg/ssh v0.7.1/go.mod h1:vUoYqejhXyBnUf8cNuOxEYZabWUSPviHWsZX9eUyjso= github.com/fluxcd/pkg/tar v0.2.0 h1:HEUHgONQYsJGeZZ4x6h5nQU9Aox1I4T3bOp1faWTqf8= github.com/fluxcd/pkg/tar v0.2.0/go.mod h1:w0/TOC7kwBJhnSJn7TCABkc/I7ib1f2Yz6vOsbLBnhw= github.com/fluxcd/pkg/untar v0.2.0 h1:sJXU+FbJcNUb2ffLJNjeR3hwt3X2loVpOMlCUjyFw6E= github.com/fluxcd/pkg/untar v0.2.0/go.mod h1:33AyoWaPpjX/xXpczcfhQh2AkB63TFwiR2YwROtv23E= -github.com/fluxcd/pkg/version v0.2.0 h1:jG22c59Bsv6vL51N7Bqn8tjHArYOXrjbIkGArlIrv5w= -github.com/fluxcd/pkg/version v0.2.0/go.mod h1:umN1VAOV0sB1JDVwb8eXZzuuqIAEku+y+vcCVBBUIf0= +github.com/fluxcd/pkg/version v0.2.1 h1:RRH7+6qiWHdTvRNwpoBmilnubJ2C4FZYGgy5wTDVKVc= +github.com/fluxcd/pkg/version v0.2.1/go.mod h1:UmUYHDz4BxHQMesMUx3gYVrT2Wf66H49JpTg/PW+/OY= github.com/fluxcd/source-controller/api v0.35.1 h1:IHlbN7giz5kY4z9oWZ9QLNKtHAaxHdk9RbIurUPS1aI= github.com/fluxcd/source-controller/api v0.35.1/go.mod h1:TImPMy/MEwNpDu6qHsw9LlCznXaB8bSO8mnxBSFsX4Q= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= @@ -252,8 +252,9 @@ github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3Bop github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4= github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= github.com/go-git/go-billy/v5 v5.2.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= -github.com/go-git/go-billy/v5 v5.3.1 h1:CPiOUAzKtMRvolEKw+bG1PLRpT7D3LIs3/3ey4Aiu34= github.com/go-git/go-billy/v5 v5.3.1/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= +github.com/go-git/go-billy/v5 v5.4.1 h1:Uwp5tDRkPr+l/TnbHOQzp+tmJfLceOlbVucgpTz8ix4= +github.com/go-git/go-billy/v5 v5.4.1/go.mod h1:vjbugF6Fz7JIflbVpl1hJsGjSHNltrSw45YK/ukIvQg= github.com/go-git/go-git-fixtures/v4 v4.2.1/go.mod h1:K8zd3kDUAykwTdDCr+I0per6Y6vMiRR/nnVTBtavnB0= github.com/go-git/go-git-fixtures/v4 v4.3.1 h1:y5z6dd3qi8Hl+stezc8p3JxDkoTRqMAlKnXHuzrfjTQ= github.com/go-git/go-git-fixtures/v4 v4.3.1/go.mod h1:8LHG1a3SRW71ettAD/jW13h8c6AqjVSeL11RAdgaqpo= @@ -274,12 +275,10 @@ github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbV github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/zapr v1.2.3 h1:a9vnzlIBPQBBkeaR9IuMUfmVOrQlkoC4YfPoFkX3T7A= -github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= -github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonreference v0.20.0 h1:MYlu0sBgChmCfJxxUKZ8g1cPWFOB37YSZqewK7OKeyA= -github.com/go-openapi/jsonreference v0.20.0/go.mod h1:Ag74Ico3lPc+zR+qjn4XBUmXymS4zJbYVCZmcgkasdo= -github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE= +github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= +github.com/go-openapi/jsonreference v0.20.1 h1:FBLnyygC4/IZZr893oiomc9XaghoveYTrLC1F86HID8= +github.com/go-openapi/jsonreference v0.20.1/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g= github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= @@ -354,8 +353,8 @@ github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-containerregistry v0.13.0 h1:y1C7Z3e149OJbOPDBxLYR8ITPz8dTKqQwjErKVHJC8k= github.com/google/go-containerregistry v0.13.0/go.mod h1:J9FQ+eSS4a1aC2GNZxvNpbWhgp0487v+cgiilB4FqDo= -github.com/google/go-github/v48 v48.2.0 h1:68puzySE6WqUY9KWmpOsDEQfDZsso98rT6pZcz9HqcE= -github.com/google/go-github/v48 v48.2.0/go.mod h1:dDlehKBDo850ZPvCTK0sEqTCVWcrGl2LcDiajkYi89Y= +github.com/google/go-github/v49 v49.1.0 h1:LFkMgawGQ8dfzWLH/rNE0b3u1D3n6/dw7ZmrN3b+YFY= +github.com/google/go-github/v49 v49.1.0/go.mod h1:MUUzHPrhGniB6vUKa27y37likpipzG+BXXJbG04J334= github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= @@ -454,8 +453,6 @@ github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de h1:9TO3cAIGXtEhn github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9B/r2mtpb6U+EI2rYA5OAXxsYw6wTamcNW+zcE= github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= -github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/manifoldco/promptui v0.9.0 h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA= @@ -509,9 +506,9 @@ github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= -github.com/onsi/ginkgo/v2 v2.7.0 h1:/XxtEV3I3Eif/HobnVx9YmJgk8ENdRsuUmM+fLCFNow= -github.com/onsi/gomega v1.26.0 h1:03cDLK28U6hWvCAns6NeydX3zIm4SF3ci69ulidS32Q= -github.com/onsi/gomega v1.26.0/go.mod h1:r+zV744Re+DiYCIPRlYOTxn0YkOLcAnW8k1xXdMPGhM= +github.com/onsi/ginkgo/v2 v2.8.1 h1:xFTEVwOFa1D/Ty24Ws1npBWkDYEV9BqZrsDxVrVkrrU= +github.com/onsi/gomega v1.27.0 h1:QLidEla4bXUuZVFa4KX6JHCsuGgbi85LC/pCHrt/O08= +github.com/onsi/gomega v1.27.0/go.mod h1:i189pavgK95OSIipFBa74gC2V4qrQuvjuyGEr3GmbXA= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= @@ -568,8 +565,8 @@ github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQD github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= -github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= -github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= +github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= @@ -588,14 +585,19 @@ github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.4.0 h1:M2gUjqZET1qApGOWNSnZ49BAIMX4F/1plDv3+l31EJ4= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/texttheater/golang-levenshtein v1.0.1 h1:+cRNoVrfiwufQPhoMzB6N0Yf/Mqajr6t1lOv8GyGE2U= github.com/texttheater/golang-levenshtein v1.0.1/go.mod h1:PYAKrbF5sAiq9wd+H82hs7gNaen0CplQ9uvm6+enD/8= github.com/theckman/yacspin v0.13.12 h1:CdZ57+n0U6JMuh2xqjnjRq5Haj6v1ner2djtLQRzJr4= @@ -605,8 +607,8 @@ github.com/vbatts/tar-split v0.11.2 h1:Via6XqJr0hceW4wff3QRzD5gAk/tatMw/4ZA7cTlI github.com/vbatts/tar-split v0.11.2/go.mod h1:vV3ZuO2yWSVsz+pfFzDG/upWH1JhjOiEaWq6kXyQ3VI= github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74 h1:JwtAtbp7r/7QSyGz8mKUbYJBg2+6Cd7OjM8o/GNOcVo= github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74/go.mod h1:RmMWU37GKR2s6pgrIEB4ixgpVCt/cf7dnJv3fuH1J1c= -github.com/xanzy/go-gitlab v0.77.0 h1:UrbGlxkWVCbkpa6Fk6cM8ARh+rLACWemkJnsawT7t98= -github.com/xanzy/go-gitlab v0.77.0/go.mod h1:d/a0vswScO7Agg1CZNz15Ic6SSvBG9vfw8egL99t4kA= +github.com/xanzy/go-gitlab v0.78.0 h1:8jUHfQVAprG04Av5g0PxVd3CNsZ5hCbojIax7Hba1mE= +github.com/xanzy/go-gitlab v0.78.0/go.mod h1:DlByVTSXhPsJMYL6+cm8e8fTJjeBmhrXdC/yvkKKt6M= github.com/xanzy/ssh-agent v0.3.0/go.mod h1:3s9xbODqPuuhK9JV1R321M/FlMZSBvE5aY6eAcqrDh0= github.com/xanzy/ssh-agent v0.3.2/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= @@ -686,8 +688,8 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.7.0 h1:LapD9S96VoQRhi/GrNTqeBJFrUjs5UHCAtTlgwA5oZA= -golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -728,8 +730,8 @@ golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.6.0 h1:L4ZwwTvKW9gr0ZMS1yrHD9GZhIuVjOBBnaKH+SPQK0Q= -golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g= +golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= 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= @@ -737,8 +739,8 @@ golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.2.0 h1:GtQkldQ9m7yvzCL1V+LrYow3Khe0eJH0w7RbX/VbaIU= -golang.org/x/oauth2 v0.2.0/go.mod h1:Cwn6afJ8jrQwYMxQDTpISoXmXW9I6qF6vDeuuoX3Ibs= +golang.org/x/oauth2 v0.3.0 h1:6l90koy8/LaBLmLu8jpHeHexzMwEita0zFfYlggy2F8= +golang.org/x/oauth2 v0.3.0/go.mod h1:rQrIauxkUhJ6CuwEXwymO2/eh4xz2ZWF1nBkcxS+tGk= 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= @@ -813,6 +815,7 @@ golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= @@ -822,13 +825,23 @@ golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuX golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0 h1:n2a8QNdAb0sZNpU9R1ALUXBbY+w51fCQDN+7EdxNBsY= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= @@ -871,8 +884,8 @@ golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.4.0 h1:7mTAgkunk3fr4GAloyyCasadO6h9zSsQZbwvcaIciV4= -golang.org/x/tools v0.4.0/go.mod h1:UE5sM2OK9E/d67R0ANs2xJizIymRP5gJU295PvKXxjQ= +golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1011,8 +1024,8 @@ k8s.io/component-base v0.26.1 h1:4ahudpeQXHZL5kko+iDHqLj/FSGAEUnSVO0EBbgDd+4= k8s.io/component-base v0.26.1/go.mod h1:VHrLR0b58oC035w6YQiBSbtsf0ThuSwXP+p5dD/kAWU= k8s.io/klog/v2 v2.90.0 h1:VkTxIV/FjRXn1fgNNcKGM8cfmL1Z33ZjXRTVxKCoF5M= k8s.io/klog/v2 v2.90.0/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= -k8s.io/kube-openapi v0.0.0-20221110221610-a28e98eb7c70 h1:zfqQc1V6/ZgGpvrOVvr62OjiqQX4lZjfznK34NQwkqw= -k8s.io/kube-openapi v0.0.0-20221110221610-a28e98eb7c70/go.mod h1:+Axhij7bCpeqhklhUTe3xmOn6bWxolyZEeyaFpjGtl4= +k8s.io/kube-openapi v0.0.0-20230109183929-3758b55a6596 h1:8cNCQs+WqqnSpZ7y0LMQPKD+RZUHU17VqLPMW3qxnxc= +k8s.io/kube-openapi v0.0.0-20230109183929-3758b55a6596/go.mod h1:/BYxry62FuDzmI+i9B+X2pqfySRmSOW2ARmj5Zbqhj0= k8s.io/kubectl v0.26.1 h1:K8A0Jjlwg8GqrxOXxAbjY5xtmXYeYjLU96cHp2WMQ7s= k8s.io/kubectl v0.26.1/go.mod h1:miYFVzldVbdIiXMrHZYmL/EDWwJKM+F0sSsdxsATFPo= k8s.io/utils v0.0.0-20221128185143-99ec85e7a448 h1:KTgPnR10d5zhztWptI952TNtt/4u5h3IzDXkdIMuo2Y= From a4e1b80ba7ece29008c601a60e1de95ac098b4cc Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Fri, 17 Feb 2023 16:51:17 +0100 Subject: [PATCH 404/818] tests/azure: update dependencies - github.com/fluxcd/helm-controller/api v0.30.0 - github.com/fluxcd/image-automation-controller/api v0.30.0 - github.com/fluxcd/kustomize-controller/api v0.34.0 - github.com/fluxcd/notification-controller/api v0.32.0 Signed-off-by: Hidde Beydals --- tests/azure/go.mod | 10 +++++----- tests/azure/go.sum | 20 ++++++++++---------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/tests/azure/go.mod b/tests/azure/go.mod index 22b2c8c4..054f4bce 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -5,11 +5,11 @@ go 1.19 require ( github.com/Azure/azure-event-hubs-go/v3 v3.4.0 github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 - github.com/fluxcd/helm-controller/api v0.28.1 - github.com/fluxcd/image-automation-controller/api v0.28.0 + github.com/fluxcd/helm-controller/api v0.30.0 + github.com/fluxcd/image-automation-controller/api v0.30.0 github.com/fluxcd/image-reflector-controller/api v0.25.0 - github.com/fluxcd/kustomize-controller/api v0.32.0 - github.com/fluxcd/notification-controller/api v0.30.2 + github.com/fluxcd/kustomize-controller/api v0.34.0 + github.com/fluxcd/notification-controller/api v0.32.0 github.com/fluxcd/pkg/apis/event v0.3.0 github.com/fluxcd/pkg/apis/meta v0.19.0 github.com/fluxcd/pkg/git v0.8.0 @@ -57,7 +57,7 @@ require ( github.com/emirpasic/gods v1.18.1 // indirect github.com/evanphx/json-patch/v5 v5.6.0 // indirect github.com/fluxcd/pkg/apis/acl v0.1.0 // indirect - github.com/fluxcd/pkg/apis/kustomize v0.7.0 // indirect + github.com/fluxcd/pkg/apis/kustomize v0.8.0 // indirect github.com/fluxcd/pkg/ssh v0.7.0 // indirect github.com/fluxcd/pkg/version v0.2.0 // indirect github.com/go-git/gcfg v1.5.0 // indirect diff --git a/tests/azure/go.sum b/tests/azure/go.sum index 1cb6b7c3..7af252f6 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -128,22 +128,22 @@ github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 h1:Gm5sGGk+/Wq6RhX4xpCZ2IqjDp5XkjlhENaAuAlpdKc= github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4/go.mod h1:raWgfUV7lDQVXp4QXUaeNNJkRVKz97UQuF+0kdY7Vmo= -github.com/fluxcd/helm-controller/api v0.28.1 h1:2qjZymRAbl/OqId2lpKCzuleKhId34X1zQ0rcPlMKFQ= -github.com/fluxcd/helm-controller/api v0.28.1/go.mod h1:/qCtlP718rveiAL7Mova4fGAk0aZv2qyYQn87zcUNhs= -github.com/fluxcd/image-automation-controller/api v0.28.0 h1:BYiOP28h/QRuZTZixlmMJ3RnQw+FGAn54nVsoUjNXi8= -github.com/fluxcd/image-automation-controller/api v0.28.0/go.mod h1:ztBI5X/dEzZuJOf7igqnx6ZvrSGtrXLmCvP5ieb3fWc= +github.com/fluxcd/helm-controller/api v0.30.0 h1:zunzaHGak5IThITRncqOsWqyvdoO6lDd5sP98ryTIcs= +github.com/fluxcd/helm-controller/api v0.30.0/go.mod h1:EfT8NQAybkDbfmqQlb1JoMtwEKudaQcHSsWQpWRdhGE= +github.com/fluxcd/image-automation-controller/api v0.30.0 h1:gO8guWCTAMUzMk0UsWbRfbJyURpg1hUR7Cva3CpAQYg= +github.com/fluxcd/image-automation-controller/api v0.30.0/go.mod h1:bYbRyiyLEuVJkA+8WxLvRAsW9+OHbf8q9FHZVE2pJFs= github.com/fluxcd/image-reflector-controller/api v0.25.0 h1:tK0Hc7Xxr5z6wtBvLTX/cEwjt9YZdidwQ6JQRZuni3w= github.com/fluxcd/image-reflector-controller/api v0.25.0/go.mod h1:VXMXfQ5nLZtP+VKuqxYlQOyJ5aFjvC8YpFp1fSwcEAQ= -github.com/fluxcd/kustomize-controller/api v0.32.0 h1:5QGLV5xRI8S3tUFJNV+vVzy/pdl0d6Ua0AccWwGRKfs= -github.com/fluxcd/kustomize-controller/api v0.32.0/go.mod h1:t2pqIe1SMzdZIAG/aietrg3XpRXmpcubf0uxDJOryEA= -github.com/fluxcd/notification-controller/api v0.30.2 h1:IOxRm/ALdKTk6Xwwc3Tpsfybze3/zVruaI3GN6F+KrA= -github.com/fluxcd/notification-controller/api v0.30.2/go.mod h1:Ve4SE6jeiGlyItvHa7/UpTPOVC6ac5K76Frv1P7hqLw= +github.com/fluxcd/kustomize-controller/api v0.34.0 h1:azw0y8AUfNSc1r3ZJkpbf8JKfpEs1Po980NqxuaJ8Iw= +github.com/fluxcd/kustomize-controller/api v0.34.0/go.mod h1:3KgYtDR0oSVU/CL4nokdQEGKOWSq/jXvmRh9AQ8sRF8= +github.com/fluxcd/notification-controller/api v0.32.0 h1:PAWyqUEksEt/lY+0+MyW4jtWlu1k4rrmoYo7RvKcrGI= +github.com/fluxcd/notification-controller/api v0.32.0/go.mod h1:0yUeBG8O6R5O9L3NS7TnLxZdni6auheTxM9gPMlgxMY= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= github.com/fluxcd/pkg/apis/event v0.3.0 h1:B+IXmfSniUGfoczheNAH0YULgS+ejxMl58RyWlvLa1c= github.com/fluxcd/pkg/apis/event v0.3.0/go.mod h1:xYOOlf+9gCBSYcs93N2XAbJvSVwuVBDBUzqhR+cAo7M= -github.com/fluxcd/pkg/apis/kustomize v0.7.0 h1:X2htBmJ91nGYv4d93gin665MFWKNGiNwUiZ08/Zz0hY= -github.com/fluxcd/pkg/apis/kustomize v0.7.0/go.mod h1:Mu+KdktsEKWA4l/33CZdY5lB4hz51mqfcLzBZSwAqVg= +github.com/fluxcd/pkg/apis/kustomize v0.8.0 h1:A6aLolxPV2Sll44SOHiX96lbXXmRZmS5BoEerkRHrfM= +github.com/fluxcd/pkg/apis/kustomize v0.8.0/go.mod h1:9DPEVSfVIkiC2H3Dk6Ght4YJkswhYIaufXla4tB5Y84= github.com/fluxcd/pkg/apis/meta v0.19.0 h1:CX75e/eaRWZDTzNdMSWomY1InlssLKcS8GQDSg/aopI= github.com/fluxcd/pkg/apis/meta v0.19.0/go.mod h1:7b6prDPsViyAzoY7eRfSPS0/MbXpGGsOMvRq2QrTKa4= github.com/fluxcd/pkg/git v0.8.0 h1:7mIbdqSf+qXwY17+A+Kge2yWIJCMJ1p1DiBDGnKRohg= From 6e81e82c8c60109c0190819682ca1752e7d23be7 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Fri, 17 Feb 2023 16:53:10 +0100 Subject: [PATCH 405/818] tests/azure: update other dependencies - github.com/fluxcd/pkg/apis/event to v0.4.0 - github.com/fluxcd/pkg/git to v0.10.0 - github.com/fluxcd/pkg/git/gogit to v0.7.1 - github.com/hashicorp/hc-install to v0.5.0 Signed-off-by: Hidde Beydals --- tests/azure/go.mod | 39 +++++++++---------- tests/azure/go.sum | 94 +++++++++++++++++++++++++++++++--------------- 2 files changed, 82 insertions(+), 51 deletions(-) diff --git a/tests/azure/go.mod b/tests/azure/go.mod index 054f4bce..84db859c 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -10,12 +10,12 @@ require ( github.com/fluxcd/image-reflector-controller/api v0.25.0 github.com/fluxcd/kustomize-controller/api v0.34.0 github.com/fluxcd/notification-controller/api v0.32.0 - github.com/fluxcd/pkg/apis/event v0.3.0 + github.com/fluxcd/pkg/apis/event v0.4.0 github.com/fluxcd/pkg/apis/meta v0.19.0 - github.com/fluxcd/pkg/git v0.8.0 - github.com/fluxcd/pkg/git/gogit v0.5.0 + github.com/fluxcd/pkg/git v0.10.0 + github.com/fluxcd/pkg/git/gogit v0.7.1 github.com/fluxcd/source-controller/api v0.35.1 - github.com/hashicorp/hc-install v0.4.0 + github.com/hashicorp/hc-install v0.5.0 github.com/hashicorp/terraform-exec v0.17.3 github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 github.com/stretchr/testify v1.8.1 @@ -27,9 +27,6 @@ require ( sigs.k8s.io/controller-runtime v0.14.4 ) -// Fix CVE-2022-32149 -replace golang.org/x/text => golang.org/x/text v0.4.0 - // Fix CVE-2022-28948 replace gopkg.in/yaml.v3 => gopkg.in/yaml.v3 v3.0.1 @@ -45,11 +42,11 @@ require ( github.com/Azure/go-autorest/autorest/validation v0.3.1 // indirect github.com/Azure/go-autorest/logger v0.2.1 // indirect github.com/Azure/go-autorest/tracing v0.6.0 // indirect - github.com/Masterminds/semver/v3 v3.1.1 // indirect + github.com/Masterminds/semver/v3 v3.2.0 // indirect github.com/Microsoft/go-winio v0.6.0 // indirect - github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4 // indirect + github.com/ProtonMail/go-crypto v0.0.0-20230214155104-81033d7f4442 // indirect github.com/acomagu/bufpipe v1.0.3 // indirect - github.com/cloudflare/circl v1.3.1 // indirect + github.com/cloudflare/circl v1.3.2 // indirect github.com/cyphar/filepath-securejoin v0.2.3 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/devigned/tab v0.1.1 // indirect @@ -58,10 +55,10 @@ require ( github.com/evanphx/json-patch/v5 v5.6.0 // indirect github.com/fluxcd/pkg/apis/acl v0.1.0 // indirect github.com/fluxcd/pkg/apis/kustomize v0.8.0 // indirect - github.com/fluxcd/pkg/ssh v0.7.0 // indirect - github.com/fluxcd/pkg/version v0.2.0 // indirect + github.com/fluxcd/pkg/ssh v0.7.1 // indirect + github.com/fluxcd/pkg/version v0.2.1 // indirect github.com/go-git/gcfg v1.5.0 // indirect - github.com/go-git/go-billy/v5 v5.3.1 // indirect + github.com/go-git/go-billy/v5 v5.4.1 // indirect github.com/go-logr/logr v1.2.3 // indirect github.com/go-openapi/jsonpointer v0.19.5 // indirect github.com/go-openapi/jsonreference v0.20.0 // indirect @@ -92,20 +89,20 @@ require ( github.com/pjbgf/sha1cd v0.2.3 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/sergi/go-diff v1.2.0 // indirect + github.com/sergi/go-diff v1.3.1 // indirect github.com/skeema/knownhosts v1.1.0 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect github.com/zclconf/go-cty v1.11.0 // indirect go.uber.org/atomic v1.10.0 // indirect - golang.org/x/crypto v0.4.0 // indirect - golang.org/x/mod v0.7.0 // indirect - golang.org/x/net v0.4.0 // indirect + golang.org/x/crypto v0.6.0 // indirect + golang.org/x/mod v0.8.0 // indirect + golang.org/x/net v0.7.0 // indirect golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b // indirect - golang.org/x/sys v0.3.0 // indirect - golang.org/x/term v0.3.0 // indirect - golang.org/x/text v0.5.0 // indirect + golang.org/x/sys v0.5.0 // indirect + golang.org/x/term v0.5.0 // indirect + golang.org/x/text v0.7.0 // indirect golang.org/x/time v0.3.0 // indirect - golang.org/x/tools v0.4.0 // indirect + golang.org/x/tools v0.6.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/protobuf v1.28.1 // indirect gopkg.in/inf.v0 v0.9.1 // indirect diff --git a/tests/azure/go.sum b/tests/azure/go.sum index 7af252f6..ca45a9e5 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -63,8 +63,11 @@ github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUM github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030IGemrRc= +github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= +github.com/Masterminds/semver/v3 v3.2.0 h1:3MEsd0SM6jqZojhjLWWeBY+Kcjy9i6MQAeY7YgDP83g= +github.com/Masterminds/semver/v3 v3.2.0/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= +github.com/Masterminds/sprig/v3 v3.2.1/go.mod h1:UoaO7Yp8KlPnJIYWTFkMaqPUYKTfGFPhxNuwnnxkKlk= github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= @@ -72,8 +75,9 @@ github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2y github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= -github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4 h1:ra2OtmuW0AE5csawV4YXMNGNQQXvLRps3z2Z59OPO+I= github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4/go.mod h1:UBYPn8k0D56RtnR8RFQMjmh4KrZzWJ5o7Z9SYjossQ8= +github.com/ProtonMail/go-crypto v0.0.0-20230214155104-81033d7f4442 h1:OUJ54Fkd+AQXYmr9eOUxZfWNzpK3/e/KD40qa2rKHS4= +github.com/ProtonMail/go-crypto v0.0.0-20230214155104-81033d7f4442/go.mod h1:I0gYDMZ6Z5GRU7l58bNFSkPTFN6Yl12dsUlAZ8xy98g= github.com/acomagu/bufpipe v1.0.3 h1:fxAGrHZTgQ9w5QqVItgzwj235/uYZYgbXitB+dLupOk= github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= @@ -82,9 +86,11 @@ github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuW github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/apparentlymart/go-textseg v1.0.0/go.mod h1:z96Txxhf3xSFMPmb5X/1W05FF/Nj9VFpLOpjS5yuumk= github.com/apparentlymart/go-textseg/v13 v13.0.0/go.mod h1:ZK2fH7c4NqDTLtiYLvIkEghdlcqw7yxLeM89kiTRPUo= +github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= @@ -96,8 +102,8 @@ github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5P github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cloudflare/circl v1.1.0/go.mod h1:prBCrKB9DV4poKZY1l9zBXg2QJY7mvgRvtMxxK7fi4I= -github.com/cloudflare/circl v1.3.1 h1:4OVCZRL62ijwEwxnF6I7hLwxvIYi3VaZt8TflkqtrtA= -github.com/cloudflare/circl v1.3.1/go.mod h1:+CauBF6R70Jqcyl8N2hC8pAXYbWkGIezuSbuGLtRhnw= +github.com/cloudflare/circl v1.3.2 h1:VWp8dY3yH69fdM7lM6A1+NhhVoDu9vqK0jOgmkQHFWk= +github.com/cloudflare/circl v1.3.2/go.mod h1:+CauBF6R70Jqcyl8N2hC8pAXYbWkGIezuSbuGLtRhnw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= @@ -124,6 +130,7 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.m github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJCLunww= github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0= github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 h1:Gm5sGGk+/Wq6RhX4xpCZ2IqjDp5XkjlhENaAuAlpdKc= @@ -140,21 +147,21 @@ github.com/fluxcd/notification-controller/api v0.32.0 h1:PAWyqUEksEt/lY+0+MyW4jt github.com/fluxcd/notification-controller/api v0.32.0/go.mod h1:0yUeBG8O6R5O9L3NS7TnLxZdni6auheTxM9gPMlgxMY= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= -github.com/fluxcd/pkg/apis/event v0.3.0 h1:B+IXmfSniUGfoczheNAH0YULgS+ejxMl58RyWlvLa1c= -github.com/fluxcd/pkg/apis/event v0.3.0/go.mod h1:xYOOlf+9gCBSYcs93N2XAbJvSVwuVBDBUzqhR+cAo7M= +github.com/fluxcd/pkg/apis/event v0.4.0 h1:UPCC269KjgKgkmtiCiBq/DNue/EpXy8Tq1zFx7oRXZM= +github.com/fluxcd/pkg/apis/event v0.4.0/go.mod h1:xYOOlf+9gCBSYcs93N2XAbJvSVwuVBDBUzqhR+cAo7M= github.com/fluxcd/pkg/apis/kustomize v0.8.0 h1:A6aLolxPV2Sll44SOHiX96lbXXmRZmS5BoEerkRHrfM= github.com/fluxcd/pkg/apis/kustomize v0.8.0/go.mod h1:9DPEVSfVIkiC2H3Dk6Ght4YJkswhYIaufXla4tB5Y84= github.com/fluxcd/pkg/apis/meta v0.19.0 h1:CX75e/eaRWZDTzNdMSWomY1InlssLKcS8GQDSg/aopI= github.com/fluxcd/pkg/apis/meta v0.19.0/go.mod h1:7b6prDPsViyAzoY7eRfSPS0/MbXpGGsOMvRq2QrTKa4= -github.com/fluxcd/pkg/git v0.8.0 h1:7mIbdqSf+qXwY17+A+Kge2yWIJCMJ1p1DiBDGnKRohg= -github.com/fluxcd/pkg/git v0.8.0/go.mod h1:3deiLPws4DSQ3hqwtQd7Dt66GXTN/4RcT/yHAljXaHo= -github.com/fluxcd/pkg/git/gogit v0.5.0 h1:3Fzx2W16K/37ZHT6WmLFuRYgs+CGvzka+dwY7ktoxJE= -github.com/fluxcd/pkg/git/gogit v0.5.0/go.mod h1:cqoJhKXCmWuN2ezD/2ECUYwR8gR7svMRJoHRr9VyTQc= -github.com/fluxcd/pkg/gittestserver v0.8.0 h1:YrYe63KScKlLxx0GAiQthx2XqHDx0vKitIIx4JnDtIo= -github.com/fluxcd/pkg/ssh v0.7.0 h1:FX5ky8SU9dYwbM6zEIDR3TSveLF01iyS95CtB5Ykpno= -github.com/fluxcd/pkg/ssh v0.7.0/go.mod h1:tCVZJI8jPOL0XCInJOrYGKapWA/zZCzqPtpiYUSQxww= -github.com/fluxcd/pkg/version v0.2.0 h1:jG22c59Bsv6vL51N7Bqn8tjHArYOXrjbIkGArlIrv5w= -github.com/fluxcd/pkg/version v0.2.0/go.mod h1:umN1VAOV0sB1JDVwb8eXZzuuqIAEku+y+vcCVBBUIf0= +github.com/fluxcd/pkg/git v0.10.0 h1:tO04FyUV3kmyJOpAKjMFZWClqr1JNGxS8RxI7znq6is= +github.com/fluxcd/pkg/git v0.10.0/go.mod h1:zn3pJ4mRItezf6J0okHZbZ+3YNAGsjnhrS+Kbo+56Jw= +github.com/fluxcd/pkg/git/gogit v0.7.1 h1:9QQtx8olL9CE0RaDUIPGBvkuh1IYZ5i5iFLQbcSvcyU= +github.com/fluxcd/pkg/git/gogit v0.7.1/go.mod h1:QrYVKE25QpLTvM83Toec6KtVJ3WCnvvGTybL+2Zabxs= +github.com/fluxcd/pkg/gittestserver v0.8.1 h1:FMqnZBuS/11+9NhtLv9UAg+wm/v0Nf+hHeUOi2wJR3Q= +github.com/fluxcd/pkg/ssh v0.7.1 h1:2Gn4gYAw06RmZuzNy5nbtG6ueV6k7wFntUARpFtylTM= +github.com/fluxcd/pkg/ssh v0.7.1/go.mod h1:vUoYqejhXyBnUf8cNuOxEYZabWUSPviHWsZX9eUyjso= +github.com/fluxcd/pkg/version v0.2.1 h1:RRH7+6qiWHdTvRNwpoBmilnubJ2C4FZYGgy5wTDVKVc= +github.com/fluxcd/pkg/version v0.2.1/go.mod h1:UmUYHDz4BxHQMesMUx3gYVrT2Wf66H49JpTg/PW+/OY= github.com/fluxcd/source-controller/api v0.35.1 h1:IHlbN7giz5kY4z9oWZ9QLNKtHAaxHdk9RbIurUPS1aI= github.com/fluxcd/source-controller/api v0.35.1/go.mod h1:TImPMy/MEwNpDu6qHsw9LlCznXaB8bSO8mnxBSFsX4Q= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= @@ -167,8 +174,9 @@ github.com/gliderlabs/ssh v0.3.5/go.mod h1:8XB4KraRrX39qHhT6yxPsHedjA08I/uBVwj4x github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4= github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= github.com/go-git/go-billy/v5 v5.2.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= -github.com/go-git/go-billy/v5 v5.3.1 h1:CPiOUAzKtMRvolEKw+bG1PLRpT7D3LIs3/3ey4Aiu34= github.com/go-git/go-billy/v5 v5.3.1/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= +github.com/go-git/go-billy/v5 v5.4.1 h1:Uwp5tDRkPr+l/TnbHOQzp+tmJfLceOlbVucgpTz8ix4= +github.com/go-git/go-billy/v5 v5.4.1/go.mod h1:vjbugF6Fz7JIflbVpl1hJsGjSHNltrSw45YK/ukIvQg= github.com/go-git/go-git-fixtures/v4 v4.2.1/go.mod h1:K8zd3kDUAykwTdDCr+I0per6Y6vMiRR/nnVTBtavnB0= github.com/go-git/go-git-fixtures/v4 v4.3.1 h1:y5z6dd3qi8Hl+stezc8p3JxDkoTRqMAlKnXHuzrfjTQ= github.com/go-git/go-git-fixtures/v4 v4.3.1/go.mod h1:8LHG1a3SRW71ettAD/jW13h8c6AqjVSeL11RAdgaqpo= @@ -266,6 +274,7 @@ github.com/hashicorp/go-checkpoint v0.5.0/go.mod h1:7nfLNL10NsxqO4iWuW6tWW0HjZuD github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= +github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= @@ -274,13 +283,17 @@ github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mO github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/hc-install v0.4.0 h1:cZkRFr1WVa0Ty6x5fTvL1TuO1flul231rWkGH92oYYk= -github.com/hashicorp/hc-install v0.4.0/go.mod h1:5d155H8EC5ewegao9A4PUTMNPZaq+TbOzkJJZ4vrXeI= +github.com/hashicorp/hc-install v0.5.0 h1:D9bl4KayIYKEeJ4vUDe9L5huqxZXczKaykSRcmQ0xY0= +github.com/hashicorp/hc-install v0.5.0/go.mod h1:JyzMfbzfSBSjoDCRPna1vi/24BEDxFaCPfdHtM5SCdo= +github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= github.com/hashicorp/terraform-exec v0.17.3 h1:MX14Kvnka/oWGmIkyuyvL6POx25ZmKrjlaclkx3eErU= github.com/hashicorp/terraform-exec v0.17.3/go.mod h1:+NELG0EqQekJzhvikkeQsOAZpsw0cv/03rbeQJqscAI= github.com/hashicorp/terraform-json v0.14.0 h1:sh9iZ1Y8IFJLx+xQiKHGud6/TSUCM0N8e17dKDpqV7s= github.com/hashicorp/terraform-json v0.14.0/go.mod h1:5A9HIWPkk4e5aeeXIBbkcOvaZbIYnAIkEyqP2pNSckM= +github.com/huandu/xstrings v1.3.1/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= +github.com/huandu/xstrings v1.3.2/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk= github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= @@ -318,15 +331,20 @@ github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0 github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/matryer/is v1.2.0 h1:92UTHpy8CDwaJ08GqLDzhhuixiBUUD1p3AU6PHddz4A= github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= +github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 h1:YH424zrwLTlyHSH/GzLMJeu5zhYVZSx5RQxGKm1h96s= github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5/go.mod h1:PoGiBqKSQK1vIfQ+yVaFcGjDySHvym6FM1cNYnwzbrY= +github.com/mitchellh/cli v1.1.5/go.mod h1:v8+iFts2sPIKUV1ltktPXMCC8fumSKFItNcD2cLtRR4= +github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= @@ -337,7 +355,7 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/onsi/ginkgo/v2 v2.6.0 h1:9t9b9vRUbFq3C4qKFCGkVuq/fIHji802N1nrtkh1mNc= -github.com/onsi/gomega v1.24.1 h1:KORJXNNTzJXzu4ScJWssJfJMnJ+2QJqhoQSRwNlze9E= +github.com/onsi/gomega v1.26.0 h1:03cDLK28U6hWvCAns6NeydX3zIm4SF3ci69ulidS32Q= github.com/pjbgf/sha1cd v0.2.3 h1:uKQP/7QOzNtKYH7UTohZLcjF5/55EnTw0jO/Ru4jZwI= github.com/pjbgf/sha1cd v0.2.3/go.mod h1:HOK9QrgzdHpbc2Kzip0Q1yi3M2MFGPADtR6HjG65m5M= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -345,6 +363,7 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/prometheus/client_golang v1.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4= @@ -354,14 +373,16 @@ github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6L github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/sebdah/goldie v1.0.0/go.mod h1:jXP4hmWywNEwZzhMuv2ccnqTSFpuq8iyQhtQdkkZBH4= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= -github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= -github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= +github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= +github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= github.com/skeema/knownhosts v1.1.0 h1:Wvr9V0MxhjRbl3f9nMnKnFfiWTJmtECJ9Njkea3ysW0= github.com/skeema/knownhosts v1.1.0/go.mod h1:sKFq3RD6/TKZkSWn8boUbDC7Qkgcv+8XXijpFO6roag= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -372,6 +393,7 @@ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXf github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= @@ -443,8 +465,9 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.7.0 h1:LapD9S96VoQRhi/GrNTqeBJFrUjs5UHCAtTlgwA5oZA= golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180811021610-c39426892332/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -480,8 +503,8 @@ golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.4.0 h1:Q5QPcMlvfxFTAPV0+07Xz/MpK9NTXu2VDUuy0FeMfaU= -golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= +golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g= +golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= 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= @@ -546,21 +569,32 @@ golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.3.0 h1:w8ZOecv6NaNa/zC8944JTU3vz4u6Lagfk4RPQxv92NQ= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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= golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.3.0 h1:qoo4akIqOcDME5bhc/NgxUdovd6BSS2uMsVjB56q1xI= -golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= -golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= +golang.org/x/term v0.5.0 h1:n2a8QNdAb0sZNpU9R1ALUXBbY+w51fCQDN+7EdxNBsY= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= @@ -603,8 +637,8 @@ golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.4.0 h1:7mTAgkunk3fr4GAloyyCasadO6h9zSsQZbwvcaIciV4= -golang.org/x/tools v0.4.0/go.mod h1:UE5sM2OK9E/d67R0ANs2xJizIymRP5gJU295PvKXxjQ= +golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= From 7b731f77773520a87e4f82da49ffe2f00d119360 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Feb 2023 02:05:21 +0000 Subject: [PATCH 406/818] build(deps): bump fossa-contrib/fossa-action from 1.2.0 to 2.0.0 Bumps [fossa-contrib/fossa-action](https://github.com/fossa-contrib/fossa-action) from 1.2.0 to 2.0.0. - [Release notes](https://github.com/fossa-contrib/fossa-action/releases) - [Changelog](https://github.com/fossa-contrib/fossa-action/blob/master/CHANGELOG.md) - [Commits](https://github.com/fossa-contrib/fossa-action/compare/6cffaa064112e1cf9b5798c6224f9487dc1ec316...6728dc6fe9a068c648d080c33829ffbe56565023) --- updated-dependencies: - dependency-name: fossa-contrib/fossa-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/scan.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index e2b95886..5bb6e11f 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -19,7 +19,7 @@ jobs: steps: - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c - name: Run FOSSA scan and upload build data - uses: fossa-contrib/fossa-action@6cffaa064112e1cf9b5798c6224f9487dc1ec316 # v1 + uses: fossa-contrib/fossa-action@6728dc6fe9a068c648d080c33829ffbe56565023 # v1 with: # FOSSA Push-Only API Token fossa-api-key: 5ee8bf422db1471e0bcf2bcb289185de From 7490d4d4b8a03dac37bfdbaba235ef254e793285 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Sat, 11 Feb 2023 12:35:02 +0200 Subject: [PATCH 407/818] Add command to print the reconcilers status Signed-off-by: Stefan Prodan --- cmd/flux/stats.go | 219 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 219 insertions(+) create mode 100644 cmd/flux/stats.go diff --git a/cmd/flux/stats.go b/cmd/flux/stats.go new file mode 100644 index 00000000..fa6eb47f --- /dev/null +++ b/cmd/flux/stats.go @@ -0,0 +1,219 @@ +/* +Copyright 2023 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "context" + "fmt" + "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/flux2/pkg/printers" + helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" + autov1 "github.com/fluxcd/image-automation-controller/api/v1beta1" + imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta1" + kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" + notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + "github.com/spf13/cobra" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "sigs.k8s.io/cli-utils/pkg/kstatus/status" + "sigs.k8s.io/controller-runtime/pkg/client" +) + +var statsCmd = &cobra.Command{ + Use: "stats", + Short: "Stats of Flux reconciles", + Long: `The stats command prints a report of Flux custom resources present on a cluster, +including their reconcile status and the amount of cumulative storage used for each source type`, + Example: ` # Print the stats report for a namespace + flux stats --namespace default + + # Print the stats report for the whole cluster + flux stats -A`, + RunE: runStatsCmd, +} + +type StatsFlags struct { + allNamespaces bool +} + +var statsArgs StatsFlags + +func init() { + statsCmd.PersistentFlags().BoolVarP(&statsArgs.allNamespaces, "all-namespaces", "A", false, + "list the statistics for objects across all namespaces") + rootCmd.AddCommand(statsCmd) +} + +func runStatsCmd(cmd *cobra.Command, args []string) error { + ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) + defer cancel() + + kubeClient, err := utils.KubeClient(kubeconfigArgs, kubeclientOptions) + if err != nil { + return err + } + + types := []metav1.GroupVersionKind{ + { + Kind: sourcev1.GitRepositoryKind, + Version: sourcev1.GroupVersion.Version, + Group: sourcev1.GroupVersion.Group, + }, + { + Kind: sourcev1.OCIRepositoryKind, + Version: sourcev1.GroupVersion.Version, + Group: sourcev1.GroupVersion.Group, + }, + { + Kind: sourcev1.HelmRepositoryKind, + Version: sourcev1.GroupVersion.Version, + Group: sourcev1.GroupVersion.Group, + }, + { + Kind: sourcev1.HelmChartKind, + Version: sourcev1.GroupVersion.Version, + Group: sourcev1.GroupVersion.Group, + }, + { + Kind: sourcev1.BucketKind, + Version: sourcev1.GroupVersion.Version, + Group: sourcev1.GroupVersion.Group, + }, + { + Kind: kustomizev1.KustomizationKind, + Version: kustomizev1.GroupVersion.Version, + Group: kustomizev1.GroupVersion.Group, + }, + { + Kind: helmv2.HelmReleaseKind, + Version: helmv2.GroupVersion.Version, + Group: helmv2.GroupVersion.Group, + }, + { + Kind: notificationv1.AlertKind, + Version: notificationv1.GroupVersion.Version, + Group: notificationv1.GroupVersion.Group, + }, + { + Kind: notificationv1.ProviderKind, + Version: notificationv1.GroupVersion.Version, + Group: notificationv1.GroupVersion.Group, + }, + { + Kind: notificationv1.ReceiverKind, + Version: notificationv1.GroupVersion.Version, + Group: notificationv1.GroupVersion.Group, + }, + { + Kind: autov1.ImageUpdateAutomationKind, + Version: autov1.GroupVersion.Version, + Group: autov1.GroupVersion.Group, + }, + { + Kind: imagev1.ImagePolicyKind, + Version: imagev1.GroupVersion.Version, + Group: imagev1.GroupVersion.Group, + }, + { + Kind: imagev1.ImageRepositoryKind, + Version: imagev1.GroupVersion.Version, + Group: imagev1.GroupVersion.Group, + }, + } + + header := []string{"Reconcilers", "Running", "Failing", "Suspended", "Storage"} + var rows [][]string + + for _, t := range types { + var total int + var suspended int + var failing int + var totalSize int64 + + list := unstructured.UnstructuredList{ + Object: map[string]interface{}{ + "apiVersion": t.Group + "/" + t.Version, + "kind": t.Kind, + }, + } + + scope := client.InNamespace("") + if !statsArgs.allNamespaces { + scope = client.InNamespace(*kubeconfigArgs.Namespace) + } + + if err := kubeClient.List(ctx, &list, scope); err == nil { + total = len(list.Items) + + for _, item := range list.Items { + if s, _, _ := unstructured.NestedBool(item.Object, "spec", "suspend"); s { + suspended++ + } + + if obj, err := status.GetObjectWithConditions(item.Object); err == nil { + for _, cond := range obj.Status.Conditions { + if cond.Type == "Ready" && cond.Status == corev1.ConditionFalse { + failing++ + } + } + } + + if size, found, _ := unstructured.NestedInt64(item.Object, "status", "artifact", "size"); found { + totalSize += size + } + } + } + + rows = append(rows, []string{ + t.Kind, + formatInt(total - suspended), + formatInt(failing), + formatInt(suspended), + formatSize(totalSize), + }) + } + + err = printers.TablePrinter(header).Print(cmd.OutOrStdout(), rows) + if err != nil { + return err + } + + return nil +} + +func formatInt(i int) string { + return fmt.Sprintf("%d", i) +} + +func formatSize(b int64) string { + if b == 0 { + return "-" + } + const unit = 1024 + if b < unit { + return fmt.Sprintf("%d B", b) + } + div, exp := int64(unit), 0 + for n := b / unit; n >= unit; n /= unit { + div *= unit + exp++ + } + return fmt.Sprintf("%.1f %ciB", + float64(b)/float64(div), "KMGTPE"[exp]) +} From 737d615fbc6d8ff2f3a9e51de18586a3a676aaad Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Mon, 20 Feb 2023 16:36:29 +0200 Subject: [PATCH 408/818] Update implementation history of RFC-0003 and RFC-0005 Signed-off-by: Stefan Prodan --- rfcs/0003-kubernetes-oci/README.md | 3 ++- rfcs/0005-artifact-revision-and-digest/README.md | 11 +++-------- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/rfcs/0003-kubernetes-oci/README.md b/rfcs/0003-kubernetes-oci/README.md index 428c34ec..429b1880 100644 --- a/rfcs/0003-kubernetes-oci/README.md +++ b/rfcs/0003-kubernetes-oci/README.md @@ -4,7 +4,7 @@ **Creation date:** 2022-03-31 -**Last update:** 2023-02-10 +**Last update:** 2023-02-20 ## Summary @@ -469,3 +469,4 @@ The feature is enabled by default. * **2022-08-11** First implementation released with [flux2 v0.32.0](https://github.com/fluxcd/flux2/releases/tag/v0.32.0) * **2022-08-29** Select layer by OCI media type released with [flux2 v0.33.0](https://github.com/fluxcd/flux2/releases/tag/v0.33.0) * **2022-09-29** Verifying OCI artifacts with Cosign released with [flux2 v0.35.0](https://github.com/fluxcd/flux2/releases/tag/v0.35.0) +* **2023-02-20** Custom OCI media types released with [flux2 v0.40.0](https://github.com/fluxcd/flux2/releases/tag/v0.40.0) diff --git a/rfcs/0005-artifact-revision-and-digest/README.md b/rfcs/0005-artifact-revision-and-digest/README.md index 8036fbce..e8107281 100644 --- a/rfcs/0005-artifact-revision-and-digest/README.md +++ b/rfcs/0005-artifact-revision-and-digest/README.md @@ -1,10 +1,10 @@ # RFC-0005 Artifact `Revision` format and introduction of `Digest` -**Status:** implementable +**Status:** implemented **Creation date:** 2022-10-20 -**Last update:** 2022-11-16 +**Last update:** 2023-02-20 ## Summary @@ -350,12 +350,7 @@ the field is removed. ## Implementation History - +* **2023-02-20** First implementation released with [flux2 v0.40.0](https://github.com/fluxcd/flux2/releases/tag/v0.40.0) [BLAKE3]: https://github.com/BLAKE3-team/BLAKE3 [digest-spec]: https://github.com/opencontainers/image-spec/blob/main/descriptor.md#digests From 76552855bb44a11e6a4a01be8a612cf6e9b0a60e Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Thu, 23 Feb 2023 13:07:38 +0000 Subject: [PATCH 409/818] Update toolkit components - source-controller to v0.35.2 https://github.com/fluxcd/source-controller/blob/v0.35.2/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 2 +- go.sum | 4 ++-- manifests/bases/source-controller/kustomization.yaml | 4 ++-- manifests/crds/kustomization.yaml | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index 628939fd..16748fd6 100644 --- a/go.mod +++ b/go.mod @@ -25,7 +25,7 @@ require ( github.com/fluxcd/pkg/ssh v0.7.1 github.com/fluxcd/pkg/untar v0.2.0 github.com/fluxcd/pkg/version v0.2.1 - github.com/fluxcd/source-controller/api v0.35.1 + github.com/fluxcd/source-controller/api v0.35.2 github.com/gonvenience/bunt v1.3.4 github.com/gonvenience/ytbx v1.4.4 github.com/google/go-cmp v0.5.9 diff --git a/go.sum b/go.sum index ab4d9902..6a0fdb4c 100644 --- a/go.sum +++ b/go.sum @@ -238,8 +238,8 @@ github.com/fluxcd/pkg/untar v0.2.0 h1:sJXU+FbJcNUb2ffLJNjeR3hwt3X2loVpOMlCUjyFw6 github.com/fluxcd/pkg/untar v0.2.0/go.mod h1:33AyoWaPpjX/xXpczcfhQh2AkB63TFwiR2YwROtv23E= github.com/fluxcd/pkg/version v0.2.1 h1:RRH7+6qiWHdTvRNwpoBmilnubJ2C4FZYGgy5wTDVKVc= github.com/fluxcd/pkg/version v0.2.1/go.mod h1:UmUYHDz4BxHQMesMUx3gYVrT2Wf66H49JpTg/PW+/OY= -github.com/fluxcd/source-controller/api v0.35.1 h1:IHlbN7giz5kY4z9oWZ9QLNKtHAaxHdk9RbIurUPS1aI= -github.com/fluxcd/source-controller/api v0.35.1/go.mod h1:TImPMy/MEwNpDu6qHsw9LlCznXaB8bSO8mnxBSFsX4Q= +github.com/fluxcd/source-controller/api v0.35.2 h1:1xTB0hIR8pmE8JJUQd41dHPbPx4a7EnH5iPY6bg83Oc= +github.com/fluxcd/source-controller/api v0.35.2/go.mod h1:9eIMRWYxNT3NZClA/zm5M55LleBFHB/jE+g3hNJPQBg= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index 551c85bf..374a6f62 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.35.1/source-controller.crds.yaml -- https://github.com/fluxcd/source-controller/releases/download/v0.35.1/source-controller.deployment.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.35.2/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.35.2/source-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index 2c5f7fcc..78437bfe 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -1,7 +1,7 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.35.1/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.35.2/source-controller.crds.yaml - https://github.com/fluxcd/kustomize-controller/releases/download/v0.34.0/kustomize-controller.crds.yaml - https://github.com/fluxcd/helm-controller/releases/download/v0.30.0/helm-controller.crds.yaml - https://github.com/fluxcd/notification-controller/releases/download/v0.32.0/notification-controller.crds.yaml From b28d80e7528f4904c75bd540eeef43af29792375 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Thu, 23 Feb 2023 14:30:43 +0100 Subject: [PATCH 410/818] tests/azure: update source-controller to v0.35.2 Signed-off-by: Hidde Beydals --- tests/azure/go.mod | 2 +- tests/azure/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/azure/go.mod b/tests/azure/go.mod index 84db859c..5104740f 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -14,7 +14,7 @@ require ( github.com/fluxcd/pkg/apis/meta v0.19.0 github.com/fluxcd/pkg/git v0.10.0 github.com/fluxcd/pkg/git/gogit v0.7.1 - github.com/fluxcd/source-controller/api v0.35.1 + github.com/fluxcd/source-controller/api v0.35.2 github.com/hashicorp/hc-install v0.5.0 github.com/hashicorp/terraform-exec v0.17.3 github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 diff --git a/tests/azure/go.sum b/tests/azure/go.sum index ca45a9e5..e54c4006 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -162,8 +162,8 @@ github.com/fluxcd/pkg/ssh v0.7.1 h1:2Gn4gYAw06RmZuzNy5nbtG6ueV6k7wFntUARpFtylTM= github.com/fluxcd/pkg/ssh v0.7.1/go.mod h1:vUoYqejhXyBnUf8cNuOxEYZabWUSPviHWsZX9eUyjso= github.com/fluxcd/pkg/version v0.2.1 h1:RRH7+6qiWHdTvRNwpoBmilnubJ2C4FZYGgy5wTDVKVc= github.com/fluxcd/pkg/version v0.2.1/go.mod h1:UmUYHDz4BxHQMesMUx3gYVrT2Wf66H49JpTg/PW+/OY= -github.com/fluxcd/source-controller/api v0.35.1 h1:IHlbN7giz5kY4z9oWZ9QLNKtHAaxHdk9RbIurUPS1aI= -github.com/fluxcd/source-controller/api v0.35.1/go.mod h1:TImPMy/MEwNpDu6qHsw9LlCznXaB8bSO8mnxBSFsX4Q= +github.com/fluxcd/source-controller/api v0.35.2 h1:1xTB0hIR8pmE8JJUQd41dHPbPx4a7EnH5iPY6bg83Oc= +github.com/fluxcd/source-controller/api v0.35.2/go.mod h1:9eIMRWYxNT3NZClA/zm5M55LleBFHB/jE+g3hNJPQBg= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= From 8c7b534544d1ddead5d12f833d35c1dcf29e7e4a Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Thu, 23 Feb 2023 14:32:07 +0100 Subject: [PATCH 411/818] Update dependencies - github.com/distribution/distribution/v3 to v3.0.0-20230223072852-e5d5810851d - github.com/fluxcd/pkg/oci to v0.20.0 - github.com/fluxcd/pkg/sourceignore to v0.3.2 - github.com/onsi/gomega to v1.27.1 Signed-off-by: Hidde Beydals --- go.mod | 8 ++++---- go.sum | 16 ++++++++-------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/go.mod b/go.mod index 16748fd6..964f0a50 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,7 @@ require ( github.com/Masterminds/semver/v3 v3.2.0 github.com/ProtonMail/go-crypto v0.0.0-20230217124315-7d5c6f04bbb8 github.com/cyphar/filepath-securejoin v0.2.3 - github.com/distribution/distribution/v3 v3.0.0-20230217093620-e64b08ada6c3 + github.com/distribution/distribution/v3 v3.0.0-20230223072852-e5d5810851d1 github.com/fluxcd/go-git-providers v0.14.0 github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 github.com/fluxcd/helm-controller/api v0.30.0 @@ -18,9 +18,9 @@ require ( github.com/fluxcd/pkg/git v0.10.0 github.com/fluxcd/pkg/git/gogit v0.7.1 github.com/fluxcd/pkg/kustomize v0.13.1 - github.com/fluxcd/pkg/oci v0.19.1 + github.com/fluxcd/pkg/oci v0.20.0 github.com/fluxcd/pkg/runtime v0.29.0 - github.com/fluxcd/pkg/sourceignore v0.3.1 + github.com/fluxcd/pkg/sourceignore v0.3.2 github.com/fluxcd/pkg/ssa v0.23.1 github.com/fluxcd/pkg/ssh v0.7.1 github.com/fluxcd/pkg/untar v0.2.0 @@ -35,7 +35,7 @@ require ( github.com/manifoldco/promptui v0.9.0 github.com/mattn/go-shellwords v1.0.12 github.com/olekukonko/tablewriter v0.0.5 - github.com/onsi/gomega v1.27.0 + github.com/onsi/gomega v1.27.1 github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 github.com/spf13/cobra v1.6.1 github.com/spf13/pflag v1.0.5 diff --git a/go.sum b/go.sum index 6a0fdb4c..7b63d704 100644 --- a/go.sum +++ b/go.sum @@ -149,8 +149,8 @@ github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxG github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/distribution/distribution/v3 v3.0.0-20230217093620-e64b08ada6c3 h1:MyB9NThZnIXjes6iUBvxUSHZB8b2Gy1FrY+cAd3FNww= -github.com/distribution/distribution/v3 v3.0.0-20230217093620-e64b08ada6c3/go.mod h1:WHNsWjnIn2V1LYOrME7e8KxSeKunYHsxEm4am0BUtcI= +github.com/distribution/distribution/v3 v3.0.0-20230223072852-e5d5810851d1 h1:OtfRoaZ54jKZ7jl9WuxqekousLR9T63iJf0y2EdC2S4= +github.com/distribution/distribution/v3 v3.0.0-20230223072852-e5d5810851d1/go.mod h1:r5XLH1cp+Wau2jxdptkYsFvvvzPPQTIe8eUuQ0vq30Q= github.com/dnaeon/go-vcr v1.1.0 h1:ReYa/UBrRyQdant9B4fNHGoCNKw6qh6P0fsdGmZpR7c= github.com/docker/cli v20.10.20+incompatible h1:lWQbHSHUFs7KraSN2jOJK7zbMS2jNCHI4mt4xUFUVQ4= github.com/docker/cli v20.10.20+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= @@ -222,12 +222,12 @@ github.com/fluxcd/pkg/git/gogit v0.7.1/go.mod h1:QrYVKE25QpLTvM83Toec6KtVJ3WCnvv github.com/fluxcd/pkg/gittestserver v0.8.1 h1:FMqnZBuS/11+9NhtLv9UAg+wm/v0Nf+hHeUOi2wJR3Q= github.com/fluxcd/pkg/kustomize v0.13.1 h1:xfDghn/kRaa5vYN64dLTAL1b1B1tDwcXlnOAqmz5W28= github.com/fluxcd/pkg/kustomize v0.13.1/go.mod h1:W+Nm9P8yUhTb8n3hpvceUnCAjl6DFsU0k5yI+HT2NE8= -github.com/fluxcd/pkg/oci v0.19.1 h1:18wiQDhp7OIx3+adezYX5nFTUb19tBe1r2E98ADBvwM= -github.com/fluxcd/pkg/oci v0.19.1/go.mod h1:R0uT66o2ZSiwGSrXBpakVhheG4Y+Xz68A6QoMFh7JU4= +github.com/fluxcd/pkg/oci v0.20.0 h1:VuM9fevraRHf/i1fStEO8UpsJTpO1wP316QrBRIvWGI= +github.com/fluxcd/pkg/oci v0.20.0/go.mod h1:w9BnVniT5/fk1ZsZ5IfD7A3p9AgEvyAp5mFuaj/R6jY= github.com/fluxcd/pkg/runtime v0.29.0 h1:/BDitj/y5shWqczECCiZFsEm9FH7do4VBgMHBiRiol0= github.com/fluxcd/pkg/runtime v0.29.0/go.mod h1:NrBONYHO5Piuzm6Y7QTS3cJRlgkgsDPn2EKB6gJ4BQw= -github.com/fluxcd/pkg/sourceignore v0.3.1 h1:Whub3VgltuCqzddTEZUdfq63VV/7bfOUOdigbLs5gHI= -github.com/fluxcd/pkg/sourceignore v0.3.1/go.mod h1:4LeIc8JccW189gj2nB6hDevBTGdVR9RNbJHdq4xaLNs= +github.com/fluxcd/pkg/sourceignore v0.3.2 h1:UXRguBJA9frgRDSr7Lsc873a9YTbbpbJafEaYjkpVEs= +github.com/fluxcd/pkg/sourceignore v0.3.2/go.mod h1:yuJzKggph0Bdbk9LgXjJQhvJZSTJV/1vS7mJuB7mPa0= github.com/fluxcd/pkg/ssa v0.23.1 h1:om5u4O2xU9ESZHf1wBzeyrsqe/nKf2+eIs9aXocnVW4= github.com/fluxcd/pkg/ssa v0.23.1/go.mod h1:3RvpJRHRzE4z168elHxEJit76Ol7uyoBtNNDV5H85es= github.com/fluxcd/pkg/ssh v0.7.1 h1:2Gn4gYAw06RmZuzNy5nbtG6ueV6k7wFntUARpFtylTM= @@ -507,8 +507,8 @@ github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo/v2 v2.8.1 h1:xFTEVwOFa1D/Ty24Ws1npBWkDYEV9BqZrsDxVrVkrrU= -github.com/onsi/gomega v1.27.0 h1:QLidEla4bXUuZVFa4KX6JHCsuGgbi85LC/pCHrt/O08= -github.com/onsi/gomega v1.27.0/go.mod h1:i189pavgK95OSIipFBa74gC2V4qrQuvjuyGEr3GmbXA= +github.com/onsi/gomega v1.27.1 h1:rfztXRbg6nv/5f+Raen9RcGoSecHIFgBBLQK3Wdj754= +github.com/onsi/gomega v1.27.1/go.mod h1:aHX5xOykVYzWOV4WqQy0sy8BQptgukenXpCXfadcIAw= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= From 349bad92400dc2421814b1693f9f368e24a27fd5 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Thu, 23 Feb 2023 14:35:37 +0100 Subject: [PATCH 412/818] tests/azure: update dependencies - github.com/hashicorp/terraform-exec to v0.18.0 - Unpin golang.org/x/crypto to allow update to v0.6.0 Signed-off-by: Hidde Beydals --- tests/azure/go.mod | 10 +++------- tests/azure/go.sum | 41 +++++++++++++++++++++++++++++++---------- 2 files changed, 34 insertions(+), 17 deletions(-) diff --git a/tests/azure/go.mod b/tests/azure/go.mod index 5104740f..2d8880a8 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -16,7 +16,7 @@ require ( github.com/fluxcd/pkg/git/gogit v0.7.1 github.com/fluxcd/source-controller/api v0.35.2 github.com/hashicorp/hc-install v0.5.0 - github.com/hashicorp/terraform-exec v0.17.3 + github.com/hashicorp/terraform-exec v0.18.0 github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 github.com/stretchr/testify v1.8.1 github.com/whilp/git-urls v1.0.0 @@ -73,7 +73,7 @@ require ( github.com/hashicorp/errwrap v1.0.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/go-version v1.6.0 // indirect - github.com/hashicorp/terraform-json v0.14.0 // indirect + github.com/hashicorp/terraform-json v0.15.0 // indirect github.com/imdario/mergo v0.3.13 // indirect github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect github.com/josharian/intern v1.0.0 // indirect @@ -92,7 +92,7 @@ require ( github.com/sergi/go-diff v1.3.1 // indirect github.com/skeema/knownhosts v1.1.0 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect - github.com/zclconf/go-cty v1.11.0 // indirect + github.com/zclconf/go-cty v1.12.1 // indirect go.uber.org/atomic v1.10.0 // indirect golang.org/x/crypto v0.6.0 // indirect golang.org/x/mod v0.8.0 // indirect @@ -117,7 +117,3 @@ require ( sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect sigs.k8s.io/yaml v1.3.0 // indirect ) - -// Fix for CVE-2020-29652: https://github.com/golang/crypto/commit/8b5274cf687fd9316b4108863654cc57385531e8 -// Fix for CVE-2021-43565: https://github.com/golang/crypto/commit/5770296d904e90f15f38f77dfc2e43fdf5efc083 -replace golang.org/x/crypto => golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3 diff --git a/tests/azure/go.sum b/tests/azure/go.sum index e54c4006..90af7402 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -245,7 +245,6 @@ github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= @@ -278,7 +277,6 @@ github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHh github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-version v1.5.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= @@ -286,10 +284,10 @@ github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ github.com/hashicorp/hc-install v0.5.0 h1:D9bl4KayIYKEeJ4vUDe9L5huqxZXczKaykSRcmQ0xY0= github.com/hashicorp/hc-install v0.5.0/go.mod h1:JyzMfbzfSBSjoDCRPna1vi/24BEDxFaCPfdHtM5SCdo= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= -github.com/hashicorp/terraform-exec v0.17.3 h1:MX14Kvnka/oWGmIkyuyvL6POx25ZmKrjlaclkx3eErU= -github.com/hashicorp/terraform-exec v0.17.3/go.mod h1:+NELG0EqQekJzhvikkeQsOAZpsw0cv/03rbeQJqscAI= -github.com/hashicorp/terraform-json v0.14.0 h1:sh9iZ1Y8IFJLx+xQiKHGud6/TSUCM0N8e17dKDpqV7s= -github.com/hashicorp/terraform-json v0.14.0/go.mod h1:5A9HIWPkk4e5aeeXIBbkcOvaZbIYnAIkEyqP2pNSckM= +github.com/hashicorp/terraform-exec v0.18.0 h1:BJa6/Fhxnb0zvsEGqUrFSybcnhAiBVSUgG7s09b6XlI= +github.com/hashicorp/terraform-exec v0.18.0/go.mod h1:6PMRgg0Capig5Fn0zW9/+WM3vQsdwotwa8uxDVzLpHE= +github.com/hashicorp/terraform-json v0.15.0 h1:/gIyNtR6SFw6h5yzlbDbACyGvIhKtQi8mTsbkNd79lE= +github.com/hashicorp/terraform-json v0.15.0/go.mod h1:+L1RNzjDU5leLFZkHTFTbJXaoqUC6TqXlFgDoOXrtvk= github.com/huandu/xstrings v1.3.1/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= github.com/huandu/xstrings v1.3.2/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= @@ -418,8 +416,8 @@ github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9dec github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/zclconf/go-cty v1.2.0/go.mod h1:hOPWgoHbaTUnI5k4D2ld+GRpFJSCe6bCM7m1q/N4PQ8= github.com/zclconf/go-cty v1.10.0/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uUAzyuvAk= -github.com/zclconf/go-cty v1.11.0 h1:726SxLdi2SDnjY+BStqB9J1hNp4+2WlzyXLuimibIe0= -github.com/zclconf/go-cty v1.11.0/go.mod h1:s9IfD1LK5ccNMSWCVFCE2rJfHiZgi7JijgeWIMfhLvA= +github.com/zclconf/go-cty v1.12.1 h1:PcupnljUm9EIvbgSHQnHhUr3fO6oFmkOrvs2BAFNXXY= +github.com/zclconf/go-cty v1.12.1/go.mod h1:s9IfD1LK5ccNMSWCVFCE2rJfHiZgi7JijgeWIMfhLvA= github.com/zclconf/go-cty-debug v0.0.0-20191215020915-b22d67c1ba0b/go.mod h1:ZRKQfBXbGkpdV6QMzT3rU1kSTAnfu1dO8dPKjYprgj8= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= @@ -432,8 +430,25 @@ go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0 go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= -golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3 h1:0es+/5331RGQPcXlMfP+WrnIIS6dNnNRe0WB02W0F4M= -golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200414173820-0848c9571904/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= +golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= +golang.org/x/crypto v0.6.0 h1:qfktjS5LUO+fFKeJXZ+ikTRijMmljikvG68fpMMruSc= +golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -474,6 +489,7 @@ golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= @@ -495,6 +511,7 @@ golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81R golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210326060303-6b1517762897/go.mod h1:uSPa2vr4CLtc/ILN5odXGNXS6mhrKVzTaCXzk9m6W3k= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= @@ -503,6 +520,7 @@ golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= +golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g= golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -570,12 +588,14 @@ golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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= golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= golang.org/x/term v0.5.0 h1:n2a8QNdAb0sZNpU9R1ALUXBbY+w51fCQDN+7EdxNBsY= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -587,6 +607,7 @@ golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= From a5958b494d634e261b972a11a12503591fe7156d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 27 Feb 2023 01:57:43 +0000 Subject: [PATCH 413/818] build(deps): bump github/codeql-action from 2.2.4 to 2.2.5 Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2.2.4 to 2.2.5. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/17573ee1cc1b9d061760f3a006fc4aac4f944fd5...32dc499307d133bb5085bae78498c0ac2cf762d5) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/scan.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index 5bb6e11f..519dd5d0 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -50,7 +50,7 @@ jobs: env: SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }} - name: Upload result to GitHub Code Scanning - uses: github/codeql-action/upload-sarif@17573ee1cc1b9d061760f3a006fc4aac4f944fd5 # v2 + uses: github/codeql-action/upload-sarif@32dc499307d133bb5085bae78498c0ac2cf762d5 # v2 with: sarif_file: snyk.sarif @@ -67,10 +67,10 @@ jobs: with: go-version: 1.19.x - name: Initialize CodeQL - uses: github/codeql-action/init@17573ee1cc1b9d061760f3a006fc4aac4f944fd5 # v2 + uses: github/codeql-action/init@32dc499307d133bb5085bae78498c0ac2cf762d5 # v2 with: languages: go - name: Autobuild - uses: github/codeql-action/autobuild@17573ee1cc1b9d061760f3a006fc4aac4f944fd5 # v2 + uses: github/codeql-action/autobuild@32dc499307d133bb5085bae78498c0ac2cf762d5 # v2 - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@17573ee1cc1b9d061760f3a006fc4aac4f944fd5 # v2 + uses: github/codeql-action/analyze@32dc499307d133bb5085bae78498c0ac2cf762d5 # v2 From c16cca891f90078c66f3db1333ed62f75160fb42 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 27 Feb 2023 13:55:42 +0000 Subject: [PATCH 414/818] build(deps): bump actions/cache from 3.2.5 to 3.2.6 Bumps [actions/cache](https://github.com/actions/cache) from 3.2.5 to 3.2.6. - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](https://github.com/actions/cache/compare/6998d139ddd3e68c71e9e398d8e40b71a2f39812...69d9d449aced6a2ede0bc19182fadc3a0a42d2b0) --- updated-dependencies: - dependency-name: actions/cache dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/e2e-azure.yaml | 2 +- .github/workflows/e2e-bootstrap.yaml | 2 +- .github/workflows/e2e.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/e2e-azure.yaml b/.github/workflows/e2e-azure.yaml index c4684a73..614f3bf4 100644 --- a/.github/workflows/e2e-azure.yaml +++ b/.github/workflows/e2e-azure.yaml @@ -17,7 +17,7 @@ jobs: - name: Checkout uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c - name: Restore Go cache - uses: actions/cache@6998d139ddd3e68c71e9e398d8e40b71a2f39812 + uses: actions/cache@69d9d449aced6a2ede0bc19182fadc3a0a42d2b0 with: path: ~/go/pkg/mod key: ${{ runner.os }}-go1.18-${{ hashFiles('**/go.sum') }} diff --git a/.github/workflows/e2e-bootstrap.yaml b/.github/workflows/e2e-bootstrap.yaml index 7c3076fb..bbd1e57b 100644 --- a/.github/workflows/e2e-bootstrap.yaml +++ b/.github/workflows/e2e-bootstrap.yaml @@ -18,7 +18,7 @@ jobs: - name: Checkout uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c - name: Restore Go cache - uses: actions/cache@6998d139ddd3e68c71e9e398d8e40b71a2f39812 + uses: actions/cache@69d9d449aced6a2ede0bc19182fadc3a0a42d2b0 with: path: ~/go/pkg/mod key: ${{ runner.os }}-go1.18-${{ hashFiles('**/go.sum') }} diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index b4de7dd2..a9c12b64 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -22,7 +22,7 @@ jobs: - name: Checkout uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c - name: Restore Go cache - uses: actions/cache@6998d139ddd3e68c71e9e398d8e40b71a2f39812 + uses: actions/cache@69d9d449aced6a2ede0bc19182fadc3a0a42d2b0 with: path: ~/go/pkg/mod key: ${{ runner.os }}-go1.18-${{ hashFiles('**/go.sum') }} From 79485c99ab5d06b89d728609423a2876691d3be0 Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Tue, 28 Feb 2023 13:07:03 +0000 Subject: [PATCH 415/818] Update toolkit components - notification-controller to v0.32.1 https://github.com/fluxcd/notification-controller/blob/v0.32.1/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 2 +- go.sum | 4 ++-- manifests/bases/notification-controller/kustomization.yaml | 4 ++-- manifests/crds/kustomization.yaml | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index 964f0a50..ce312cd9 100644 --- a/go.mod +++ b/go.mod @@ -13,7 +13,7 @@ require ( github.com/fluxcd/image-automation-controller/api v0.30.0 github.com/fluxcd/image-reflector-controller/api v0.25.0 github.com/fluxcd/kustomize-controller/api v0.34.0 - github.com/fluxcd/notification-controller/api v0.32.0 + github.com/fluxcd/notification-controller/api v0.32.1 github.com/fluxcd/pkg/apis/meta v0.19.0 github.com/fluxcd/pkg/git v0.10.0 github.com/fluxcd/pkg/git/gogit v0.7.1 diff --git a/go.sum b/go.sum index 7b63d704..d5ea1ad8 100644 --- a/go.sum +++ b/go.sum @@ -207,8 +207,8 @@ github.com/fluxcd/image-reflector-controller/api v0.25.0 h1:tK0Hc7Xxr5z6wtBvLTX/ github.com/fluxcd/image-reflector-controller/api v0.25.0/go.mod h1:VXMXfQ5nLZtP+VKuqxYlQOyJ5aFjvC8YpFp1fSwcEAQ= github.com/fluxcd/kustomize-controller/api v0.34.0 h1:azw0y8AUfNSc1r3ZJkpbf8JKfpEs1Po980NqxuaJ8Iw= github.com/fluxcd/kustomize-controller/api v0.34.0/go.mod h1:3KgYtDR0oSVU/CL4nokdQEGKOWSq/jXvmRh9AQ8sRF8= -github.com/fluxcd/notification-controller/api v0.32.0 h1:PAWyqUEksEt/lY+0+MyW4jtWlu1k4rrmoYo7RvKcrGI= -github.com/fluxcd/notification-controller/api v0.32.0/go.mod h1:0yUeBG8O6R5O9L3NS7TnLxZdni6auheTxM9gPMlgxMY= +github.com/fluxcd/notification-controller/api v0.32.1 h1:b6AXRGRUKvA4P0KcoaYMXWQoClJrZO/B2fH5/d8kZ00= +github.com/fluxcd/notification-controller/api v0.32.1/go.mod h1:Zo3GPyxhFN9pGAT1Igd4XuHuF3Jog3fCyVNjRUutAxQ= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= github.com/fluxcd/pkg/apis/kustomize v0.8.0 h1:A6aLolxPV2Sll44SOHiX96lbXXmRZmS5BoEerkRHrfM= diff --git a/manifests/bases/notification-controller/kustomization.yaml b/manifests/bases/notification-controller/kustomization.yaml index 6c48237d..afac852f 100644 --- a/manifests/bases/notification-controller/kustomization.yaml +++ b/manifests/bases/notification-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/notification-controller/releases/download/v0.32.0/notification-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v0.32.0/notification-controller.deployment.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.32.1/notification-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.32.1/notification-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index 78437bfe..79b3acba 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -4,6 +4,6 @@ resources: - https://github.com/fluxcd/source-controller/releases/download/v0.35.2/source-controller.crds.yaml - https://github.com/fluxcd/kustomize-controller/releases/download/v0.34.0/kustomize-controller.crds.yaml - https://github.com/fluxcd/helm-controller/releases/download/v0.30.0/helm-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v0.32.0/notification-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.32.1/notification-controller.crds.yaml - https://github.com/fluxcd/image-reflector-controller/releases/download/v0.25.0/image-reflector-controller.crds.yaml - https://github.com/fluxcd/image-automation-controller/releases/download/v0.30.0/image-automation-controller.crds.yaml From c8bd8d0f26a96b588fffca1bab47a970954f2baa Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Tue, 28 Feb 2023 14:35:29 +0100 Subject: [PATCH 416/818] tests/azure: update dependencies - github.com/fluxcd/notification-controller/api to v0.32.1 - github.com/stretchr/testify to v1.8.2 Signed-off-by: Hidde Beydals --- tests/azure/go.mod | 4 ++-- tests/azure/go.sum | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/azure/go.mod b/tests/azure/go.mod index 2d8880a8..4569985d 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -9,7 +9,7 @@ require ( github.com/fluxcd/image-automation-controller/api v0.30.0 github.com/fluxcd/image-reflector-controller/api v0.25.0 github.com/fluxcd/kustomize-controller/api v0.34.0 - github.com/fluxcd/notification-controller/api v0.32.0 + github.com/fluxcd/notification-controller/api v0.32.1 github.com/fluxcd/pkg/apis/event v0.4.0 github.com/fluxcd/pkg/apis/meta v0.19.0 github.com/fluxcd/pkg/git v0.10.0 @@ -18,7 +18,7 @@ require ( github.com/hashicorp/hc-install v0.5.0 github.com/hashicorp/terraform-exec v0.18.0 github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 - github.com/stretchr/testify v1.8.1 + github.com/stretchr/testify v1.8.2 github.com/whilp/git-urls v1.0.0 go.uber.org/multierr v1.9.0 k8s.io/api v0.26.1 diff --git a/tests/azure/go.sum b/tests/azure/go.sum index 90af7402..d63a7abc 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -143,8 +143,8 @@ github.com/fluxcd/image-reflector-controller/api v0.25.0 h1:tK0Hc7Xxr5z6wtBvLTX/ github.com/fluxcd/image-reflector-controller/api v0.25.0/go.mod h1:VXMXfQ5nLZtP+VKuqxYlQOyJ5aFjvC8YpFp1fSwcEAQ= github.com/fluxcd/kustomize-controller/api v0.34.0 h1:azw0y8AUfNSc1r3ZJkpbf8JKfpEs1Po980NqxuaJ8Iw= github.com/fluxcd/kustomize-controller/api v0.34.0/go.mod h1:3KgYtDR0oSVU/CL4nokdQEGKOWSq/jXvmRh9AQ8sRF8= -github.com/fluxcd/notification-controller/api v0.32.0 h1:PAWyqUEksEt/lY+0+MyW4jtWlu1k4rrmoYo7RvKcrGI= -github.com/fluxcd/notification-controller/api v0.32.0/go.mod h1:0yUeBG8O6R5O9L3NS7TnLxZdni6auheTxM9gPMlgxMY= +github.com/fluxcd/notification-controller/api v0.32.1 h1:b6AXRGRUKvA4P0KcoaYMXWQoClJrZO/B2fH5/d8kZ00= +github.com/fluxcd/notification-controller/api v0.32.1/go.mod h1:Zo3GPyxhFN9pGAT1Igd4XuHuF3Jog3fCyVNjRUutAxQ= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= github.com/fluxcd/pkg/apis/event v0.4.0 h1:UPCC269KjgKgkmtiCiBq/DNue/EpXy8Tq1zFx7oRXZM= @@ -395,8 +395,8 @@ github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= -github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= +github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/vmihailenco/msgpack v3.3.3+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk= github.com/vmihailenco/msgpack/v4 v4.3.12/go.mod h1:gborTTJjAo/GWTqqRjrLCn9pgNN+NXzzngzBKDPIqw4= github.com/vmihailenco/tagparser v0.1.1/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= From c05b540518e9eda32fea7d50f41016d2a84d7a23 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Tue, 28 Feb 2023 14:37:53 +0100 Subject: [PATCH 417/818] Update dependencies - github.com/onsi/gomega to v1.27.2 Signed-off-by: Hidde Beydals --- go.mod | 2 +- go.sum | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/go.mod b/go.mod index ce312cd9..8c7eed1d 100644 --- a/go.mod +++ b/go.mod @@ -35,7 +35,7 @@ require ( github.com/manifoldco/promptui v0.9.0 github.com/mattn/go-shellwords v1.0.12 github.com/olekukonko/tablewriter v0.0.5 - github.com/onsi/gomega v1.27.1 + github.com/onsi/gomega v1.27.2 github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 github.com/spf13/cobra v1.6.1 github.com/spf13/pflag v1.0.5 diff --git a/go.sum b/go.sum index d5ea1ad8..a2373ecc 100644 --- a/go.sum +++ b/go.sum @@ -282,6 +282,7 @@ github.com/go-openapi/jsonreference v0.20.1/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g= github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 h1:p104kn46Q8WdvHunIJ9dAyjPVtrBPhSr3KT2yUst43I= github.com/gofrs/uuid v4.2.0+incompatible h1:yyYWMnhkhrKwwr8gAOcOCYxOOscHgDS9yZgBrnJfGa0= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= @@ -369,6 +370,7 @@ github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 h1:yAJXTCF9TqKcTiHJAE8dj7HMvPfh66eeA2JYW7eFpSE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= @@ -506,9 +508,9 @@ github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= -github.com/onsi/ginkgo/v2 v2.8.1 h1:xFTEVwOFa1D/Ty24Ws1npBWkDYEV9BqZrsDxVrVkrrU= -github.com/onsi/gomega v1.27.1 h1:rfztXRbg6nv/5f+Raen9RcGoSecHIFgBBLQK3Wdj754= -github.com/onsi/gomega v1.27.1/go.mod h1:aHX5xOykVYzWOV4WqQy0sy8BQptgukenXpCXfadcIAw= +github.com/onsi/ginkgo/v2 v2.8.4 h1:gf5mIQ8cLFieruNLAdgijHF1PYfLphKm2dxxcUtcqK0= +github.com/onsi/gomega v1.27.2 h1:SKU0CXeKE/WVgIV1T61kSa3+IRE8Ekrv9rdXDwwTqnY= +github.com/onsi/gomega v1.27.2/go.mod h1:5mR3phAHpkAVIDkHEUBY6HGVsU+cpcEscrGPB4oPlZI= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= From a64913f2f038dc6f0e2c6585c496b754294c4874 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Fri, 3 Mar 2023 12:36:03 +0200 Subject: [PATCH 418/818] Allow custom annotations to be set when pushing OCI artifacts Signed-off-by: Stefan Prodan --- cmd/flux/push_artifact.go | 30 ++++++++++++++++----- go.mod | 28 ++++++++++---------- go.sum | 56 +++++++++++++++++++-------------------- 3 files changed, 65 insertions(+), 49 deletions(-) diff --git a/cmd/flux/push_artifact.go b/cmd/flux/push_artifact.go index badea6a9..58f386ab 100644 --- a/cmd/flux/push_artifact.go +++ b/cmd/flux/push_artifact.go @@ -21,6 +21,7 @@ import ( "encoding/json" "fmt" "os" + "strings" "github.com/fluxcd/flux2/internal/flags" sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" @@ -53,10 +54,13 @@ The command can read the credentials from '~/.docker/config.json' but they can a jq -r '. | .repository + "@" + .digest') cosign sign $digest_url - # Push manifests passed into stdin to GHCR - kustomize build . | flux push artifact oci://ghcr.io/org/config/app:$(git rev-parse --short HEAD) -p - \ + # Push manifests passed into stdin to GHCR and set custom OCI annotations + kustomize build . | flux push artifact oci://ghcr.io/org/config/app:$(git rev-parse --short HEAD) -f - \ --source="$(git config --get remote.origin.url)" \ - --revision="$(git branch --show-current)@sha1:$(git rev-parse HEAD)" + --revision="$(git branch --show-current)@sha1:$(git rev-parse HEAD)" \ + --annotations='org.opencontainers.image.licenses=Apache-2.0' \ + --annotations='org.opencontainers.image.documentation=https://app.org/docs' \ + --annotations='org.opencontainers.image.description=Production config.' # Push single manifest file to GHCR using the short Git SHA as the OCI artifact tag echo $GITHUB_PAT | docker login ghcr.io --username flux --password-stdin @@ -81,7 +85,7 @@ The command can read the credentials from '~/.docker/config.json' but they can a --revision="$(git tag --points-at HEAD)@sha1:$(git rev-parse HEAD)" \ --provider aws - # Or pass credentials directly + # Login by passing credentials directly flux push artifact oci://docker.io/org/app-config:$(git tag --points-at HEAD) \ --path="./path/to/local/manifests" \ --source="$(git config --get remote.origin.url)" \ @@ -98,6 +102,7 @@ type pushArtifactFlags struct { creds string provider flags.SourceOCIProvider ignorePaths []string + annotations []string output string } @@ -110,12 +115,13 @@ func newPushArtifactFlags() pushArtifactFlags { } func init() { - pushArtifactCmd.Flags().StringVar(&pushArtifactArgs.path, "path", "", "path to the directory where the Kubernetes manifests are located") + pushArtifactCmd.Flags().StringVarP(&pushArtifactArgs.path, "path", "f", "", "path to the directory where the Kubernetes manifests are located") pushArtifactCmd.Flags().StringVar(&pushArtifactArgs.source, "source", "", "the source address, e.g. the Git URL") pushArtifactCmd.Flags().StringVar(&pushArtifactArgs.revision, "revision", "", "the source revision in the format '@sha1:'") pushArtifactCmd.Flags().StringVar(&pushArtifactArgs.creds, "creds", "", "credentials for OCI registry in the format [:] if --provider is generic") pushArtifactCmd.Flags().Var(&pushArtifactArgs.provider, "provider", pushArtifactArgs.provider.Description()) pushArtifactCmd.Flags().StringSliceVar(&pushArtifactArgs.ignorePaths, "ignore-paths", excludeOCI, "set paths to ignore in .gitignore format") + pushArtifactCmd.Flags().StringArrayVarP(&pushArtifactArgs.annotations, "annotations", "a", nil, "Set custom OCI annotations in the format '='") pushArtifactCmd.Flags().StringVarP(&pushArtifactArgs.output, "output", "o", "", "the format in which the artifact digest should be printed, can be 'json' or 'yaml'") @@ -159,9 +165,19 @@ func pushArtifactCmdRun(cmd *cobra.Command, args []string) error { return fmt.Errorf("invalid path '%s', must point to an existing directory or file: %w", path, err) } + annotations := map[string]string{} + for _, annotation := range pushArtifactArgs.annotations { + kv := strings.Split(annotation, "=") + if len(kv) != 2 { + return fmt.Errorf("invalid annotation %s, must be in the format key=value", annotation) + } + annotations[kv[0]] = kv[1] + } + meta := oci.Metadata{ - Source: pushArtifactArgs.source, - Revision: pushArtifactArgs.revision, + Source: pushArtifactArgs.source, + Revision: pushArtifactArgs.revision, + Annotations: annotations, } ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) diff --git a/go.mod b/go.mod index 8c7eed1d..7a210606 100644 --- a/go.mod +++ b/go.mod @@ -18,7 +18,7 @@ require ( github.com/fluxcd/pkg/git v0.10.0 github.com/fluxcd/pkg/git/gogit v0.7.1 github.com/fluxcd/pkg/kustomize v0.13.1 - github.com/fluxcd/pkg/oci v0.20.0 + github.com/fluxcd/pkg/oci v0.21.0 github.com/fluxcd/pkg/runtime v0.29.0 github.com/fluxcd/pkg/sourceignore v0.3.2 github.com/fluxcd/pkg/ssa v0.23.1 @@ -49,7 +49,7 @@ require ( k8s.io/client-go v0.26.1 k8s.io/kubectl v0.26.1 sigs.k8s.io/cli-utils v0.34.0 - sigs.k8s.io/controller-runtime v0.14.4 + sigs.k8s.io/controller-runtime v0.14.5 sigs.k8s.io/kustomize/api v0.12.1 sigs.k8s.io/kustomize/kyaml v0.13.9 sigs.k8s.io/yaml v1.3.0 @@ -69,18 +69,18 @@ require ( github.com/Microsoft/go-winio v0.6.0 // indirect github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d // indirect github.com/acomagu/bufpipe v1.0.3 // indirect - github.com/aws/aws-sdk-go-v2 v1.17.4 // indirect - github.com/aws/aws-sdk-go-v2/config v1.18.13 // indirect - github.com/aws/aws-sdk-go-v2/credentials v1.13.13 // indirect - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.22 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.28 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.22 // indirect - github.com/aws/aws-sdk-go-v2/internal/ini v1.3.29 // indirect - github.com/aws/aws-sdk-go-v2/service/ecr v1.18.3 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.22 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.12.2 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.2 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.18.3 // indirect + github.com/aws/aws-sdk-go-v2 v1.17.5 // indirect + github.com/aws/aws-sdk-go-v2/config v1.18.15 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.13.15 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.23 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.29 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.23 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.3.30 // indirect + github.com/aws/aws-sdk-go-v2/service/ecr v1.18.5 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.23 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.12.4 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.4 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.18.5 // indirect github.com/aws/smithy-go v1.13.5 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bshuster-repo/logrus-logstash-hook v1.0.0 // indirect diff --git a/go.sum b/go.sum index a2373ecc..f8e6cbab 100644 --- a/go.sum +++ b/go.sum @@ -75,30 +75,30 @@ github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuW github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= -github.com/aws/aws-sdk-go-v2 v1.17.4 h1:wyC6p9Yfq6V2y98wfDsj6OnNQa4w2BLGCLIxzNhwOGY= -github.com/aws/aws-sdk-go-v2 v1.17.4/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw= -github.com/aws/aws-sdk-go-v2/config v1.18.13 h1:v0xlYqbO6/EVlM8tUn2QEOA7btQxcgidEq2JRDBPTho= -github.com/aws/aws-sdk-go-v2/config v1.18.13/go.mod h1:r39wGSZB7wPDW1i54JyQXUpc5KsWjh5z/3S5D9eCqDg= -github.com/aws/aws-sdk-go-v2/credentials v1.13.13 h1:zw1KAc1kl00NYd3ofVmFrb09qnYlSQMeh+fmlQRAihI= -github.com/aws/aws-sdk-go-v2/credentials v1.13.13/go.mod h1:DW9nbIIF9MrIja0cBQrUpeWYQMSlNmP8fevLUyF9W38= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.22 h1:3aMfcTmoXtTZnaT86QlVaYh+BRMbvrrmZwIQ5jWqCZQ= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.22/go.mod h1:YGSIJyQ6D6FjKMQh16hVFSIUD54L4F7zTGePqYMYYJU= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.28 h1:r+XwaCLpIvCKjBIYy/HVZujQS9tsz5ohHG3ZIe0wKoE= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.28/go.mod h1:3lwChorpIM/BhImY/hy+Z6jekmN92cXGPI1QJasVPYY= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.22 h1:7AwGYXDdqRQYsluvKFmWoqpcOQJ4bH634SkYf3FNj/A= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.22/go.mod h1:EqK7gVrIGAHyZItrD1D8B0ilgwMD1GiWAmbU4u/JHNk= -github.com/aws/aws-sdk-go-v2/internal/ini v1.3.29 h1:J4xhFd6zHhdF9jPP0FQJ6WknzBboGMBNjKOv4iTuw4A= -github.com/aws/aws-sdk-go-v2/internal/ini v1.3.29/go.mod h1:TwuqRBGzxjQJIwH16/fOZodwXt2Zxa9/cwJC5ke4j7s= -github.com/aws/aws-sdk-go-v2/service/ecr v1.18.3 h1:kekMsmCO0l4ldUbz/GWUomiNgSZgpt0xnvdc72KAqfg= -github.com/aws/aws-sdk-go-v2/service/ecr v1.18.3/go.mod h1:53xgmccefO+AwKsxVKuTh2vo/IDOkeMWNpmDuhZH1Vc= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.22 h1:LjFQf8hFuMO22HkV5VWGLBvmCLBCLPivUAmpdpnp4Vs= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.22/go.mod h1:xt0Au8yPIwYXf/GYPy/vl4K3CgwhfQMYbrH7DlUUIws= -github.com/aws/aws-sdk-go-v2/service/sso v1.12.2 h1:EN102fWY7hI5u/2FPheTrwwMHkSXfl49RYkeEnJsrCU= -github.com/aws/aws-sdk-go-v2/service/sso v1.12.2/go.mod h1:IgV8l3sj22nQDd5qcAGY0WenwCzCphqdbFOpfktZPrI= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.2 h1:f1lmlce7r13CX1BPyPqt9oh/H+uqOWc9367lDoGGwNQ= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.2/go.mod h1:O1YSOg3aekZibh2SngvCRRG+cRHKKlYgxf/JBF/Kr/k= -github.com/aws/aws-sdk-go-v2/service/sts v1.18.3 h1:s49mSnsBZEXjfGBkRfmK+nPqzT7Lt3+t2SmAKNyHblw= -github.com/aws/aws-sdk-go-v2/service/sts v1.18.3/go.mod h1:b+psTJn33Q4qGoDaM7ZiOVVG8uVjGI6HaZ8WBHdgDgU= +github.com/aws/aws-sdk-go-v2 v1.17.5 h1:TzCUW1Nq4H8Xscph5M/skINUitxM5UBAyvm2s7XBzL4= +github.com/aws/aws-sdk-go-v2 v1.17.5/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw= +github.com/aws/aws-sdk-go-v2/config v1.18.15 h1:509yMO0pJUGUugBP2H9FOFyV+7Mz7sRR+snfDN5W4NY= +github.com/aws/aws-sdk-go-v2/config v1.18.15/go.mod h1:vS0tddZqpE8cD9CyW0/kITHF5Bq2QasW9Y1DFHD//O0= +github.com/aws/aws-sdk-go-v2/credentials v1.13.15 h1:0rZQIi6deJFjOEgHI9HI2eZcLPPEGQPictX66oRFLL8= +github.com/aws/aws-sdk-go-v2/credentials v1.13.15/go.mod h1:vRMLMD3/rXU+o6j2MW5YefrGMBmdTvkLLGqFwMLBHQc= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.23 h1:Kbiv9PGnQfG/imNI4L/heyUXvzKmcWSBeDvkrQz5pFc= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.23/go.mod h1:mOtmAg65GT1HIL/HT/PynwPbS+UG0BgCZ6vhkPqnxWo= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.29 h1:9/aKwwus0TQxppPXFmf010DFrE+ssSbzroLVYINA+xE= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.29/go.mod h1:Dip3sIGv485+xerzVv24emnjX5Sg88utCL8fwGmCeWg= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.23 h1:b/Vn141DBuLVgXbhRWIrl9g+ww7G+ScV5SzniWR13jQ= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.23/go.mod h1:mr6c4cHC+S/MMkrjtSlG4QA36kOznDep+0fga5L/fGQ= +github.com/aws/aws-sdk-go-v2/internal/ini v1.3.30 h1:IVx9L7YFhpPq0tTnGo8u8TpluFu7nAn9X3sUDMb11c0= +github.com/aws/aws-sdk-go-v2/internal/ini v1.3.30/go.mod h1:vsbq62AOBwQ1LJ/GWKFxX8beUEYeRp/Agitrxee2/qM= +github.com/aws/aws-sdk-go-v2/service/ecr v1.18.5 h1:tGA4ZoAsrYhGBypKAo2jwoX/Z5ponBZOTEUMNN/rHP4= +github.com/aws/aws-sdk-go-v2/service/ecr v1.18.5/go.mod h1:cDZh+PHP8Adt9E0zfZT9cK4qadbtIuU/czLpEJtm4wc= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.23 h1:QoOybhwRfciWUBbZ0gp9S7XaDnCuSTeK/fySB99V1ls= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.23/go.mod h1:9uPh+Hrz2Vn6oMnQYiUi/zbh3ovbnQk19YKINkQny44= +github.com/aws/aws-sdk-go-v2/service/sso v1.12.4 h1:qJdM48OOLl1FBSzI7ZrA1ZfLwOyCYqkXV5lko1hYDBw= +github.com/aws/aws-sdk-go-v2/service/sso v1.12.4/go.mod h1:jtLIhd+V+lft6ktxpItycqHqiVXrPIRjWIsFIlzMriw= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.4 h1:YRkWXQveFb0tFC0TLktmmhGsOcCgLwvq88MC2al47AA= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.4/go.mod h1:zVwRrfdSmbRZWkUkWjOItY7SOalnFnq/Yg2LVPqDjwc= +github.com/aws/aws-sdk-go-v2/service/sts v1.18.5 h1:L1600eLr0YvTT7gNh3Ni24yGI7NSHkq9Gp62vijPRCs= +github.com/aws/aws-sdk-go-v2/service/sts v1.18.5/go.mod h1:1mKZHLLpDMHTNSYPJ7qrcnCQdHCWsNQaT0xRvq2u80s= github.com/aws/smithy-go v1.13.5 h1:hgz0X/DX0dGqTYpGALqXJoRKRj5oQ7150i5FdTePzO8= github.com/aws/smithy-go v1.13.5/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= @@ -222,8 +222,8 @@ github.com/fluxcd/pkg/git/gogit v0.7.1/go.mod h1:QrYVKE25QpLTvM83Toec6KtVJ3WCnvv github.com/fluxcd/pkg/gittestserver v0.8.1 h1:FMqnZBuS/11+9NhtLv9UAg+wm/v0Nf+hHeUOi2wJR3Q= github.com/fluxcd/pkg/kustomize v0.13.1 h1:xfDghn/kRaa5vYN64dLTAL1b1B1tDwcXlnOAqmz5W28= github.com/fluxcd/pkg/kustomize v0.13.1/go.mod h1:W+Nm9P8yUhTb8n3hpvceUnCAjl6DFsU0k5yI+HT2NE8= -github.com/fluxcd/pkg/oci v0.20.0 h1:VuM9fevraRHf/i1fStEO8UpsJTpO1wP316QrBRIvWGI= -github.com/fluxcd/pkg/oci v0.20.0/go.mod h1:w9BnVniT5/fk1ZsZ5IfD7A3p9AgEvyAp5mFuaj/R6jY= +github.com/fluxcd/pkg/oci v0.21.0 h1:xiCGEtyIlH+wqHW0NCPmcwbEgCUbZwpTWmw7vKPHYe0= +github.com/fluxcd/pkg/oci v0.21.0/go.mod h1:DvGuPqQvoVeDmiIKNCpjgIIs2MdkGIS0BjhLZIVfOWA= github.com/fluxcd/pkg/runtime v0.29.0 h1:/BDitj/y5shWqczECCiZFsEm9FH7do4VBgMHBiRiol0= github.com/fluxcd/pkg/runtime v0.29.0/go.mod h1:NrBONYHO5Piuzm6Y7QTS3cJRlgkgsDPn2EKB6gJ4BQw= github.com/fluxcd/pkg/sourceignore v0.3.2 h1:UXRguBJA9frgRDSr7Lsc873a9YTbbpbJafEaYjkpVEs= @@ -1037,8 +1037,8 @@ rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/cli-utils v0.34.0 h1:zCUitt54f0/MYj/ajVFnG6XSXMhpZ72O/3RewIchW8w= sigs.k8s.io/cli-utils v0.34.0/go.mod h1:EXyMwPMu9OL+LRnj0JEMsGG/fRvbgFadcVlSnE8RhFs= -sigs.k8s.io/controller-runtime v0.14.4 h1:Kd/Qgx5pd2XUL08eOV2vwIq3L9GhIbJ5Nxengbd4/0M= -sigs.k8s.io/controller-runtime v0.14.4/go.mod h1:WqIdsAY6JBsjfc/CqO0CORmNtoCtE4S6qbPc9s68h+0= +sigs.k8s.io/controller-runtime v0.14.5 h1:6xaWFqzT5KuAQ9ufgUaj1G/+C4Y1GRkhrxl+BJ9i+5s= +sigs.k8s.io/controller-runtime v0.14.5/go.mod h1:WqIdsAY6JBsjfc/CqO0CORmNtoCtE4S6qbPc9s68h+0= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= sigs.k8s.io/kustomize/api v0.12.1 h1:7YM7gW3kYBwtKvoY216ZzY+8hM+lV53LUayghNRJ0vM= From 6eb3fdf8635c75ade95c329d8cb3ee100c96a728 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Wed, 8 Mar 2023 18:45:07 +0100 Subject: [PATCH 419/818] Update helm-controller to v0.31.0 Which includes an update of: - github.com/fluxcd/pkg/apis/meta to v0.19.1 - k8s.io/apiextensions-apiserver to v0.26.2 - k8s.io/apimachinery to v0.26.2 - k8s.io/client-go to v0.26.2 Signed-off-by: Hidde Beydals --- go.mod | 16 +++++----- go.sum | 32 +++++++++---------- .../bases/helm-controller/kustomization.yaml | 4 +-- manifests/crds/kustomization.yaml | 2 +- tests/azure/go.mod | 16 +++++----- tests/azure/go.sum | 32 +++++++++---------- 6 files changed, 51 insertions(+), 51 deletions(-) diff --git a/go.mod b/go.mod index 7a210606..3bb2a933 100644 --- a/go.mod +++ b/go.mod @@ -9,12 +9,12 @@ require ( github.com/distribution/distribution/v3 v3.0.0-20230223072852-e5d5810851d1 github.com/fluxcd/go-git-providers v0.14.0 github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 - github.com/fluxcd/helm-controller/api v0.30.0 + github.com/fluxcd/helm-controller/api v0.31.0 github.com/fluxcd/image-automation-controller/api v0.30.0 github.com/fluxcd/image-reflector-controller/api v0.25.0 github.com/fluxcd/kustomize-controller/api v0.34.0 github.com/fluxcd/notification-controller/api v0.32.1 - github.com/fluxcd/pkg/apis/meta v0.19.0 + github.com/fluxcd/pkg/apis/meta v0.19.1 github.com/fluxcd/pkg/git v0.10.0 github.com/fluxcd/pkg/git/gogit v0.7.1 github.com/fluxcd/pkg/kustomize v0.13.1 @@ -42,11 +42,11 @@ require ( github.com/theckman/yacspin v0.13.12 golang.org/x/crypto v0.6.0 golang.org/x/term v0.5.0 - k8s.io/api v0.26.1 - k8s.io/apiextensions-apiserver v0.26.1 - k8s.io/apimachinery v0.26.1 + k8s.io/api v0.26.2 + k8s.io/apiextensions-apiserver v0.26.2 + k8s.io/apimachinery v0.26.2 k8s.io/cli-runtime v0.26.1 - k8s.io/client-go v0.26.1 + k8s.io/client-go v0.26.2 k8s.io/kubectl v0.26.1 sigs.k8s.io/cli-utils v0.34.0 sigs.k8s.io/controller-runtime v0.14.5 @@ -110,7 +110,7 @@ require ( github.com/fatih/color v1.13.0 // indirect github.com/felixge/httpsnoop v1.0.3 // indirect github.com/fluxcd/pkg/apis/acl v0.1.0 // indirect - github.com/fluxcd/pkg/apis/kustomize v0.8.0 // indirect + github.com/fluxcd/pkg/apis/kustomize v0.8.1 // indirect github.com/fluxcd/pkg/tar v0.2.0 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/go-errors/errors v1.4.2 // indirect @@ -211,7 +211,7 @@ require ( gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/component-base v0.26.1 // indirect + k8s.io/component-base v0.26.2 // indirect k8s.io/klog/v2 v2.90.0 // indirect k8s.io/kube-openapi v0.0.0-20230109183929-3758b55a6596 // indirect k8s.io/utils v0.0.0-20221128185143-99ec85e7a448 // indirect diff --git a/go.sum b/go.sum index f8e6cbab..0dfc4b49 100644 --- a/go.sum +++ b/go.sum @@ -199,8 +199,8 @@ github.com/fluxcd/go-git-providers v0.14.0 h1:F662wkiMevhGYKCwe9AJItpq42aJbd+tQq github.com/fluxcd/go-git-providers v0.14.0/go.mod h1:cxVVQEBEswAIgbRVi50Cf6pEM/+RhNcNwDpsIkN6pG0= github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 h1:Gm5sGGk+/Wq6RhX4xpCZ2IqjDp5XkjlhENaAuAlpdKc= github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4/go.mod h1:raWgfUV7lDQVXp4QXUaeNNJkRVKz97UQuF+0kdY7Vmo= -github.com/fluxcd/helm-controller/api v0.30.0 h1:zunzaHGak5IThITRncqOsWqyvdoO6lDd5sP98ryTIcs= -github.com/fluxcd/helm-controller/api v0.30.0/go.mod h1:EfT8NQAybkDbfmqQlb1JoMtwEKudaQcHSsWQpWRdhGE= +github.com/fluxcd/helm-controller/api v0.31.0 h1:Pqe8R5SaukGGVE60U7SwiKydCjP8lZWBsU7wqeSFzMg= +github.com/fluxcd/helm-controller/api v0.31.0/go.mod h1:z9zLN31FjwHhd8RyGsrE4vnRtUp4bz5rXxd1hVX3Waw= github.com/fluxcd/image-automation-controller/api v0.30.0 h1:gO8guWCTAMUzMk0UsWbRfbJyURpg1hUR7Cva3CpAQYg= github.com/fluxcd/image-automation-controller/api v0.30.0/go.mod h1:bYbRyiyLEuVJkA+8WxLvRAsW9+OHbf8q9FHZVE2pJFs= github.com/fluxcd/image-reflector-controller/api v0.25.0 h1:tK0Hc7Xxr5z6wtBvLTX/cEwjt9YZdidwQ6JQRZuni3w= @@ -211,10 +211,10 @@ github.com/fluxcd/notification-controller/api v0.32.1 h1:b6AXRGRUKvA4P0KcoaYMXWQ github.com/fluxcd/notification-controller/api v0.32.1/go.mod h1:Zo3GPyxhFN9pGAT1Igd4XuHuF3Jog3fCyVNjRUutAxQ= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= -github.com/fluxcd/pkg/apis/kustomize v0.8.0 h1:A6aLolxPV2Sll44SOHiX96lbXXmRZmS5BoEerkRHrfM= -github.com/fluxcd/pkg/apis/kustomize v0.8.0/go.mod h1:9DPEVSfVIkiC2H3Dk6Ght4YJkswhYIaufXla4tB5Y84= -github.com/fluxcd/pkg/apis/meta v0.19.0 h1:CX75e/eaRWZDTzNdMSWomY1InlssLKcS8GQDSg/aopI= -github.com/fluxcd/pkg/apis/meta v0.19.0/go.mod h1:7b6prDPsViyAzoY7eRfSPS0/MbXpGGsOMvRq2QrTKa4= +github.com/fluxcd/pkg/apis/kustomize v0.8.1 h1:uRH9xVDJfSBGIiL6PIhkguHvf2Nme6uTWX+RX1iZznc= +github.com/fluxcd/pkg/apis/kustomize v0.8.1/go.mod h1:TBem+2mHp6Ib7XD1fmzDkoUnBzx07wSzIYo6BVx3XAc= +github.com/fluxcd/pkg/apis/meta v0.19.1 h1:fCI5CnTXpAqr67UlaI9q0H+OztMKB5kDTr6xV6vlAo0= +github.com/fluxcd/pkg/apis/meta v0.19.1/go.mod h1:ZPPMYrPnWwPQYNEGM/Uc0N4SurUPS3xNI3IIpCQEfuM= github.com/fluxcd/pkg/git v0.10.0 h1:tO04FyUV3kmyJOpAKjMFZWClqr1JNGxS8RxI7znq6is= github.com/fluxcd/pkg/git v0.10.0/go.mod h1:zn3pJ4mRItezf6J0okHZbZ+3YNAGsjnhrS+Kbo+56Jw= github.com/fluxcd/pkg/git/gogit v0.7.1 h1:9QQtx8olL9CE0RaDUIPGBvkuh1IYZ5i5iFLQbcSvcyU= @@ -1012,18 +1012,18 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -k8s.io/api v0.26.1 h1:f+SWYiPd/GsiWwVRz+NbFyCgvv75Pk9NK6dlkZgpCRQ= -k8s.io/api v0.26.1/go.mod h1:xd/GBNgR0f707+ATNyPmQ1oyKSgndzXij81FzWGsejg= -k8s.io/apiextensions-apiserver v0.26.1 h1:cB8h1SRk6e/+i3NOrQgSFij1B2S0Y0wDoNl66bn8RMI= -k8s.io/apiextensions-apiserver v0.26.1/go.mod h1:AptjOSXDGuE0JICx/Em15PaoO7buLwTs0dGleIHixSM= -k8s.io/apimachinery v0.26.1 h1:8EZ/eGJL+hY/MYCNwhmDzVqq2lPl3N3Bo8rvweJwXUQ= -k8s.io/apimachinery v0.26.1/go.mod h1:tnPmbONNJ7ByJNz9+n9kMjNP8ON+1qoAIIC70lztu74= +k8s.io/api v0.26.2 h1:dM3cinp3PGB6asOySalOZxEG4CZ0IAdJsrYZXE/ovGQ= +k8s.io/api v0.26.2/go.mod h1:1kjMQsFE+QHPfskEcVNgL3+Hp88B80uj0QtSOlj8itU= +k8s.io/apiextensions-apiserver v0.26.2 h1:/yTG2B9jGY2Q70iGskMf41qTLhL9XeNN2KhI0uDgwko= +k8s.io/apiextensions-apiserver v0.26.2/go.mod h1:Y7UPgch8nph8mGCuVk0SK83LnS8Esf3n6fUBgew8SH8= +k8s.io/apimachinery v0.26.2 h1:da1u3D5wfR5u2RpLhE/ZtZS2P7QvDgLZTi9wrNZl/tQ= +k8s.io/apimachinery v0.26.2/go.mod h1:ats7nN1LExKHvJ9TmwootT00Yz05MuYqPXEXaVeOy5I= k8s.io/cli-runtime v0.26.1 h1:f9+bRQ1V3elQsx37KmZy5fRAh56mVLbE9A7EMdlqVdI= k8s.io/cli-runtime v0.26.1/go.mod h1:+e5Ym/ARySKscUhZ8K3hZ+ZBo/wYPIcg+7b5sFYi6Gg= -k8s.io/client-go v0.26.1 h1:87CXzYJnAMGaa/IDDfRdhTzxk/wzGZ+/HUQpqgVSZXU= -k8s.io/client-go v0.26.1/go.mod h1:IWNSglg+rQ3OcvDkhY6+QLeasV4OYHDjdqeWkDQZwGE= -k8s.io/component-base v0.26.1 h1:4ahudpeQXHZL5kko+iDHqLj/FSGAEUnSVO0EBbgDd+4= -k8s.io/component-base v0.26.1/go.mod h1:VHrLR0b58oC035w6YQiBSbtsf0ThuSwXP+p5dD/kAWU= +k8s.io/client-go v0.26.2 h1:s1WkVujHX3kTp4Zn4yGNFK+dlDXy1bAAkIl+cFAiuYI= +k8s.io/client-go v0.26.2/go.mod h1:u5EjOuSyBa09yqqyY7m3abZeovO/7D/WehVVlZ2qcqU= +k8s.io/component-base v0.26.2 h1:IfWgCGUDzrD6wLLgXEstJKYZKAFS2kO+rBRi0p3LqcI= +k8s.io/component-base v0.26.2/go.mod h1:DxbuIe9M3IZPRxPIzhch2m1eT7uFrSBJUBuVCQEBivs= k8s.io/klog/v2 v2.90.0 h1:VkTxIV/FjRXn1fgNNcKGM8cfmL1Z33ZjXRTVxKCoF5M= k8s.io/klog/v2 v2.90.0/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/kube-openapi v0.0.0-20230109183929-3758b55a6596 h1:8cNCQs+WqqnSpZ7y0LMQPKD+RZUHU17VqLPMW3qxnxc= diff --git a/manifests/bases/helm-controller/kustomization.yaml b/manifests/bases/helm-controller/kustomization.yaml index 24b1b61f..268356c0 100644 --- a/manifests/bases/helm-controller/kustomization.yaml +++ b/manifests/bases/helm-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/helm-controller/releases/download/v0.30.0/helm-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.30.0/helm-controller.deployment.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.31.0/helm-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.31.0/helm-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index 79b3acba..90a0437f 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -3,7 +3,7 @@ kind: Kustomization resources: - https://github.com/fluxcd/source-controller/releases/download/v0.35.2/source-controller.crds.yaml - https://github.com/fluxcd/kustomize-controller/releases/download/v0.34.0/kustomize-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.30.0/helm-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.31.0/helm-controller.crds.yaml - https://github.com/fluxcd/notification-controller/releases/download/v0.32.1/notification-controller.crds.yaml - https://github.com/fluxcd/image-reflector-controller/releases/download/v0.25.0/image-reflector-controller.crds.yaml - https://github.com/fluxcd/image-automation-controller/releases/download/v0.30.0/image-automation-controller.crds.yaml diff --git a/tests/azure/go.mod b/tests/azure/go.mod index 4569985d..8b7efed4 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -5,13 +5,13 @@ go 1.19 require ( github.com/Azure/azure-event-hubs-go/v3 v3.4.0 github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 - github.com/fluxcd/helm-controller/api v0.30.0 + github.com/fluxcd/helm-controller/api v0.31.0 github.com/fluxcd/image-automation-controller/api v0.30.0 github.com/fluxcd/image-reflector-controller/api v0.25.0 github.com/fluxcd/kustomize-controller/api v0.34.0 github.com/fluxcd/notification-controller/api v0.32.1 github.com/fluxcd/pkg/apis/event v0.4.0 - github.com/fluxcd/pkg/apis/meta v0.19.0 + github.com/fluxcd/pkg/apis/meta v0.19.1 github.com/fluxcd/pkg/git v0.10.0 github.com/fluxcd/pkg/git/gogit v0.7.1 github.com/fluxcd/source-controller/api v0.35.2 @@ -21,10 +21,10 @@ require ( github.com/stretchr/testify v1.8.2 github.com/whilp/git-urls v1.0.0 go.uber.org/multierr v1.9.0 - k8s.io/api v0.26.1 - k8s.io/apimachinery v0.26.1 - k8s.io/client-go v0.26.1 - sigs.k8s.io/controller-runtime v0.14.4 + k8s.io/api v0.26.2 + k8s.io/apimachinery v0.26.2 + k8s.io/client-go v0.26.2 + sigs.k8s.io/controller-runtime v0.14.5 ) // Fix CVE-2022-28948 @@ -54,7 +54,7 @@ require ( github.com/emirpasic/gods v1.18.1 // indirect github.com/evanphx/json-patch/v5 v5.6.0 // indirect github.com/fluxcd/pkg/apis/acl v0.1.0 // indirect - github.com/fluxcd/pkg/apis/kustomize v0.8.0 // indirect + github.com/fluxcd/pkg/apis/kustomize v0.8.1 // indirect github.com/fluxcd/pkg/ssh v0.7.1 // indirect github.com/fluxcd/pkg/version v0.2.1 // indirect github.com/go-git/gcfg v1.5.0 // indirect @@ -109,7 +109,7 @@ require ( gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/apiextensions-apiserver v0.26.1 // indirect + k8s.io/apiextensions-apiserver v0.26.2 // indirect k8s.io/klog/v2 v2.80.1 // indirect k8s.io/kube-openapi v0.0.0-20221110221610-a28e98eb7c70 // indirect k8s.io/utils v0.0.0-20221128185143-99ec85e7a448 // indirect diff --git a/tests/azure/go.sum b/tests/azure/go.sum index d63a7abc..beabfa08 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -135,8 +135,8 @@ github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 h1:Gm5sGGk+/Wq6RhX4xpCZ2IqjDp5XkjlhENaAuAlpdKc= github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4/go.mod h1:raWgfUV7lDQVXp4QXUaeNNJkRVKz97UQuF+0kdY7Vmo= -github.com/fluxcd/helm-controller/api v0.30.0 h1:zunzaHGak5IThITRncqOsWqyvdoO6lDd5sP98ryTIcs= -github.com/fluxcd/helm-controller/api v0.30.0/go.mod h1:EfT8NQAybkDbfmqQlb1JoMtwEKudaQcHSsWQpWRdhGE= +github.com/fluxcd/helm-controller/api v0.31.0 h1:Pqe8R5SaukGGVE60U7SwiKydCjP8lZWBsU7wqeSFzMg= +github.com/fluxcd/helm-controller/api v0.31.0/go.mod h1:z9zLN31FjwHhd8RyGsrE4vnRtUp4bz5rXxd1hVX3Waw= github.com/fluxcd/image-automation-controller/api v0.30.0 h1:gO8guWCTAMUzMk0UsWbRfbJyURpg1hUR7Cva3CpAQYg= github.com/fluxcd/image-automation-controller/api v0.30.0/go.mod h1:bYbRyiyLEuVJkA+8WxLvRAsW9+OHbf8q9FHZVE2pJFs= github.com/fluxcd/image-reflector-controller/api v0.25.0 h1:tK0Hc7Xxr5z6wtBvLTX/cEwjt9YZdidwQ6JQRZuni3w= @@ -149,10 +149,10 @@ github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6 github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= github.com/fluxcd/pkg/apis/event v0.4.0 h1:UPCC269KjgKgkmtiCiBq/DNue/EpXy8Tq1zFx7oRXZM= github.com/fluxcd/pkg/apis/event v0.4.0/go.mod h1:xYOOlf+9gCBSYcs93N2XAbJvSVwuVBDBUzqhR+cAo7M= -github.com/fluxcd/pkg/apis/kustomize v0.8.0 h1:A6aLolxPV2Sll44SOHiX96lbXXmRZmS5BoEerkRHrfM= -github.com/fluxcd/pkg/apis/kustomize v0.8.0/go.mod h1:9DPEVSfVIkiC2H3Dk6Ght4YJkswhYIaufXla4tB5Y84= -github.com/fluxcd/pkg/apis/meta v0.19.0 h1:CX75e/eaRWZDTzNdMSWomY1InlssLKcS8GQDSg/aopI= -github.com/fluxcd/pkg/apis/meta v0.19.0/go.mod h1:7b6prDPsViyAzoY7eRfSPS0/MbXpGGsOMvRq2QrTKa4= +github.com/fluxcd/pkg/apis/kustomize v0.8.1 h1:uRH9xVDJfSBGIiL6PIhkguHvf2Nme6uTWX+RX1iZznc= +github.com/fluxcd/pkg/apis/kustomize v0.8.1/go.mod h1:TBem+2mHp6Ib7XD1fmzDkoUnBzx07wSzIYo6BVx3XAc= +github.com/fluxcd/pkg/apis/meta v0.19.1 h1:fCI5CnTXpAqr67UlaI9q0H+OztMKB5kDTr6xV6vlAo0= +github.com/fluxcd/pkg/apis/meta v0.19.1/go.mod h1:ZPPMYrPnWwPQYNEGM/Uc0N4SurUPS3xNI3IIpCQEfuM= github.com/fluxcd/pkg/git v0.10.0 h1:tO04FyUV3kmyJOpAKjMFZWClqr1JNGxS8RxI7znq6is= github.com/fluxcd/pkg/git v0.10.0/go.mod h1:zn3pJ4mRItezf6J0okHZbZ+3YNAGsjnhrS+Kbo+56Jw= github.com/fluxcd/pkg/git/gogit v0.7.1 h1:9QQtx8olL9CE0RaDUIPGBvkuh1IYZ5i5iFLQbcSvcyU= @@ -777,14 +777,14 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -k8s.io/api v0.26.1 h1:f+SWYiPd/GsiWwVRz+NbFyCgvv75Pk9NK6dlkZgpCRQ= -k8s.io/api v0.26.1/go.mod h1:xd/GBNgR0f707+ATNyPmQ1oyKSgndzXij81FzWGsejg= -k8s.io/apiextensions-apiserver v0.26.1 h1:cB8h1SRk6e/+i3NOrQgSFij1B2S0Y0wDoNl66bn8RMI= -k8s.io/apiextensions-apiserver v0.26.1/go.mod h1:AptjOSXDGuE0JICx/Em15PaoO7buLwTs0dGleIHixSM= -k8s.io/apimachinery v0.26.1 h1:8EZ/eGJL+hY/MYCNwhmDzVqq2lPl3N3Bo8rvweJwXUQ= -k8s.io/apimachinery v0.26.1/go.mod h1:tnPmbONNJ7ByJNz9+n9kMjNP8ON+1qoAIIC70lztu74= -k8s.io/client-go v0.26.1 h1:87CXzYJnAMGaa/IDDfRdhTzxk/wzGZ+/HUQpqgVSZXU= -k8s.io/client-go v0.26.1/go.mod h1:IWNSglg+rQ3OcvDkhY6+QLeasV4OYHDjdqeWkDQZwGE= +k8s.io/api v0.26.2 h1:dM3cinp3PGB6asOySalOZxEG4CZ0IAdJsrYZXE/ovGQ= +k8s.io/api v0.26.2/go.mod h1:1kjMQsFE+QHPfskEcVNgL3+Hp88B80uj0QtSOlj8itU= +k8s.io/apiextensions-apiserver v0.26.2 h1:/yTG2B9jGY2Q70iGskMf41qTLhL9XeNN2KhI0uDgwko= +k8s.io/apiextensions-apiserver v0.26.2/go.mod h1:Y7UPgch8nph8mGCuVk0SK83LnS8Esf3n6fUBgew8SH8= +k8s.io/apimachinery v0.26.2 h1:da1u3D5wfR5u2RpLhE/ZtZS2P7QvDgLZTi9wrNZl/tQ= +k8s.io/apimachinery v0.26.2/go.mod h1:ats7nN1LExKHvJ9TmwootT00Yz05MuYqPXEXaVeOy5I= +k8s.io/client-go v0.26.2 h1:s1WkVujHX3kTp4Zn4yGNFK+dlDXy1bAAkIl+cFAiuYI= +k8s.io/client-go v0.26.2/go.mod h1:u5EjOuSyBa09yqqyY7m3abZeovO/7D/WehVVlZ2qcqU= k8s.io/klog/v2 v2.80.1 h1:atnLQ121W371wYYFawwYx1aEY2eUfs4l3J72wtgAwV4= k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/kube-openapi v0.0.0-20221110221610-a28e98eb7c70 h1:zfqQc1V6/ZgGpvrOVvr62OjiqQX4lZjfznK34NQwkqw= @@ -794,8 +794,8 @@ k8s.io/utils v0.0.0-20221128185143-99ec85e7a448/go.mod h1:OLgZIPagt7ERELqWJFomSt rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/controller-runtime v0.14.4 h1:Kd/Qgx5pd2XUL08eOV2vwIq3L9GhIbJ5Nxengbd4/0M= -sigs.k8s.io/controller-runtime v0.14.4/go.mod h1:WqIdsAY6JBsjfc/CqO0CORmNtoCtE4S6qbPc9s68h+0= +sigs.k8s.io/controller-runtime v0.14.5 h1:6xaWFqzT5KuAQ9ufgUaj1G/+C4Y1GRkhrxl+BJ9i+5s= +sigs.k8s.io/controller-runtime v0.14.5/go.mod h1:WqIdsAY6JBsjfc/CqO0CORmNtoCtE4S6qbPc9s68h+0= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= From 1cc7682d44b555419b7d979e82006b2370d19408 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Wed, 8 Mar 2023 18:46:13 +0100 Subject: [PATCH 420/818] Replace `helmv2.KubeConfig` with `meta.KubeConfig` This is a backwards compatible change in terms of "YAML API", as they spec still equals the previous one. Object type has just changed. Signed-off-by: Hidde Beydals --- cmd/flux/create_helmrelease.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/flux/create_helmrelease.go b/cmd/flux/create_helmrelease.go index 24b5f8c0..62ca40c2 100644 --- a/cmd/flux/create_helmrelease.go +++ b/cmd/flux/create_helmrelease.go @@ -200,7 +200,7 @@ func createHelmReleaseCmdRun(cmd *cobra.Command, args []string) error { } if helmReleaseArgs.kubeConfigSecretRef != "" { - helmRelease.Spec.KubeConfig = &helmv2.KubeConfig{ + helmRelease.Spec.KubeConfig = &meta.KubeConfigReference{ SecretRef: meta.SecretKeyReference{ Name: helmReleaseArgs.kubeConfigSecretRef, }, From 44db4e100a2d3dc80bcad4009eb0e700819d2048 Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Thu, 9 Mar 2023 08:10:05 +0000 Subject: [PATCH 421/818] Update toolkit components - kustomize-controller to v0.35.0 https://github.com/fluxcd/kustomize-controller/blob/v0.35.0/CHANGELOG.md - source-controller to v0.36.0 https://github.com/fluxcd/source-controller/blob/v0.36.0/CHANGELOG.md - notification-controller to v0.33.0 https://github.com/fluxcd/notification-controller/blob/v0.33.0/CHANGELOG.md - image-reflector-controller to v0.26.0 https://github.com/fluxcd/image-reflector-controller/blob/v0.26.0/CHANGELOG.md - image-automation-controller to v0.31.0 https://github.com/fluxcd/image-automation-controller/blob/v0.31.0/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 10 +++++----- go.sum | 20 +++++++++---------- .../kustomization.yaml | 4 ++-- .../kustomization.yaml | 4 ++-- .../kustomize-controller/kustomization.yaml | 4 ++-- .../kustomization.yaml | 4 ++-- .../source-controller/kustomization.yaml | 4 ++-- manifests/crds/kustomization.yaml | 10 +++++----- 8 files changed, 30 insertions(+), 30 deletions(-) diff --git a/go.mod b/go.mod index 3bb2a933..680d69b6 100644 --- a/go.mod +++ b/go.mod @@ -10,10 +10,10 @@ require ( github.com/fluxcd/go-git-providers v0.14.0 github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 github.com/fluxcd/helm-controller/api v0.31.0 - github.com/fluxcd/image-automation-controller/api v0.30.0 - github.com/fluxcd/image-reflector-controller/api v0.25.0 - github.com/fluxcd/kustomize-controller/api v0.34.0 - github.com/fluxcd/notification-controller/api v0.32.1 + github.com/fluxcd/image-automation-controller/api v0.31.0 + github.com/fluxcd/image-reflector-controller/api v0.26.0 + github.com/fluxcd/kustomize-controller/api v0.35.0 + github.com/fluxcd/notification-controller/api v0.33.0 github.com/fluxcd/pkg/apis/meta v0.19.1 github.com/fluxcd/pkg/git v0.10.0 github.com/fluxcd/pkg/git/gogit v0.7.1 @@ -25,7 +25,7 @@ require ( github.com/fluxcd/pkg/ssh v0.7.1 github.com/fluxcd/pkg/untar v0.2.0 github.com/fluxcd/pkg/version v0.2.1 - github.com/fluxcd/source-controller/api v0.35.2 + github.com/fluxcd/source-controller/api v0.36.0 github.com/gonvenience/bunt v1.3.4 github.com/gonvenience/ytbx v1.4.4 github.com/google/go-cmp v0.5.9 diff --git a/go.sum b/go.sum index 0dfc4b49..3c8c07aa 100644 --- a/go.sum +++ b/go.sum @@ -201,14 +201,14 @@ github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 h1:Gm5sGGk+/Wq6Rh github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4/go.mod h1:raWgfUV7lDQVXp4QXUaeNNJkRVKz97UQuF+0kdY7Vmo= github.com/fluxcd/helm-controller/api v0.31.0 h1:Pqe8R5SaukGGVE60U7SwiKydCjP8lZWBsU7wqeSFzMg= github.com/fluxcd/helm-controller/api v0.31.0/go.mod h1:z9zLN31FjwHhd8RyGsrE4vnRtUp4bz5rXxd1hVX3Waw= -github.com/fluxcd/image-automation-controller/api v0.30.0 h1:gO8guWCTAMUzMk0UsWbRfbJyURpg1hUR7Cva3CpAQYg= -github.com/fluxcd/image-automation-controller/api v0.30.0/go.mod h1:bYbRyiyLEuVJkA+8WxLvRAsW9+OHbf8q9FHZVE2pJFs= -github.com/fluxcd/image-reflector-controller/api v0.25.0 h1:tK0Hc7Xxr5z6wtBvLTX/cEwjt9YZdidwQ6JQRZuni3w= -github.com/fluxcd/image-reflector-controller/api v0.25.0/go.mod h1:VXMXfQ5nLZtP+VKuqxYlQOyJ5aFjvC8YpFp1fSwcEAQ= -github.com/fluxcd/kustomize-controller/api v0.34.0 h1:azw0y8AUfNSc1r3ZJkpbf8JKfpEs1Po980NqxuaJ8Iw= -github.com/fluxcd/kustomize-controller/api v0.34.0/go.mod h1:3KgYtDR0oSVU/CL4nokdQEGKOWSq/jXvmRh9AQ8sRF8= -github.com/fluxcd/notification-controller/api v0.32.1 h1:b6AXRGRUKvA4P0KcoaYMXWQoClJrZO/B2fH5/d8kZ00= -github.com/fluxcd/notification-controller/api v0.32.1/go.mod h1:Zo3GPyxhFN9pGAT1Igd4XuHuF3Jog3fCyVNjRUutAxQ= +github.com/fluxcd/image-automation-controller/api v0.31.0 h1:xA2MXbVpXWAFBCmlaOqgLtqGfR637aw0PxyyMGaqUTI= +github.com/fluxcd/image-automation-controller/api v0.31.0/go.mod h1:kNQ/g5TK0Epwguma2+Y1binRMRZ1d6E2VmZLg2iGkqw= +github.com/fluxcd/image-reflector-controller/api v0.26.0 h1:rrr7BCjc4/D9jY7mu6bwkP/bnn5B1LWLCiFYuD6/vFg= +github.com/fluxcd/image-reflector-controller/api v0.26.0/go.mod h1:xZILku1/O6higkHTW/D3dvte4Ld7kRuZH9r+Rm4p1B0= +github.com/fluxcd/kustomize-controller/api v0.35.0 h1:G3Bk56GNGKM6R97tx3tJfwYk4N/ZS3Kv/Qqscyv0hd0= +github.com/fluxcd/kustomize-controller/api v0.35.0/go.mod h1:hrxVOUss0om4mg+ykMYtH4CgLuM2RReSPf0hG9e0b18= +github.com/fluxcd/notification-controller/api v0.33.0 h1:iVnIGDfkpVuzcILSGwi//Q3devCg7E7G4lfDx8vuvsA= +github.com/fluxcd/notification-controller/api v0.33.0/go.mod h1:0IyWy0J6+z1TbijVQjFx1gWQDOzXaRfzV2NClfjHZPk= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= github.com/fluxcd/pkg/apis/kustomize v0.8.1 h1:uRH9xVDJfSBGIiL6PIhkguHvf2Nme6uTWX+RX1iZznc= @@ -238,8 +238,8 @@ github.com/fluxcd/pkg/untar v0.2.0 h1:sJXU+FbJcNUb2ffLJNjeR3hwt3X2loVpOMlCUjyFw6 github.com/fluxcd/pkg/untar v0.2.0/go.mod h1:33AyoWaPpjX/xXpczcfhQh2AkB63TFwiR2YwROtv23E= github.com/fluxcd/pkg/version v0.2.1 h1:RRH7+6qiWHdTvRNwpoBmilnubJ2C4FZYGgy5wTDVKVc= github.com/fluxcd/pkg/version v0.2.1/go.mod h1:UmUYHDz4BxHQMesMUx3gYVrT2Wf66H49JpTg/PW+/OY= -github.com/fluxcd/source-controller/api v0.35.2 h1:1xTB0hIR8pmE8JJUQd41dHPbPx4a7EnH5iPY6bg83Oc= -github.com/fluxcd/source-controller/api v0.35.2/go.mod h1:9eIMRWYxNT3NZClA/zm5M55LleBFHB/jE+g3hNJPQBg= +github.com/fluxcd/source-controller/api v0.36.0 h1:c5/uWFqKZ9vtDkkXsdMTyiuHNNEX3B6ldjgTsB7Uy14= +github.com/fluxcd/source-controller/api v0.36.0/go.mod h1:GktZmd5Dfxo84vPFBdLDl0bBtiJRODfd47uugK0romU= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= diff --git a/manifests/bases/image-automation-controller/kustomization.yaml b/manifests/bases/image-automation-controller/kustomization.yaml index 9660563f..2a196633 100644 --- a/manifests/bases/image-automation-controller/kustomization.yaml +++ b/manifests/bases/image-automation-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.30.0/image-automation-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.30.0/image-automation-controller.deployment.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.31.0/image-automation-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.31.0/image-automation-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/image-reflector-controller/kustomization.yaml b/manifests/bases/image-reflector-controller/kustomization.yaml index 77c8b17b..90bbf706 100644 --- a/manifests/bases/image-reflector-controller/kustomization.yaml +++ b/manifests/bases/image-reflector-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.25.0/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.25.0/image-reflector-controller.deployment.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.26.0/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.26.0/image-reflector-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/kustomize-controller/kustomization.yaml b/manifests/bases/kustomize-controller/kustomization.yaml index 074464c5..8e66983c 100644 --- a/manifests/bases/kustomize-controller/kustomization.yaml +++ b/manifests/bases/kustomize-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.34.0/kustomize-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.34.0/kustomize-controller.deployment.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.35.0/kustomize-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.35.0/kustomize-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/notification-controller/kustomization.yaml b/manifests/bases/notification-controller/kustomization.yaml index afac852f..5d0e7e3a 100644 --- a/manifests/bases/notification-controller/kustomization.yaml +++ b/manifests/bases/notification-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/notification-controller/releases/download/v0.32.1/notification-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v0.32.1/notification-controller.deployment.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.33.0/notification-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.33.0/notification-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index 374a6f62..ffab7517 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.35.2/source-controller.crds.yaml -- https://github.com/fluxcd/source-controller/releases/download/v0.35.2/source-controller.deployment.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.36.0/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.36.0/source-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index 90a0437f..cbd2855d 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -1,9 +1,9 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.35.2/source-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.34.0/kustomize-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.36.0/source-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.35.0/kustomize-controller.crds.yaml - https://github.com/fluxcd/helm-controller/releases/download/v0.31.0/helm-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v0.32.1/notification-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.25.0/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.30.0/image-automation-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v0.33.0/notification-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.26.0/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.31.0/image-automation-controller.crds.yaml From 18760acaa81288639129c710678485184b3dd0d5 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Wed, 8 Mar 2023 20:06:53 +0100 Subject: [PATCH 422/818] Update Go to 1.20 Signed-off-by: Hidde Beydals --- .github/workflows/e2e-arm64.yaml | 2 +- .github/workflows/e2e-azure.yaml | 2 +- .github/workflows/e2e-bootstrap.yaml | 2 +- .github/workflows/e2e.yaml | 2 +- .github/workflows/release.yaml | 2 +- .github/workflows/scan.yaml | 4 ++-- .github/workflows/update.yaml | 2 +- CONTRIBUTING.md | 2 +- Makefile | 4 ++-- 9 files changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/workflows/e2e-arm64.yaml b/.github/workflows/e2e-arm64.yaml index e1a6fd0d..e45f45fe 100644 --- a/.github/workflows/e2e-arm64.yaml +++ b/.github/workflows/e2e-arm64.yaml @@ -23,7 +23,7 @@ jobs: - name: Setup Go uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 with: - go-version: 1.19.x + go-version: 1.20.x - name: Prepare id: prep run: | diff --git a/.github/workflows/e2e-azure.yaml b/.github/workflows/e2e-azure.yaml index 614f3bf4..f9f0f44f 100644 --- a/.github/workflows/e2e-azure.yaml +++ b/.github/workflows/e2e-azure.yaml @@ -26,7 +26,7 @@ jobs: - name: Setup Go uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 with: - go-version: 1.19.x + go-version: 1.20.x - name: Setup Flux CLI run: | make build diff --git a/.github/workflows/e2e-bootstrap.yaml b/.github/workflows/e2e-bootstrap.yaml index bbd1e57b..0d378936 100644 --- a/.github/workflows/e2e-bootstrap.yaml +++ b/.github/workflows/e2e-bootstrap.yaml @@ -27,7 +27,7 @@ jobs: - name: Setup Go uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 with: - go-version: 1.19.x + go-version: 1.20.x - name: Setup Kubernetes uses: helm/kind-action@d8ccf8fb623ce1bb360ae2f45f323d9d5c5e9f00 # v1.5.0 with: diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index a9c12b64..07229742 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -31,7 +31,7 @@ jobs: - name: Setup Go uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 with: - go-version: 1.19.x + go-version: 1.20.x - name: Setup Kubernetes uses: helm/kind-action@d8ccf8fb623ce1bb360ae2f45f323d9d5c5e9f00 # v1.5.0 with: diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index f417bc7f..7dfa7c68 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -22,7 +22,7 @@ jobs: - name: Setup Go uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 with: - go-version: 1.19.x + go-version: 1.20.x - name: Setup QEMU uses: docker/setup-qemu-action@e81a89b1732b9c48d79cd809d8d81d79c4647a18 # v2 - name: Setup Docker Buildx diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index 519dd5d0..3a2c4080 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -37,7 +37,7 @@ jobs: - name: Setup Go uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 with: - go-version: 1.19.x + go-version: 1.20.x - name: Download modules and build manifests run: | make tidy @@ -65,7 +65,7 @@ jobs: - name: Set up Go uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 with: - go-version: 1.19.x + go-version: 1.20.x - name: Initialize CodeQL uses: github/codeql-action/init@32dc499307d133bb5085bae78498c0ac2cf762d5 # v2 with: diff --git a/.github/workflows/update.yaml b/.github/workflows/update.yaml index a967cb64..5de2bb60 100644 --- a/.github/workflows/update.yaml +++ b/.github/workflows/update.yaml @@ -22,7 +22,7 @@ jobs: - name: Setup Go uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 with: - go-version: 1.19.x + go-version: 1.20.x - name: Update component versions id: update run: | diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9579bdf3..28b9acc5 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -67,7 +67,7 @@ for source changes. Prerequisites: -* go >= 1.19 +* go >= 1.20 * kubectl >= 1.20 * kustomize >= 4.4 * coreutils (on Mac OS) diff --git a/Makefile b/Makefile index cee323e9..563cd0b1 100644 --- a/Makefile +++ b/Makefile @@ -17,8 +17,8 @@ rwildcard=$(foreach d,$(wildcard $(addsuffix *,$(1))),$(call rwildcard,$(d)/,$(2 all: test build tidy: - go mod tidy -compat=1.19 - cd tests/azure && go mod tidy -compat=1.19 + go mod tidy -compat=1.20 + cd tests/azure && go mod tidy -compat=1.20 fmt: go fmt ./... From 262e6bb543f8b15d8cca898c02aae45f899a39ee Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Wed, 8 Mar 2023 20:07:31 +0100 Subject: [PATCH 423/818] Update `kubectl` in `Dockerfile` to v1.26.2 Signed-off-by: Hidde Beydals --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 6a9eba67..79b4ced5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ FROM alpine:3.17 as builder RUN apk add --no-cache ca-certificates curl ARG ARCH=linux/amd64 -ARG KUBECTL_VER=1.26.1 +ARG KUBECTL_VER=1.26.2 RUN curl -sL https://storage.googleapis.com/kubernetes-release/release/v${KUBECTL_VER}/bin/${ARCH}/kubectl \ -o /usr/local/bin/kubectl && chmod +x /usr/local/bin/kubectl && \ From fe0baa4de995542d05e8eb73a40cc1478fad7c67 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Thu, 9 Mar 2023 09:25:54 +0100 Subject: [PATCH 424/818] build: update cache keys to reflect Go 1.20 Signed-off-by: Hidde Beydals --- .github/workflows/e2e-azure.yaml | 4 ++-- .github/workflows/e2e-bootstrap.yaml | 4 ++-- .github/workflows/e2e.yaml | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/e2e-azure.yaml b/.github/workflows/e2e-azure.yaml index f9f0f44f..f98159f0 100644 --- a/.github/workflows/e2e-azure.yaml +++ b/.github/workflows/e2e-azure.yaml @@ -20,9 +20,9 @@ jobs: uses: actions/cache@69d9d449aced6a2ede0bc19182fadc3a0a42d2b0 with: path: ~/go/pkg/mod - key: ${{ runner.os }}-go1.18-${{ hashFiles('**/go.sum') }} + key: ${{ runner.os }}-go1.20-${{ hashFiles('**/go.sum') }} restore-keys: | - ${{ runner.os }}-go1.18- + ${{ runner.os }}-go1.20- - name: Setup Go uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 with: diff --git a/.github/workflows/e2e-bootstrap.yaml b/.github/workflows/e2e-bootstrap.yaml index 0d378936..5f02846e 100644 --- a/.github/workflows/e2e-bootstrap.yaml +++ b/.github/workflows/e2e-bootstrap.yaml @@ -21,9 +21,9 @@ jobs: uses: actions/cache@69d9d449aced6a2ede0bc19182fadc3a0a42d2b0 with: path: ~/go/pkg/mod - key: ${{ runner.os }}-go1.18-${{ hashFiles('**/go.sum') }} + key: ${{ runner.os }}-go1.20-${{ hashFiles('**/go.sum') }} restore-keys: | - ${{ runner.os }}-go1.18- + ${{ runner.os }}-go1.20- - name: Setup Go uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 with: diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index 07229742..5c5cd483 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -25,9 +25,9 @@ jobs: uses: actions/cache@69d9d449aced6a2ede0bc19182fadc3a0a42d2b0 with: path: ~/go/pkg/mod - key: ${{ runner.os }}-go1.18-${{ hashFiles('**/go.sum') }} + key: ${{ runner.os }}-go1.20-${{ hashFiles('**/go.sum') }} restore-keys: | - ${{ runner.os }}-go1.18- + ${{ runner.os }}-go1.20- - name: Setup Go uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 with: From db67d2c4df73230b0c9ea3c95e2a7e54f8d9183b Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Wed, 8 Mar 2023 18:59:01 +0100 Subject: [PATCH 425/818] build: update release workflow - sigstore/cosign-installer to v3.0.1 - Put (exact) version comment behind all action references, while taking note this is an absolute insane way to manage versions. Signed-off-by: Hidde Beydals --- .github/workflows/release.yaml | 32 ++++++++++++++++---------------- .goreleaser.yml | 2 ++ 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 7dfa7c68..e76b84cb 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -16,32 +16,32 @@ jobs: packages: write # needed for ghcr access steps: - name: Checkout - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c + uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 - name: Unshallow run: git fetch --prune --unshallow - name: Setup Go - uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 + uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 # v3.5.0 with: go-version: 1.20.x - name: Setup QEMU - uses: docker/setup-qemu-action@e81a89b1732b9c48d79cd809d8d81d79c4647a18 # v2 + uses: docker/setup-qemu-action@e81a89b1732b9c48d79cd809d8d81d79c4647a18 # v2.1.0 - name: Setup Docker Buildx id: buildx - uses: docker/setup-buildx-action@f03ac48505955848960e80bbb68046aa35c7b9e7 # v2 + uses: docker/setup-buildx-action@f03ac48505955848960e80bbb68046aa35c7b9e7 # v2.4.1 - name: Setup Syft uses: anchore/sbom-action/download-syft@07978da4bdb4faa726e52dfc6b1bed63d4b56479 # v0.13.3 - name: Setup Cosign - uses: sigstore/cosign-installer@9becc617647dfa20ae7b1151972e9b3a2c338a2b # v2.8.1 + uses: sigstore/cosign-installer@c3667d99424e7e6047999fb6246c0da843953c65 # v3.0.1 - name: Setup Kustomize - uses: fluxcd/pkg//actions/kustomize@main + uses: fluxcd/pkg/actions/kustomize@main - name: Login to GitHub Container Registry - uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a # v2 + uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a # v2.1.0 with: registry: ghcr.io username: fluxcdbot password: ${{ secrets.GHCR_TOKEN }} - name: Login to Docker Hub - uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a # v2 + uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a # v2.1.0 with: username: fluxcdbot password: ${{ secrets.DOCKER_FLUXCD_PASSWORD }} @@ -54,7 +54,7 @@ jobs: run: | kustomize build manifests/crds > all-crds.yaml - name: Generate OpenAPI JSON schemas from CRDs - uses: fluxcd/pkg//actions/crdjsonschema@main + uses: fluxcd/pkg/actions/crdjsonschema@main with: crd: all-crds.yaml output: schemas @@ -73,7 +73,7 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Run GoReleaser - uses: goreleaser/goreleaser-action@f82d6c1c344bcacabba2c841718984797f664a6b # v3 + uses: goreleaser/goreleaser-action@f82d6c1c344bcacabba2c841718984797f664a6b # v4.2.0 with: version: latest args: release --release-notes=output/notes.md --skip-validate @@ -88,7 +88,7 @@ jobs: id-token: write packages: write steps: - - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c + - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 - name: Setup Kustomize uses: fluxcd/pkg/actions/kustomize@main - name: Setup Flux CLI @@ -99,13 +99,13 @@ jobs: VERSION=$(flux version --client | awk '{ print $NF }') echo "version=${VERSION}" >> $GITHUB_OUTPUT - name: Login to GHCR - uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a # v2 + uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a # v2.1.0 with: registry: ghcr.io username: fluxcdbot password: ${{ secrets.GHCR_TOKEN }} - name: Login to DockerHub - uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a # v2 + uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a # v2.1.0 with: username: fluxcdbot password: ${{ secrets.DOCKER_FLUXCD_PASSWORD }} @@ -133,13 +133,13 @@ jobs: --path="./flux-system" \ --source=${{ github.repositoryUrl }} \ --revision="${{ github.ref_name }}@sha1:${{ github.sha }}" - - uses: sigstore/cosign-installer@9becc617647dfa20ae7b1151972e9b3a2c338a2b # v2.8.1 + - uses: sigstore/cosign-installer@c3667d99424e7e6047999fb6246c0da843953c65 # v3.0.1 - name: Sign manifests env: COSIGN_EXPERIMENTAL: 1 run: | - cosign sign ghcr.io/fluxcd/flux-manifests:${{ steps.prep.outputs.version }} - cosign sign docker.io/fluxcd/flux-manifests:${{ steps.prep.outputs.version }} + cosign sign --yes ghcr.io/fluxcd/flux-manifests:${{ steps.prep.outputs.version }} + cosign sign --yes docker.io/fluxcd/flux-manifests:${{ steps.prep.outputs.version }} - name: Tag manifests run: | flux tag artifact oci://ghcr.io/fluxcd/flux-manifests:${{ steps.prep.outputs.version }} \ diff --git a/.goreleaser.yml b/.goreleaser.yml index 59f4aff9..423fcea6 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -65,6 +65,7 @@ signs: certificate: '${artifact}.pem' args: - sign-blob + - "--yes" - '--output-certificate=${certificate}' - '--output-signature=${signature}' - '${artifact}' @@ -175,6 +176,7 @@ docker_signs: - COSIGN_EXPERIMENTAL=1 args: - sign + - "--yes" - '${artifact}' artifacts: all output: true From 5ab9c013789e0865ef0f52961ca827700eaaec71 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Wed, 8 Mar 2023 19:54:09 +0100 Subject: [PATCH 426/818] build: update e2e{-*} workflows To include a version number behind the actions with a SHA reference, so Dependabot will continue to update them from now on. Signed-off-by: Hidde Beydals --- .github/workflows/e2e-arm64.yaml | 4 ++-- .github/workflows/e2e-azure.yaml | 6 +++--- .github/workflows/e2e-bootstrap.yaml | 8 ++++---- .github/workflows/e2e.yaml | 8 ++++---- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/.github/workflows/e2e-arm64.yaml b/.github/workflows/e2e-arm64.yaml index e45f45fe..fb877123 100644 --- a/.github/workflows/e2e-arm64.yaml +++ b/.github/workflows/e2e-arm64.yaml @@ -19,9 +19,9 @@ jobs: KUBERNETES_VERSION: [ 1.23.13, 1.24.7, 1.25.3 ] steps: - name: Checkout - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c + uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 - name: Setup Go - uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 + uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 # v3.5.0 with: go-version: 1.20.x - name: Prepare diff --git a/.github/workflows/e2e-azure.yaml b/.github/workflows/e2e-azure.yaml index f98159f0..f252d768 100644 --- a/.github/workflows/e2e-azure.yaml +++ b/.github/workflows/e2e-azure.yaml @@ -15,16 +15,16 @@ jobs: runs-on: ubuntu-22.04 steps: - name: Checkout - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c + uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 - name: Restore Go cache - uses: actions/cache@69d9d449aced6a2ede0bc19182fadc3a0a42d2b0 + uses: actions/cache@69d9d449aced6a2ede0bc19182fadc3a0a42d2b0 # v3.2.6 with: path: ~/go/pkg/mod key: ${{ runner.os }}-go1.20-${{ hashFiles('**/go.sum') }} restore-keys: | ${{ runner.os }}-go1.20- - name: Setup Go - uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 + uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 # v3.5.0 with: go-version: 1.20.x - name: Setup Flux CLI diff --git a/.github/workflows/e2e-bootstrap.yaml b/.github/workflows/e2e-bootstrap.yaml index 5f02846e..6626e8ad 100644 --- a/.github/workflows/e2e-bootstrap.yaml +++ b/.github/workflows/e2e-bootstrap.yaml @@ -16,16 +16,16 @@ jobs: if: (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) && github.actor != 'dependabot[bot]' steps: - name: Checkout - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c + uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 - name: Restore Go cache - uses: actions/cache@69d9d449aced6a2ede0bc19182fadc3a0a42d2b0 + uses: actions/cache@69d9d449aced6a2ede0bc19182fadc3a0a42d2b0 # v3.2.6 with: path: ~/go/pkg/mod key: ${{ runner.os }}-go1.20-${{ hashFiles('**/go.sum') }} restore-keys: | ${{ runner.os }}-go1.20- - name: Setup Go - uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 + uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 # v3.5.0 with: go-version: 1.20.x - name: Setup Kubernetes @@ -35,7 +35,7 @@ jobs: cluster_name: kind node_image: kindest/node:v1.25.2 - name: Setup Kustomize - uses: fluxcd/pkg//actions/kustomize@main + uses: fluxcd/pkg/actions/kustomize@main - name: Build run: | make cmd/flux/.manifests.done diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index 5c5cd483..b98dcd74 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -20,16 +20,16 @@ jobs: - 5000:5000 steps: - name: Checkout - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c + uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 - name: Restore Go cache - uses: actions/cache@69d9d449aced6a2ede0bc19182fadc3a0a42d2b0 + uses: actions/cache@69d9d449aced6a2ede0bc19182fadc3a0a42d2b0 # v3.2.6 with: path: ~/go/pkg/mod key: ${{ runner.os }}-go1.20-${{ hashFiles('**/go.sum') }} restore-keys: | ${{ runner.os }}-go1.20- - name: Setup Go - uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 + uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 # v3.5.0 with: go-version: 1.20.x - name: Setup Kubernetes @@ -44,7 +44,7 @@ jobs: kubectl apply -f https://docs.projectcalico.org/v3.20/manifests/calico.yaml kubectl -n kube-system set env daemonset/calico-node FELIX_IGNORELOOSERPF=true - name: Setup Kustomize - uses: fluxcd/pkg//actions/kustomize@main + uses: fluxcd/pkg/actions/kustomize@main - name: Run tests run: make test - name: Run e2e tests From 940b5c4fb9845f0ef99a672011c25a00a6df0d6c Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Wed, 8 Mar 2023 19:57:13 +0100 Subject: [PATCH 427/818] build: update update workflow To include a version number behind the actions with a SHA reference, so Dependabot will continue to update them from now on. Signed-off-by: Hidde Beydals --- .github/workflows/update.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/update.yaml b/.github/workflows/update.yaml index 5de2bb60..234cdabc 100644 --- a/.github/workflows/update.yaml +++ b/.github/workflows/update.yaml @@ -18,9 +18,9 @@ jobs: pull-requests: write steps: - name: Check out code - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c + uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 - name: Setup Go - uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 + uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 # v3.5.0 with: go-version: 1.20.x - name: Update component versions @@ -81,7 +81,7 @@ jobs: - name: Create Pull Request id: cpr - uses: peter-evans/create-pull-request@2b011faafdcbc9ceb11414d64d0573f37c774b04 # v4 + uses: peter-evans/create-pull-request@2b011faafdcbc9ceb11414d64d0573f37c774b04 # v4.2.3 with: token: ${{ secrets.BOT_GITHUB_TOKEN }} commit-message: | From 879558fe203c1cd9c043a2915f383ef4fa29da19 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Wed, 8 Mar 2023 20:00:11 +0100 Subject: [PATCH 428/818] build: update scan workflow To include a (full) version number behind the actions with a SHA reference, so Dependabot will continue to update them from now on. Except for the `snyk/actions`, which follows `main`. Signed-off-by: Hidde Beydals --- .github/workflows/scan.yaml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index 3a2c4080..d8716c52 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -17,9 +17,9 @@ jobs: runs-on: ubuntu-latest if: github.actor != 'dependabot[bot]' steps: - - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c + - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 - name: Run FOSSA scan and upload build data - uses: fossa-contrib/fossa-action@6728dc6fe9a068c648d080c33829ffbe56565023 # v1 + uses: fossa-contrib/fossa-action@6728dc6fe9a068c648d080c33829ffbe56565023 # v2.0.0 with: # FOSSA Push-Only API Token fossa-api-key: 5ee8bf422db1471e0bcf2bcb289185de @@ -31,11 +31,11 @@ jobs: security-events: write if: (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) && github.actor != 'dependabot[bot]' steps: - - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c + - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 - name: Setup Kustomize - uses: fluxcd/pkg//actions/kustomize@main + uses: fluxcd/pkg/actions/kustomize@main - name: Setup Go - uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 + uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 # v3.5.0 with: go-version: 1.20.x - name: Download modules and build manifests @@ -50,7 +50,7 @@ jobs: env: SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }} - name: Upload result to GitHub Code Scanning - uses: github/codeql-action/upload-sarif@32dc499307d133bb5085bae78498c0ac2cf762d5 # v2 + uses: github/codeql-action/upload-sarif@32dc499307d133bb5085bae78498c0ac2cf762d5 # v2.2.5 with: sarif_file: snyk.sarif @@ -61,16 +61,16 @@ jobs: if: github.actor != 'dependabot[bot]' steps: - name: Checkout repository - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c + uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 - name: Set up Go - uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 + uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 # v3.5.0 with: go-version: 1.20.x - name: Initialize CodeQL - uses: github/codeql-action/init@32dc499307d133bb5085bae78498c0ac2cf762d5 # v2 + uses: github/codeql-action/init@32dc499307d133bb5085bae78498c0ac2cf762d5 # v2.2.5 with: languages: go - name: Autobuild - uses: github/codeql-action/autobuild@32dc499307d133bb5085bae78498c0ac2cf762d5 # v2 + uses: github/codeql-action/autobuild@32dc499307d133bb5085bae78498c0ac2cf762d5 # v2.2.5 - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@32dc499307d133bb5085bae78498c0ac2cf762d5 # v2 + uses: github/codeql-action/analyze@32dc499307d133bb5085bae78498c0ac2cf762d5 # v2.2.5 From d29f1c062fb392187f86023125112e9cf2c6fda4 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Wed, 8 Mar 2023 20:22:22 +0100 Subject: [PATCH 429/818] build: update Kubernetes versions in e2e workflows Signed-off-by: Hidde Beydals --- .github/workflows/e2e-arm64.yaml | 2 +- .github/workflows/e2e-bootstrap.yaml | 5 ++++- .github/workflows/e2e.yaml | 7 +++++-- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.github/workflows/e2e-arm64.yaml b/.github/workflows/e2e-arm64.yaml index fb877123..18fb7cdc 100644 --- a/.github/workflows/e2e-arm64.yaml +++ b/.github/workflows/e2e-arm64.yaml @@ -16,7 +16,7 @@ jobs: strategy: matrix: # Keep this list up-to-date with https://endoflife.date/kubernetes - KUBERNETES_VERSION: [ 1.23.13, 1.24.7, 1.25.3 ] + KUBERNETES_VERSION: [ 1.24.11, 1.25.7, 1.26.2 ] steps: - name: Checkout uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 diff --git a/.github/workflows/e2e-bootstrap.yaml b/.github/workflows/e2e-bootstrap.yaml index 6626e8ad..f36f52a8 100644 --- a/.github/workflows/e2e-bootstrap.yaml +++ b/.github/workflows/e2e-bootstrap.yaml @@ -33,7 +33,10 @@ jobs: with: version: v0.17.0 cluster_name: kind - node_image: kindest/node:v1.25.2 + # The versions below should target the newest Kubernetes version + # Keep this up-to-date with https://endoflife.date/kubernetes + node_image: kindest/node:v1.26.0 + kubectl_version: v1.26.2 - name: Setup Kustomize uses: fluxcd/pkg/actions/kustomize@main - name: Build diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index b98dcd74..4e336cd6 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -38,10 +38,13 @@ jobs: version: v0.17.0 cluster_name: kind config: .github/kind/config.yaml # disable KIND-net - node_image: kindest/node:v1.23.13 + # The versions below should target the newest Kubernetes version + # Keep this up-to-date with https://endoflife.date/kubernetes + node_image: kindest/node:v1.26.0 + kubectl_version: v1.26.2 - name: Setup Calico for network policy run: | - kubectl apply -f https://docs.projectcalico.org/v3.20/manifests/calico.yaml + kubectl apply -f https://docs.projectcalico.org/v3.25/manifests/calico.yaml kubectl -n kube-system set env daemonset/calico-node FELIX_IGNORELOOSERPF=true - name: Setup Kustomize uses: fluxcd/pkg/actions/kustomize@main From 26aafa1b6f824c963d4f66fee8d34289b62c2027 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Thu, 9 Mar 2023 10:35:37 +0100 Subject: [PATCH 430/818] e2e: update podinfo to version with newer APIs Signed-off-by: Hidde Beydals --- .github/workflows/e2e.yaml | 12 ++++++------ cmd/flux/create_source_oci_test.go | 4 ++-- cmd/flux/helmrelease_test.go | 2 +- cmd/flux/kustomization_test.go | 2 +- cmd/flux/source_oci_test.go | 2 +- .../helmrelease/create_helmrelease_from_git.golden | 2 +- .../testdata/helmrelease/create_source_git.golden | 2 +- .../helmrelease/get_helmrelease_from_git.golden | 2 +- .../reconcile_helmrelease_from_git.golden | 4 ++-- .../helmrelease/resume_helmrelease_from_git.golden | 2 +- .../create_kustomization_from_git.golden | 2 +- .../testdata/kustomization/create_source_git.golden | 2 +- .../kustomization/get_kustomization_from_git.golden | 2 +- .../reconcile_kustomization_from_git.golden | 4 ++-- .../resume_kustomization_from_git.golden | 2 +- cmd/flux/testdata/oci/create_source_oci.golden | 2 +- cmd/flux/testdata/oci/export.golden | 2 +- cmd/flux/testdata/oci/export_with_secret.golden | 2 +- cmd/flux/testdata/oci/get_oci.golden | 2 +- cmd/flux/testdata/oci/reconcile_oci.golden | 2 +- cmd/flux/testdata/oci/resume_oci.golden | 2 +- cmd/flux/testdata/trace/deployment.golden | 8 ++++---- cmd/flux/testdata/trace/deployment.yaml | 10 +++++----- cmd/flux/testdata/trace/helmrelease-oci.yaml | 4 ++-- cmd/flux/testdata/trace/helmrelease.yaml | 4 ++-- 25 files changed, 42 insertions(+), 42 deletions(-) diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index 4e336cd6..884142ff 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -81,12 +81,12 @@ jobs: run: | /tmp/flux create source git podinfo \ --url https://github.com/stefanprodan/podinfo \ - --tag-semver=">=3.2.3" + --tag-semver=">=6.3.5" - name: flux create source git export apply run: | /tmp/flux create source git podinfo-export \ --url https://github.com/stefanprodan/podinfo \ - --tag-semver=">=3.2.3" \ + --tag-semver=">=6.3.5" \ --export | kubectl apply -f - /tmp/flux delete source git podinfo-export --silent - name: flux get sources git @@ -143,7 +143,7 @@ jobs: --target-namespace=default \ --source=HelmRepository/podinfo.flux-system \ --chart=podinfo \ - --chart-version=">4.0.0 <5.0.0" + --chart-version=">6.0.0 <7.0.0" - name: flux create helmrelease --source=GitRepository/podinfo run: | /tmp/flux create hr podinfo-git \ @@ -187,11 +187,11 @@ jobs: run: | /tmp/flux create source oci podinfo-oci \ --url oci://ghcr.io/stefanprodan/manifests/podinfo \ - --tag-semver 6.1.x \ + --tag-semver 6.3.x \ --interval 10m /tmp/flux create kustomization podinfo-oci \ --source=OCIRepository/podinfo-oci \ - --path="./kustomize" \ + --path="./" \ --prune=true \ --interval=5m \ --target-namespace=default \ @@ -212,7 +212,7 @@ jobs: /tmp/flux -n apps create hr podinfo-helm \ --source=HelmRepository/podinfo \ --chart=podinfo \ - --chart-version="5.0.x" \ + --chart-version="6.3.x" \ --service-account=dev-team - name: flux2-kustomize-helm-example run: | diff --git a/cmd/flux/create_source_oci_test.go b/cmd/flux/create_source_oci_test.go index 04be9cb1..8972b813 100644 --- a/cmd/flux/create_source_oci_test.go +++ b/cmd/flux/create_source_oci_test.go @@ -38,12 +38,12 @@ func TestCreateSourceOCI(t *testing.T) { }, { name: "export manifest", - args: "create source oci podinfo --url=oci://ghcr.io/stefanprodan/manifests/podinfo --tag=6.1.6 --interval 10m --export", + args: "create source oci podinfo --url=oci://ghcr.io/stefanprodan/manifests/podinfo --tag=6.3.5 --interval 10m --export", assertFunc: assertGoldenFile("./testdata/oci/export.golden"), }, { name: "export manifest with secret", - args: "create source oci podinfo --url=oci://ghcr.io/stefanprodan/manifests/podinfo --tag=6.1.6 --interval 10m --secret-ref=creds --export", + args: "create source oci podinfo --url=oci://ghcr.io/stefanprodan/manifests/podinfo --tag=6.3.5 --interval 10m --secret-ref=creds --export", assertFunc: assertGoldenFile("./testdata/oci/export_with_secret.golden"), }, } diff --git a/cmd/flux/helmrelease_test.go b/cmd/flux/helmrelease_test.go index 0686592e..bdf7d87c 100644 --- a/cmd/flux/helmrelease_test.go +++ b/cmd/flux/helmrelease_test.go @@ -37,7 +37,7 @@ func TestHelmReleaseFromGit(t *testing.T) { tmpl map[string]string }{ { - "create source git thrfg --url=https://github.com/stefanprodan/podinfo --branch=main --tag=6.0.0", + "create source git thrfg --url=https://github.com/stefanprodan/podinfo --branch=main --tag=6.3.5", "testdata/helmrelease/create_source_git.golden", nil, }, diff --git a/cmd/flux/kustomization_test.go b/cmd/flux/kustomization_test.go index b76022f3..e49aba46 100644 --- a/cmd/flux/kustomization_test.go +++ b/cmd/flux/kustomization_test.go @@ -37,7 +37,7 @@ func TestKustomizationFromGit(t *testing.T) { tmpl map[string]string }{ { - "create source git tkfg --url=https://github.com/stefanprodan/podinfo --branch=main --tag=6.0.0", + "create source git tkfg --url=https://github.com/stefanprodan/podinfo --branch=main --tag=6.3.5", "testdata/kustomization/create_source_git.golden", nil, }, diff --git a/cmd/flux/source_oci_test.go b/cmd/flux/source_oci_test.go index 051af4f8..8f8fa47c 100644 --- a/cmd/flux/source_oci_test.go +++ b/cmd/flux/source_oci_test.go @@ -39,7 +39,7 @@ func TestSourceOCI(t *testing.T) { tmpl map[string]string }{ { - "create source oci thrfg --url=oci://ghcr.io/stefanprodan/manifests/podinfo --tag=6.1.6 --interval 10m", + "create source oci thrfg --url=oci://ghcr.io/stefanprodan/manifests/podinfo --tag=6.3.5 --interval 10m", "testdata/oci/create_source_oci.golden", nil, }, diff --git a/cmd/flux/testdata/helmrelease/create_helmrelease_from_git.golden b/cmd/flux/testdata/helmrelease/create_helmrelease_from_git.golden index d5f35515..3b241421 100644 --- a/cmd/flux/testdata/helmrelease/create_helmrelease_from_git.golden +++ b/cmd/flux/testdata/helmrelease/create_helmrelease_from_git.golden @@ -3,4 +3,4 @@ ✔ HelmRelease created ◎ waiting for HelmRelease reconciliation ✔ HelmRelease thrfg is ready -✔ applied revision 6.0.0 +✔ applied revision 6.3.5 diff --git a/cmd/flux/testdata/helmrelease/create_source_git.golden b/cmd/flux/testdata/helmrelease/create_source_git.golden index 61d4d7c8..7db60b29 100644 --- a/cmd/flux/testdata/helmrelease/create_source_git.golden +++ b/cmd/flux/testdata/helmrelease/create_source_git.golden @@ -3,4 +3,4 @@ ✔ GitRepository source created ◎ waiting for GitRepository source reconciliation ✔ GitRepository source reconciliation completed -✔ fetched revision: 6.0.0@sha1:627d5c4bb67b77185f37e31d734b085019ff2951 +✔ fetched revision: 6.3.5@sha1:67e2c98a60dc92283531412a9e604dd4bae005a9 diff --git a/cmd/flux/testdata/helmrelease/get_helmrelease_from_git.golden b/cmd/flux/testdata/helmrelease/get_helmrelease_from_git.golden index e802cb36..b384ecb8 100644 --- a/cmd/flux/testdata/helmrelease/get_helmrelease_from_git.golden +++ b/cmd/flux/testdata/helmrelease/get_helmrelease_from_git.golden @@ -1,2 +1,2 @@ NAME REVISION SUSPENDED READY MESSAGE -thrfg 6.0.0 False True Release reconciliation succeeded +thrfg 6.3.5 False True Release reconciliation succeeded diff --git a/cmd/flux/testdata/helmrelease/reconcile_helmrelease_from_git.golden b/cmd/flux/testdata/helmrelease/reconcile_helmrelease_from_git.golden index 968c220b..7f7e22f5 100644 --- a/cmd/flux/testdata/helmrelease/reconcile_helmrelease_from_git.golden +++ b/cmd/flux/testdata/helmrelease/reconcile_helmrelease_from_git.golden @@ -1,8 +1,8 @@ ► annotating GitRepository thrfg in {{ .ns }} namespace ✔ GitRepository annotated ◎ waiting for GitRepository reconciliation -✔ fetched revision 6.0.0@sha1:627d5c4bb67b77185f37e31d734b085019ff2951 +✔ fetched revision 6.3.5@sha1:67e2c98a60dc92283531412a9e604dd4bae005a9 ► annotating HelmRelease thrfg in {{ .ns }} namespace ✔ HelmRelease annotated ◎ waiting for HelmRelease reconciliation -✔ applied revision 6.0.0 +✔ applied revision 6.3.5 diff --git a/cmd/flux/testdata/helmrelease/resume_helmrelease_from_git.golden b/cmd/flux/testdata/helmrelease/resume_helmrelease_from_git.golden index 38672988..4369d16a 100644 --- a/cmd/flux/testdata/helmrelease/resume_helmrelease_from_git.golden +++ b/cmd/flux/testdata/helmrelease/resume_helmrelease_from_git.golden @@ -2,4 +2,4 @@ ✔ helmrelease resumed ◎ waiting for HelmRelease reconciliation ✔ HelmRelease reconciliation completed -✔ applied revision 6.0.0 +✔ applied revision 6.3.5 diff --git a/cmd/flux/testdata/kustomization/create_kustomization_from_git.golden b/cmd/flux/testdata/kustomization/create_kustomization_from_git.golden index 814b8802..a328a1c3 100644 --- a/cmd/flux/testdata/kustomization/create_kustomization_from_git.golden +++ b/cmd/flux/testdata/kustomization/create_kustomization_from_git.golden @@ -3,4 +3,4 @@ ✔ Kustomization created ◎ waiting for Kustomization reconciliation ✔ Kustomization tkfg is ready -✔ applied revision 6.0.0@sha1:627d5c4bb67b77185f37e31d734b085019ff2951 +✔ applied revision 6.3.5@sha1:67e2c98a60dc92283531412a9e604dd4bae005a9 diff --git a/cmd/flux/testdata/kustomization/create_source_git.golden b/cmd/flux/testdata/kustomization/create_source_git.golden index 61d4d7c8..7db60b29 100644 --- a/cmd/flux/testdata/kustomization/create_source_git.golden +++ b/cmd/flux/testdata/kustomization/create_source_git.golden @@ -3,4 +3,4 @@ ✔ GitRepository source created ◎ waiting for GitRepository source reconciliation ✔ GitRepository source reconciliation completed -✔ fetched revision: 6.0.0@sha1:627d5c4bb67b77185f37e31d734b085019ff2951 +✔ fetched revision: 6.3.5@sha1:67e2c98a60dc92283531412a9e604dd4bae005a9 diff --git a/cmd/flux/testdata/kustomization/get_kustomization_from_git.golden b/cmd/flux/testdata/kustomization/get_kustomization_from_git.golden index 55d327c2..99c0d2bc 100644 --- a/cmd/flux/testdata/kustomization/get_kustomization_from_git.golden +++ b/cmd/flux/testdata/kustomization/get_kustomization_from_git.golden @@ -1,2 +1,2 @@ NAME REVISION SUSPENDED READY MESSAGE -tkfg 6.0.0@sha1:627d5c4b False True Applied revision: 6.0.0@sha1:627d5c4b +tkfg 6.3.5@sha1:67e2c98a False True Applied revision: 6.3.5@sha1:67e2c98a diff --git a/cmd/flux/testdata/kustomization/reconcile_kustomization_from_git.golden b/cmd/flux/testdata/kustomization/reconcile_kustomization_from_git.golden index 41cbb716..b781eca7 100644 --- a/cmd/flux/testdata/kustomization/reconcile_kustomization_from_git.golden +++ b/cmd/flux/testdata/kustomization/reconcile_kustomization_from_git.golden @@ -1,8 +1,8 @@ ► annotating GitRepository tkfg in {{ .ns }} namespace ✔ GitRepository annotated ◎ waiting for GitRepository reconciliation -✔ fetched revision 6.0.0@sha1:627d5c4bb67b77185f37e31d734b085019ff2951 +✔ fetched revision 6.3.5@sha1:67e2c98a60dc92283531412a9e604dd4bae005a9 ► annotating Kustomization tkfg in {{ .ns }} namespace ✔ Kustomization annotated ◎ waiting for Kustomization reconciliation -✔ applied revision 6.0.0@sha1:627d5c4bb67b77185f37e31d734b085019ff2951 +✔ applied revision 6.3.5@sha1:67e2c98a60dc92283531412a9e604dd4bae005a9 diff --git a/cmd/flux/testdata/kustomization/resume_kustomization_from_git.golden b/cmd/flux/testdata/kustomization/resume_kustomization_from_git.golden index c9a4b67f..93d8a012 100644 --- a/cmd/flux/testdata/kustomization/resume_kustomization_from_git.golden +++ b/cmd/flux/testdata/kustomization/resume_kustomization_from_git.golden @@ -2,4 +2,4 @@ ✔ kustomization resumed ◎ waiting for Kustomization reconciliation ✔ Kustomization reconciliation completed -✔ applied revision 6.0.0@sha1:627d5c4bb67b77185f37e31d734b085019ff2951 +✔ applied revision 6.3.5@sha1:67e2c98a60dc92283531412a9e604dd4bae005a9 diff --git a/cmd/flux/testdata/oci/create_source_oci.golden b/cmd/flux/testdata/oci/create_source_oci.golden index f7e8afa2..68b64df3 100644 --- a/cmd/flux/testdata/oci/create_source_oci.golden +++ b/cmd/flux/testdata/oci/create_source_oci.golden @@ -2,4 +2,4 @@ ✔ OCIRepository created ◎ waiting for OCIRepository reconciliation ✔ OCIRepository reconciliation completed -✔ fetched revision: 6.1.6@sha256:dbdb109711ffb3be77504d2670dbe13c24dd63d8d7f1fb489d350e5bfe930dd3 +✔ fetched revision: 6.3.5@sha256:6c959c51ccbb952e5fe4737563338a0aaf975675dcf812912cf09e5463181871 diff --git a/cmd/flux/testdata/oci/export.golden b/cmd/flux/testdata/oci/export.golden index b9339d73..0f898188 100644 --- a/cmd/flux/testdata/oci/export.golden +++ b/cmd/flux/testdata/oci/export.golden @@ -7,6 +7,6 @@ metadata: spec: interval: 10m0s ref: - tag: 6.1.6 + tag: 6.3.5 url: oci://ghcr.io/stefanprodan/manifests/podinfo diff --git a/cmd/flux/testdata/oci/export_with_secret.golden b/cmd/flux/testdata/oci/export_with_secret.golden index 385f7707..436d6310 100644 --- a/cmd/flux/testdata/oci/export_with_secret.golden +++ b/cmd/flux/testdata/oci/export_with_secret.golden @@ -7,7 +7,7 @@ metadata: spec: interval: 10m0s ref: - tag: 6.1.6 + tag: 6.3.5 secretRef: name: creds url: oci://ghcr.io/stefanprodan/manifests/podinfo diff --git a/cmd/flux/testdata/oci/get_oci.golden b/cmd/flux/testdata/oci/get_oci.golden index ecd3a5b2..fb1db40b 100644 --- a/cmd/flux/testdata/oci/get_oci.golden +++ b/cmd/flux/testdata/oci/get_oci.golden @@ -1,2 +1,2 @@ NAME REVISION SUSPENDED READY MESSAGE -thrfg 6.1.6@sha256:dbdb1097 False True stored artifact for digest '6.1.6@sha256:dbdb1097' +thrfg 6.3.5@sha256:6c959c51 False True stored artifact for digest '6.3.5@sha256:6c959c51' diff --git a/cmd/flux/testdata/oci/reconcile_oci.golden b/cmd/flux/testdata/oci/reconcile_oci.golden index c1501f87..ad42fed9 100644 --- a/cmd/flux/testdata/oci/reconcile_oci.golden +++ b/cmd/flux/testdata/oci/reconcile_oci.golden @@ -1,4 +1,4 @@ ► annotating OCIRepository thrfg in {{ .ns }} namespace ✔ OCIRepository annotated ◎ waiting for OCIRepository reconciliation -✔ fetched revision 6.1.6@sha256:dbdb109711ffb3be77504d2670dbe13c24dd63d8d7f1fb489d350e5bfe930dd3 +✔ fetched revision 6.3.5@sha256:6c959c51ccbb952e5fe4737563338a0aaf975675dcf812912cf09e5463181871 diff --git a/cmd/flux/testdata/oci/resume_oci.golden b/cmd/flux/testdata/oci/resume_oci.golden index fe6531d7..00e628d5 100644 --- a/cmd/flux/testdata/oci/resume_oci.golden +++ b/cmd/flux/testdata/oci/resume_oci.golden @@ -2,4 +2,4 @@ ✔ source oci resumed ◎ waiting for OCIRepository reconciliation ✔ OCIRepository reconciliation completed -✔ fetched revision 6.1.6@sha256:dbdb109711ffb3be77504d2670dbe13c24dd63d8d7f1fb489d350e5bfe930dd3 +✔ fetched revision 6.3.5@sha256:6c959c51ccbb952e5fe4737563338a0aaf975675dcf812912cf09e5463181871 diff --git a/cmd/flux/testdata/trace/deployment.golden b/cmd/flux/testdata/trace/deployment.golden index b567388a..6702a0d6 100644 --- a/cmd/flux/testdata/trace/deployment.golden +++ b/cmd/flux/testdata/trace/deployment.golden @@ -5,17 +5,17 @@ Status: Managed by Flux --- HelmRelease: podinfo Namespace: {{ .ns }} -Revision: 6.0.0 +Revision: 6.3.5 Status: Last reconciled at {{ .helmReleaseLastReconcile }} Message: Release reconciliation succeeded --- HelmChart: podinfo-podinfo Namespace: {{ .fluxns }} Chart: podinfo -Version: 6.0.0 -Revision: 6.0.0 +Version: 6.3.5 +Revision: 6.3.5 Status: Last reconciled at {{ .helmChartLastReconcile }} -Message: Fetched revision: 6.0.0 +Message: Fetched revision: 6.3.5 --- HelmRepository: podinfo Namespace: {{ .fluxns }} diff --git a/cmd/flux/testdata/trace/deployment.yaml b/cmd/flux/testdata/trace/deployment.yaml index 11d947ce..32194506 100644 --- a/cmd/flux/testdata/trace/deployment.yaml +++ b/cmd/flux/testdata/trace/deployment.yaml @@ -59,8 +59,8 @@ status: status: "True" type: Ready helmChart: {{ .fluxns }}/podinfo-podinfo - lastAppliedRevision: 6.0.0 - lastAttemptedRevision: 6.0.0 + lastAppliedRevision: 6.3.5 + lastAttemptedRevision: 6.3.5 lastAttemptedValuesChecksum: c31db75d05b7515eba2eef47bd71038c74b2e531 --- apiVersion: source.toolkit.fluxcd.io/v1beta1 @@ -73,18 +73,18 @@ spec: sourceRef: kind: HelmRepository name: podinfo - version: 6.0.0 + version: 6.3.5 interval: 5m status: artifact: checksum: cf13ba96773d9a879cd052c86e73199b3f96c854 lastUpdateTime: "2021-08-01T04:42:55Z" - revision: 6.0.0 + revision: 6.3.5 path: "example" url: "example" conditions: - lastTransitionTime: "2021-07-16T15:32:09Z" - message: 'Fetched revision: 6.0.0' + message: 'Fetched revision: 6.3.5' reason: ChartPullSucceeded status: "True" type: Ready diff --git a/cmd/flux/testdata/trace/helmrelease-oci.yaml b/cmd/flux/testdata/trace/helmrelease-oci.yaml index bc2f5fef..b6591960 100644 --- a/cmd/flux/testdata/trace/helmrelease-oci.yaml +++ b/cmd/flux/testdata/trace/helmrelease-oci.yaml @@ -34,8 +34,8 @@ status: status: "True" type: Ready helmChart: {{ .fluxns }}/podinfo-podinfo - lastAppliedRevision: 6.0.0 - lastAttemptedRevision: 6.0.0 + lastAppliedRevision: 6.3.5 + lastAttemptedRevision: 6.3.5 lastAttemptedValuesChecksum: c31db75d05b7515eba2eef47bd71038c74b2e531 --- apiVersion: kustomize.toolkit.fluxcd.io/v1beta2 diff --git a/cmd/flux/testdata/trace/helmrelease.yaml b/cmd/flux/testdata/trace/helmrelease.yaml index a30663b0..8a48b9a5 100644 --- a/cmd/flux/testdata/trace/helmrelease.yaml +++ b/cmd/flux/testdata/trace/helmrelease.yaml @@ -34,8 +34,8 @@ status: status: "True" type: Ready helmChart: {{ .fluxns }}/podinfo-podinfo - lastAppliedRevision: 6.0.0 - lastAttemptedRevision: 6.0.0 + lastAppliedRevision: 6.3.5 + lastAttemptedRevision: 6.3.5 lastAttemptedValuesChecksum: c31db75d05b7515eba2eef47bd71038c74b2e531 --- apiVersion: kustomize.toolkit.fluxcd.io/v1beta1 From 0b5502963e2ba2bdfba537a6f1101e427523c0f1 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Thu, 9 Mar 2023 09:38:40 +0100 Subject: [PATCH 431/818] tests/azure: update dependencies - github.com/fluxcd/image-automation-controller/api to v0.31.0 - github.com/fluxcd/image-reflector-controller/api to v0.26.0 - github.com/fluxcd/kustomize-controller/api to v0.35.0 - github.com/fluxcd/notification-controller/api to v0.33.0 - github.com/fluxcd/pkg/apis/event to v0.4.1 - github.com/fluxcd/pkg/git to v0.11.0 - github.com/fluxcd/pkg/git/gogit to v0.8.1 - github.com/fluxcd/source-controller/api to v0.36.0 - github.com/hashicorp/terraform-exec to v0.18.1 - go.uber.org/multierr to v1.10.0 Signed-off-by: Hidde Beydals --- tests/azure/go.mod | 37 ++++++++++++----------- tests/azure/go.sum | 75 +++++++++++++++++++++++----------------------- 2 files changed, 57 insertions(+), 55 deletions(-) diff --git a/tests/azure/go.mod b/tests/azure/go.mod index 8b7efed4..a7368020 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -6,21 +6,21 @@ require ( github.com/Azure/azure-event-hubs-go/v3 v3.4.0 github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 github.com/fluxcd/helm-controller/api v0.31.0 - github.com/fluxcd/image-automation-controller/api v0.30.0 - github.com/fluxcd/image-reflector-controller/api v0.25.0 - github.com/fluxcd/kustomize-controller/api v0.34.0 - github.com/fluxcd/notification-controller/api v0.32.1 - github.com/fluxcd/pkg/apis/event v0.4.0 + github.com/fluxcd/image-automation-controller/api v0.31.0 + github.com/fluxcd/image-reflector-controller/api v0.26.0 + github.com/fluxcd/kustomize-controller/api v0.35.0 + github.com/fluxcd/notification-controller/api v0.33.0 + github.com/fluxcd/pkg/apis/event v0.4.1 github.com/fluxcd/pkg/apis/meta v0.19.1 - github.com/fluxcd/pkg/git v0.10.0 - github.com/fluxcd/pkg/git/gogit v0.7.1 - github.com/fluxcd/source-controller/api v0.35.2 + github.com/fluxcd/pkg/git v0.11.0 + github.com/fluxcd/pkg/git/gogit v0.8.1 + github.com/fluxcd/source-controller/api v0.36.0 github.com/hashicorp/hc-install v0.5.0 - github.com/hashicorp/terraform-exec v0.18.0 + github.com/hashicorp/terraform-exec v0.18.1 github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 github.com/stretchr/testify v1.8.2 github.com/whilp/git-urls v1.0.0 - go.uber.org/multierr v1.9.0 + go.uber.org/multierr v1.10.0 k8s.io/api v0.26.2 k8s.io/apimachinery v0.26.2 k8s.io/client-go v0.26.2 @@ -44,8 +44,9 @@ require ( github.com/Azure/go-autorest/tracing v0.6.0 // indirect github.com/Masterminds/semver/v3 v3.2.0 // indirect github.com/Microsoft/go-winio v0.6.0 // indirect - github.com/ProtonMail/go-crypto v0.0.0-20230214155104-81033d7f4442 // indirect + github.com/ProtonMail/go-crypto v0.0.0-20230217124315-7d5c6f04bbb8 // indirect github.com/acomagu/bufpipe v1.0.3 // indirect + github.com/apparentlymart/go-textseg/v13 v13.0.0 // indirect github.com/cloudflare/circl v1.3.2 // indirect github.com/cyphar/filepath-securejoin v0.2.3 // indirect github.com/davecgh/go-spew v1.1.1 // indirect @@ -55,7 +56,7 @@ require ( github.com/evanphx/json-patch/v5 v5.6.0 // indirect github.com/fluxcd/pkg/apis/acl v0.1.0 // indirect github.com/fluxcd/pkg/apis/kustomize v0.8.1 // indirect - github.com/fluxcd/pkg/ssh v0.7.1 // indirect + github.com/fluxcd/pkg/ssh v0.7.3 // indirect github.com/fluxcd/pkg/version v0.2.1 // indirect github.com/go-git/gcfg v1.5.0 // indirect github.com/go-git/go-billy/v5 v5.4.1 // indirect @@ -92,15 +93,15 @@ require ( github.com/sergi/go-diff v1.3.1 // indirect github.com/skeema/knownhosts v1.1.0 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect - github.com/zclconf/go-cty v1.12.1 // indirect + github.com/zclconf/go-cty v1.13.0 // indirect go.uber.org/atomic v1.10.0 // indirect - golang.org/x/crypto v0.6.0 // indirect + golang.org/x/crypto v0.7.0 // indirect golang.org/x/mod v0.8.0 // indirect - golang.org/x/net v0.7.0 // indirect + golang.org/x/net v0.8.0 // indirect golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b // indirect - golang.org/x/sys v0.5.0 // indirect - golang.org/x/term v0.5.0 // indirect - golang.org/x/text v0.7.0 // indirect + golang.org/x/sys v0.6.0 // indirect + golang.org/x/term v0.6.0 // indirect + golang.org/x/text v0.8.0 // indirect golang.org/x/time v0.3.0 // indirect golang.org/x/tools v0.6.0 // indirect google.golang.org/appengine v1.6.7 // indirect diff --git a/tests/azure/go.sum b/tests/azure/go.sum index beabfa08..075974f1 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -76,8 +76,8 @@ github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2B github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4/go.mod h1:UBYPn8k0D56RtnR8RFQMjmh4KrZzWJ5o7Z9SYjossQ8= -github.com/ProtonMail/go-crypto v0.0.0-20230214155104-81033d7f4442 h1:OUJ54Fkd+AQXYmr9eOUxZfWNzpK3/e/KD40qa2rKHS4= -github.com/ProtonMail/go-crypto v0.0.0-20230214155104-81033d7f4442/go.mod h1:I0gYDMZ6Z5GRU7l58bNFSkPTFN6Yl12dsUlAZ8xy98g= +github.com/ProtonMail/go-crypto v0.0.0-20230217124315-7d5c6f04bbb8 h1:wPbRQzjjwFc0ih8puEVAOFGELsn1zoIIYdxvML7mDxA= +github.com/ProtonMail/go-crypto v0.0.0-20230217124315-7d5c6f04bbb8/go.mod h1:I0gYDMZ6Z5GRU7l58bNFSkPTFN6Yl12dsUlAZ8xy98g= github.com/acomagu/bufpipe v1.0.3 h1:fxAGrHZTgQ9w5QqVItgzwj235/uYZYgbXitB+dLupOk= github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= @@ -85,6 +85,7 @@ github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFI github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/apparentlymart/go-textseg v1.0.0/go.mod h1:z96Txxhf3xSFMPmb5X/1W05FF/Nj9VFpLOpjS5yuumk= +github.com/apparentlymart/go-textseg/v13 v13.0.0 h1:Y+KvPE1NYz0xl601PVImeQfFyEy6iT90AvPUL1NNfNw= github.com/apparentlymart/go-textseg/v13 v13.0.0/go.mod h1:ZK2fH7c4NqDTLtiYLvIkEghdlcqw7yxLeM89kiTRPUo= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= @@ -137,33 +138,33 @@ github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 h1:Gm5sGGk+/Wq6Rh github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4/go.mod h1:raWgfUV7lDQVXp4QXUaeNNJkRVKz97UQuF+0kdY7Vmo= github.com/fluxcd/helm-controller/api v0.31.0 h1:Pqe8R5SaukGGVE60U7SwiKydCjP8lZWBsU7wqeSFzMg= github.com/fluxcd/helm-controller/api v0.31.0/go.mod h1:z9zLN31FjwHhd8RyGsrE4vnRtUp4bz5rXxd1hVX3Waw= -github.com/fluxcd/image-automation-controller/api v0.30.0 h1:gO8guWCTAMUzMk0UsWbRfbJyURpg1hUR7Cva3CpAQYg= -github.com/fluxcd/image-automation-controller/api v0.30.0/go.mod h1:bYbRyiyLEuVJkA+8WxLvRAsW9+OHbf8q9FHZVE2pJFs= -github.com/fluxcd/image-reflector-controller/api v0.25.0 h1:tK0Hc7Xxr5z6wtBvLTX/cEwjt9YZdidwQ6JQRZuni3w= -github.com/fluxcd/image-reflector-controller/api v0.25.0/go.mod h1:VXMXfQ5nLZtP+VKuqxYlQOyJ5aFjvC8YpFp1fSwcEAQ= -github.com/fluxcd/kustomize-controller/api v0.34.0 h1:azw0y8AUfNSc1r3ZJkpbf8JKfpEs1Po980NqxuaJ8Iw= -github.com/fluxcd/kustomize-controller/api v0.34.0/go.mod h1:3KgYtDR0oSVU/CL4nokdQEGKOWSq/jXvmRh9AQ8sRF8= -github.com/fluxcd/notification-controller/api v0.32.1 h1:b6AXRGRUKvA4P0KcoaYMXWQoClJrZO/B2fH5/d8kZ00= -github.com/fluxcd/notification-controller/api v0.32.1/go.mod h1:Zo3GPyxhFN9pGAT1Igd4XuHuF3Jog3fCyVNjRUutAxQ= +github.com/fluxcd/image-automation-controller/api v0.31.0 h1:xA2MXbVpXWAFBCmlaOqgLtqGfR637aw0PxyyMGaqUTI= +github.com/fluxcd/image-automation-controller/api v0.31.0/go.mod h1:kNQ/g5TK0Epwguma2+Y1binRMRZ1d6E2VmZLg2iGkqw= +github.com/fluxcd/image-reflector-controller/api v0.26.0 h1:rrr7BCjc4/D9jY7mu6bwkP/bnn5B1LWLCiFYuD6/vFg= +github.com/fluxcd/image-reflector-controller/api v0.26.0/go.mod h1:xZILku1/O6higkHTW/D3dvte4Ld7kRuZH9r+Rm4p1B0= +github.com/fluxcd/kustomize-controller/api v0.35.0 h1:G3Bk56GNGKM6R97tx3tJfwYk4N/ZS3Kv/Qqscyv0hd0= +github.com/fluxcd/kustomize-controller/api v0.35.0/go.mod h1:hrxVOUss0om4mg+ykMYtH4CgLuM2RReSPf0hG9e0b18= +github.com/fluxcd/notification-controller/api v0.33.0 h1:iVnIGDfkpVuzcILSGwi//Q3devCg7E7G4lfDx8vuvsA= +github.com/fluxcd/notification-controller/api v0.33.0/go.mod h1:0IyWy0J6+z1TbijVQjFx1gWQDOzXaRfzV2NClfjHZPk= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= -github.com/fluxcd/pkg/apis/event v0.4.0 h1:UPCC269KjgKgkmtiCiBq/DNue/EpXy8Tq1zFx7oRXZM= -github.com/fluxcd/pkg/apis/event v0.4.0/go.mod h1:xYOOlf+9gCBSYcs93N2XAbJvSVwuVBDBUzqhR+cAo7M= +github.com/fluxcd/pkg/apis/event v0.4.1 h1:63wP8NM/uA4680F4Ft8q8/0rJivX90i7FmMkRvUI8Is= +github.com/fluxcd/pkg/apis/event v0.4.1/go.mod h1:LHT1ZsbMrcHwCHQCaFtQviQBZwhMOAbTUPK6+KgBkFo= github.com/fluxcd/pkg/apis/kustomize v0.8.1 h1:uRH9xVDJfSBGIiL6PIhkguHvf2Nme6uTWX+RX1iZznc= github.com/fluxcd/pkg/apis/kustomize v0.8.1/go.mod h1:TBem+2mHp6Ib7XD1fmzDkoUnBzx07wSzIYo6BVx3XAc= github.com/fluxcd/pkg/apis/meta v0.19.1 h1:fCI5CnTXpAqr67UlaI9q0H+OztMKB5kDTr6xV6vlAo0= github.com/fluxcd/pkg/apis/meta v0.19.1/go.mod h1:ZPPMYrPnWwPQYNEGM/Uc0N4SurUPS3xNI3IIpCQEfuM= -github.com/fluxcd/pkg/git v0.10.0 h1:tO04FyUV3kmyJOpAKjMFZWClqr1JNGxS8RxI7znq6is= -github.com/fluxcd/pkg/git v0.10.0/go.mod h1:zn3pJ4mRItezf6J0okHZbZ+3YNAGsjnhrS+Kbo+56Jw= -github.com/fluxcd/pkg/git/gogit v0.7.1 h1:9QQtx8olL9CE0RaDUIPGBvkuh1IYZ5i5iFLQbcSvcyU= -github.com/fluxcd/pkg/git/gogit v0.7.1/go.mod h1:QrYVKE25QpLTvM83Toec6KtVJ3WCnvvGTybL+2Zabxs= +github.com/fluxcd/pkg/git v0.11.0 h1:GvB+3QOB8xbF5WNjVrkskseOnsZBuqSOzW3VxfsHuX4= +github.com/fluxcd/pkg/git v0.11.0/go.mod h1:VHRVlrZMHNoWBlaSAWxlGH6Vwlb9VRazUhPUykviHwY= +github.com/fluxcd/pkg/git/gogit v0.8.1 h1:Q3EV2WBX6HiXSmsHyrwFzwl82gO4ZtFwb675iQPWwVc= +github.com/fluxcd/pkg/git/gogit v0.8.1/go.mod h1:5M27gCl0gyo6l+ht9HwZSzimPY3LahKVIJ7/1vCCctg= github.com/fluxcd/pkg/gittestserver v0.8.1 h1:FMqnZBuS/11+9NhtLv9UAg+wm/v0Nf+hHeUOi2wJR3Q= -github.com/fluxcd/pkg/ssh v0.7.1 h1:2Gn4gYAw06RmZuzNy5nbtG6ueV6k7wFntUARpFtylTM= -github.com/fluxcd/pkg/ssh v0.7.1/go.mod h1:vUoYqejhXyBnUf8cNuOxEYZabWUSPviHWsZX9eUyjso= +github.com/fluxcd/pkg/ssh v0.7.3 h1:Dhs+nXdp806lBriUJtPyRi0SVIVWbJafJGD/qQ71GiY= +github.com/fluxcd/pkg/ssh v0.7.3/go.mod h1:/z5ZNgQz+h9s/2nNFKAcZDHtZRMA1nj5YcriGDUOoLY= github.com/fluxcd/pkg/version v0.2.1 h1:RRH7+6qiWHdTvRNwpoBmilnubJ2C4FZYGgy5wTDVKVc= github.com/fluxcd/pkg/version v0.2.1/go.mod h1:UmUYHDz4BxHQMesMUx3gYVrT2Wf66H49JpTg/PW+/OY= -github.com/fluxcd/source-controller/api v0.35.2 h1:1xTB0hIR8pmE8JJUQd41dHPbPx4a7EnH5iPY6bg83Oc= -github.com/fluxcd/source-controller/api v0.35.2/go.mod h1:9eIMRWYxNT3NZClA/zm5M55LleBFHB/jE+g3hNJPQBg= +github.com/fluxcd/source-controller/api v0.36.0 h1:c5/uWFqKZ9vtDkkXsdMTyiuHNNEX3B6ldjgTsB7Uy14= +github.com/fluxcd/source-controller/api v0.36.0/go.mod h1:GktZmd5Dfxo84vPFBdLDl0bBtiJRODfd47uugK0romU= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= @@ -284,8 +285,8 @@ github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ github.com/hashicorp/hc-install v0.5.0 h1:D9bl4KayIYKEeJ4vUDe9L5huqxZXczKaykSRcmQ0xY0= github.com/hashicorp/hc-install v0.5.0/go.mod h1:JyzMfbzfSBSjoDCRPna1vi/24BEDxFaCPfdHtM5SCdo= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= -github.com/hashicorp/terraform-exec v0.18.0 h1:BJa6/Fhxnb0zvsEGqUrFSybcnhAiBVSUgG7s09b6XlI= -github.com/hashicorp/terraform-exec v0.18.0/go.mod h1:6PMRgg0Capig5Fn0zW9/+WM3vQsdwotwa8uxDVzLpHE= +github.com/hashicorp/terraform-exec v0.18.1 h1:LAbfDvNQU1l0NOQlTuudjczVhHj061fNX5H8XZxHlH4= +github.com/hashicorp/terraform-exec v0.18.1/go.mod h1:58wg4IeuAJ6LVsLUeD2DWZZoc/bYi6dzhLHzxM41980= github.com/hashicorp/terraform-json v0.15.0 h1:/gIyNtR6SFw6h5yzlbDbACyGvIhKtQi8mTsbkNd79lE= github.com/hashicorp/terraform-json v0.15.0/go.mod h1:+L1RNzjDU5leLFZkHTFTbJXaoqUC6TqXlFgDoOXrtvk= github.com/huandu/xstrings v1.3.1/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= @@ -353,7 +354,7 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/onsi/ginkgo/v2 v2.6.0 h1:9t9b9vRUbFq3C4qKFCGkVuq/fIHji802N1nrtkh1mNc= -github.com/onsi/gomega v1.26.0 h1:03cDLK28U6hWvCAns6NeydX3zIm4SF3ci69ulidS32Q= +github.com/onsi/gomega v1.27.2 h1:SKU0CXeKE/WVgIV1T61kSa3+IRE8Ekrv9rdXDwwTqnY= github.com/pjbgf/sha1cd v0.2.3 h1:uKQP/7QOzNtKYH7UTohZLcjF5/55EnTw0jO/Ru4jZwI= github.com/pjbgf/sha1cd v0.2.3/go.mod h1:HOK9QrgzdHpbc2Kzip0Q1yi3M2MFGPADtR6HjG65m5M= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -416,8 +417,8 @@ github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9dec github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/zclconf/go-cty v1.2.0/go.mod h1:hOPWgoHbaTUnI5k4D2ld+GRpFJSCe6bCM7m1q/N4PQ8= github.com/zclconf/go-cty v1.10.0/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uUAzyuvAk= -github.com/zclconf/go-cty v1.12.1 h1:PcupnljUm9EIvbgSHQnHhUr3fO6oFmkOrvs2BAFNXXY= -github.com/zclconf/go-cty v1.12.1/go.mod h1:s9IfD1LK5ccNMSWCVFCE2rJfHiZgi7JijgeWIMfhLvA= +github.com/zclconf/go-cty v1.13.0 h1:It5dfKTTZHe9aeppbNOda3mN7Ag7sg6QkBNm6TkyFa0= +github.com/zclconf/go-cty v1.13.0/go.mod h1:YKQzy/7pZ7iq2jNFzy5go57xdxdWoLLpaEp4u238AE0= github.com/zclconf/go-cty-debug v0.0.0-20191215020915-b22d67c1ba0b/go.mod h1:ZRKQfBXbGkpdV6QMzT3rU1kSTAnfu1dO8dPKjYprgj8= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= @@ -427,8 +428,8 @@ go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= -go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= -go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= +go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ= +go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= @@ -447,8 +448,8 @@ golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= -golang.org/x/crypto v0.6.0 h1:qfktjS5LUO+fFKeJXZ+ikTRijMmljikvG68fpMMruSc= -golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= +golang.org/x/crypto v0.7.0 h1:AvwMYaRytfdeVt3u6mLaxYtErKYjxA2OXjJ1HHq6t3A= +golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -521,8 +522,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= -golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g= -golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ= +golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= 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= @@ -589,15 +590,15 @@ golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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= golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= -golang.org/x/term v0.5.0 h1:n2a8QNdAb0sZNpU9R1ALUXBbY+w51fCQDN+7EdxNBsY= -golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.6.0 h1:clScbb1cHjoCkyRbWwBEUZ5H/tIFu5TAXIqaZD0Gcjw= +golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -608,8 +609,8 @@ golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68= +golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= From 59ca6548ea62400d1994871c77df9a83a33a9afc Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Thu, 9 Mar 2023 13:24:10 +0200 Subject: [PATCH 432/818] ci: Use latest available images of kindest/node Signed-off-by: Stefan Prodan --- .github/workflows/e2e-arm64.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/e2e-arm64.yaml b/.github/workflows/e2e-arm64.yaml index 18fb7cdc..d6729c3e 100644 --- a/.github/workflows/e2e-arm64.yaml +++ b/.github/workflows/e2e-arm64.yaml @@ -16,7 +16,8 @@ jobs: strategy: matrix: # Keep this list up-to-date with https://endoflife.date/kubernetes - KUBERNETES_VERSION: [ 1.24.11, 1.25.7, 1.26.2 ] + # Check which versions are available on DockerHub with 'crane ls kindest/node' + KUBERNETES_VERSION: [ 1.24.7, 1.25.3, 1.26.0 ] steps: - name: Checkout uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 From 9274e80d71832ebd9cf956028b25b0d4a1124838 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Thu, 9 Mar 2023 13:06:43 +0100 Subject: [PATCH 433/818] Update dependencies - github.com/fluxcd/pkg/git to v0.11.0 - github.com/fluxcd/pkg/git/gogit to v0.8.1 - github.com/fluxcd/pkg/kustomize to v0.13.2 - github.com/fluxcd/pkg/oci to v0.21.1 - github.com/fluxcd/pkg/runtime to v0.31.0 - github.com/fluxcd/pkg/ssa to v0.24.1 - github.com/fluxcd/pkg/ssh to v0.7.3 - golang.org/x/crypto to v0.7.0 - golang.org/x/term to v0.6.0 - k8s.io/cli-runtime to v0.26.2 - k8s.io/kubectl to v0.26.2 Signed-off-by: Hidde Beydals --- go.mod | 32 ++++++++++++++-------------- go.sum | 66 +++++++++++++++++++++++++++++----------------------------- 2 files changed, 49 insertions(+), 49 deletions(-) diff --git a/go.mod b/go.mod index 680d69b6..0766cc87 100644 --- a/go.mod +++ b/go.mod @@ -15,14 +15,14 @@ require ( github.com/fluxcd/kustomize-controller/api v0.35.0 github.com/fluxcd/notification-controller/api v0.33.0 github.com/fluxcd/pkg/apis/meta v0.19.1 - github.com/fluxcd/pkg/git v0.10.0 - github.com/fluxcd/pkg/git/gogit v0.7.1 - github.com/fluxcd/pkg/kustomize v0.13.1 - github.com/fluxcd/pkg/oci v0.21.0 - github.com/fluxcd/pkg/runtime v0.29.0 + github.com/fluxcd/pkg/git v0.11.0 + github.com/fluxcd/pkg/git/gogit v0.8.1 + github.com/fluxcd/pkg/kustomize v0.13.2 + github.com/fluxcd/pkg/oci v0.21.1 + github.com/fluxcd/pkg/runtime v0.31.0 github.com/fluxcd/pkg/sourceignore v0.3.2 - github.com/fluxcd/pkg/ssa v0.23.1 - github.com/fluxcd/pkg/ssh v0.7.1 + github.com/fluxcd/pkg/ssa v0.24.1 + github.com/fluxcd/pkg/ssh v0.7.3 github.com/fluxcd/pkg/untar v0.2.0 github.com/fluxcd/pkg/version v0.2.1 github.com/fluxcd/source-controller/api v0.36.0 @@ -40,14 +40,14 @@ require ( github.com/spf13/cobra v1.6.1 github.com/spf13/pflag v1.0.5 github.com/theckman/yacspin v0.13.12 - golang.org/x/crypto v0.6.0 - golang.org/x/term v0.5.0 + golang.org/x/crypto v0.7.0 + golang.org/x/term v0.6.0 k8s.io/api v0.26.2 k8s.io/apiextensions-apiserver v0.26.2 k8s.io/apimachinery v0.26.2 - k8s.io/cli-runtime v0.26.1 + k8s.io/cli-runtime v0.26.2 k8s.io/client-go v0.26.2 - k8s.io/kubectl v0.26.1 + k8s.io/kubectl v0.26.2 sigs.k8s.io/cli-utils v0.34.0 sigs.k8s.io/controller-runtime v0.14.5 sigs.k8s.io/kustomize/api v0.12.1 @@ -59,7 +59,7 @@ require ( replace gopkg.in/yaml.v3 => gopkg.in/yaml.v3 v3.0.1 require ( - github.com/Azure/azure-sdk-for-go/sdk/azcore v1.3.1 // indirect + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.4.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.2.1 // indirect github.com/Azure/azure-sdk-for-go/sdk/internal v1.1.2 // indirect github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect @@ -197,11 +197,11 @@ require ( github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f // indirect go.starlark.net v0.0.0-20221028183056-acb66ad56dd2 // indirect golang.org/x/mod v0.8.0 // indirect - golang.org/x/net v0.7.0 // indirect + golang.org/x/net v0.8.0 // indirect golang.org/x/oauth2 v0.3.0 // indirect golang.org/x/sync v0.1.0 // indirect - golang.org/x/sys v0.5.0 // indirect - golang.org/x/text v0.7.0 // indirect + golang.org/x/sys v0.6.0 // indirect + golang.org/x/text v0.8.0 // indirect golang.org/x/time v0.3.0 // indirect golang.org/x/tools v0.6.0 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect @@ -212,7 +212,7 @@ require ( gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect k8s.io/component-base v0.26.2 // indirect - k8s.io/klog/v2 v2.90.0 // indirect + k8s.io/klog/v2 v2.90.1 // indirect k8s.io/kube-openapi v0.0.0-20230109183929-3758b55a6596 // indirect k8s.io/utils v0.0.0-20221128185143-99ec85e7a448 // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect diff --git a/go.sum b/go.sum index 3c8c07aa..1e600ba2 100644 --- a/go.sum +++ b/go.sum @@ -32,8 +32,8 @@ cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RX cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/AdaLogics/go-fuzz-headers v0.0.0-20230106234847-43070de90fa1 h1:EKPd1INOIyr5hWOWhvpmQpY6tKjeG0hT1s3AMC/9fic= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.3.1 h1:gVXuXcWd1i4C2Ruxe321aU+IKGaStvGB/S90PUPB/W8= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.3.1/go.mod h1:DffdKW9RFqa5VgmsjUOsS7UE7eiA5iAvYUs63bhKQ0M= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.4.0 h1:rTnT/Jrcm+figWlYz4Ixzt0SJVR2cMC8lvZcimipiEY= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.4.0/go.mod h1:ON4tFdPTwRcgWEaVDrN3584Ef+b7GgSJaXxe5fW9t4M= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.2.1 h1:T8quHYlUGyb/oqtSTwqlCr1ilJHrDv+ZtpSfo+hm1BU= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.2.1/go.mod h1:gLa1CL2RNE4s7M3yopJ/p0iq5DdY6Yv5ZUt9MTRZOQM= github.com/Azure/azure-sdk-for-go/sdk/internal v1.1.2 h1:+5VZ72z0Qan5Bog5C+ZkgSqUbeVUd9wgtHOrIKuc5b8= @@ -215,23 +215,23 @@ github.com/fluxcd/pkg/apis/kustomize v0.8.1 h1:uRH9xVDJfSBGIiL6PIhkguHvf2Nme6uTW github.com/fluxcd/pkg/apis/kustomize v0.8.1/go.mod h1:TBem+2mHp6Ib7XD1fmzDkoUnBzx07wSzIYo6BVx3XAc= github.com/fluxcd/pkg/apis/meta v0.19.1 h1:fCI5CnTXpAqr67UlaI9q0H+OztMKB5kDTr6xV6vlAo0= github.com/fluxcd/pkg/apis/meta v0.19.1/go.mod h1:ZPPMYrPnWwPQYNEGM/Uc0N4SurUPS3xNI3IIpCQEfuM= -github.com/fluxcd/pkg/git v0.10.0 h1:tO04FyUV3kmyJOpAKjMFZWClqr1JNGxS8RxI7znq6is= -github.com/fluxcd/pkg/git v0.10.0/go.mod h1:zn3pJ4mRItezf6J0okHZbZ+3YNAGsjnhrS+Kbo+56Jw= -github.com/fluxcd/pkg/git/gogit v0.7.1 h1:9QQtx8olL9CE0RaDUIPGBvkuh1IYZ5i5iFLQbcSvcyU= -github.com/fluxcd/pkg/git/gogit v0.7.1/go.mod h1:QrYVKE25QpLTvM83Toec6KtVJ3WCnvvGTybL+2Zabxs= +github.com/fluxcd/pkg/git v0.11.0 h1:GvB+3QOB8xbF5WNjVrkskseOnsZBuqSOzW3VxfsHuX4= +github.com/fluxcd/pkg/git v0.11.0/go.mod h1:VHRVlrZMHNoWBlaSAWxlGH6Vwlb9VRazUhPUykviHwY= +github.com/fluxcd/pkg/git/gogit v0.8.1 h1:Q3EV2WBX6HiXSmsHyrwFzwl82gO4ZtFwb675iQPWwVc= +github.com/fluxcd/pkg/git/gogit v0.8.1/go.mod h1:5M27gCl0gyo6l+ht9HwZSzimPY3LahKVIJ7/1vCCctg= github.com/fluxcd/pkg/gittestserver v0.8.1 h1:FMqnZBuS/11+9NhtLv9UAg+wm/v0Nf+hHeUOi2wJR3Q= -github.com/fluxcd/pkg/kustomize v0.13.1 h1:xfDghn/kRaa5vYN64dLTAL1b1B1tDwcXlnOAqmz5W28= -github.com/fluxcd/pkg/kustomize v0.13.1/go.mod h1:W+Nm9P8yUhTb8n3hpvceUnCAjl6DFsU0k5yI+HT2NE8= -github.com/fluxcd/pkg/oci v0.21.0 h1:xiCGEtyIlH+wqHW0NCPmcwbEgCUbZwpTWmw7vKPHYe0= -github.com/fluxcd/pkg/oci v0.21.0/go.mod h1:DvGuPqQvoVeDmiIKNCpjgIIs2MdkGIS0BjhLZIVfOWA= -github.com/fluxcd/pkg/runtime v0.29.0 h1:/BDitj/y5shWqczECCiZFsEm9FH7do4VBgMHBiRiol0= -github.com/fluxcd/pkg/runtime v0.29.0/go.mod h1:NrBONYHO5Piuzm6Y7QTS3cJRlgkgsDPn2EKB6gJ4BQw= +github.com/fluxcd/pkg/kustomize v0.13.2 h1:isA9yi+m7sSIxdTrFR1U7+LyS2BraG07ZkKLHw3bnGo= +github.com/fluxcd/pkg/kustomize v0.13.2/go.mod h1:1H9qednPxL/JvZE5at/f6wVHTH4WmxJYqfgVOZJ3uAk= +github.com/fluxcd/pkg/oci v0.21.1 h1:9kn19wkabE2xB77NRlOtMJlSYhZmUjdloZCzlHdAS6s= +github.com/fluxcd/pkg/oci v0.21.1/go.mod h1:9E2DBlQII7YmeWt2ieTh38wwkiBqx3yg5NEJ51uefaA= +github.com/fluxcd/pkg/runtime v0.31.0 h1:addyXaANHl/A68bEjCbiR4HzcFKgfXv1eaG7B7ZHxOo= +github.com/fluxcd/pkg/runtime v0.31.0/go.mod h1:toGOOubMo4ZC1aWhB8C3drdTglr1/A1dETeNwjiIv0g= github.com/fluxcd/pkg/sourceignore v0.3.2 h1:UXRguBJA9frgRDSr7Lsc873a9YTbbpbJafEaYjkpVEs= github.com/fluxcd/pkg/sourceignore v0.3.2/go.mod h1:yuJzKggph0Bdbk9LgXjJQhvJZSTJV/1vS7mJuB7mPa0= -github.com/fluxcd/pkg/ssa v0.23.1 h1:om5u4O2xU9ESZHf1wBzeyrsqe/nKf2+eIs9aXocnVW4= -github.com/fluxcd/pkg/ssa v0.23.1/go.mod h1:3RvpJRHRzE4z168elHxEJit76Ol7uyoBtNNDV5H85es= -github.com/fluxcd/pkg/ssh v0.7.1 h1:2Gn4gYAw06RmZuzNy5nbtG6ueV6k7wFntUARpFtylTM= -github.com/fluxcd/pkg/ssh v0.7.1/go.mod h1:vUoYqejhXyBnUf8cNuOxEYZabWUSPviHWsZX9eUyjso= +github.com/fluxcd/pkg/ssa v0.24.1 h1:0dn5FqyYdGa+VuDp5EJrkLbPq5xhhSAAkMgGUeMpOM0= +github.com/fluxcd/pkg/ssa v0.24.1/go.mod h1:nEOUOwGotBlNZkTkO6GHPlI0U0BmHTavFd1Jk+TzsGw= +github.com/fluxcd/pkg/ssh v0.7.3 h1:Dhs+nXdp806lBriUJtPyRi0SVIVWbJafJGD/qQ71GiY= +github.com/fluxcd/pkg/ssh v0.7.3/go.mod h1:/z5ZNgQz+h9s/2nNFKAcZDHtZRMA1nj5YcriGDUOoLY= github.com/fluxcd/pkg/tar v0.2.0 h1:HEUHgONQYsJGeZZ4x6h5nQU9Aox1I4T3bOp1faWTqf8= github.com/fluxcd/pkg/tar v0.2.0/go.mod h1:w0/TOC7kwBJhnSJn7TCABkc/I7ib1f2Yz6vOsbLBnhw= github.com/fluxcd/pkg/untar v0.2.0 h1:sJXU+FbJcNUb2ffLJNjeR3hwt3X2loVpOMlCUjyFw6E= @@ -598,8 +598,8 @@ github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= github.com/texttheater/golang-levenshtein v1.0.1 h1:+cRNoVrfiwufQPhoMzB6N0Yf/Mqajr6t1lOv8GyGE2U= github.com/texttheater/golang-levenshtein v1.0.1/go.mod h1:PYAKrbF5sAiq9wd+H82hs7gNaen0CplQ9uvm6+enD/8= github.com/theckman/yacspin v0.13.12 h1:CdZ57+n0U6JMuh2xqjnjRq5Haj6v1ner2djtLQRzJr4= @@ -657,8 +657,8 @@ golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= -golang.org/x/crypto v0.6.0 h1:qfktjS5LUO+fFKeJXZ+ikTRijMmljikvG68fpMMruSc= -golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= +golang.org/x/crypto v0.7.0 h1:AvwMYaRytfdeVt3u6mLaxYtErKYjxA2OXjJ1HHq6t3A= +golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -732,8 +732,8 @@ golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g= -golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ= +golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= 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= @@ -818,15 +818,15 @@ golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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= golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.5.0 h1:n2a8QNdAb0sZNpU9R1ALUXBbY+w51fCQDN+7EdxNBsY= -golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.6.0 h1:clScbb1cHjoCkyRbWwBEUZ5H/tIFu5TAXIqaZD0Gcjw= +golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -836,8 +836,8 @@ golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68= +golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1018,18 +1018,18 @@ k8s.io/apiextensions-apiserver v0.26.2 h1:/yTG2B9jGY2Q70iGskMf41qTLhL9XeNN2KhI0u k8s.io/apiextensions-apiserver v0.26.2/go.mod h1:Y7UPgch8nph8mGCuVk0SK83LnS8Esf3n6fUBgew8SH8= k8s.io/apimachinery v0.26.2 h1:da1u3D5wfR5u2RpLhE/ZtZS2P7QvDgLZTi9wrNZl/tQ= k8s.io/apimachinery v0.26.2/go.mod h1:ats7nN1LExKHvJ9TmwootT00Yz05MuYqPXEXaVeOy5I= -k8s.io/cli-runtime v0.26.1 h1:f9+bRQ1V3elQsx37KmZy5fRAh56mVLbE9A7EMdlqVdI= -k8s.io/cli-runtime v0.26.1/go.mod h1:+e5Ym/ARySKscUhZ8K3hZ+ZBo/wYPIcg+7b5sFYi6Gg= +k8s.io/cli-runtime v0.26.2 h1:6XcIQOYW1RGNwFgRwejvyUyAojhToPmJLGr0JBMC5jw= +k8s.io/cli-runtime v0.26.2/go.mod h1:U7sIXX7n6ZB+MmYQsyJratzPeJwgITqrSlpr1a5wM5I= k8s.io/client-go v0.26.2 h1:s1WkVujHX3kTp4Zn4yGNFK+dlDXy1bAAkIl+cFAiuYI= k8s.io/client-go v0.26.2/go.mod h1:u5EjOuSyBa09yqqyY7m3abZeovO/7D/WehVVlZ2qcqU= k8s.io/component-base v0.26.2 h1:IfWgCGUDzrD6wLLgXEstJKYZKAFS2kO+rBRi0p3LqcI= k8s.io/component-base v0.26.2/go.mod h1:DxbuIe9M3IZPRxPIzhch2m1eT7uFrSBJUBuVCQEBivs= -k8s.io/klog/v2 v2.90.0 h1:VkTxIV/FjRXn1fgNNcKGM8cfmL1Z33ZjXRTVxKCoF5M= -k8s.io/klog/v2 v2.90.0/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/klog/v2 v2.90.1 h1:m4bYOKall2MmOiRaR1J+We67Do7vm9KiQVlT96lnHUw= +k8s.io/klog/v2 v2.90.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/kube-openapi v0.0.0-20230109183929-3758b55a6596 h1:8cNCQs+WqqnSpZ7y0LMQPKD+RZUHU17VqLPMW3qxnxc= k8s.io/kube-openapi v0.0.0-20230109183929-3758b55a6596/go.mod h1:/BYxry62FuDzmI+i9B+X2pqfySRmSOW2ARmj5Zbqhj0= -k8s.io/kubectl v0.26.1 h1:K8A0Jjlwg8GqrxOXxAbjY5xtmXYeYjLU96cHp2WMQ7s= -k8s.io/kubectl v0.26.1/go.mod h1:miYFVzldVbdIiXMrHZYmL/EDWwJKM+F0sSsdxsATFPo= +k8s.io/kubectl v0.26.2 h1:SMPB4j48eVFxsYluBq3VLyqXtE6b72YnszkbTAtFye4= +k8s.io/kubectl v0.26.2/go.mod h1:KYWOXSwp2BrDn3kPeoU/uKzKtdqvhK1dgZGd0+no4cM= k8s.io/utils v0.0.0-20221128185143-99ec85e7a448 h1:KTgPnR10d5zhztWptI952TNtt/4u5h3IzDXkdIMuo2Y= k8s.io/utils v0.0.0-20221128185143-99ec85e7a448/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= From 16e0b93becccaa3c254936ea5c69a16d871bae84 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Thu, 9 Mar 2023 13:09:05 +0100 Subject: [PATCH 434/818] diff: update Action references to typed Action Signed-off-by: Hidde Beydals --- internal/build/diff.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/internal/build/diff.go b/internal/build/diff.go index 9709f1de..4acd98a9 100644 --- a/internal/build/diff.go +++ b/internal/build/diff.go @@ -105,16 +105,16 @@ func (b *Builder) Diff() (string, bool, error) { // if the object is a sops secret, we need to // make sure we diff only if the keys are different - if obj.GetKind() == "Secret" && change.Action == string(ssa.ConfiguredAction) { + if obj.GetKind() == "Secret" && change.Action == ssa.ConfiguredAction { diffSopsSecret(obj, liveObject, mergedObject, change) } - if change.Action == string(ssa.CreatedAction) { + if change.Action == ssa.CreatedAction { output.WriteString(writeString(fmt.Sprintf("► %s created\n", change.Subject), bunt.Green)) createdOrDrifted = true } - if change.Action == string(ssa.ConfiguredAction) { + if change.Action == ssa.ConfiguredAction { output.WriteString(bunt.Sprint(fmt.Sprintf("► %s drifted\n", change.Subject))) liveFile, mergedFile, tmpDir, err := writeYamls(liveObject, mergedObject) if err != nil { @@ -232,10 +232,10 @@ func applySopsDiff(data map[string]interface{}, liveObject, mergedObject *unstru if bytes.Contains(v, []byte(mask)) { if liveObject != nil && mergedObject != nil { - change.Action = string(ssa.UnchangedAction) + change.Action = ssa.UnchangedAction liveKeys, mergedKeys := sopsComparableByKeys(liveObject), sopsComparableByKeys(mergedObject) if cmp.Diff(liveKeys, mergedKeys) != "" { - change.Action = string(ssa.ConfiguredAction) + change.Action = ssa.ConfiguredAction } } } From 5b18289808260ff079586a0e83ef71fbdeb40e3b Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Wed, 22 Feb 2023 19:30:53 +0100 Subject: [PATCH 435/818] Add `flux events` command This adds a command to Flux which behaves similarly as `kubectl events`, including the Flux sources events when showing events for top level objects, thus making debugging easy for Flux users. For example, `flux events --for kustomization/` includes the events of its source (e.g. a `GitRepository`, `OCIRepository` or `Bucket`). In addition, `flux events --for helmrelease/` includes events of the `HelmChart` and `HelmRepository`. While `flux events --for alerts/` includes the events of the `Provider`. Signed-off-by: Somtochi Onyekwere --- cmd/flux/events.go | 490 ++++++++++++++++++++++++++++++++++++++++ cmd/flux/events_test.go | 411 +++++++++++++++++++++++++++++++++ go.mod | 1 + go.sum | 2 + 4 files changed, 904 insertions(+) create mode 100644 cmd/flux/events.go create mode 100644 cmd/flux/events_test.go diff --git a/cmd/flux/events.go b/cmd/flux/events.go new file mode 100644 index 00000000..6f9bba05 --- /dev/null +++ b/cmd/flux/events.go @@ -0,0 +1,490 @@ +/* +Copyright 2023 The Kubernetes Authors. +Copyright 2023 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "context" + "fmt" + "os" + "sort" + "strings" + "time" + + "github.com/spf13/cobra" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "k8s.io/apimachinery/pkg/fields" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/types" + "k8s.io/apimachinery/pkg/util/duration" + "k8s.io/apimachinery/pkg/watch" + runtimeresource "k8s.io/cli-runtime/pkg/resource" + cmdutil "k8s.io/kubectl/pkg/cmd/util" + "sigs.k8s.io/controller-runtime/pkg/client" + + helmv2beta1 "github.com/fluxcd/helm-controller/api/v2beta1" + autov1 "github.com/fluxcd/image-automation-controller/api/v1beta1" + imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta2" + kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" + notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + + "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/flux2/pkg/printers" +) + +var eventsCmd = &cobra.Command{ + Use: "events", + Short: "Display Kubernetes events for Flux resources", + Long: "The events sub-command shows Kubernetes events from Flux resources", + Example: ` # Display events for flux resources in default namespace + flux events -n default + + # Display events for flux resources in all namespaces + flux events -A + + # Display events for flux resources + flux events --for Kustomization/podinfo +`, + RunE: eventsCmdRun, +} + +type eventFlags struct { + allNamespaces bool + watch bool + forSelector string + filterTypes []string +} + +var eventArgs eventFlags + +func init() { + eventsCmd.Flags().BoolVarP(&eventArgs.allNamespaces, "all-namespaces", "A", false, + "display events from Flux resources across all namespaces") + eventsCmd.Flags().BoolVarP(&eventArgs.watch, "watch", "w", false, + "indicate if the events should be streamed") + eventsCmd.Flags().StringVar(&eventArgs.forSelector, "for", "", + "get events for a particular object") + eventsCmd.Flags().StringSliceVar(&eventArgs.filterTypes, "types", []string{}, "filter events for certain types") + rootCmd.AddCommand(eventsCmd) +} + +func eventsCmdRun(cmd *cobra.Command, args []string) error { + ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) + defer cancel() + + kubeclient, err := utils.KubeClient(kubeconfigArgs, kubeclientOptions) + if err != nil { + return err + } + + namespace := *kubeconfigArgs.Namespace + if eventArgs.allNamespaces { + namespace = "" + } + + var diffRefNs bool + clientListOpts := getListOpt(namespace, eventArgs.forSelector) + var refListOpts [][]client.ListOption + if eventArgs.forSelector != "" { + refs, err := getObjectRef(ctx, kubeclient, eventArgs.forSelector, *kubeconfigArgs.Namespace) + if err != nil { + return err + } + + for _, ref := range refs { + kind, name, refNs := utils.ParseObjectKindNameNamespace(ref) + if refNs != namespace { + diffRefNs = true + } + refSelector := fmt.Sprintf("%s/%s", kind, name) + refListOpts = append(refListOpts, getListOpt(refNs, refSelector)) + } + } + + showNamespace := namespace == "" || diffRefNs + if eventArgs.watch { + return eventsCmdWatchRun(ctx, kubeclient, clientListOpts, refListOpts, showNamespace) + } + + rows, err := getRows(ctx, kubeclient, clientListOpts, refListOpts, showNamespace) + if len(rows) == 0 { + if eventArgs.allNamespaces { + logger.Failuref("No flux events found.") + } else { + logger.Failuref("No flux events found in %s namespace.\n", *kubeconfigArgs.Namespace) + } + + return nil + } + headers := getHeaders(showNamespace) + err = printers.TablePrinter(headers).Print(cmd.OutOrStdout(), rows) + return err +} + +func getRows(ctx context.Context, kubeclient client.Client, clientListOpts []client.ListOption, refListOpts [][]client.ListOption, showNs bool) ([][]string, error) { + el := &corev1.EventList{} + if err := addEventsToList(ctx, kubeclient, el, clientListOpts); err != nil { + return nil, err + } + + for _, refOpts := range refListOpts { + if err := addEventsToList(ctx, kubeclient, el, refOpts); err != nil { + return nil, err + } + } + + sort.Sort(SortableEvents(el.Items)) + + var rows [][]string + for _, item := range el.Items { + if filterEvent(item) { + continue + } + rows = append(rows, getEventRow(item, showNs)) + } + + return rows, nil +} + +func addEventsToList(ctx context.Context, kubeclient client.Client, el *corev1.EventList, clientListOpts []client.ListOption) error { + listOpts := &metav1.ListOptions{} + err := runtimeresource.FollowContinue(listOpts, + func(options metav1.ListOptions) (runtime.Object, error) { + newEvents := &corev1.EventList{} + err := kubeclient.List(ctx, newEvents, clientListOpts...) + if err != nil { + return nil, fmt.Errorf("error getting events: %w", err) + } + el.Items = append(el.Items, newEvents.Items...) + return newEvents, nil + }) + + return err +} + +func getListOpt(namespace, selector string) []client.ListOption { + clientListOpts := []client.ListOption{client.Limit(cmdutil.DefaultChunkSize), client.InNamespace(namespace)} + if selector != "" { + kind, name := utils.ParseObjectKindName(selector) + sel := fields.AndSelectors( + fields.OneTermEqualSelector("involvedObject.kind", kind), + fields.OneTermEqualSelector("involvedObject.name", name)) + clientListOpts = append(clientListOpts, client.MatchingFieldsSelector{Selector: sel}) + } + + return clientListOpts +} + +func eventsCmdWatchRun(ctx context.Context, kubeclient client.WithWatch, listOpts []client.ListOption, refListOpts [][]client.ListOption, showNs bool) error { + event := &corev1.EventList{} + eventWatch, err := kubeclient.Watch(ctx, event, listOpts...) + if err != nil { + return err + } + defer eventWatch.Stop() + + firstIteration := true + + handleEvent := func(e watch.Event) error { + if e.Type == watch.Deleted { + return nil + } + + event, ok := e.Object.(*corev1.Event) + if !ok { + return nil + } + if filterEvent(*event) { + return nil + } + rows := getEventRow(*event, showNs) + var hdr []string + if firstIteration { + hdr = getHeaders(showNs) + firstIteration = false + } + err = printers.TablePrinter(hdr).Print(os.Stdout, [][]string{rows}) + if err != nil { + return err + } + + return nil + } + + for _, refOpts := range refListOpts { + refEventWatch, err := kubeclient.Watch(ctx, event, refOpts...) + if err != nil { + return err + } + defer refEventWatch.Stop() + go receiveEventChan(ctx, refEventWatch, handleEvent) + } + + return receiveEventChan(ctx, eventWatch, handleEvent) + +} + +func receiveEventChan(ctx context.Context, eventWatch watch.Interface, f func(e watch.Event) error) error { + for { + select { + case e, ok := <-eventWatch.ResultChan(): + if !ok { + return nil + } + err := f(e) + if err != nil { + return err + } + case <-ctx.Done(): + return nil + } + } +} + +func getHeaders(showNs bool) []string { + headers := []string{"Last seen", "Type", "Reason", "Object", "Message"} + if showNs { + headers = append(namespaceHeader, headers...) + } + + return headers +} + +var fluxKinds = []string{"GitRepository", "HelmRepository", "OCIRepository", "Bucket", "HelmChart", "Kustomization", "HelmRelease", "Alert", "Provider", "ImageRepository", "ImagePolicy", "ImageUpdateAutomation"} + +func getEventRow(e corev1.Event, showNs bool) []string { + var row []string + if showNs { + row = []string{e.Namespace} + } + row = append(row, getLastSeen(e), e.Type, e.Reason, fmt.Sprintf("%s/%s", e.InvolvedObject.Kind, e.InvolvedObject.Name), e.Message) + + return row +} + +// getObjectRef is used to get the metadata of a resource that the selector(in the format ) references. +// It returns an empty string if the resource doesn't reference any resource +// and a string with the format `/.` if it does. +func getObjectRef(ctx context.Context, kubeclient client.Client, selector string, ns string) ([]string, error) { + kind, name := utils.ParseObjectKindName(selector) + ref, err := getGroupVersionAndRef(kind, name, ns) + if err != nil { + return nil, fmt.Errorf("error getting groupversion: %w", err) + } + + // the resource has no source ref + if len(ref.field) == 0 { + return nil, nil + } + + obj := &unstructured.Unstructured{} + obj.SetGroupVersionKind(schema.GroupVersionKind{ + Kind: kind, + Version: ref.gv.Version, + Group: ref.gv.Group, + }) + objName := types.NamespacedName{ + Namespace: ns, + Name: name, + } + + err = kubeclient.Get(ctx, objName, obj) + if err != nil { + return nil, err + } + + var ok bool + refKind := ref.kind + if refKind == "" { + kindField := append(ref.field, "kind") + refKind, ok, err = unstructured.NestedString(obj.Object, kindField...) + if err != nil { + return nil, err + } + if !ok { + return nil, fmt.Errorf("field '%s' for '%s' not found", strings.Join(kindField, "."), objName) + } + } + + nameField := append(ref.field, "name") + refName, ok, err := unstructured.NestedString(obj.Object, nameField...) + if err != nil { + return nil, err + } + if !ok { + return nil, fmt.Errorf("field '%s' for '%s' not found", strings.Join(nameField, "."), objName) + } + + var allRefs []string + refNamespace := ns + if ref.crossNamespaced { + namespaceField := append(ref.field, "namespace") + namespace, ok, err := unstructured.NestedString(obj.Object, namespaceField...) + if err != nil { + return nil, err + } + if ok { + refNamespace = namespace + } + } + + allRefs = append(allRefs, fmt.Sprintf("%s/%s.%s", refKind, refName, refNamespace)) + for _, ref := range ref.otherRefs { + allRefs = append(allRefs, fmt.Sprintf("%s.%s", ref, refNamespace)) + } + + return allRefs, nil +} + +type refInfo struct { + gv schema.GroupVersion + kind string + crossNamespaced bool + otherRefs []string + field []string +} + +func getGroupVersionAndRef(kind, name, ns string) (refInfo, error) { + switch kind { + case kustomizev1.KustomizationKind: + return refInfo{ + gv: kustomizev1.GroupVersion, + crossNamespaced: true, + field: []string{"spec", "sourceRef"}, + }, nil + case helmv2beta1.HelmReleaseKind: + return refInfo{ + gv: helmv2beta1.GroupVersion, + crossNamespaced: true, + otherRefs: []string{fmt.Sprintf("HelmChart/%s-%s", ns, name)}, + field: []string{"spec", "chart", "spec", "sourceRef"}, + }, nil + case notificationv1.AlertKind: + return refInfo{ + gv: notificationv1.GroupVersion, + kind: notificationv1.ProviderKind, + crossNamespaced: false, + field: []string{"spec", "providerRef"}, + }, nil + case notificationv1.ReceiverKind, + notificationv1.ProviderKind: + return refInfo{ + gv: notificationv1.GroupVersion, + }, nil + case imagev1.ImagePolicyKind: + return refInfo{ + gv: imagev1.GroupVersion, + kind: imagev1.ImageRepositoryKind, + crossNamespaced: true, + field: []string{"spec", "imageRepositoryRef"}, + }, nil + case sourcev1.GitRepositoryKind, sourcev1.HelmChartKind, sourcev1.BucketKind, + sourcev1.HelmRepositoryKind, sourcev1.OCIRepositoryKind: + return refInfo{gv: sourcev1.GroupVersion}, nil + case autov1.ImageUpdateAutomationKind: + return refInfo{gv: autov1.GroupVersion}, nil + case imagev1.ImageRepositoryKind: + return refInfo{gv: imagev1.GroupVersion}, nil + default: + return refInfo{}, fmt.Errorf("'%s' is not a flux kind", kind) + } +} + +func filterEvent(e corev1.Event) bool { + if !utils.ContainsItemString(fluxKinds, e.InvolvedObject.Kind) { + return true + } + + if len(eventArgs.filterTypes) > 0 { + _, equal := utils.ContainsEqualFoldItemString(eventArgs.filterTypes, e.Type) + if !equal { + return true + } + } + + return false +} + +// The functions below are copied from: https://github.com/kubernetes/kubectl/blob/master/pkg/cmd/events/events.go#L347 + +// SortableEvents implements sort.Interface for []api.Event by time +type SortableEvents []corev1.Event + +func (list SortableEvents) Len() int { + return len(list) +} + +func (list SortableEvents) Swap(i, j int) { + list[i], list[j] = list[j], list[i] +} + +// Return the time that should be used for sorting, which can come from +// various places in corev1.Event. +func eventTime(event corev1.Event) time.Time { + if event.Series != nil { + return event.Series.LastObservedTime.Time + } + if !event.LastTimestamp.Time.IsZero() { + return event.LastTimestamp.Time + } + return event.EventTime.Time +} + +func (list SortableEvents) Less(i, j int) bool { + return eventTime(list[i]).Before(eventTime(list[j])) +} + +func getLastSeen(e corev1.Event) string { + var interval string + firstTimestampSince := translateMicroTimestampSince(e.EventTime) + if e.EventTime.IsZero() { + firstTimestampSince = translateTimestampSince(e.FirstTimestamp) + } + if e.Series != nil { + interval = fmt.Sprintf("%s (x%d over %s)", translateMicroTimestampSince(e.Series.LastObservedTime), e.Series.Count, firstTimestampSince) + } else if e.Count > 1 { + interval = fmt.Sprintf("%s (x%d over %s)", translateTimestampSince(e.LastTimestamp), e.Count, firstTimestampSince) + } else { + interval = firstTimestampSince + } + + return interval +} + +// translateMicroTimestampSince returns the elapsed time since timestamp in +// human-readable approximation. +func translateMicroTimestampSince(timestamp metav1.MicroTime) string { + if timestamp.IsZero() { + return "" + } + + return duration.HumanDuration(time.Since(timestamp.Time)) +} + +// translateTimestampSince returns the elapsed time since timestamp in +// human-readable approximation. +func translateTimestampSince(timestamp metav1.Time) string { + if timestamp.IsZero() { + return "" + } + + return duration.HumanDuration(time.Since(timestamp.Time)) +} diff --git a/cmd/flux/events_test.go b/cmd/flux/events_test.go new file mode 100644 index 00000000..12076c50 --- /dev/null +++ b/cmd/flux/events_test.go @@ -0,0 +1,411 @@ +/* +Copyright 2023 The Kubernetes Authors. +Copyright 2023 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "context" + "fmt" + "strings" + "testing" + + "github.com/fluxcd/flux2/internal/utils" + helmv2beta1 "github.com/fluxcd/helm-controller/api/v2beta1" + autov1 "github.com/fluxcd/image-automation-controller/api/v1beta1" + imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta2" + kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" + notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" + eventv1 "github.com/fluxcd/pkg/apis/event/v1beta1" + "github.com/fluxcd/pkg/ssa" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + . "github.com/onsi/gomega" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/fields" + "k8s.io/apimachinery/pkg/runtime" + cmdutil "k8s.io/kubectl/pkg/cmd/util" + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/client/fake" +) + +var objects = ` +apiVersion: kustomize.toolkit.fluxcd.io/v1beta2 +kind: Kustomization +metadata: + name: flux-system + namespace: flux-system +spec: + interval: 5m0s + path: ./infrastructure/ + prune: true + sourceRef: + kind: GitRepository + name: flux-system +--- +apiVersion: kustomize.toolkit.fluxcd.io/v1beta2 +kind: Kustomization +metadata: + name: podinfo + namespace: default +spec: + interval: 5m0s + path: ./infrastructure/ + prune: true + sourceRef: + kind: GitRepository + name: flux-system + namespace: flux-system +--- +apiVersion: source.toolkit.fluxcd.io/v1beta2 +kind: GitRepository +metadata: + name: flux-system + namespace: flux-system +spec: + interval: 5m0s + ref: + branch: main + secretRef: + name: flux-system + timeout: 1m0s + url: ssh://git@github.com/example/repo +--- +apiVersion: helm.toolkit.fluxcd.io/v2beta1 +kind: HelmRelease +metadata: + name: podinfo + namespace: default +spec: + chart: + spec: + chart: podinfo + reconcileStrategy: ChartVersion + sourceRef: + kind: HelmRepository + name: podinfo + namespace: flux-system + version: '*' + interval: 5m0s +--- +apiVersion: source.toolkit.fluxcd.io/v1beta2 +kind: HelmRepository +metadata: + name: podinfo + namespace: flux-system +spec: + interval: 1m0s + url: https://stefanprodan.github.io/podinfo +--- +apiVersion: source.toolkit.fluxcd.io/v1beta2 +kind: HelmChart +metadata: + name: default-podinfo + namespace: flux-system +spec: + chart: podinfo + interval: 1m0s + reconcileStrategy: ChartVersion + sourceRef: + kind: HelmRepository + name: podinfo-chart + version: '*' +--- +apiVersion: notification.toolkit.fluxcd.io/v1beta2 +kind: Alert +metadata: + name: webapp + namespace: flux-system +spec: + eventSeverity: info + eventSources: + - kind: GitRepository + name: '*' + providerRef: + name: slack +--- +apiVersion: notification.toolkit.fluxcd.io/v1beta2 +kind: Provider +metadata: + name: slack + namespace: flux-system +spec: + address: https://hooks.slack.com/services/mock + type: slack +--- +apiVersion: image.toolkit.fluxcd.io/v1beta2 +kind: ImagePolicy +metadata: + name: podinfo + namespace: default +spec: + imageRepositoryRef: + name: acr-podinfo + namespace: flux-system + policy: + semver: + range: 5.0.x +--- +apiVersion: v1 +kind: Namespace +metadata: + name: flux-system` + +func Test_getObjectRef(t *testing.T) { + g := NewWithT(t) + objs, err := ssa.ReadObjects(strings.NewReader(objects)) + g.Expect(err).To(Not(HaveOccurred())) + + builder := fake.NewClientBuilder().WithScheme(getScheme()) + for _, obj := range objs { + builder = builder.WithObjects(obj) + } + c := builder.Build() + + tests := []struct { + name string + selector string + namespace string + want []string + wantErr bool + }{ + { + name: "Source Ref for Kustomization", + selector: "Kustomization/flux-system", + namespace: "flux-system", + want: []string{"GitRepository/flux-system.flux-system"}, + }, + { + name: "Crossnamespace Source Ref for Kustomization", + selector: "Kustomization/podinfo", + namespace: "default", + want: []string{"GitRepository/flux-system.flux-system"}, + }, + { + name: "Source Ref for HelmRelease", + selector: "HelmRelease/podinfo", + namespace: "default", + want: []string{"HelmRepository/podinfo.flux-system", "HelmChart/default-podinfo.flux-system"}, + }, + { + name: "Source Ref for Alert", + selector: "Alert/webapp", + namespace: "flux-system", + want: []string{"Provider/slack.flux-system"}, + }, + { + name: "Source Ref for ImagePolicy", + selector: "ImagePolicy/podinfo", + namespace: "default", + want: []string{"ImageRepository/acr-podinfo.flux-system"}, + }, + { + name: "Empty Ref for Provider", + selector: "Provider/slack", + namespace: "flux-system", + want: nil, + }, + { + name: "Non flux resource", + selector: "Namespace/flux-system", + wantErr: true, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + g := NewWithT(t) + got, err := getObjectRef(context.Background(), c, tt.selector, tt.namespace) + if tt.wantErr { + g.Expect(err).To(HaveOccurred()) + return + } + + g.Expect(err).To(Not(HaveOccurred())) + g.Expect(got).To(Equal(tt.want)) + }) + } +} + +func Test_getRows(t *testing.T) { + g := NewWithT(t) + objs, err := ssa.ReadObjects(strings.NewReader(objects)) + g.Expect(err).To(Not(HaveOccurred())) + + builder := fake.NewClientBuilder().WithScheme(getScheme()) + for _, obj := range objs { + builder = builder.WithObjects(obj) + } + eventList := &corev1.EventList{} + for _, obj := range objs { + infoEvent := createEvent(obj, eventv1.EventSeverityInfo, "Info Message", "Info Reason") + warningEvent := createEvent(obj, eventv1.EventSeverityError, "Error Message", "Error Reason") + eventList.Items = append(eventList.Items, infoEvent, warningEvent) + } + builder = builder.WithLists(eventList) + builder.WithIndex(&corev1.Event{}, "involvedObject.kind/name", kindNameIndexer) + c := builder.Build() + + tests := []struct { + name string + selector string + refSelector string + namespace string + refNs string + expected [][]string + }{ + { + name: "events from all namespaces", + selector: "", + namespace: "", + expected: [][]string{ + {"default", "", "error", "Error Reason", "HelmRelease/podinfo", "Error Message"}, + {"default", "", "info", "Info Reason", "HelmRelease/podinfo", "Info Message"}, + {"default", "", "error", "Error Reason", "ImagePolicy/podinfo", "Error Message"}, + {"default", "", "info", "Info Reason", "ImagePolicy/podinfo", "Info Message"}, + {"default", "", "error", "Error Reason", "Kustomization/podinfo", "Error Message"}, + {"default", "", "info", "Info Reason", "Kustomization/podinfo", "Info Message"}, + {"flux-system", "", "error", "Error Reason", "Alert/webapp", "Error Message"}, + {"flux-system", "", "info", "Info Reason", "Alert/webapp", "Info Message"}, + {"flux-system", "", "error", "Error Reason", "GitRepository/flux-system", "Error Message"}, + {"flux-system", "", "info", "Info Reason", "GitRepository/flux-system", "Info Message"}, + {"flux-system", "", "error", "Error Reason", "HelmChart/default-podinfo", "Error Message"}, + {"flux-system", "", "info", "Info Reason", "HelmChart/default-podinfo", "Info Message"}, + {"flux-system", "", "error", "Error Reason", "HelmRepository/podinfo", "Error Message"}, + {"flux-system", "", "info", "Info Reason", "HelmRepository/podinfo", "Info Message"}, + {"flux-system", "", "error", "Error Reason", "Kustomization/flux-system", "Error Message"}, + {"flux-system", "", "info", "Info Reason", "Kustomization/flux-system", "Info Message"}, + {"flux-system", "", "error", "Error Reason", "Provider/slack", "Error Message"}, + {"flux-system", "", "info", "Info Reason", "Provider/slack", "Info Message"}, + }, + }, + { + name: "events from default namespaces", + selector: "", + namespace: "default", + expected: [][]string{ + {"", "error", "Error Reason", "HelmRelease/podinfo", "Error Message"}, + {"", "info", "Info Reason", "HelmRelease/podinfo", "Info Message"}, + {"", "error", "Error Reason", "ImagePolicy/podinfo", "Error Message"}, + {"", "info", "Info Reason", "ImagePolicy/podinfo", "Info Message"}, + {"", "error", "Error Reason", "Kustomization/podinfo", "Error Message"}, + {"", "info", "Info Reason", "Kustomization/podinfo", "Info Message"}, + }, + }, + { + name: "Kustomization with crossnamespaced GitRepository", + selector: "Kustomization/podinfo", + namespace: "default", + expected: [][]string{ + {"default", "", "error", "Error Reason", "Kustomization/podinfo", "Error Message"}, + {"default", "", "info", "Info Reason", "Kustomization/podinfo", "Info Message"}, + {"flux-system", "", "error", "Error Reason", "GitRepository/flux-system", "Error Message"}, + {"flux-system", "", "info", "Info Reason", "GitRepository/flux-system", "Info Message"}, + }, + }, + { + name: "HelmRelease with crossnamespaced HelmRepository", + selector: "HelmRelease/podinfo", + namespace: "default", + expected: [][]string{ + {"default", "", "error", "Error Reason", "HelmRelease/podinfo", "Error Message"}, + {"default", "", "info", "Info Reason", "HelmRelease/podinfo", "Info Message"}, + {"flux-system", "", "error", "Error Reason", "HelmRepository/podinfo", "Error Message"}, + {"flux-system", "", "info", "Info Reason", "HelmRepository/podinfo", "Info Message"}, + {"flux-system", "", "error", "Error Reason", "HelmChart/default-podinfo", "Error Message"}, + {"flux-system", "", "info", "Info Reason", "HelmChart/default-podinfo", "Info Message"}, + }, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + g := NewWithT(t) + + var refs []string + var refNs, refKind, refName string + if tt.selector != "" { + refs, err = getObjectRef(context.Background(), c, tt.selector, tt.namespace) + g.Expect(err).To(Not(HaveOccurred())) + } + + g.Expect(err).To(Not(HaveOccurred())) + + clientOpts := getTestListOpt(tt.namespace, tt.selector) + var refOpts [][]client.ListOption + for _, ref := range refs { + refKind, refName, refNs = utils.ParseObjectKindNameNamespace(ref) + refSelector := fmt.Sprintf("%s/%s", refKind, refName) + refOpts = append(refOpts, getTestListOpt(refNs, refSelector)) + } + + showNs := tt.namespace == "" || (refNs != "" && refNs != tt.namespace) + rows, err := getRows(context.Background(), c, clientOpts, refOpts, showNs) + g.Expect(err).To(Not(HaveOccurred())) + g.Expect(rows).To(Equal(tt.expected)) + }) + } +} + +func getTestListOpt(namespace, selector string) []client.ListOption { + clientListOpts := []client.ListOption{client.Limit(cmdutil.DefaultChunkSize), client.InNamespace(namespace)} + if selector != "" { + sel := fields.OneTermEqualSelector("involvedObject.kind/name", selector) + clientListOpts = append(clientListOpts, client.MatchingFieldsSelector{Selector: sel}) + } + + return clientListOpts +} + +func getScheme() *runtime.Scheme { + newscheme := runtime.NewScheme() + corev1.AddToScheme(newscheme) + kustomizev1.AddToScheme(newscheme) + helmv2beta1.AddToScheme(newscheme) + notificationv1.AddToScheme(newscheme) + imagev1.AddToScheme(newscheme) + autov1.AddToScheme(newscheme) + sourcev1.AddToScheme(newscheme) + + return newscheme +} + +func createEvent(obj client.Object, eventType, msg, reason string) corev1.Event { + return corev1.Event{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: obj.GetNamespace(), + // name of event needs to be unique so fak + Name: obj.GetNamespace() + obj.GetNamespace() + obj.GetObjectKind().GroupVersionKind().Kind + eventType, + }, + Reason: reason, + Message: msg, + Type: eventType, + InvolvedObject: corev1.ObjectReference{ + Kind: obj.GetObjectKind().GroupVersionKind().Kind, + Namespace: obj.GetNamespace(), + Name: obj.GetName(), + }, + } +} + +func kindNameIndexer(obj client.Object) []string { + e, ok := obj.(*corev1.Event) + if !ok { + panic(fmt.Sprintf("Expected a Event, got %T", e)) + } + + return []string{fmt.Sprintf("%s/%s", e.InvolvedObject.Kind, e.InvolvedObject.Name)} +} diff --git a/go.mod b/go.mod index 0766cc87..2f058d1b 100644 --- a/go.mod +++ b/go.mod @@ -14,6 +14,7 @@ require ( github.com/fluxcd/image-reflector-controller/api v0.26.0 github.com/fluxcd/kustomize-controller/api v0.35.0 github.com/fluxcd/notification-controller/api v0.33.0 + github.com/fluxcd/pkg/apis/event v0.4.1 github.com/fluxcd/pkg/apis/meta v0.19.1 github.com/fluxcd/pkg/git v0.11.0 github.com/fluxcd/pkg/git/gogit v0.8.1 diff --git a/go.sum b/go.sum index 1e600ba2..b5156975 100644 --- a/go.sum +++ b/go.sum @@ -211,6 +211,8 @@ github.com/fluxcd/notification-controller/api v0.33.0 h1:iVnIGDfkpVuzcILSGwi//Q3 github.com/fluxcd/notification-controller/api v0.33.0/go.mod h1:0IyWy0J6+z1TbijVQjFx1gWQDOzXaRfzV2NClfjHZPk= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= +github.com/fluxcd/pkg/apis/event v0.4.1 h1:63wP8NM/uA4680F4Ft8q8/0rJivX90i7FmMkRvUI8Is= +github.com/fluxcd/pkg/apis/event v0.4.1/go.mod h1:LHT1ZsbMrcHwCHQCaFtQviQBZwhMOAbTUPK6+KgBkFo= github.com/fluxcd/pkg/apis/kustomize v0.8.1 h1:uRH9xVDJfSBGIiL6PIhkguHvf2Nme6uTWX+RX1iZznc= github.com/fluxcd/pkg/apis/kustomize v0.8.1/go.mod h1:TBem+2mHp6Ib7XD1fmzDkoUnBzx07wSzIYo6BVx3XAc= github.com/fluxcd/pkg/apis/meta v0.19.1 h1:fCI5CnTXpAqr67UlaI9q0H+OztMKB5kDTr6xV6vlAo0= From 5b8f673baa3cbe0c814f72434930708c63b9232e Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Thu, 9 Mar 2023 13:35:56 +0100 Subject: [PATCH 436/818] events: use constants for supported Flux kinds Signed-off-by: Hidde Beydals --- cmd/flux/events.go | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/cmd/flux/events.go b/cmd/flux/events.go index 6f9bba05..da45b87e 100644 --- a/cmd/flux/events.go +++ b/cmd/flux/events.go @@ -39,7 +39,7 @@ import ( cmdutil "k8s.io/kubectl/pkg/cmd/util" "sigs.k8s.io/controller-runtime/pkg/client" - helmv2beta1 "github.com/fluxcd/helm-controller/api/v2beta1" + helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" autov1 "github.com/fluxcd/image-automation-controller/api/v1beta1" imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta2" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" @@ -268,7 +268,10 @@ func getHeaders(showNs bool) []string { return headers } -var fluxKinds = []string{"GitRepository", "HelmRepository", "OCIRepository", "Bucket", "HelmChart", "Kustomization", "HelmRelease", "Alert", "Provider", "ImageRepository", "ImagePolicy", "ImageUpdateAutomation"} +var fluxKinds = []string{sourcev1.GitRepositoryKind, sourcev1.HelmRepositoryKind, sourcev1.OCIRepositoryKind, + sourcev1.BucketKind, sourcev1.HelmChartKind, kustomizev1.KustomizationKind, helmv2.HelmReleaseKind, + notificationv1.AlertKind, notificationv1.ProviderKind, imagev1.ImageRepositoryKind, imagev1.ImagePolicyKind, + autov1.ImageUpdateAutomationKind} func getEventRow(e corev1.Event, showNs bool) []string { var row []string @@ -370,9 +373,9 @@ func getGroupVersionAndRef(kind, name, ns string) (refInfo, error) { crossNamespaced: true, field: []string{"spec", "sourceRef"}, }, nil - case helmv2beta1.HelmReleaseKind: + case helmv2.HelmReleaseKind: return refInfo{ - gv: helmv2beta1.GroupVersion, + gv: helmv2.GroupVersion, crossNamespaced: true, otherRefs: []string{fmt.Sprintf("HelmChart/%s-%s", ns, name)}, field: []string{"spec", "chart", "spec", "sourceRef"}, From 34220fd5148a30fa519cc9f5b68bf83d7c7497f6 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Thu, 9 Mar 2023 13:44:41 +0100 Subject: [PATCH 437/818] events: make `--for` case insensitive for kinds Signed-off-by: Hidde Beydals --- cmd/flux/events.go | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/cmd/flux/events.go b/cmd/flux/events.go index da45b87e..3521dc37 100644 --- a/cmd/flux/events.go +++ b/cmd/flux/events.go @@ -155,7 +155,7 @@ func getRows(ctx context.Context, kubeclient client.Client, clientListOpts []cli var rows [][]string for _, item := range el.Items { - if filterEvent(item) { + if ignoreEvent(item) { continue } rows = append(rows, getEventRow(item, showNs)) @@ -212,7 +212,7 @@ func eventsCmdWatchRun(ctx context.Context, kubeclient client.WithWatch, listOpt if !ok { return nil } - if filterEvent(*event) { + if ignoreEvent(*event) { return nil } rows := getEventRow(*event, showNs) @@ -366,52 +366,52 @@ type refInfo struct { } func getGroupVersionAndRef(kind, name, ns string) (refInfo, error) { - switch kind { - case kustomizev1.KustomizationKind: + switch strings.ToLower(kind) { + case strings.ToLower(kustomizev1.KustomizationKind): return refInfo{ gv: kustomizev1.GroupVersion, crossNamespaced: true, field: []string{"spec", "sourceRef"}, }, nil - case helmv2.HelmReleaseKind: + case strings.ToLower(helmv2.HelmReleaseKind): return refInfo{ gv: helmv2.GroupVersion, crossNamespaced: true, - otherRefs: []string{fmt.Sprintf("HelmChart/%s-%s", ns, name)}, + otherRefs: []string{fmt.Sprintf("%s/%s-%s", sourcev1.HelmChartKind, ns, name)}, field: []string{"spec", "chart", "spec", "sourceRef"}, }, nil - case notificationv1.AlertKind: + case strings.ToLower(notificationv1.AlertKind): return refInfo{ gv: notificationv1.GroupVersion, kind: notificationv1.ProviderKind, crossNamespaced: false, field: []string{"spec", "providerRef"}, }, nil - case notificationv1.ReceiverKind, - notificationv1.ProviderKind: + case strings.ToLower(notificationv1.ReceiverKind), + strings.ToLower(notificationv1.ProviderKind): return refInfo{ gv: notificationv1.GroupVersion, }, nil - case imagev1.ImagePolicyKind: + case strings.ToLower(imagev1.ImagePolicyKind): return refInfo{ gv: imagev1.GroupVersion, kind: imagev1.ImageRepositoryKind, crossNamespaced: true, field: []string{"spec", "imageRepositoryRef"}, }, nil - case sourcev1.GitRepositoryKind, sourcev1.HelmChartKind, sourcev1.BucketKind, - sourcev1.HelmRepositoryKind, sourcev1.OCIRepositoryKind: + case strings.ToLower(sourcev1.GitRepositoryKind), strings.ToLower(sourcev1.HelmChartKind), strings.ToLower(sourcev1.BucketKind), + strings.ToLower(sourcev1.HelmRepositoryKind), strings.ToLower(sourcev1.OCIRepositoryKind): return refInfo{gv: sourcev1.GroupVersion}, nil - case autov1.ImageUpdateAutomationKind: + case strings.ToLower(autov1.ImageUpdateAutomationKind): return refInfo{gv: autov1.GroupVersion}, nil - case imagev1.ImageRepositoryKind: + case strings.ToLower(imagev1.ImageRepositoryKind): return refInfo{gv: imagev1.GroupVersion}, nil default: - return refInfo{}, fmt.Errorf("'%s' is not a flux kind", kind) + return refInfo{}, fmt.Errorf("'%s' is not a recognized Flux kind", kind) } } -func filterEvent(e corev1.Event) bool { +func ignoreEvent(e corev1.Event) bool { if !utils.ContainsItemString(fluxKinds, e.InvolvedObject.Kind) { return true } From c0916edc44e15f7bea4a6773b711bc5cd0886ed1 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Thu, 9 Mar 2023 13:54:18 +0100 Subject: [PATCH 438/818] events: prevent defer in loop Signed-off-by: Hidde Beydals --- cmd/flux/events.go | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/cmd/flux/events.go b/cmd/flux/events.go index 3521dc37..1176bc0c 100644 --- a/cmd/flux/events.go +++ b/cmd/flux/events.go @@ -199,7 +199,6 @@ func eventsCmdWatchRun(ctx context.Context, kubeclient client.WithWatch, listOpt if err != nil { return err } - defer eventWatch.Stop() firstIteration := true @@ -234,15 +233,19 @@ func eventsCmdWatchRun(ctx context.Context, kubeclient client.WithWatch, listOpt if err != nil { return err } - defer refEventWatch.Stop() - go receiveEventChan(ctx, refEventWatch, handleEvent) + go func() { + err := receiveEventChan(ctx, refEventWatch, handleEvent) + if err != nil { + logger.Failuref("error watching events: %s", err.Error()) + } + }() } return receiveEventChan(ctx, eventWatch, handleEvent) - } func receiveEventChan(ctx context.Context, eventWatch watch.Interface, f func(e watch.Event) error) error { + defer eventWatch.Stop() for { select { case e, ok := <-eventWatch.ResultChan(): From 3f3d68a33aca414fc5d2439442b1597584f26824 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Thu, 9 Mar 2023 13:59:06 +0100 Subject: [PATCH 439/818] events: reword error messages Signed-off-by: Hidde Beydals --- cmd/flux/events.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/flux/events.go b/cmd/flux/events.go index 1176bc0c..d4236853 100644 --- a/cmd/flux/events.go +++ b/cmd/flux/events.go @@ -127,9 +127,9 @@ func eventsCmdRun(cmd *cobra.Command, args []string) error { rows, err := getRows(ctx, kubeclient, clientListOpts, refListOpts, showNamespace) if len(rows) == 0 { if eventArgs.allNamespaces { - logger.Failuref("No flux events found.") + logger.Failuref("No events found.") } else { - logger.Failuref("No flux events found in %s namespace.\n", *kubeconfigArgs.Namespace) + logger.Failuref("No events found in %s namespace.", *kubeconfigArgs.Namespace) } return nil From af153ea0cf4fd480c75accacc0c0dc7a2afdad0d Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Thu, 9 Mar 2023 14:18:16 +0100 Subject: [PATCH 440/818] events: avoid having to keep individal kind maps Signed-off-by: Hidde Beydals --- cmd/flux/events.go | 113 +++++++++++++++++++++++---------------------- 1 file changed, 58 insertions(+), 55 deletions(-) diff --git a/cmd/flux/events.go b/cmd/flux/events.go index d4236853..ae25e0c3 100644 --- a/cmd/flux/events.go +++ b/cmd/flux/events.go @@ -271,11 +271,6 @@ func getHeaders(showNs bool) []string { return headers } -var fluxKinds = []string{sourcev1.GitRepositoryKind, sourcev1.HelmRepositoryKind, sourcev1.OCIRepositoryKind, - sourcev1.BucketKind, sourcev1.HelmChartKind, kustomizev1.KustomizationKind, helmv2.HelmReleaseKind, - notificationv1.AlertKind, notificationv1.ProviderKind, imagev1.ImageRepositoryKind, imagev1.ImagePolicyKind, - autov1.ImageUpdateAutomationKind} - func getEventRow(e corev1.Event, showNs bool) []string { var row []string if showNs { @@ -291,7 +286,7 @@ func getEventRow(e corev1.Event, showNs bool) []string { // and a string with the format `/.` if it does. func getObjectRef(ctx context.Context, kubeclient client.Client, selector string, ns string) ([]string, error) { kind, name := utils.ParseObjectKindName(selector) - ref, err := getGroupVersionAndRef(kind, name, ns) + ref, err := fluxKindMap.getRefInfo(kind) if err != nil { return nil, fmt.Errorf("error getting groupversion: %w", err) } @@ -353,69 +348,77 @@ func getObjectRef(ctx context.Context, kubeclient client.Client, selector string } allRefs = append(allRefs, fmt.Sprintf("%s/%s.%s", refKind, refName, refNamespace)) - for _, ref := range ref.otherRefs { - allRefs = append(allRefs, fmt.Sprintf("%s.%s", ref, refNamespace)) + if ref.otherRefs != nil { + for _, otherRef := range ref.otherRefs(ns, name) { + allRefs = append(allRefs, fmt.Sprintf("%s.%s", otherRef, refNamespace)) + } } - return allRefs, nil } +type refMap map[string]refInfo + +func (r refMap) getRefInfo(kind string) (refInfo, error) { + for key, ref := range r { + if strings.EqualFold(key, kind) { + return ref, nil + } + } + return refInfo{}, fmt.Errorf("'%s' is not a recognized Flux kind", kind) +} + +func (r refMap) hasKind(kind string) bool { + _, err := r.getRefInfo(kind) + return err == nil +} + type refInfo struct { gv schema.GroupVersion kind string crossNamespaced bool - otherRefs []string + otherRefs func(namespace, name string) []string field []string } -func getGroupVersionAndRef(kind, name, ns string) (refInfo, error) { - switch strings.ToLower(kind) { - case strings.ToLower(kustomizev1.KustomizationKind): - return refInfo{ - gv: kustomizev1.GroupVersion, - crossNamespaced: true, - field: []string{"spec", "sourceRef"}, - }, nil - case strings.ToLower(helmv2.HelmReleaseKind): - return refInfo{ - gv: helmv2.GroupVersion, - crossNamespaced: true, - otherRefs: []string{fmt.Sprintf("%s/%s-%s", sourcev1.HelmChartKind, ns, name)}, - field: []string{"spec", "chart", "spec", "sourceRef"}, - }, nil - case strings.ToLower(notificationv1.AlertKind): - return refInfo{ - gv: notificationv1.GroupVersion, - kind: notificationv1.ProviderKind, - crossNamespaced: false, - field: []string{"spec", "providerRef"}, - }, nil - case strings.ToLower(notificationv1.ReceiverKind), - strings.ToLower(notificationv1.ProviderKind): - return refInfo{ - gv: notificationv1.GroupVersion, - }, nil - case strings.ToLower(imagev1.ImagePolicyKind): - return refInfo{ - gv: imagev1.GroupVersion, - kind: imagev1.ImageRepositoryKind, - crossNamespaced: true, - field: []string{"spec", "imageRepositoryRef"}, - }, nil - case strings.ToLower(sourcev1.GitRepositoryKind), strings.ToLower(sourcev1.HelmChartKind), strings.ToLower(sourcev1.BucketKind), - strings.ToLower(sourcev1.HelmRepositoryKind), strings.ToLower(sourcev1.OCIRepositoryKind): - return refInfo{gv: sourcev1.GroupVersion}, nil - case strings.ToLower(autov1.ImageUpdateAutomationKind): - return refInfo{gv: autov1.GroupVersion}, nil - case strings.ToLower(imagev1.ImageRepositoryKind): - return refInfo{gv: imagev1.GroupVersion}, nil - default: - return refInfo{}, fmt.Errorf("'%s' is not a recognized Flux kind", kind) - } +var fluxKindMap = refMap{ + kustomizev1.KustomizationKind: { + gv: kustomizev1.GroupVersion, + crossNamespaced: true, + field: []string{"spec", "sourceRef"}, + }, + helmv2.HelmReleaseKind: { + gv: helmv2.GroupVersion, + crossNamespaced: true, + otherRefs: func(namespace, name string) []string { + return []string{fmt.Sprintf("%s/%s-%s", sourcev1.HelmChartKind, namespace, name)} + }, + field: []string{"spec", "chart", "spec", "sourceRef"}, + }, + notificationv1.AlertKind: { + gv: notificationv1.GroupVersion, + kind: notificationv1.ProviderKind, + crossNamespaced: false, + field: []string{"spec", "providerRef"}, + }, + notificationv1.ReceiverKind: {gv: notificationv1.GroupVersion}, + notificationv1.ProviderKind: {gv: notificationv1.GroupVersion}, + imagev1.ImagePolicyKind: { + gv: imagev1.GroupVersion, + kind: imagev1.ImageRepositoryKind, + crossNamespaced: true, + field: []string{"spec", "imageRepositoryRef"}, + }, + sourcev1.GitRepositoryKind: {gv: sourcev1.GroupVersion}, + sourcev1.OCIRepositoryKind: {gv: sourcev1.GroupVersion}, + sourcev1.BucketKind: {gv: sourcev1.GroupVersion}, + sourcev1.HelmRepositoryKind: {gv: sourcev1.GroupVersion}, + sourcev1.HelmChartKind: {gv: sourcev1.GroupVersion}, + autov1.ImageUpdateAutomationKind: {gv: autov1.GroupVersion}, + imagev1.ImageRepositoryKind: {gv: imagev1.GroupVersion}, } func ignoreEvent(e corev1.Event) bool { - if !utils.ContainsItemString(fluxKinds, e.InvolvedObject.Kind) { + if !fluxKindMap.hasKind(e.InvolvedObject.Kind) { return true } From 06ed881e376ab16885c90e12e2cc9cda594b372a Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Thu, 9 Mar 2023 19:51:25 +0200 Subject: [PATCH 441/818] Disable drift detection for kube-prometheus-stack webhooks Signed-off-by: Stefan Prodan --- .../kube-prometheus-stack/release.yaml | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/manifests/monitoring/kube-prometheus-stack/release.yaml b/manifests/monitoring/kube-prometheus-stack/release.yaml index d7bab61a..f2c60c5c 100644 --- a/manifests/monitoring/kube-prometheus-stack/release.yaml +++ b/manifests/monitoring/kube-prometheus-stack/release.yaml @@ -6,7 +6,7 @@ spec: interval: 5m chart: spec: - version: "41.x" + version: "45.x" chart: kube-prometheus-stack sourceRef: kind: HelmRepository @@ -31,3 +31,21 @@ spec: podMonitorSelector: matchLabels: app.kubernetes.io/component: monitoring + postRenderers: + - kustomize: + patches: + - target: + # Ignore these objects from Flux diff as they are mutated from chart hooks + kind: (ValidatingWebhookConfiguration|MutatingWebhookConfiguration) + name: kube-prometheus-stack-admission + patch: | + - op: add + path: /metadata/annotations/helm.toolkit.fluxcd.io~1driftDetection + value: disabled + - target: + # Ignore these objects from Flux diff as they are mutated at apply time but not at dry-run time + kind: PrometheusRule + patch: | + - op: add + path: /metadata/annotations/helm.toolkit.fluxcd.io~1driftDetection + value: disabled From 560775470222728db45c0f010a9d4a527e10571b Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Fri, 10 Mar 2023 14:55:09 +0000 Subject: [PATCH 442/818] Update toolkit components - helm-controller to v0.31.1 https://github.com/fluxcd/helm-controller/blob/v0.31.1/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 2 +- go.sum | 4 ++-- manifests/bases/helm-controller/kustomization.yaml | 4 ++-- manifests/crds/kustomization.yaml | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index 2f058d1b..a1ba846c 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/distribution/distribution/v3 v3.0.0-20230223072852-e5d5810851d1 github.com/fluxcd/go-git-providers v0.14.0 github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 - github.com/fluxcd/helm-controller/api v0.31.0 + github.com/fluxcd/helm-controller/api v0.31.1 github.com/fluxcd/image-automation-controller/api v0.31.0 github.com/fluxcd/image-reflector-controller/api v0.26.0 github.com/fluxcd/kustomize-controller/api v0.35.0 diff --git a/go.sum b/go.sum index b5156975..69875c22 100644 --- a/go.sum +++ b/go.sum @@ -199,8 +199,8 @@ github.com/fluxcd/go-git-providers v0.14.0 h1:F662wkiMevhGYKCwe9AJItpq42aJbd+tQq github.com/fluxcd/go-git-providers v0.14.0/go.mod h1:cxVVQEBEswAIgbRVi50Cf6pEM/+RhNcNwDpsIkN6pG0= github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 h1:Gm5sGGk+/Wq6RhX4xpCZ2IqjDp5XkjlhENaAuAlpdKc= github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4/go.mod h1:raWgfUV7lDQVXp4QXUaeNNJkRVKz97UQuF+0kdY7Vmo= -github.com/fluxcd/helm-controller/api v0.31.0 h1:Pqe8R5SaukGGVE60U7SwiKydCjP8lZWBsU7wqeSFzMg= -github.com/fluxcd/helm-controller/api v0.31.0/go.mod h1:z9zLN31FjwHhd8RyGsrE4vnRtUp4bz5rXxd1hVX3Waw= +github.com/fluxcd/helm-controller/api v0.31.1 h1:aoRVS1CNeR6WpXdjWxw2YGRQhWBAZOU9AKKq/Wf+Nnw= +github.com/fluxcd/helm-controller/api v0.31.1/go.mod h1:z9zLN31FjwHhd8RyGsrE4vnRtUp4bz5rXxd1hVX3Waw= github.com/fluxcd/image-automation-controller/api v0.31.0 h1:xA2MXbVpXWAFBCmlaOqgLtqGfR637aw0PxyyMGaqUTI= github.com/fluxcd/image-automation-controller/api v0.31.0/go.mod h1:kNQ/g5TK0Epwguma2+Y1binRMRZ1d6E2VmZLg2iGkqw= github.com/fluxcd/image-reflector-controller/api v0.26.0 h1:rrr7BCjc4/D9jY7mu6bwkP/bnn5B1LWLCiFYuD6/vFg= diff --git a/manifests/bases/helm-controller/kustomization.yaml b/manifests/bases/helm-controller/kustomization.yaml index 268356c0..6eea6263 100644 --- a/manifests/bases/helm-controller/kustomization.yaml +++ b/manifests/bases/helm-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/helm-controller/releases/download/v0.31.0/helm-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.31.0/helm-controller.deployment.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.31.1/helm-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.31.1/helm-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index cbd2855d..7549c234 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -3,7 +3,7 @@ kind: Kustomization resources: - https://github.com/fluxcd/source-controller/releases/download/v0.36.0/source-controller.crds.yaml - https://github.com/fluxcd/kustomize-controller/releases/download/v0.35.0/kustomize-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.31.0/helm-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.31.1/helm-controller.crds.yaml - https://github.com/fluxcd/notification-controller/releases/download/v0.33.0/notification-controller.crds.yaml - https://github.com/fluxcd/image-reflector-controller/releases/download/v0.26.0/image-reflector-controller.crds.yaml - https://github.com/fluxcd/image-automation-controller/releases/download/v0.31.0/image-automation-controller.crds.yaml From da06854e056e2ba3b51a4431f7cb521266fb787a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Mar 2023 01:33:06 +0000 Subject: [PATCH 443/818] build(deps): bump actions/cache from 3.2.6 to 3.3.0 Bumps [actions/cache](https://github.com/actions/cache) from 3.2.6 to 3.3.0. - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](https://github.com/actions/cache/compare/69d9d449aced6a2ede0bc19182fadc3a0a42d2b0...940f3d7cf195ba83374c77632d1e2cbb2f24ae68) --- updated-dependencies: - dependency-name: actions/cache dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/e2e-azure.yaml | 2 +- .github/workflows/e2e-bootstrap.yaml | 2 +- .github/workflows/e2e.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/e2e-azure.yaml b/.github/workflows/e2e-azure.yaml index f252d768..69dd833e 100644 --- a/.github/workflows/e2e-azure.yaml +++ b/.github/workflows/e2e-azure.yaml @@ -17,7 +17,7 @@ jobs: - name: Checkout uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 - name: Restore Go cache - uses: actions/cache@69d9d449aced6a2ede0bc19182fadc3a0a42d2b0 # v3.2.6 + uses: actions/cache@940f3d7cf195ba83374c77632d1e2cbb2f24ae68 # v3.3.0 with: path: ~/go/pkg/mod key: ${{ runner.os }}-go1.20-${{ hashFiles('**/go.sum') }} diff --git a/.github/workflows/e2e-bootstrap.yaml b/.github/workflows/e2e-bootstrap.yaml index f36f52a8..8a2f3297 100644 --- a/.github/workflows/e2e-bootstrap.yaml +++ b/.github/workflows/e2e-bootstrap.yaml @@ -18,7 +18,7 @@ jobs: - name: Checkout uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 - name: Restore Go cache - uses: actions/cache@69d9d449aced6a2ede0bc19182fadc3a0a42d2b0 # v3.2.6 + uses: actions/cache@940f3d7cf195ba83374c77632d1e2cbb2f24ae68 # v3.3.0 with: path: ~/go/pkg/mod key: ${{ runner.os }}-go1.20-${{ hashFiles('**/go.sum') }} diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index 884142ff..13182e1f 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -22,7 +22,7 @@ jobs: - name: Checkout uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 - name: Restore Go cache - uses: actions/cache@69d9d449aced6a2ede0bc19182fadc3a0a42d2b0 # v3.2.6 + uses: actions/cache@940f3d7cf195ba83374c77632d1e2cbb2f24ae68 # v3.3.0 with: path: ~/go/pkg/mod key: ${{ runner.os }}-go1.20-${{ hashFiles('**/go.sum') }} From e1fca7f0629c1a9fd872e91e7aece1ac439caf06 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Mar 2023 08:52:53 +0000 Subject: [PATCH 444/818] build(deps): bump docker/setup-buildx-action from 2.4.1 to 2.5.0 Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 2.4.1 to 2.5.0. - [Release notes](https://github.com/docker/setup-buildx-action/releases) - [Commits](https://github.com/docker/setup-buildx-action/compare/f03ac48505955848960e80bbb68046aa35c7b9e7...4b4e9c3e2d4531116a6f8ba8e71fc6e2cb6e6c8c) --- updated-dependencies: - dependency-name: docker/setup-buildx-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/release.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index e76b84cb..33405656 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -27,7 +27,7 @@ jobs: uses: docker/setup-qemu-action@e81a89b1732b9c48d79cd809d8d81d79c4647a18 # v2.1.0 - name: Setup Docker Buildx id: buildx - uses: docker/setup-buildx-action@f03ac48505955848960e80bbb68046aa35c7b9e7 # v2.4.1 + uses: docker/setup-buildx-action@4b4e9c3e2d4531116a6f8ba8e71fc6e2cb6e6c8c # v2.5.0 - name: Setup Syft uses: anchore/sbom-action/download-syft@07978da4bdb4faa726e52dfc6b1bed63d4b56479 # v0.13.3 - name: Setup Cosign From ec978fc79fa452f23fd567954945410899fe12d0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Mar 2023 10:25:14 +0000 Subject: [PATCH 445/818] build(deps): bump github/codeql-action from 2.2.5 to 2.2.6 Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2.2.5 to 2.2.6. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/32dc499307d133bb5085bae78498c0ac2cf762d5...16964e90ba004cdf0cd845b866b5df21038b7723) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/scan.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index d8716c52..fb14690f 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -50,7 +50,7 @@ jobs: env: SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }} - name: Upload result to GitHub Code Scanning - uses: github/codeql-action/upload-sarif@32dc499307d133bb5085bae78498c0ac2cf762d5 # v2.2.5 + uses: github/codeql-action/upload-sarif@16964e90ba004cdf0cd845b866b5df21038b7723 # v2.2.6 with: sarif_file: snyk.sarif @@ -67,10 +67,10 @@ jobs: with: go-version: 1.20.x - name: Initialize CodeQL - uses: github/codeql-action/init@32dc499307d133bb5085bae78498c0ac2cf762d5 # v2.2.5 + uses: github/codeql-action/init@16964e90ba004cdf0cd845b866b5df21038b7723 # v2.2.6 with: languages: go - name: Autobuild - uses: github/codeql-action/autobuild@32dc499307d133bb5085bae78498c0ac2cf762d5 # v2.2.5 + uses: github/codeql-action/autobuild@16964e90ba004cdf0cd845b866b5df21038b7723 # v2.2.6 - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@32dc499307d133bb5085bae78498c0ac2cf762d5 # v2.2.5 + uses: github/codeql-action/analyze@16964e90ba004cdf0cd845b866b5df21038b7723 # v2.2.6 From 5a45d2b127dd80f214bed8f38771eb4cfc543fe2 Mon Sep 17 00:00:00 2001 From: Santosh Kaluskar Date: Tue, 21 Feb 2023 14:27:16 +0530 Subject: [PATCH 446/818] Create secret with bearer-token Signed-off-by: Santosh Kaluskar --- cmd/flux/create_secret_git.go | 12 +++++++++--- cmd/flux/create_secret_git_test.go | 10 ++++++++++ .../testdata/create_secret/git/git-bearer-token.yaml | 9 +++++++++ pkg/manifestgen/sourcesecret/options.go | 3 +++ pkg/manifestgen/sourcesecret/sourcesecret.go | 3 +++ 5 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 cmd/flux/testdata/create_secret/git/git-bearer-token.yaml diff --git a/cmd/flux/create_secret_git.go b/cmd/flux/create_secret_git.go index 2948a2e0..b8bf05bb 100644 --- a/cmd/flux/create_secret_git.go +++ b/cmd/flux/create_secret_git.go @@ -37,7 +37,7 @@ var createSecretGitCmd = &cobra.Command{ Short: "Create or update a Kubernetes secret for Git authentication", Long: `The create secret git command generates a Kubernetes secret with Git credentials. For Git over SSH, the host and SSH keys are automatically generated and stored in the secret. -For Git over HTTP/S, the provided basic authentication credentials are stored in the secret.`, +For Git over HTTP/S, the provided basic authentication credentials or bearer authentication token are stored in the secret.`, Example: ` # Create a Git SSH authentication secret using an ECDSA P-521 curve public key flux create secret git podinfo-auth \ @@ -87,6 +87,7 @@ type secretGitFlags struct { ecdsaCurve flags.ECDSACurve caFile string privateKeyFile string + bearerToken string } var secretGitArgs = NewSecretGitFlags() @@ -100,6 +101,7 @@ func init() { createSecretGitCmd.Flags().Var(&secretGitArgs.ecdsaCurve, "ssh-ecdsa-curve", secretGitArgs.ecdsaCurve.Description()) createSecretGitCmd.Flags().StringVar(&secretGitArgs.caFile, "ca-file", "", "path to TLS CA file used for validating self-signed certificates") createSecretGitCmd.Flags().StringVar(&secretGitArgs.privateKeyFile, "private-key-file", "", "path to a passwordless private key file used for authenticating to the Git SSH server") + createSecretGitCmd.Flags().StringVar(&secretGitArgs.bearerToken, "bearer-token", "", "bearer authentication token") createSecretCmd.AddCommand(createSecretGitCmd) } @@ -147,11 +149,15 @@ func createSecretGitCmdRun(cmd *cobra.Command, args []string) error { opts.ECDSACurve = secretGitArgs.ecdsaCurve.Curve opts.Password = secretGitArgs.password case "http", "https": - if secretGitArgs.username == "" || secretGitArgs.password == "" { - return fmt.Errorf("for Git over HTTP/S the username and password are required") + if (secretGitArgs.username == "" || secretGitArgs.password == "") && secretGitArgs.bearerToken == "" { + return fmt.Errorf("for Git over HTTP/S the username and password, or a bearer token is required") } opts.Username = secretGitArgs.username opts.Password = secretGitArgs.password + opts.BearerToken = secretGitArgs.bearerToken + if secretGitArgs.username != "" && secretGitArgs.password != "" && secretGitArgs.bearerToken != "" { + return fmt.Errorf("user credentials and bearer token cannot be used together") + } if secretGitArgs.caFile != "" { caBundle, err := os.ReadFile(secretGitArgs.caFile) if err != nil { diff --git a/cmd/flux/create_secret_git_test.go b/cmd/flux/create_secret_git_test.go index 16ff400a..bdf2431d 100644 --- a/cmd/flux/create_secret_git_test.go +++ b/cmd/flux/create_secret_git_test.go @@ -30,6 +30,16 @@ func TestCreateGitSecret(t *testing.T) { args: "create secret git podinfo-auth --url=ssh://git@github.com/stefanprodan/podinfo --private-key-file=./testdata/create_secret/git/ecdsa-password.private --password=password --namespace=my-namespace --export", assert: assertGoldenFile("testdata/create_secret/git/git-ssh-secret-password.yaml"), }, + { + name: "git authentication with bearer token", + args: "create secret git bearer-token-auth --url=https://github.com/stefanprodan/podinfo --bearer-token=ghp_baR2qnFF0O41WlucePL3udt2N9vVZS4R0hAS --namespace=my-namespace --export", + assert: assertGoldenFile("testdata/create_secret/git/git-bearer-token.yaml"), + }, + { + name: "git authentication with basic auth and bearer token", + args: "create secret git podinfo-auth --url=https://github.com/stefanprodan/podinfo --username=aaa --password=zzzz --bearer-token=aaaa --namespace=my-namespace --export", + assert: assertError("user credentials and bearer token cannot be used together"), + }, } for _, tt := range tests { diff --git a/cmd/flux/testdata/create_secret/git/git-bearer-token.yaml b/cmd/flux/testdata/create_secret/git/git-bearer-token.yaml new file mode 100644 index 00000000..7dcfde2d --- /dev/null +++ b/cmd/flux/testdata/create_secret/git/git-bearer-token.yaml @@ -0,0 +1,9 @@ +--- +apiVersion: v1 +kind: Secret +metadata: + name: bearer-token-auth + namespace: my-namespace +stringData: + bearerToken: ghp_baR2qnFF0O41WlucePL3udt2N9vVZS4R0hAS + diff --git a/pkg/manifestgen/sourcesecret/options.go b/pkg/manifestgen/sourcesecret/options.go index d9cec044..ada27ce8 100644 --- a/pkg/manifestgen/sourcesecret/options.go +++ b/pkg/manifestgen/sourcesecret/options.go @@ -39,6 +39,7 @@ const ( PrivateKeySecretKey = "identity" PublicKeySecretKey = "identity.pub" KnownHostsSecretKey = "known_hosts" + BearerTokenKey = "bearerToken" ) type Options struct { @@ -58,6 +59,7 @@ type Options struct { KeyFile []byte TargetPath string ManifestFile string + BearerToken string } func MakeDefaultOptions() Options { @@ -72,5 +74,6 @@ func MakeDefaultOptions() Options { CertFile: []byte{}, KeyFile: []byte{}, ManifestFile: "secret.yaml", + BearerToken: "", } } diff --git a/pkg/manifestgen/sourcesecret/sourcesecret.go b/pkg/manifestgen/sourcesecret/sourcesecret.go index a5ab6c43..5c0d40d1 100644 --- a/pkg/manifestgen/sourcesecret/sourcesecret.go +++ b/pkg/manifestgen/sourcesecret/sourcesecret.go @@ -152,6 +152,9 @@ func buildSecret(keypair *ssh.KeyPair, hostKey, caFile, certFile, keyFile, docke secret.StringData[UsernameSecretKey] = options.Username secret.StringData[PasswordSecretKey] = options.Password } + if options.BearerToken != "" { + secret.StringData[BearerTokenKey] = options.BearerToken + } if len(caFile) != 0 { secret.StringData[CAFileSecretKey] = string(caFile) From a452f159058ec1c662da6cb2c8aaf2afa41798b1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Mar 2023 01:27:33 +0000 Subject: [PATCH 447/818] build(deps): bump github/codeql-action from 2.2.6 to 2.2.7 Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2.2.6 to 2.2.7. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/16964e90ba004cdf0cd845b866b5df21038b7723...168b99b3c22180941ae7dbdd5f5c9678ede476ba) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/scan.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index fb14690f..e7698650 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -50,7 +50,7 @@ jobs: env: SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }} - name: Upload result to GitHub Code Scanning - uses: github/codeql-action/upload-sarif@16964e90ba004cdf0cd845b866b5df21038b7723 # v2.2.6 + uses: github/codeql-action/upload-sarif@168b99b3c22180941ae7dbdd5f5c9678ede476ba # v2.2.7 with: sarif_file: snyk.sarif @@ -67,10 +67,10 @@ jobs: with: go-version: 1.20.x - name: Initialize CodeQL - uses: github/codeql-action/init@16964e90ba004cdf0cd845b866b5df21038b7723 # v2.2.6 + uses: github/codeql-action/init@168b99b3c22180941ae7dbdd5f5c9678ede476ba # v2.2.7 with: languages: go - name: Autobuild - uses: github/codeql-action/autobuild@16964e90ba004cdf0cd845b866b5df21038b7723 # v2.2.6 + uses: github/codeql-action/autobuild@168b99b3c22180941ae7dbdd5f5c9678ede476ba # v2.2.7 - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@16964e90ba004cdf0cd845b866b5df21038b7723 # v2.2.6 + uses: github/codeql-action/analyze@168b99b3c22180941ae7dbdd5f5c9678ede476ba # v2.2.7 From 1071f04e937770d4a358ee7e1ed31c4b97fdfaad Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Mar 2023 10:13:50 +0000 Subject: [PATCH 448/818] build(deps): bump actions/checkout from 3.3.0 to 3.4.0 Bumps [actions/checkout](https://github.com/actions/checkout) from 3.3.0 to 3.4.0. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/ac593985615ec2ede58e132d2e21d2b1cbd6127c...24cb9080177205b6e8c946b17badbe402adc938f) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/e2e-arm64.yaml | 2 +- .github/workflows/e2e-azure.yaml | 2 +- .github/workflows/e2e-bootstrap.yaml | 2 +- .github/workflows/e2e.yaml | 2 +- .github/workflows/release.yaml | 4 ++-- .github/workflows/scan.yaml | 6 +++--- .github/workflows/update.yaml | 2 +- 7 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/e2e-arm64.yaml b/.github/workflows/e2e-arm64.yaml index d6729c3e..6746ab45 100644 --- a/.github/workflows/e2e-arm64.yaml +++ b/.github/workflows/e2e-arm64.yaml @@ -20,7 +20,7 @@ jobs: KUBERNETES_VERSION: [ 1.24.7, 1.25.3, 1.26.0 ] steps: - name: Checkout - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 + uses: actions/checkout@24cb9080177205b6e8c946b17badbe402adc938f # v3.4.0 - name: Setup Go uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 # v3.5.0 with: diff --git a/.github/workflows/e2e-azure.yaml b/.github/workflows/e2e-azure.yaml index 69dd833e..3eb0f7d0 100644 --- a/.github/workflows/e2e-azure.yaml +++ b/.github/workflows/e2e-azure.yaml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-22.04 steps: - name: Checkout - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 + uses: actions/checkout@24cb9080177205b6e8c946b17badbe402adc938f # v3.4.0 - name: Restore Go cache uses: actions/cache@940f3d7cf195ba83374c77632d1e2cbb2f24ae68 # v3.3.0 with: diff --git a/.github/workflows/e2e-bootstrap.yaml b/.github/workflows/e2e-bootstrap.yaml index 8a2f3297..349a81a3 100644 --- a/.github/workflows/e2e-bootstrap.yaml +++ b/.github/workflows/e2e-bootstrap.yaml @@ -16,7 +16,7 @@ jobs: if: (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) && github.actor != 'dependabot[bot]' steps: - name: Checkout - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 + uses: actions/checkout@24cb9080177205b6e8c946b17badbe402adc938f # v3.4.0 - name: Restore Go cache uses: actions/cache@940f3d7cf195ba83374c77632d1e2cbb2f24ae68 # v3.3.0 with: diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index 13182e1f..5111e422 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -20,7 +20,7 @@ jobs: - 5000:5000 steps: - name: Checkout - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 + uses: actions/checkout@24cb9080177205b6e8c946b17badbe402adc938f # v3.4.0 - name: Restore Go cache uses: actions/cache@940f3d7cf195ba83374c77632d1e2cbb2f24ae68 # v3.3.0 with: diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 33405656..6dd560bc 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -16,7 +16,7 @@ jobs: packages: write # needed for ghcr access steps: - name: Checkout - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 + uses: actions/checkout@24cb9080177205b6e8c946b17badbe402adc938f # v3.4.0 - name: Unshallow run: git fetch --prune --unshallow - name: Setup Go @@ -88,7 +88,7 @@ jobs: id-token: write packages: write steps: - - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 + - uses: actions/checkout@24cb9080177205b6e8c946b17badbe402adc938f # v3.4.0 - name: Setup Kustomize uses: fluxcd/pkg/actions/kustomize@main - name: Setup Flux CLI diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index e7698650..69ff30be 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -17,7 +17,7 @@ jobs: runs-on: ubuntu-latest if: github.actor != 'dependabot[bot]' steps: - - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 + - uses: actions/checkout@24cb9080177205b6e8c946b17badbe402adc938f # v3.4.0 - name: Run FOSSA scan and upload build data uses: fossa-contrib/fossa-action@6728dc6fe9a068c648d080c33829ffbe56565023 # v2.0.0 with: @@ -31,7 +31,7 @@ jobs: security-events: write if: (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) && github.actor != 'dependabot[bot]' steps: - - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 + - uses: actions/checkout@24cb9080177205b6e8c946b17badbe402adc938f # v3.4.0 - name: Setup Kustomize uses: fluxcd/pkg/actions/kustomize@main - name: Setup Go @@ -61,7 +61,7 @@ jobs: if: github.actor != 'dependabot[bot]' steps: - name: Checkout repository - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 + uses: actions/checkout@24cb9080177205b6e8c946b17badbe402adc938f # v3.4.0 - name: Set up Go uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 # v3.5.0 with: diff --git a/.github/workflows/update.yaml b/.github/workflows/update.yaml index 234cdabc..bce8038f 100644 --- a/.github/workflows/update.yaml +++ b/.github/workflows/update.yaml @@ -18,7 +18,7 @@ jobs: pull-requests: write steps: - name: Check out code - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 + uses: actions/checkout@24cb9080177205b6e8c946b17badbe402adc938f # v3.4.0 - name: Setup Go uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 # v3.5.0 with: From 519cf58d27f869915d5c2d9e6f476ef7fc785d34 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Mar 2023 10:09:58 +0000 Subject: [PATCH 449/818] build(deps): bump peter-evans/create-pull-request from 4.2.3 to 4.2.4 Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 4.2.3 to 4.2.4. - [Release notes](https://github.com/peter-evans/create-pull-request/releases) - [Commits](https://github.com/peter-evans/create-pull-request/compare/2b011faafdcbc9ceb11414d64d0573f37c774b04...38e0b6e68b4c852a5500a94740f0e535e0d7ba54) --- updated-dependencies: - dependency-name: peter-evans/create-pull-request dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/update.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/update.yaml b/.github/workflows/update.yaml index bce8038f..ab1fa365 100644 --- a/.github/workflows/update.yaml +++ b/.github/workflows/update.yaml @@ -81,7 +81,7 @@ jobs: - name: Create Pull Request id: cpr - uses: peter-evans/create-pull-request@2b011faafdcbc9ceb11414d64d0573f37c774b04 # v4.2.3 + uses: peter-evans/create-pull-request@38e0b6e68b4c852a5500a94740f0e535e0d7ba54 # v4.2.4 with: token: ${{ secrets.BOT_GITHUB_TOKEN }} commit-message: | From ce405b6060f445efcd710c375283158f82190743 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Mon, 20 Mar 2023 11:43:12 +0100 Subject: [PATCH 450/818] build: update `actions/setup-go` in workflows - Update `actions/setup-go` to v4.0.0 in workflows. - Remove separate caching steps in favor of built-in caching feature in action (since >=v3.0.0). Signed-off-by: Hidde Beydals --- .github/workflows/e2e-arm64.yaml | 5 ++++- .github/workflows/e2e-azure.yaml | 12 ++++-------- .github/workflows/e2e-bootstrap.yaml | 12 ++++-------- .github/workflows/e2e.yaml | 12 ++++-------- .github/workflows/release.yaml | 3 ++- .github/workflows/scan.yaml | 12 +++++++++--- .github/workflows/update.yaml | 5 ++++- 7 files changed, 31 insertions(+), 30 deletions(-) diff --git a/.github/workflows/e2e-arm64.yaml b/.github/workflows/e2e-arm64.yaml index 6746ab45..edbd0dd4 100644 --- a/.github/workflows/e2e-arm64.yaml +++ b/.github/workflows/e2e-arm64.yaml @@ -22,9 +22,12 @@ jobs: - name: Checkout uses: actions/checkout@24cb9080177205b6e8c946b17badbe402adc938f # v3.4.0 - name: Setup Go - uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 # v3.5.0 + uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9 # v4.0.0 with: go-version: 1.20.x + cache-dependency-path: | + **/go.sum + **/go.mod - name: Prepare id: prep run: | diff --git a/.github/workflows/e2e-azure.yaml b/.github/workflows/e2e-azure.yaml index 3eb0f7d0..5ee94abb 100644 --- a/.github/workflows/e2e-azure.yaml +++ b/.github/workflows/e2e-azure.yaml @@ -16,17 +16,13 @@ jobs: steps: - name: Checkout uses: actions/checkout@24cb9080177205b6e8c946b17badbe402adc938f # v3.4.0 - - name: Restore Go cache - uses: actions/cache@940f3d7cf195ba83374c77632d1e2cbb2f24ae68 # v3.3.0 - with: - path: ~/go/pkg/mod - key: ${{ runner.os }}-go1.20-${{ hashFiles('**/go.sum') }} - restore-keys: | - ${{ runner.os }}-go1.20- - name: Setup Go - uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 # v3.5.0 + uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9 # v4.0.0 with: go-version: 1.20.x + cache-dependency-path: | + **/go.sum + **/go.mod - name: Setup Flux CLI run: | make build diff --git a/.github/workflows/e2e-bootstrap.yaml b/.github/workflows/e2e-bootstrap.yaml index 349a81a3..6740080c 100644 --- a/.github/workflows/e2e-bootstrap.yaml +++ b/.github/workflows/e2e-bootstrap.yaml @@ -17,17 +17,13 @@ jobs: steps: - name: Checkout uses: actions/checkout@24cb9080177205b6e8c946b17badbe402adc938f # v3.4.0 - - name: Restore Go cache - uses: actions/cache@940f3d7cf195ba83374c77632d1e2cbb2f24ae68 # v3.3.0 - with: - path: ~/go/pkg/mod - key: ${{ runner.os }}-go1.20-${{ hashFiles('**/go.sum') }} - restore-keys: | - ${{ runner.os }}-go1.20- - name: Setup Go - uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 # v3.5.0 + uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9 # v4.0.0 with: go-version: 1.20.x + cache-dependency-path: | + **/go.sum + **/go.mod - name: Setup Kubernetes uses: helm/kind-action@d8ccf8fb623ce1bb360ae2f45f323d9d5c5e9f00 # v1.5.0 with: diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index 5111e422..920fdd58 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -21,17 +21,13 @@ jobs: steps: - name: Checkout uses: actions/checkout@24cb9080177205b6e8c946b17badbe402adc938f # v3.4.0 - - name: Restore Go cache - uses: actions/cache@940f3d7cf195ba83374c77632d1e2cbb2f24ae68 # v3.3.0 - with: - path: ~/go/pkg/mod - key: ${{ runner.os }}-go1.20-${{ hashFiles('**/go.sum') }} - restore-keys: | - ${{ runner.os }}-go1.20- - name: Setup Go - uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 # v3.5.0 + uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9 # v4.0.0 with: go-version: 1.20.x + cache-dependency-path: | + **/go.sum + **/go.mod - name: Setup Kubernetes uses: helm/kind-action@d8ccf8fb623ce1bb360ae2f45f323d9d5c5e9f00 # v1.5.0 with: diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 6dd560bc..ce83e966 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -20,9 +20,10 @@ jobs: - name: Unshallow run: git fetch --prune --unshallow - name: Setup Go - uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 # v3.5.0 + uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9 # v4.0.0 with: go-version: 1.20.x + cache: false - name: Setup QEMU uses: docker/setup-qemu-action@e81a89b1732b9c48d79cd809d8d81d79c4647a18 # v2.1.0 - name: Setup Docker Buildx diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index 69ff30be..e0af3cf1 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -35,9 +35,12 @@ jobs: - name: Setup Kustomize uses: fluxcd/pkg/actions/kustomize@main - name: Setup Go - uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 # v3.5.0 + uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9 # v4.0.0 with: go-version: 1.20.x + cache-dependency-path: | + **/go.sum + **/go.mod - name: Download modules and build manifests run: | make tidy @@ -62,10 +65,13 @@ jobs: steps: - name: Checkout repository uses: actions/checkout@24cb9080177205b6e8c946b17badbe402adc938f # v3.4.0 - - name: Set up Go - uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 # v3.5.0 + - name: Setup Go + uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9 # v4.0.0 with: go-version: 1.20.x + cache-dependency-path: | + **/go.sum + **/go.mod - name: Initialize CodeQL uses: github/codeql-action/init@168b99b3c22180941ae7dbdd5f5c9678ede476ba # v2.2.7 with: diff --git a/.github/workflows/update.yaml b/.github/workflows/update.yaml index ab1fa365..45d88e02 100644 --- a/.github/workflows/update.yaml +++ b/.github/workflows/update.yaml @@ -20,9 +20,12 @@ jobs: - name: Check out code uses: actions/checkout@24cb9080177205b6e8c946b17badbe402adc938f # v3.4.0 - name: Setup Go - uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 # v3.5.0 + uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9 # v4.0.0 with: go-version: 1.20.x + cache-dependency-path: | + **/go.sum + **/go.mod - name: Update component versions id: update run: | From cdd116dedfdc9e0d5730bc2170c16a754df8ee66 Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Mon, 20 Mar 2023 16:42:10 +0000 Subject: [PATCH 451/818] Update toolkit components - helm-controller to v0.31.2 https://github.com/fluxcd/helm-controller/blob/v0.31.2/CHANGELOG.md - kustomize-controller to v0.35.1 https://github.com/fluxcd/kustomize-controller/blob/v0.35.1/CHANGELOG.md - source-controller to v0.36.1 https://github.com/fluxcd/source-controller/blob/v0.36.1/CHANGELOG.md - image-reflector-controller to v0.26.1 https://github.com/fluxcd/image-reflector-controller/blob/v0.26.1/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 8 ++++---- go.sum | 16 ++++++++-------- .../bases/helm-controller/kustomization.yaml | 4 ++-- .../kustomization.yaml | 4 ++-- .../kustomize-controller/kustomization.yaml | 4 ++-- .../bases/source-controller/kustomization.yaml | 4 ++-- manifests/crds/kustomization.yaml | 8 ++++---- 7 files changed, 24 insertions(+), 24 deletions(-) diff --git a/go.mod b/go.mod index a1ba846c..275974fc 100644 --- a/go.mod +++ b/go.mod @@ -9,10 +9,10 @@ require ( github.com/distribution/distribution/v3 v3.0.0-20230223072852-e5d5810851d1 github.com/fluxcd/go-git-providers v0.14.0 github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 - github.com/fluxcd/helm-controller/api v0.31.1 + github.com/fluxcd/helm-controller/api v0.31.2 github.com/fluxcd/image-automation-controller/api v0.31.0 - github.com/fluxcd/image-reflector-controller/api v0.26.0 - github.com/fluxcd/kustomize-controller/api v0.35.0 + github.com/fluxcd/image-reflector-controller/api v0.26.1 + github.com/fluxcd/kustomize-controller/api v0.35.1 github.com/fluxcd/notification-controller/api v0.33.0 github.com/fluxcd/pkg/apis/event v0.4.1 github.com/fluxcd/pkg/apis/meta v0.19.1 @@ -26,7 +26,7 @@ require ( github.com/fluxcd/pkg/ssh v0.7.3 github.com/fluxcd/pkg/untar v0.2.0 github.com/fluxcd/pkg/version v0.2.1 - github.com/fluxcd/source-controller/api v0.36.0 + github.com/fluxcd/source-controller/api v0.36.1 github.com/gonvenience/bunt v1.3.4 github.com/gonvenience/ytbx v1.4.4 github.com/google/go-cmp v0.5.9 diff --git a/go.sum b/go.sum index 69875c22..c6f75694 100644 --- a/go.sum +++ b/go.sum @@ -199,14 +199,14 @@ github.com/fluxcd/go-git-providers v0.14.0 h1:F662wkiMevhGYKCwe9AJItpq42aJbd+tQq github.com/fluxcd/go-git-providers v0.14.0/go.mod h1:cxVVQEBEswAIgbRVi50Cf6pEM/+RhNcNwDpsIkN6pG0= github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 h1:Gm5sGGk+/Wq6RhX4xpCZ2IqjDp5XkjlhENaAuAlpdKc= github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4/go.mod h1:raWgfUV7lDQVXp4QXUaeNNJkRVKz97UQuF+0kdY7Vmo= -github.com/fluxcd/helm-controller/api v0.31.1 h1:aoRVS1CNeR6WpXdjWxw2YGRQhWBAZOU9AKKq/Wf+Nnw= -github.com/fluxcd/helm-controller/api v0.31.1/go.mod h1:z9zLN31FjwHhd8RyGsrE4vnRtUp4bz5rXxd1hVX3Waw= +github.com/fluxcd/helm-controller/api v0.31.2 h1:d/lbCPYiQP+YnPNhdIOGRzHUWDIhnxI9dUSaOCx/RK8= +github.com/fluxcd/helm-controller/api v0.31.2/go.mod h1:z9zLN31FjwHhd8RyGsrE4vnRtUp4bz5rXxd1hVX3Waw= github.com/fluxcd/image-automation-controller/api v0.31.0 h1:xA2MXbVpXWAFBCmlaOqgLtqGfR637aw0PxyyMGaqUTI= github.com/fluxcd/image-automation-controller/api v0.31.0/go.mod h1:kNQ/g5TK0Epwguma2+Y1binRMRZ1d6E2VmZLg2iGkqw= -github.com/fluxcd/image-reflector-controller/api v0.26.0 h1:rrr7BCjc4/D9jY7mu6bwkP/bnn5B1LWLCiFYuD6/vFg= -github.com/fluxcd/image-reflector-controller/api v0.26.0/go.mod h1:xZILku1/O6higkHTW/D3dvte4Ld7kRuZH9r+Rm4p1B0= -github.com/fluxcd/kustomize-controller/api v0.35.0 h1:G3Bk56GNGKM6R97tx3tJfwYk4N/ZS3Kv/Qqscyv0hd0= -github.com/fluxcd/kustomize-controller/api v0.35.0/go.mod h1:hrxVOUss0om4mg+ykMYtH4CgLuM2RReSPf0hG9e0b18= +github.com/fluxcd/image-reflector-controller/api v0.26.1 h1:AKfqabDlcouGilX0y+/Wa1R9qwMb6ZlTHD1ELEkK9tw= +github.com/fluxcd/image-reflector-controller/api v0.26.1/go.mod h1:xZILku1/O6higkHTW/D3dvte4Ld7kRuZH9r+Rm4p1B0= +github.com/fluxcd/kustomize-controller/api v0.35.1 h1:l7AndDJXVLZcCHmEIRXU9ksWInlP6SjFtHQH1SC7++c= +github.com/fluxcd/kustomize-controller/api v0.35.1/go.mod h1:hrxVOUss0om4mg+ykMYtH4CgLuM2RReSPf0hG9e0b18= github.com/fluxcd/notification-controller/api v0.33.0 h1:iVnIGDfkpVuzcILSGwi//Q3devCg7E7G4lfDx8vuvsA= github.com/fluxcd/notification-controller/api v0.33.0/go.mod h1:0IyWy0J6+z1TbijVQjFx1gWQDOzXaRfzV2NClfjHZPk= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= @@ -240,8 +240,8 @@ github.com/fluxcd/pkg/untar v0.2.0 h1:sJXU+FbJcNUb2ffLJNjeR3hwt3X2loVpOMlCUjyFw6 github.com/fluxcd/pkg/untar v0.2.0/go.mod h1:33AyoWaPpjX/xXpczcfhQh2AkB63TFwiR2YwROtv23E= github.com/fluxcd/pkg/version v0.2.1 h1:RRH7+6qiWHdTvRNwpoBmilnubJ2C4FZYGgy5wTDVKVc= github.com/fluxcd/pkg/version v0.2.1/go.mod h1:UmUYHDz4BxHQMesMUx3gYVrT2Wf66H49JpTg/PW+/OY= -github.com/fluxcd/source-controller/api v0.36.0 h1:c5/uWFqKZ9vtDkkXsdMTyiuHNNEX3B6ldjgTsB7Uy14= -github.com/fluxcd/source-controller/api v0.36.0/go.mod h1:GktZmd5Dfxo84vPFBdLDl0bBtiJRODfd47uugK0romU= +github.com/fluxcd/source-controller/api v0.36.1 h1:/ul69kJNEwrFG1Cwk2P/GwgraIxOETCL+tP+zMtxTu8= +github.com/fluxcd/source-controller/api v0.36.1/go.mod h1:GktZmd5Dfxo84vPFBdLDl0bBtiJRODfd47uugK0romU= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= diff --git a/manifests/bases/helm-controller/kustomization.yaml b/manifests/bases/helm-controller/kustomization.yaml index 6eea6263..8a9280e0 100644 --- a/manifests/bases/helm-controller/kustomization.yaml +++ b/manifests/bases/helm-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/helm-controller/releases/download/v0.31.1/helm-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.31.1/helm-controller.deployment.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.31.2/helm-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.31.2/helm-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/image-reflector-controller/kustomization.yaml b/manifests/bases/image-reflector-controller/kustomization.yaml index 90bbf706..a444bbce 100644 --- a/manifests/bases/image-reflector-controller/kustomization.yaml +++ b/manifests/bases/image-reflector-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.26.0/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.26.0/image-reflector-controller.deployment.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.26.1/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.26.1/image-reflector-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/kustomize-controller/kustomization.yaml b/manifests/bases/kustomize-controller/kustomization.yaml index 8e66983c..ff0c1424 100644 --- a/manifests/bases/kustomize-controller/kustomization.yaml +++ b/manifests/bases/kustomize-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.35.0/kustomize-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.35.0/kustomize-controller.deployment.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.35.1/kustomize-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.35.1/kustomize-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index ffab7517..323d5c6f 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.36.0/source-controller.crds.yaml -- https://github.com/fluxcd/source-controller/releases/download/v0.36.0/source-controller.deployment.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.36.1/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.36.1/source-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index 7549c234..29275fe6 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -1,9 +1,9 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.36.0/source-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.35.0/kustomize-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.31.1/helm-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v0.36.1/source-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v0.35.1/kustomize-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.31.2/helm-controller.crds.yaml - https://github.com/fluxcd/notification-controller/releases/download/v0.33.0/notification-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.26.0/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.26.1/image-reflector-controller.crds.yaml - https://github.com/fluxcd/image-automation-controller/releases/download/v0.31.0/image-automation-controller.crds.yaml From e2012a8272e5b240d899062e7c2b92041a66cc0d Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Mon, 20 Mar 2023 18:25:47 +0100 Subject: [PATCH 452/818] tests/azure: update toolkit components - github.com/fluxcd/helm-controller/api to v0.31.2 - github.com/fluxcd/image-reflector-controller/api to v0.26.1 - github.com/fluxcd/kustomize-controller/api to v0.35.1 - github.com/fluxcd/source-controller/api to v0.36.1 Signed-off-by: Hidde Beydals --- tests/azure/go.mod | 8 ++++---- tests/azure/go.sum | 16 ++++++++-------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/tests/azure/go.mod b/tests/azure/go.mod index a7368020..719c0ebe 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -5,16 +5,16 @@ go 1.19 require ( github.com/Azure/azure-event-hubs-go/v3 v3.4.0 github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 - github.com/fluxcd/helm-controller/api v0.31.0 + github.com/fluxcd/helm-controller/api v0.31.2 github.com/fluxcd/image-automation-controller/api v0.31.0 - github.com/fluxcd/image-reflector-controller/api v0.26.0 - github.com/fluxcd/kustomize-controller/api v0.35.0 + github.com/fluxcd/image-reflector-controller/api v0.26.1 + github.com/fluxcd/kustomize-controller/api v0.35.1 github.com/fluxcd/notification-controller/api v0.33.0 github.com/fluxcd/pkg/apis/event v0.4.1 github.com/fluxcd/pkg/apis/meta v0.19.1 github.com/fluxcd/pkg/git v0.11.0 github.com/fluxcd/pkg/git/gogit v0.8.1 - github.com/fluxcd/source-controller/api v0.36.0 + github.com/fluxcd/source-controller/api v0.36.1 github.com/hashicorp/hc-install v0.5.0 github.com/hashicorp/terraform-exec v0.18.1 github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 diff --git a/tests/azure/go.sum b/tests/azure/go.sum index 075974f1..8c37b628 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -136,14 +136,14 @@ github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 h1:Gm5sGGk+/Wq6RhX4xpCZ2IqjDp5XkjlhENaAuAlpdKc= github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4/go.mod h1:raWgfUV7lDQVXp4QXUaeNNJkRVKz97UQuF+0kdY7Vmo= -github.com/fluxcd/helm-controller/api v0.31.0 h1:Pqe8R5SaukGGVE60U7SwiKydCjP8lZWBsU7wqeSFzMg= -github.com/fluxcd/helm-controller/api v0.31.0/go.mod h1:z9zLN31FjwHhd8RyGsrE4vnRtUp4bz5rXxd1hVX3Waw= +github.com/fluxcd/helm-controller/api v0.31.2 h1:d/lbCPYiQP+YnPNhdIOGRzHUWDIhnxI9dUSaOCx/RK8= +github.com/fluxcd/helm-controller/api v0.31.2/go.mod h1:z9zLN31FjwHhd8RyGsrE4vnRtUp4bz5rXxd1hVX3Waw= github.com/fluxcd/image-automation-controller/api v0.31.0 h1:xA2MXbVpXWAFBCmlaOqgLtqGfR637aw0PxyyMGaqUTI= github.com/fluxcd/image-automation-controller/api v0.31.0/go.mod h1:kNQ/g5TK0Epwguma2+Y1binRMRZ1d6E2VmZLg2iGkqw= -github.com/fluxcd/image-reflector-controller/api v0.26.0 h1:rrr7BCjc4/D9jY7mu6bwkP/bnn5B1LWLCiFYuD6/vFg= -github.com/fluxcd/image-reflector-controller/api v0.26.0/go.mod h1:xZILku1/O6higkHTW/D3dvte4Ld7kRuZH9r+Rm4p1B0= -github.com/fluxcd/kustomize-controller/api v0.35.0 h1:G3Bk56GNGKM6R97tx3tJfwYk4N/ZS3Kv/Qqscyv0hd0= -github.com/fluxcd/kustomize-controller/api v0.35.0/go.mod h1:hrxVOUss0om4mg+ykMYtH4CgLuM2RReSPf0hG9e0b18= +github.com/fluxcd/image-reflector-controller/api v0.26.1 h1:AKfqabDlcouGilX0y+/Wa1R9qwMb6ZlTHD1ELEkK9tw= +github.com/fluxcd/image-reflector-controller/api v0.26.1/go.mod h1:xZILku1/O6higkHTW/D3dvte4Ld7kRuZH9r+Rm4p1B0= +github.com/fluxcd/kustomize-controller/api v0.35.1 h1:l7AndDJXVLZcCHmEIRXU9ksWInlP6SjFtHQH1SC7++c= +github.com/fluxcd/kustomize-controller/api v0.35.1/go.mod h1:hrxVOUss0om4mg+ykMYtH4CgLuM2RReSPf0hG9e0b18= github.com/fluxcd/notification-controller/api v0.33.0 h1:iVnIGDfkpVuzcILSGwi//Q3devCg7E7G4lfDx8vuvsA= github.com/fluxcd/notification-controller/api v0.33.0/go.mod h1:0IyWy0J6+z1TbijVQjFx1gWQDOzXaRfzV2NClfjHZPk= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= @@ -163,8 +163,8 @@ github.com/fluxcd/pkg/ssh v0.7.3 h1:Dhs+nXdp806lBriUJtPyRi0SVIVWbJafJGD/qQ71GiY= github.com/fluxcd/pkg/ssh v0.7.3/go.mod h1:/z5ZNgQz+h9s/2nNFKAcZDHtZRMA1nj5YcriGDUOoLY= github.com/fluxcd/pkg/version v0.2.1 h1:RRH7+6qiWHdTvRNwpoBmilnubJ2C4FZYGgy5wTDVKVc= github.com/fluxcd/pkg/version v0.2.1/go.mod h1:UmUYHDz4BxHQMesMUx3gYVrT2Wf66H49JpTg/PW+/OY= -github.com/fluxcd/source-controller/api v0.36.0 h1:c5/uWFqKZ9vtDkkXsdMTyiuHNNEX3B6ldjgTsB7Uy14= -github.com/fluxcd/source-controller/api v0.36.0/go.mod h1:GktZmd5Dfxo84vPFBdLDl0bBtiJRODfd47uugK0romU= +github.com/fluxcd/source-controller/api v0.36.1 h1:/ul69kJNEwrFG1Cwk2P/GwgraIxOETCL+tP+zMtxTu8= +github.com/fluxcd/source-controller/api v0.36.1/go.mod h1:GktZmd5Dfxo84vPFBdLDl0bBtiJRODfd47uugK0romU= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= From c9fea671a7c2613050d2f7145ea09eac97721bf7 Mon Sep 17 00:00:00 2001 From: Matheus Pimenta Date: Fri, 17 Mar 2023 19:17:09 +0000 Subject: [PATCH 453/818] Add retry interval option to create kustomization command Signed-off-by: Matheus Pimenta --- cmd/flux/create_kustomization.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/cmd/flux/create_kustomization.go b/cmd/flux/create_kustomization.go index bc40de0d..6da5365a 100644 --- a/cmd/flux/create_kustomization.go +++ b/cmd/flux/create_kustomization.go @@ -97,6 +97,7 @@ type kustomizationFlags struct { targetNamespace string wait bool kubeConfigSecretRef string + retryInterval time.Duration } var kustomizationArgs = NewKustomizationFlags() @@ -116,6 +117,7 @@ func init() { createKsCmd.Flags().StringVar(&kustomizationArgs.targetNamespace, "target-namespace", "", "overrides the namespace of all Kustomization objects reconciled by this Kustomization") createKsCmd.Flags().StringVar(&kustomizationArgs.kubeConfigSecretRef, "kubeconfig-secret-ref", "", "the name of the Kubernetes Secret that contains a key with the kubeconfig file for connecting to a remote cluster") createKsCmd.Flags().MarkDeprecated("validation", "this arg is no longer used, all resources are validated using server-side apply dry-run") + createKsCmd.Flags().DurationVar(&kustomizationArgs.retryInterval, "retry-interval", 0, "the interval at which to retry a previously failed reconciliation") createCmd.AddCommand(createKsCmd) } @@ -238,6 +240,10 @@ func createKsCmdRun(cmd *cobra.Command, args []string) error { } } + if kustomizationArgs.retryInterval > 0 { + kustomization.Spec.RetryInterval = &metav1.Duration{Duration: kustomizationArgs.retryInterval} + } + if createArgs.export { return printExport(exportKs(&kustomization)) } From 91d1e1df485ddce4f6134cff9dd546507b44b023 Mon Sep 17 00:00:00 2001 From: Timo Furrer Date: Tue, 14 Mar 2023 17:26:13 +0100 Subject: [PATCH 454/818] Update go-git-providers to v0.15.0 Signed-off-by: Timo Furrer --- go.mod | 10 +++++----- go.sum | 19 ++++++++++--------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/go.mod b/go.mod index 275974fc..5df8c924 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,7 @@ require ( github.com/ProtonMail/go-crypto v0.0.0-20230217124315-7d5c6f04bbb8 github.com/cyphar/filepath-securejoin v0.2.3 github.com/distribution/distribution/v3 v3.0.0-20230223072852-e5d5810851d1 - github.com/fluxcd/go-git-providers v0.14.0 + github.com/fluxcd/go-git-providers v0.15.0 github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 github.com/fluxcd/helm-controller/api v0.31.2 github.com/fluxcd/image-automation-controller/api v0.31.0 @@ -125,7 +125,7 @@ require ( github.com/gogo/protobuf v1.3.2 // indirect github.com/golang-jwt/jwt/v4 v4.4.2 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect - github.com/golang/protobuf v1.5.2 // indirect + github.com/golang/protobuf v1.5.3 // indirect github.com/gomodule/redigo v1.8.2 // indirect github.com/gonvenience/neat v1.3.11 // indirect github.com/gonvenience/term v1.0.2 // indirect @@ -190,7 +190,7 @@ require ( github.com/texttheater/golang-levenshtein v1.0.1 // indirect github.com/vbatts/tar-split v0.11.2 // indirect github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74 // indirect - github.com/xanzy/go-gitlab v0.78.0 // indirect + github.com/xanzy/go-gitlab v0.81.0 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect github.com/xlab/treeprint v1.1.0 // indirect github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43 // indirect @@ -199,7 +199,7 @@ require ( go.starlark.net v0.0.0-20221028183056-acb66ad56dd2 // indirect golang.org/x/mod v0.8.0 // indirect golang.org/x/net v0.8.0 // indirect - golang.org/x/oauth2 v0.3.0 // indirect + golang.org/x/oauth2 v0.6.0 // indirect golang.org/x/sync v0.1.0 // indirect golang.org/x/sys v0.6.0 // indirect golang.org/x/text v0.8.0 // indirect @@ -207,7 +207,7 @@ require ( golang.org/x/tools v0.6.0 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/protobuf v1.28.1 // indirect + google.golang.org/protobuf v1.29.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/go.sum b/go.sum index c6f75694..4acc2861 100644 --- a/go.sum +++ b/go.sum @@ -195,8 +195,8 @@ github.com/felixge/httpsnoop v1.0.3 h1:s/nj+GCswXYzN5v2DpNMuMQYe+0DDwt5WVCU6CWBd github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0= github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= -github.com/fluxcd/go-git-providers v0.14.0 h1:F662wkiMevhGYKCwe9AJItpq42aJbd+tQq7d5Yskh/k= -github.com/fluxcd/go-git-providers v0.14.0/go.mod h1:cxVVQEBEswAIgbRVi50Cf6pEM/+RhNcNwDpsIkN6pG0= +github.com/fluxcd/go-git-providers v0.15.0 h1:WuBw+CcmXi7UhSf8mFNB6tbGelS0kVlgI9wtlWjzimk= +github.com/fluxcd/go-git-providers v0.15.0/go.mod h1:SgShGfc2rA5Gi7N65CBjMOIolarDZzZCMzEHOoY3P0I= github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 h1:Gm5sGGk+/Wq6RhX4xpCZ2IqjDp5XkjlhENaAuAlpdKc= github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4/go.mod h1:raWgfUV7lDQVXp4QXUaeNNJkRVKz97UQuF+0kdY7Vmo= github.com/fluxcd/helm-controller/api v0.31.2 h1:d/lbCPYiQP+YnPNhdIOGRzHUWDIhnxI9dUSaOCx/RK8= @@ -319,8 +319,9 @@ github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QD github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/gomodule/redigo v1.8.2 h1:H5XSIre1MB5NbPYFp+i1NBbb5qN1W8Y8YAQoAYbkm8k= github.com/gomodule/redigo v1.8.2/go.mod h1:P9dn9mFrCBvWhGE1wpxx6fgq7BAeLBk+UUUzlpkBYO0= github.com/gonvenience/bunt v1.3.4 h1:Row599Ohja2BPooaqd1tHYdTAKu6SWq7W/UeakTXddM= @@ -611,8 +612,8 @@ github.com/vbatts/tar-split v0.11.2 h1:Via6XqJr0hceW4wff3QRzD5gAk/tatMw/4ZA7cTlI github.com/vbatts/tar-split v0.11.2/go.mod h1:vV3ZuO2yWSVsz+pfFzDG/upWH1JhjOiEaWq6kXyQ3VI= github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74 h1:JwtAtbp7r/7QSyGz8mKUbYJBg2+6Cd7OjM8o/GNOcVo= github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74/go.mod h1:RmMWU37GKR2s6pgrIEB4ixgpVCt/cf7dnJv3fuH1J1c= -github.com/xanzy/go-gitlab v0.78.0 h1:8jUHfQVAprG04Av5g0PxVd3CNsZ5hCbojIax7Hba1mE= -github.com/xanzy/go-gitlab v0.78.0/go.mod h1:DlByVTSXhPsJMYL6+cm8e8fTJjeBmhrXdC/yvkKKt6M= +github.com/xanzy/go-gitlab v0.81.0 h1:ofbhZ5ZY9AjHATWQie4qd2JfncdUmvcSA/zfQB767Dk= +github.com/xanzy/go-gitlab v0.81.0/go.mod h1:VMbY3JIWdZ/ckvHbQqkyd3iYk2aViKrNIQ23IbFMQDo= github.com/xanzy/ssh-agent v0.3.0/go.mod h1:3s9xbODqPuuhK9JV1R321M/FlMZSBvE5aY6eAcqrDh0= github.com/xanzy/ssh-agent v0.3.2/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= @@ -743,8 +744,8 @@ golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.3.0 h1:6l90koy8/LaBLmLu8jpHeHexzMwEita0zFfYlggy2F8= -golang.org/x/oauth2 v0.3.0/go.mod h1:rQrIauxkUhJ6CuwEXwymO2/eh4xz2ZWF1nBkcxS+tGk= +golang.org/x/oauth2 v0.6.0 h1:Lh8GPgSKBfWSwFvtuWOfeI3aAAnbXTSutYxJiOJFgIw= +golang.org/x/oauth2 v0.6.0/go.mod h1:ycmewcwgD4Rpr3eZJLSB4Kyyljb3qDh40vJ8STE5HKw= 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= @@ -979,8 +980,8 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= -google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.29.0 h1:44S3JjaKmLEE4YIkjzexaP+NzZsudE3Zin5Njn/pYX0= +google.golang.org/protobuf v1.29.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= 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= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= From 2e1721ca854a0366baf78d29df3ef3893b1e8f5c Mon Sep 17 00:00:00 2001 From: Timo Furrer Date: Fri, 3 Mar 2023 22:30:46 +0100 Subject: [PATCH 455/818] Implement `--deploy-token-auth` in GitLab bootstrapping This change set implements support for the `--deploy-token-auth` option in the `flux bootstrap gitlab` command. That option will reconcile a GitLab Project Deploy Token to use for the authentication of the GitLab git repository. A GitLab Project Deploy Token can be used the same way as a Personal Access Token which is already supported via `--token-auth`. The difference with the GitLab Project Deploy Token is that the token is managed (created, updated, deleted) by Flux and not provided by the user. This change is transparent to the source-controller. A prerequisite for this change is the `fluxcd/go-git-providers` change here: * https://github.com/fluxcd/go-git-providers/pull/191 See related discussion here: https://github.com/fluxcd/flux2/discussions/3595 GitLab Issue here: https://gitlab.com/gitlab-org/gitlab/-/issues/392605 Signed-off-by: Timo Furrer --- cmd/flux/bootstrap_gitlab.go | 40 ++++++++++++----- pkg/bootstrap/bootstrap_provider.go | 69 +++++++++++++++++++++++++++++ 2 files changed, 97 insertions(+), 12 deletions(-) diff --git a/cmd/flux/bootstrap_gitlab.go b/cmd/flux/bootstrap_gitlab.go index e5d27229..34d877a0 100644 --- a/cmd/flux/bootstrap_gitlab.go +++ b/cmd/flux/bootstrap_gitlab.go @@ -65,7 +65,11 @@ the bootstrap command will perform an upgrade if needed.`, flux bootstrap gitlab --owner= --repository= --hostname= --token-auth # Run bootstrap for a an existing repository with a branch named main - flux bootstrap gitlab --owner= --repository= --branch=main --token-auth`, + flux bootstrap gitlab --owner= --repository= --branch=main --token-auth + + # Run bootstrap for a private repository using Deploy Token authentication + flux bootstrap gitlab --owner= --repository= --deploy-token-auth + `, RunE: bootstrapGitLabCmdRun, } @@ -77,16 +81,17 @@ const ( ) type gitlabFlags struct { - owner string - repository string - interval time.Duration - personal bool - private bool - hostname string - path flags.SafeRelativePath - teams []string - readWriteKey bool - reconcile bool + owner string + repository string + interval time.Duration + personal bool + private bool + hostname string + path flags.SafeRelativePath + teams []string + readWriteKey bool + reconcile bool + deployTokenAuth bool } var gitlabArgs gitlabFlags @@ -102,6 +107,7 @@ func init() { bootstrapGitLabCmd.Flags().Var(&gitlabArgs.path, "path", "path relative to the repository root, when specified the cluster sync will be scoped to this path") bootstrapGitLabCmd.Flags().BoolVar(&gitlabArgs.readWriteKey, "read-write-key", false, "if true, the deploy key is configured with read/write permissions") bootstrapGitLabCmd.Flags().BoolVar(&gitlabArgs.reconcile, "reconcile", false, "if true, the configured options are also reconciled if the repository already exists") + bootstrapGitLabCmd.Flags().BoolVar(&gitlabArgs.deployTokenAuth, "deploy-token-auth", false, "when enabled, a Project Deploy Token is generated and will be used instead of the SSH deploy token") bootstrapCmd.AddCommand(bootstrapGitLabCmd) } @@ -123,6 +129,10 @@ func bootstrapGitLabCmdRun(cmd *cobra.Command, args []string) error { return err } + if bootstrapArgs.tokenAuth && gitlabArgs.deployTokenAuth { + return fmt.Errorf("--token-auth and --deploy-token-auth cannot be set both.") + } + if err := bootstrapValidate(); err != nil { return err } @@ -225,6 +235,9 @@ func bootstrapGitLabCmdRun(cmd *cobra.Command, args []string) error { secretOpts.Username = "git" secretOpts.Password = glToken secretOpts.CAFile = caBundle + } else if gitlabArgs.deployTokenAuth { + // the actual deploy token will be reconciled later + secretOpts.CAFile = caBundle } else { keypair, err := sourcesecret.LoadKeyPairFromPath(bootstrapArgs.privateKeyFile, gitArgs.password) if err != nil { @@ -274,9 +287,12 @@ func bootstrapGitLabCmdRun(cmd *cobra.Command, args []string) error { if bootstrapArgs.sshHostname != "" { bootstrapOpts = append(bootstrapOpts, bootstrap.WithSSHHostname(bootstrapArgs.sshHostname)) } - if bootstrapArgs.tokenAuth { + if bootstrapArgs.tokenAuth || gitlabArgs.deployTokenAuth { bootstrapOpts = append(bootstrapOpts, bootstrap.WithSyncTransportType("https")) } + if gitlabArgs.deployTokenAuth { + bootstrapOpts = append(bootstrapOpts, bootstrap.WithDeployTokenAuth()) + } if !gitlabArgs.private { bootstrapOpts = append(bootstrapOpts, bootstrap.WithProviderRepositoryConfig("", "", "public")) } diff --git a/pkg/bootstrap/bootstrap_provider.go b/pkg/bootstrap/bootstrap_provider.go index 63600926..74aa48ef 100644 --- a/pkg/bootstrap/bootstrap_provider.go +++ b/pkg/bootstrap/bootstrap_provider.go @@ -59,6 +59,8 @@ type GitProviderBootstrapper struct { sshHostname string + useDeployTokenAuth bool + provider gitprovider.Client } @@ -184,6 +186,16 @@ func (o reconcileOption) applyGitProvider(b *GitProviderBootstrapper) { b.reconcile = true } +func WithDeployTokenAuth() GitProviderOption { + return deployTokenAuthOption(true) +} + +type deployTokenAuthOption bool + +func (o deployTokenAuthOption) applyGitProvider(b *GitProviderBootstrapper) { + b.useDeployTokenAuth = true +} + func (b *GitProviderBootstrapper) ReconcileSyncConfig(ctx context.Context, options sync.Options) error { if b.repository == nil { return errors.New("repository is required") @@ -208,6 +220,26 @@ func (b *GitProviderBootstrapper) ReconcileSyncConfig(ctx context.Context, optio return b.PlainGitBootstrapper.ReconcileSyncConfig(ctx, options) } +func (b *GitProviderBootstrapper) ReconcileSourceSecret(ctx context.Context, options sourcesecret.Options) error { + if b.repository == nil { + return errors.New("repository is required") + } + + if b.useDeployTokenAuth { + deployTokenInfo, err := b.reconcileDeployToken(ctx, options) + if err != nil { + return err + } + + if deployTokenInfo != nil { + options.Username = deployTokenInfo.Username + options.Password = deployTokenInfo.Token + } + } + + return b.PlainGitBootstrapper.ReconcileSourceSecret(ctx, options) +} + // ReconcileRepository reconciles an organization or user repository with the // GitProviderBootstrapper configuration. On success, the URL in the embedded // PlainGitBootstrapper is set to clone URL for the configured protocol. @@ -261,6 +293,32 @@ func (b *GitProviderBootstrapper) reconcileDeployKey(ctx context.Context, secret return nil } +func (b *GitProviderBootstrapper) reconcileDeployToken(ctx context.Context, options sourcesecret.Options) (*gitprovider.DeployTokenInfo, error) { + dts, err := b.repository.DeployTokens() + if err != nil { + return nil, err + } + + b.logger.Actionf("checking to reconcile deploy token for source secret") + name := deployTokenName(options.Namespace, b.branch, options.Name, options.TargetPath) + deployTokenInfo := gitprovider.DeployTokenInfo{Name: name} + + deployToken, changed, err := dts.Reconcile(ctx, deployTokenInfo) + if err != nil { + return nil, err + } + + if changed { + b.logger.Successf("configured deploy token %q for %q", deployTokenInfo.Name, b.repository.Repository().String()) + deployTokenInfo := deployToken.Get() + return &deployTokenInfo, nil + } + + b.logger.Successf("reconciled deploy token for source secret") + + return nil, nil +} + // reconcileOrgRepository reconciles a gitprovider.OrgRepository // with the GitProviderBootstrapper values, including any // gitprovider.TeamAccessInfo configurations. @@ -554,6 +612,17 @@ func deployKeyName(namespace, secretName, branch, path string) string { return name } +func deployTokenName(namespace, secretName, branch, path string) string { + var elems []string + for _, v := range []string{namespace, secretName, branch, path} { + if v == "" { + continue + } + elems = append(elems, v) + } + return strings.Join(elems, "-") +} + // setHostname is a helper to replace the hostname of the given URL. // TODO(hidde): support for this should be added in go-git-providers. func setHostname(URL, hostname string) (string, error) { From c9e73edd86ecf5649c28d2554d722724f09e6814 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 23 Mar 2023 10:35:38 +0000 Subject: [PATCH 456/818] build(deps): bump google.golang.org/protobuf from 1.29.0 to 1.29.1 Bumps [google.golang.org/protobuf](https://github.com/protocolbuffers/protobuf-go) from 1.29.0 to 1.29.1. - [Release notes](https://github.com/protocolbuffers/protobuf-go/releases) - [Changelog](https://github.com/protocolbuffers/protobuf-go/blob/master/release.bash) - [Commits](https://github.com/protocolbuffers/protobuf-go/compare/v1.29.0...v1.29.1) --- updated-dependencies: - dependency-name: google.golang.org/protobuf dependency-type: indirect ... Signed-off-by: dependabot[bot] --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 5df8c924..7cab47a1 100644 --- a/go.mod +++ b/go.mod @@ -207,7 +207,7 @@ require ( golang.org/x/tools v0.6.0 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/protobuf v1.29.0 // indirect + google.golang.org/protobuf v1.29.1 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/go.sum b/go.sum index 4acc2861..0fcc75b3 100644 --- a/go.sum +++ b/go.sum @@ -980,8 +980,8 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.29.0 h1:44S3JjaKmLEE4YIkjzexaP+NzZsudE3Zin5Njn/pYX0= -google.golang.org/protobuf v1.29.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.29.1 h1:7QBf+IK2gx70Ap/hDsOmam3GE0v9HicjfEdAxE62UoM= +google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= 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= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= From b55f49b4fe39c841060ca2a8a0b14680f40431be Mon Sep 17 00:00:00 2001 From: Yiannis Date: Thu, 23 Mar 2023 19:44:01 +0000 Subject: [PATCH 457/818] fix: Remove any leading and trailing whitespace from resource before exporting Signed-off-by: Yiannis --- cmd/flux/export.go | 1 + cmd/flux/testdata/create_source_git/export.golden | 1 - cmd/flux/testdata/create_source_helm/https.golden | 1 - cmd/flux/testdata/create_source_helm/oci-with-secret.golden | 1 - cmd/flux/testdata/create_source_helm/oci.golden | 1 - cmd/flux/testdata/export/alert.yaml | 1 - cmd/flux/testdata/export/bucket.yaml | 1 - cmd/flux/testdata/export/git-repo.yaml | 1 - cmd/flux/testdata/export/helm-release.yaml | 1 - cmd/flux/testdata/export/helm-repo.yaml | 1 - cmd/flux/testdata/export/image-policy.yaml | 1 - cmd/flux/testdata/export/image-repo.yaml | 1 - cmd/flux/testdata/export/image-update.yaml | 1 - cmd/flux/testdata/export/ks.yaml | 1 - cmd/flux/testdata/export/provider.yaml | 1 - cmd/flux/testdata/export/receiver.yaml | 1 - cmd/flux/testdata/oci/export.golden | 1 - cmd/flux/testdata/oci/export_with_secret.golden | 1 - 18 files changed, 1 insertion(+), 17 deletions(-) diff --git a/cmd/flux/export.go b/cmd/flux/export.go index 4291ee5f..bfb2b60b 100644 --- a/cmd/flux/export.go +++ b/cmd/flux/export.go @@ -122,5 +122,6 @@ func printExport(export interface{}) error { func resourceToString(data []byte) string { data = bytes.Replace(data, []byte(" creationTimestamp: null\n"), []byte(""), 1) data = bytes.Replace(data, []byte("status: {}\n"), []byte(""), 1) + data = bytes.TrimSpace(data) return string(data) } diff --git a/cmd/flux/testdata/create_source_git/export.golden b/cmd/flux/testdata/create_source_git/export.golden index 2b0193df..c909bd25 100644 --- a/cmd/flux/testdata/create_source_git/export.golden +++ b/cmd/flux/testdata/create_source_git/export.golden @@ -12,4 +12,3 @@ spec: ref: branch: master url: https://github.com/stefanprodan/podinfo - diff --git a/cmd/flux/testdata/create_source_helm/https.golden b/cmd/flux/testdata/create_source_helm/https.golden index a0aad146..87235245 100644 --- a/cmd/flux/testdata/create_source_helm/https.golden +++ b/cmd/flux/testdata/create_source_helm/https.golden @@ -7,4 +7,3 @@ metadata: spec: interval: 5m0s url: https://stefanprodan.github.io/charts/podinfo - diff --git a/cmd/flux/testdata/create_source_helm/oci-with-secret.golden b/cmd/flux/testdata/create_source_helm/oci-with-secret.golden index 0c182048..760a265c 100644 --- a/cmd/flux/testdata/create_source_helm/oci-with-secret.golden +++ b/cmd/flux/testdata/create_source_helm/oci-with-secret.golden @@ -10,4 +10,3 @@ spec: name: creds type: oci url: oci://ghcr.io/stefanprodan/charts/podinfo - diff --git a/cmd/flux/testdata/create_source_helm/oci.golden b/cmd/flux/testdata/create_source_helm/oci.golden index af361810..f6049e99 100644 --- a/cmd/flux/testdata/create_source_helm/oci.golden +++ b/cmd/flux/testdata/create_source_helm/oci.golden @@ -8,4 +8,3 @@ spec: interval: 5m0s type: oci url: oci://ghcr.io/stefanprodan/charts/podinfo - diff --git a/cmd/flux/testdata/export/alert.yaml b/cmd/flux/testdata/export/alert.yaml index 930a2853..4619affb 100644 --- a/cmd/flux/testdata/export/alert.yaml +++ b/cmd/flux/testdata/export/alert.yaml @@ -14,4 +14,3 @@ spec: providerRef: name: slack summary: Slacktest Notification - diff --git a/cmd/flux/testdata/export/bucket.yaml b/cmd/flux/testdata/export/bucket.yaml index 2e94a38e..5547ee94 100644 --- a/cmd/flux/testdata/export/bucket.yaml +++ b/cmd/flux/testdata/export/bucket.yaml @@ -11,4 +11,3 @@ spec: provider: aws region: us-east-1 timeout: 30s - diff --git a/cmd/flux/testdata/export/git-repo.yaml b/cmd/flux/testdata/export/git-repo.yaml index ee74c4b0..e3a12bcd 100644 --- a/cmd/flux/testdata/export/git-repo.yaml +++ b/cmd/flux/testdata/export/git-repo.yaml @@ -13,4 +13,3 @@ spec: name: flux-system timeout: 1m0s url: ssh://git@github.com/example/repo - diff --git a/cmd/flux/testdata/export/helm-release.yaml b/cmd/flux/testdata/export/helm-release.yaml index 8f861110..b6c3b126 100644 --- a/cmd/flux/testdata/export/helm-release.yaml +++ b/cmd/flux/testdata/export/helm-release.yaml @@ -15,4 +15,3 @@ spec: namespace: {{ .fluxns }} version: '*' interval: 5m0s - diff --git a/cmd/flux/testdata/export/helm-repo.yaml b/cmd/flux/testdata/export/helm-repo.yaml index eb3d5634..c5366e0b 100644 --- a/cmd/flux/testdata/export/helm-repo.yaml +++ b/cmd/flux/testdata/export/helm-repo.yaml @@ -9,4 +9,3 @@ spec: provider: generic timeout: 1m0s url: https://stefanprodan.github.io/podinfo - diff --git a/cmd/flux/testdata/export/image-policy.yaml b/cmd/flux/testdata/export/image-policy.yaml index d61b535e..8feff350 100644 --- a/cmd/flux/testdata/export/image-policy.yaml +++ b/cmd/flux/testdata/export/image-policy.yaml @@ -10,4 +10,3 @@ spec: policy: semver: range: 5.0.x - diff --git a/cmd/flux/testdata/export/image-repo.yaml b/cmd/flux/testdata/export/image-repo.yaml index ca472928..5263245c 100644 --- a/cmd/flux/testdata/export/image-repo.yaml +++ b/cmd/flux/testdata/export/image-repo.yaml @@ -10,4 +10,3 @@ spec: image: ghcr.io/test/podinfo interval: 1m0s provider: generic - diff --git a/cmd/flux/testdata/export/image-update.yaml b/cmd/flux/testdata/export/image-update.yaml index 35566278..e2fcb3c1 100644 --- a/cmd/flux/testdata/export/image-update.yaml +++ b/cmd/flux/testdata/export/image-update.yaml @@ -17,4 +17,3 @@ spec: update: path: ./clusters/my-cluster strategy: Setters - diff --git a/cmd/flux/testdata/export/ks.yaml b/cmd/flux/testdata/export/ks.yaml index cd6085d2..891f76b5 100644 --- a/cmd/flux/testdata/export/ks.yaml +++ b/cmd/flux/testdata/export/ks.yaml @@ -11,4 +11,3 @@ spec: sourceRef: kind: GitRepository name: flux-system - diff --git a/cmd/flux/testdata/export/provider.yaml b/cmd/flux/testdata/export/provider.yaml index 5656415c..67104453 100644 --- a/cmd/flux/testdata/export/provider.yaml +++ b/cmd/flux/testdata/export/provider.yaml @@ -8,4 +8,3 @@ spec: address: https://hooks.slack.com/services/mock channel: A channel with spacess type: slack - diff --git a/cmd/flux/testdata/export/receiver.yaml b/cmd/flux/testdata/export/receiver.yaml index 0561d3db..e47add3d 100644 --- a/cmd/flux/testdata/export/receiver.yaml +++ b/cmd/flux/testdata/export/receiver.yaml @@ -15,4 +15,3 @@ spec: secretRef: name: webhook-token type: github - diff --git a/cmd/flux/testdata/oci/export.golden b/cmd/flux/testdata/oci/export.golden index 0f898188..7a043b64 100644 --- a/cmd/flux/testdata/oci/export.golden +++ b/cmd/flux/testdata/oci/export.golden @@ -9,4 +9,3 @@ spec: ref: tag: 6.3.5 url: oci://ghcr.io/stefanprodan/manifests/podinfo - diff --git a/cmd/flux/testdata/oci/export_with_secret.golden b/cmd/flux/testdata/oci/export_with_secret.golden index 436d6310..0b41116f 100644 --- a/cmd/flux/testdata/oci/export_with_secret.golden +++ b/cmd/flux/testdata/oci/export_with_secret.golden @@ -11,4 +11,3 @@ spec: secretRef: name: creds url: oci://ghcr.io/stefanprodan/manifests/podinfo - From 6afef04a8826b37358e16fb8120fdbe3ca69e86c Mon Sep 17 00:00:00 2001 From: Santosh Kaluskar Date: Tue, 28 Feb 2023 16:08:02 +0530 Subject: [PATCH 458/818] Add support for create source git with --commit and --ref-name flags Signed-off-by: Santosh Kaluskar --- cmd/flux/create_source_git.go | 15 ++++++-- cmd/flux/create_source_git_test.go | 35 +++++++++++++++++++ .../source-git-branch-commit.yaml | 12 +++++++ .../create_source_git/source-git-branch.yaml | 11 ++++++ .../create_source_git/source-git-commit.yaml | 11 ++++++ .../create_source_git/source-git-refname.yaml | 11 ++++++ .../create_source_git/source-git-semver.yaml | 11 ++++++ .../create_source_git/source-git-tag.yaml | 11 ++++++ 8 files changed, 114 insertions(+), 3 deletions(-) create mode 100644 cmd/flux/testdata/create_source_git/source-git-branch-commit.yaml create mode 100644 cmd/flux/testdata/create_source_git/source-git-branch.yaml create mode 100644 cmd/flux/testdata/create_source_git/source-git-commit.yaml create mode 100644 cmd/flux/testdata/create_source_git/source-git-refname.yaml create mode 100644 cmd/flux/testdata/create_source_git/source-git-semver.yaml create mode 100644 cmd/flux/testdata/create_source_git/source-git-tag.yaml diff --git a/cmd/flux/create_source_git.go b/cmd/flux/create_source_git.go index 5a321c08..e915268b 100644 --- a/cmd/flux/create_source_git.go +++ b/cmd/flux/create_source_git.go @@ -49,6 +49,8 @@ type sourceGitFlags struct { branch string tag string semver string + refName string + commit string username string password string keyAlgorithm flags.PublicKeyAlgorithm @@ -129,6 +131,8 @@ func init() { createSourceGitCmd.Flags().StringVar(&sourceGitArgs.branch, "branch", "", "git branch") createSourceGitCmd.Flags().StringVar(&sourceGitArgs.tag, "tag", "", "git tag") createSourceGitCmd.Flags().StringVar(&sourceGitArgs.semver, "tag-semver", "", "git tag semver range") + createSourceGitCmd.Flags().StringVar(&sourceGitArgs.refName, "ref-name", "", " git reference name") + createSourceGitCmd.Flags().StringVar(&sourceGitArgs.commit, "commit", "", "git commit") createSourceGitCmd.Flags().StringVarP(&sourceGitArgs.username, "username", "u", "", "basic authentication username") createSourceGitCmd.Flags().StringVarP(&sourceGitArgs.password, "password", "p", "", "basic authentication password") createSourceGitCmd.Flags().Var(&sourceGitArgs.keyAlgorithm, "ssh-key-algorithm", sourceGitArgs.keyAlgorithm.Description()) @@ -168,8 +172,8 @@ func createSourceGitCmdRun(cmd *cobra.Command, args []string) error { return fmt.Errorf("git URL scheme '%s' not supported, can be: ssh, http and https", u.Scheme) } - if sourceGitArgs.branch == "" && sourceGitArgs.tag == "" && sourceGitArgs.semver == "" { - return fmt.Errorf("a Git ref is required, use one of the following: --branch, --tag or --tag-semver") + if sourceGitArgs.branch == "" && sourceGitArgs.tag == "" && sourceGitArgs.semver == "" && sourceGitArgs.commit == "" && sourceGitArgs.refName == "" { + return fmt.Errorf("a Git ref is required, use one of the following: --branch, --tag, --commit, --ref-name or --tag-semver") } if sourceGitArgs.caFile != "" && u.Scheme == "ssh" { @@ -214,7 +218,12 @@ func createSourceGitCmdRun(cmd *cobra.Command, args []string) error { gitRepository.Spec.Timeout = &metav1.Duration{Duration: createSourceArgs.fetchTimeout} } - if sourceGitArgs.semver != "" { + if sourceGitArgs.commit != "" { + gitRepository.Spec.Reference.Commit = sourceGitArgs.commit + gitRepository.Spec.Reference.Branch = sourceGitArgs.branch + } else if sourceGitArgs.refName != "" { + gitRepository.Spec.Reference.Name = sourceGitArgs.refName + } else if sourceGitArgs.semver != "" { gitRepository.Spec.Reference.SemVer = sourceGitArgs.semver } else if sourceGitArgs.tag != "" { gitRepository.Spec.Reference.Tag = sourceGitArgs.tag diff --git a/cmd/flux/create_source_git_test.go b/cmd/flux/create_source_git_test.go index 227567b2..5517c811 100644 --- a/cmd/flux/create_source_git_test.go +++ b/cmd/flux/create_source_git_test.go @@ -98,6 +98,41 @@ func TestCreateSourceGitExport(t *testing.T) { command, assertGoldenFile("testdata/create_source_git/export.golden"), }, + { + name: "no args", + args: "create secret git", + assert: assertError("name is required"), + }, + { + name: "source with commit", + args: "create source git podinfo --namespace=flux-system --url=https://github.com/stefanprodan/podinfo --commit=c88a2f41 --interval=1m0s --export", + assert: assertGoldenFile("./testdata/create_source_git/source-git-commit.yaml"), + }, + { + name: "source with ref name", + args: "create source git podinfo --namespace=flux-system --url=https://github.com/stefanprodan/podinfo --ref-name=refs/heads/main --interval=1m0s --export", + assert: assertGoldenFile("testdata/create_source_git/source-git-refname.yaml"), + }, + { + name: "source with branch name and commit", + args: "create source git podinfo --namespace=flux-system --url=https://github.com/stefanprodan/podinfo --branch=main --commit=c88a2f41 --interval=1m0s --export", + assert: assertGoldenFile("testdata/create_source_git/source-git-branch-commit.yaml"), + }, + { + name: "source with semver", + args: "create source git podinfo --namespace=flux-system --url=https://github.com/stefanprodan/podinfo --tag-semver=v1.01 --interval=1m0s --export", + assert: assertGoldenFile("testdata/create_source_git/source-git-semver.yaml"), + }, + { + name: "source with git tag", + args: "create source git podinfo --namespace=flux-system --url=https://github.com/stefanprodan/podinfo --tag=test --interval=1m0s --export", + assert: assertGoldenFile("testdata/create_source_git/source-git-tag.yaml"), + }, + { + name: "source with git branch", + args: "create source git podinfo --namespace=flux-system --url=https://github.com/stefanprodan/podinfo --branch=test --interval=1m0s --export", + assert: assertGoldenFile("testdata/create_source_git/source-git-branch.yaml"), + }, } for _, tc := range cases { t.Run(tc.name, func(t *testing.T) { diff --git a/cmd/flux/testdata/create_source_git/source-git-branch-commit.yaml b/cmd/flux/testdata/create_source_git/source-git-branch-commit.yaml new file mode 100644 index 00000000..e767a58d --- /dev/null +++ b/cmd/flux/testdata/create_source_git/source-git-branch-commit.yaml @@ -0,0 +1,12 @@ +--- +apiVersion: source.toolkit.fluxcd.io/v1beta2 +kind: GitRepository +metadata: + name: podinfo + namespace: flux-system +spec: + interval: 1m0s + ref: + branch: main + commit: c88a2f41 + url: https://github.com/stefanprodan/podinfo diff --git a/cmd/flux/testdata/create_source_git/source-git-branch.yaml b/cmd/flux/testdata/create_source_git/source-git-branch.yaml new file mode 100644 index 00000000..8d4ea097 --- /dev/null +++ b/cmd/flux/testdata/create_source_git/source-git-branch.yaml @@ -0,0 +1,11 @@ +--- +apiVersion: source.toolkit.fluxcd.io/v1beta2 +kind: GitRepository +metadata: + name: podinfo + namespace: flux-system +spec: + interval: 1m0s + ref: + branch: test + url: https://github.com/stefanprodan/podinfo diff --git a/cmd/flux/testdata/create_source_git/source-git-commit.yaml b/cmd/flux/testdata/create_source_git/source-git-commit.yaml new file mode 100644 index 00000000..4600b3cd --- /dev/null +++ b/cmd/flux/testdata/create_source_git/source-git-commit.yaml @@ -0,0 +1,11 @@ +--- +apiVersion: source.toolkit.fluxcd.io/v1beta2 +kind: GitRepository +metadata: + name: podinfo + namespace: flux-system +spec: + interval: 1m0s + ref: + commit: c88a2f41 + url: https://github.com/stefanprodan/podinfo diff --git a/cmd/flux/testdata/create_source_git/source-git-refname.yaml b/cmd/flux/testdata/create_source_git/source-git-refname.yaml new file mode 100644 index 00000000..ce45f216 --- /dev/null +++ b/cmd/flux/testdata/create_source_git/source-git-refname.yaml @@ -0,0 +1,11 @@ +--- +apiVersion: source.toolkit.fluxcd.io/v1beta2 +kind: GitRepository +metadata: + name: podinfo + namespace: flux-system +spec: + interval: 1m0s + ref: + name: refs/heads/main + url: https://github.com/stefanprodan/podinfo diff --git a/cmd/flux/testdata/create_source_git/source-git-semver.yaml b/cmd/flux/testdata/create_source_git/source-git-semver.yaml new file mode 100644 index 00000000..f5162811 --- /dev/null +++ b/cmd/flux/testdata/create_source_git/source-git-semver.yaml @@ -0,0 +1,11 @@ +--- +apiVersion: source.toolkit.fluxcd.io/v1beta2 +kind: GitRepository +metadata: + name: podinfo + namespace: flux-system +spec: + interval: 1m0s + ref: + semver: v1.01 + url: https://github.com/stefanprodan/podinfo diff --git a/cmd/flux/testdata/create_source_git/source-git-tag.yaml b/cmd/flux/testdata/create_source_git/source-git-tag.yaml new file mode 100644 index 00000000..b550fd84 --- /dev/null +++ b/cmd/flux/testdata/create_source_git/source-git-tag.yaml @@ -0,0 +1,11 @@ +--- +apiVersion: source.toolkit.fluxcd.io/v1beta2 +kind: GitRepository +metadata: + name: podinfo + namespace: flux-system +spec: + interval: 1m0s + ref: + tag: test + url: https://github.com/stefanprodan/podinfo From dbfb4269cbed9a569b6edcad34097a86207d3cb8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 27 Mar 2023 01:27:08 +0000 Subject: [PATCH 459/818] build(deps): bump github/codeql-action from 2.2.7 to 2.2.8 Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2.2.7 to 2.2.8. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/168b99b3c22180941ae7dbdd5f5c9678ede476ba...67a35a08586135a9573f4327e904ecbf517a882d) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/scan.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index e0af3cf1..cac2c29d 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -53,7 +53,7 @@ jobs: env: SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }} - name: Upload result to GitHub Code Scanning - uses: github/codeql-action/upload-sarif@168b99b3c22180941ae7dbdd5f5c9678ede476ba # v2.2.7 + uses: github/codeql-action/upload-sarif@67a35a08586135a9573f4327e904ecbf517a882d # v2.2.8 with: sarif_file: snyk.sarif @@ -73,10 +73,10 @@ jobs: **/go.sum **/go.mod - name: Initialize CodeQL - uses: github/codeql-action/init@168b99b3c22180941ae7dbdd5f5c9678ede476ba # v2.2.7 + uses: github/codeql-action/init@67a35a08586135a9573f4327e904ecbf517a882d # v2.2.8 with: languages: go - name: Autobuild - uses: github/codeql-action/autobuild@168b99b3c22180941ae7dbdd5f5c9678ede476ba # v2.2.7 + uses: github/codeql-action/autobuild@67a35a08586135a9573f4327e904ecbf517a882d # v2.2.8 - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@168b99b3c22180941ae7dbdd5f5c9678ede476ba # v2.2.7 + uses: github/codeql-action/analyze@67a35a08586135a9573f4327e904ecbf517a882d # v2.2.8 From a30f77f8a4d07f80914a8082c40102cfd8db8cd9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 27 Mar 2023 06:12:24 +0000 Subject: [PATCH 460/818] build(deps): bump actions/checkout from 3.4.0 to 3.5.0 Bumps [actions/checkout](https://github.com/actions/checkout) from 3.4.0 to 3.5.0. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/24cb9080177205b6e8c946b17badbe402adc938f...8f4b7f84864484a7bf31766abe9204da3cbe65b3) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/e2e-arm64.yaml | 2 +- .github/workflows/e2e-azure.yaml | 2 +- .github/workflows/e2e-bootstrap.yaml | 2 +- .github/workflows/e2e.yaml | 2 +- .github/workflows/release.yaml | 4 ++-- .github/workflows/scan.yaml | 6 +++--- .github/workflows/update.yaml | 2 +- 7 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/e2e-arm64.yaml b/.github/workflows/e2e-arm64.yaml index edbd0dd4..41db8995 100644 --- a/.github/workflows/e2e-arm64.yaml +++ b/.github/workflows/e2e-arm64.yaml @@ -20,7 +20,7 @@ jobs: KUBERNETES_VERSION: [ 1.24.7, 1.25.3, 1.26.0 ] steps: - name: Checkout - uses: actions/checkout@24cb9080177205b6e8c946b17badbe402adc938f # v3.4.0 + uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3.5.0 - name: Setup Go uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9 # v4.0.0 with: diff --git a/.github/workflows/e2e-azure.yaml b/.github/workflows/e2e-azure.yaml index 5ee94abb..f60ce309 100644 --- a/.github/workflows/e2e-azure.yaml +++ b/.github/workflows/e2e-azure.yaml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-22.04 steps: - name: Checkout - uses: actions/checkout@24cb9080177205b6e8c946b17badbe402adc938f # v3.4.0 + uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3.5.0 - name: Setup Go uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9 # v4.0.0 with: diff --git a/.github/workflows/e2e-bootstrap.yaml b/.github/workflows/e2e-bootstrap.yaml index 6740080c..7dfefc91 100644 --- a/.github/workflows/e2e-bootstrap.yaml +++ b/.github/workflows/e2e-bootstrap.yaml @@ -16,7 +16,7 @@ jobs: if: (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) && github.actor != 'dependabot[bot]' steps: - name: Checkout - uses: actions/checkout@24cb9080177205b6e8c946b17badbe402adc938f # v3.4.0 + uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3.5.0 - name: Setup Go uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9 # v4.0.0 with: diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index 920fdd58..e9d389a1 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -20,7 +20,7 @@ jobs: - 5000:5000 steps: - name: Checkout - uses: actions/checkout@24cb9080177205b6e8c946b17badbe402adc938f # v3.4.0 + uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3.5.0 - name: Setup Go uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9 # v4.0.0 with: diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index ce83e966..c4d5f9f5 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -16,7 +16,7 @@ jobs: packages: write # needed for ghcr access steps: - name: Checkout - uses: actions/checkout@24cb9080177205b6e8c946b17badbe402adc938f # v3.4.0 + uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3.5.0 - name: Unshallow run: git fetch --prune --unshallow - name: Setup Go @@ -89,7 +89,7 @@ jobs: id-token: write packages: write steps: - - uses: actions/checkout@24cb9080177205b6e8c946b17badbe402adc938f # v3.4.0 + - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3.5.0 - name: Setup Kustomize uses: fluxcd/pkg/actions/kustomize@main - name: Setup Flux CLI diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index cac2c29d..8aaa98a0 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -17,7 +17,7 @@ jobs: runs-on: ubuntu-latest if: github.actor != 'dependabot[bot]' steps: - - uses: actions/checkout@24cb9080177205b6e8c946b17badbe402adc938f # v3.4.0 + - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3.5.0 - name: Run FOSSA scan and upload build data uses: fossa-contrib/fossa-action@6728dc6fe9a068c648d080c33829ffbe56565023 # v2.0.0 with: @@ -31,7 +31,7 @@ jobs: security-events: write if: (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) && github.actor != 'dependabot[bot]' steps: - - uses: actions/checkout@24cb9080177205b6e8c946b17badbe402adc938f # v3.4.0 + - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3.5.0 - name: Setup Kustomize uses: fluxcd/pkg/actions/kustomize@main - name: Setup Go @@ -64,7 +64,7 @@ jobs: if: github.actor != 'dependabot[bot]' steps: - name: Checkout repository - uses: actions/checkout@24cb9080177205b6e8c946b17badbe402adc938f # v3.4.0 + uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3.5.0 - name: Setup Go uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9 # v4.0.0 with: diff --git a/.github/workflows/update.yaml b/.github/workflows/update.yaml index 45d88e02..c17c55fd 100644 --- a/.github/workflows/update.yaml +++ b/.github/workflows/update.yaml @@ -18,7 +18,7 @@ jobs: pull-requests: write steps: - name: Check out code - uses: actions/checkout@24cb9080177205b6e8c946b17badbe402adc938f # v3.4.0 + uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3.5.0 - name: Setup Go uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9 # v4.0.0 with: From 8240d19fbdccf457c053d9cb451939e441e08b7a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 27 Mar 2023 06:37:54 +0000 Subject: [PATCH 461/818] build(deps): bump anchore/sbom-action from 0.13.3 to 0.13.4 Bumps [anchore/sbom-action](https://github.com/anchore/sbom-action) from 0.13.3 to 0.13.4. - [Release notes](https://github.com/anchore/sbom-action/releases) - [Commits](https://github.com/anchore/sbom-action/compare/07978da4bdb4faa726e52dfc6b1bed63d4b56479...448520c4f19577ffce70a8317e619089054687e3) --- updated-dependencies: - dependency-name: anchore/sbom-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/release.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index c4d5f9f5..3342d962 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -30,7 +30,7 @@ jobs: id: buildx uses: docker/setup-buildx-action@4b4e9c3e2d4531116a6f8ba8e71fc6e2cb6e6c8c # v2.5.0 - name: Setup Syft - uses: anchore/sbom-action/download-syft@07978da4bdb4faa726e52dfc6b1bed63d4b56479 # v0.13.3 + uses: anchore/sbom-action/download-syft@448520c4f19577ffce70a8317e619089054687e3 # v0.13.4 - name: Setup Cosign uses: sigstore/cosign-installer@c3667d99424e7e6047999fb6246c0da843953c65 # v3.0.1 - name: Setup Kustomize From 7ee92db427a070a007daa4ff1d28e68f19e15f16 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Apr 2023 01:35:22 +0000 Subject: [PATCH 462/818] build(deps): bump github/codeql-action from 2.2.8 to 2.2.9 Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2.2.8 to 2.2.9. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/67a35a08586135a9573f4327e904ecbf517a882d...04df1262e6247151b5ac09cd2c303ac36ad3f62b) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/scan.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index 8aaa98a0..71a50fdd 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -53,7 +53,7 @@ jobs: env: SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }} - name: Upload result to GitHub Code Scanning - uses: github/codeql-action/upload-sarif@67a35a08586135a9573f4327e904ecbf517a882d # v2.2.8 + uses: github/codeql-action/upload-sarif@04df1262e6247151b5ac09cd2c303ac36ad3f62b # v2.2.9 with: sarif_file: snyk.sarif @@ -73,10 +73,10 @@ jobs: **/go.sum **/go.mod - name: Initialize CodeQL - uses: github/codeql-action/init@67a35a08586135a9573f4327e904ecbf517a882d # v2.2.8 + uses: github/codeql-action/init@04df1262e6247151b5ac09cd2c303ac36ad3f62b # v2.2.9 with: languages: go - name: Autobuild - uses: github/codeql-action/autobuild@67a35a08586135a9573f4327e904ecbf517a882d # v2.2.8 + uses: github/codeql-action/autobuild@04df1262e6247151b5ac09cd2c303ac36ad3f62b # v2.2.9 - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@67a35a08586135a9573f4327e904ecbf517a882d # v2.2.8 + uses: github/codeql-action/analyze@04df1262e6247151b5ac09cd2c303ac36ad3f62b # v2.2.9 From 403ea39825ef78aa32541626f49a05d94e2cb0de Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Apr 2023 07:09:38 +0000 Subject: [PATCH 463/818] build(deps): bump anchore/sbom-action from 0.13.4 to 0.14.1 Bumps [anchore/sbom-action](https://github.com/anchore/sbom-action) from 0.13.4 to 0.14.1. - [Release notes](https://github.com/anchore/sbom-action/releases) - [Commits](https://github.com/anchore/sbom-action/compare/448520c4f19577ffce70a8317e619089054687e3...422cb34a0f8b599678c41b21163ea6088edb2624) --- updated-dependencies: - dependency-name: anchore/sbom-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/release.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 3342d962..1ed1a842 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -30,7 +30,7 @@ jobs: id: buildx uses: docker/setup-buildx-action@4b4e9c3e2d4531116a6f8ba8e71fc6e2cb6e6c8c # v2.5.0 - name: Setup Syft - uses: anchore/sbom-action/download-syft@448520c4f19577ffce70a8317e619089054687e3 # v0.13.4 + uses: anchore/sbom-action/download-syft@422cb34a0f8b599678c41b21163ea6088edb2624 # v0.14.1 - name: Setup Cosign uses: sigstore/cosign-installer@c3667d99424e7e6047999fb6246c0da843953c65 # v3.0.1 - name: Setup Kustomize From 1260db1bcf747a357b5d0c7ebf2d4b55d0f1b859 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 4 Apr 2023 21:19:03 +0000 Subject: [PATCH 464/818] build(deps): bump github.com/docker/docker Bumps [github.com/docker/docker](https://github.com/docker/docker) from 20.10.20+incompatible to 20.10.24+incompatible. - [Release notes](https://github.com/docker/docker/releases) - [Commits](https://github.com/docker/docker/compare/v20.10.20...v20.10.24) --- updated-dependencies: - dependency-name: github.com/docker/docker dependency-type: indirect ... Signed-off-by: dependabot[bot] --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 7cab47a1..b9f7a275 100644 --- a/go.mod +++ b/go.mod @@ -97,7 +97,7 @@ require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/docker/cli v20.10.20+incompatible // indirect github.com/docker/distribution v2.8.1+incompatible // indirect - github.com/docker/docker v20.10.20+incompatible // indirect + github.com/docker/docker v20.10.24+incompatible // indirect github.com/docker/docker-credential-helpers v0.7.0 // indirect github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c // indirect github.com/docker/go-metrics v0.0.1 // indirect diff --git a/go.sum b/go.sum index 0fcc75b3..09270d9d 100644 --- a/go.sum +++ b/go.sum @@ -156,8 +156,8 @@ github.com/docker/cli v20.10.20+incompatible h1:lWQbHSHUFs7KraSN2jOJK7zbMS2jNCHI github.com/docker/cli v20.10.20+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68= github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v20.10.20+incompatible h1:kH9tx6XO+359d+iAkumyKDc5Q1kOwPuAUaeri48nD6E= -github.com/docker/docker v20.10.20+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v20.10.24+incompatible h1:Ugvxm7a8+Gz6vqQYQQ2W7GYq5EUPaAiuPgIfVyI3dYE= +github.com/docker/docker v20.10.24+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker-credential-helpers v0.7.0 h1:xtCHsjxogADNZcdv1pKUHXryefjlVRqWqIhk/uXJp0A= github.com/docker/docker-credential-helpers v0.7.0/go.mod h1:rETQfLdHNT3foU5kuNkFR1R1V12OJRRO5lzt2D1b5X0= github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c h1:+pKlWGMw7gf6bQ+oDZB4KHQFypsfjYlq/C4rfL7D3g8= From 83d2739dc523a62b6bcf541d4486127125625ab3 Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Mon, 3 Apr 2023 15:56:15 +0000 Subject: [PATCH 465/818] Update toolkit components - helm-controller to v0.32.1 https://github.com/fluxcd/helm-controller/blob/v0.32.1/CHANGELOG.md - kustomize-controller to v1.0.0-rc.1 https://github.com/fluxcd/kustomize-controller/blob/v1.0.0-rc.1/CHANGELOG.md - source-controller to v1.0.0-rc.1 https://github.com/fluxcd/source-controller/blob/v1.0.0-rc.1/CHANGELOG.md - notification-controller to v1.0.0-rc.1 https://github.com/fluxcd/notification-controller/blob/v1.0.0-rc.1/CHANGELOG.md - image-reflector-controller to v0.27.0 https://github.com/fluxcd/image-reflector-controller/blob/v0.27.0/CHANGELOG.md - image-automation-controller to v0.32.0 https://github.com/fluxcd/image-automation-controller/blob/v0.32.0/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 32 +++++----- go.sum | 64 +++++++++---------- .../bases/helm-controller/kustomization.yaml | 4 +- .../kustomization.yaml | 4 +- .../kustomization.yaml | 4 +- .../kustomize-controller/kustomization.yaml | 4 +- .../kustomization.yaml | 4 +- .../source-controller/kustomization.yaml | 4 +- manifests/crds/kustomization.yaml | 12 ++-- 9 files changed, 66 insertions(+), 66 deletions(-) diff --git a/go.mod b/go.mod index b9f7a275..fb0a6866 100644 --- a/go.mod +++ b/go.mod @@ -9,13 +9,13 @@ require ( github.com/distribution/distribution/v3 v3.0.0-20230223072852-e5d5810851d1 github.com/fluxcd/go-git-providers v0.15.0 github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 - github.com/fluxcd/helm-controller/api v0.31.2 - github.com/fluxcd/image-automation-controller/api v0.31.0 - github.com/fluxcd/image-reflector-controller/api v0.26.1 - github.com/fluxcd/kustomize-controller/api v0.35.1 - github.com/fluxcd/notification-controller/api v0.33.0 + github.com/fluxcd/helm-controller/api v0.32.1 + github.com/fluxcd/image-automation-controller/api v0.32.0 + github.com/fluxcd/image-reflector-controller/api v0.27.0 + github.com/fluxcd/kustomize-controller/api v1.0.0-rc.1 + github.com/fluxcd/notification-controller/api v1.0.0-rc.1 github.com/fluxcd/pkg/apis/event v0.4.1 - github.com/fluxcd/pkg/apis/meta v0.19.1 + github.com/fluxcd/pkg/apis/meta v1.0.0 github.com/fluxcd/pkg/git v0.11.0 github.com/fluxcd/pkg/git/gogit v0.8.1 github.com/fluxcd/pkg/kustomize v0.13.2 @@ -26,7 +26,7 @@ require ( github.com/fluxcd/pkg/ssh v0.7.3 github.com/fluxcd/pkg/untar v0.2.0 github.com/fluxcd/pkg/version v0.2.1 - github.com/fluxcd/source-controller/api v0.36.1 + github.com/fluxcd/source-controller/api v1.0.0-rc.1 github.com/gonvenience/bunt v1.3.4 github.com/gonvenience/ytbx v1.4.4 github.com/google/go-cmp v0.5.9 @@ -43,14 +43,14 @@ require ( github.com/theckman/yacspin v0.13.12 golang.org/x/crypto v0.7.0 golang.org/x/term v0.6.0 - k8s.io/api v0.26.2 - k8s.io/apiextensions-apiserver v0.26.2 - k8s.io/apimachinery v0.26.2 + k8s.io/api v0.26.3 + k8s.io/apiextensions-apiserver v0.26.3 + k8s.io/apimachinery v0.26.3 k8s.io/cli-runtime v0.26.2 - k8s.io/client-go v0.26.2 + k8s.io/client-go v0.26.3 k8s.io/kubectl v0.26.2 sigs.k8s.io/cli-utils v0.34.0 - sigs.k8s.io/controller-runtime v0.14.5 + sigs.k8s.io/controller-runtime v0.14.6 sigs.k8s.io/kustomize/api v0.12.1 sigs.k8s.io/kustomize/kyaml v0.13.9 sigs.k8s.io/yaml v1.3.0 @@ -111,14 +111,14 @@ require ( github.com/fatih/color v1.13.0 // indirect github.com/felixge/httpsnoop v1.0.3 // indirect github.com/fluxcd/pkg/apis/acl v0.1.0 // indirect - github.com/fluxcd/pkg/apis/kustomize v0.8.1 // indirect + github.com/fluxcd/pkg/apis/kustomize v1.0.0 // indirect github.com/fluxcd/pkg/tar v0.2.0 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/go-errors/errors v1.4.2 // indirect github.com/go-git/gcfg v1.5.0 // indirect github.com/go-git/go-billy/v5 v5.4.1 // indirect github.com/go-git/go-git/v5 v5.4.2 // indirect - github.com/go-logr/logr v1.2.3 // indirect + github.com/go-logr/logr v1.2.4 // indirect github.com/go-openapi/jsonpointer v0.19.6 // indirect github.com/go-openapi/jsonreference v0.20.1 // indirect github.com/go-openapi/swag v0.22.3 // indirect @@ -212,10 +212,10 @@ require ( gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/component-base v0.26.2 // indirect + k8s.io/component-base v0.26.3 // indirect k8s.io/klog/v2 v2.90.1 // indirect k8s.io/kube-openapi v0.0.0-20230109183929-3758b55a6596 // indirect - k8s.io/utils v0.0.0-20221128185143-99ec85e7a448 // indirect + k8s.io/utils v0.0.0-20230313181309-38a27ef9d749 // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect ) diff --git a/go.sum b/go.sum index 09270d9d..c1d1f6f2 100644 --- a/go.sum +++ b/go.sum @@ -199,24 +199,24 @@ github.com/fluxcd/go-git-providers v0.15.0 h1:WuBw+CcmXi7UhSf8mFNB6tbGelS0kVlgI9 github.com/fluxcd/go-git-providers v0.15.0/go.mod h1:SgShGfc2rA5Gi7N65CBjMOIolarDZzZCMzEHOoY3P0I= github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 h1:Gm5sGGk+/Wq6RhX4xpCZ2IqjDp5XkjlhENaAuAlpdKc= github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4/go.mod h1:raWgfUV7lDQVXp4QXUaeNNJkRVKz97UQuF+0kdY7Vmo= -github.com/fluxcd/helm-controller/api v0.31.2 h1:d/lbCPYiQP+YnPNhdIOGRzHUWDIhnxI9dUSaOCx/RK8= -github.com/fluxcd/helm-controller/api v0.31.2/go.mod h1:z9zLN31FjwHhd8RyGsrE4vnRtUp4bz5rXxd1hVX3Waw= -github.com/fluxcd/image-automation-controller/api v0.31.0 h1:xA2MXbVpXWAFBCmlaOqgLtqGfR637aw0PxyyMGaqUTI= -github.com/fluxcd/image-automation-controller/api v0.31.0/go.mod h1:kNQ/g5TK0Epwguma2+Y1binRMRZ1d6E2VmZLg2iGkqw= -github.com/fluxcd/image-reflector-controller/api v0.26.1 h1:AKfqabDlcouGilX0y+/Wa1R9qwMb6ZlTHD1ELEkK9tw= -github.com/fluxcd/image-reflector-controller/api v0.26.1/go.mod h1:xZILku1/O6higkHTW/D3dvte4Ld7kRuZH9r+Rm4p1B0= -github.com/fluxcd/kustomize-controller/api v0.35.1 h1:l7AndDJXVLZcCHmEIRXU9ksWInlP6SjFtHQH1SC7++c= -github.com/fluxcd/kustomize-controller/api v0.35.1/go.mod h1:hrxVOUss0om4mg+ykMYtH4CgLuM2RReSPf0hG9e0b18= -github.com/fluxcd/notification-controller/api v0.33.0 h1:iVnIGDfkpVuzcILSGwi//Q3devCg7E7G4lfDx8vuvsA= -github.com/fluxcd/notification-controller/api v0.33.0/go.mod h1:0IyWy0J6+z1TbijVQjFx1gWQDOzXaRfzV2NClfjHZPk= +github.com/fluxcd/helm-controller/api v0.32.1 h1:b2q0V+cXnqvW24Zy4zY+5Jfn1D3sqBIBTNhbqsD+r9Q= +github.com/fluxcd/helm-controller/api v0.32.1/go.mod h1:xzQgNoaPOg77zFUqvnaX0Fn3lPA3iGDLoz8q4wiEyLA= +github.com/fluxcd/image-automation-controller/api v0.32.0 h1:ABRLN+a8jHuOAETf1o1ohVzxxjYhOXxtJglD5YSMuUM= +github.com/fluxcd/image-automation-controller/api v0.32.0/go.mod h1:DHb9GaPZz5HCgBL3u3PC4XNGcO3rUroE6ayx1PAa0Gs= +github.com/fluxcd/image-reflector-controller/api v0.27.0 h1:1wceNPwx6dCPTmeGgSXLRbhRjEiyWeRSb+KMCcSJ0sw= +github.com/fluxcd/image-reflector-controller/api v0.27.0/go.mod h1:TNn1Y3XuinlCRiohmjUtwvjWurTspPg0U0cCvMI5Q3E= +github.com/fluxcd/kustomize-controller/api v1.0.0-rc.1 h1:HnPpGw9RhVyE4LsvOOMUcCo4jA+gSfnkM2Xe/vjlpHg= +github.com/fluxcd/kustomize-controller/api v1.0.0-rc.1/go.mod h1:ql/HdV+pGzqnHaU5oNyvYR7lHPWc/me3HUPd4g7A9BI= +github.com/fluxcd/notification-controller/api v1.0.0-rc.1 h1:L6xM9Nvm2icc7SqcUSXYiIY8bTiV73kss5KleaUewts= +github.com/fluxcd/notification-controller/api v1.0.0-rc.1/go.mod h1:bfZCGyWq1SPmZSQSCuHRum5Z1olidWp8UbZkO5kcato= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= github.com/fluxcd/pkg/apis/event v0.4.1 h1:63wP8NM/uA4680F4Ft8q8/0rJivX90i7FmMkRvUI8Is= github.com/fluxcd/pkg/apis/event v0.4.1/go.mod h1:LHT1ZsbMrcHwCHQCaFtQviQBZwhMOAbTUPK6+KgBkFo= -github.com/fluxcd/pkg/apis/kustomize v0.8.1 h1:uRH9xVDJfSBGIiL6PIhkguHvf2Nme6uTWX+RX1iZznc= -github.com/fluxcd/pkg/apis/kustomize v0.8.1/go.mod h1:TBem+2mHp6Ib7XD1fmzDkoUnBzx07wSzIYo6BVx3XAc= -github.com/fluxcd/pkg/apis/meta v0.19.1 h1:fCI5CnTXpAqr67UlaI9q0H+OztMKB5kDTr6xV6vlAo0= -github.com/fluxcd/pkg/apis/meta v0.19.1/go.mod h1:ZPPMYrPnWwPQYNEGM/Uc0N4SurUPS3xNI3IIpCQEfuM= +github.com/fluxcd/pkg/apis/kustomize v1.0.0 h1:5T2b/mRZiGWtP7fvSU8gZOApIc06H6SdLX3MlsE6LRo= +github.com/fluxcd/pkg/apis/kustomize v1.0.0/go.mod h1:XaDYlKxrf9D2zZWcZ0BnSIqGtcm8mdNtJGzZWYjCnQo= +github.com/fluxcd/pkg/apis/meta v1.0.0 h1:i9IGHd/VNEZELX7mepkiYFbJxs2J5znaB4cN9z2nPm8= +github.com/fluxcd/pkg/apis/meta v1.0.0/go.mod h1:04ZdpZYm1x+aL93K4daNHW1UX6E8K7Gyf5za9OhrE+U= github.com/fluxcd/pkg/git v0.11.0 h1:GvB+3QOB8xbF5WNjVrkskseOnsZBuqSOzW3VxfsHuX4= github.com/fluxcd/pkg/git v0.11.0/go.mod h1:VHRVlrZMHNoWBlaSAWxlGH6Vwlb9VRazUhPUykviHwY= github.com/fluxcd/pkg/git/gogit v0.8.1 h1:Q3EV2WBX6HiXSmsHyrwFzwl82gO4ZtFwb675iQPWwVc= @@ -240,8 +240,8 @@ github.com/fluxcd/pkg/untar v0.2.0 h1:sJXU+FbJcNUb2ffLJNjeR3hwt3X2loVpOMlCUjyFw6 github.com/fluxcd/pkg/untar v0.2.0/go.mod h1:33AyoWaPpjX/xXpczcfhQh2AkB63TFwiR2YwROtv23E= github.com/fluxcd/pkg/version v0.2.1 h1:RRH7+6qiWHdTvRNwpoBmilnubJ2C4FZYGgy5wTDVKVc= github.com/fluxcd/pkg/version v0.2.1/go.mod h1:UmUYHDz4BxHQMesMUx3gYVrT2Wf66H49JpTg/PW+/OY= -github.com/fluxcd/source-controller/api v0.36.1 h1:/ul69kJNEwrFG1Cwk2P/GwgraIxOETCL+tP+zMtxTu8= -github.com/fluxcd/source-controller/api v0.36.1/go.mod h1:GktZmd5Dfxo84vPFBdLDl0bBtiJRODfd47uugK0romU= +github.com/fluxcd/source-controller/api v1.0.0-rc.1 h1:MZaP5utClMG95Aw/AVu1l05WEfmpEw/RIlCLnkCQl14= +github.com/fluxcd/source-controller/api v1.0.0-rc.1/go.mod h1:CvGNdS8g/MqwpERUK6aJp4lndsrm+JBzGpoyyZ4u0c8= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= @@ -274,8 +274,8 @@ github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= -github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= +github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/zapr v1.2.3 h1:a9vnzlIBPQBBkeaR9IuMUfmVOrQlkoC4YfPoFkX3T7A= github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE= github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= @@ -1015,33 +1015,33 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -k8s.io/api v0.26.2 h1:dM3cinp3PGB6asOySalOZxEG4CZ0IAdJsrYZXE/ovGQ= -k8s.io/api v0.26.2/go.mod h1:1kjMQsFE+QHPfskEcVNgL3+Hp88B80uj0QtSOlj8itU= -k8s.io/apiextensions-apiserver v0.26.2 h1:/yTG2B9jGY2Q70iGskMf41qTLhL9XeNN2KhI0uDgwko= -k8s.io/apiextensions-apiserver v0.26.2/go.mod h1:Y7UPgch8nph8mGCuVk0SK83LnS8Esf3n6fUBgew8SH8= -k8s.io/apimachinery v0.26.2 h1:da1u3D5wfR5u2RpLhE/ZtZS2P7QvDgLZTi9wrNZl/tQ= -k8s.io/apimachinery v0.26.2/go.mod h1:ats7nN1LExKHvJ9TmwootT00Yz05MuYqPXEXaVeOy5I= +k8s.io/api v0.26.3 h1:emf74GIQMTik01Aum9dPP0gAypL8JTLl/lHa4V9RFSU= +k8s.io/api v0.26.3/go.mod h1:PXsqwPMXBSBcL1lJ9CYDKy7kIReUydukS5JiRlxC3qE= +k8s.io/apiextensions-apiserver v0.26.3 h1:5PGMm3oEzdB1W/FTMgGIDmm100vn7IaUP5er36dB+YE= +k8s.io/apiextensions-apiserver v0.26.3/go.mod h1:jdA5MdjNWGP+njw1EKMZc64xAT5fIhN6VJrElV3sfpQ= +k8s.io/apimachinery v0.26.3 h1:dQx6PNETJ7nODU3XPtrwkfuubs6w7sX0M8n61zHIV/k= +k8s.io/apimachinery v0.26.3/go.mod h1:ats7nN1LExKHvJ9TmwootT00Yz05MuYqPXEXaVeOy5I= k8s.io/cli-runtime v0.26.2 h1:6XcIQOYW1RGNwFgRwejvyUyAojhToPmJLGr0JBMC5jw= k8s.io/cli-runtime v0.26.2/go.mod h1:U7sIXX7n6ZB+MmYQsyJratzPeJwgITqrSlpr1a5wM5I= -k8s.io/client-go v0.26.2 h1:s1WkVujHX3kTp4Zn4yGNFK+dlDXy1bAAkIl+cFAiuYI= -k8s.io/client-go v0.26.2/go.mod h1:u5EjOuSyBa09yqqyY7m3abZeovO/7D/WehVVlZ2qcqU= -k8s.io/component-base v0.26.2 h1:IfWgCGUDzrD6wLLgXEstJKYZKAFS2kO+rBRi0p3LqcI= -k8s.io/component-base v0.26.2/go.mod h1:DxbuIe9M3IZPRxPIzhch2m1eT7uFrSBJUBuVCQEBivs= +k8s.io/client-go v0.26.3 h1:k1UY+KXfkxV2ScEL3gilKcF7761xkYsSD6BC9szIu8s= +k8s.io/client-go v0.26.3/go.mod h1:ZPNu9lm8/dbRIPAgteN30RSXea6vrCpFvq+MateTUuQ= +k8s.io/component-base v0.26.3 h1:oC0WMK/ggcbGDTkdcqefI4wIZRYdK3JySx9/HADpV0g= +k8s.io/component-base v0.26.3/go.mod h1:5kj1kZYwSC6ZstHJN7oHBqcJC6yyn41eR+Sqa/mQc8E= k8s.io/klog/v2 v2.90.1 h1:m4bYOKall2MmOiRaR1J+We67Do7vm9KiQVlT96lnHUw= k8s.io/klog/v2 v2.90.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/kube-openapi v0.0.0-20230109183929-3758b55a6596 h1:8cNCQs+WqqnSpZ7y0LMQPKD+RZUHU17VqLPMW3qxnxc= k8s.io/kube-openapi v0.0.0-20230109183929-3758b55a6596/go.mod h1:/BYxry62FuDzmI+i9B+X2pqfySRmSOW2ARmj5Zbqhj0= k8s.io/kubectl v0.26.2 h1:SMPB4j48eVFxsYluBq3VLyqXtE6b72YnszkbTAtFye4= k8s.io/kubectl v0.26.2/go.mod h1:KYWOXSwp2BrDn3kPeoU/uKzKtdqvhK1dgZGd0+no4cM= -k8s.io/utils v0.0.0-20221128185143-99ec85e7a448 h1:KTgPnR10d5zhztWptI952TNtt/4u5h3IzDXkdIMuo2Y= -k8s.io/utils v0.0.0-20221128185143-99ec85e7a448/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +k8s.io/utils v0.0.0-20230313181309-38a27ef9d749 h1:xMMXJlJbsU8w3V5N2FLDQ8YgU8s1EoULdbQBcAeNJkY= +k8s.io/utils v0.0.0-20230313181309-38a27ef9d749/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/cli-utils v0.34.0 h1:zCUitt54f0/MYj/ajVFnG6XSXMhpZ72O/3RewIchW8w= sigs.k8s.io/cli-utils v0.34.0/go.mod h1:EXyMwPMu9OL+LRnj0JEMsGG/fRvbgFadcVlSnE8RhFs= -sigs.k8s.io/controller-runtime v0.14.5 h1:6xaWFqzT5KuAQ9ufgUaj1G/+C4Y1GRkhrxl+BJ9i+5s= -sigs.k8s.io/controller-runtime v0.14.5/go.mod h1:WqIdsAY6JBsjfc/CqO0CORmNtoCtE4S6qbPc9s68h+0= +sigs.k8s.io/controller-runtime v0.14.6 h1:oxstGVvXGNnMvY7TAESYk+lzr6S3V5VFxQ6d92KcwQA= +sigs.k8s.io/controller-runtime v0.14.6/go.mod h1:WqIdsAY6JBsjfc/CqO0CORmNtoCtE4S6qbPc9s68h+0= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= sigs.k8s.io/kustomize/api v0.12.1 h1:7YM7gW3kYBwtKvoY216ZzY+8hM+lV53LUayghNRJ0vM= diff --git a/manifests/bases/helm-controller/kustomization.yaml b/manifests/bases/helm-controller/kustomization.yaml index 8a9280e0..78ef2f29 100644 --- a/manifests/bases/helm-controller/kustomization.yaml +++ b/manifests/bases/helm-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/helm-controller/releases/download/v0.31.2/helm-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.31.2/helm-controller.deployment.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.32.1/helm-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.32.1/helm-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/image-automation-controller/kustomization.yaml b/manifests/bases/image-automation-controller/kustomization.yaml index 2a196633..212805b8 100644 --- a/manifests/bases/image-automation-controller/kustomization.yaml +++ b/manifests/bases/image-automation-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.31.0/image-automation-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.31.0/image-automation-controller.deployment.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.32.0/image-automation-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.32.0/image-automation-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/image-reflector-controller/kustomization.yaml b/manifests/bases/image-reflector-controller/kustomization.yaml index a444bbce..1c868aef 100644 --- a/manifests/bases/image-reflector-controller/kustomization.yaml +++ b/manifests/bases/image-reflector-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.26.1/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.26.1/image-reflector-controller.deployment.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.27.0/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.27.0/image-reflector-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/kustomize-controller/kustomization.yaml b/manifests/bases/kustomize-controller/kustomization.yaml index ff0c1424..45964902 100644 --- a/manifests/bases/kustomize-controller/kustomization.yaml +++ b/manifests/bases/kustomize-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.35.1/kustomize-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.35.1/kustomize-controller.deployment.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v1.0.0-rc.1/kustomize-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v1.0.0-rc.1/kustomize-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/notification-controller/kustomization.yaml b/manifests/bases/notification-controller/kustomization.yaml index 5d0e7e3a..f823074d 100644 --- a/manifests/bases/notification-controller/kustomization.yaml +++ b/manifests/bases/notification-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/notification-controller/releases/download/v0.33.0/notification-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v0.33.0/notification-controller.deployment.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v1.0.0-rc.1/notification-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v1.0.0-rc.1/notification-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index 323d5c6f..45ffa7af 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.36.1/source-controller.crds.yaml -- https://github.com/fluxcd/source-controller/releases/download/v0.36.1/source-controller.deployment.yaml +- https://github.com/fluxcd/source-controller/releases/download/v1.0.0-rc.1/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v1.0.0-rc.1/source-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index 29275fe6..b5539448 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -1,9 +1,9 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v0.36.1/source-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v0.35.1/kustomize-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.31.2/helm-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v0.33.0/notification-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.26.1/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.31.0/image-automation-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v1.0.0-rc.1/source-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v1.0.0-rc.1/kustomize-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.32.1/helm-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v1.0.0-rc.1/notification-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.27.0/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.32.0/image-automation-controller.crds.yaml From ccb7d62d959a88a7be0a9938f8185e93b234bb89 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Mon, 3 Apr 2023 19:29:26 +0300 Subject: [PATCH 466/818] ci: Run the e2e tests for the release branches Signed-off-by: Stefan Prodan --- .github/workflows/e2e-arm64.yaml | 2 +- .github/workflows/e2e-bootstrap.yaml | 4 ++-- .github/workflows/e2e.yaml | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/e2e-arm64.yaml b/.github/workflows/e2e-arm64.yaml index 41db8995..843a5360 100644 --- a/.github/workflows/e2e-arm64.yaml +++ b/.github/workflows/e2e-arm64.yaml @@ -3,7 +3,7 @@ name: e2e-arm64 on: workflow_dispatch: push: - branches: [ main, update-components, e2e-arm64* ] + branches: [ main, update-components, release-* ] permissions: contents: read diff --git a/.github/workflows/e2e-bootstrap.yaml b/.github/workflows/e2e-bootstrap.yaml index 7dfefc91..a119b6a8 100644 --- a/.github/workflows/e2e-bootstrap.yaml +++ b/.github/workflows/e2e-bootstrap.yaml @@ -3,9 +3,9 @@ name: e2e-bootstrap on: workflow_dispatch: push: - branches: [ main ] + branches: [ main, release-* ] pull_request: - branches: [ main ] + branches: [ main, release-* ] permissions: contents: read diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index e9d389a1..89fc92fa 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -3,9 +3,9 @@ name: e2e on: workflow_dispatch: push: - branches: [ main ] + branches: [ main, release-* ] pull_request: - branches: [ main, oci ] + branches: [ main, release-* ] permissions: contents: read From 24452ecd37ef3cc798c6ded146cf97cbb8fc3283 Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Thu, 30 Mar 2023 19:12:08 +0100 Subject: [PATCH 467/818] Update GitRepository Receiver, and Kustomization to v1 Signed-off-by: Somtochi Onyekwere --- cmd/flux/build_kustomization.go | 2 +- cmd/flux/build_kustomization_test.go | 2 +- cmd/flux/create_alert.go | 13 +++-- cmd/flux/create_image_update.go | 2 +- cmd/flux/create_kustomization.go | 2 +- cmd/flux/create_receiver.go | 2 +- cmd/flux/create_source_git.go | 2 +- cmd/flux/create_source_git_test.go | 8 ++- cmd/flux/delete_kustomization.go | 2 +- cmd/flux/delete_receiver.go | 2 +- cmd/flux/delete_source_git.go | 2 +- cmd/flux/diff_kustomization.go | 2 +- cmd/flux/events.go | 28 +++++----- cmd/flux/events_test.go | 30 ++++++---- cmd/flux/export_kustomization.go | 2 +- cmd/flux/export_receiver.go | 4 +- cmd/flux/export_source_git.go | 2 +- cmd/flux/get_all.go | 9 +-- cmd/flux/get_kustomization.go | 2 +- cmd/flux/get_receiver.go | 2 +- cmd/flux/get_source_all.go | 11 ++-- cmd/flux/get_source_git.go | 2 +- cmd/flux/kustomization.go | 2 +- cmd/flux/list_artifact.go | 6 +- cmd/flux/receiver.go | 2 +- cmd/flux/reconcile.go | 5 +- cmd/flux/reconcile_helmrelease.go | 11 ++-- cmd/flux/reconcile_kustomization.go | 13 +++-- cmd/flux/reconcile_receiver.go | 2 +- cmd/flux/reconcile_source_git.go | 2 +- cmd/flux/resume_kustomization.go | 2 +- cmd/flux/resume_receiver.go | 2 +- cmd/flux/resume_source_git.go | 2 +- cmd/flux/source.go | 49 ++++++++-------- cmd/flux/stats.go | 56 ++++++++++--------- cmd/flux/suspend_kustomization.go | 2 +- cmd/flux/suspend_receiver.go | 2 +- cmd/flux/suspend_source_git.go | 2 +- cmd/flux/tag_artifact.go | 5 +- .../podinfo-kustomization.yaml | 2 +- .../build-kustomization/podinfo-source.yaml | 2 +- .../testdata/create_source_git/export.golden | 2 +- .../source-git-branch-commit.yaml | 2 +- .../create_source_git/source-git-branch.yaml | 2 +- .../create_source_git/source-git-commit.yaml | 2 +- .../create_source_git/source-git-refname.yaml | 2 +- .../create_source_git/source-git-semver.yaml | 2 +- .../create_source_git/source-git-tag.yaml | 2 +- cmd/flux/testdata/export/git-repo.yaml | 3 +- cmd/flux/testdata/export/ks.yaml | 2 +- cmd/flux/testdata/export/objects.yaml | 10 ++-- cmd/flux/testdata/export/receiver.yaml | 3 +- cmd/flux/testdata/trace/deployment.yaml | 3 +- cmd/flux/testdata/trace/helmrelease-oci.yaml | 2 +- cmd/flux/testdata/trace/helmrelease.yaml | 5 +- cmd/flux/testdata/tree/kustomizations.yaml | 6 +- cmd/flux/trace.go | 27 ++++----- cmd/flux/tree_kustomization.go | 2 +- go.mod | 2 +- go.sum | 4 +- internal/build/build.go | 2 +- internal/build/diff.go | 2 +- .../local-kustomization/different-name.yaml | 2 +- .../local-kustomization/multi-doc-valid.yaml | 8 +-- .../testdata/local-kustomization/no-ns.yaml | 2 +- .../testdata/local-kustomization/valid.yaml | 2 +- internal/utils/utils.go | 10 +++- pkg/bootstrap/bootstrap.go | 2 +- pkg/bootstrap/bootstrap_plain_git.go | 2 +- pkg/manifestgen/sync/sync.go | 4 +- pkg/manifestgen/sync/sync_test.go | 4 +- pkg/uninstall/uninstall.go | 20 ++++--- tests/azure/azure_test.go | 25 +++++---- tests/azure/go.mod | 20 +++---- tests/azure/go.sum | 40 ++++++------- tests/azure/util_test.go | 20 +++++-- 76 files changed, 294 insertions(+), 256 deletions(-) diff --git a/cmd/flux/build_kustomization.go b/cmd/flux/build_kustomization.go index 0c968ddf..516fadd8 100644 --- a/cmd/flux/build_kustomization.go +++ b/cmd/flux/build_kustomization.go @@ -24,7 +24,7 @@ import ( "github.com/spf13/cobra" "github.com/fluxcd/flux2/internal/build" - kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" + kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" ) var buildKsCmd = &cobra.Command{ diff --git a/cmd/flux/build_kustomization_test.go b/cmd/flux/build_kustomization_test.go index b4078195..5f134384 100644 --- a/cmd/flux/build_kustomization_test.go +++ b/cmd/flux/build_kustomization_test.go @@ -92,7 +92,7 @@ func TestBuildKustomization(t *testing.T) { } func TestBuildLocalKustomization(t *testing.T) { - podinfo := `apiVersion: kustomize.toolkit.fluxcd.io/v1beta2 + podinfo := `apiVersion: kustomize.toolkit.fluxcd.io/v1 kind: Kustomization metadata: name: podinfo diff --git a/cmd/flux/create_alert.go b/cmd/flux/create_alert.go index 79a3bf3f..5f4e2164 100644 --- a/cmd/flux/create_alert.go +++ b/cmd/flux/create_alert.go @@ -28,7 +28,8 @@ import ( "k8s.io/apimachinery/pkg/util/wait" "sigs.k8s.io/controller-runtime/pkg/client" - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" + notificationv1 "github.com/fluxcd/notification-controller/api/v1" + notificationv1b2 "github.com/fluxcd/notification-controller/api/v1beta2" "github.com/fluxcd/pkg/apis/meta" "github.com/fluxcd/flux2/internal/utils" @@ -96,13 +97,13 @@ func createAlertCmdRun(cmd *cobra.Command, args []string) error { logger.Generatef("generating Alert") } - alert := notificationv1.Alert{ + alert := notificationv1b2.Alert{ ObjectMeta: metav1.ObjectMeta{ Name: name, Namespace: *kubeconfigArgs.Namespace, Labels: sourceLabels, }, - Spec: notificationv1.AlertSpec{ + Spec: notificationv1b2.AlertSpec{ ProviderRef: meta.LocalObjectReference{ Name: alertArgs.providerRef, }, @@ -140,13 +141,13 @@ func createAlertCmdRun(cmd *cobra.Command, args []string) error { } func upsertAlert(ctx context.Context, kubeClient client.Client, - alert *notificationv1.Alert) (types.NamespacedName, error) { + alert *notificationv1b2.Alert) (types.NamespacedName, error) { namespacedName := types.NamespacedName{ Namespace: alert.GetNamespace(), Name: alert.GetName(), } - var existing notificationv1.Alert + var existing notificationv1b2.Alert err := kubeClient.Get(ctx, namespacedName, &existing) if err != nil { if errors.IsNotFound(err) { @@ -171,7 +172,7 @@ func upsertAlert(ctx context.Context, kubeClient client.Client, } func isAlertReady(ctx context.Context, kubeClient client.Client, - namespacedName types.NamespacedName, alert *notificationv1.Alert) wait.ConditionFunc { + namespacedName types.NamespacedName, alert *notificationv1b2.Alert) wait.ConditionFunc { return func() (bool, error) { err := kubeClient.Get(ctx, namespacedName, alert) if err != nil { diff --git a/cmd/flux/create_image_update.go b/cmd/flux/create_image_update.go index 7bf6a28d..3a17ce06 100644 --- a/cmd/flux/create_image_update.go +++ b/cmd/flux/create_image_update.go @@ -23,7 +23,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" autov1 "github.com/fluxcd/image-automation-controller/api/v1beta1" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + sourcev1 "github.com/fluxcd/source-controller/api/v1" ) var createImageUpdateCmd = &cobra.Command{ diff --git a/cmd/flux/create_kustomization.go b/cmd/flux/create_kustomization.go index 6da5365a..b88f243b 100644 --- a/cmd/flux/create_kustomization.go +++ b/cmd/flux/create_kustomization.go @@ -31,7 +31,7 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" - kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" + kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" "github.com/fluxcd/pkg/apis/meta" "github.com/fluxcd/flux2/internal/flags" diff --git a/cmd/flux/create_receiver.go b/cmd/flux/create_receiver.go index f8669172..0114582e 100644 --- a/cmd/flux/create_receiver.go +++ b/cmd/flux/create_receiver.go @@ -28,7 +28,7 @@ import ( "k8s.io/apimachinery/pkg/util/wait" "sigs.k8s.io/controller-runtime/pkg/client" - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" + notificationv1 "github.com/fluxcd/notification-controller/api/v1" "github.com/fluxcd/pkg/apis/meta" "github.com/fluxcd/flux2/internal/utils" diff --git a/cmd/flux/create_source_git.go b/cmd/flux/create_source_git.go index e915268b..83d895dd 100644 --- a/cmd/flux/create_source_git.go +++ b/cmd/flux/create_source_git.go @@ -37,7 +37,7 @@ import ( "github.com/fluxcd/pkg/apis/meta" "github.com/fluxcd/pkg/runtime/conditions" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + sourcev1 "github.com/fluxcd/source-controller/api/v1" "github.com/fluxcd/flux2/internal/flags" "github.com/fluxcd/flux2/internal/utils" diff --git a/cmd/flux/create_source_git_test.go b/cmd/flux/create_source_git_test.go index 5517c811..27365990 100644 --- a/cmd/flux/create_source_git_test.go +++ b/cmd/flux/create_source_git_test.go @@ -24,14 +24,15 @@ import ( "testing" "time" - "github.com/fluxcd/pkg/apis/meta" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" "k8s.io/apimachinery/pkg/api/errors" apimeta "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/wait" "sigs.k8s.io/controller-runtime/pkg/client" + + "github.com/fluxcd/pkg/apis/meta" + sourcev1 "github.com/fluxcd/source-controller/api/v1" ) var pollInterval = 50 * time.Millisecond @@ -176,6 +177,9 @@ func TestCreateSourceGit(t *testing.T) { repo.Status.Artifact = &sourcev1.Artifact{ Path: "some-path", Revision: "v1", + LastUpdateTime: metav1.Time{ + Time: time.Now(), + }, } }, }, { diff --git a/cmd/flux/delete_kustomization.go b/cmd/flux/delete_kustomization.go index 257d7362..699d4a87 100644 --- a/cmd/flux/delete_kustomization.go +++ b/cmd/flux/delete_kustomization.go @@ -19,7 +19,7 @@ package main import ( "github.com/spf13/cobra" - kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" + kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" ) var deleteKsCmd = &cobra.Command{ diff --git a/cmd/flux/delete_receiver.go b/cmd/flux/delete_receiver.go index 42eb6ca6..8bdaab85 100644 --- a/cmd/flux/delete_receiver.go +++ b/cmd/flux/delete_receiver.go @@ -19,7 +19,7 @@ package main import ( "github.com/spf13/cobra" - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" + notificationv1 "github.com/fluxcd/notification-controller/api/v1" ) var deleteReceiverCmd = &cobra.Command{ diff --git a/cmd/flux/delete_source_git.go b/cmd/flux/delete_source_git.go index c43398d5..78dec208 100644 --- a/cmd/flux/delete_source_git.go +++ b/cmd/flux/delete_source_git.go @@ -19,7 +19,7 @@ package main import ( "github.com/spf13/cobra" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + sourcev1 "github.com/fluxcd/source-controller/api/v1" ) var deleteSourceGitCmd = &cobra.Command{ diff --git a/cmd/flux/diff_kustomization.go b/cmd/flux/diff_kustomization.go index 335717f6..8b406417 100644 --- a/cmd/flux/diff_kustomization.go +++ b/cmd/flux/diff_kustomization.go @@ -24,7 +24,7 @@ import ( "github.com/spf13/cobra" "github.com/fluxcd/flux2/internal/build" - kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" + kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" ) var diffKsCmd = &cobra.Command{ diff --git a/cmd/flux/events.go b/cmd/flux/events.go index ae25e0c3..3017a2db 100644 --- a/cmd/flux/events.go +++ b/cmd/flux/events.go @@ -42,9 +42,11 @@ import ( helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" autov1 "github.com/fluxcd/image-automation-controller/api/v1beta1" imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta2" - kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" + notificationv1 "github.com/fluxcd/notification-controller/api/v1" + notificationv1b2 "github.com/fluxcd/notification-controller/api/v1beta2" + sourcev1 "github.com/fluxcd/source-controller/api/v1" + sourcev1b2 "github.com/fluxcd/source-controller/api/v1beta2" "github.com/fluxcd/flux2/internal/utils" "github.com/fluxcd/flux2/pkg/printers" @@ -390,18 +392,18 @@ var fluxKindMap = refMap{ gv: helmv2.GroupVersion, crossNamespaced: true, otherRefs: func(namespace, name string) []string { - return []string{fmt.Sprintf("%s/%s-%s", sourcev1.HelmChartKind, namespace, name)} + return []string{fmt.Sprintf("%s/%s-%s", sourcev1b2.HelmChartKind, namespace, name)} }, field: []string{"spec", "chart", "spec", "sourceRef"}, }, - notificationv1.AlertKind: { - gv: notificationv1.GroupVersion, - kind: notificationv1.ProviderKind, + notificationv1b2.AlertKind: { + gv: notificationv1b2.GroupVersion, + kind: notificationv1b2.ProviderKind, crossNamespaced: false, field: []string{"spec", "providerRef"}, }, - notificationv1.ReceiverKind: {gv: notificationv1.GroupVersion}, - notificationv1.ProviderKind: {gv: notificationv1.GroupVersion}, + notificationv1.ReceiverKind: {gv: notificationv1.GroupVersion}, + notificationv1b2.ProviderKind: {gv: notificationv1b2.GroupVersion}, imagev1.ImagePolicyKind: { gv: imagev1.GroupVersion, kind: imagev1.ImageRepositoryKind, @@ -409,10 +411,10 @@ var fluxKindMap = refMap{ field: []string{"spec", "imageRepositoryRef"}, }, sourcev1.GitRepositoryKind: {gv: sourcev1.GroupVersion}, - sourcev1.OCIRepositoryKind: {gv: sourcev1.GroupVersion}, - sourcev1.BucketKind: {gv: sourcev1.GroupVersion}, - sourcev1.HelmRepositoryKind: {gv: sourcev1.GroupVersion}, - sourcev1.HelmChartKind: {gv: sourcev1.GroupVersion}, + sourcev1b2.OCIRepositoryKind: {gv: sourcev1b2.GroupVersion}, + sourcev1b2.BucketKind: {gv: sourcev1b2.GroupVersion}, + sourcev1b2.HelmRepositoryKind: {gv: sourcev1b2.GroupVersion}, + sourcev1b2.HelmChartKind: {gv: sourcev1b2.GroupVersion}, autov1.ImageUpdateAutomationKind: {gv: autov1.GroupVersion}, imagev1.ImageRepositoryKind: {gv: imagev1.GroupVersion}, } diff --git a/cmd/flux/events_test.go b/cmd/flux/events_test.go index 12076c50..cbd098b9 100644 --- a/cmd/flux/events_test.go +++ b/cmd/flux/events_test.go @@ -23,15 +23,6 @@ import ( "strings" "testing" - "github.com/fluxcd/flux2/internal/utils" - helmv2beta1 "github.com/fluxcd/helm-controller/api/v2beta1" - autov1 "github.com/fluxcd/image-automation-controller/api/v1beta1" - imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta2" - kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" - eventv1 "github.com/fluxcd/pkg/apis/event/v1beta1" - "github.com/fluxcd/pkg/ssa" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" . "github.com/onsi/gomega" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -40,10 +31,23 @@ import ( cmdutil "k8s.io/kubectl/pkg/cmd/util" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/client/fake" + + helmv2beta1 "github.com/fluxcd/helm-controller/api/v2beta1" + autov1 "github.com/fluxcd/image-automation-controller/api/v1beta1" + imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta2" + kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" + notificationv1 "github.com/fluxcd/notification-controller/api/v1" + notificationv1b2 "github.com/fluxcd/notification-controller/api/v1beta2" + eventv1 "github.com/fluxcd/pkg/apis/event/v1beta1" + "github.com/fluxcd/pkg/ssa" + sourcev1 "github.com/fluxcd/source-controller/api/v1" + sourcev1b2 "github.com/fluxcd/source-controller/api/v1beta2" + + "github.com/fluxcd/flux2/internal/utils" ) var objects = ` -apiVersion: kustomize.toolkit.fluxcd.io/v1beta2 +apiVersion: kustomize.toolkit.fluxcd.io/v1 kind: Kustomization metadata: name: flux-system @@ -56,7 +60,7 @@ spec: kind: GitRepository name: flux-system --- -apiVersion: kustomize.toolkit.fluxcd.io/v1beta2 +apiVersion: kustomize.toolkit.fluxcd.io/v1 kind: Kustomization metadata: name: podinfo @@ -70,7 +74,7 @@ spec: name: flux-system namespace: flux-system --- -apiVersion: source.toolkit.fluxcd.io/v1beta2 +apiVersion: source.toolkit.fluxcd.io/v1 kind: GitRepository metadata: name: flux-system @@ -376,9 +380,11 @@ func getScheme() *runtime.Scheme { kustomizev1.AddToScheme(newscheme) helmv2beta1.AddToScheme(newscheme) notificationv1.AddToScheme(newscheme) + notificationv1b2.AddToScheme(newscheme) imagev1.AddToScheme(newscheme) autov1.AddToScheme(newscheme) sourcev1.AddToScheme(newscheme) + sourcev1b2.AddToScheme(newscheme) return newscheme } diff --git a/cmd/flux/export_kustomization.go b/cmd/flux/export_kustomization.go index ed613dcc..139f072b 100644 --- a/cmd/flux/export_kustomization.go +++ b/cmd/flux/export_kustomization.go @@ -20,7 +20,7 @@ import ( "github.com/spf13/cobra" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" + kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" ) var exportKsCmd = &cobra.Command{ diff --git a/cmd/flux/export_receiver.go b/cmd/flux/export_receiver.go index 22526f7e..1ef18282 100644 --- a/cmd/flux/export_receiver.go +++ b/cmd/flux/export_receiver.go @@ -20,7 +20,7 @@ import ( "github.com/spf13/cobra" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" + notificationv1 "github.com/fluxcd/notification-controller/api/v1" ) var exportReceiverCmd = &cobra.Command{ @@ -44,7 +44,7 @@ func init() { } func exportReceiver(receiver *notificationv1.Receiver) interface{} { - gvk := notificationv1.GroupVersion.WithKind("Receiver") + gvk := notificationv1.GroupVersion.WithKind(notificationv1.ReceiverKind) export := notificationv1.Receiver{ TypeMeta: metav1.TypeMeta{ Kind: gvk.Kind, diff --git a/cmd/flux/export_source_git.go b/cmd/flux/export_source_git.go index f1af1659..57ab7e77 100644 --- a/cmd/flux/export_source_git.go +++ b/cmd/flux/export_source_git.go @@ -21,7 +21,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + sourcev1 "github.com/fluxcd/source-controller/api/v1" ) var exportSourceGitCmd = &cobra.Command{ diff --git a/cmd/flux/get_all.go b/cmd/flux/get_all.go index c4567f04..d3e88ccc 100644 --- a/cmd/flux/get_all.go +++ b/cmd/flux/get_all.go @@ -22,8 +22,9 @@ import ( "github.com/spf13/cobra" helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" - kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" + kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" + notificationv1 "github.com/fluxcd/notification-controller/api/v1" + notificationv1b2 "github.com/fluxcd/notification-controller/api/v1beta2" ) var getAllCmd = &cobra.Command{ @@ -62,11 +63,11 @@ var getAllCmd = &cobra.Command{ }, { apiType: alertProviderType, - list: alertProviderListAdapter{¬ificationv1.ProviderList{}}, + list: alertProviderListAdapter{¬ificationv1b2.ProviderList{}}, }, { apiType: alertType, - list: &alertListAdapter{¬ificationv1.AlertList{}}, + list: &alertListAdapter{¬ificationv1b2.AlertList{}}, }, } diff --git a/cmd/flux/get_kustomization.go b/cmd/flux/get_kustomization.go index 0dc9f72d..9ce5381a 100644 --- a/cmd/flux/get_kustomization.go +++ b/cmd/flux/get_kustomization.go @@ -24,7 +24,7 @@ import ( "github.com/spf13/cobra" "k8s.io/apimachinery/pkg/runtime" - kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" + kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" "github.com/fluxcd/flux2/internal/utils" ) diff --git a/cmd/flux/get_receiver.go b/cmd/flux/get_receiver.go index 0123b664..b20cab9b 100644 --- a/cmd/flux/get_receiver.go +++ b/cmd/flux/get_receiver.go @@ -24,7 +24,7 @@ import ( "github.com/spf13/cobra" "k8s.io/apimachinery/pkg/runtime" - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" + notificationv1 "github.com/fluxcd/notification-controller/api/v1" ) var getReceiverCmd = &cobra.Command{ diff --git a/cmd/flux/get_source_all.go b/cmd/flux/get_source_all.go index ac6560fe..abae5ca8 100644 --- a/cmd/flux/get_source_all.go +++ b/cmd/flux/get_source_all.go @@ -21,7 +21,8 @@ import ( "github.com/spf13/cobra" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + sourcev1 "github.com/fluxcd/source-controller/api/v1" + sourcev1b2 "github.com/fluxcd/source-controller/api/v1beta2" ) var getSourceAllCmd = &cobra.Command{ @@ -42,11 +43,11 @@ var getSourceAllCmd = &cobra.Command{ var allSourceCmd = []getCommand{ { apiType: ociRepositoryType, - list: &ociRepositoryListAdapter{&sourcev1.OCIRepositoryList{}}, + list: &ociRepositoryListAdapter{&sourcev1b2.OCIRepositoryList{}}, }, { apiType: bucketType, - list: &bucketListAdapter{&sourcev1.BucketList{}}, + list: &bucketListAdapter{&sourcev1b2.BucketList{}}, }, { apiType: gitRepositoryType, @@ -54,11 +55,11 @@ var getSourceAllCmd = &cobra.Command{ }, { apiType: helmRepositoryType, - list: &helmRepositoryListAdapter{&sourcev1.HelmRepositoryList{}}, + list: &helmRepositoryListAdapter{&sourcev1b2.HelmRepositoryList{}}, }, { apiType: helmChartType, - list: &helmChartListAdapter{&sourcev1.HelmChartList{}}, + list: &helmChartListAdapter{&sourcev1b2.HelmChartList{}}, }, } diff --git a/cmd/flux/get_source_git.go b/cmd/flux/get_source_git.go index 5df1b907..623da707 100644 --- a/cmd/flux/get_source_git.go +++ b/cmd/flux/get_source_git.go @@ -24,7 +24,7 @@ import ( "github.com/spf13/cobra" "k8s.io/apimachinery/pkg/runtime" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + sourcev1 "github.com/fluxcd/source-controller/api/v1" "github.com/fluxcd/flux2/internal/utils" ) diff --git a/cmd/flux/kustomization.go b/cmd/flux/kustomization.go index 0c13f7f5..56e6abc5 100644 --- a/cmd/flux/kustomization.go +++ b/cmd/flux/kustomization.go @@ -19,7 +19,7 @@ package main import ( "sigs.k8s.io/controller-runtime/pkg/client" - kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" + kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" ) // kustomizev1.Kustomization diff --git a/cmd/flux/list_artifact.go b/cmd/flux/list_artifact.go index fc72c32b..f2b2f75c 100644 --- a/cmd/flux/list_artifact.go +++ b/cmd/flux/list_artifact.go @@ -20,13 +20,13 @@ import ( "context" "fmt" - "github.com/fluxcd/flux2/internal/flags" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" "github.com/spf13/cobra" + "github.com/fluxcd/flux2/pkg/printers" oci "github.com/fluxcd/pkg/oci/client" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" - "github.com/fluxcd/flux2/pkg/printers" + "github.com/fluxcd/flux2/internal/flags" ) type listArtifactFlags struct { diff --git a/cmd/flux/receiver.go b/cmd/flux/receiver.go index f97bcb19..428f8378 100644 --- a/cmd/flux/receiver.go +++ b/cmd/flux/receiver.go @@ -19,7 +19,7 @@ package main import ( "sigs.k8s.io/controller-runtime/pkg/client" - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" + notificationv1 "github.com/fluxcd/notification-controller/api/v1" ) // notificationv1.Receiver diff --git a/cmd/flux/reconcile.go b/cmd/flux/reconcile.go index 7c41fee9..6221e117 100644 --- a/cmd/flux/reconcile.go +++ b/cmd/flux/reconcile.go @@ -30,7 +30,8 @@ import ( "k8s.io/client-go/util/retry" "sigs.k8s.io/controller-runtime/pkg/client" - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" + notificationv1 "github.com/fluxcd/notification-controller/api/v1" + notificationv1b2 "github.com/fluxcd/notification-controller/api/v1beta2" "github.com/fluxcd/pkg/apis/meta" "github.com/fluxcd/flux2/internal/utils" @@ -111,7 +112,7 @@ func (reconcile reconcileCommand) run(cmd *cobra.Command, args []string) error { } logger.Successf("%s annotated", reconcile.kind) - if reconcile.kind == notificationv1.AlertKind || reconcile.kind == notificationv1.ReceiverKind { + if reconcile.kind == notificationv1b2.AlertKind || reconcile.kind == notificationv1.ReceiverKind { if err = wait.PollImmediate(rootArgs.pollInterval, rootArgs.timeout, isReconcileReady(ctx, kubeClient, namespacedName, reconcile.object)); err != nil { return err diff --git a/cmd/flux/reconcile_helmrelease.go b/cmd/flux/reconcile_helmrelease.go index 1a513369..2433dd09 100644 --- a/cmd/flux/reconcile_helmrelease.go +++ b/cmd/flux/reconcile_helmrelease.go @@ -21,7 +21,8 @@ import ( "k8s.io/apimachinery/pkg/types" helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + sourcev1 "github.com/fluxcd/source-controller/api/v1" + sourcev1b2 "github.com/fluxcd/source-controller/api/v1beta2" ) var reconcileHrCmd = &cobra.Command{ @@ -65,20 +66,20 @@ func (obj helmReleaseAdapter) reconcileSource() bool { func (obj helmReleaseAdapter) getSource() (reconcileCommand, types.NamespacedName) { var cmd reconcileCommand switch obj.Spec.Chart.Spec.SourceRef.Kind { - case sourcev1.HelmRepositoryKind: + case sourcev1b2.HelmRepositoryKind: cmd = reconcileCommand{ apiType: helmRepositoryType, - object: helmRepositoryAdapter{&sourcev1.HelmRepository{}}, + object: helmRepositoryAdapter{&sourcev1b2.HelmRepository{}}, } case sourcev1.GitRepositoryKind: cmd = reconcileCommand{ apiType: gitRepositoryType, object: gitRepositoryAdapter{&sourcev1.GitRepository{}}, } - case sourcev1.BucketKind: + case sourcev1b2.BucketKind: cmd = reconcileCommand{ apiType: bucketType, - object: bucketAdapter{&sourcev1.Bucket{}}, + object: bucketAdapter{&sourcev1b2.Bucket{}}, } } diff --git a/cmd/flux/reconcile_kustomization.go b/cmd/flux/reconcile_kustomization.go index cdc6e7ac..7396091b 100644 --- a/cmd/flux/reconcile_kustomization.go +++ b/cmd/flux/reconcile_kustomization.go @@ -20,8 +20,9 @@ import ( "github.com/spf13/cobra" "k8s.io/apimachinery/pkg/types" - kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" + sourcev1 "github.com/fluxcd/source-controller/api/v1" + sourcev1b2 "github.com/fluxcd/source-controller/api/v1beta2" ) var reconcileKsCmd = &cobra.Command{ @@ -65,20 +66,20 @@ func (obj kustomizationAdapter) reconcileSource() bool { func (obj kustomizationAdapter) getSource() (reconcileCommand, types.NamespacedName) { var cmd reconcileCommand switch obj.Spec.SourceRef.Kind { - case sourcev1.OCIRepositoryKind: + case sourcev1b2.OCIRepositoryKind: cmd = reconcileCommand{ apiType: ociRepositoryType, - object: ociRepositoryAdapter{&sourcev1.OCIRepository{}}, + object: ociRepositoryAdapter{&sourcev1b2.OCIRepository{}}, } case sourcev1.GitRepositoryKind: cmd = reconcileCommand{ apiType: gitRepositoryType, object: gitRepositoryAdapter{&sourcev1.GitRepository{}}, } - case sourcev1.BucketKind: + case sourcev1b2.BucketKind: cmd = reconcileCommand{ apiType: bucketType, - object: bucketAdapter{&sourcev1.Bucket{}}, + object: bucketAdapter{&sourcev1b2.Bucket{}}, } } diff --git a/cmd/flux/reconcile_receiver.go b/cmd/flux/reconcile_receiver.go index 4c43f80f..cb415627 100644 --- a/cmd/flux/reconcile_receiver.go +++ b/cmd/flux/reconcile_receiver.go @@ -25,7 +25,7 @@ import ( "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/wait" - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" + notificationv1 "github.com/fluxcd/notification-controller/api/v1" "github.com/fluxcd/pkg/apis/meta" "github.com/fluxcd/flux2/internal/utils" diff --git a/cmd/flux/reconcile_source_git.go b/cmd/flux/reconcile_source_git.go index 375291ed..a42cd7b9 100644 --- a/cmd/flux/reconcile_source_git.go +++ b/cmd/flux/reconcile_source_git.go @@ -21,7 +21,7 @@ import ( "github.com/spf13/cobra" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + sourcev1 "github.com/fluxcd/source-controller/api/v1" ) var reconcileSourceGitCmd = &cobra.Command{ diff --git a/cmd/flux/resume_kustomization.go b/cmd/flux/resume_kustomization.go index b1ac2072..fb8da244 100644 --- a/cmd/flux/resume_kustomization.go +++ b/cmd/flux/resume_kustomization.go @@ -21,7 +21,7 @@ import ( "github.com/spf13/cobra" - kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" + kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" ) var resumeKsCmd = &cobra.Command{ diff --git a/cmd/flux/resume_receiver.go b/cmd/flux/resume_receiver.go index 1aa8993d..eef0d1e0 100644 --- a/cmd/flux/resume_receiver.go +++ b/cmd/flux/resume_receiver.go @@ -19,7 +19,7 @@ package main import ( "github.com/spf13/cobra" - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" + notificationv1 "github.com/fluxcd/notification-controller/api/v1" ) var resumeReceiverCmd = &cobra.Command{ diff --git a/cmd/flux/resume_source_git.go b/cmd/flux/resume_source_git.go index 05a9a095..00655285 100644 --- a/cmd/flux/resume_source_git.go +++ b/cmd/flux/resume_source_git.go @@ -19,7 +19,7 @@ package main import ( "github.com/spf13/cobra" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + sourcev1 "github.com/fluxcd/source-controller/api/v1" ) var resumeSourceGitCmd = &cobra.Command{ diff --git a/cmd/flux/source.go b/cmd/flux/source.go index 4177c159..7dc96fdf 100644 --- a/cmd/flux/source.go +++ b/cmd/flux/source.go @@ -19,7 +19,8 @@ package main import ( "sigs.k8s.io/controller-runtime/pkg/client" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + sourcev1 "github.com/fluxcd/source-controller/api/v1" + sourcev1b2 "github.com/fluxcd/source-controller/api/v1beta2" ) // These are general-purpose adapters for attaching methods to, for @@ -29,13 +30,13 @@ import ( // sourcev1.ociRepository var ociRepositoryType = apiType{ - kind: sourcev1.OCIRepositoryKind, + kind: sourcev1b2.OCIRepositoryKind, humanKind: "source oci", - groupVersion: sourcev1.GroupVersion, + groupVersion: sourcev1b2.GroupVersion, } type ociRepositoryAdapter struct { - *sourcev1.OCIRepository + *sourcev1b2.OCIRepository } func (a ociRepositoryAdapter) asClientObject() client.Object { @@ -46,10 +47,10 @@ func (a ociRepositoryAdapter) deepCopyClientObject() client.Object { return a.OCIRepository.DeepCopy() } -// sourcev1.OCIRepositoryList +// sourcev1b2.OCIRepositoryList type ociRepositoryListAdapter struct { - *sourcev1.OCIRepositoryList + *sourcev1b2.OCIRepositoryList } func (a ociRepositoryListAdapter) asClientList() client.ObjectList { @@ -60,16 +61,16 @@ func (a ociRepositoryListAdapter) len() int { return len(a.OCIRepositoryList.Items) } -// sourcev1.Bucket +// sourcev1b2.Bucket var bucketType = apiType{ - kind: sourcev1.BucketKind, + kind: sourcev1b2.BucketKind, humanKind: "source bucket", - groupVersion: sourcev1.GroupVersion, + groupVersion: sourcev1b2.GroupVersion, } type bucketAdapter struct { - *sourcev1.Bucket + *sourcev1b2.Bucket } func (a bucketAdapter) asClientObject() client.Object { @@ -80,10 +81,10 @@ func (a bucketAdapter) deepCopyClientObject() client.Object { return a.Bucket.DeepCopy() } -// sourcev1.BucketList +// sourcev1b2.BucketList type bucketListAdapter struct { - *sourcev1.BucketList + *sourcev1b2.BucketList } func (a bucketListAdapter) asClientList() client.ObjectList { @@ -94,16 +95,16 @@ func (a bucketListAdapter) len() int { return len(a.BucketList.Items) } -// sourcev1.HelmChart +// sourcev1b2.HelmChart var helmChartType = apiType{ - kind: sourcev1.HelmChartKind, + kind: sourcev1b2.HelmChartKind, humanKind: "source chart", - groupVersion: sourcev1.GroupVersion, + groupVersion: sourcev1b2.GroupVersion, } type helmChartAdapter struct { - *sourcev1.HelmChart + *sourcev1b2.HelmChart } func (a helmChartAdapter) asClientObject() client.Object { @@ -114,10 +115,10 @@ func (a helmChartAdapter) deepCopyClientObject() client.Object { return a.HelmChart.DeepCopy() } -// sourcev1.HelmChartList +// sourcev1b2.HelmChartList type helmChartListAdapter struct { - *sourcev1.HelmChartList + *sourcev1b2.HelmChartList } func (a helmChartListAdapter) asClientList() client.ObjectList { @@ -162,16 +163,16 @@ func (a gitRepositoryListAdapter) len() int { return len(a.GitRepositoryList.Items) } -// sourcev1.HelmRepository +// sourcev1b2.HelmRepository var helmRepositoryType = apiType{ - kind: sourcev1.HelmRepositoryKind, + kind: sourcev1b2.HelmRepositoryKind, humanKind: "source helm", - groupVersion: sourcev1.GroupVersion, + groupVersion: sourcev1b2.GroupVersion, } type helmRepositoryAdapter struct { - *sourcev1.HelmRepository + *sourcev1b2.HelmRepository } func (a helmRepositoryAdapter) asClientObject() client.Object { @@ -182,10 +183,10 @@ func (a helmRepositoryAdapter) deepCopyClientObject() client.Object { return a.HelmRepository.DeepCopy() } -// sourcev1.HelmRepositoryList +// sourcev1b2.HelmRepositoryList type helmRepositoryListAdapter struct { - *sourcev1.HelmRepositoryList + *sourcev1b2.HelmRepositoryList } func (a helmRepositoryListAdapter) asClientList() client.ObjectList { diff --git a/cmd/flux/stats.go b/cmd/flux/stats.go index fa6eb47f..78692fbe 100644 --- a/cmd/flux/stats.go +++ b/cmd/flux/stats.go @@ -19,20 +19,24 @@ package main import ( "context" "fmt" - "github.com/fluxcd/flux2/internal/utils" - "github.com/fluxcd/flux2/pkg/printers" - helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" - autov1 "github.com/fluxcd/image-automation-controller/api/v1beta1" - imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta1" - kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + "github.com/spf13/cobra" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "sigs.k8s.io/cli-utils/pkg/kstatus/status" "sigs.k8s.io/controller-runtime/pkg/client" + + "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/flux2/pkg/printers" + helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" + autov1 "github.com/fluxcd/image-automation-controller/api/v1beta1" + imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta2" + kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" + notificationv1 "github.com/fluxcd/notification-controller/api/v1" + notificationv1b2 "github.com/fluxcd/notification-controller/api/v1beta2" + sourcev1 "github.com/fluxcd/source-controller/api/v1" + sourcev1b2 "github.com/fluxcd/source-controller/api/v1beta2" ) var statsCmd = &cobra.Command{ @@ -76,24 +80,24 @@ func runStatsCmd(cmd *cobra.Command, args []string) error { Group: sourcev1.GroupVersion.Group, }, { - Kind: sourcev1.OCIRepositoryKind, - Version: sourcev1.GroupVersion.Version, - Group: sourcev1.GroupVersion.Group, + Kind: sourcev1b2.OCIRepositoryKind, + Version: sourcev1b2.GroupVersion.Version, + Group: sourcev1b2.GroupVersion.Group, }, { - Kind: sourcev1.HelmRepositoryKind, - Version: sourcev1.GroupVersion.Version, - Group: sourcev1.GroupVersion.Group, + Kind: sourcev1b2.HelmRepositoryKind, + Version: sourcev1b2.GroupVersion.Version, + Group: sourcev1b2.GroupVersion.Group, }, { - Kind: sourcev1.HelmChartKind, - Version: sourcev1.GroupVersion.Version, - Group: sourcev1.GroupVersion.Group, + Kind: sourcev1b2.HelmChartKind, + Version: sourcev1b2.GroupVersion.Version, + Group: sourcev1b2.GroupVersion.Group, }, { - Kind: sourcev1.BucketKind, - Version: sourcev1.GroupVersion.Version, - Group: sourcev1.GroupVersion.Group, + Kind: sourcev1b2.BucketKind, + Version: sourcev1b2.GroupVersion.Version, + Group: sourcev1b2.GroupVersion.Group, }, { Kind: kustomizev1.KustomizationKind, @@ -106,14 +110,14 @@ func runStatsCmd(cmd *cobra.Command, args []string) error { Group: helmv2.GroupVersion.Group, }, { - Kind: notificationv1.AlertKind, - Version: notificationv1.GroupVersion.Version, - Group: notificationv1.GroupVersion.Group, + Kind: notificationv1b2.AlertKind, + Version: notificationv1b2.GroupVersion.Version, + Group: notificationv1b2.GroupVersion.Group, }, { - Kind: notificationv1.ProviderKind, - Version: notificationv1.GroupVersion.Version, - Group: notificationv1.GroupVersion.Group, + Kind: notificationv1b2.ProviderKind, + Version: notificationv1b2.GroupVersion.Version, + Group: notificationv1b2.GroupVersion.Group, }, { Kind: notificationv1.ReceiverKind, diff --git a/cmd/flux/suspend_kustomization.go b/cmd/flux/suspend_kustomization.go index 46d12276..a054a88d 100644 --- a/cmd/flux/suspend_kustomization.go +++ b/cmd/flux/suspend_kustomization.go @@ -19,7 +19,7 @@ package main import ( "github.com/spf13/cobra" - kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" + kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" ) var suspendKsCmd = &cobra.Command{ diff --git a/cmd/flux/suspend_receiver.go b/cmd/flux/suspend_receiver.go index fec5cc88..4480cc50 100644 --- a/cmd/flux/suspend_receiver.go +++ b/cmd/flux/suspend_receiver.go @@ -19,7 +19,7 @@ package main import ( "github.com/spf13/cobra" - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" + notificationv1 "github.com/fluxcd/notification-controller/api/v1" ) var suspendReceiverCmd = &cobra.Command{ diff --git a/cmd/flux/suspend_source_git.go b/cmd/flux/suspend_source_git.go index 19490b10..cf955111 100644 --- a/cmd/flux/suspend_source_git.go +++ b/cmd/flux/suspend_source_git.go @@ -19,7 +19,7 @@ package main import ( "github.com/spf13/cobra" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + sourcev1 "github.com/fluxcd/source-controller/api/v1" ) var suspendSourceGitCmd = &cobra.Command{ diff --git a/cmd/flux/tag_artifact.go b/cmd/flux/tag_artifact.go index 0763b697..f0ca6f5d 100644 --- a/cmd/flux/tag_artifact.go +++ b/cmd/flux/tag_artifact.go @@ -20,11 +20,12 @@ import ( "context" "fmt" - "github.com/fluxcd/flux2/internal/flags" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" "github.com/spf13/cobra" oci "github.com/fluxcd/pkg/oci/client" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + + "github.com/fluxcd/flux2/internal/flags" ) var tagArtifactCmd = &cobra.Command{ diff --git a/cmd/flux/testdata/build-kustomization/podinfo-kustomization.yaml b/cmd/flux/testdata/build-kustomization/podinfo-kustomization.yaml index 72103efe..9f5e3ef3 100644 --- a/cmd/flux/testdata/build-kustomization/podinfo-kustomization.yaml +++ b/cmd/flux/testdata/build-kustomization/podinfo-kustomization.yaml @@ -1,5 +1,5 @@ --- -apiVersion: kustomize.toolkit.fluxcd.io/v1beta2 +apiVersion: kustomize.toolkit.fluxcd.io/v1 kind: Kustomization metadata: name: podinfo diff --git a/cmd/flux/testdata/build-kustomization/podinfo-source.yaml b/cmd/flux/testdata/build-kustomization/podinfo-source.yaml index 745dd650..409482dd 100644 --- a/cmd/flux/testdata/build-kustomization/podinfo-source.yaml +++ b/cmd/flux/testdata/build-kustomization/podinfo-source.yaml @@ -4,7 +4,7 @@ kind: Namespace metadata: name: {{ .fluxns }} --- -apiVersion: source.toolkit.fluxcd.io/v1beta1 +apiVersion: source.toolkit.fluxcd.io/v1 kind: GitRepository metadata: name: podinfo diff --git a/cmd/flux/testdata/create_source_git/export.golden b/cmd/flux/testdata/create_source_git/export.golden index c909bd25..b23aaaab 100644 --- a/cmd/flux/testdata/create_source_git/export.golden +++ b/cmd/flux/testdata/create_source_git/export.golden @@ -1,5 +1,5 @@ --- -apiVersion: source.toolkit.fluxcd.io/v1beta2 +apiVersion: source.toolkit.fluxcd.io/v1 kind: GitRepository metadata: name: podinfo diff --git a/cmd/flux/testdata/create_source_git/source-git-branch-commit.yaml b/cmd/flux/testdata/create_source_git/source-git-branch-commit.yaml index e767a58d..d8ce277e 100644 --- a/cmd/flux/testdata/create_source_git/source-git-branch-commit.yaml +++ b/cmd/flux/testdata/create_source_git/source-git-branch-commit.yaml @@ -1,5 +1,5 @@ --- -apiVersion: source.toolkit.fluxcd.io/v1beta2 +apiVersion: source.toolkit.fluxcd.io/v1 kind: GitRepository metadata: name: podinfo diff --git a/cmd/flux/testdata/create_source_git/source-git-branch.yaml b/cmd/flux/testdata/create_source_git/source-git-branch.yaml index 8d4ea097..ecf12ef2 100644 --- a/cmd/flux/testdata/create_source_git/source-git-branch.yaml +++ b/cmd/flux/testdata/create_source_git/source-git-branch.yaml @@ -1,5 +1,5 @@ --- -apiVersion: source.toolkit.fluxcd.io/v1beta2 +apiVersion: source.toolkit.fluxcd.io/v1 kind: GitRepository metadata: name: podinfo diff --git a/cmd/flux/testdata/create_source_git/source-git-commit.yaml b/cmd/flux/testdata/create_source_git/source-git-commit.yaml index 4600b3cd..87e0a733 100644 --- a/cmd/flux/testdata/create_source_git/source-git-commit.yaml +++ b/cmd/flux/testdata/create_source_git/source-git-commit.yaml @@ -1,5 +1,5 @@ --- -apiVersion: source.toolkit.fluxcd.io/v1beta2 +apiVersion: source.toolkit.fluxcd.io/v1 kind: GitRepository metadata: name: podinfo diff --git a/cmd/flux/testdata/create_source_git/source-git-refname.yaml b/cmd/flux/testdata/create_source_git/source-git-refname.yaml index ce45f216..0009c36b 100644 --- a/cmd/flux/testdata/create_source_git/source-git-refname.yaml +++ b/cmd/flux/testdata/create_source_git/source-git-refname.yaml @@ -1,5 +1,5 @@ --- -apiVersion: source.toolkit.fluxcd.io/v1beta2 +apiVersion: source.toolkit.fluxcd.io/v1 kind: GitRepository metadata: name: podinfo diff --git a/cmd/flux/testdata/create_source_git/source-git-semver.yaml b/cmd/flux/testdata/create_source_git/source-git-semver.yaml index f5162811..3fdbb7e4 100644 --- a/cmd/flux/testdata/create_source_git/source-git-semver.yaml +++ b/cmd/flux/testdata/create_source_git/source-git-semver.yaml @@ -1,5 +1,5 @@ --- -apiVersion: source.toolkit.fluxcd.io/v1beta2 +apiVersion: source.toolkit.fluxcd.io/v1 kind: GitRepository metadata: name: podinfo diff --git a/cmd/flux/testdata/create_source_git/source-git-tag.yaml b/cmd/flux/testdata/create_source_git/source-git-tag.yaml index b550fd84..6ea46324 100644 --- a/cmd/flux/testdata/create_source_git/source-git-tag.yaml +++ b/cmd/flux/testdata/create_source_git/source-git-tag.yaml @@ -1,5 +1,5 @@ --- -apiVersion: source.toolkit.fluxcd.io/v1beta2 +apiVersion: source.toolkit.fluxcd.io/v1 kind: GitRepository metadata: name: podinfo diff --git a/cmd/flux/testdata/export/git-repo.yaml b/cmd/flux/testdata/export/git-repo.yaml index e3a12bcd..58743c74 100644 --- a/cmd/flux/testdata/export/git-repo.yaml +++ b/cmd/flux/testdata/export/git-repo.yaml @@ -1,11 +1,10 @@ --- -apiVersion: source.toolkit.fluxcd.io/v1beta2 +apiVersion: source.toolkit.fluxcd.io/v1 kind: GitRepository metadata: name: flux-system namespace: {{ .fluxns }} spec: - gitImplementation: go-git interval: 5m0s ref: branch: main diff --git a/cmd/flux/testdata/export/ks.yaml b/cmd/flux/testdata/export/ks.yaml index 891f76b5..5130ab8f 100644 --- a/cmd/flux/testdata/export/ks.yaml +++ b/cmd/flux/testdata/export/ks.yaml @@ -1,5 +1,5 @@ --- -apiVersion: kustomize.toolkit.fluxcd.io/v1beta2 +apiVersion: kustomize.toolkit.fluxcd.io/v1 kind: Kustomization metadata: name: flux-system diff --git a/cmd/flux/testdata/export/objects.yaml b/cmd/flux/testdata/export/objects.yaml index b052199d..aa1b6f19 100644 --- a/cmd/flux/testdata/export/objects.yaml +++ b/cmd/flux/testdata/export/objects.yaml @@ -71,7 +71,7 @@ spec: path: ./clusters/my-cluster strategy: Setters --- -apiVersion: source.toolkit.fluxcd.io/v1beta1 +apiVersion: source.toolkit.fluxcd.io/v1 kind: GitRepository metadata: name: flux-system @@ -84,7 +84,7 @@ spec: interval: 5m url: ssh://git@github.com/example/repo --- -apiVersion: kustomize.toolkit.fluxcd.io/v1beta1 +apiVersion: kustomize.toolkit.fluxcd.io/v1 kind: Kustomization metadata: name: flux-system @@ -97,7 +97,7 @@ spec: interval: 5m prune: true --- -apiVersion: notification.toolkit.fluxcd.io/v1beta2 +apiVersion: notification.toolkit.fluxcd.io/v1 kind: Receiver metadata: name: flux-system @@ -114,7 +114,7 @@ spec: name: flux-system namespace: flux-system --- -apiVersion: source.toolkit.fluxcd.io/v1beta1 +apiVersion: source.toolkit.fluxcd.io/v1beta2 kind: HelmRepository metadata: name: flux-system @@ -139,7 +139,7 @@ spec: name: flux-systen namespace: {{ .fluxns }} --- -apiVersion: source.toolkit.fluxcd.io/v1beta1 +apiVersion: source.toolkit.fluxcd.io/v1beta2 kind: Bucket metadata: name: flux-system diff --git a/cmd/flux/testdata/export/receiver.yaml b/cmd/flux/testdata/export/receiver.yaml index e47add3d..2f221390 100644 --- a/cmd/flux/testdata/export/receiver.yaml +++ b/cmd/flux/testdata/export/receiver.yaml @@ -1,5 +1,5 @@ --- -apiVersion: notification.toolkit.fluxcd.io/v1beta2 +apiVersion: notification.toolkit.fluxcd.io/v1 kind: Receiver metadata: name: flux-system @@ -8,6 +8,7 @@ spec: events: - ping - push + interval: 10m0s resources: - kind: GitRepository name: flux-system diff --git a/cmd/flux/testdata/trace/deployment.yaml b/cmd/flux/testdata/trace/deployment.yaml index 32194506..55964a58 100644 --- a/cmd/flux/testdata/trace/deployment.yaml +++ b/cmd/flux/testdata/trace/deployment.yaml @@ -137,7 +137,7 @@ status: status: "True" type: Ready --- -apiVersion: source.toolkit.fluxcd.io/v1beta1 +apiVersion: source.toolkit.fluxcd.io/v1 kind: GitRepository metadata: labels: @@ -146,7 +146,6 @@ metadata: name: flux-system namespace: {{ .fluxns }} spec: - gitImplementation: go-git ref: branch: main secretRef: diff --git a/cmd/flux/testdata/trace/helmrelease-oci.yaml b/cmd/flux/testdata/trace/helmrelease-oci.yaml index b6591960..da9d1d47 100644 --- a/cmd/flux/testdata/trace/helmrelease-oci.yaml +++ b/cmd/flux/testdata/trace/helmrelease-oci.yaml @@ -38,7 +38,7 @@ status: lastAttemptedRevision: 6.3.5 lastAttemptedValuesChecksum: c31db75d05b7515eba2eef47bd71038c74b2e531 --- -apiVersion: kustomize.toolkit.fluxcd.io/v1beta2 +apiVersion: kustomize.toolkit.fluxcd.io/v1 kind: Kustomization metadata: name: infrastructure diff --git a/cmd/flux/testdata/trace/helmrelease.yaml b/cmd/flux/testdata/trace/helmrelease.yaml index 8a48b9a5..9c626f4a 100644 --- a/cmd/flux/testdata/trace/helmrelease.yaml +++ b/cmd/flux/testdata/trace/helmrelease.yaml @@ -38,7 +38,7 @@ status: lastAttemptedRevision: 6.3.5 lastAttemptedValuesChecksum: c31db75d05b7515eba2eef47bd71038c74b2e531 --- -apiVersion: kustomize.toolkit.fluxcd.io/v1beta1 +apiVersion: kustomize.toolkit.fluxcd.io/v1 kind: Kustomization metadata: name: infrastructure @@ -60,7 +60,7 @@ status: type: Ready lastAppliedRevision: main@sha1:696f056df216eea4f9401adbee0ff744d4df390f --- -apiVersion: source.toolkit.fluxcd.io/v1beta1 +apiVersion: source.toolkit.fluxcd.io/v1 kind: GitRepository metadata: labels: @@ -69,7 +69,6 @@ metadata: name: flux-system namespace: {{ .fluxns }} spec: - gitImplementation: go-git ref: branch: main secretRef: diff --git a/cmd/flux/testdata/tree/kustomizations.yaml b/cmd/flux/testdata/tree/kustomizations.yaml index 3c471b20..98a619e9 100644 --- a/cmd/flux/testdata/tree/kustomizations.yaml +++ b/cmd/flux/testdata/tree/kustomizations.yaml @@ -4,7 +4,7 @@ kind: Namespace metadata: name: {{ .fluxns }} --- -apiVersion: kustomize.toolkit.fluxcd.io/v1beta2 +apiVersion: kustomize.toolkit.fluxcd.io/v1 kind: Kustomization metadata: name: flux-system @@ -40,7 +40,7 @@ status: - id: {{ .fluxns }}_flux-system_source.toolkit.fluxcd.io_GitRepository v: v1beta1 --- -apiVersion: kustomize.toolkit.fluxcd.io/v1beta2 +apiVersion: kustomize.toolkit.fluxcd.io/v1 kind: Kustomization metadata: name: infrastructure @@ -66,7 +66,7 @@ status: - id: cert-manager_cert-manager_source.toolkit.fluxcd.io_HelmRepository v: v1beta1 --- -apiVersion: kustomize.toolkit.fluxcd.io/v1beta2 +apiVersion: kustomize.toolkit.fluxcd.io/v1 kind: Kustomization metadata: name: empty diff --git a/cmd/flux/trace.go b/cmd/flux/trace.go index 1a9e0acd..8a5dd02b 100644 --- a/cmd/flux/trace.go +++ b/cmd/flux/trace.go @@ -35,10 +35,11 @@ import ( "github.com/fluxcd/flux2/internal/utils" helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" - kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" + kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" fluxmeta "github.com/fluxcd/pkg/apis/meta" "github.com/fluxcd/pkg/oci" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + sourcev1 "github.com/fluxcd/source-controller/api/v1" + sourcev1b2 "github.com/fluxcd/source-controller/api/v1beta2" ) var traceCmd = &cobra.Command{ @@ -221,7 +222,7 @@ func traceKustomization(ctx context.Context, kubeClient client.Client, ksName ty ksReady := meta.FindStatusCondition(ks.Status.Conditions, fluxmeta.ReadyCondition) var gitRepository *sourcev1.GitRepository - var ociRepository *sourcev1.OCIRepository + var ociRepository *sourcev1b2.OCIRepository var ksRepositoryReady *metav1.Condition switch ks.Spec.SourceRef.Kind { case sourcev1.GitRepositoryKind: @@ -238,8 +239,8 @@ func traceKustomization(ctx context.Context, kubeClient client.Client, ksName ty return "", fmt.Errorf("failed to find GitRepository: %w", err) } ksRepositoryReady = meta.FindStatusCondition(gitRepository.Status.Conditions, fluxmeta.ReadyCondition) - case sourcev1.OCIRepositoryKind: - ociRepository = &sourcev1.OCIRepository{} + case sourcev1b2.OCIRepositoryKind: + ociRepository = &sourcev1b2.OCIRepository{} sourceNamespace := ks.Namespace if ks.Spec.SourceRef.Namespace != "" { sourceNamespace = ks.Spec.SourceRef.Namespace @@ -346,7 +347,7 @@ Status: Unknown Kustomization *kustomizev1.Kustomization KustomizationReady *metav1.Condition GitRepository *sourcev1.GitRepository - OCIRepository *sourcev1.OCIRepository + OCIRepository *sourcev1b2.OCIRepository RepositoryReady *metav1.Condition Annotations map[string]string }{ @@ -386,10 +387,10 @@ func traceHelm(ctx context.Context, kubeClient client.Client, hrName types.Names } hrReady := meta.FindStatusCondition(hr.Status.Conditions, fluxmeta.ReadyCondition) - var hrChart *sourcev1.HelmChart + var hrChart *sourcev1b2.HelmChart var hrChartReady *metav1.Condition if chart := hr.Status.HelmChart; chart != "" { - hrChart = &sourcev1.HelmChart{} + hrChart = &sourcev1b2.HelmChart{} err = kubeClient.Get(ctx, utils.ParseNamespacedName(chart), hrChart) if err != nil { return "", fmt.Errorf("failed to find HelmChart: %w", err) @@ -415,10 +416,10 @@ func traceHelm(ctx context.Context, kubeClient client.Client, hrName types.Names hrGitRepositoryReady = meta.FindStatusCondition(hrGitRepository.Status.Conditions, fluxmeta.ReadyCondition) } - var hrHelmRepository *sourcev1.HelmRepository + var hrHelmRepository *sourcev1b2.HelmRepository var hrHelmRepositoryReady *metav1.Condition - if hr.Spec.Chart.Spec.SourceRef.Kind == sourcev1.HelmRepositoryKind { - hrHelmRepository = &sourcev1.HelmRepository{} + if hr.Spec.Chart.Spec.SourceRef.Kind == sourcev1b2.HelmRepositoryKind { + hrHelmRepository = &sourcev1b2.HelmRepository{} sourceNamespace := hr.Namespace if hr.Spec.Chart.Spec.SourceRef.Namespace != "" { sourceNamespace = hr.Spec.Chart.Spec.SourceRef.Namespace @@ -520,11 +521,11 @@ Status: Unknown ObjectNamespace string HelmRelease *helmv2.HelmRelease HelmReleaseReady *metav1.Condition - HelmChart *sourcev1.HelmChart + HelmChart *sourcev1b2.HelmChart HelmChartReady *metav1.Condition GitRepository *sourcev1.GitRepository GitRepositoryReady *metav1.Condition - HelmRepository *sourcev1.HelmRepository + HelmRepository *sourcev1b2.HelmRepository HelmRepositoryReady *metav1.Condition }{ ObjectName: obj.GetKind() + "/" + obj.GetName(), diff --git a/cmd/flux/tree_kustomization.go b/cmd/flux/tree_kustomization.go index 3d9bc370..7fcae1c4 100644 --- a/cmd/flux/tree_kustomization.go +++ b/cmd/flux/tree_kustomization.go @@ -36,7 +36,7 @@ import ( "sigs.k8s.io/yaml" helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" - kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" + kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" "github.com/fluxcd/pkg/ssa" "github.com/fluxcd/flux2/internal/tree" diff --git a/go.mod b/go.mod index fb0a6866..a2783499 100644 --- a/go.mod +++ b/go.mod @@ -18,7 +18,7 @@ require ( github.com/fluxcd/pkg/apis/meta v1.0.0 github.com/fluxcd/pkg/git v0.11.0 github.com/fluxcd/pkg/git/gogit v0.8.1 - github.com/fluxcd/pkg/kustomize v0.13.2 + github.com/fluxcd/pkg/kustomize v0.14.0 github.com/fluxcd/pkg/oci v0.21.1 github.com/fluxcd/pkg/runtime v0.31.0 github.com/fluxcd/pkg/sourceignore v0.3.2 diff --git a/go.sum b/go.sum index c1d1f6f2..dca062b6 100644 --- a/go.sum +++ b/go.sum @@ -222,8 +222,8 @@ github.com/fluxcd/pkg/git v0.11.0/go.mod h1:VHRVlrZMHNoWBlaSAWxlGH6Vwlb9VRazUhPU github.com/fluxcd/pkg/git/gogit v0.8.1 h1:Q3EV2WBX6HiXSmsHyrwFzwl82gO4ZtFwb675iQPWwVc= github.com/fluxcd/pkg/git/gogit v0.8.1/go.mod h1:5M27gCl0gyo6l+ht9HwZSzimPY3LahKVIJ7/1vCCctg= github.com/fluxcd/pkg/gittestserver v0.8.1 h1:FMqnZBuS/11+9NhtLv9UAg+wm/v0Nf+hHeUOi2wJR3Q= -github.com/fluxcd/pkg/kustomize v0.13.2 h1:isA9yi+m7sSIxdTrFR1U7+LyS2BraG07ZkKLHw3bnGo= -github.com/fluxcd/pkg/kustomize v0.13.2/go.mod h1:1H9qednPxL/JvZE5at/f6wVHTH4WmxJYqfgVOZJ3uAk= +github.com/fluxcd/pkg/kustomize v0.14.0 h1:XsvGTRsTMlW5u3+ciNChzp3c755SXG5PiCozjyLQYX0= +github.com/fluxcd/pkg/kustomize v0.14.0/go.mod h1:1PmtFOgx3Rn7uoB5C1NVbb0DxXPdY3v0lBX3L9ozCZw= github.com/fluxcd/pkg/oci v0.21.1 h1:9kn19wkabE2xB77NRlOtMJlSYhZmUjdloZCzlHdAS6s= github.com/fluxcd/pkg/oci v0.21.1/go.mod h1:9E2DBlQII7YmeWt2ieTh38wwkiBqx3yg5NEJ51uefaA= github.com/fluxcd/pkg/runtime v0.31.0 h1:addyXaANHl/A68bEjCbiR4HzcFKgfXv1eaG7B7ZHxOo= diff --git a/internal/build/build.go b/internal/build/build.go index 04befbc0..0c6baf77 100644 --- a/internal/build/build.go +++ b/internal/build/build.go @@ -40,7 +40,7 @@ import ( "sigs.k8s.io/kustomize/api/resource" "sigs.k8s.io/kustomize/kyaml/yaml" - kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" + kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" "github.com/fluxcd/pkg/kustomize" runclient "github.com/fluxcd/pkg/runtime/client" "sigs.k8s.io/kustomize/kyaml/filesys" diff --git a/internal/build/diff.go b/internal/build/diff.go index 4acd98a9..d81e22b6 100644 --- a/internal/build/diff.go +++ b/internal/build/diff.go @@ -42,7 +42,7 @@ import ( "github.com/fluxcd/pkg/ssa" "github.com/fluxcd/flux2/pkg/printers" - kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" + kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" ) func (b *Builder) Manager() (*ssa.ResourceManager, error) { diff --git a/internal/build/testdata/local-kustomization/different-name.yaml b/internal/build/testdata/local-kustomization/different-name.yaml index d2c675e8..03ea661f 100644 --- a/internal/build/testdata/local-kustomization/different-name.yaml +++ b/internal/build/testdata/local-kustomization/different-name.yaml @@ -1,4 +1,4 @@ -apiVersion: kustomize.toolkit.fluxcd.io/v1beta2 +apiVersion: kustomize.toolkit.fluxcd.io/v1 kind: Kustomization metadata: name: infra diff --git a/internal/build/testdata/local-kustomization/multi-doc-valid.yaml b/internal/build/testdata/local-kustomization/multi-doc-valid.yaml index d5928463..0fb89db9 100644 --- a/internal/build/testdata/local-kustomization/multi-doc-valid.yaml +++ b/internal/build/testdata/local-kustomization/multi-doc-valid.yaml @@ -1,5 +1,5 @@ --- -apiVersion: kustomize.toolkit.fluxcd.io/v1beta2 +apiVersion: kustomize.toolkit.fluxcd.io/v1 kind: Kustomization metadata: name: infra-namespace @@ -11,7 +11,7 @@ spec: prune: true --- --- -apiVersion: source.toolkit.fluxcd.io/v1beta2 +apiVersion: source.toolkit.fluxcd.io/v1 kind: GitRepository metadata: name: podinfo @@ -22,11 +22,11 @@ spec: branch: master url: https://github.com/stefanprodan/podinfo --- -apiVersion: kustomize.toolkit.fluxcd.io/v1beta2 +apiVersion: kustomize.toolkit.fluxcd.io/v1 kind: Kustomization metadata: name: podinfo namespace: flux-system spec: path: "./clusters/test-build" ---- \ No newline at end of file +--- diff --git a/internal/build/testdata/local-kustomization/no-ns.yaml b/internal/build/testdata/local-kustomization/no-ns.yaml index d7292d24..0253fdd6 100644 --- a/internal/build/testdata/local-kustomization/no-ns.yaml +++ b/internal/build/testdata/local-kustomization/no-ns.yaml @@ -1,4 +1,4 @@ -apiVersion: kustomize.toolkit.fluxcd.io/v1beta2 +apiVersion: kustomize.toolkit.fluxcd.io/v1 kind: Kustomization metadata: name: podinfo diff --git a/internal/build/testdata/local-kustomization/valid.yaml b/internal/build/testdata/local-kustomization/valid.yaml index 41adab26..48cddf4d 100644 --- a/internal/build/testdata/local-kustomization/valid.yaml +++ b/internal/build/testdata/local-kustomization/valid.yaml @@ -1,4 +1,4 @@ -apiVersion: kustomize.toolkit.fluxcd.io/v1beta2 +apiVersion: kustomize.toolkit.fluxcd.io/v1 kind: Kustomization metadata: name: podinfo diff --git a/internal/utils/utils.go b/internal/utils/utils.go index 8b876bdf..8f25730c 100644 --- a/internal/utils/utils.go +++ b/internal/utils/utils.go @@ -44,12 +44,14 @@ import ( helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" imageautov1 "github.com/fluxcd/image-automation-controller/api/v1beta1" imagereflectv1 "github.com/fluxcd/image-reflector-controller/api/v1beta2" - kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" + kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" + notificationv1 "github.com/fluxcd/notification-controller/api/v1" + notificationv1b2 "github.com/fluxcd/notification-controller/api/v1beta2" "github.com/fluxcd/pkg/apis/meta" runclient "github.com/fluxcd/pkg/runtime/client" "github.com/fluxcd/pkg/version" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + sourcev1 "github.com/fluxcd/source-controller/api/v1" + sourcev1b2 "github.com/fluxcd/source-controller/api/v1beta2" "github.com/fluxcd/flux2/pkg/manifestgen/install" ) @@ -126,10 +128,12 @@ func NewScheme() *apiruntime.Scheme { _ = rbacv1.AddToScheme(scheme) _ = appsv1.AddToScheme(scheme) _ = networkingv1.AddToScheme(scheme) + _ = sourcev1b2.AddToScheme(scheme) _ = sourcev1.AddToScheme(scheme) _ = kustomizev1.AddToScheme(scheme) _ = helmv2.AddToScheme(scheme) _ = notificationv1.AddToScheme(scheme) + _ = notificationv1b2.AddToScheme(scheme) _ = imagereflectv1.AddToScheme(scheme) _ = imageautov1.AddToScheme(scheme) return scheme diff --git a/pkg/bootstrap/bootstrap.go b/pkg/bootstrap/bootstrap.go index e1224d36..ae6a792c 100644 --- a/pkg/bootstrap/bootstrap.go +++ b/pkg/bootstrap/bootstrap.go @@ -30,7 +30,7 @@ import ( "k8s.io/apimachinery/pkg/types" "sigs.k8s.io/controller-runtime/pkg/client" - kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" + kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" "github.com/fluxcd/pkg/apis/meta" sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" diff --git a/pkg/bootstrap/bootstrap_plain_git.go b/pkg/bootstrap/bootstrap_plain_git.go index 17ec48ec..7239ac3e 100644 --- a/pkg/bootstrap/bootstrap_plain_git.go +++ b/pkg/bootstrap/bootstrap_plain_git.go @@ -36,7 +36,7 @@ import ( "sigs.k8s.io/kustomize/api/konfig" "sigs.k8s.io/yaml" - kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" + kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" "github.com/fluxcd/pkg/kustomize/filesys" runclient "github.com/fluxcd/pkg/runtime/client" diff --git a/pkg/manifestgen/sync/sync.go b/pkg/manifestgen/sync/sync.go index 6b7953fc..b24e6085 100644 --- a/pkg/manifestgen/sync/sync.go +++ b/pkg/manifestgen/sync/sync.go @@ -26,9 +26,9 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "sigs.k8s.io/yaml" - kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" + kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" "github.com/fluxcd/pkg/apis/meta" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + sourcev1 "github.com/fluxcd/source-controller/api/v1" "github.com/fluxcd/flux2/pkg/manifestgen" ) diff --git a/pkg/manifestgen/sync/sync_test.go b/pkg/manifestgen/sync/sync_test.go index 2c22d407..1ac3b133 100644 --- a/pkg/manifestgen/sync/sync_test.go +++ b/pkg/manifestgen/sync/sync_test.go @@ -24,8 +24,8 @@ import ( "strings" "testing" - kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" + sourcev1 "github.com/fluxcd/source-controller/api/v1" ) func TestGenerate(t *testing.T) { diff --git a/pkg/uninstall/uninstall.go b/pkg/uninstall/uninstall.go index ce32328b..497e1a72 100644 --- a/pkg/uninstall/uninstall.go +++ b/pkg/uninstall/uninstall.go @@ -33,9 +33,11 @@ import ( helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" autov1 "github.com/fluxcd/image-automation-controller/api/v1beta1" imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta2" - kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" + notificationv1 "github.com/fluxcd/notification-controller/api/v1" + notificationv1b2 "github.com/fluxcd/notification-controller/api/v1beta2" + sourcev1 "github.com/fluxcd/source-controller/api/v1" + sourcev1b2 "github.com/fluxcd/source-controller/api/v1beta2" ) // Components removes all Kubernetes components that are part of Flux excluding the CRDs and namespace. @@ -144,7 +146,7 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client } } { - var list sourcev1.OCIRepositoryList + var list sourcev1b2.OCIRepositoryList if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { for _, r := range list.Items { r.Finalizers = []string{} @@ -158,7 +160,7 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client } } { - var list sourcev1.HelmRepositoryList + var list sourcev1b2.HelmRepositoryList if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { for _, r := range list.Items { r.Finalizers = []string{} @@ -172,7 +174,7 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client } } { - var list sourcev1.HelmChartList + var list sourcev1b2.HelmChartList if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { for _, r := range list.Items { r.Finalizers = []string{} @@ -186,7 +188,7 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client } } { - var list sourcev1.BucketList + var list sourcev1b2.BucketList if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { for _, r := range list.Items { r.Finalizers = []string{} @@ -228,7 +230,7 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client } } { - var list notificationv1.AlertList + var list notificationv1b2.AlertList if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { for _, r := range list.Items { r.Finalizers = []string{} @@ -242,7 +244,7 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client } } { - var list notificationv1.ProviderList + var list notificationv1b2.ProviderList if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { for _, r := range list.Items { r.Finalizers = []string{} diff --git a/tests/azure/azure_test.go b/tests/azure/azure_test.go index 5a20e94a..781ef77d 100644 --- a/tests/azure/azure_test.go +++ b/tests/azure/azure_test.go @@ -51,8 +51,9 @@ import ( "github.com/fluxcd/go-git/v5/plumbing" automationv1beta1 "github.com/fluxcd/image-automation-controller/api/v1beta1" reflectorv1beta2 "github.com/fluxcd/image-reflector-controller/api/v1beta2" - kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" - notiv1beta1 "github.com/fluxcd/notification-controller/api/v1beta2" + kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" + notiv1 "github.com/fluxcd/notification-controller/api/v1" + notiv1beta2 "github.com/fluxcd/notification-controller/api/v1beta2" eventv1 "github.com/fluxcd/pkg/apis/event/v1beta1" "github.com/fluxcd/pkg/apis/meta" sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" @@ -678,14 +679,14 @@ func TestAzureDevOpsCommitStatus(t *testing.T) { } return nil }) - provider := notiv1beta1.Provider{ + provider := notiv1beta2.Provider{ ObjectMeta: metav1.ObjectMeta{ Name: "azuredevops", Namespace: name, }, } _, err = controllerutil.CreateOrUpdate(ctx, cfg.kubeClient, &provider, func() error { - provider.Spec = notiv1beta1.ProviderSpec{ + provider.Spec = notiv1beta2.ProviderSpec{ Type: "azuredevops", Address: repoUrl, SecretRef: &meta.LocalObjectReference{ @@ -695,18 +696,18 @@ func TestAzureDevOpsCommitStatus(t *testing.T) { return nil }) require.NoError(t, err) - alert := notiv1beta1.Alert{ + alert := notiv1beta2.Alert{ ObjectMeta: metav1.ObjectMeta{ Name: "azuredevops", Namespace: name, }, } _, err = controllerutil.CreateOrUpdate(ctx, cfg.kubeClient, &alert, func() error { - alert.Spec = notiv1beta1.AlertSpec{ + alert.Spec = notiv1beta2.AlertSpec{ ProviderRef: meta.LocalObjectReference{ Name: provider.Name, }, - EventSources: []notiv1beta1.CrossNamespaceObjectReference{ + EventSources: []notiv1.CrossNamespaceObjectReference{ { Kind: "Kustomization", Name: name, @@ -806,14 +807,14 @@ func TestEventHubNotification(t *testing.T) { } return nil }) - provider := notiv1beta1.Provider{ + provider := notiv1beta2.Provider{ ObjectMeta: metav1.ObjectMeta{ Name: name, Namespace: name, }, } _, err = controllerutil.CreateOrUpdate(ctx, cfg.kubeClient, &provider, func() error { - provider.Spec = notiv1beta1.ProviderSpec{ + provider.Spec = notiv1beta2.ProviderSpec{ Type: "azureeventhub", Address: repoUrl, SecretRef: &meta.LocalObjectReference{ @@ -823,18 +824,18 @@ func TestEventHubNotification(t *testing.T) { return nil }) require.NoError(t, err) - alert := notiv1beta1.Alert{ + alert := notiv1beta2.Alert{ ObjectMeta: metav1.ObjectMeta{ Name: name, Namespace: name, }, } _, err = controllerutil.CreateOrUpdate(ctx, cfg.kubeClient, &alert, func() error { - alert.Spec = notiv1beta1.AlertSpec{ + alert.Spec = notiv1beta2.AlertSpec{ ProviderRef: meta.LocalObjectReference{ Name: provider.Name, }, - EventSources: []notiv1beta1.CrossNamespaceObjectReference{ + EventSources: []notiv1.CrossNamespaceObjectReference{ { Kind: "Kustomization", Name: name, diff --git a/tests/azure/go.mod b/tests/azure/go.mod index 719c0ebe..841711bb 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -8,23 +8,23 @@ require ( github.com/fluxcd/helm-controller/api v0.31.2 github.com/fluxcd/image-automation-controller/api v0.31.0 github.com/fluxcd/image-reflector-controller/api v0.26.1 - github.com/fluxcd/kustomize-controller/api v0.35.1 - github.com/fluxcd/notification-controller/api v0.33.0 + github.com/fluxcd/kustomize-controller/api v1.0.0-rc.1 + github.com/fluxcd/notification-controller/api v1.0.0-rc.1 github.com/fluxcd/pkg/apis/event v0.4.1 - github.com/fluxcd/pkg/apis/meta v0.19.1 + github.com/fluxcd/pkg/apis/meta v1.0.0 github.com/fluxcd/pkg/git v0.11.0 github.com/fluxcd/pkg/git/gogit v0.8.1 - github.com/fluxcd/source-controller/api v0.36.1 + github.com/fluxcd/source-controller/api v1.0.0-rc.1 github.com/hashicorp/hc-install v0.5.0 github.com/hashicorp/terraform-exec v0.18.1 github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 github.com/stretchr/testify v1.8.2 github.com/whilp/git-urls v1.0.0 go.uber.org/multierr v1.10.0 - k8s.io/api v0.26.2 - k8s.io/apimachinery v0.26.2 - k8s.io/client-go v0.26.2 - sigs.k8s.io/controller-runtime v0.14.5 + k8s.io/api v0.26.3 + k8s.io/apimachinery v0.26.3 + k8s.io/client-go v0.26.3 + sigs.k8s.io/controller-runtime v0.14.6 ) // Fix CVE-2022-28948 @@ -55,7 +55,7 @@ require ( github.com/emirpasic/gods v1.18.1 // indirect github.com/evanphx/json-patch/v5 v5.6.0 // indirect github.com/fluxcd/pkg/apis/acl v0.1.0 // indirect - github.com/fluxcd/pkg/apis/kustomize v0.8.1 // indirect + github.com/fluxcd/pkg/apis/kustomize v1.0.0 // indirect github.com/fluxcd/pkg/ssh v0.7.3 // indirect github.com/fluxcd/pkg/version v0.2.1 // indirect github.com/go-git/gcfg v1.5.0 // indirect @@ -110,7 +110,7 @@ require ( gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/apiextensions-apiserver v0.26.2 // indirect + k8s.io/apiextensions-apiserver v0.26.3 // indirect k8s.io/klog/v2 v2.80.1 // indirect k8s.io/kube-openapi v0.0.0-20221110221610-a28e98eb7c70 // indirect k8s.io/utils v0.0.0-20221128185143-99ec85e7a448 // indirect diff --git a/tests/azure/go.sum b/tests/azure/go.sum index 8c37b628..2c2308d3 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -142,18 +142,18 @@ github.com/fluxcd/image-automation-controller/api v0.31.0 h1:xA2MXbVpXWAFBCmlaOq github.com/fluxcd/image-automation-controller/api v0.31.0/go.mod h1:kNQ/g5TK0Epwguma2+Y1binRMRZ1d6E2VmZLg2iGkqw= github.com/fluxcd/image-reflector-controller/api v0.26.1 h1:AKfqabDlcouGilX0y+/Wa1R9qwMb6ZlTHD1ELEkK9tw= github.com/fluxcd/image-reflector-controller/api v0.26.1/go.mod h1:xZILku1/O6higkHTW/D3dvte4Ld7kRuZH9r+Rm4p1B0= -github.com/fluxcd/kustomize-controller/api v0.35.1 h1:l7AndDJXVLZcCHmEIRXU9ksWInlP6SjFtHQH1SC7++c= -github.com/fluxcd/kustomize-controller/api v0.35.1/go.mod h1:hrxVOUss0om4mg+ykMYtH4CgLuM2RReSPf0hG9e0b18= -github.com/fluxcd/notification-controller/api v0.33.0 h1:iVnIGDfkpVuzcILSGwi//Q3devCg7E7G4lfDx8vuvsA= -github.com/fluxcd/notification-controller/api v0.33.0/go.mod h1:0IyWy0J6+z1TbijVQjFx1gWQDOzXaRfzV2NClfjHZPk= +github.com/fluxcd/kustomize-controller/api v1.0.0-rc.1 h1:HnPpGw9RhVyE4LsvOOMUcCo4jA+gSfnkM2Xe/vjlpHg= +github.com/fluxcd/kustomize-controller/api v1.0.0-rc.1/go.mod h1:ql/HdV+pGzqnHaU5oNyvYR7lHPWc/me3HUPd4g7A9BI= +github.com/fluxcd/notification-controller/api v1.0.0-rc.1 h1:L6xM9Nvm2icc7SqcUSXYiIY8bTiV73kss5KleaUewts= +github.com/fluxcd/notification-controller/api v1.0.0-rc.1/go.mod h1:bfZCGyWq1SPmZSQSCuHRum5Z1olidWp8UbZkO5kcato= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= github.com/fluxcd/pkg/apis/event v0.4.1 h1:63wP8NM/uA4680F4Ft8q8/0rJivX90i7FmMkRvUI8Is= github.com/fluxcd/pkg/apis/event v0.4.1/go.mod h1:LHT1ZsbMrcHwCHQCaFtQviQBZwhMOAbTUPK6+KgBkFo= -github.com/fluxcd/pkg/apis/kustomize v0.8.1 h1:uRH9xVDJfSBGIiL6PIhkguHvf2Nme6uTWX+RX1iZznc= -github.com/fluxcd/pkg/apis/kustomize v0.8.1/go.mod h1:TBem+2mHp6Ib7XD1fmzDkoUnBzx07wSzIYo6BVx3XAc= -github.com/fluxcd/pkg/apis/meta v0.19.1 h1:fCI5CnTXpAqr67UlaI9q0H+OztMKB5kDTr6xV6vlAo0= -github.com/fluxcd/pkg/apis/meta v0.19.1/go.mod h1:ZPPMYrPnWwPQYNEGM/Uc0N4SurUPS3xNI3IIpCQEfuM= +github.com/fluxcd/pkg/apis/kustomize v1.0.0 h1:5T2b/mRZiGWtP7fvSU8gZOApIc06H6SdLX3MlsE6LRo= +github.com/fluxcd/pkg/apis/kustomize v1.0.0/go.mod h1:XaDYlKxrf9D2zZWcZ0BnSIqGtcm8mdNtJGzZWYjCnQo= +github.com/fluxcd/pkg/apis/meta v1.0.0 h1:i9IGHd/VNEZELX7mepkiYFbJxs2J5znaB4cN9z2nPm8= +github.com/fluxcd/pkg/apis/meta v1.0.0/go.mod h1:04ZdpZYm1x+aL93K4daNHW1UX6E8K7Gyf5za9OhrE+U= github.com/fluxcd/pkg/git v0.11.0 h1:GvB+3QOB8xbF5WNjVrkskseOnsZBuqSOzW3VxfsHuX4= github.com/fluxcd/pkg/git v0.11.0/go.mod h1:VHRVlrZMHNoWBlaSAWxlGH6Vwlb9VRazUhPUykviHwY= github.com/fluxcd/pkg/git/gogit v0.8.1 h1:Q3EV2WBX6HiXSmsHyrwFzwl82gO4ZtFwb675iQPWwVc= @@ -163,8 +163,8 @@ github.com/fluxcd/pkg/ssh v0.7.3 h1:Dhs+nXdp806lBriUJtPyRi0SVIVWbJafJGD/qQ71GiY= github.com/fluxcd/pkg/ssh v0.7.3/go.mod h1:/z5ZNgQz+h9s/2nNFKAcZDHtZRMA1nj5YcriGDUOoLY= github.com/fluxcd/pkg/version v0.2.1 h1:RRH7+6qiWHdTvRNwpoBmilnubJ2C4FZYGgy5wTDVKVc= github.com/fluxcd/pkg/version v0.2.1/go.mod h1:UmUYHDz4BxHQMesMUx3gYVrT2Wf66H49JpTg/PW+/OY= -github.com/fluxcd/source-controller/api v0.36.1 h1:/ul69kJNEwrFG1Cwk2P/GwgraIxOETCL+tP+zMtxTu8= -github.com/fluxcd/source-controller/api v0.36.1/go.mod h1:GktZmd5Dfxo84vPFBdLDl0bBtiJRODfd47uugK0romU= +github.com/fluxcd/source-controller/api v1.0.0-rc.1 h1:MZaP5utClMG95Aw/AVu1l05WEfmpEw/RIlCLnkCQl14= +github.com/fluxcd/source-controller/api v1.0.0-rc.1/go.mod h1:CvGNdS8g/MqwpERUK6aJp4lndsrm+JBzGpoyyZ4u0c8= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= @@ -778,14 +778,14 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -k8s.io/api v0.26.2 h1:dM3cinp3PGB6asOySalOZxEG4CZ0IAdJsrYZXE/ovGQ= -k8s.io/api v0.26.2/go.mod h1:1kjMQsFE+QHPfskEcVNgL3+Hp88B80uj0QtSOlj8itU= -k8s.io/apiextensions-apiserver v0.26.2 h1:/yTG2B9jGY2Q70iGskMf41qTLhL9XeNN2KhI0uDgwko= -k8s.io/apiextensions-apiserver v0.26.2/go.mod h1:Y7UPgch8nph8mGCuVk0SK83LnS8Esf3n6fUBgew8SH8= -k8s.io/apimachinery v0.26.2 h1:da1u3D5wfR5u2RpLhE/ZtZS2P7QvDgLZTi9wrNZl/tQ= -k8s.io/apimachinery v0.26.2/go.mod h1:ats7nN1LExKHvJ9TmwootT00Yz05MuYqPXEXaVeOy5I= -k8s.io/client-go v0.26.2 h1:s1WkVujHX3kTp4Zn4yGNFK+dlDXy1bAAkIl+cFAiuYI= -k8s.io/client-go v0.26.2/go.mod h1:u5EjOuSyBa09yqqyY7m3abZeovO/7D/WehVVlZ2qcqU= +k8s.io/api v0.26.3 h1:emf74GIQMTik01Aum9dPP0gAypL8JTLl/lHa4V9RFSU= +k8s.io/api v0.26.3/go.mod h1:PXsqwPMXBSBcL1lJ9CYDKy7kIReUydukS5JiRlxC3qE= +k8s.io/apiextensions-apiserver v0.26.3 h1:5PGMm3oEzdB1W/FTMgGIDmm100vn7IaUP5er36dB+YE= +k8s.io/apiextensions-apiserver v0.26.3/go.mod h1:jdA5MdjNWGP+njw1EKMZc64xAT5fIhN6VJrElV3sfpQ= +k8s.io/apimachinery v0.26.3 h1:dQx6PNETJ7nODU3XPtrwkfuubs6w7sX0M8n61zHIV/k= +k8s.io/apimachinery v0.26.3/go.mod h1:ats7nN1LExKHvJ9TmwootT00Yz05MuYqPXEXaVeOy5I= +k8s.io/client-go v0.26.3 h1:k1UY+KXfkxV2ScEL3gilKcF7761xkYsSD6BC9szIu8s= +k8s.io/client-go v0.26.3/go.mod h1:ZPNu9lm8/dbRIPAgteN30RSXea6vrCpFvq+MateTUuQ= k8s.io/klog/v2 v2.80.1 h1:atnLQ121W371wYYFawwYx1aEY2eUfs4l3J72wtgAwV4= k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/kube-openapi v0.0.0-20221110221610-a28e98eb7c70 h1:zfqQc1V6/ZgGpvrOVvr62OjiqQX4lZjfznK34NQwkqw= @@ -795,8 +795,8 @@ k8s.io/utils v0.0.0-20221128185143-99ec85e7a448/go.mod h1:OLgZIPagt7ERELqWJFomSt rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/controller-runtime v0.14.5 h1:6xaWFqzT5KuAQ9ufgUaj1G/+C4Y1GRkhrxl+BJ9i+5s= -sigs.k8s.io/controller-runtime v0.14.5/go.mod h1:WqIdsAY6JBsjfc/CqO0CORmNtoCtE4S6qbPc9s68h+0= +sigs.k8s.io/controller-runtime v0.14.6 h1:oxstGVvXGNnMvY7TAESYk+lzr6S3V5VFxQ6d92KcwQA= +sigs.k8s.io/controller-runtime v0.14.6/go.mod h1:WqIdsAY6JBsjfc/CqO0CORmNtoCtE4S6qbPc9s68h+0= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= diff --git a/tests/azure/util_test.go b/tests/azure/util_test.go index f2e8cc31..3ad9a9b7 100644 --- a/tests/azure/util_test.go +++ b/tests/azure/util_test.go @@ -43,14 +43,15 @@ import ( helmv2beta1 "github.com/fluxcd/helm-controller/api/v2beta1" automationv1beta1 "github.com/fluxcd/image-automation-controller/api/v1beta1" reflectorv1beta2 "github.com/fluxcd/image-reflector-controller/api/v1beta2" - kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta2" - notiv1beta1 "github.com/fluxcd/notification-controller/api/v1beta2" + kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" + notiv1 "github.com/fluxcd/notification-controller/api/v1" + notiv1beta2 "github.com/fluxcd/notification-controller/api/v1beta2" "github.com/fluxcd/pkg/apis/meta" "github.com/fluxcd/pkg/git" "github.com/fluxcd/pkg/git/gogit" "github.com/fluxcd/pkg/git/repository" - - sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + sourcev1 "github.com/fluxcd/source-controller/api/v1" + sourcev1b2 "github.com/fluxcd/source-controller/api/v1beta2" ) const defaultBranch = "main" @@ -71,6 +72,10 @@ func getKubernetesCredentials(kubeconfig, aksHost, aksCert, aksKey, aksCa string CAData: []byte(aksCa), }, } + err = sourcev1b2.AddToScheme(scheme.Scheme) + if err != nil { + return "", nil, err + } err = sourcev1.AddToScheme(scheme.Scheme) if err != nil { return "", nil, err @@ -91,7 +96,11 @@ func getKubernetesCredentials(kubeconfig, aksHost, aksCert, aksKey, aksCa string if err != nil { return "", nil, err } - err = notiv1beta1.AddToScheme(scheme.Scheme) + err = notiv1beta2.AddToScheme(scheme.Scheme) + if err != nil { + return "", nil, err + } + err = notiv1.AddToScheme(scheme.Scheme) if err != nil { return "", nil, err } @@ -251,7 +260,6 @@ func setupNamespace(ctx context.Context, kubeClient client.Client, repoUrl, pass Interval: metav1.Duration{ Duration: 1 * time.Minute, }, - GitImplementation: sourcev1.LibGit2Implementation, Reference: &sourcev1.GitRepositoryRef{ Branch: name, }, From e44ab85880a5055f00f8b581eb4f1e4221c343a1 Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Mon, 3 Apr 2023 18:58:51 +0100 Subject: [PATCH 468/818] update testdata yamls Signed-off-by: Somtochi Onyekwere --- cmd/flux/testdata/trace/deployment.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cmd/flux/testdata/trace/deployment.yaml b/cmd/flux/testdata/trace/deployment.yaml index 55964a58..01580dfe 100644 --- a/cmd/flux/testdata/trace/deployment.yaml +++ b/cmd/flux/testdata/trace/deployment.yaml @@ -63,7 +63,7 @@ status: lastAttemptedRevision: 6.3.5 lastAttemptedValuesChecksum: c31db75d05b7515eba2eef47bd71038c74b2e531 --- -apiVersion: source.toolkit.fluxcd.io/v1beta1 +apiVersion: source.toolkit.fluxcd.io/v1beta2 kind: HelmChart metadata: name: podinfo-podinfo @@ -90,7 +90,7 @@ status: type: Ready --- -apiVersion: source.toolkit.fluxcd.io/v1beta1 +apiVersion: source.toolkit.fluxcd.io/v1beta2 kind: HelmRepository metadata: labels: @@ -116,7 +116,7 @@ status: status: "True" type: Ready --- -apiVersion: kustomize.toolkit.fluxcd.io/v1beta1 +apiVersion: kustomize.toolkit.fluxcd.io/v1 kind: Kustomization metadata: name: infrastructure From 2e71c718ce2047c06b7054d9482b1fd99509b21c Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Mon, 3 Apr 2023 19:11:48 +0100 Subject: [PATCH 469/818] update internal flags Signed-off-by: Somtochi Onyekwere --- internal/flags/helm_chart_source.go | 5 +++-- internal/flags/kustomization_source.go | 5 +++-- internal/flags/kustomization_source_test.go | 2 +- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/internal/flags/helm_chart_source.go b/internal/flags/helm_chart_source.go index f257f199..2a910d02 100644 --- a/internal/flags/helm_chart_source.go +++ b/internal/flags/helm_chart_source.go @@ -20,12 +20,13 @@ import ( "fmt" "strings" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + sourcev1 "github.com/fluxcd/source-controller/api/v1" + sourcev1b2 "github.com/fluxcd/source-controller/api/v1beta2" "github.com/fluxcd/flux2/internal/utils" ) -var supportedHelmChartSourceKinds = []string{sourcev1.HelmRepositoryKind, sourcev1.GitRepositoryKind, sourcev1.BucketKind} +var supportedHelmChartSourceKinds = []string{sourcev1b2.HelmRepositoryKind, sourcev1.GitRepositoryKind, sourcev1b2.BucketKind} type HelmChartSource struct { Kind string diff --git a/internal/flags/kustomization_source.go b/internal/flags/kustomization_source.go index f3455b25..6342bf68 100644 --- a/internal/flags/kustomization_source.go +++ b/internal/flags/kustomization_source.go @@ -20,12 +20,13 @@ import ( "fmt" "strings" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + sourcev1 "github.com/fluxcd/source-controller/api/v1" + sourcev1b2 "github.com/fluxcd/source-controller/api/v1beta2" "github.com/fluxcd/flux2/internal/utils" ) -var supportedKustomizationSourceKinds = []string{sourcev1.OCIRepositoryKind, sourcev1.GitRepositoryKind, sourcev1.BucketKind} +var supportedKustomizationSourceKinds = []string{sourcev1b2.OCIRepositoryKind, sourcev1.GitRepositoryKind, sourcev1b2.BucketKind} type KustomizationSource struct { Kind string diff --git a/internal/flags/kustomization_source_test.go b/internal/flags/kustomization_source_test.go index f2a398c4..68b81f54 100644 --- a/internal/flags/kustomization_source_test.go +++ b/internal/flags/kustomization_source_test.go @@ -23,7 +23,7 @@ import ( "fmt" "testing" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + sourcev1 "github.com/fluxcd/source-controller/api/v1" ) func TestKustomizationSource_Set(t *testing.T) { From a296afdd6984b1e7ae6095feb3dc8bf785b9d046 Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Mon, 3 Apr 2023 22:32:41 +0100 Subject: [PATCH 470/818] update azure e2e tests Signed-off-by: Somtochi Onyekwere --- tests/azure/azure_test.go | 2 +- tests/azure/go.mod | 4 ++-- tests/azure/go.sum | 8 ++++---- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/tests/azure/azure_test.go b/tests/azure/azure_test.go index 781ef77d..55124f24 100644 --- a/tests/azure/azure_test.go +++ b/tests/azure/azure_test.go @@ -56,7 +56,7 @@ import ( notiv1beta2 "github.com/fluxcd/notification-controller/api/v1beta2" eventv1 "github.com/fluxcd/pkg/apis/event/v1beta1" "github.com/fluxcd/pkg/apis/meta" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + sourcev1 "github.com/fluxcd/source-controller/api/v1" ) const ( diff --git a/tests/azure/go.mod b/tests/azure/go.mod index 841711bb..98012281 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -5,8 +5,8 @@ go 1.19 require ( github.com/Azure/azure-event-hubs-go/v3 v3.4.0 github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 - github.com/fluxcd/helm-controller/api v0.31.2 - github.com/fluxcd/image-automation-controller/api v0.31.0 + github.com/fluxcd/helm-controller/api v0.32.1 + github.com/fluxcd/image-automation-controller/api v0.32.0 github.com/fluxcd/image-reflector-controller/api v0.26.1 github.com/fluxcd/kustomize-controller/api v1.0.0-rc.1 github.com/fluxcd/notification-controller/api v1.0.0-rc.1 diff --git a/tests/azure/go.sum b/tests/azure/go.sum index 2c2308d3..9262ca2f 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -136,10 +136,10 @@ github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 h1:Gm5sGGk+/Wq6RhX4xpCZ2IqjDp5XkjlhENaAuAlpdKc= github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4/go.mod h1:raWgfUV7lDQVXp4QXUaeNNJkRVKz97UQuF+0kdY7Vmo= -github.com/fluxcd/helm-controller/api v0.31.2 h1:d/lbCPYiQP+YnPNhdIOGRzHUWDIhnxI9dUSaOCx/RK8= -github.com/fluxcd/helm-controller/api v0.31.2/go.mod h1:z9zLN31FjwHhd8RyGsrE4vnRtUp4bz5rXxd1hVX3Waw= -github.com/fluxcd/image-automation-controller/api v0.31.0 h1:xA2MXbVpXWAFBCmlaOqgLtqGfR637aw0PxyyMGaqUTI= -github.com/fluxcd/image-automation-controller/api v0.31.0/go.mod h1:kNQ/g5TK0Epwguma2+Y1binRMRZ1d6E2VmZLg2iGkqw= +github.com/fluxcd/helm-controller/api v0.32.1 h1:b2q0V+cXnqvW24Zy4zY+5Jfn1D3sqBIBTNhbqsD+r9Q= +github.com/fluxcd/helm-controller/api v0.32.1/go.mod h1:xzQgNoaPOg77zFUqvnaX0Fn3lPA3iGDLoz8q4wiEyLA= +github.com/fluxcd/image-automation-controller/api v0.32.0 h1:ABRLN+a8jHuOAETf1o1ohVzxxjYhOXxtJglD5YSMuUM= +github.com/fluxcd/image-automation-controller/api v0.32.0/go.mod h1:DHb9GaPZz5HCgBL3u3PC4XNGcO3rUroE6ayx1PAa0Gs= github.com/fluxcd/image-reflector-controller/api v0.26.1 h1:AKfqabDlcouGilX0y+/Wa1R9qwMb6ZlTHD1ELEkK9tw= github.com/fluxcd/image-reflector-controller/api v0.26.1/go.mod h1:xZILku1/O6higkHTW/D3dvte4Ld7kRuZH9r+Rm4p1B0= github.com/fluxcd/kustomize-controller/api v1.0.0-rc.1 h1:HnPpGw9RhVyE4LsvOOMUcCo4jA+gSfnkM2Xe/vjlpHg= From 52acac1a37cb2f512caca0b919ddfeb7c8808d01 Mon Sep 17 00:00:00 2001 From: Max Jonas Werner Date: Thu, 30 Mar 2023 18:22:07 +0200 Subject: [PATCH 471/818] Add /v2 suffix to module name in preparation of 2.0.0 release Signed-off-by: Max Jonas Werner --- cmd/flux/bootstrap.go | 8 ++++---- cmd/flux/bootstrap_bitbucket_server.go | 16 ++++++++-------- cmd/flux/bootstrap_git.go | 14 +++++++------- cmd/flux/bootstrap_github.go | 16 ++++++++-------- cmd/flux/bootstrap_gitlab.go | 16 ++++++++-------- cmd/flux/build_kustomization.go | 2 +- cmd/flux/check.go | 8 ++++---- cmd/flux/check_test.go | 2 +- cmd/flux/completion.go | 2 +- cmd/flux/create.go | 2 +- cmd/flux/create_alert.go | 2 +- cmd/flux/create_alertprovider.go | 2 +- cmd/flux/create_helmrelease.go | 4 ++-- cmd/flux/create_kustomization.go | 4 ++-- cmd/flux/create_receiver.go | 2 +- cmd/flux/create_secret_git.go | 6 +++--- cmd/flux/create_secret_helm.go | 4 ++-- cmd/flux/create_secret_oci.go | 4 ++-- cmd/flux/create_secret_tls.go | 4 ++-- cmd/flux/create_source_bucket.go | 4 ++-- cmd/flux/create_source_git.go | 6 +++--- cmd/flux/create_source_helm.go | 4 ++-- cmd/flux/create_source_oci.go | 4 ++-- cmd/flux/create_tenant.go | 2 +- cmd/flux/delete.go | 2 +- cmd/flux/diff_artifact.go | 2 +- cmd/flux/diff_kustomization.go | 2 +- cmd/flux/diff_kustomization_test.go | 2 +- cmd/flux/events.go | 4 ++-- cmd/flux/events_test.go | 2 +- cmd/flux/export.go | 2 +- cmd/flux/export_secret.go | 2 +- cmd/flux/get.go | 4 ++-- cmd/flux/get_kustomization.go | 2 +- cmd/flux/get_source_bucket.go | 2 +- cmd/flux/get_source_chart.go | 2 +- cmd/flux/get_source_git.go | 2 +- cmd/flux/get_source_helm.go | 2 +- cmd/flux/get_source_oci.go | 2 +- cmd/flux/install.go | 10 +++++----- cmd/flux/list_artifact.go | 4 ++-- cmd/flux/logs.go | 6 +++--- cmd/flux/main.go | 2 +- cmd/flux/main_e2e_test.go | 2 +- cmd/flux/main_test.go | 2 +- cmd/flux/pull_artifact.go | 2 +- cmd/flux/push_artifact.go | 2 +- cmd/flux/reconcile.go | 2 +- cmd/flux/reconcile_alertprovider.go | 2 +- cmd/flux/reconcile_receiver.go | 2 +- cmd/flux/reconcile_with_source.go | 2 +- cmd/flux/resume.go | 2 +- cmd/flux/stats.go | 4 ++-- cmd/flux/suspend.go | 2 +- cmd/flux/tag_artifact.go | 2 +- cmd/flux/trace.go | 2 +- cmd/flux/tree_kustomization.go | 4 ++-- cmd/flux/uninstall.go | 4 ++-- cmd/flux/version.go | 4 ++-- cmd/flux/version_utils.go | 4 ++-- go.mod | 2 +- internal/build/build.go | 2 +- internal/build/diff.go | 2 +- internal/flags/crds.go | 2 +- internal/flags/decryption_provider.go | 2 +- internal/flags/helm_chart_source.go | 2 +- internal/flags/kustomization_source.go | 2 +- internal/flags/log_level.go | 2 +- internal/flags/source_bucket_provider.go | 2 +- internal/flags/source_oci_provider.go | 2 +- internal/utils/apply.go | 2 +- internal/utils/utils.go | 2 +- pkg/bootstrap/bootstrap.go | 6 +++--- pkg/bootstrap/bootstrap_plain_git.go | 14 +++++++------- pkg/bootstrap/bootstrap_provider.go | 6 +++--- pkg/bootstrap/options.go | 2 +- pkg/manifestgen/install/install.go | 2 +- pkg/manifestgen/install/manifests.go | 2 +- pkg/manifestgen/kustomization/kustomization.go | 2 +- pkg/manifestgen/sourcesecret/sourcesecret.go | 2 +- pkg/manifestgen/sync/sync.go | 2 +- pkg/status/status.go | 2 +- pkg/uninstall/uninstall.go | 4 ++-- 83 files changed, 153 insertions(+), 153 deletions(-) diff --git a/cmd/flux/bootstrap.go b/cmd/flux/bootstrap.go index 09b4ec9d..2441551d 100644 --- a/cmd/flux/bootstrap.go +++ b/cmd/flux/bootstrap.go @@ -23,10 +23,10 @@ import ( "github.com/spf13/cobra" - "github.com/fluxcd/flux2/internal/flags" - "github.com/fluxcd/flux2/internal/utils" - "github.com/fluxcd/flux2/pkg/manifestgen" - "github.com/fluxcd/flux2/pkg/manifestgen/sourcesecret" + "github.com/fluxcd/flux2/v2/internal/flags" + "github.com/fluxcd/flux2/v2/internal/utils" + "github.com/fluxcd/flux2/v2/pkg/manifestgen" + "github.com/fluxcd/flux2/v2/pkg/manifestgen/sourcesecret" ) var bootstrapCmd = &cobra.Command{ diff --git a/cmd/flux/bootstrap_bitbucket_server.go b/cmd/flux/bootstrap_bitbucket_server.go index ee56a32d..40eccca8 100644 --- a/cmd/flux/bootstrap_bitbucket_server.go +++ b/cmd/flux/bootstrap_bitbucket_server.go @@ -26,14 +26,14 @@ import ( "github.com/fluxcd/pkg/git/gogit" "github.com/spf13/cobra" - "github.com/fluxcd/flux2/internal/flags" - "github.com/fluxcd/flux2/internal/utils" - "github.com/fluxcd/flux2/pkg/bootstrap" - "github.com/fluxcd/flux2/pkg/bootstrap/provider" - "github.com/fluxcd/flux2/pkg/manifestgen" - "github.com/fluxcd/flux2/pkg/manifestgen/install" - "github.com/fluxcd/flux2/pkg/manifestgen/sourcesecret" - "github.com/fluxcd/flux2/pkg/manifestgen/sync" + "github.com/fluxcd/flux2/v2/internal/flags" + "github.com/fluxcd/flux2/v2/internal/utils" + "github.com/fluxcd/flux2/v2/pkg/bootstrap" + "github.com/fluxcd/flux2/v2/pkg/bootstrap/provider" + "github.com/fluxcd/flux2/v2/pkg/manifestgen" + "github.com/fluxcd/flux2/v2/pkg/manifestgen/install" + "github.com/fluxcd/flux2/v2/pkg/manifestgen/sourcesecret" + "github.com/fluxcd/flux2/v2/pkg/manifestgen/sync" ) var bootstrapBServerCmd = &cobra.Command{ diff --git a/cmd/flux/bootstrap_git.go b/cmd/flux/bootstrap_git.go index 3d1dd255..4a6234ca 100644 --- a/cmd/flux/bootstrap_git.go +++ b/cmd/flux/bootstrap_git.go @@ -28,13 +28,13 @@ import ( "github.com/spf13/cobra" corev1 "k8s.io/api/core/v1" - "github.com/fluxcd/flux2/internal/flags" - "github.com/fluxcd/flux2/internal/utils" - "github.com/fluxcd/flux2/pkg/bootstrap" - "github.com/fluxcd/flux2/pkg/manifestgen" - "github.com/fluxcd/flux2/pkg/manifestgen/install" - "github.com/fluxcd/flux2/pkg/manifestgen/sourcesecret" - "github.com/fluxcd/flux2/pkg/manifestgen/sync" + "github.com/fluxcd/flux2/v2/internal/flags" + "github.com/fluxcd/flux2/v2/internal/utils" + "github.com/fluxcd/flux2/v2/pkg/bootstrap" + "github.com/fluxcd/flux2/v2/pkg/manifestgen" + "github.com/fluxcd/flux2/v2/pkg/manifestgen/install" + "github.com/fluxcd/flux2/v2/pkg/manifestgen/sourcesecret" + "github.com/fluxcd/flux2/v2/pkg/manifestgen/sync" "github.com/fluxcd/pkg/git" "github.com/fluxcd/pkg/git/gogit" ) diff --git a/cmd/flux/bootstrap_github.go b/cmd/flux/bootstrap_github.go index e015e4bb..8c7c214e 100644 --- a/cmd/flux/bootstrap_github.go +++ b/cmd/flux/bootstrap_github.go @@ -26,14 +26,14 @@ import ( "github.com/fluxcd/pkg/git/gogit" "github.com/spf13/cobra" - "github.com/fluxcd/flux2/internal/flags" - "github.com/fluxcd/flux2/internal/utils" - "github.com/fluxcd/flux2/pkg/bootstrap" - "github.com/fluxcd/flux2/pkg/bootstrap/provider" - "github.com/fluxcd/flux2/pkg/manifestgen" - "github.com/fluxcd/flux2/pkg/manifestgen/install" - "github.com/fluxcd/flux2/pkg/manifestgen/sourcesecret" - "github.com/fluxcd/flux2/pkg/manifestgen/sync" + "github.com/fluxcd/flux2/v2/internal/flags" + "github.com/fluxcd/flux2/v2/internal/utils" + "github.com/fluxcd/flux2/v2/pkg/bootstrap" + "github.com/fluxcd/flux2/v2/pkg/bootstrap/provider" + "github.com/fluxcd/flux2/v2/pkg/manifestgen" + "github.com/fluxcd/flux2/v2/pkg/manifestgen/install" + "github.com/fluxcd/flux2/v2/pkg/manifestgen/sourcesecret" + "github.com/fluxcd/flux2/v2/pkg/manifestgen/sync" ) var bootstrapGitHubCmd = &cobra.Command{ diff --git a/cmd/flux/bootstrap_gitlab.go b/cmd/flux/bootstrap_gitlab.go index 34d877a0..6bb111c3 100644 --- a/cmd/flux/bootstrap_gitlab.go +++ b/cmd/flux/bootstrap_gitlab.go @@ -28,14 +28,14 @@ import ( "github.com/fluxcd/pkg/git/gogit" "github.com/spf13/cobra" - "github.com/fluxcd/flux2/internal/flags" - "github.com/fluxcd/flux2/internal/utils" - "github.com/fluxcd/flux2/pkg/bootstrap" - "github.com/fluxcd/flux2/pkg/bootstrap/provider" - "github.com/fluxcd/flux2/pkg/manifestgen" - "github.com/fluxcd/flux2/pkg/manifestgen/install" - "github.com/fluxcd/flux2/pkg/manifestgen/sourcesecret" - "github.com/fluxcd/flux2/pkg/manifestgen/sync" + "github.com/fluxcd/flux2/v2/internal/flags" + "github.com/fluxcd/flux2/v2/internal/utils" + "github.com/fluxcd/flux2/v2/pkg/bootstrap" + "github.com/fluxcd/flux2/v2/pkg/bootstrap/provider" + "github.com/fluxcd/flux2/v2/pkg/manifestgen" + "github.com/fluxcd/flux2/v2/pkg/manifestgen/install" + "github.com/fluxcd/flux2/v2/pkg/manifestgen/sourcesecret" + "github.com/fluxcd/flux2/v2/pkg/manifestgen/sync" ) var bootstrapGitLabCmd = &cobra.Command{ diff --git a/cmd/flux/build_kustomization.go b/cmd/flux/build_kustomization.go index 516fadd8..507fb94c 100644 --- a/cmd/flux/build_kustomization.go +++ b/cmd/flux/build_kustomization.go @@ -23,7 +23,7 @@ import ( "github.com/spf13/cobra" - "github.com/fluxcd/flux2/internal/build" + "github.com/fluxcd/flux2/v2/internal/build" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" ) diff --git a/cmd/flux/check.go b/cmd/flux/check.go index 1aa0a44e..c29b1af5 100644 --- a/cmd/flux/check.go +++ b/cmd/flux/check.go @@ -30,10 +30,10 @@ import ( "github.com/fluxcd/pkg/version" - "github.com/fluxcd/flux2/internal/utils" - "github.com/fluxcd/flux2/pkg/manifestgen" - "github.com/fluxcd/flux2/pkg/manifestgen/install" - "github.com/fluxcd/flux2/pkg/status" + "github.com/fluxcd/flux2/v2/internal/utils" + "github.com/fluxcd/flux2/v2/pkg/manifestgen" + "github.com/fluxcd/flux2/v2/pkg/manifestgen/install" + "github.com/fluxcd/flux2/v2/pkg/status" ) var checkCmd = &cobra.Command{ diff --git a/cmd/flux/check_test.go b/cmd/flux/check_test.go index 50aac200..e5745915 100644 --- a/cmd/flux/check_test.go +++ b/cmd/flux/check_test.go @@ -25,7 +25,7 @@ import ( "strings" "testing" - "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/flux2/v2/internal/utils" ) func TestCheckPre(t *testing.T) { diff --git a/cmd/flux/completion.go b/cmd/flux/completion.go index c24c16be..e75a1b19 100644 --- a/cmd/flux/completion.go +++ b/cmd/flux/completion.go @@ -20,7 +20,7 @@ import ( "context" "strings" - "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/flux2/v2/internal/utils" "github.com/spf13/cobra" "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" diff --git a/cmd/flux/create.go b/cmd/flux/create.go index b0eb0e83..74e091b1 100644 --- a/cmd/flux/create.go +++ b/cmd/flux/create.go @@ -30,7 +30,7 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" - "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/flux2/v2/internal/utils" ) var createCmd = &cobra.Command{ diff --git a/cmd/flux/create_alert.go b/cmd/flux/create_alert.go index 5f4e2164..a50298f4 100644 --- a/cmd/flux/create_alert.go +++ b/cmd/flux/create_alert.go @@ -32,7 +32,7 @@ import ( notificationv1b2 "github.com/fluxcd/notification-controller/api/v1beta2" "github.com/fluxcd/pkg/apis/meta" - "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/flux2/v2/internal/utils" ) var createAlertCmd = &cobra.Command{ diff --git a/cmd/flux/create_alertprovider.go b/cmd/flux/create_alertprovider.go index 915997c4..2de24341 100644 --- a/cmd/flux/create_alertprovider.go +++ b/cmd/flux/create_alertprovider.go @@ -31,7 +31,7 @@ import ( notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" "github.com/fluxcd/pkg/apis/meta" - "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/flux2/v2/internal/utils" ) var createAlertProviderCmd = &cobra.Command{ diff --git a/cmd/flux/create_helmrelease.go b/cmd/flux/create_helmrelease.go index 62ca40c2..da3e6f67 100644 --- a/cmd/flux/create_helmrelease.go +++ b/cmd/flux/create_helmrelease.go @@ -24,8 +24,8 @@ import ( "strings" "time" - "github.com/fluxcd/flux2/internal/flags" - "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/flux2/v2/internal/flags" + "github.com/fluxcd/flux2/v2/internal/utils" "github.com/fluxcd/pkg/apis/meta" "github.com/fluxcd/pkg/runtime/transform" diff --git a/cmd/flux/create_kustomization.go b/cmd/flux/create_kustomization.go index b88f243b..0a4ed533 100644 --- a/cmd/flux/create_kustomization.go +++ b/cmd/flux/create_kustomization.go @@ -34,8 +34,8 @@ import ( kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" "github.com/fluxcd/pkg/apis/meta" - "github.com/fluxcd/flux2/internal/flags" - "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/flux2/v2/internal/flags" + "github.com/fluxcd/flux2/v2/internal/utils" ) var createKsCmd = &cobra.Command{ diff --git a/cmd/flux/create_receiver.go b/cmd/flux/create_receiver.go index 0114582e..d7f3d74a 100644 --- a/cmd/flux/create_receiver.go +++ b/cmd/flux/create_receiver.go @@ -31,7 +31,7 @@ import ( notificationv1 "github.com/fluxcd/notification-controller/api/v1" "github.com/fluxcd/pkg/apis/meta" - "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/flux2/v2/internal/utils" ) var createReceiverCmd = &cobra.Command{ diff --git a/cmd/flux/create_secret_git.go b/cmd/flux/create_secret_git.go index b8bf05bb..3bf7222a 100644 --- a/cmd/flux/create_secret_git.go +++ b/cmd/flux/create_secret_git.go @@ -27,9 +27,9 @@ import ( corev1 "k8s.io/api/core/v1" "sigs.k8s.io/yaml" - "github.com/fluxcd/flux2/internal/flags" - "github.com/fluxcd/flux2/internal/utils" - "github.com/fluxcd/flux2/pkg/manifestgen/sourcesecret" + "github.com/fluxcd/flux2/v2/internal/flags" + "github.com/fluxcd/flux2/v2/internal/utils" + "github.com/fluxcd/flux2/v2/pkg/manifestgen/sourcesecret" ) var createSecretGitCmd = &cobra.Command{ diff --git a/cmd/flux/create_secret_helm.go b/cmd/flux/create_secret_helm.go index aba9e734..9833b449 100644 --- a/cmd/flux/create_secret_helm.go +++ b/cmd/flux/create_secret_helm.go @@ -25,8 +25,8 @@ import ( corev1 "k8s.io/api/core/v1" "sigs.k8s.io/yaml" - "github.com/fluxcd/flux2/internal/utils" - "github.com/fluxcd/flux2/pkg/manifestgen/sourcesecret" + "github.com/fluxcd/flux2/v2/internal/utils" + "github.com/fluxcd/flux2/v2/pkg/manifestgen/sourcesecret" ) var createSecretHelmCmd = &cobra.Command{ diff --git a/cmd/flux/create_secret_oci.go b/cmd/flux/create_secret_oci.go index b7cb3449..09a689f0 100644 --- a/cmd/flux/create_secret_oci.go +++ b/cmd/flux/create_secret_oci.go @@ -20,8 +20,8 @@ import ( "context" "fmt" - "github.com/fluxcd/flux2/internal/utils" - "github.com/fluxcd/flux2/pkg/manifestgen/sourcesecret" + "github.com/fluxcd/flux2/v2/internal/utils" + "github.com/fluxcd/flux2/v2/pkg/manifestgen/sourcesecret" "github.com/google/go-containerregistry/pkg/name" "github.com/spf13/cobra" corev1 "k8s.io/api/core/v1" diff --git a/cmd/flux/create_secret_tls.go b/cmd/flux/create_secret_tls.go index 640fef5d..ed4eb9fe 100644 --- a/cmd/flux/create_secret_tls.go +++ b/cmd/flux/create_secret_tls.go @@ -26,8 +26,8 @@ import ( corev1 "k8s.io/api/core/v1" "sigs.k8s.io/yaml" - "github.com/fluxcd/flux2/internal/utils" - "github.com/fluxcd/flux2/pkg/manifestgen/sourcesecret" + "github.com/fluxcd/flux2/v2/internal/utils" + "github.com/fluxcd/flux2/v2/pkg/manifestgen/sourcesecret" ) var createSecretTLSCmd = &cobra.Command{ diff --git a/cmd/flux/create_source_bucket.go b/cmd/flux/create_source_bucket.go index e528deed..0697aa3c 100644 --- a/cmd/flux/create_source_bucket.go +++ b/cmd/flux/create_source_bucket.go @@ -35,8 +35,8 @@ import ( sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" - "github.com/fluxcd/flux2/internal/flags" - "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/flux2/v2/internal/flags" + "github.com/fluxcd/flux2/v2/internal/utils" ) var createSourceBucketCmd = &cobra.Command{ diff --git a/cmd/flux/create_source_git.go b/cmd/flux/create_source_git.go index 83d895dd..2c6cc59a 100644 --- a/cmd/flux/create_source_git.go +++ b/cmd/flux/create_source_git.go @@ -39,9 +39,9 @@ import ( sourcev1 "github.com/fluxcd/source-controller/api/v1" - "github.com/fluxcd/flux2/internal/flags" - "github.com/fluxcd/flux2/internal/utils" - "github.com/fluxcd/flux2/pkg/manifestgen/sourcesecret" + "github.com/fluxcd/flux2/v2/internal/flags" + "github.com/fluxcd/flux2/v2/internal/utils" + "github.com/fluxcd/flux2/v2/pkg/manifestgen/sourcesecret" ) type sourceGitFlags struct { diff --git a/cmd/flux/create_source_helm.go b/cmd/flux/create_source_helm.go index 49a4b026..43373b8d 100644 --- a/cmd/flux/create_source_helm.go +++ b/cmd/flux/create_source_helm.go @@ -35,8 +35,8 @@ import ( sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" - "github.com/fluxcd/flux2/internal/utils" - "github.com/fluxcd/flux2/pkg/manifestgen/sourcesecret" + "github.com/fluxcd/flux2/v2/internal/utils" + "github.com/fluxcd/flux2/v2/pkg/manifestgen/sourcesecret" ) var createSourceHelmCmd = &cobra.Command{ diff --git a/cmd/flux/create_source_oci.go b/cmd/flux/create_source_oci.go index 59b6fc86..d048f367 100644 --- a/cmd/flux/create_source_oci.go +++ b/cmd/flux/create_source_oci.go @@ -33,8 +33,8 @@ import ( sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" - "github.com/fluxcd/flux2/internal/flags" - "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/flux2/v2/internal/flags" + "github.com/fluxcd/flux2/v2/internal/utils" ) var createSourceOCIRepositoryCmd = &cobra.Command{ diff --git a/cmd/flux/create_tenant.go b/cmd/flux/create_tenant.go index deb62f90..79ffdb82 100644 --- a/cmd/flux/create_tenant.go +++ b/cmd/flux/create_tenant.go @@ -21,7 +21,7 @@ import ( "context" "fmt" - "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/flux2/v2/internal/utils" "github.com/spf13/cobra" corev1 "k8s.io/api/core/v1" rbacv1 "k8s.io/api/rbac/v1" diff --git a/cmd/flux/delete.go b/cmd/flux/delete.go index ae808b77..eb1079bc 100644 --- a/cmd/flux/delete.go +++ b/cmd/flux/delete.go @@ -24,7 +24,7 @@ import ( "github.com/spf13/cobra" "k8s.io/apimachinery/pkg/types" - "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/flux2/v2/internal/utils" ) var deleteCmd = &cobra.Command{ diff --git a/cmd/flux/diff_artifact.go b/cmd/flux/diff_artifact.go index ddf6d94b..430f5497 100644 --- a/cmd/flux/diff_artifact.go +++ b/cmd/flux/diff_artifact.go @@ -21,7 +21,7 @@ import ( "fmt" "os" - "github.com/fluxcd/flux2/internal/flags" + "github.com/fluxcd/flux2/v2/internal/flags" oci "github.com/fluxcd/pkg/oci/client" sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" "github.com/spf13/cobra" diff --git a/cmd/flux/diff_kustomization.go b/cmd/flux/diff_kustomization.go index 8b406417..25ca0097 100644 --- a/cmd/flux/diff_kustomization.go +++ b/cmd/flux/diff_kustomization.go @@ -23,7 +23,7 @@ import ( "github.com/spf13/cobra" - "github.com/fluxcd/flux2/internal/build" + "github.com/fluxcd/flux2/v2/internal/build" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" ) diff --git a/cmd/flux/diff_kustomization_test.go b/cmd/flux/diff_kustomization_test.go index 1c92268c..fc2a9c67 100644 --- a/cmd/flux/diff_kustomization_test.go +++ b/cmd/flux/diff_kustomization_test.go @@ -25,7 +25,7 @@ import ( "strings" "testing" - "github.com/fluxcd/flux2/internal/build" + "github.com/fluxcd/flux2/v2/internal/build" "github.com/fluxcd/pkg/ssa" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" ) diff --git a/cmd/flux/events.go b/cmd/flux/events.go index 3017a2db..c534dfd0 100644 --- a/cmd/flux/events.go +++ b/cmd/flux/events.go @@ -48,8 +48,8 @@ import ( sourcev1 "github.com/fluxcd/source-controller/api/v1" sourcev1b2 "github.com/fluxcd/source-controller/api/v1beta2" - "github.com/fluxcd/flux2/internal/utils" - "github.com/fluxcd/flux2/pkg/printers" + "github.com/fluxcd/flux2/v2/internal/utils" + "github.com/fluxcd/flux2/v2/pkg/printers" ) var eventsCmd = &cobra.Command{ diff --git a/cmd/flux/events_test.go b/cmd/flux/events_test.go index cbd098b9..a6977431 100644 --- a/cmd/flux/events_test.go +++ b/cmd/flux/events_test.go @@ -43,7 +43,7 @@ import ( sourcev1 "github.com/fluxcd/source-controller/api/v1" sourcev1b2 "github.com/fluxcd/source-controller/api/v1beta2" - "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/flux2/v2/internal/utils" ) var objects = ` diff --git a/cmd/flux/export.go b/cmd/flux/export.go index bfb2b60b..c537156c 100644 --- a/cmd/flux/export.go +++ b/cmd/flux/export.go @@ -26,7 +26,7 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/yaml" - "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/flux2/v2/internal/utils" ) var exportCmd = &cobra.Command{ diff --git a/cmd/flux/export_secret.go b/cmd/flux/export_secret.go index 1c9e475d..4a87e233 100644 --- a/cmd/flux/export_secret.go +++ b/cmd/flux/export_secret.go @@ -26,7 +26,7 @@ import ( "k8s.io/apimachinery/pkg/types" "sigs.k8s.io/controller-runtime/pkg/client" - "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/flux2/v2/internal/utils" ) // exportableWithSecret represents a type that you can fetch from the Kubernetes diff --git a/cmd/flux/get.go b/cmd/flux/get.go index 6723fb22..1442f3af 100644 --- a/cmd/flux/get.go +++ b/cmd/flux/get.go @@ -32,8 +32,8 @@ import ( "github.com/fluxcd/pkg/apis/meta" - "github.com/fluxcd/flux2/internal/utils" - "github.com/fluxcd/flux2/pkg/printers" + "github.com/fluxcd/flux2/v2/internal/utils" + "github.com/fluxcd/flux2/v2/pkg/printers" ) type deriveType func(runtime.Object) (summarisable, error) diff --git a/cmd/flux/get_kustomization.go b/cmd/flux/get_kustomization.go index 9ce5381a..7da038d5 100644 --- a/cmd/flux/get_kustomization.go +++ b/cmd/flux/get_kustomization.go @@ -26,7 +26,7 @@ import ( kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" - "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/flux2/v2/internal/utils" ) var getKsCmd = &cobra.Command{ diff --git a/cmd/flux/get_source_bucket.go b/cmd/flux/get_source_bucket.go index b1b283c4..93d159d8 100644 --- a/cmd/flux/get_source_bucket.go +++ b/cmd/flux/get_source_bucket.go @@ -26,7 +26,7 @@ import ( sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" - "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/flux2/v2/internal/utils" ) var getSourceBucketCmd = &cobra.Command{ diff --git a/cmd/flux/get_source_chart.go b/cmd/flux/get_source_chart.go index bb275f60..3f9f5948 100644 --- a/cmd/flux/get_source_chart.go +++ b/cmd/flux/get_source_chart.go @@ -26,7 +26,7 @@ import ( sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" - "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/flux2/v2/internal/utils" ) var getSourceHelmChartCmd = &cobra.Command{ diff --git a/cmd/flux/get_source_git.go b/cmd/flux/get_source_git.go index 623da707..15e07bc5 100644 --- a/cmd/flux/get_source_git.go +++ b/cmd/flux/get_source_git.go @@ -26,7 +26,7 @@ import ( sourcev1 "github.com/fluxcd/source-controller/api/v1" - "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/flux2/v2/internal/utils" ) var getSourceGitCmd = &cobra.Command{ diff --git a/cmd/flux/get_source_helm.go b/cmd/flux/get_source_helm.go index 2ac0f0f9..161ae8a0 100644 --- a/cmd/flux/get_source_helm.go +++ b/cmd/flux/get_source_helm.go @@ -26,7 +26,7 @@ import ( sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" - "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/flux2/v2/internal/utils" ) var getSourceHelmCmd = &cobra.Command{ diff --git a/cmd/flux/get_source_oci.go b/cmd/flux/get_source_oci.go index aac2a60e..0a97935f 100644 --- a/cmd/flux/get_source_oci.go +++ b/cmd/flux/get_source_oci.go @@ -26,7 +26,7 @@ import ( sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" - "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/flux2/v2/internal/utils" ) var getSourceOCIRepositoryCmd = &cobra.Command{ diff --git a/cmd/flux/install.go b/cmd/flux/install.go index 4c645640..53712021 100644 --- a/cmd/flux/install.go +++ b/cmd/flux/install.go @@ -25,11 +25,11 @@ import ( "github.com/spf13/cobra" - "github.com/fluxcd/flux2/internal/flags" - "github.com/fluxcd/flux2/internal/utils" - "github.com/fluxcd/flux2/pkg/manifestgen" - "github.com/fluxcd/flux2/pkg/manifestgen/install" - "github.com/fluxcd/flux2/pkg/status" + "github.com/fluxcd/flux2/v2/internal/flags" + "github.com/fluxcd/flux2/v2/internal/utils" + "github.com/fluxcd/flux2/v2/pkg/manifestgen" + "github.com/fluxcd/flux2/v2/pkg/manifestgen/install" + "github.com/fluxcd/flux2/v2/pkg/status" ) var installCmd = &cobra.Command{ diff --git a/cmd/flux/list_artifact.go b/cmd/flux/list_artifact.go index f2b2f75c..bdc040c6 100644 --- a/cmd/flux/list_artifact.go +++ b/cmd/flux/list_artifact.go @@ -22,11 +22,11 @@ import ( "github.com/spf13/cobra" - "github.com/fluxcd/flux2/pkg/printers" oci "github.com/fluxcd/pkg/oci/client" sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" - "github.com/fluxcd/flux2/internal/flags" + "github.com/fluxcd/flux2/v2/internal/flags" + "github.com/fluxcd/flux2/v2/pkg/printers" ) type listArtifactFlags struct { diff --git a/cmd/flux/logs.go b/cmd/flux/logs.go index 6acc65f6..6f69e0d0 100644 --- a/cmd/flux/logs.go +++ b/cmd/flux/logs.go @@ -37,9 +37,9 @@ import ( "k8s.io/kubectl/pkg/util" "k8s.io/kubectl/pkg/util/podutils" - "github.com/fluxcd/flux2/internal/flags" - "github.com/fluxcd/flux2/internal/utils" - "github.com/fluxcd/flux2/pkg/manifestgen" + "github.com/fluxcd/flux2/v2/internal/flags" + "github.com/fluxcd/flux2/v2/internal/utils" + "github.com/fluxcd/flux2/v2/pkg/manifestgen" ) var logsCmd = &cobra.Command{ diff --git a/cmd/flux/main.go b/cmd/flux/main.go index cc3d9553..4dd2fae8 100644 --- a/cmd/flux/main.go +++ b/cmd/flux/main.go @@ -33,7 +33,7 @@ import ( runclient "github.com/fluxcd/pkg/runtime/client" - "github.com/fluxcd/flux2/pkg/manifestgen/install" + "github.com/fluxcd/flux2/v2/pkg/manifestgen/install" ) var VERSION = "0.0.0-dev.0" diff --git a/cmd/flux/main_e2e_test.go b/cmd/flux/main_e2e_test.go index 22e27fdf..1cfa3ace 100644 --- a/cmd/flux/main_e2e_test.go +++ b/cmd/flux/main_e2e_test.go @@ -25,7 +25,7 @@ import ( "os" "testing" - "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/flux2/v2/internal/utils" ) func TestMain(m *testing.M) { diff --git a/cmd/flux/main_test.go b/cmd/flux/main_test.go index b7e675d7..d153d479 100644 --- a/cmd/flux/main_test.go +++ b/cmd/flux/main_test.go @@ -31,7 +31,7 @@ import ( "text/template" "time" - "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/flux2/v2/internal/utils" "github.com/google/go-cmp/cmp" "github.com/mattn/go-shellwords" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" diff --git a/cmd/flux/pull_artifact.go b/cmd/flux/pull_artifact.go index 2fa0eab3..529d5557 100644 --- a/cmd/flux/pull_artifact.go +++ b/cmd/flux/pull_artifact.go @@ -21,7 +21,7 @@ import ( "fmt" "os" - "github.com/fluxcd/flux2/internal/flags" + "github.com/fluxcd/flux2/v2/internal/flags" sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" "github.com/spf13/cobra" diff --git a/cmd/flux/push_artifact.go b/cmd/flux/push_artifact.go index 58f386ab..6a0245bc 100644 --- a/cmd/flux/push_artifact.go +++ b/cmd/flux/push_artifact.go @@ -23,7 +23,7 @@ import ( "os" "strings" - "github.com/fluxcd/flux2/internal/flags" + "github.com/fluxcd/flux2/v2/internal/flags" sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" reg "github.com/google/go-containerregistry/pkg/name" "github.com/spf13/cobra" diff --git a/cmd/flux/reconcile.go b/cmd/flux/reconcile.go index 6221e117..1133d2a1 100644 --- a/cmd/flux/reconcile.go +++ b/cmd/flux/reconcile.go @@ -34,7 +34,7 @@ import ( notificationv1b2 "github.com/fluxcd/notification-controller/api/v1beta2" "github.com/fluxcd/pkg/apis/meta" - "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/flux2/v2/internal/utils" ) var reconcileCmd = &cobra.Command{ diff --git a/cmd/flux/reconcile_alertprovider.go b/cmd/flux/reconcile_alertprovider.go index 86a737b7..becf980f 100644 --- a/cmd/flux/reconcile_alertprovider.go +++ b/cmd/flux/reconcile_alertprovider.go @@ -28,7 +28,7 @@ import ( notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" "github.com/fluxcd/pkg/apis/meta" - "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/flux2/v2/internal/utils" ) var reconcileAlertProviderCmd = &cobra.Command{ diff --git a/cmd/flux/reconcile_receiver.go b/cmd/flux/reconcile_receiver.go index cb415627..8a04ea7a 100644 --- a/cmd/flux/reconcile_receiver.go +++ b/cmd/flux/reconcile_receiver.go @@ -28,7 +28,7 @@ import ( notificationv1 "github.com/fluxcd/notification-controller/api/v1" "github.com/fluxcd/pkg/apis/meta" - "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/flux2/v2/internal/utils" ) var reconcileReceiverCmd = &cobra.Command{ diff --git a/cmd/flux/reconcile_with_source.go b/cmd/flux/reconcile_with_source.go index 0eda5f60..4c3a7eac 100644 --- a/cmd/flux/reconcile_with_source.go +++ b/cmd/flux/reconcile_with_source.go @@ -10,7 +10,7 @@ import ( "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/wait" - "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/flux2/v2/internal/utils" "github.com/fluxcd/pkg/apis/meta" ) diff --git a/cmd/flux/resume.go b/cmd/flux/resume.go index 368c5e59..becf4f2f 100644 --- a/cmd/flux/resume.go +++ b/cmd/flux/resume.go @@ -25,7 +25,7 @@ import ( "k8s.io/apimachinery/pkg/util/wait" "sigs.k8s.io/controller-runtime/pkg/client" - "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/flux2/v2/internal/utils" ) var resumeCmd = &cobra.Command{ diff --git a/cmd/flux/stats.go b/cmd/flux/stats.go index 78692fbe..b726e343 100644 --- a/cmd/flux/stats.go +++ b/cmd/flux/stats.go @@ -27,8 +27,8 @@ import ( "sigs.k8s.io/cli-utils/pkg/kstatus/status" "sigs.k8s.io/controller-runtime/pkg/client" - "github.com/fluxcd/flux2/internal/utils" - "github.com/fluxcd/flux2/pkg/printers" + "github.com/fluxcd/flux2/v2/internal/utils" + "github.com/fluxcd/flux2/v2/pkg/printers" helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" autov1 "github.com/fluxcd/image-automation-controller/api/v1beta1" imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta2" diff --git a/cmd/flux/suspend.go b/cmd/flux/suspend.go index 58f7a962..85e93de9 100644 --- a/cmd/flux/suspend.go +++ b/cmd/flux/suspend.go @@ -23,7 +23,7 @@ import ( "github.com/spf13/cobra" "sigs.k8s.io/controller-runtime/pkg/client" - "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/flux2/v2/internal/utils" ) var suspendCmd = &cobra.Command{ diff --git a/cmd/flux/tag_artifact.go b/cmd/flux/tag_artifact.go index f0ca6f5d..e942c530 100644 --- a/cmd/flux/tag_artifact.go +++ b/cmd/flux/tag_artifact.go @@ -25,7 +25,7 @@ import ( oci "github.com/fluxcd/pkg/oci/client" sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" - "github.com/fluxcd/flux2/internal/flags" + "github.com/fluxcd/flux2/v2/internal/flags" ) var tagArtifactCmd = &cobra.Command{ diff --git a/cmd/flux/trace.go b/cmd/flux/trace.go index 8a5dd02b..a2839e4f 100644 --- a/cmd/flux/trace.go +++ b/cmd/flux/trace.go @@ -33,7 +33,7 @@ import ( "k8s.io/cli-runtime/pkg/resource" "sigs.k8s.io/controller-runtime/pkg/client" - "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/flux2/v2/internal/utils" helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" fluxmeta "github.com/fluxcd/pkg/apis/meta" diff --git a/cmd/flux/tree_kustomization.go b/cmd/flux/tree_kustomization.go index 7fcae1c4..8b5987f6 100644 --- a/cmd/flux/tree_kustomization.go +++ b/cmd/flux/tree_kustomization.go @@ -39,8 +39,8 @@ import ( kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" "github.com/fluxcd/pkg/ssa" - "github.com/fluxcd/flux2/internal/tree" - "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/flux2/v2/internal/tree" + "github.com/fluxcd/flux2/v2/internal/utils" ) var treeKsCmd = &cobra.Command{ diff --git a/cmd/flux/uninstall.go b/cmd/flux/uninstall.go index 21bcd3b3..15e7b6bb 100644 --- a/cmd/flux/uninstall.go +++ b/cmd/flux/uninstall.go @@ -23,8 +23,8 @@ import ( "github.com/manifoldco/promptui" "github.com/spf13/cobra" - "github.com/fluxcd/flux2/internal/utils" - "github.com/fluxcd/flux2/pkg/uninstall" + "github.com/fluxcd/flux2/v2/internal/utils" + "github.com/fluxcd/flux2/v2/pkg/uninstall" ) var uninstallCmd = &cobra.Command{ diff --git a/cmd/flux/version.go b/cmd/flux/version.go index 8d563dc1..cb113d67 100644 --- a/cmd/flux/version.go +++ b/cmd/flux/version.go @@ -27,8 +27,8 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/yaml" - "github.com/fluxcd/flux2/internal/utils" - "github.com/fluxcd/flux2/pkg/manifestgen" + "github.com/fluxcd/flux2/v2/internal/utils" + "github.com/fluxcd/flux2/v2/pkg/manifestgen" ) var versionCmd = &cobra.Command{ diff --git a/cmd/flux/version_utils.go b/cmd/flux/version_utils.go index 64b52ccf..5bf8326e 100644 --- a/cmd/flux/version_utils.go +++ b/cmd/flux/version_utils.go @@ -20,8 +20,8 @@ import ( "fmt" "strings" - "github.com/fluxcd/flux2/internal/utils" - "github.com/fluxcd/flux2/pkg/manifestgen/install" + "github.com/fluxcd/flux2/v2/internal/utils" + "github.com/fluxcd/flux2/v2/pkg/manifestgen/install" ) func getVersion(input string) (string, error) { diff --git a/go.mod b/go.mod index a2783499..1a8235cb 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module github.com/fluxcd/flux2 +module github.com/fluxcd/flux2/v2 go 1.18 diff --git a/internal/build/build.go b/internal/build/build.go index 0c6baf77..083a7ca4 100644 --- a/internal/build/build.go +++ b/internal/build/build.go @@ -45,7 +45,7 @@ import ( runclient "github.com/fluxcd/pkg/runtime/client" "sigs.k8s.io/kustomize/kyaml/filesys" - "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/flux2/v2/internal/utils" ) const ( diff --git a/internal/build/diff.go b/internal/build/diff.go index d81e22b6..b510b129 100644 --- a/internal/build/diff.go +++ b/internal/build/diff.go @@ -41,7 +41,7 @@ import ( "github.com/fluxcd/pkg/ssa" - "github.com/fluxcd/flux2/pkg/printers" + "github.com/fluxcd/flux2/v2/pkg/printers" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" ) diff --git a/internal/flags/crds.go b/internal/flags/crds.go index 47e05e4f..aa7eee61 100644 --- a/internal/flags/crds.go +++ b/internal/flags/crds.go @@ -22,7 +22,7 @@ import ( helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" - "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/flux2/v2/internal/utils" ) var supportedCRDsPolicies = []string{ diff --git a/internal/flags/decryption_provider.go b/internal/flags/decryption_provider.go index 9a416467..085340ab 100644 --- a/internal/flags/decryption_provider.go +++ b/internal/flags/decryption_provider.go @@ -20,7 +20,7 @@ import ( "fmt" "strings" - "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/flux2/v2/internal/utils" ) var supportedDecryptionProviders = []string{"sops"} diff --git a/internal/flags/helm_chart_source.go b/internal/flags/helm_chart_source.go index 2a910d02..1ec99408 100644 --- a/internal/flags/helm_chart_source.go +++ b/internal/flags/helm_chart_source.go @@ -23,7 +23,7 @@ import ( sourcev1 "github.com/fluxcd/source-controller/api/v1" sourcev1b2 "github.com/fluxcd/source-controller/api/v1beta2" - "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/flux2/v2/internal/utils" ) var supportedHelmChartSourceKinds = []string{sourcev1b2.HelmRepositoryKind, sourcev1.GitRepositoryKind, sourcev1b2.BucketKind} diff --git a/internal/flags/kustomization_source.go b/internal/flags/kustomization_source.go index 6342bf68..322285e1 100644 --- a/internal/flags/kustomization_source.go +++ b/internal/flags/kustomization_source.go @@ -23,7 +23,7 @@ import ( sourcev1 "github.com/fluxcd/source-controller/api/v1" sourcev1b2 "github.com/fluxcd/source-controller/api/v1beta2" - "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/flux2/v2/internal/utils" ) var supportedKustomizationSourceKinds = []string{sourcev1b2.OCIRepositoryKind, sourcev1.GitRepositoryKind, sourcev1b2.BucketKind} diff --git a/internal/flags/log_level.go b/internal/flags/log_level.go index bd880fff..4101a902 100644 --- a/internal/flags/log_level.go +++ b/internal/flags/log_level.go @@ -20,7 +20,7 @@ import ( "fmt" "strings" - "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/flux2/v2/internal/utils" ) var supportedLogLevels = []string{"debug", "info", "error"} diff --git a/internal/flags/source_bucket_provider.go b/internal/flags/source_bucket_provider.go index 6e2bfaa5..5ab08ecb 100644 --- a/internal/flags/source_bucket_provider.go +++ b/internal/flags/source_bucket_provider.go @@ -20,7 +20,7 @@ import ( "fmt" "strings" - "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/flux2/v2/internal/utils" sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" ) diff --git a/internal/flags/source_oci_provider.go b/internal/flags/source_oci_provider.go index 04d9b79a..77ff0441 100644 --- a/internal/flags/source_oci_provider.go +++ b/internal/flags/source_oci_provider.go @@ -20,7 +20,7 @@ import ( "fmt" "strings" - "github.com/fluxcd/flux2/internal/utils" + "github.com/fluxcd/flux2/v2/internal/utils" "github.com/fluxcd/pkg/oci" sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" ) diff --git a/internal/utils/apply.go b/internal/utils/apply.go index 1979759b..c910fce3 100644 --- a/internal/utils/apply.go +++ b/internal/utils/apply.go @@ -31,7 +31,7 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/kustomize/api/konfig" - "github.com/fluxcd/flux2/pkg/manifestgen/kustomization" + "github.com/fluxcd/flux2/v2/pkg/manifestgen/kustomization" runclient "github.com/fluxcd/pkg/runtime/client" "github.com/fluxcd/pkg/ssa" ) diff --git a/internal/utils/utils.go b/internal/utils/utils.go index 8f25730c..c5d8ec88 100644 --- a/internal/utils/utils.go +++ b/internal/utils/utils.go @@ -53,7 +53,7 @@ import ( sourcev1 "github.com/fluxcd/source-controller/api/v1" sourcev1b2 "github.com/fluxcd/source-controller/api/v1beta2" - "github.com/fluxcd/flux2/pkg/manifestgen/install" + "github.com/fluxcd/flux2/v2/pkg/manifestgen/install" ) type ExecMode string diff --git a/pkg/bootstrap/bootstrap.go b/pkg/bootstrap/bootstrap.go index ae6a792c..5d10b724 100644 --- a/pkg/bootstrap/bootstrap.go +++ b/pkg/bootstrap/bootstrap.go @@ -34,9 +34,9 @@ import ( "github.com/fluxcd/pkg/apis/meta" sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" - "github.com/fluxcd/flux2/pkg/manifestgen/install" - "github.com/fluxcd/flux2/pkg/manifestgen/sourcesecret" - "github.com/fluxcd/flux2/pkg/manifestgen/sync" + "github.com/fluxcd/flux2/v2/pkg/manifestgen/install" + "github.com/fluxcd/flux2/v2/pkg/manifestgen/sourcesecret" + "github.com/fluxcd/flux2/v2/pkg/manifestgen/sync" ) var ( diff --git a/pkg/bootstrap/bootstrap_plain_git.go b/pkg/bootstrap/bootstrap_plain_git.go index 7239ac3e..bd3281c2 100644 --- a/pkg/bootstrap/bootstrap_plain_git.go +++ b/pkg/bootstrap/bootstrap_plain_git.go @@ -40,13 +40,13 @@ import ( "github.com/fluxcd/pkg/kustomize/filesys" runclient "github.com/fluxcd/pkg/runtime/client" - "github.com/fluxcd/flux2/internal/utils" - "github.com/fluxcd/flux2/pkg/log" - "github.com/fluxcd/flux2/pkg/manifestgen/install" - "github.com/fluxcd/flux2/pkg/manifestgen/kustomization" - "github.com/fluxcd/flux2/pkg/manifestgen/sourcesecret" - "github.com/fluxcd/flux2/pkg/manifestgen/sync" - "github.com/fluxcd/flux2/pkg/status" + "github.com/fluxcd/flux2/v2/internal/utils" + "github.com/fluxcd/flux2/v2/pkg/log" + "github.com/fluxcd/flux2/v2/pkg/manifestgen/install" + "github.com/fluxcd/flux2/v2/pkg/manifestgen/kustomization" + "github.com/fluxcd/flux2/v2/pkg/manifestgen/sourcesecret" + "github.com/fluxcd/flux2/v2/pkg/manifestgen/sync" + "github.com/fluxcd/flux2/v2/pkg/status" "github.com/fluxcd/pkg/git" "github.com/fluxcd/pkg/git/repository" ) diff --git a/pkg/bootstrap/bootstrap_provider.go b/pkg/bootstrap/bootstrap_provider.go index 74aa48ef..672f3f11 100644 --- a/pkg/bootstrap/bootstrap_provider.go +++ b/pkg/bootstrap/bootstrap_provider.go @@ -29,9 +29,9 @@ import ( "github.com/fluxcd/go-git-providers/gitprovider" - "github.com/fluxcd/flux2/pkg/bootstrap/provider" - "github.com/fluxcd/flux2/pkg/manifestgen/sourcesecret" - "github.com/fluxcd/flux2/pkg/manifestgen/sync" + "github.com/fluxcd/flux2/v2/pkg/bootstrap/provider" + "github.com/fluxcd/flux2/v2/pkg/manifestgen/sourcesecret" + "github.com/fluxcd/flux2/v2/pkg/manifestgen/sync" "github.com/fluxcd/pkg/git/repository" ) diff --git a/pkg/bootstrap/options.go b/pkg/bootstrap/options.go index 8b6ee790..27830f4a 100644 --- a/pkg/bootstrap/options.go +++ b/pkg/bootstrap/options.go @@ -26,7 +26,7 @@ import ( "github.com/fluxcd/pkg/git" runclient "github.com/fluxcd/pkg/runtime/client" - "github.com/fluxcd/flux2/pkg/log" + "github.com/fluxcd/flux2/v2/pkg/log" ) type Option interface { diff --git a/pkg/manifestgen/install/install.go b/pkg/manifestgen/install/install.go index 80621782..7742e041 100644 --- a/pkg/manifestgen/install/install.go +++ b/pkg/manifestgen/install/install.go @@ -28,7 +28,7 @@ import ( securejoin "github.com/cyphar/filepath-securejoin" - "github.com/fluxcd/flux2/pkg/manifestgen" + "github.com/fluxcd/flux2/v2/pkg/manifestgen" ) // Generate returns the install manifests as a multi-doc YAML. diff --git a/pkg/manifestgen/install/manifests.go b/pkg/manifestgen/install/manifests.go index 17fc33f1..f607f232 100644 --- a/pkg/manifestgen/install/manifests.go +++ b/pkg/manifestgen/install/manifests.go @@ -29,7 +29,7 @@ import ( "github.com/fluxcd/pkg/kustomize/filesys" "github.com/fluxcd/pkg/untar" - "github.com/fluxcd/flux2/pkg/manifestgen/kustomization" + "github.com/fluxcd/flux2/v2/pkg/manifestgen/kustomization" ) func fetch(ctx context.Context, url, version, dir string) error { diff --git a/pkg/manifestgen/kustomization/kustomization.go b/pkg/manifestgen/kustomization/kustomization.go index 058049b7..383361d1 100644 --- a/pkg/manifestgen/kustomization/kustomization.go +++ b/pkg/manifestgen/kustomization/kustomization.go @@ -31,7 +31,7 @@ import ( "github.com/fluxcd/pkg/kustomize/filesys" - "github.com/fluxcd/flux2/pkg/manifestgen" + "github.com/fluxcd/flux2/v2/pkg/manifestgen" ) // Generate scans the given directory for Kubernetes manifests and creates a diff --git a/pkg/manifestgen/sourcesecret/sourcesecret.go b/pkg/manifestgen/sourcesecret/sourcesecret.go index 5c0d40d1..41849b70 100644 --- a/pkg/manifestgen/sourcesecret/sourcesecret.go +++ b/pkg/manifestgen/sourcesecret/sourcesecret.go @@ -33,7 +33,7 @@ import ( "github.com/fluxcd/pkg/ssh" - "github.com/fluxcd/flux2/pkg/manifestgen" + "github.com/fluxcd/flux2/v2/pkg/manifestgen" ) const defaultSSHPort = 22 diff --git a/pkg/manifestgen/sync/sync.go b/pkg/manifestgen/sync/sync.go index b24e6085..26de1827 100644 --- a/pkg/manifestgen/sync/sync.go +++ b/pkg/manifestgen/sync/sync.go @@ -30,7 +30,7 @@ import ( "github.com/fluxcd/pkg/apis/meta" sourcev1 "github.com/fluxcd/source-controller/api/v1" - "github.com/fluxcd/flux2/pkg/manifestgen" + "github.com/fluxcd/flux2/v2/pkg/manifestgen" ) func Generate(options Options) (*manifestgen.Manifest, error) { diff --git a/pkg/status/status.go b/pkg/status/status.go index ce227a6d..a016cca8 100644 --- a/pkg/status/status.go +++ b/pkg/status/status.go @@ -33,7 +33,7 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/client/apiutil" - "github.com/fluxcd/flux2/pkg/log" + "github.com/fluxcd/flux2/v2/pkg/log" ) type StatusChecker struct { diff --git a/pkg/uninstall/uninstall.go b/pkg/uninstall/uninstall.go index 497e1a72..3293cc9c 100644 --- a/pkg/uninstall/uninstall.go +++ b/pkg/uninstall/uninstall.go @@ -28,8 +28,8 @@ import ( "k8s.io/apimachinery/pkg/util/errors" "sigs.k8s.io/controller-runtime/pkg/client" - "github.com/fluxcd/flux2/pkg/log" - "github.com/fluxcd/flux2/pkg/manifestgen" + "github.com/fluxcd/flux2/v2/pkg/log" + "github.com/fluxcd/flux2/v2/pkg/manifestgen" helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" autov1 "github.com/fluxcd/image-automation-controller/api/v1beta1" imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta2" From 97b064be136e7997b860fc28d7469416dcbfab82 Mon Sep 17 00:00:00 2001 From: Sanskar Jaiswal Date: Tue, 4 Apr 2023 18:05:48 +0530 Subject: [PATCH 472/818] add a preview note for all non-bootstrap commands Signed-off-by: Sanskar Jaiswal --- cmd/flux/build.go | 2 +- cmd/flux/build_artifact.go | 3 ++- cmd/flux/check.go | 4 ++-- cmd/flux/completion.go | 2 +- cmd/flux/completion_bash.go | 1 + cmd/flux/completion_fish.go | 1 + cmd/flux/completion_powershell.go | 1 + cmd/flux/completion_zsh.go | 1 + cmd/flux/create.go | 2 +- cmd/flux/create_alert.go | 2 +- cmd/flux/create_alertprovider.go | 2 +- cmd/flux/create_helmrelease.go | 2 +- cmd/flux/create_image.go | 8 +++----- cmd/flux/create_image_policy.go | 4 ++-- cmd/flux/create_image_repository.go | 4 ++-- cmd/flux/create_image_update.go | 4 ++-- cmd/flux/create_kustomization.go | 2 +- cmd/flux/create_receiver.go | 2 +- cmd/flux/create_secret.go | 2 +- cmd/flux/create_secret_git.go | 6 ++++-- cmd/flux/create_secret_helm.go | 2 +- cmd/flux/create_secret_oci.go | 2 +- cmd/flux/create_secret_tls.go | 2 +- cmd/flux/create_source.go | 2 +- cmd/flux/create_source_bucket.go | 4 ++-- cmd/flux/create_source_helm.go | 4 ++-- cmd/flux/create_source_oci.go | 2 +- cmd/flux/create_tenant.go | 4 ++-- cmd/flux/delete.go | 2 +- cmd/flux/delete_alert.go | 2 +- cmd/flux/delete_alertprovider.go | 2 +- cmd/flux/delete_helmrelease.go | 2 +- cmd/flux/delete_image.go | 2 +- cmd/flux/delete_image_policy.go | 2 +- cmd/flux/delete_image_repository.go | 2 +- cmd/flux/delete_image_update.go | 2 +- cmd/flux/delete_kustomization.go | 2 +- cmd/flux/delete_receiver.go | 2 +- cmd/flux/delete_source.go | 2 +- cmd/flux/delete_source_bucket.go | 2 +- cmd/flux/delete_source_git.go | 2 +- cmd/flux/delete_source_helm.go | 2 +- cmd/flux/delete_source_oci.go | 2 +- cmd/flux/diff.go | 2 +- cmd/flux/diff_artifact.go | 2 +- cmd/flux/events.go | 2 +- cmd/flux/export.go | 2 +- cmd/flux/export_alert.go | 2 +- cmd/flux/export_alertprovider.go | 2 +- cmd/flux/export_helmrelease.go | 2 +- cmd/flux/export_image.go | 2 +- cmd/flux/export_image_policy.go | 2 +- cmd/flux/export_image_repository.go | 2 +- cmd/flux/export_image_update.go | 2 +- cmd/flux/export_kustomization.go | 2 +- cmd/flux/export_receiver.go | 2 +- cmd/flux/export_source.go | 2 +- cmd/flux/export_source_bucket.go | 2 +- cmd/flux/export_source_git.go | 2 +- cmd/flux/export_source_helm.go | 2 +- cmd/flux/export_source_oci.go | 2 +- cmd/flux/get.go | 2 +- cmd/flux/get_alert.go | 2 +- cmd/flux/get_alertprovider.go | 2 +- cmd/flux/get_all.go | 2 +- cmd/flux/get_helmrelease.go | 2 +- cmd/flux/get_image.go | 2 +- cmd/flux/get_image_all.go | 2 +- cmd/flux/get_image_policy.go | 2 +- cmd/flux/get_image_repository.go | 2 +- cmd/flux/get_image_update.go | 2 +- cmd/flux/get_kustomization.go | 2 +- cmd/flux/get_receiver.go | 2 +- cmd/flux/get_source.go | 2 +- cmd/flux/get_source_all.go | 2 +- cmd/flux/get_source_bucket.go | 2 +- cmd/flux/get_source_chart.go | 2 +- cmd/flux/get_source_git.go | 2 +- cmd/flux/get_source_helm.go | 2 +- cmd/flux/get_source_oci.go | 2 +- cmd/flux/list.go | 2 +- cmd/flux/list_artifact.go | 4 ++-- cmd/flux/logs.go | 2 +- cmd/flux/main.go | 7 +++++++ cmd/flux/pull.go | 2 +- cmd/flux/pull_artifact.go | 4 ++-- cmd/flux/push.go | 2 +- cmd/flux/push_artifact.go | 4 ++-- cmd/flux/reconcile.go | 2 +- cmd/flux/reconcile_image.go | 2 +- cmd/flux/reconcile_source.go | 2 +- cmd/flux/resume.go | 2 +- cmd/flux/resume_image.go | 2 +- cmd/flux/resume_source.go | 2 +- cmd/flux/stats.go | 4 ++-- cmd/flux/suspend.go | 2 +- cmd/flux/suspend_alert.go | 2 +- cmd/flux/suspend_helmrelease.go | 2 +- cmd/flux/suspend_image.go | 2 +- cmd/flux/suspend_image_repository.go | 2 +- cmd/flux/suspend_image_updateauto.go | 2 +- cmd/flux/suspend_kustomization.go | 2 +- cmd/flux/suspend_receiver.go | 2 +- cmd/flux/suspend_source.go | 2 +- cmd/flux/suspend_source_bucket.go | 2 +- cmd/flux/suspend_source_chart.go | 2 +- cmd/flux/suspend_source_git.go | 2 +- cmd/flux/suspend_source_helm.go | 2 +- cmd/flux/suspend_source_oci.go | 2 +- cmd/flux/tag.go | 2 +- cmd/flux/tag_artifact.go | 4 ++-- cmd/flux/trace.go | 4 ++-- cmd/flux/tree.go | 2 +- cmd/flux/tree_kustomization.go | 2 +- cmd/flux/uninstall.go | 2 +- cmd/flux/version.go | 2 +- 116 files changed, 141 insertions(+), 129 deletions(-) diff --git a/cmd/flux/build.go b/cmd/flux/build.go index 0c901036..1ff140be 100644 --- a/cmd/flux/build.go +++ b/cmd/flux/build.go @@ -23,7 +23,7 @@ import ( var buildCmd = &cobra.Command{ Use: "build", Short: "Build a flux resource", - Long: "The build command is used to build flux resources.", + Long: `The build command is used to build flux resources.`, } func init() { diff --git a/cmd/flux/build_artifact.go b/cmd/flux/build_artifact.go index b0c4a931..1692ce9b 100644 --- a/cmd/flux/build_artifact.go +++ b/cmd/flux/build_artifact.go @@ -33,7 +33,8 @@ import ( var buildArtifactCmd = &cobra.Command{ Use: "artifact", Short: "Build artifact", - Long: `The build artifact command creates a tgz file with the manifests from the given directory or a single manifest file.`, + Long: withPreviewNote(`The build artifact command creates a tgz file with the manifests +from the given directory or a single manifest file.`), Example: ` # Build the given manifests directory into an artifact flux build artifact --path ./path/to/local/manifests --output ./path/to/artifact.tgz diff --git a/cmd/flux/check.go b/cmd/flux/check.go index c29b1af5..ab029f2f 100644 --- a/cmd/flux/check.go +++ b/cmd/flux/check.go @@ -39,8 +39,8 @@ import ( var checkCmd = &cobra.Command{ Use: "check", Short: "Check requirements and installation", - Long: `The check command will perform a series of checks to validate that -the local environment is configured correctly and if the installed components are healthy.`, + Long: withPreviewNote(`The check command will perform a series of checks to validate that +the local environment is configured correctly and if the installed components are healthy.`), Example: ` # Run pre-installation checks flux check --pre diff --git a/cmd/flux/completion.go b/cmd/flux/completion.go index e75a1b19..a3bc6696 100644 --- a/cmd/flux/completion.go +++ b/cmd/flux/completion.go @@ -31,7 +31,7 @@ import ( var completionCmd = &cobra.Command{ Use: "completion", Short: "Generates completion scripts for various shells", - Long: "The completion sub-command generates completion scripts for various shells", + Long: `The completion sub-command generates completion scripts for various shells.`, } func init() { diff --git a/cmd/flux/completion_bash.go b/cmd/flux/completion_bash.go index 42ce075c..872d4a9e 100644 --- a/cmd/flux/completion_bash.go +++ b/cmd/flux/completion_bash.go @@ -25,6 +25,7 @@ import ( var completionBashCmd = &cobra.Command{ Use: "bash", Short: "Generates bash completion scripts", + Long: `The completion sub-command generates completion scripts for bash.`, Example: `To load completion run . <(flux completion bash) diff --git a/cmd/flux/completion_fish.go b/cmd/flux/completion_fish.go index b8cb8cf8..fad5dcfe 100644 --- a/cmd/flux/completion_fish.go +++ b/cmd/flux/completion_fish.go @@ -25,6 +25,7 @@ import ( var completionFishCmd = &cobra.Command{ Use: "fish", Short: "Generates fish completion scripts", + Long: `The completion sub-command generates completion scripts for fish.`, Example: `To configure your fish shell to load completions for each session write this script to your completions dir: flux completion fish > ~/.config/fish/completions/flux.fish diff --git a/cmd/flux/completion_powershell.go b/cmd/flux/completion_powershell.go index 5d23e927..b0a17abc 100644 --- a/cmd/flux/completion_powershell.go +++ b/cmd/flux/completion_powershell.go @@ -25,6 +25,7 @@ import ( var completionPowerShellCmd = &cobra.Command{ Use: "powershell", Short: "Generates powershell completion scripts", + Long: `The completion sub-command generates completion scripts for powershell.`, Example: `To load completion run . <(flux completion powershell) diff --git a/cmd/flux/completion_zsh.go b/cmd/flux/completion_zsh.go index a1fc0c01..79b26685 100644 --- a/cmd/flux/completion_zsh.go +++ b/cmd/flux/completion_zsh.go @@ -26,6 +26,7 @@ import ( var completionZshCmd = &cobra.Command{ Use: "zsh", Short: "Generates zsh completion scripts", + Long: `The completion sub-command generates completion scripts for zsh.`, Example: `To load completion run . <(flux completion zsh) diff --git a/cmd/flux/create.go b/cmd/flux/create.go index 74e091b1..d5e4fbcb 100644 --- a/cmd/flux/create.go +++ b/cmd/flux/create.go @@ -36,7 +36,7 @@ import ( var createCmd = &cobra.Command{ Use: "create", Short: "Create or update sources and resources", - Long: "The create sub-commands generate sources and resources.", + Long: `The create sub-commands generate sources and resources.`, } type createFlags struct { diff --git a/cmd/flux/create_alert.go b/cmd/flux/create_alert.go index a50298f4..a980c1fa 100644 --- a/cmd/flux/create_alert.go +++ b/cmd/flux/create_alert.go @@ -38,7 +38,7 @@ import ( var createAlertCmd = &cobra.Command{ Use: "alert [name]", Short: "Create or update a Alert resource", - Long: "The create alert command generates a Alert resource.", + Long: withPreviewNote(`The create alert command generates a Alert resource.`), Example: ` # Create an Alert for kustomization events flux create alert \ --event-severity info \ diff --git a/cmd/flux/create_alertprovider.go b/cmd/flux/create_alertprovider.go index 2de24341..cef69baf 100644 --- a/cmd/flux/create_alertprovider.go +++ b/cmd/flux/create_alertprovider.go @@ -37,7 +37,7 @@ import ( var createAlertProviderCmd = &cobra.Command{ Use: "alert-provider [name]", Short: "Create or update a Provider resource", - Long: "The create alert-provider command generates a Provider resource.", + Long: withPreviewNote(`The create alert-provider command generates a Provider resource.`), Example: ` # Create a Provider for a Slack channel flux create alert-provider slack \ --type slack \ diff --git a/cmd/flux/create_helmrelease.go b/cmd/flux/create_helmrelease.go index da3e6f67..7ac68060 100644 --- a/cmd/flux/create_helmrelease.go +++ b/cmd/flux/create_helmrelease.go @@ -46,7 +46,7 @@ var createHelmReleaseCmd = &cobra.Command{ Use: "helmrelease [name]", Aliases: []string{"hr"}, Short: "Create or update a HelmRelease resource", - Long: "The helmrelease create command generates a HelmRelease resource for a given HelmRepository source.", + Long: withPreviewNote(`The helmrelease create command generates a HelmRelease resource for a given HelmRepository source.`), Example: ` # Create a HelmRelease with a chart from a HelmRepository source flux create hr podinfo \ --interval=10m \ diff --git a/cmd/flux/create_image.go b/cmd/flux/create_image.go index b6402906..f1bf165d 100644 --- a/cmd/flux/create_image.go +++ b/cmd/flux/create_image.go @@ -20,14 +20,12 @@ import ( "github.com/spf13/cobra" ) -const createImageLong = `The create image sub-commands work with image automation objects; that is, -object controlling updates to git based on e.g., new container images -being available.` - var createImageCmd = &cobra.Command{ Use: "image", Short: "Create or update resources dealing with image automation", - Long: createImageLong, + Long: `The create image sub-commands work with image automation objects; +that is, object controlling updates to git based on e.g., new container images +being available.`, } func init() { diff --git a/cmd/flux/create_image_policy.go b/cmd/flux/create_image_policy.go index 0b9564ae..116a2152 100644 --- a/cmd/flux/create_image_policy.go +++ b/cmd/flux/create_image_policy.go @@ -34,12 +34,12 @@ import ( var createImagePolicyCmd = &cobra.Command{ Use: "policy [name]", Short: "Create or update an ImagePolicy object", - Long: `The create image policy command generates an ImagePolicy resource. + Long: withPreviewNote(`The create image policy command generates an ImagePolicy resource. An ImagePolicy object calculates a "latest image" given an image repository and a policy, e.g., semver. The image that sorts highest according to the policy is recorded in -the status of the object.`, +the status of the object.`), Example: ` # Create an ImagePolicy to select the latest stable release flux create image policy podinfo \ --image-ref=podinfo \ diff --git a/cmd/flux/create_image_repository.go b/cmd/flux/create_image_repository.go index d4ce1fe6..3a4d351d 100644 --- a/cmd/flux/create_image_repository.go +++ b/cmd/flux/create_image_repository.go @@ -32,8 +32,8 @@ import ( var createImageRepositoryCmd = &cobra.Command{ Use: "repository [name]", Short: "Create or update an ImageRepository object", - Long: `The create image repository command generates an ImageRepository resource. -An ImageRepository object specifies an image repository to scan.`, + Long: withPreviewNote(`The create image repository command generates an ImageRepository resource. +An ImageRepository object specifies an image repository to scan.`), Example: ` # Create an ImageRepository object to scan the alpine image repository: flux create image repository alpine-repo --image alpine --interval 20m diff --git a/cmd/flux/create_image_update.go b/cmd/flux/create_image_update.go index 3a17ce06..c1036dfa 100644 --- a/cmd/flux/create_image_update.go +++ b/cmd/flux/create_image_update.go @@ -29,9 +29,9 @@ import ( var createImageUpdateCmd = &cobra.Command{ Use: "update [name]", Short: "Create or update an ImageUpdateAutomation object", - Long: `The create image update command generates an ImageUpdateAutomation resource. + Long: withPreviewNote(`The create image update command generates an ImageUpdateAutomation resource. An ImageUpdateAutomation object specifies an automated update to images -mentioned in YAMLs in a git repository.`, +mentioned in YAMLs in a git repository.`), Example: ` # Configure image updates for the main repository created by flux bootstrap flux create image update flux-system \ --git-repo-ref=flux-system \ diff --git a/cmd/flux/create_kustomization.go b/cmd/flux/create_kustomization.go index 0a4ed533..fea9d836 100644 --- a/cmd/flux/create_kustomization.go +++ b/cmd/flux/create_kustomization.go @@ -42,7 +42,7 @@ var createKsCmd = &cobra.Command{ Use: "kustomization [name]", Aliases: []string{"ks"}, Short: "Create or update a Kustomization resource", - Long: "The create command generates a Kustomization resource for a given source.", + Long: `The create command generates a Kustomization resource for a given source.`, Example: ` # Create a Kustomization resource from a source at a given path flux create kustomization kyverno \ --source=GitRepository/kyverno \ diff --git a/cmd/flux/create_receiver.go b/cmd/flux/create_receiver.go index d7f3d74a..48643aad 100644 --- a/cmd/flux/create_receiver.go +++ b/cmd/flux/create_receiver.go @@ -37,7 +37,7 @@ import ( var createReceiverCmd = &cobra.Command{ Use: "receiver [name]", Short: "Create or update a Receiver resource", - Long: "The create receiver command generates a Receiver resource.", + Long: `The create receiver command generates a Receiver resource.`, Example: ` # Create a Receiver flux create receiver github-receiver \ --type github \ diff --git a/cmd/flux/create_secret.go b/cmd/flux/create_secret.go index 9aad039c..376fd24f 100644 --- a/cmd/flux/create_secret.go +++ b/cmd/flux/create_secret.go @@ -29,7 +29,7 @@ import ( var createSecretCmd = &cobra.Command{ Use: "secret", Short: "Create or update Kubernetes secrets", - Long: "The create source sub-commands generate Kubernetes secrets specific to Flux.", + Long: `The create source sub-commands generate Kubernetes secrets specific to Flux.`, } func init() { diff --git a/cmd/flux/create_secret_git.go b/cmd/flux/create_secret_git.go index 3bf7222a..a9330cff 100644 --- a/cmd/flux/create_secret_git.go +++ b/cmd/flux/create_secret_git.go @@ -36,8 +36,10 @@ var createSecretGitCmd = &cobra.Command{ Use: "git [name]", Short: "Create or update a Kubernetes secret for Git authentication", Long: `The create secret git command generates a Kubernetes secret with Git credentials. -For Git over SSH, the host and SSH keys are automatically generated and stored in the secret. -For Git over HTTP/S, the provided basic authentication credentials or bearer authentication token are stored in the secret.`, +For Git over SSH, the host and SSH keys are automatically generated and stored +in the secret. +For Git over HTTP/S, the provided basic authentication credentials or bearer +authentication token are stored in the secret.`, Example: ` # Create a Git SSH authentication secret using an ECDSA P-521 curve public key flux create secret git podinfo-auth \ diff --git a/cmd/flux/create_secret_helm.go b/cmd/flux/create_secret_helm.go index 9833b449..bf733adb 100644 --- a/cmd/flux/create_secret_helm.go +++ b/cmd/flux/create_secret_helm.go @@ -32,7 +32,7 @@ import ( var createSecretHelmCmd = &cobra.Command{ Use: "helm [name]", Short: "Create or update a Kubernetes secret for Helm repository authentication", - Long: `The create secret helm command generates a Kubernetes secret with basic authentication credentials.`, + Long: withPreviewNote(`The create secret helm command generates a Kubernetes secret with basic authentication credentials.`), Example: ` # Create a Helm authentication secret on disk and encrypt it with Mozilla SOPS flux create secret helm repo-auth \ --namespace=my-namespace \ diff --git a/cmd/flux/create_secret_oci.go b/cmd/flux/create_secret_oci.go index 09a689f0..b1a51cd6 100644 --- a/cmd/flux/create_secret_oci.go +++ b/cmd/flux/create_secret_oci.go @@ -31,7 +31,7 @@ import ( var createSecretOCICmd = &cobra.Command{ Use: "oci [name]", Short: "Create or update a Kubernetes image pull secret", - Long: `The create secret oci command generates a Kubernetes secret that can be used for OCIRepository authentication`, + Long: withPreviewNote(`The create secret oci command generates a Kubernetes secret that can be used for OCIRepository authentication`), Example: ` # Create an OCI authentication secret on disk and encrypt it with Mozilla SOPS flux create secret oci podinfo-auth \ --url=ghcr.io \ diff --git a/cmd/flux/create_secret_tls.go b/cmd/flux/create_secret_tls.go index ed4eb9fe..ffe75651 100644 --- a/cmd/flux/create_secret_tls.go +++ b/cmd/flux/create_secret_tls.go @@ -33,7 +33,7 @@ import ( var createSecretTLSCmd = &cobra.Command{ Use: "tls [name]", Short: "Create or update a Kubernetes secret with TLS certificates", - Long: `The create secret tls command generates a Kubernetes secret with certificates for use with TLS.`, + Long: withPreviewNote(`The create secret tls command generates a Kubernetes secret with certificates for use with TLS.`), Example: ` # Create a TLS secret on disk and encrypt it with Mozilla SOPS. # Files are expected to be PEM-encoded. flux create secret tls certs \ diff --git a/cmd/flux/create_source.go b/cmd/flux/create_source.go index 9e1e93f5..cdd4e3b2 100644 --- a/cmd/flux/create_source.go +++ b/cmd/flux/create_source.go @@ -25,7 +25,7 @@ import ( var createSourceCmd = &cobra.Command{ Use: "source", Short: "Create or update sources", - Long: "The create source sub-commands generate sources.", + Long: `The create source sub-commands generate sources.`, } type createSourceFlags struct { diff --git a/cmd/flux/create_source_bucket.go b/cmd/flux/create_source_bucket.go index 0697aa3c..68ef8f3e 100644 --- a/cmd/flux/create_source_bucket.go +++ b/cmd/flux/create_source_bucket.go @@ -42,8 +42,8 @@ import ( var createSourceBucketCmd = &cobra.Command{ Use: "bucket [name]", Short: "Create or update a Bucket source", - Long: `The create source bucket command generates a Bucket resource and waits for it to be downloaded. -For Buckets with static authentication, the credentials are stored in a Kubernetes secret.`, + Long: withPreviewNote(`The create source bucket command generates a Bucket resource and waits for it to be downloaded. +For Buckets with static authentication, the credentials are stored in a Kubernetes secret.`), Example: ` # Create a source for a Bucket using static authentication flux create source bucket podinfo \ --bucket-name=podinfo \ diff --git a/cmd/flux/create_source_helm.go b/cmd/flux/create_source_helm.go index 43373b8d..e55f847a 100644 --- a/cmd/flux/create_source_helm.go +++ b/cmd/flux/create_source_helm.go @@ -42,8 +42,8 @@ import ( var createSourceHelmCmd = &cobra.Command{ Use: "helm [name]", Short: "Create or update a HelmRepository source", - Long: `The create source helm command generates a HelmRepository resource and waits for it to fetch the index. -For private Helm repositories, the basic authentication credentials are stored in a Kubernetes secret.`, + Long: withPreviewNote(`The create source helm command generates a HelmRepository resource and waits for it to fetch the index. +For private Helm repositories, the basic authentication credentials are stored in a Kubernetes secret.`), Example: ` # Create a source for an HTTPS public Helm repository flux create source helm podinfo \ --url=https://stefanprodan.github.io/podinfo \ diff --git a/cmd/flux/create_source_oci.go b/cmd/flux/create_source_oci.go index d048f367..5d6a5f95 100644 --- a/cmd/flux/create_source_oci.go +++ b/cmd/flux/create_source_oci.go @@ -40,7 +40,7 @@ import ( var createSourceOCIRepositoryCmd = &cobra.Command{ Use: "oci [name]", Short: "Create or update an OCIRepository", - Long: `The create source oci command generates an OCIRepository resource and waits for it to be ready.`, + Long: withPreviewNote(`The create source oci command generates an OCIRepository resource and waits for it to be ready.`), Example: ` # Create an OCIRepository for a public container image flux create source oci podinfo \ --url=oci://ghcr.io/stefanprodan/manifests/podinfo \ diff --git a/cmd/flux/create_tenant.go b/cmd/flux/create_tenant.go index 79ffdb82..1b071ecb 100644 --- a/cmd/flux/create_tenant.go +++ b/cmd/flux/create_tenant.go @@ -37,8 +37,8 @@ import ( var createTenantCmd = &cobra.Command{ Use: "tenant", Short: "Create or update a tenant", - Long: `The create tenant command generates namespaces, service accounts and role bindings to limit the -reconcilers scope to the tenant namespaces.`, + Long: withPreviewNote(`The create tenant command generates namespaces, service accounts and role bindings to limit the +reconcilers scope to the tenant namespaces.`), Example: ` # Create a tenant with access to a namespace flux create tenant dev-team \ --with-namespace=frontend \ diff --git a/cmd/flux/delete.go b/cmd/flux/delete.go index eb1079bc..f3c43c3c 100644 --- a/cmd/flux/delete.go +++ b/cmd/flux/delete.go @@ -30,7 +30,7 @@ import ( var deleteCmd = &cobra.Command{ Use: "delete", Short: "Delete sources and resources", - Long: "The delete sub-commands delete sources and resources.", + Long: `The delete sub-commands delete sources and resources.`, } type deleteFlags struct { diff --git a/cmd/flux/delete_alert.go b/cmd/flux/delete_alert.go index 91077ca0..f0c8ee58 100644 --- a/cmd/flux/delete_alert.go +++ b/cmd/flux/delete_alert.go @@ -25,7 +25,7 @@ import ( var deleteAlertCmd = &cobra.Command{ Use: "alert [name]", Short: "Delete a Alert resource", - Long: "The delete alert command removes the given Alert from the cluster.", + Long: withPreviewNote("The delete alert command removes the given Alert from the cluster."), Example: ` # Delete an Alert and the Kubernetes resources created by it flux delete alert main`, ValidArgsFunction: resourceNamesCompletionFunc(notificationv1.GroupVersion.WithKind(notificationv1.AlertKind)), diff --git a/cmd/flux/delete_alertprovider.go b/cmd/flux/delete_alertprovider.go index 8cd2c5d2..871f42a6 100644 --- a/cmd/flux/delete_alertprovider.go +++ b/cmd/flux/delete_alertprovider.go @@ -25,7 +25,7 @@ import ( var deleteAlertProviderCmd = &cobra.Command{ Use: "alert-provider [name]", Short: "Delete a Provider resource", - Long: "The delete alert-provider command removes the given Provider from the cluster.", + Long: withPreviewNote("The delete alert-provider command removes the given Provider from the cluster."), Example: ` # Delete a Provider and the Kubernetes resources created by it flux delete alert-provider slack`, ValidArgsFunction: resourceNamesCompletionFunc(notificationv1.GroupVersion.WithKind(notificationv1.ProviderKind)), diff --git a/cmd/flux/delete_helmrelease.go b/cmd/flux/delete_helmrelease.go index c721d3dc..6f2300c5 100644 --- a/cmd/flux/delete_helmrelease.go +++ b/cmd/flux/delete_helmrelease.go @@ -26,7 +26,7 @@ var deleteHelmReleaseCmd = &cobra.Command{ Use: "helmrelease [name]", Aliases: []string{"hr"}, Short: "Delete a HelmRelease resource", - Long: "The delete helmrelease command removes the given HelmRelease from the cluster.", + Long: withPreviewNote("The delete helmrelease command removes the given HelmRelease from the cluster."), Example: ` # Delete a Helm release and the Kubernetes resources created by it flux delete hr podinfo`, ValidArgsFunction: resourceNamesCompletionFunc(helmv2.GroupVersion.WithKind(helmv2.HelmReleaseKind)), diff --git a/cmd/flux/delete_image.go b/cmd/flux/delete_image.go index 7547ae7f..cd527fa8 100644 --- a/cmd/flux/delete_image.go +++ b/cmd/flux/delete_image.go @@ -23,7 +23,7 @@ import ( var deleteImageCmd = &cobra.Command{ Use: "image", Short: "Delete image automation objects", - Long: "The delete image sub-commands delete image automation objects.", + Long: `The delete image sub-commands delete image automation objects.`, } func init() { diff --git a/cmd/flux/delete_image_policy.go b/cmd/flux/delete_image_policy.go index 7d02f742..28115900 100644 --- a/cmd/flux/delete_image_policy.go +++ b/cmd/flux/delete_image_policy.go @@ -25,7 +25,7 @@ import ( var deleteImagePolicyCmd = &cobra.Command{ Use: "policy [name]", Short: "Delete an ImagePolicy object", - Long: "The delete image policy command deletes the given ImagePolicy from the cluster.", + Long: withPreviewNote(`The delete image policy command deletes the given ImagePolicy from the cluster.`), Example: ` # Delete an image policy flux delete image policy alpine3.x`, ValidArgsFunction: resourceNamesCompletionFunc(imagev1.GroupVersion.WithKind(imagev1.ImagePolicyKind)), diff --git a/cmd/flux/delete_image_repository.go b/cmd/flux/delete_image_repository.go index de5388a6..5adc3a80 100644 --- a/cmd/flux/delete_image_repository.go +++ b/cmd/flux/delete_image_repository.go @@ -25,7 +25,7 @@ import ( var deleteImageRepositoryCmd = &cobra.Command{ Use: "repository [name]", Short: "Delete an ImageRepository object", - Long: "The delete image repository command deletes the given ImageRepository from the cluster.", + Long: withPreviewNote("The delete image repository command deletes the given ImageRepository from the cluster."), Example: ` # Delete an image repository flux delete image repository alpine`, ValidArgsFunction: resourceNamesCompletionFunc(imagev1.GroupVersion.WithKind(imagev1.ImageRepositoryKind)), diff --git a/cmd/flux/delete_image_update.go b/cmd/flux/delete_image_update.go index 3c38f078..0c59ff89 100644 --- a/cmd/flux/delete_image_update.go +++ b/cmd/flux/delete_image_update.go @@ -25,7 +25,7 @@ import ( var deleteImageUpdateCmd = &cobra.Command{ Use: "update [name]", Short: "Delete an ImageUpdateAutomation object", - Long: "The delete image update command deletes the given ImageUpdateAutomation from the cluster.", + Long: withPreviewNote(`The delete image update command deletes the given ImageUpdateAutomation from the cluster.`), Example: ` # Delete an image update automation flux delete image update latest-images`, ValidArgsFunction: resourceNamesCompletionFunc(autov1.GroupVersion.WithKind(autov1.ImageUpdateAutomationKind)), diff --git a/cmd/flux/delete_kustomization.go b/cmd/flux/delete_kustomization.go index 699d4a87..9bca28b0 100644 --- a/cmd/flux/delete_kustomization.go +++ b/cmd/flux/delete_kustomization.go @@ -26,7 +26,7 @@ var deleteKsCmd = &cobra.Command{ Use: "kustomization [name]", Aliases: []string{"ks"}, Short: "Delete a Kustomization resource", - Long: "The delete kustomization command deletes the given Kustomization from the cluster.", + Long: `The delete kustomization command deletes the given Kustomization from the cluster.`, Example: ` # Delete a kustomization and the Kubernetes resources created by it when prune is enabled flux delete kustomization podinfo`, ValidArgsFunction: resourceNamesCompletionFunc(kustomizev1.GroupVersion.WithKind(kustomizev1.KustomizationKind)), diff --git a/cmd/flux/delete_receiver.go b/cmd/flux/delete_receiver.go index 8bdaab85..070f91ab 100644 --- a/cmd/flux/delete_receiver.go +++ b/cmd/flux/delete_receiver.go @@ -25,7 +25,7 @@ import ( var deleteReceiverCmd = &cobra.Command{ Use: "receiver [name]", Short: "Delete a Receiver resource", - Long: "The delete receiver command removes the given Receiver from the cluster.", + Long: `The delete receiver command removes the given Receiver from the cluster.`, Example: ` # Delete an Receiver and the Kubernetes resources created by it flux delete receiver main`, ValidArgsFunction: resourceNamesCompletionFunc(notificationv1.GroupVersion.WithKind(notificationv1.ReceiverKind)), diff --git a/cmd/flux/delete_source.go b/cmd/flux/delete_source.go index 84ec1d04..c28f6418 100644 --- a/cmd/flux/delete_source.go +++ b/cmd/flux/delete_source.go @@ -23,7 +23,7 @@ import ( var deleteSourceCmd = &cobra.Command{ Use: "source", Short: "Delete sources", - Long: "The delete source sub-commands delete sources.", + Long: `The delete source sub-commands delete sources.`, } func init() { diff --git a/cmd/flux/delete_source_bucket.go b/cmd/flux/delete_source_bucket.go index a032dfcc..c3eca532 100644 --- a/cmd/flux/delete_source_bucket.go +++ b/cmd/flux/delete_source_bucket.go @@ -25,7 +25,7 @@ import ( var deleteSourceBucketCmd = &cobra.Command{ Use: "bucket [name]", Short: "Delete a Bucket source", - Long: "The delete source bucket command deletes the given Bucket from the cluster.", + Long: withPreviewNote("The delete source bucket command deletes the given Bucket from the cluster."), Example: ` # Delete a Bucket source flux delete source bucket podinfo`, ValidArgsFunction: resourceNamesCompletionFunc(sourcev1.GroupVersion.WithKind(sourcev1.BucketKind)), diff --git a/cmd/flux/delete_source_git.go b/cmd/flux/delete_source_git.go index 78dec208..add16fb5 100644 --- a/cmd/flux/delete_source_git.go +++ b/cmd/flux/delete_source_git.go @@ -25,7 +25,7 @@ import ( var deleteSourceGitCmd = &cobra.Command{ Use: "git [name]", Short: "Delete a GitRepository source", - Long: "The delete source git command deletes the given GitRepository from the cluster.", + Long: `The delete source git command deletes the given GitRepository from the cluster.`, Example: ` # Delete a Git repository flux delete source git podinfo`, ValidArgsFunction: resourceNamesCompletionFunc(sourcev1.GroupVersion.WithKind(sourcev1.GitRepositoryKind)), diff --git a/cmd/flux/delete_source_helm.go b/cmd/flux/delete_source_helm.go index a5956d87..bd057e8a 100644 --- a/cmd/flux/delete_source_helm.go +++ b/cmd/flux/delete_source_helm.go @@ -25,7 +25,7 @@ import ( var deleteSourceHelmCmd = &cobra.Command{ Use: "helm [name]", Short: "Delete a HelmRepository source", - Long: "The delete source helm command deletes the given HelmRepository from the cluster.", + Long: withPreviewNote("The delete source helm command deletes the given HelmRepository from the cluster."), Example: ` # Delete a Helm repository flux delete source helm podinfo`, ValidArgsFunction: resourceNamesCompletionFunc(sourcev1.GroupVersion.WithKind(sourcev1.HelmRepositoryKind)), diff --git a/cmd/flux/delete_source_oci.go b/cmd/flux/delete_source_oci.go index 8d98e5b0..c869be69 100644 --- a/cmd/flux/delete_source_oci.go +++ b/cmd/flux/delete_source_oci.go @@ -25,7 +25,7 @@ import ( var deleteSourceOCIRepositoryCmd = &cobra.Command{ Use: "oci [name]", Short: "Delete an OCIRepository source", - Long: "The delete source oci command deletes the given OCIRepository from the cluster.", + Long: withPreviewNote("The delete source oci command deletes the given OCIRepository from the cluster."), Example: ` # Delete an OCIRepository flux delete source oci podinfo`, ValidArgsFunction: resourceNamesCompletionFunc(sourcev1.GroupVersion.WithKind(sourcev1.OCIRepositoryKind)), diff --git a/cmd/flux/diff.go b/cmd/flux/diff.go index 55ebf4bb..9f0ec4a9 100644 --- a/cmd/flux/diff.go +++ b/cmd/flux/diff.go @@ -23,7 +23,7 @@ import ( var diffCmd = &cobra.Command{ Use: "diff", Short: "Diff a flux resource", - Long: "The diff command is used to do a server-side dry-run on flux resources, then prints the diff.", + Long: `The diff command is used to do a server-side dry-run on flux resources, then prints the diff.`, } func init() { diff --git a/cmd/flux/diff_artifact.go b/cmd/flux/diff_artifact.go index 430f5497..c75d1c45 100644 --- a/cmd/flux/diff_artifact.go +++ b/cmd/flux/diff_artifact.go @@ -30,7 +30,7 @@ import ( var diffArtifactCmd = &cobra.Command{ Use: "artifact", Short: "Diff Artifact", - Long: `The diff artifact command computes the diff between the remote OCI artifact and a local directory or file`, + Long: withPreviewNote(`The diff artifact command computes the diff between the remote OCI artifact and a local directory or file`), Example: `# Check if local files differ from remote flux diff artifact oci://ghcr.io/stefanprodan/manifests:podinfo:6.2.0 --path=./kustomize`, RunE: diffArtifactCmdRun, diff --git a/cmd/flux/events.go b/cmd/flux/events.go index c534dfd0..ddfd2a39 100644 --- a/cmd/flux/events.go +++ b/cmd/flux/events.go @@ -55,7 +55,7 @@ import ( var eventsCmd = &cobra.Command{ Use: "events", Short: "Display Kubernetes events for Flux resources", - Long: "The events sub-command shows Kubernetes events from Flux resources", + Long: withPreviewNote("The events sub-command shows Kubernetes events from Flux resources"), Example: ` # Display events for flux resources in default namespace flux events -n default diff --git a/cmd/flux/export.go b/cmd/flux/export.go index c537156c..3ac9e215 100644 --- a/cmd/flux/export.go +++ b/cmd/flux/export.go @@ -32,7 +32,7 @@ import ( var exportCmd = &cobra.Command{ Use: "export", Short: "Export resources in YAML format", - Long: "The export sub-commands export resources in YAML format.", + Long: `The export sub-commands export resources in YAML format.`, } type exportFlags struct { diff --git a/cmd/flux/export_alert.go b/cmd/flux/export_alert.go index cf125d89..63f9f59f 100644 --- a/cmd/flux/export_alert.go +++ b/cmd/flux/export_alert.go @@ -26,7 +26,7 @@ import ( var exportAlertCmd = &cobra.Command{ Use: "alert [name]", Short: "Export Alert resources in YAML format", - Long: "The export alert command exports one or all Alert resources in YAML format.", + Long: withPreviewNote("The export alert command exports one or all Alert resources in YAML format."), Example: ` # Export all Alert resources flux export alert --all > alerts.yaml diff --git a/cmd/flux/export_alertprovider.go b/cmd/flux/export_alertprovider.go index f6caaad3..782648ca 100644 --- a/cmd/flux/export_alertprovider.go +++ b/cmd/flux/export_alertprovider.go @@ -26,7 +26,7 @@ import ( var exportAlertProviderCmd = &cobra.Command{ Use: "alert-provider [name]", Short: "Export Provider resources in YAML format", - Long: "The export alert-provider command exports one or all Provider resources in YAML format.", + Long: withPreviewNote("The export alert-provider command exports one or all Provider resources in YAML format."), Example: ` # Export all Provider resources flux export alert-provider --all > alert-providers.yaml diff --git a/cmd/flux/export_helmrelease.go b/cmd/flux/export_helmrelease.go index 8fd8c87f..e00b3494 100644 --- a/cmd/flux/export_helmrelease.go +++ b/cmd/flux/export_helmrelease.go @@ -27,7 +27,7 @@ var exportHelmReleaseCmd = &cobra.Command{ Use: "helmrelease [name]", Aliases: []string{"hr"}, Short: "Export HelmRelease resources in YAML format", - Long: "The export helmrelease command exports one or all HelmRelease resources in YAML format.", + Long: withPreviewNote("The export helmrelease command exports one or all HelmRelease resources in YAML format."), Example: ` # Export all HelmRelease resources flux export helmrelease --all > kustomizations.yaml diff --git a/cmd/flux/export_image.go b/cmd/flux/export_image.go index 24410c97..074cff73 100644 --- a/cmd/flux/export_image.go +++ b/cmd/flux/export_image.go @@ -23,7 +23,7 @@ import ( var exportImageCmd = &cobra.Command{ Use: "image", Short: "Export image automation objects", - Long: "The export image sub-commands export image automation objects in YAML format.", + Long: `The export image sub-commands export image automation objects in YAML format.`, } func init() { diff --git a/cmd/flux/export_image_policy.go b/cmd/flux/export_image_policy.go index 7bc24273..835c8a20 100644 --- a/cmd/flux/export_image_policy.go +++ b/cmd/flux/export_image_policy.go @@ -26,7 +26,7 @@ import ( var exportImagePolicyCmd = &cobra.Command{ Use: "policy [name]", Short: "Export ImagePolicy resources in YAML format", - Long: "The export image policy command exports one or all ImagePolicy resources in YAML format.", + Long: withPreviewNote("The export image policy command exports one or all ImagePolicy resources in YAML format."), Example: ` # Export all ImagePolicy resources flux export image policy --all > image-policies.yaml diff --git a/cmd/flux/export_image_repository.go b/cmd/flux/export_image_repository.go index 29485789..48df926d 100644 --- a/cmd/flux/export_image_repository.go +++ b/cmd/flux/export_image_repository.go @@ -26,7 +26,7 @@ import ( var exportImageRepositoryCmd = &cobra.Command{ Use: "repository [name]", Short: "Export ImageRepository resources in YAML format", - Long: "The export image repository command exports one or all ImageRepository resources in YAML format.", + Long: withPreviewNote("The export image repository command exports one or all ImageRepository resources in YAML format."), Example: ` # Export all ImageRepository resources flux export image repository --all > image-repositories.yaml diff --git a/cmd/flux/export_image_update.go b/cmd/flux/export_image_update.go index 44f4b4a1..2bbc1700 100644 --- a/cmd/flux/export_image_update.go +++ b/cmd/flux/export_image_update.go @@ -26,7 +26,7 @@ import ( var exportImageUpdateCmd = &cobra.Command{ Use: "update [name]", Short: "Export ImageUpdateAutomation resources in YAML format", - Long: "The export image update command exports one or all ImageUpdateAutomation resources in YAML format.", + Long: withPreviewNote("The export image update command exports one or all ImageUpdateAutomation resources in YAML format."), Example: ` # Export all ImageUpdateAutomation resources flux export image update --all > updates.yaml diff --git a/cmd/flux/export_kustomization.go b/cmd/flux/export_kustomization.go index 139f072b..d46c5729 100644 --- a/cmd/flux/export_kustomization.go +++ b/cmd/flux/export_kustomization.go @@ -27,7 +27,7 @@ var exportKsCmd = &cobra.Command{ Use: "kustomization [name]", Aliases: []string{"ks"}, Short: "Export Kustomization resources in YAML format", - Long: "The export kustomization command exports one or all Kustomization resources in YAML format.", + Long: `The export kustomization command exports one or all Kustomization resources in YAML format.`, Example: ` # Export all Kustomization resources flux export kustomization --all > kustomizations.yaml diff --git a/cmd/flux/export_receiver.go b/cmd/flux/export_receiver.go index 1ef18282..358d0b42 100644 --- a/cmd/flux/export_receiver.go +++ b/cmd/flux/export_receiver.go @@ -26,7 +26,7 @@ import ( var exportReceiverCmd = &cobra.Command{ Use: "receiver [name]", Short: "Export Receiver resources in YAML format", - Long: "The export receiver command exports one or all Receiver resources in YAML format.", + Long: `The export receiver command exports one or all Receiver resources in YAML format.`, Example: ` # Export all Receiver resources flux export receiver --all > receivers.yaml diff --git a/cmd/flux/export_source.go b/cmd/flux/export_source.go index 3ba6f6bb..84ddc741 100644 --- a/cmd/flux/export_source.go +++ b/cmd/flux/export_source.go @@ -23,7 +23,7 @@ import ( var exportSourceCmd = &cobra.Command{ Use: "source", Short: "Export sources", - Long: "The export source sub-commands export sources in YAML format.", + Long: `The export source sub-commands export sources in YAML format.`, } var ( diff --git a/cmd/flux/export_source_bucket.go b/cmd/flux/export_source_bucket.go index 93d1d87d..b95d266a 100644 --- a/cmd/flux/export_source_bucket.go +++ b/cmd/flux/export_source_bucket.go @@ -27,7 +27,7 @@ import ( var exportSourceBucketCmd = &cobra.Command{ Use: "bucket [name]", Short: "Export Bucket sources in YAML format", - Long: "The export source git command exports one or all Bucket sources in YAML format.", + Long: withPreviewNote("The export source git command exports one or all Bucket sources in YAML format."), Example: ` # Export all Bucket sources flux export source bucket --all > sources.yaml diff --git a/cmd/flux/export_source_git.go b/cmd/flux/export_source_git.go index 57ab7e77..0e2921e4 100644 --- a/cmd/flux/export_source_git.go +++ b/cmd/flux/export_source_git.go @@ -27,7 +27,7 @@ import ( var exportSourceGitCmd = &cobra.Command{ Use: "git [name]", Short: "Export GitRepository sources in YAML format", - Long: "The export source git command exports one or all GitRepository sources in YAML format.", + Long: `The export source git command exports one or all GitRepository sources in YAML format.`, Example: ` # Export all GitRepository sources flux export source git --all > sources.yaml diff --git a/cmd/flux/export_source_helm.go b/cmd/flux/export_source_helm.go index f5f7ef8c..f52e5010 100644 --- a/cmd/flux/export_source_helm.go +++ b/cmd/flux/export_source_helm.go @@ -27,7 +27,7 @@ import ( var exportSourceHelmCmd = &cobra.Command{ Use: "helm [name]", Short: "Export HelmRepository sources in YAML format", - Long: "The export source git command exports one or all HelmRepository sources in YAML format.", + Long: withPreviewNote("The export source git command exports one or all HelmRepository sources in YAML format."), Example: ` # Export all HelmRepository sources flux export source helm --all > sources.yaml diff --git a/cmd/flux/export_source_oci.go b/cmd/flux/export_source_oci.go index c6ea9c77..66e942d9 100644 --- a/cmd/flux/export_source_oci.go +++ b/cmd/flux/export_source_oci.go @@ -27,7 +27,7 @@ import ( var exportSourceOCIRepositoryCmd = &cobra.Command{ Use: "oci [name]", Short: "Export OCIRepository sources in YAML format", - Long: "The export source oci command exports one or all OCIRepository sources in YAML format.", + Long: withPreviewNote("The export source oci command exports one or all OCIRepository sources in YAML format."), Example: ` # Export all OCIRepository sources flux export source oci --all > sources.yaml diff --git a/cmd/flux/get.go b/cmd/flux/get.go index 1442f3af..51f5b698 100644 --- a/cmd/flux/get.go +++ b/cmd/flux/get.go @@ -59,7 +59,7 @@ func (m typeMap) execute(t string, obj runtime.Object) (summarisable, error) { var getCmd = &cobra.Command{ Use: "get", Short: "Get the resources and their status", - Long: "The get sub-commands print the statuses of Flux resources.", + Long: `The get sub-commands print the statuses of Flux resources.`, } type GetFlags struct { diff --git a/cmd/flux/get_alert.go b/cmd/flux/get_alert.go index 64c170c5..9137e90e 100644 --- a/cmd/flux/get_alert.go +++ b/cmd/flux/get_alert.go @@ -31,7 +31,7 @@ var getAlertCmd = &cobra.Command{ Use: "alerts", Aliases: []string{"alert"}, Short: "Get Alert statuses", - Long: "The get alert command prints the statuses of the resources.", + Long: withPreviewNote("The get alert command prints the statuses of the resources."), Example: ` # List all Alerts and their status flux get alerts`, ValidArgsFunction: resourceNamesCompletionFunc(notificationv1.GroupVersion.WithKind(notificationv1.AlertKind)), diff --git a/cmd/flux/get_alertprovider.go b/cmd/flux/get_alertprovider.go index c87b9253..983cbf33 100644 --- a/cmd/flux/get_alertprovider.go +++ b/cmd/flux/get_alertprovider.go @@ -29,7 +29,7 @@ var getAlertProviderCmd = &cobra.Command{ Use: "alert-providers", Aliases: []string{"alert-provider"}, Short: "Get Provider statuses", - Long: "The get alert-provider command prints the statuses of the resources.", + Long: withPreviewNote("The get alert-provider command prints the statuses of the resources."), Example: ` # List all Providers and their status flux get alert-providers`, ValidArgsFunction: resourceNamesCompletionFunc(notificationv1.GroupVersion.WithKind(notificationv1.ProviderKind)), diff --git a/cmd/flux/get_all.go b/cmd/flux/get_all.go index d3e88ccc..f868b833 100644 --- a/cmd/flux/get_all.go +++ b/cmd/flux/get_all.go @@ -30,7 +30,7 @@ import ( var getAllCmd = &cobra.Command{ Use: "all", Short: "Get all resources and statuses", - Long: "The get all command print the statuses of all resources.", + Long: withPreviewNote("The get all command print the statuses of all resources."), Example: ` # List all resources in a namespace flux get all --namespace=flux-system diff --git a/cmd/flux/get_helmrelease.go b/cmd/flux/get_helmrelease.go index 0689757e..fd709d29 100644 --- a/cmd/flux/get_helmrelease.go +++ b/cmd/flux/get_helmrelease.go @@ -30,7 +30,7 @@ var getHelmReleaseCmd = &cobra.Command{ Use: "helmreleases", Aliases: []string{"hr", "helmrelease"}, Short: "Get HelmRelease statuses", - Long: "The get helmreleases command prints the statuses of the resources.", + Long: withPreviewNote("The get helmreleases command prints the statuses of the resources."), Example: ` # List all Helm releases and their status flux get helmreleases`, ValidArgsFunction: resourceNamesCompletionFunc(helmv2.GroupVersion.WithKind(helmv2.HelmReleaseKind)), diff --git a/cmd/flux/get_image.go b/cmd/flux/get_image.go index 41181189..0cffc78d 100644 --- a/cmd/flux/get_image.go +++ b/cmd/flux/get_image.go @@ -24,7 +24,7 @@ var getImageCmd = &cobra.Command{ Use: "images", Aliases: []string{"image"}, Short: "Get image automation object status", - Long: "The get image sub-commands print the status of image automation objects.", + Long: `The get image sub-commands print the status of image automation objects.`, } func init() { diff --git a/cmd/flux/get_image_all.go b/cmd/flux/get_image_all.go index f861a26b..4a37e238 100644 --- a/cmd/flux/get_image_all.go +++ b/cmd/flux/get_image_all.go @@ -28,7 +28,7 @@ import ( var getImageAllCmd = &cobra.Command{ Use: "all", Short: "Get all image statuses", - Long: "The get image sub-commands print the statuses of all image objects.", + Long: withPreviewNote("The get image sub-commands print the statuses of all image objects."), Example: ` # List all image objects in a namespace flux get images all --namespace=flux-system diff --git a/cmd/flux/get_image_policy.go b/cmd/flux/get_image_policy.go index 9d261fe8..cc10f307 100644 --- a/cmd/flux/get_image_policy.go +++ b/cmd/flux/get_image_policy.go @@ -28,7 +28,7 @@ import ( var getImagePolicyCmd = &cobra.Command{ Use: "policy", Short: "Get ImagePolicy status", - Long: "The get image policy command prints the status of ImagePolicy objects.", + Long: withPreviewNote("The get image policy command prints the status of ImagePolicy objects."), Example: ` # List all image policies and their status flux get image policy diff --git a/cmd/flux/get_image_repository.go b/cmd/flux/get_image_repository.go index 0e9bf865..0f6f95a6 100644 --- a/cmd/flux/get_image_repository.go +++ b/cmd/flux/get_image_repository.go @@ -31,7 +31,7 @@ import ( var getImageRepositoryCmd = &cobra.Command{ Use: "repository", Short: "Get ImageRepository status", - Long: "The get image repository command prints the status of ImageRepository objects.", + Long: withPreviewNote("The get image repository command prints the status of ImageRepository objects."), Example: ` # List all image repositories and their status flux get image repository diff --git a/cmd/flux/get_image_update.go b/cmd/flux/get_image_update.go index dd84b6d8..833be4ab 100644 --- a/cmd/flux/get_image_update.go +++ b/cmd/flux/get_image_update.go @@ -31,7 +31,7 @@ import ( var getImageUpdateCmd = &cobra.Command{ Use: "update", Short: "Get ImageUpdateAutomation status", - Long: "The get image update command prints the status of ImageUpdateAutomation objects.", + Long: withPreviewNote("The get image update command prints the status of ImageUpdateAutomation objects."), Example: ` # List all image update automation object and their status flux get image update diff --git a/cmd/flux/get_kustomization.go b/cmd/flux/get_kustomization.go index 7da038d5..517aa375 100644 --- a/cmd/flux/get_kustomization.go +++ b/cmd/flux/get_kustomization.go @@ -33,7 +33,7 @@ var getKsCmd = &cobra.Command{ Use: "kustomizations", Aliases: []string{"ks", "kustomization"}, Short: "Get Kustomization statuses", - Long: "The get kustomizations command prints the statuses of the resources.", + Long: `The get kustomizations command prints the statuses of the resources.`, Example: ` # List all kustomizations and their status flux get kustomizations`, ValidArgsFunction: resourceNamesCompletionFunc(kustomizev1.GroupVersion.WithKind(kustomizev1.KustomizationKind)), diff --git a/cmd/flux/get_receiver.go b/cmd/flux/get_receiver.go index b20cab9b..a72d0765 100644 --- a/cmd/flux/get_receiver.go +++ b/cmd/flux/get_receiver.go @@ -31,7 +31,7 @@ var getReceiverCmd = &cobra.Command{ Use: "receivers", Aliases: []string{"receiver"}, Short: "Get Receiver statuses", - Long: "The get receiver command prints the statuses of the resources.", + Long: `The get receiver command prints the statuses of the resources.`, Example: ` # List all Receiver and their status flux get receivers`, ValidArgsFunction: resourceNamesCompletionFunc(notificationv1.GroupVersion.WithKind(notificationv1.ReceiverKind)), diff --git a/cmd/flux/get_source.go b/cmd/flux/get_source.go index 0be7acf0..b70d959f 100644 --- a/cmd/flux/get_source.go +++ b/cmd/flux/get_source.go @@ -24,7 +24,7 @@ var getSourceCmd = &cobra.Command{ Use: "sources", Aliases: []string{"source"}, Short: "Get source statuses", - Long: "The get source sub-commands print the statuses of the sources.", + Long: `The get source sub-commands print the statuses of the sources.`, } func init() { diff --git a/cmd/flux/get_source_all.go b/cmd/flux/get_source_all.go index abae5ca8..a7c52e85 100644 --- a/cmd/flux/get_source_all.go +++ b/cmd/flux/get_source_all.go @@ -28,7 +28,7 @@ import ( var getSourceAllCmd = &cobra.Command{ Use: "all", Short: "Get all source statuses", - Long: "The get sources all command print the statuses of all sources.", + Long: withPreviewNote("The get sources all command print the statuses of all sources."), Example: ` # List all sources in a namespace flux get sources all --namespace=flux-system diff --git a/cmd/flux/get_source_bucket.go b/cmd/flux/get_source_bucket.go index 93d159d8..b21ee223 100644 --- a/cmd/flux/get_source_bucket.go +++ b/cmd/flux/get_source_bucket.go @@ -32,7 +32,7 @@ import ( var getSourceBucketCmd = &cobra.Command{ Use: "bucket", Short: "Get Bucket source statuses", - Long: "The get sources bucket command prints the status of the Bucket sources.", + Long: withPreviewNote("The get sources bucket command prints the status of the Bucket sources."), Example: ` # List all Buckets and their status flux get sources bucket diff --git a/cmd/flux/get_source_chart.go b/cmd/flux/get_source_chart.go index 3f9f5948..e83839cb 100644 --- a/cmd/flux/get_source_chart.go +++ b/cmd/flux/get_source_chart.go @@ -32,7 +32,7 @@ import ( var getSourceHelmChartCmd = &cobra.Command{ Use: "chart", Short: "Get HelmChart statuses", - Long: "The get sources chart command prints the status of the HelmCharts.", + Long: withPreviewNote("The get sources chart command prints the status of the HelmCharts."), Example: ` # List all Helm charts and their status flux get sources chart diff --git a/cmd/flux/get_source_git.go b/cmd/flux/get_source_git.go index 15e07bc5..3c71da1c 100644 --- a/cmd/flux/get_source_git.go +++ b/cmd/flux/get_source_git.go @@ -32,7 +32,7 @@ import ( var getSourceGitCmd = &cobra.Command{ Use: "git", Short: "Get GitRepository source statuses", - Long: "The get sources git command prints the status of the GitRepository sources.", + Long: `The get sources git command prints the status of the GitRepository sources.`, Example: ` # List all Git repositories and their status flux get sources git diff --git a/cmd/flux/get_source_helm.go b/cmd/flux/get_source_helm.go index 161ae8a0..28315eb7 100644 --- a/cmd/flux/get_source_helm.go +++ b/cmd/flux/get_source_helm.go @@ -32,7 +32,7 @@ import ( var getSourceHelmCmd = &cobra.Command{ Use: "helm", Short: "Get HelmRepository source statuses", - Long: "The get sources helm command prints the status of the HelmRepository sources.", + Long: withPreviewNote("The get sources helm command prints the status of the HelmRepository sources."), Example: ` # List all Helm repositories and their status flux get sources helm diff --git a/cmd/flux/get_source_oci.go b/cmd/flux/get_source_oci.go index 0a97935f..36f93fc9 100644 --- a/cmd/flux/get_source_oci.go +++ b/cmd/flux/get_source_oci.go @@ -32,7 +32,7 @@ import ( var getSourceOCIRepositoryCmd = &cobra.Command{ Use: "oci", Short: "Get OCIRepository status", - Long: "The get sources oci command prints the status of the OCIRepository sources.", + Long: withPreviewNote("The get sources oci command prints the status of the OCIRepository sources."), Example: ` # List all OCIRepositories and their status flux get sources oci diff --git a/cmd/flux/list.go b/cmd/flux/list.go index 240e69d0..51c3784f 100644 --- a/cmd/flux/list.go +++ b/cmd/flux/list.go @@ -23,7 +23,7 @@ import ( var listCmd = &cobra.Command{ Use: "list", Short: "List artifacts", - Long: "The list command is used for printing the OCI artifacts metadata.", + Long: `The list command is used for printing the OCI artifacts metadata.`, } func init() { diff --git a/cmd/flux/list_artifact.go b/cmd/flux/list_artifact.go index bdc040c6..4e73928f 100644 --- a/cmd/flux/list_artifact.go +++ b/cmd/flux/list_artifact.go @@ -47,8 +47,8 @@ func newListArtifactFlags() listArtifactFlags { var listArtifactsCmd = &cobra.Command{ Use: "artifacts", Short: "list artifacts", - Long: `The list command fetches the tags and their metadata from a remote OCI repository. -The command can read the credentials from '~/.docker/config.json' but they can also be passed with --creds. It can also login to a supported provider with the --provider flag.`, + Long: withPreviewNote(`The list command fetches the tags and their metadata from a remote OCI repository. +The command can read the credentials from '~/.docker/config.json' but they can also be passed with --creds. It can also login to a supported provider with the --provider flag.`), Example: ` # List the artifacts stored in an OCI repository flux list artifact oci://ghcr.io/org/config/app `, diff --git a/cmd/flux/logs.go b/cmd/flux/logs.go index 6f69e0d0..d8c27ff2 100644 --- a/cmd/flux/logs.go +++ b/cmd/flux/logs.go @@ -45,7 +45,7 @@ import ( var logsCmd = &cobra.Command{ Use: "logs", Short: "Display formatted logs for Flux components", - Long: "The logs command displays formatted logs from various Flux components.", + Long: withPreviewNote("The logs command displays formatted logs from various Flux components."), Example: ` # Print the reconciliation logs of all Flux custom resources in your cluster flux logs --all-namespaces diff --git a/cmd/flux/main.go b/cmd/flux/main.go index 4dd2fae8..f38223f8 100644 --- a/cmd/flux/main.go +++ b/cmd/flux/main.go @@ -224,3 +224,10 @@ func readPasswordFromStdin(prompt string) (string, error) { fmt.Println() return strings.TrimRight(out, "\r\n"), nil } + +func withPreviewNote(desc string) string { + previewNote := `⚠️ Please note that this command is in preview and under development. +While we try our best to not introduce breaking changes, they may occur when +we adapt to new features and/or find better ways to facilitate what it does.` + return fmt.Sprintf("%s\n\n%s", strings.TrimSpace(desc), previewNote) +} diff --git a/cmd/flux/pull.go b/cmd/flux/pull.go index 7ea48a1f..9a5953b2 100644 --- a/cmd/flux/pull.go +++ b/cmd/flux/pull.go @@ -23,7 +23,7 @@ import ( var pullCmd = &cobra.Command{ Use: "pull", Short: "Pull artifacts", - Long: "The pull command is used to download OCI artifacts.", + Long: `The pull command is used to download OCI artifacts.`, } func init() { diff --git a/cmd/flux/pull_artifact.go b/cmd/flux/pull_artifact.go index 529d5557..29313f5e 100644 --- a/cmd/flux/pull_artifact.go +++ b/cmd/flux/pull_artifact.go @@ -31,8 +31,8 @@ import ( var pullArtifactCmd = &cobra.Command{ Use: "artifact", Short: "Pull artifact", - Long: `The pull artifact command downloads and extracts the OCI artifact content to the given path. -The command can read the credentials from '~/.docker/config.json' but they can also be passed with --creds. It can also login to a supported provider with the --provider flag.`, + Long: withPreviewNote(`The pull artifact command downloads and extracts the OCI artifact content to the given path. +The command can read the credentials from '~/.docker/config.json' but they can also be passed with --creds. It can also login to a supported provider with the --provider flag.`), Example: ` # Pull an OCI artifact created by flux from GHCR flux pull artifact oci://ghcr.io/org/manifests/app:v0.0.1 --output ./path/to/local/manifests `, diff --git a/cmd/flux/push.go b/cmd/flux/push.go index eec4882d..8488a83b 100644 --- a/cmd/flux/push.go +++ b/cmd/flux/push.go @@ -23,7 +23,7 @@ import ( var pushCmd = &cobra.Command{ Use: "push", Short: "Push artifacts", - Long: "The push command is used to publish OCI artifacts.", + Long: `The push command is used to publish OCI artifacts.`, } func init() { diff --git a/cmd/flux/push_artifact.go b/cmd/flux/push_artifact.go index 6a0245bc..98760f59 100644 --- a/cmd/flux/push_artifact.go +++ b/cmd/flux/push_artifact.go @@ -35,8 +35,8 @@ import ( var pushArtifactCmd = &cobra.Command{ Use: "artifact", Short: "Push artifact", - Long: `The push artifact command creates a tarball from the given directory or the single file and uploads the artifact to an OCI repository. -The command can read the credentials from '~/.docker/config.json' but they can also be passed with --creds. It can also login to a supported provider with the --provider flag.`, + Long: withPreviewNote(`The push artifact command creates a tarball from the given directory or the single file and uploads the artifact to an OCI repository. +The command can read the credentials from '~/.docker/config.json' but they can also be passed with --creds. It can also login to a supported provider with the --provider flag.`), Example: ` # Push manifests to GHCR using the short Git SHA as the OCI artifact tag echo $GITHUB_PAT | docker login ghcr.io --username flux --password-stdin flux push artifact oci://ghcr.io/org/config/app:$(git rev-parse --short HEAD) \ diff --git a/cmd/flux/reconcile.go b/cmd/flux/reconcile.go index 1133d2a1..56f5f271 100644 --- a/cmd/flux/reconcile.go +++ b/cmd/flux/reconcile.go @@ -40,7 +40,7 @@ import ( var reconcileCmd = &cobra.Command{ Use: "reconcile", Short: "Reconcile sources and resources", - Long: "The reconcile sub-commands trigger a reconciliation of sources and resources.", + Long: `The reconcile sub-commands trigger a reconciliation of sources and resources.`, } func init() { diff --git a/cmd/flux/reconcile_image.go b/cmd/flux/reconcile_image.go index 8d1d432e..00110754 100644 --- a/cmd/flux/reconcile_image.go +++ b/cmd/flux/reconcile_image.go @@ -23,7 +23,7 @@ import ( var reconcileImageCmd = &cobra.Command{ Use: "image", Short: "Reconcile image automation objects", - Long: "The reconcile sub-commands trigger a reconciliation of image automation objects.", + Long: `The reconcile sub-commands trigger a reconciliation of image automation objects.`, } func init() { diff --git a/cmd/flux/reconcile_source.go b/cmd/flux/reconcile_source.go index 3079978c..473e3f25 100644 --- a/cmd/flux/reconcile_source.go +++ b/cmd/flux/reconcile_source.go @@ -23,7 +23,7 @@ import ( var reconcileSourceCmd = &cobra.Command{ Use: "source", Short: "Reconcile sources", - Long: "The reconcile source sub-commands trigger a reconciliation of sources.", + Long: `The reconcile source sub-commands trigger a reconciliation of sources.`, } func init() { diff --git a/cmd/flux/resume.go b/cmd/flux/resume.go index becf4f2f..9c592d6c 100644 --- a/cmd/flux/resume.go +++ b/cmd/flux/resume.go @@ -31,7 +31,7 @@ import ( var resumeCmd = &cobra.Command{ Use: "resume", Short: "Resume suspended resources", - Long: "The resume sub-commands resume a suspended resource.", + Long: `The resume sub-commands resume a suspended resource.`, } type ResumeFlags struct { diff --git a/cmd/flux/resume_image.go b/cmd/flux/resume_image.go index ef6cf54b..529458d0 100644 --- a/cmd/flux/resume_image.go +++ b/cmd/flux/resume_image.go @@ -23,7 +23,7 @@ import ( var resumeImageCmd = &cobra.Command{ Use: "image", Short: "Resume image automation objects", - Long: "The resume image sub-commands resume suspended image automation objects.", + Long: `The resume image sub-commands resume suspended image automation objects.`, } func init() { diff --git a/cmd/flux/resume_source.go b/cmd/flux/resume_source.go index dae04830..38bff6a2 100644 --- a/cmd/flux/resume_source.go +++ b/cmd/flux/resume_source.go @@ -23,7 +23,7 @@ import ( var resumeSourceCmd = &cobra.Command{ Use: "source", Short: "Resume sources", - Long: "The resume sub-commands resume a suspended source.", + Long: `The resume sub-commands resume a suspended source.`, } func init() { diff --git a/cmd/flux/stats.go b/cmd/flux/stats.go index b726e343..25e35c55 100644 --- a/cmd/flux/stats.go +++ b/cmd/flux/stats.go @@ -42,8 +42,8 @@ import ( var statsCmd = &cobra.Command{ Use: "stats", Short: "Stats of Flux reconciles", - Long: `The stats command prints a report of Flux custom resources present on a cluster, -including their reconcile status and the amount of cumulative storage used for each source type`, + Long: withPreviewNote(`The stats command prints a report of Flux custom resources present on a cluster, +including their reconcile status and the amount of cumulative storage used for each source type`), Example: ` # Print the stats report for a namespace flux stats --namespace default diff --git a/cmd/flux/suspend.go b/cmd/flux/suspend.go index 85e93de9..a7abe356 100644 --- a/cmd/flux/suspend.go +++ b/cmd/flux/suspend.go @@ -29,7 +29,7 @@ import ( var suspendCmd = &cobra.Command{ Use: "suspend", Short: "Suspend resources", - Long: "The suspend sub-commands suspend the reconciliation of a resource.", + Long: `The suspend sub-commands suspend the reconciliation of a resource.`, } type SuspendFlags struct { diff --git a/cmd/flux/suspend_alert.go b/cmd/flux/suspend_alert.go index c922be98..63231018 100644 --- a/cmd/flux/suspend_alert.go +++ b/cmd/flux/suspend_alert.go @@ -25,7 +25,7 @@ import ( var suspendAlertCmd = &cobra.Command{ Use: "alert [name]", Short: "Suspend reconciliation of Alert", - Long: "The suspend command disables the reconciliation of a Alert resource.", + Long: `The suspend command disables the reconciliation of a Alert resource.`, Example: ` # Suspend reconciliation for an existing Alert flux suspend alert main`, ValidArgsFunction: resourceNamesCompletionFunc(notificationv1.GroupVersion.WithKind(notificationv1.AlertKind)), diff --git a/cmd/flux/suspend_helmrelease.go b/cmd/flux/suspend_helmrelease.go index 5e552278..9e2fccca 100644 --- a/cmd/flux/suspend_helmrelease.go +++ b/cmd/flux/suspend_helmrelease.go @@ -26,7 +26,7 @@ var suspendHrCmd = &cobra.Command{ Use: "helmrelease [name]", Aliases: []string{"hr"}, Short: "Suspend reconciliation of HelmRelease", - Long: "The suspend command disables the reconciliation of a HelmRelease resource.", + Long: `The suspend command disables the reconciliation of a HelmRelease resource.`, Example: ` # Suspend reconciliation for an existing Helm release flux suspend hr podinfo`, ValidArgsFunction: resourceNamesCompletionFunc(helmv2.GroupVersion.WithKind(helmv2.HelmReleaseKind)), diff --git a/cmd/flux/suspend_image.go b/cmd/flux/suspend_image.go index 468c8c3f..3a820ec7 100644 --- a/cmd/flux/suspend_image.go +++ b/cmd/flux/suspend_image.go @@ -23,7 +23,7 @@ import ( var suspendImageCmd = &cobra.Command{ Use: "image", Short: "Suspend image automation objects", - Long: "The suspend image sub-commands suspend the reconciliation of an image automation object.", + Long: `The suspend image sub-commands suspend the reconciliation of an image automation object.`, } func init() { diff --git a/cmd/flux/suspend_image_repository.go b/cmd/flux/suspend_image_repository.go index 000708cb..47288c35 100644 --- a/cmd/flux/suspend_image_repository.go +++ b/cmd/flux/suspend_image_repository.go @@ -25,7 +25,7 @@ import ( var suspendImageRepositoryCmd = &cobra.Command{ Use: "repository [name]", Short: "Suspend reconciliation of an ImageRepository", - Long: "The suspend image repository command disables the reconciliation of a ImageRepository resource.", + Long: `The suspend image repository command disables the reconciliation of a ImageRepository resource.`, Example: ` # Suspend reconciliation for an existing ImageRepository flux suspend image repository alpine`, ValidArgsFunction: resourceNamesCompletionFunc(imagev1.GroupVersion.WithKind(imagev1.ImageRepositoryKind)), diff --git a/cmd/flux/suspend_image_updateauto.go b/cmd/flux/suspend_image_updateauto.go index cd6e8f3a..c198171e 100644 --- a/cmd/flux/suspend_image_updateauto.go +++ b/cmd/flux/suspend_image_updateauto.go @@ -25,7 +25,7 @@ import ( var suspendImageUpdateCmd = &cobra.Command{ Use: "update [name]", Short: "Suspend reconciliation of an ImageUpdateAutomation", - Long: "The suspend image update command disables the reconciliation of a ImageUpdateAutomation resource.", + Long: `The suspend image update command disables the reconciliation of a ImageUpdateAutomation resource.`, Example: ` # Suspend reconciliation for an existing ImageUpdateAutomation flux suspend image update latest-images`, ValidArgsFunction: resourceNamesCompletionFunc(autov1.GroupVersion.WithKind(autov1.ImageUpdateAutomationKind)), diff --git a/cmd/flux/suspend_kustomization.go b/cmd/flux/suspend_kustomization.go index a054a88d..d9d77e8c 100644 --- a/cmd/flux/suspend_kustomization.go +++ b/cmd/flux/suspend_kustomization.go @@ -26,7 +26,7 @@ var suspendKsCmd = &cobra.Command{ Use: "kustomization [name]", Aliases: []string{"ks"}, Short: "Suspend reconciliation of Kustomization", - Long: "The suspend command disables the reconciliation of a Kustomization resource.", + Long: `The suspend command disables the reconciliation of a Kustomization resource.`, Example: ` # Suspend reconciliation for an existing Kustomization flux suspend ks podinfo`, ValidArgsFunction: resourceNamesCompletionFunc(kustomizev1.GroupVersion.WithKind(kustomizev1.KustomizationKind)), diff --git a/cmd/flux/suspend_receiver.go b/cmd/flux/suspend_receiver.go index 4480cc50..e0110be1 100644 --- a/cmd/flux/suspend_receiver.go +++ b/cmd/flux/suspend_receiver.go @@ -25,7 +25,7 @@ import ( var suspendReceiverCmd = &cobra.Command{ Use: "receiver [name]", Short: "Suspend reconciliation of Receiver", - Long: "The suspend command disables the reconciliation of a Receiver resource.", + Long: `The suspend command disables the reconciliation of a Receiver resource.`, Example: ` # Suspend reconciliation for an existing Receiver flux suspend receiver main`, ValidArgsFunction: resourceNamesCompletionFunc(notificationv1.GroupVersion.WithKind(notificationv1.ReceiverKind)), diff --git a/cmd/flux/suspend_source.go b/cmd/flux/suspend_source.go index c255afbf..4542e815 100644 --- a/cmd/flux/suspend_source.go +++ b/cmd/flux/suspend_source.go @@ -23,7 +23,7 @@ import ( var suspendSourceCmd = &cobra.Command{ Use: "source", Short: "Suspend sources", - Long: "The suspend sub-commands suspend the reconciliation of a source.", + Long: `The suspend sub-commands suspend the reconciliation of a source.`, } func init() { diff --git a/cmd/flux/suspend_source_bucket.go b/cmd/flux/suspend_source_bucket.go index 32dab414..e38d5d47 100644 --- a/cmd/flux/suspend_source_bucket.go +++ b/cmd/flux/suspend_source_bucket.go @@ -25,7 +25,7 @@ import ( var suspendSourceBucketCmd = &cobra.Command{ Use: "bucket [name]", Short: "Suspend reconciliation of a Bucket", - Long: "The suspend command disables the reconciliation of a Bucket resource.", + Long: `The suspend command disables the reconciliation of a Bucket resource.`, Example: ` # Suspend reconciliation for an existing Bucket flux suspend source bucket podinfo`, ValidArgsFunction: resourceNamesCompletionFunc(sourcev1.GroupVersion.WithKind(sourcev1.BucketKind)), diff --git a/cmd/flux/suspend_source_chart.go b/cmd/flux/suspend_source_chart.go index 2befdbc4..e99defcb 100644 --- a/cmd/flux/suspend_source_chart.go +++ b/cmd/flux/suspend_source_chart.go @@ -25,7 +25,7 @@ import ( var suspendSourceHelmChartCmd = &cobra.Command{ Use: "chart [name]", Short: "Suspend reconciliation of a HelmChart", - Long: "The suspend command disables the reconciliation of a HelmChart resource.", + Long: `The suspend command disables the reconciliation of a HelmChart resource.`, Example: ` # Suspend reconciliation for an existing HelmChart flux suspend source chart podinfo`, ValidArgsFunction: resourceNamesCompletionFunc(sourcev1.GroupVersion.WithKind(sourcev1.HelmChartKind)), diff --git a/cmd/flux/suspend_source_git.go b/cmd/flux/suspend_source_git.go index cf955111..bb1281fd 100644 --- a/cmd/flux/suspend_source_git.go +++ b/cmd/flux/suspend_source_git.go @@ -25,7 +25,7 @@ import ( var suspendSourceGitCmd = &cobra.Command{ Use: "git [name]", Short: "Suspend reconciliation of a GitRepository", - Long: "The suspend command disables the reconciliation of a GitRepository resource.", + Long: `The suspend command disables the reconciliation of a GitRepository resource.`, Example: ` # Suspend reconciliation for an existing GitRepository flux suspend source git podinfo`, ValidArgsFunction: resourceNamesCompletionFunc(sourcev1.GroupVersion.WithKind(sourcev1.GitRepositoryKind)), diff --git a/cmd/flux/suspend_source_helm.go b/cmd/flux/suspend_source_helm.go index 73bc1250..6d49040d 100644 --- a/cmd/flux/suspend_source_helm.go +++ b/cmd/flux/suspend_source_helm.go @@ -25,7 +25,7 @@ import ( var suspendSourceHelmCmd = &cobra.Command{ Use: "helm [name]", Short: "Suspend reconciliation of a HelmRepository", - Long: "The suspend command disables the reconciliation of a HelmRepository resource.", + Long: `The suspend command disables the reconciliation of a HelmRepository resource.`, Example: ` # Suspend reconciliation for an existing HelmRepository flux suspend source helm bitnami`, ValidArgsFunction: resourceNamesCompletionFunc(sourcev1.GroupVersion.WithKind(sourcev1.HelmRepositoryKind)), diff --git a/cmd/flux/suspend_source_oci.go b/cmd/flux/suspend_source_oci.go index d656dbf2..10dd6fff 100644 --- a/cmd/flux/suspend_source_oci.go +++ b/cmd/flux/suspend_source_oci.go @@ -25,7 +25,7 @@ import ( var suspendSourceOCIRepositoryCmd = &cobra.Command{ Use: "oci [name]", Short: "Suspend reconciliation of an OCIRepository", - Long: "The suspend command disables the reconciliation of an OCIRepository resource.", + Long: `The suspend command disables the reconciliation of an OCIRepository resource.`, Example: ` # Suspend reconciliation for an existing OCIRepository flux suspend source oci podinfo`, ValidArgsFunction: resourceNamesCompletionFunc(sourcev1.GroupVersion.WithKind(sourcev1.OCIRepositoryKind)), diff --git a/cmd/flux/tag.go b/cmd/flux/tag.go index 966acef6..176fc7a1 100644 --- a/cmd/flux/tag.go +++ b/cmd/flux/tag.go @@ -23,7 +23,7 @@ import ( var tagCmd = &cobra.Command{ Use: "tag", Short: "Tag artifacts", - Long: "The tag command is used to tag OCI artifacts.", + Long: `The tag command is used to tag OCI artifacts.`, } func init() { diff --git a/cmd/flux/tag_artifact.go b/cmd/flux/tag_artifact.go index e942c530..cc330d46 100644 --- a/cmd/flux/tag_artifact.go +++ b/cmd/flux/tag_artifact.go @@ -31,8 +31,8 @@ import ( var tagArtifactCmd = &cobra.Command{ Use: "artifact", Short: "Tag artifact", - Long: `The tag artifact command creates tags for the given OCI artifact. -The command can read the credentials from '~/.docker/config.json' but they can also be passed with --creds. It can also login to a supported provider with the --provider flag.`, + Long: withPreviewNote(`The tag artifact command creates tags for the given OCI artifact. +The command can read the credentials from '~/.docker/config.json' but they can also be passed with --creds. It can also login to a supported provider with the --provider flag.`), Example: ` # Tag an artifact version as latest flux tag artifact oci://ghcr.io/org/manifests/app:v0.0.1 --tag latest `, diff --git a/cmd/flux/trace.go b/cmd/flux/trace.go index a2839e4f..d85f10ea 100644 --- a/cmd/flux/trace.go +++ b/cmd/flux/trace.go @@ -45,10 +45,10 @@ import ( var traceCmd = &cobra.Command{ Use: "trace [ ...]", Short: "Trace in-cluster objects throughout the GitOps delivery pipeline", - Long: `The trace command shows how one or more objects are managed by Flux, + Long: withPreviewNote(`The trace command shows how one or more objects are managed by Flux, from which source and revision they come, and what the latest reconciliation status is. -You can also trace multiple objects with different resource kinds using / multiple times.`, +You can also trace multiple objects with different resource kinds using / multiple times.`), Example: ` # Trace a Kubernetes Deployment flux trace -n apps deployment my-app diff --git a/cmd/flux/tree.go b/cmd/flux/tree.go index 8e2503c0..5bcf3ffd 100644 --- a/cmd/flux/tree.go +++ b/cmd/flux/tree.go @@ -23,7 +23,7 @@ import ( var treeCmd = &cobra.Command{ Use: "tree", Short: "Print the resources reconciled by Flux", - Long: `The tree command shows the list of resources reconciled by a Flux object.'`, + Long: withPreviewNote(`The tree command shows the list of resources reconciled by a Flux object.`), } func init() { diff --git a/cmd/flux/tree_kustomization.go b/cmd/flux/tree_kustomization.go index 8b5987f6..6ea63dcb 100644 --- a/cmd/flux/tree_kustomization.go +++ b/cmd/flux/tree_kustomization.go @@ -47,7 +47,7 @@ var treeKsCmd = &cobra.Command{ Use: "kustomization [name]", Aliases: []string{"ks", "kustomization"}, Short: "Print the resource inventory of a Kustomization", - Long: `The tree command prints the resource list reconciled by a Kustomization.'`, + Long: withPreviewNote(`The tree command prints the resource list reconciled by a Kustomization.'`), Example: ` # Print the resources managed by the root Kustomization flux tree kustomization flux-system diff --git a/cmd/flux/uninstall.go b/cmd/flux/uninstall.go index 15e7b6bb..bee7ad48 100644 --- a/cmd/flux/uninstall.go +++ b/cmd/flux/uninstall.go @@ -30,7 +30,7 @@ import ( var uninstallCmd = &cobra.Command{ Use: "uninstall", Short: "Uninstall Flux and its custom resource definitions", - Long: "The uninstall command removes the Flux components and the toolkit.fluxcd.io resources from the cluster.", + Long: `The uninstall command removes the Flux components and the toolkit.fluxcd.io resources from the cluster.`, Example: ` # Uninstall Flux components, its custom resources and namespace flux uninstall --namespace=flux-system diff --git a/cmd/flux/version.go b/cmd/flux/version.go index cb113d67..41f21148 100644 --- a/cmd/flux/version.go +++ b/cmd/flux/version.go @@ -34,7 +34,7 @@ import ( var versionCmd = &cobra.Command{ Use: "version", Short: "Print the client and server-side components version information.", - Long: "Print the client and server-side components version information for the current context.", + Long: `Print the client and server-side components version information for the current context.`, Example: `# Print client and server-side version flux version From 929378170238e91bdd0bcba034463bb1d6464afc Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 5 Apr 2023 15:52:22 +0300 Subject: [PATCH 473/818] Update dependencies Signed-off-by: Stefan Prodan --- go.mod | 78 +++++++++++----------- go.sum | 161 ++++++++++++++++++++++++--------------------- tests/azure/go.mod | 24 +++---- tests/azure/go.sum | 106 +++++++---------------------- 4 files changed, 161 insertions(+), 208 deletions(-) diff --git a/go.mod b/go.mod index 1a8235cb..aeedc5a2 100644 --- a/go.mod +++ b/go.mod @@ -4,9 +4,9 @@ go 1.18 require ( github.com/Masterminds/semver/v3 v3.2.0 - github.com/ProtonMail/go-crypto v0.0.0-20230217124315-7d5c6f04bbb8 + github.com/ProtonMail/go-crypto v0.0.0-20230331115716-d34776aa93ec github.com/cyphar/filepath-securejoin v0.2.3 - github.com/distribution/distribution/v3 v3.0.0-20230223072852-e5d5810851d1 + github.com/distribution/distribution/v3 v3.0.0-20230327091844-0c958010ace2 github.com/fluxcd/go-git-providers v0.15.0 github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 github.com/fluxcd/helm-controller/api v0.32.1 @@ -18,37 +18,37 @@ require ( github.com/fluxcd/pkg/apis/meta v1.0.0 github.com/fluxcd/pkg/git v0.11.0 github.com/fluxcd/pkg/git/gogit v0.8.1 - github.com/fluxcd/pkg/kustomize v0.14.0 - github.com/fluxcd/pkg/oci v0.21.1 - github.com/fluxcd/pkg/runtime v0.31.0 - github.com/fluxcd/pkg/sourceignore v0.3.2 - github.com/fluxcd/pkg/ssa v0.24.1 + github.com/fluxcd/pkg/kustomize v1.1.0 + github.com/fluxcd/pkg/oci v0.22.0 + github.com/fluxcd/pkg/runtime v0.35.0 + github.com/fluxcd/pkg/sourceignore v0.3.3 + github.com/fluxcd/pkg/ssa v0.27.0 github.com/fluxcd/pkg/ssh v0.7.3 github.com/fluxcd/pkg/untar v0.2.0 github.com/fluxcd/pkg/version v0.2.1 github.com/fluxcd/source-controller/api v1.0.0-rc.1 - github.com/gonvenience/bunt v1.3.4 + github.com/gonvenience/bunt v1.3.5 github.com/gonvenience/ytbx v1.4.4 github.com/google/go-cmp v0.5.9 - github.com/google/go-containerregistry v0.13.0 + github.com/google/go-containerregistry v0.14.0 github.com/homeport/dyff v1.5.6 github.com/lucasb-eyer/go-colorful v1.2.0 github.com/manifoldco/promptui v0.9.0 github.com/mattn/go-shellwords v1.0.12 github.com/olekukonko/tablewriter v0.0.5 - github.com/onsi/gomega v1.27.2 + github.com/onsi/gomega v1.27.6 github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 - github.com/spf13/cobra v1.6.1 + github.com/spf13/cobra v1.7.0 github.com/spf13/pflag v1.0.5 github.com/theckman/yacspin v0.13.12 golang.org/x/crypto v0.7.0 - golang.org/x/term v0.6.0 + golang.org/x/term v0.7.0 k8s.io/api v0.26.3 k8s.io/apiextensions-apiserver v0.26.3 k8s.io/apimachinery v0.26.3 - k8s.io/cli-runtime v0.26.2 + k8s.io/cli-runtime v0.26.3 k8s.io/client-go v0.26.3 - k8s.io/kubectl v0.26.2 + k8s.io/kubectl v0.26.3 sigs.k8s.io/cli-utils v0.34.0 sigs.k8s.io/controller-runtime v0.14.6 sigs.k8s.io/kustomize/api v0.12.1 @@ -60,28 +60,28 @@ require ( replace gopkg.in/yaml.v3 => gopkg.in/yaml.v3 v3.0.1 require ( - github.com/Azure/azure-sdk-for-go/sdk/azcore v1.4.0 // indirect - github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.2.1 // indirect + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.5.0-beta.1 // indirect + github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0-beta.4 // indirect github.com/Azure/azure-sdk-for-go/sdk/internal v1.1.2 // indirect github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect - github.com/AzureAD/microsoft-authentication-library-for-go v0.8.1 // indirect + github.com/AzureAD/microsoft-authentication-library-for-go v0.9.0 // indirect github.com/BurntSushi/toml v1.0.0 // indirect github.com/MakeNowJust/heredoc v1.0.0 // indirect github.com/Microsoft/go-winio v0.6.0 // indirect github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d // indirect github.com/acomagu/bufpipe v1.0.3 // indirect - github.com/aws/aws-sdk-go-v2 v1.17.5 // indirect - github.com/aws/aws-sdk-go-v2/config v1.18.15 // indirect - github.com/aws/aws-sdk-go-v2/credentials v1.13.15 // indirect - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.23 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.29 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.23 // indirect - github.com/aws/aws-sdk-go-v2/internal/ini v1.3.30 // indirect - github.com/aws/aws-sdk-go-v2/service/ecr v1.18.5 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.23 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.12.4 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.4 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.18.5 // indirect + github.com/aws/aws-sdk-go-v2 v1.17.7 // indirect + github.com/aws/aws-sdk-go-v2/config v1.18.19 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.13.18 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.1 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.31 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.25 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.3.32 // indirect + github.com/aws/aws-sdk-go-v2/service/ecr v1.18.7 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.25 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.12.6 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.6 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.18.7 // indirect github.com/aws/smithy-go v1.13.5 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bshuster-repo/logrus-logstash-hook v1.0.0 // indirect @@ -92,12 +92,12 @@ require ( github.com/chai2010/gettext-go v1.0.2 // indirect github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e // indirect github.com/cloudflare/circl v1.3.2 // indirect - github.com/containerd/stargz-snapshotter/estargz v0.12.1 // indirect + github.com/containerd/stargz-snapshotter/estargz v0.14.3 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect - github.com/docker/cli v20.10.20+incompatible // indirect + github.com/docker/cli v23.0.1+incompatible // indirect github.com/docker/distribution v2.8.1+incompatible // indirect - github.com/docker/docker v20.10.24+incompatible // indirect + github.com/docker/docker v23.0.1+incompatible // indirect github.com/docker/docker-credential-helpers v0.7.0 // indirect github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c // indirect github.com/docker/go-metrics v0.0.1 // indirect @@ -123,7 +123,7 @@ require ( github.com/go-openapi/jsonreference v0.20.1 // indirect github.com/go-openapi/swag v0.22.3 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang-jwt/jwt/v4 v4.4.2 // indirect + github.com/golang-jwt/jwt/v4 v4.4.3 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.3 // indirect github.com/gomodule/redigo v1.8.2 // indirect @@ -147,19 +147,19 @@ require ( github.com/hashicorp/go-retryablehttp v0.7.2 // indirect github.com/hashicorp/golang-lru v0.5.4 // indirect github.com/imdario/mergo v0.3.13 // indirect - github.com/inconshreveable/mousetrap v1.0.1 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/kevinburke/ssh_config v1.2.0 // indirect - github.com/klauspost/compress v1.15.11 // indirect + github.com/klauspost/compress v1.16.0 // indirect github.com/kylelemons/godebug v1.1.0 // indirect github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect github.com/mailru/easyjson v0.7.7 // indirect github.com/mattn/go-ciede2000 v0.0.0-20170301095244-782e8c62fec3 // indirect github.com/mattn/go-colorable v0.1.12 // indirect - github.com/mattn/go-isatty v0.0.14 // indirect + github.com/mattn/go-isatty v0.0.18 // indirect github.com/mattn/go-runewidth v0.0.13 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect @@ -197,14 +197,14 @@ require ( github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50 // indirect github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f // indirect go.starlark.net v0.0.0-20221028183056-acb66ad56dd2 // indirect - golang.org/x/mod v0.8.0 // indirect + golang.org/x/mod v0.9.0 // indirect golang.org/x/net v0.8.0 // indirect golang.org/x/oauth2 v0.6.0 // indirect golang.org/x/sync v0.1.0 // indirect - golang.org/x/sys v0.6.0 // indirect + golang.org/x/sys v0.7.0 // indirect golang.org/x/text v0.8.0 // indirect golang.org/x/time v0.3.0 // indirect - golang.org/x/tools v0.6.0 // indirect + golang.org/x/tools v0.7.0 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/protobuf v1.29.1 // indirect diff --git a/go.sum b/go.sum index dca062b6..c6c513d0 100644 --- a/go.sum +++ b/go.sum @@ -32,16 +32,16 @@ cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RX cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/AdaLogics/go-fuzz-headers v0.0.0-20230106234847-43070de90fa1 h1:EKPd1INOIyr5hWOWhvpmQpY6tKjeG0hT1s3AMC/9fic= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.4.0 h1:rTnT/Jrcm+figWlYz4Ixzt0SJVR2cMC8lvZcimipiEY= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.4.0/go.mod h1:ON4tFdPTwRcgWEaVDrN3584Ef+b7GgSJaXxe5fW9t4M= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.2.1 h1:T8quHYlUGyb/oqtSTwqlCr1ilJHrDv+ZtpSfo+hm1BU= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.2.1/go.mod h1:gLa1CL2RNE4s7M3yopJ/p0iq5DdY6Yv5ZUt9MTRZOQM= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.5.0-beta.1 h1:yLM4ZIC+NRvzwFGpXjUbf5FhPBVxJgmYXkjePgNAx64= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.5.0-beta.1/go.mod h1:ON4tFdPTwRcgWEaVDrN3584Ef+b7GgSJaXxe5fW9t4M= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0-beta.4 h1:jpSh2461XzXBEw1MJwvVRJwZS0CAgqS0h6jBdoIFtLk= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0-beta.4/go.mod h1:oWa/ZXP08smIi12UyWVbVikBxoZHZCyxijZamTK1i8Q= github.com/Azure/azure-sdk-for-go/sdk/internal v1.1.2 h1:+5VZ72z0Qan5Bog5C+ZkgSqUbeVUd9wgtHOrIKuc5b8= github.com/Azure/azure-sdk-for-go/sdk/internal v1.1.2/go.mod h1:eWRD7oawr1Mu1sLCawqVc0CUiF43ia3qQMxLscsKQ9w= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= -github.com/AzureAD/microsoft-authentication-library-for-go v0.8.1 h1:oPdPEZFSbl7oSPEAIPMPBMUmiL+mqgzBJwM/9qYcwNg= -github.com/AzureAD/microsoft-authentication-library-for-go v0.8.1/go.mod h1:4qFor3D/HDsvBME35Xy9rwW9DecL+M2sNw1ybjPtwA0= +github.com/AzureAD/microsoft-authentication-library-for-go v0.9.0 h1:UE9n9rkJF62ArLb1F3DEjRt8O3jLwMWdSoypKV4f3MU= +github.com/AzureAD/microsoft-authentication-library-for-go v0.9.0/go.mod h1:kgDmCTgBzIEPFElEF+FK0SdjAor06dRq2Go927dnQ6o= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v1.0.0 h1:dtDWrepsVPfW9H/4y7dDgFc2MBUSeJhlaDtK13CxFlU= github.com/BurntSushi/toml v1.0.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= @@ -58,8 +58,8 @@ github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2B github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4/go.mod h1:UBYPn8k0D56RtnR8RFQMjmh4KrZzWJ5o7Z9SYjossQ8= -github.com/ProtonMail/go-crypto v0.0.0-20230217124315-7d5c6f04bbb8 h1:wPbRQzjjwFc0ih8puEVAOFGELsn1zoIIYdxvML7mDxA= -github.com/ProtonMail/go-crypto v0.0.0-20230217124315-7d5c6f04bbb8/go.mod h1:I0gYDMZ6Z5GRU7l58bNFSkPTFN6Yl12dsUlAZ8xy98g= +github.com/ProtonMail/go-crypto v0.0.0-20230331115716-d34776aa93ec h1:eQusauqzE1cAFR5hGnwkuSmFxKoy3+j9/cVaDeYfjjs= +github.com/ProtonMail/go-crypto v0.0.0-20230331115716-d34776aa93ec/go.mod h1:8TI4H3IbrackdNgv+92dI+rhpCaLqM0IfpgCgenFvRE= github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d h1:UrqY+r/OJnIp5u0s1SbQ8dVfLCZJsnvazdBP5hS4iRs= github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ= github.com/acomagu/bufpipe v1.0.3 h1:fxAGrHZTgQ9w5QqVItgzwj235/uYZYgbXitB+dLupOk= @@ -75,30 +75,30 @@ github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuW github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= -github.com/aws/aws-sdk-go-v2 v1.17.5 h1:TzCUW1Nq4H8Xscph5M/skINUitxM5UBAyvm2s7XBzL4= -github.com/aws/aws-sdk-go-v2 v1.17.5/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw= -github.com/aws/aws-sdk-go-v2/config v1.18.15 h1:509yMO0pJUGUugBP2H9FOFyV+7Mz7sRR+snfDN5W4NY= -github.com/aws/aws-sdk-go-v2/config v1.18.15/go.mod h1:vS0tddZqpE8cD9CyW0/kITHF5Bq2QasW9Y1DFHD//O0= -github.com/aws/aws-sdk-go-v2/credentials v1.13.15 h1:0rZQIi6deJFjOEgHI9HI2eZcLPPEGQPictX66oRFLL8= -github.com/aws/aws-sdk-go-v2/credentials v1.13.15/go.mod h1:vRMLMD3/rXU+o6j2MW5YefrGMBmdTvkLLGqFwMLBHQc= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.23 h1:Kbiv9PGnQfG/imNI4L/heyUXvzKmcWSBeDvkrQz5pFc= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.23/go.mod h1:mOtmAg65GT1HIL/HT/PynwPbS+UG0BgCZ6vhkPqnxWo= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.29 h1:9/aKwwus0TQxppPXFmf010DFrE+ssSbzroLVYINA+xE= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.29/go.mod h1:Dip3sIGv485+xerzVv24emnjX5Sg88utCL8fwGmCeWg= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.23 h1:b/Vn141DBuLVgXbhRWIrl9g+ww7G+ScV5SzniWR13jQ= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.23/go.mod h1:mr6c4cHC+S/MMkrjtSlG4QA36kOznDep+0fga5L/fGQ= -github.com/aws/aws-sdk-go-v2/internal/ini v1.3.30 h1:IVx9L7YFhpPq0tTnGo8u8TpluFu7nAn9X3sUDMb11c0= -github.com/aws/aws-sdk-go-v2/internal/ini v1.3.30/go.mod h1:vsbq62AOBwQ1LJ/GWKFxX8beUEYeRp/Agitrxee2/qM= -github.com/aws/aws-sdk-go-v2/service/ecr v1.18.5 h1:tGA4ZoAsrYhGBypKAo2jwoX/Z5ponBZOTEUMNN/rHP4= -github.com/aws/aws-sdk-go-v2/service/ecr v1.18.5/go.mod h1:cDZh+PHP8Adt9E0zfZT9cK4qadbtIuU/czLpEJtm4wc= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.23 h1:QoOybhwRfciWUBbZ0gp9S7XaDnCuSTeK/fySB99V1ls= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.23/go.mod h1:9uPh+Hrz2Vn6oMnQYiUi/zbh3ovbnQk19YKINkQny44= -github.com/aws/aws-sdk-go-v2/service/sso v1.12.4 h1:qJdM48OOLl1FBSzI7ZrA1ZfLwOyCYqkXV5lko1hYDBw= -github.com/aws/aws-sdk-go-v2/service/sso v1.12.4/go.mod h1:jtLIhd+V+lft6ktxpItycqHqiVXrPIRjWIsFIlzMriw= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.4 h1:YRkWXQveFb0tFC0TLktmmhGsOcCgLwvq88MC2al47AA= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.4/go.mod h1:zVwRrfdSmbRZWkUkWjOItY7SOalnFnq/Yg2LVPqDjwc= -github.com/aws/aws-sdk-go-v2/service/sts v1.18.5 h1:L1600eLr0YvTT7gNh3Ni24yGI7NSHkq9Gp62vijPRCs= -github.com/aws/aws-sdk-go-v2/service/sts v1.18.5/go.mod h1:1mKZHLLpDMHTNSYPJ7qrcnCQdHCWsNQaT0xRvq2u80s= +github.com/aws/aws-sdk-go-v2 v1.17.7 h1:CLSjnhJSTSogvqUGhIC6LqFKATMRexcxLZ0i/Nzk9Eg= +github.com/aws/aws-sdk-go-v2 v1.17.7/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw= +github.com/aws/aws-sdk-go-v2/config v1.18.19 h1:AqFK6zFNtq4i1EYu+eC7lcKHYnZagMn6SW171la0bGw= +github.com/aws/aws-sdk-go-v2/config v1.18.19/go.mod h1:XvTmGMY8d52ougvakOv1RpiTLPz9dlG/OQHsKU/cMmY= +github.com/aws/aws-sdk-go-v2/credentials v1.13.18 h1:EQMdtHwz0ILTW1hoP+EwuWhwCG1hD6l3+RWFQABET4c= +github.com/aws/aws-sdk-go-v2/credentials v1.13.18/go.mod h1:vnwlwjIe+3XJPBYKu1et30ZPABG3VaXJYr8ryohpIyM= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.1 h1:gt57MN3liKiyGopcqgNzJb2+d9MJaKT/q1OksHNXVE4= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.1/go.mod h1:lfUx8puBRdM5lVVMQlwt2v+ofiG/X6Ms+dy0UkG/kXw= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.31 h1:sJLYcS+eZn5EeNINGHSCRAwUJMFVqklwkH36Vbyai7M= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.31/go.mod h1:QT0BqUvX1Bh2ABdTGnjqEjvjzrCfIniM9Sc8zn9Yndo= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.25 h1:1mnRASEKnkqsntcxHaysxwgVoUUp5dkiB+l3llKnqyg= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.25/go.mod h1:zBHOPwhBc3FlQjQJE/D3IfPWiWaQmT06Vq9aNukDo0k= +github.com/aws/aws-sdk-go-v2/internal/ini v1.3.32 h1:p5luUImdIqywn6JpQsW3tq5GNOxKmOnEpybzPx+d1lk= +github.com/aws/aws-sdk-go-v2/internal/ini v1.3.32/go.mod h1:XGhIBZDEgfqmFIugclZ6FU7v75nHhBDtzuB4xB/tEi4= +github.com/aws/aws-sdk-go-v2/service/ecr v1.18.7 h1:oQ1Esut3iaL2Dydt2RBd9gbuUevToXpdTI+Uh1xXryI= +github.com/aws/aws-sdk-go-v2/service/ecr v1.18.7/go.mod h1:RHhgOMnMIkgB4TmxQat9obSnZ6fF1fuA27+itZKUi1o= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.25 h1:5LHn8JQ0qvjD9L9JhMtylnkcw7j05GDZqM9Oin6hpr0= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.25/go.mod h1:/95IA+0lMnzW6XzqYJRpjjsAbKEORVeO0anQqjd2CNU= +github.com/aws/aws-sdk-go-v2/service/sso v1.12.6 h1:5V7DWLBd7wTELVz5bPpwzYy/sikk0gsgZfj40X+l5OI= +github.com/aws/aws-sdk-go-v2/service/sso v1.12.6/go.mod h1:Y1VOmit/Fn6Tz1uFAeCO6Q7M2fmfXSCLeL5INVYsLuY= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.6 h1:B8cauxOH1W1v7rd8RdI/MWnoR4Ze0wIHWrb90qczxj4= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.6/go.mod h1:Lh/bc9XUf8CfOY6Jp5aIkQtN+j1mc+nExc+KXj9jx2s= +github.com/aws/aws-sdk-go-v2/service/sts v1.18.7 h1:bWNgNdRko2x6gqa0blfATqAZKZokPIeM1vfmQt2pnvM= +github.com/aws/aws-sdk-go-v2/service/sts v1.18.7/go.mod h1:JuTnSoeePXmMVe9G8NcjjwgOKEfZ4cOjMuT2IBT/2eI= github.com/aws/smithy-go v1.13.5 h1:hgz0X/DX0dGqTYpGALqXJoRKRj5oQ7150i5FdTePzO8= github.com/aws/smithy-go v1.13.5/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= @@ -137,8 +137,8 @@ github.com/cloudflare/circl v1.3.2/go.mod h1:+CauBF6R70Jqcyl8N2hC8pAXYbWkGIezuSb github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/containerd/stargz-snapshotter/estargz v0.12.1 h1:+7nYmHJb0tEkcRaAW+MHqoKaJYZmkikupxCqVtmPuY0= -github.com/containerd/stargz-snapshotter/estargz v0.12.1/go.mod h1:12VUuCq3qPq4y8yUW+l5w3+oXV3cx2Po3KSe/SmPGqw= +github.com/containerd/stargz-snapshotter/estargz v0.14.3 h1:OqlDCK3ZVUO6C3B/5FSkDwbkEETK84kQgEeFwDC+62k= +github.com/containerd/stargz-snapshotter/estargz v0.14.3/go.mod h1:KY//uOCIkSuNAHhJogcZtrNHdKrA99/FCCRjE3HD36o= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= @@ -149,15 +149,15 @@ github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxG github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/distribution/distribution/v3 v3.0.0-20230223072852-e5d5810851d1 h1:OtfRoaZ54jKZ7jl9WuxqekousLR9T63iJf0y2EdC2S4= -github.com/distribution/distribution/v3 v3.0.0-20230223072852-e5d5810851d1/go.mod h1:r5XLH1cp+Wau2jxdptkYsFvvvzPPQTIe8eUuQ0vq30Q= +github.com/distribution/distribution/v3 v3.0.0-20230327091844-0c958010ace2 h1:KTYNpKuqtdZJOobHigxfdikPdsBwddmzeRn3UMocznM= +github.com/distribution/distribution/v3 v3.0.0-20230327091844-0c958010ace2/go.mod h1:r5XLH1cp+Wau2jxdptkYsFvvvzPPQTIe8eUuQ0vq30Q= github.com/dnaeon/go-vcr v1.1.0 h1:ReYa/UBrRyQdant9B4fNHGoCNKw6qh6P0fsdGmZpR7c= -github.com/docker/cli v20.10.20+incompatible h1:lWQbHSHUFs7KraSN2jOJK7zbMS2jNCHI4mt4xUFUVQ4= -github.com/docker/cli v20.10.20+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/cli v23.0.1+incompatible h1:LRyWITpGzl2C9e9uGxzisptnxAn1zfZKXy13Ul2Q5oM= +github.com/docker/cli v23.0.1+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68= github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v20.10.24+incompatible h1:Ugvxm7a8+Gz6vqQYQQ2W7GYq5EUPaAiuPgIfVyI3dYE= -github.com/docker/docker v20.10.24+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v23.0.1+incompatible h1:vjgvJZxprTTE1A37nm+CLNAdwu6xZekyoiVlUZEINcY= +github.com/docker/docker v23.0.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker-credential-helpers v0.7.0 h1:xtCHsjxogADNZcdv1pKUHXryefjlVRqWqIhk/uXJp0A= github.com/docker/docker-credential-helpers v0.7.0/go.mod h1:rETQfLdHNT3foU5kuNkFR1R1V12OJRRO5lzt2D1b5X0= github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c h1:+pKlWGMw7gf6bQ+oDZB4KHQFypsfjYlq/C4rfL7D3g8= @@ -222,16 +222,16 @@ github.com/fluxcd/pkg/git v0.11.0/go.mod h1:VHRVlrZMHNoWBlaSAWxlGH6Vwlb9VRazUhPU github.com/fluxcd/pkg/git/gogit v0.8.1 h1:Q3EV2WBX6HiXSmsHyrwFzwl82gO4ZtFwb675iQPWwVc= github.com/fluxcd/pkg/git/gogit v0.8.1/go.mod h1:5M27gCl0gyo6l+ht9HwZSzimPY3LahKVIJ7/1vCCctg= github.com/fluxcd/pkg/gittestserver v0.8.1 h1:FMqnZBuS/11+9NhtLv9UAg+wm/v0Nf+hHeUOi2wJR3Q= -github.com/fluxcd/pkg/kustomize v0.14.0 h1:XsvGTRsTMlW5u3+ciNChzp3c755SXG5PiCozjyLQYX0= -github.com/fluxcd/pkg/kustomize v0.14.0/go.mod h1:1PmtFOgx3Rn7uoB5C1NVbb0DxXPdY3v0lBX3L9ozCZw= -github.com/fluxcd/pkg/oci v0.21.1 h1:9kn19wkabE2xB77NRlOtMJlSYhZmUjdloZCzlHdAS6s= -github.com/fluxcd/pkg/oci v0.21.1/go.mod h1:9E2DBlQII7YmeWt2ieTh38wwkiBqx3yg5NEJ51uefaA= -github.com/fluxcd/pkg/runtime v0.31.0 h1:addyXaANHl/A68bEjCbiR4HzcFKgfXv1eaG7B7ZHxOo= -github.com/fluxcd/pkg/runtime v0.31.0/go.mod h1:toGOOubMo4ZC1aWhB8C3drdTglr1/A1dETeNwjiIv0g= -github.com/fluxcd/pkg/sourceignore v0.3.2 h1:UXRguBJA9frgRDSr7Lsc873a9YTbbpbJafEaYjkpVEs= -github.com/fluxcd/pkg/sourceignore v0.3.2/go.mod h1:yuJzKggph0Bdbk9LgXjJQhvJZSTJV/1vS7mJuB7mPa0= -github.com/fluxcd/pkg/ssa v0.24.1 h1:0dn5FqyYdGa+VuDp5EJrkLbPq5xhhSAAkMgGUeMpOM0= -github.com/fluxcd/pkg/ssa v0.24.1/go.mod h1:nEOUOwGotBlNZkTkO6GHPlI0U0BmHTavFd1Jk+TzsGw= +github.com/fluxcd/pkg/kustomize v1.1.0 h1:4qoTJBCtlg9RbO6YUwTNV3SttvXRIZxkjRRJE+jbsKk= +github.com/fluxcd/pkg/kustomize v1.1.0/go.mod h1:i+Z9iPAoSz28oH0FmDI73iqZ3oXZxQR2O3HfhdsWhfo= +github.com/fluxcd/pkg/oci v0.22.0 h1:6QRvCj1YXGEGXHyVkmKiBvYxsE0sEjUrpFknM513MbQ= +github.com/fluxcd/pkg/oci v0.22.0/go.mod h1:y0jUgMqb6ionfX+8AjhnoG8D6hSSx4elhtrQ7Uo0WzI= +github.com/fluxcd/pkg/runtime v0.35.0 h1:9PYLcul8qdfLYQArcYpHe/QuMqyhAGGFN9F7uY/QVX4= +github.com/fluxcd/pkg/runtime v0.35.0/go.mod h1:sAaSTH8RHj3Y99xj0AtAndDTe5cv0DP4enyLV62EO78= +github.com/fluxcd/pkg/sourceignore v0.3.3 h1:Ue29JAuPECEYdvIqdpXpQaDxpeySn7amarLArp7XoIs= +github.com/fluxcd/pkg/sourceignore v0.3.3/go.mod h1:yuJzKggph0Bdbk9LgXjJQhvJZSTJV/1vS7mJuB7mPa0= +github.com/fluxcd/pkg/ssa v0.27.0 h1:BJnWDy3xDtYD2U+sVZPkoh6PfnQKoXsklO0pzojU8XU= +github.com/fluxcd/pkg/ssa v0.27.0/go.mod h1:fxvmVf4FxodJi5lTglMcL8JsF6hfJLG99C56/CgchH0= github.com/fluxcd/pkg/ssh v0.7.3 h1:Dhs+nXdp806lBriUJtPyRi0SVIVWbJafJGD/qQ71GiY= github.com/fluxcd/pkg/ssh v0.7.3/go.mod h1:/z5ZNgQz+h9s/2nNFKAcZDHtZRMA1nj5YcriGDUOoLY= github.com/fluxcd/pkg/tar v0.2.0 h1:HEUHgONQYsJGeZZ4x6h5nQU9Aox1I4T3bOp1faWTqf8= @@ -284,13 +284,13 @@ github.com/go-openapi/jsonreference v0.20.1/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g= github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 h1:p104kn46Q8WdvHunIJ9dAyjPVtrBPhSr3KT2yUst43I= +github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= github.com/gofrs/uuid v4.2.0+incompatible h1:yyYWMnhkhrKwwr8gAOcOCYxOOscHgDS9yZgBrnJfGa0= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang-jwt/jwt/v4 v4.4.2 h1:rcc4lwaZgFMCZ5jxF9ABolDcIHdBytAFgqFPbSJQAYs= -github.com/golang-jwt/jwt/v4 v4.4.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= +github.com/golang-jwt/jwt/v4 v4.4.3 h1:Hxl6lhQFj4AnOX6MLrsCb/+7tCj7DxP7VA+2rDIq5AU= +github.com/golang-jwt/jwt/v4 v4.4.3/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -324,8 +324,8 @@ github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/gomodule/redigo v1.8.2 h1:H5XSIre1MB5NbPYFp+i1NBbb5qN1W8Y8YAQoAYbkm8k= github.com/gomodule/redigo v1.8.2/go.mod h1:P9dn9mFrCBvWhGE1wpxx6fgq7BAeLBk+UUUzlpkBYO0= -github.com/gonvenience/bunt v1.3.4 h1:Row599Ohja2BPooaqd1tHYdTAKu6SWq7W/UeakTXddM= -github.com/gonvenience/bunt v1.3.4/go.mod h1:j8eqHLBo8eWCCYuc34oFdlgyxL1rZ4ywYz4BZa4b09w= +github.com/gonvenience/bunt v1.3.5 h1:wSQquifvwEWtzn27k1ngLfeLaStyt0k1b/K6TrlCNAs= +github.com/gonvenience/bunt v1.3.5/go.mod h1:7ApqkVBEWvX04oJ28Q2WeI/BvJM6VtukaJAU/q/pTs8= github.com/gonvenience/neat v1.3.11 h1:xxxCdGSuikMm7/Qp9/NwPfxLefKJM2XQiobGwPu63+Q= github.com/gonvenience/neat v1.3.11/go.mod h1:aMdiynsB60zmUXaLgOIXQGiRgVGJQNNE/nr2F4BbIUA= github.com/gonvenience/term v1.0.2 h1:qKa2RydbWIrabGjR/fegJwpW5m+JvUwFL8mLhHzDXn0= @@ -355,8 +355,8 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-containerregistry v0.13.0 h1:y1C7Z3e149OJbOPDBxLYR8ITPz8dTKqQwjErKVHJC8k= -github.com/google/go-containerregistry v0.13.0/go.mod h1:J9FQ+eSS4a1aC2GNZxvNpbWhgp0487v+cgiilB4FqDo= +github.com/google/go-containerregistry v0.14.0 h1:z58vMqHxuwvAsVwvKEkmVBz2TlgBgH5k6koEXBtlYkw= +github.com/google/go-containerregistry v0.14.0/go.mod h1:aiJ2fp/SXvkWgmYHioXnbMdlgB8eXiiYOY55gfN91Wk= github.com/google/go-github/v49 v49.1.0 h1:LFkMgawGQ8dfzWLH/rNE0b3u1D3n6/dw7ZmrN3b+YFY= github.com/google/go-github/v49 v49.1.0/go.mod h1:MUUzHPrhGniB6vUKa27y37likpipzG+BXXJbG04J334= github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= @@ -373,7 +373,7 @@ github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 h1:yAJXTCF9TqKcTiHJAE8dj7HMvPfh66eeA2JYW7eFpSE= +github.com/google/pprof v0.0.0-20230323073829-e72429f035bd h1:r8yyd+DJDmsUhGrRBxH5Pj7KeFK5l+Y3FsgT8keqKtk= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= @@ -411,8 +411,8 @@ github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1: github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk= github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= -github.com/inconshreveable/mousetrap v1.0.1 h1:U3uMjPSQEBMNp1lFxmllqCPM6P5u/Xq7Pgzkat/bFNc= -github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= @@ -439,8 +439,8 @@ github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4 github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.15.11 h1:Lcadnb3RKGin4FYM/orgq0qde+nc15E5Cbqg4B9Sx9c= -github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= +github.com/klauspost/compress v1.16.0 h1:iULayQNOReoYUe+1qtKOqw9CwJv3aNQu8ivo7lw1HU4= +github.com/klauspost/compress v1.16.0/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= @@ -470,8 +470,9 @@ github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/mattn/go-isatty v0.0.18 h1:DOKFKCQ7FNG2L1rbrmstDN4QVRdS89Nkh85u68Uwp98= +github.com/mattn/go-isatty v0.0.18/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU= github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= @@ -511,9 +512,9 @@ github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= -github.com/onsi/ginkgo/v2 v2.8.4 h1:gf5mIQ8cLFieruNLAdgijHF1PYfLphKm2dxxcUtcqK0= -github.com/onsi/gomega v1.27.2 h1:SKU0CXeKE/WVgIV1T61kSa3+IRE8Ekrv9rdXDwwTqnY= -github.com/onsi/gomega v1.27.2/go.mod h1:5mR3phAHpkAVIDkHEUBY6HGVsU+cpcEscrGPB4oPlZI= +github.com/onsi/ginkgo/v2 v2.9.2 h1:BA2GMJOtfGAfagzYtrAlufIP0lq6QERkFmHLMLPwFSU= +github.com/onsi/gomega v1.27.6 h1:ENqfyGeS5AX/rlXDd/ETokDz93u0YufY1Pgxuy/PvWE= +github.com/onsi/gomega v1.27.6/go.mod h1:PIQNjfQwkP3aQAH7lf7j87O/5FiNr+ZR8+ipb+qQlhg= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= @@ -583,8 +584,8 @@ github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVs github.com/skeema/knownhosts v1.1.0 h1:Wvr9V0MxhjRbl3f9nMnKnFfiWTJmtECJ9Njkea3ysW0= github.com/skeema/knownhosts v1.1.0/go.mod h1:sKFq3RD6/TKZkSWn8boUbDC7Qkgcv+8XXijpFO6roag= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/cobra v1.6.1 h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA= -github.com/spf13/cobra v1.6.1/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY= +github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= +github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= @@ -693,8 +694,9 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.9.0 h1:KENHtAZL2y3NLMYZeHY9DW8HW8V+kQyJsY/V9JlKvCs= +golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -735,6 +737,7 @@ golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -821,15 +824,19 @@ golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU= +golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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= golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.6.0 h1:clScbb1cHjoCkyRbWwBEUZ5H/tIFu5TAXIqaZD0Gcjw= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= +golang.org/x/term v0.7.0 h1:BEvjmm5fURWqcfbSKTdpkDXYBrUS1c0m8agp14W48vQ= +golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -839,6 +846,7 @@ golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -889,8 +897,9 @@ golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/tools v0.7.0 h1:W4OVu8VVOaIO0yzWMNdepAulS7YfoS3Zabrm8DOXXU4= +golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1021,8 +1030,8 @@ k8s.io/apiextensions-apiserver v0.26.3 h1:5PGMm3oEzdB1W/FTMgGIDmm100vn7IaUP5er36 k8s.io/apiextensions-apiserver v0.26.3/go.mod h1:jdA5MdjNWGP+njw1EKMZc64xAT5fIhN6VJrElV3sfpQ= k8s.io/apimachinery v0.26.3 h1:dQx6PNETJ7nODU3XPtrwkfuubs6w7sX0M8n61zHIV/k= k8s.io/apimachinery v0.26.3/go.mod h1:ats7nN1LExKHvJ9TmwootT00Yz05MuYqPXEXaVeOy5I= -k8s.io/cli-runtime v0.26.2 h1:6XcIQOYW1RGNwFgRwejvyUyAojhToPmJLGr0JBMC5jw= -k8s.io/cli-runtime v0.26.2/go.mod h1:U7sIXX7n6ZB+MmYQsyJratzPeJwgITqrSlpr1a5wM5I= +k8s.io/cli-runtime v0.26.3 h1:3ULe0oI28xmgeLMVXIstB+ZL5CTGvWSMVMLeHxitIuc= +k8s.io/cli-runtime v0.26.3/go.mod h1:5YEhXLV4kLt/OSy9yQwtSSNZU2Z7aTEYta1A+Jg4VC4= k8s.io/client-go v0.26.3 h1:k1UY+KXfkxV2ScEL3gilKcF7761xkYsSD6BC9szIu8s= k8s.io/client-go v0.26.3/go.mod h1:ZPNu9lm8/dbRIPAgteN30RSXea6vrCpFvq+MateTUuQ= k8s.io/component-base v0.26.3 h1:oC0WMK/ggcbGDTkdcqefI4wIZRYdK3JySx9/HADpV0g= @@ -1031,8 +1040,8 @@ k8s.io/klog/v2 v2.90.1 h1:m4bYOKall2MmOiRaR1J+We67Do7vm9KiQVlT96lnHUw= k8s.io/klog/v2 v2.90.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/kube-openapi v0.0.0-20230109183929-3758b55a6596 h1:8cNCQs+WqqnSpZ7y0LMQPKD+RZUHU17VqLPMW3qxnxc= k8s.io/kube-openapi v0.0.0-20230109183929-3758b55a6596/go.mod h1:/BYxry62FuDzmI+i9B+X2pqfySRmSOW2ARmj5Zbqhj0= -k8s.io/kubectl v0.26.2 h1:SMPB4j48eVFxsYluBq3VLyqXtE6b72YnszkbTAtFye4= -k8s.io/kubectl v0.26.2/go.mod h1:KYWOXSwp2BrDn3kPeoU/uKzKtdqvhK1dgZGd0+no4cM= +k8s.io/kubectl v0.26.3 h1:bZ5SgFyeEXw6XTc1Qji0iNdtqAC76lmeIIQULg2wNXM= +k8s.io/kubectl v0.26.3/go.mod h1:02+gv7Qn4dupzN3fi/9OvqqdW+uG/4Zi56vc4Zmsp1g= k8s.io/utils v0.0.0-20230313181309-38a27ef9d749 h1:xMMXJlJbsU8w3V5N2FLDQ8YgU8s1EoULdbQBcAeNJkY= k8s.io/utils v0.0.0-20230313181309-38a27ef9d749/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= diff --git a/tests/azure/go.mod b/tests/azure/go.mod index 98012281..91f7f5fc 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -3,11 +3,11 @@ module github.com/fluxcd/flux2/tests/azure go 1.19 require ( - github.com/Azure/azure-event-hubs-go/v3 v3.4.0 + github.com/Azure/azure-event-hubs-go/v3 v3.5.0 github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 github.com/fluxcd/helm-controller/api v0.32.1 github.com/fluxcd/image-automation-controller/api v0.32.0 - github.com/fluxcd/image-reflector-controller/api v0.26.1 + github.com/fluxcd/image-reflector-controller/api v0.27.0 github.com/fluxcd/kustomize-controller/api v1.0.0-rc.1 github.com/fluxcd/notification-controller/api v1.0.0-rc.1 github.com/fluxcd/pkg/apis/event v0.4.1 @@ -15,12 +15,12 @@ require ( github.com/fluxcd/pkg/git v0.11.0 github.com/fluxcd/pkg/git/gogit v0.8.1 github.com/fluxcd/source-controller/api v1.0.0-rc.1 - github.com/hashicorp/hc-install v0.5.0 + github.com/hashicorp/hc-install v0.5.1 github.com/hashicorp/terraform-exec v0.18.1 github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 github.com/stretchr/testify v1.8.2 github.com/whilp/git-urls v1.0.0 - go.uber.org/multierr v1.10.0 + go.uber.org/multierr v1.11.0 k8s.io/api v0.26.3 k8s.io/apimachinery v0.26.3 k8s.io/client-go v0.26.3 @@ -31,9 +31,9 @@ require ( replace gopkg.in/yaml.v3 => gopkg.in/yaml.v3 v3.0.1 require ( - github.com/Azure/azure-amqp-common-go/v4 v4.0.0 // indirect + github.com/Azure/azure-amqp-common-go/v4 v4.1.0 // indirect github.com/Azure/azure-sdk-for-go v65.0.0+incompatible // indirect - github.com/Azure/go-amqp v0.18.0 // indirect + github.com/Azure/go-amqp v0.19.1 // indirect github.com/Azure/go-autorest v14.2.0+incompatible // indirect github.com/Azure/go-autorest/autorest v0.11.28 // indirect github.com/Azure/go-autorest/autorest/adal v0.9.21 // indirect @@ -45,7 +45,7 @@ require ( github.com/Masterminds/semver/v3 v3.2.0 // indirect github.com/Microsoft/go-winio v0.6.0 // indirect github.com/ProtonMail/go-crypto v0.0.0-20230217124315-7d5c6f04bbb8 // indirect - github.com/acomagu/bufpipe v1.0.3 // indirect + github.com/acomagu/bufpipe v1.0.4 // indirect github.com/apparentlymart/go-textseg/v13 v13.0.0 // indirect github.com/cloudflare/circl v1.3.2 // indirect github.com/cyphar/filepath-securejoin v0.2.3 // indirect @@ -60,7 +60,7 @@ require ( github.com/fluxcd/pkg/version v0.2.1 // indirect github.com/go-git/gcfg v1.5.0 // indirect github.com/go-git/go-billy/v5 v5.4.1 // indirect - github.com/go-logr/logr v1.2.3 // indirect + github.com/go-logr/logr v1.2.4 // indirect github.com/go-openapi/jsonpointer v0.19.5 // indirect github.com/go-openapi/jsonreference v0.20.0 // indirect github.com/go-openapi/swag v0.22.3 // indirect @@ -87,7 +87,7 @@ require ( github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect - github.com/pjbgf/sha1cd v0.2.3 // indirect + github.com/pjbgf/sha1cd v0.3.0 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/sergi/go-diff v1.3.1 // indirect @@ -96,7 +96,7 @@ require ( github.com/zclconf/go-cty v1.13.0 // indirect go.uber.org/atomic v1.10.0 // indirect golang.org/x/crypto v0.7.0 // indirect - golang.org/x/mod v0.8.0 // indirect + golang.org/x/mod v0.9.0 // indirect golang.org/x/net v0.8.0 // indirect golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b // indirect golang.org/x/sys v0.6.0 // indirect @@ -111,9 +111,9 @@ require ( gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect k8s.io/apiextensions-apiserver v0.26.3 // indirect - k8s.io/klog/v2 v2.80.1 // indirect + k8s.io/klog/v2 v2.90.1 // indirect k8s.io/kube-openapi v0.0.0-20221110221610-a28e98eb7c70 // indirect - k8s.io/utils v0.0.0-20221128185143-99ec85e7a448 // indirect + k8s.io/utils v0.0.0-20230313181309-38a27ef9d749 // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect sigs.k8s.io/yaml v1.3.0 // indirect diff --git a/tests/azure/go.sum b/tests/azure/go.sum index 9262ca2f..0ac4d8d4 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -31,14 +31,14 @@ cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohl cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/Azure/azure-amqp-common-go/v4 v4.0.0 h1:mV5O74KYmonn0ZXtwfMjGUtZ9Z+Hv7AIFVS1s03sRvo= -github.com/Azure/azure-amqp-common-go/v4 v4.0.0/go.mod h1:4+qRvizIo4+CbGG552O6a8ONkEwRgWXqes3SUt1Ftrc= -github.com/Azure/azure-event-hubs-go/v3 v3.4.0 h1:LtH0nHkXivyV/GajOu5ZFC5sb/5KZ8j+9U8UsfHVTOo= -github.com/Azure/azure-event-hubs-go/v3 v3.4.0/go.mod h1:ODgt5C1/c73FToYj+mWojUJLXF877ALc6G4XnfRFlAY= +github.com/Azure/azure-amqp-common-go/v4 v4.1.0 h1:gcS6P4q/Qv1nmdq1IWoU3mLYlHnvNxAhVjxReEFmSz8= +github.com/Azure/azure-amqp-common-go/v4 v4.1.0/go.mod h1:HDiTPilyFCWPOT8dBeSjGztqgrW27LctWs/4p6nR9FY= +github.com/Azure/azure-event-hubs-go/v3 v3.5.0 h1:H3nhguNPKFH+Z6GP0GZTJVsiuHjqrz5rsRsD816zNkQ= +github.com/Azure/azure-event-hubs-go/v3 v3.5.0/go.mod h1:7zahh3eGktdZ6Xtfv0F0mrnllBR0iE9TJMbGDsqxwkE= github.com/Azure/azure-sdk-for-go v65.0.0+incompatible h1:HzKLt3kIwMm4KeJYTdx9EbjRYTySD/t8i1Ee/W5EGXw= github.com/Azure/azure-sdk-for-go v65.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/go-amqp v0.18.0 h1:95bTiJq0oxjK1RUlt5T3HF/THj6jWTRZpSXMPSOJLz8= -github.com/Azure/go-amqp v0.18.0/go.mod h1:+bg0x3ce5+Q3ahCEXnCsGG3ETpDQe3MEVnOuT2ywPwc= +github.com/Azure/go-amqp v0.19.1 h1:S1l3HiSMU7Rhko2f70lBH6Vd0mLj5UZiTWC6xKY5Kho= +github.com/Azure/go-amqp v0.19.1/go.mod h1:+bg0x3ce5+Q3ahCEXnCsGG3ETpDQe3MEVnOuT2ywPwc= github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs= github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= github.com/Azure/go-autorest/autorest v0.11.28 h1:ndAExarwr5Y+GaHE6VCaY1kyS/HwwGGyuimVhWsHOEM= @@ -63,35 +63,27 @@ github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUM github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= -github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= github.com/Masterminds/semver/v3 v3.2.0 h1:3MEsd0SM6jqZojhjLWWeBY+Kcjy9i6MQAeY7YgDP83g= github.com/Masterminds/semver/v3 v3.2.0/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= -github.com/Masterminds/sprig/v3 v3.2.1/go.mod h1:UoaO7Yp8KlPnJIYWTFkMaqPUYKTfGFPhxNuwnnxkKlk= -github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= -github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4/go.mod h1:UBYPn8k0D56RtnR8RFQMjmh4KrZzWJ5o7Z9SYjossQ8= github.com/ProtonMail/go-crypto v0.0.0-20230217124315-7d5c6f04bbb8 h1:wPbRQzjjwFc0ih8puEVAOFGELsn1zoIIYdxvML7mDxA= github.com/ProtonMail/go-crypto v0.0.0-20230217124315-7d5c6f04bbb8/go.mod h1:I0gYDMZ6Z5GRU7l58bNFSkPTFN6Yl12dsUlAZ8xy98g= -github.com/acomagu/bufpipe v1.0.3 h1:fxAGrHZTgQ9w5QqVItgzwj235/uYZYgbXitB+dLupOk= github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= -github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= +github.com/acomagu/bufpipe v1.0.4 h1:e3H4WUzM3npvo5uv95QuJM3cQspFNtFBzvJ2oNjKIDQ= +github.com/acomagu/bufpipe v1.0.4/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/apparentlymart/go-textseg v1.0.0/go.mod h1:z96Txxhf3xSFMPmb5X/1W05FF/Nj9VFpLOpjS5yuumk= github.com/apparentlymart/go-textseg/v13 v13.0.0 h1:Y+KvPE1NYz0xl601PVImeQfFyEy6iT90AvPUL1NNfNw= github.com/apparentlymart/go-textseg/v13 v13.0.0/go.mod h1:ZK2fH7c4NqDTLtiYLvIkEghdlcqw7yxLeM89kiTRPUo= -github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= -github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= @@ -120,7 +112,6 @@ github.com/dimchansky/utfbom v1.1.0 h1:FcM3g+nofKgUteL8dm/UpdRXNC9KmADgTpLKsu0TR github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/emicklei/go-restful/v3 v3.10.0 h1:X4gma4HM7hFm6WMeAsTfqA0GOfdNoCzBIkHGoRLGXuM= github.com/emicklei/go-restful/v3 v3.10.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= -github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= 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= @@ -131,7 +122,6 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.m github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJCLunww= github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0= github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 h1:Gm5sGGk+/Wq6RhX4xpCZ2IqjDp5XkjlhENaAuAlpdKc= @@ -140,8 +130,8 @@ github.com/fluxcd/helm-controller/api v0.32.1 h1:b2q0V+cXnqvW24Zy4zY+5Jfn1D3sqBI github.com/fluxcd/helm-controller/api v0.32.1/go.mod h1:xzQgNoaPOg77zFUqvnaX0Fn3lPA3iGDLoz8q4wiEyLA= github.com/fluxcd/image-automation-controller/api v0.32.0 h1:ABRLN+a8jHuOAETf1o1ohVzxxjYhOXxtJglD5YSMuUM= github.com/fluxcd/image-automation-controller/api v0.32.0/go.mod h1:DHb9GaPZz5HCgBL3u3PC4XNGcO3rUroE6ayx1PAa0Gs= -github.com/fluxcd/image-reflector-controller/api v0.26.1 h1:AKfqabDlcouGilX0y+/Wa1R9qwMb6ZlTHD1ELEkK9tw= -github.com/fluxcd/image-reflector-controller/api v0.26.1/go.mod h1:xZILku1/O6higkHTW/D3dvte4Ld7kRuZH9r+Rm4p1B0= +github.com/fluxcd/image-reflector-controller/api v0.27.0 h1:1wceNPwx6dCPTmeGgSXLRbhRjEiyWeRSb+KMCcSJ0sw= +github.com/fluxcd/image-reflector-controller/api v0.27.0/go.mod h1:TNn1Y3XuinlCRiohmjUtwvjWurTspPg0U0cCvMI5Q3E= github.com/fluxcd/kustomize-controller/api v1.0.0-rc.1 h1:HnPpGw9RhVyE4LsvOOMUcCo4jA+gSfnkM2Xe/vjlpHg= github.com/fluxcd/kustomize-controller/api v1.0.0-rc.1/go.mod h1:ql/HdV+pGzqnHaU5oNyvYR7lHPWc/me3HUPd4g7A9BI= github.com/fluxcd/notification-controller/api v1.0.0-rc.1 h1:L6xM9Nvm2icc7SqcUSXYiIY8bTiV73kss5KleaUewts= @@ -165,30 +155,25 @@ github.com/fluxcd/pkg/version v0.2.1 h1:RRH7+6qiWHdTvRNwpoBmilnubJ2C4FZYGgy5wTDV github.com/fluxcd/pkg/version v0.2.1/go.mod h1:UmUYHDz4BxHQMesMUx3gYVrT2Wf66H49JpTg/PW+/OY= github.com/fluxcd/source-controller/api v1.0.0-rc.1 h1:MZaP5utClMG95Aw/AVu1l05WEfmpEw/RIlCLnkCQl14= github.com/fluxcd/source-controller/api v1.0.0-rc.1/go.mod h1:CvGNdS8g/MqwpERUK6aJp4lndsrm+JBzGpoyyZ4u0c8= -github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY= github.com/gliderlabs/ssh v0.3.5/go.mod h1:8XB4KraRrX39qHhT6yxPsHedjA08I/uBVwj4xC+/+z4= github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4= github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= -github.com/go-git/go-billy/v5 v5.2.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= github.com/go-git/go-billy/v5 v5.3.1/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= github.com/go-git/go-billy/v5 v5.4.1 h1:Uwp5tDRkPr+l/TnbHOQzp+tmJfLceOlbVucgpTz8ix4= github.com/go-git/go-billy/v5 v5.4.1/go.mod h1:vjbugF6Fz7JIflbVpl1hJsGjSHNltrSw45YK/ukIvQg= -github.com/go-git/go-git-fixtures/v4 v4.2.1/go.mod h1:K8zd3kDUAykwTdDCr+I0per6Y6vMiRR/nnVTBtavnB0= github.com/go-git/go-git-fixtures/v4 v4.3.1 h1:y5z6dd3qi8Hl+stezc8p3JxDkoTRqMAlKnXHuzrfjTQ= github.com/go-git/go-git-fixtures/v4 v4.3.1/go.mod h1:8LHG1a3SRW71ettAD/jW13h8c6AqjVSeL11RAdgaqpo= -github.com/go-git/go-git/v5 v5.4.2 h1:BXyZu9t0VkbiHtqrsvdq39UDhGJTl1h55VW6CSC4aY4= -github.com/go-git/go-git/v5 v5.4.2/go.mod h1:gQ1kArt6d+n+BGd+/B/I74HwRTLhth2+zti4ihgckDc= +github.com/go-git/go-git/v5 v5.6.1 h1:q4ZRqQl4pR/ZJHc1L5CFjGA1a10u76aV1iC+nh+bHsk= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= -github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= +github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/zapr v1.2.3 h1:a9vnzlIBPQBBkeaR9IuMUfmVOrQlkoC4YfPoFkX3T7A= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= @@ -270,30 +255,20 @@ github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5m github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-checkpoint v0.5.0/go.mod h1:7nfLNL10NsxqO4iWuW6tWW0HjZuDrwkBuEQsVcpCOgg= -github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= -github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= -github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= -github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/hc-install v0.5.0 h1:D9bl4KayIYKEeJ4vUDe9L5huqxZXczKaykSRcmQ0xY0= -github.com/hashicorp/hc-install v0.5.0/go.mod h1:JyzMfbzfSBSjoDCRPna1vi/24BEDxFaCPfdHtM5SCdo= -github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= +github.com/hashicorp/hc-install v0.5.1 h1:eCqToNCob7m2R8kM8Gr7XcVmcRSz9ppCFSVZbMh0X+0= +github.com/hashicorp/hc-install v0.5.1/go.mod h1:iDPCnzKo+SzToOh25R8OWpLdhhy7yBfJX3PmVWiYhrM= github.com/hashicorp/terraform-exec v0.18.1 h1:LAbfDvNQU1l0NOQlTuudjczVhHj061fNX5H8XZxHlH4= github.com/hashicorp/terraform-exec v0.18.1/go.mod h1:58wg4IeuAJ6LVsLUeD2DWZZoc/bYi6dzhLHzxM41980= github.com/hashicorp/terraform-json v0.15.0 h1:/gIyNtR6SFw6h5yzlbDbACyGvIhKtQi8mTsbkNd79lE= github.com/hashicorp/terraform-json v0.15.0/go.mod h1:+L1RNzjDU5leLFZkHTFTbJXaoqUC6TqXlFgDoOXrtvk= -github.com/huandu/xstrings v1.3.1/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= -github.com/huandu/xstrings v1.3.2/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= -github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk= github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= @@ -309,12 +284,10 @@ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= @@ -330,20 +303,14 @@ github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0 github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/matryer/is v1.2.0 h1:92UTHpy8CDwaJ08GqLDzhhuixiBUUD1p3AU6PHddz4A= github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 h1:YH424zrwLTlyHSH/GzLMJeu5zhYVZSx5RQxGKm1h96s= github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5/go.mod h1:PoGiBqKSQK1vIfQ+yVaFcGjDySHvym6FM1cNYnwzbrY= -github.com/mitchellh/cli v1.1.5/go.mod h1:v8+iFts2sPIKUV1ltktPXMCC8fumSKFItNcD2cLtRR4= -github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= @@ -355,14 +322,14 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8m github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/onsi/ginkgo/v2 v2.6.0 h1:9t9b9vRUbFq3C4qKFCGkVuq/fIHji802N1nrtkh1mNc= github.com/onsi/gomega v1.27.2 h1:SKU0CXeKE/WVgIV1T61kSa3+IRE8Ekrv9rdXDwwTqnY= -github.com/pjbgf/sha1cd v0.2.3 h1:uKQP/7QOzNtKYH7UTohZLcjF5/55EnTw0jO/Ru4jZwI= github.com/pjbgf/sha1cd v0.2.3/go.mod h1:HOK9QrgzdHpbc2Kzip0Q1yi3M2MFGPADtR6HjG65m5M= +github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4= +github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/prometheus/client_golang v1.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4= @@ -374,25 +341,20 @@ github.com/sebdah/goldie v1.0.0/go.mod h1:jXP4hmWywNEwZzhMuv2ccnqTSFpuq8iyQhtQdk github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= -github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= -github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= github.com/skeema/knownhosts v1.1.0 h1:Wvr9V0MxhjRbl3f9nMnKnFfiWTJmtECJ9Njkea3ysW0= github.com/skeema/knownhosts v1.1.0/go.mod h1:sKFq3RD6/TKZkSWn8boUbDC7Qkgcv+8XXijpFO6roag= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= @@ -403,7 +365,6 @@ github.com/vmihailenco/msgpack/v4 v4.3.12/go.mod h1:gborTTJjAo/GWTqqRjrLCn9pgNN+ github.com/vmihailenco/tagparser v0.1.1/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= github.com/whilp/git-urls v1.0.0 h1:95f6UMWN5FKW71ECsXRUd3FVYiXdrE7aX4NZKcPmIjU= github.com/whilp/git-urls v1.0.0/go.mod h1:J16SAmobsqc3Qcy98brfl5f5+e0clUvg1krgwk/qCfE= -github.com/xanzy/ssh-agent v0.3.0/go.mod h1:3s9xbODqPuuhK9JV1R321M/FlMZSBvE5aY6eAcqrDh0= github.com/xanzy/ssh-agent v0.3.2/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= @@ -428,26 +389,20 @@ go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= -go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ= -go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= -golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200414173820-0848c9571904/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= -golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= golang.org/x/crypto v0.7.0 h1:AvwMYaRytfdeVt3u6mLaxYtErKYjxA2OXjJ1HHq6t3A= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -481,9 +436,8 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8= -golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.9.0 h1:KENHtAZL2y3NLMYZeHY9DW8HW8V+kQyJsY/V9JlKvCs= +golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180811021610-c39426892332/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -513,7 +467,6 @@ golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81R golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210326060303-6b1517762897/go.mod h1:uSPa2vr4CLtc/ILN5odXGNXS6mhrKVzTaCXzk9m6W3k= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= @@ -521,7 +474,6 @@ golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -543,7 +495,6 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -552,7 +503,6 @@ golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -574,10 +524,8 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210502180810-71e4cd670f79/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -589,14 +537,12 @@ golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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= golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= golang.org/x/term v0.6.0 h1:clScbb1cHjoCkyRbWwBEUZ5H/tIFu5TAXIqaZD0Gcjw= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -608,7 +554,6 @@ golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -766,7 +711,6 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= @@ -786,12 +730,12 @@ k8s.io/apimachinery v0.26.3 h1:dQx6PNETJ7nODU3XPtrwkfuubs6w7sX0M8n61zHIV/k= k8s.io/apimachinery v0.26.3/go.mod h1:ats7nN1LExKHvJ9TmwootT00Yz05MuYqPXEXaVeOy5I= k8s.io/client-go v0.26.3 h1:k1UY+KXfkxV2ScEL3gilKcF7761xkYsSD6BC9szIu8s= k8s.io/client-go v0.26.3/go.mod h1:ZPNu9lm8/dbRIPAgteN30RSXea6vrCpFvq+MateTUuQ= -k8s.io/klog/v2 v2.80.1 h1:atnLQ121W371wYYFawwYx1aEY2eUfs4l3J72wtgAwV4= -k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/klog/v2 v2.90.1 h1:m4bYOKall2MmOiRaR1J+We67Do7vm9KiQVlT96lnHUw= +k8s.io/klog/v2 v2.90.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/kube-openapi v0.0.0-20221110221610-a28e98eb7c70 h1:zfqQc1V6/ZgGpvrOVvr62OjiqQX4lZjfznK34NQwkqw= k8s.io/kube-openapi v0.0.0-20221110221610-a28e98eb7c70/go.mod h1:+Axhij7bCpeqhklhUTe3xmOn6bWxolyZEeyaFpjGtl4= -k8s.io/utils v0.0.0-20221128185143-99ec85e7a448 h1:KTgPnR10d5zhztWptI952TNtt/4u5h3IzDXkdIMuo2Y= -k8s.io/utils v0.0.0-20221128185143-99ec85e7a448/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +k8s.io/utils v0.0.0-20230313181309-38a27ef9d749 h1:xMMXJlJbsU8w3V5N2FLDQ8YgU8s1EoULdbQBcAeNJkY= +k8s.io/utils v0.0.0-20230313181309-38a27ef9d749/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= From cecffc058894832979be6c765d59c0a0d2e3fe96 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 5 Apr 2023 15:52:51 +0300 Subject: [PATCH 474/818] Add commonMetadata to flux build/diff Signed-off-by: Stefan Prodan --- cmd/flux/build_kustomization.go | 13 ++++++++++--- .../build-kustomization/podinfo-result.yaml | 1 + .../podinfo-with-var-substitution-result.yaml | 1 + .../podinfo-without-service-result.yaml | 1 + internal/build/build.go | 14 ++++++++++++-- internal/build/diff.go | 12 ++++-------- 6 files changed, 29 insertions(+), 13 deletions(-) diff --git a/cmd/flux/build_kustomization.go b/cmd/flux/build_kustomization.go index 507fb94c..ee29edc7 100644 --- a/cmd/flux/build_kustomization.go +++ b/cmd/flux/build_kustomization.go @@ -21,10 +21,12 @@ import ( "os" "os/signal" + "github.com/fluxcd/pkg/ssa" "github.com/spf13/cobra" - "github.com/fluxcd/flux2/v2/internal/build" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" + + "github.com/fluxcd/flux2/v2/internal/build" ) var buildKsCmd = &cobra.Command{ @@ -114,12 +116,17 @@ func buildKsCmdRun(cmd *cobra.Command, args []string) (err error) { errChan := make(chan error) go func() { - manifests, err := builder.Build() + objects, err := builder.Build() + if err != nil { + errChan <- err + } + + manifests, err := ssa.ObjectsToYAML(objects) if err != nil { errChan <- err } - cmd.Print(string(manifests)) + cmd.Print(manifests) errChan <- nil }() diff --git a/cmd/flux/testdata/build-kustomization/podinfo-result.yaml b/cmd/flux/testdata/build-kustomization/podinfo-result.yaml index 009347d8..bf162251 100644 --- a/cmd/flux/testdata/build-kustomization/podinfo-result.yaml +++ b/cmd/flux/testdata/build-kustomization/podinfo-result.yaml @@ -171,3 +171,4 @@ metadata: name: db-user-pass-bkbd782d2c namespace: default type: Opaque +--- diff --git a/cmd/flux/testdata/build-kustomization/podinfo-with-var-substitution-result.yaml b/cmd/flux/testdata/build-kustomization/podinfo-with-var-substitution-result.yaml index 0c32c936..01686566 100644 --- a/cmd/flux/testdata/build-kustomization/podinfo-with-var-substitution-result.yaml +++ b/cmd/flux/testdata/build-kustomization/podinfo-with-var-substitution-result.yaml @@ -214,3 +214,4 @@ metadata: kustomize.toolkit.fluxcd.io/substitute: disabled name: flux-grafana-dashboards-kt8md725kf namespace: default +--- diff --git a/cmd/flux/testdata/build-kustomization/podinfo-without-service-result.yaml b/cmd/flux/testdata/build-kustomization/podinfo-without-service-result.yaml index e1e1885f..647ce020 100644 --- a/cmd/flux/testdata/build-kustomization/podinfo-without-service-result.yaml +++ b/cmd/flux/testdata/build-kustomization/podinfo-without-service-result.yaml @@ -99,3 +99,4 @@ spec: apiVersion: apps/v1 kind: Deployment name: podinfo +--- diff --git a/internal/build/build.go b/internal/build/build.go index 083a7ca4..0f2f1ca4 100644 --- a/internal/build/build.go +++ b/internal/build/build.go @@ -28,6 +28,7 @@ import ( "sync" "time" + "github.com/fluxcd/pkg/ssa" "github.com/theckman/yacspin" "k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" @@ -212,7 +213,7 @@ func (b *Builder) getKustomization(ctx context.Context) (*kustomizev1.Kustomizat // and overlays the manifests with the resources specified in the resourcesPath // It expects a kustomization.yaml file in the resourcesPath, and it will // generate a kustomization.yaml file if it doesn't exist -func (b *Builder) Build() ([]byte, error) { +func (b *Builder) Build() ([]*unstructured.Unstructured, error) { m, err := b.build() if err != nil { return nil, err @@ -223,7 +224,16 @@ func (b *Builder) Build() ([]byte, error) { return nil, fmt.Errorf("kustomize build failed: %w", err) } - return resources, nil + objects, err := ssa.ReadObjects(bytes.NewReader(resources)) + if err != nil { + return nil, fmt.Errorf("kustomize build failed: %w", err) + } + + if m := b.kustomization.Spec.CommonMetadata; m != nil { + ssa.SetCommonMetadata(objects, m.Labels, m.Annotations) + } + + return objects, nil } func (b *Builder) build() (m resmap.ResMap, err error) { diff --git a/internal/build/diff.go b/internal/build/diff.go index b510b129..e693e1d9 100644 --- a/internal/build/diff.go +++ b/internal/build/diff.go @@ -39,10 +39,10 @@ import ( "sigs.k8s.io/cli-utils/pkg/object" "sigs.k8s.io/yaml" + kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" "github.com/fluxcd/pkg/ssa" "github.com/fluxcd/flux2/v2/pkg/printers" - kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" ) func (b *Builder) Manager() (*ssa.ResourceManager, error) { @@ -58,12 +58,12 @@ func (b *Builder) Manager() (*ssa.ResourceManager, error) { func (b *Builder) Diff() (string, bool, error) { output := strings.Builder{} createdOrDrifted := false - res, err := b.Build() + objects, err := b.Build() if err != nil { return "", createdOrDrifted, err } - // convert the build result into Kubernetes unstructured objects - objects, err := ssa.ReadObjects(bytes.NewReader(res)) + + err = ssa.SetNativeKindsDefaults(objects) if err != nil { return "", createdOrDrifted, err } @@ -76,10 +76,6 @@ func (b *Builder) Diff() (string, bool, error) { ctx, cancel := context.WithTimeout(context.Background(), b.timeout) defer cancel() - if err := ssa.SetNativeKindsDefaults(objects); err != nil { - return "", createdOrDrifted, err - } - if b.spinner != nil { err = b.spinner.Start() if err != nil { From f0c498ff54b3fb5acb6b510216207a2edc5baf9c Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 5 Apr 2023 16:33:34 +0300 Subject: [PATCH 475/818] Add support for .sourceignore to flux build/diff Signed-off-by: Stefan Prodan --- internal/build/build.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/build/build.go b/internal/build/build.go index 0f2f1ca4..dd09594a 100644 --- a/internal/build/build.go +++ b/internal/build/build.go @@ -326,7 +326,7 @@ func (b *Builder) generate(kustomization kustomizev1.Kustomization, dirPath stri if err != nil { return "", err } - gen := kustomize.NewGenerator("", unstructured.Unstructured{Object: data}) + gen := kustomize.NewGeneratorWithIgnore("", "", unstructured.Unstructured{Object: data}) // acuire the lock b.mu.Lock() From c3aa940c2b9c4176b2f330ed072be26f13a9d36d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 6 Apr 2023 08:48:02 +0000 Subject: [PATCH 476/818] build(deps): bump github.com/docker/docker Bumps [github.com/docker/docker](https://github.com/docker/docker) from 23.0.1+incompatible to 23.0.3+incompatible. - [Release notes](https://github.com/docker/docker/releases) - [Commits](https://github.com/docker/docker/compare/v23.0.1...v23.0.3) --- updated-dependencies: - dependency-name: github.com/docker/docker dependency-type: indirect ... Signed-off-by: dependabot[bot] --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index aeedc5a2..13298e85 100644 --- a/go.mod +++ b/go.mod @@ -97,7 +97,7 @@ require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/docker/cli v23.0.1+incompatible // indirect github.com/docker/distribution v2.8.1+incompatible // indirect - github.com/docker/docker v23.0.1+incompatible // indirect + github.com/docker/docker v23.0.3+incompatible // indirect github.com/docker/docker-credential-helpers v0.7.0 // indirect github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c // indirect github.com/docker/go-metrics v0.0.1 // indirect diff --git a/go.sum b/go.sum index c6c513d0..6e53362d 100644 --- a/go.sum +++ b/go.sum @@ -156,8 +156,8 @@ github.com/docker/cli v23.0.1+incompatible h1:LRyWITpGzl2C9e9uGxzisptnxAn1zfZKXy github.com/docker/cli v23.0.1+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68= github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v23.0.1+incompatible h1:vjgvJZxprTTE1A37nm+CLNAdwu6xZekyoiVlUZEINcY= -github.com/docker/docker v23.0.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v23.0.3+incompatible h1:9GhVsShNWz1hO//9BNg/dpMnZW25KydO4wtVxWAIbho= +github.com/docker/docker v23.0.3+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker-credential-helpers v0.7.0 h1:xtCHsjxogADNZcdv1pKUHXryefjlVRqWqIhk/uXJp0A= github.com/docker/docker-credential-helpers v0.7.0/go.mod h1:rETQfLdHNT3foU5kuNkFR1R1V12OJRRO5lzt2D1b5X0= github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c h1:+pKlWGMw7gf6bQ+oDZB4KHQFypsfjYlq/C4rfL7D3g8= From b74638c25c62c7b4e95a2614384b81cd96042e3e Mon Sep 17 00:00:00 2001 From: Soule BA Date: Tue, 4 Apr 2023 18:04:55 +0200 Subject: [PATCH 477/818] Add the possibility to ignore files with build and diff ks If implemented, user will be able to ignore files when using `build kustomization` and `diff kustomization` both with .sourceignore and `ignore-paths` flag. Signed-off-by: Soule BA --- cmd/flux/build_kustomization.go | 13 ++++++++++- cmd/flux/build_kustomization_test.go | 6 +++++ cmd/flux/diff_kustomization.go | 18 ++++++++++++--- .../build-kustomization/ignore/.sourceignore | 2 ++ .../build-kustomization/ignore/configmap.yaml | 6 +++++ .../ignore/not_deployable/ignore_svc.yaml | 17 ++++++++++++++ .../build-kustomization/ignore/secret.yaml | 7 ++++++ .../podinfo-with-ignore-result.yaml | 23 +++++++++++++++++++ go.mod | 2 +- go.sum | 4 ++-- internal/build/build.go | 18 +++++++++++++-- 11 files changed, 107 insertions(+), 9 deletions(-) create mode 100644 cmd/flux/testdata/build-kustomization/ignore/.sourceignore create mode 100644 cmd/flux/testdata/build-kustomization/ignore/configmap.yaml create mode 100644 cmd/flux/testdata/build-kustomization/ignore/not_deployable/ignore_svc.yaml create mode 100644 cmd/flux/testdata/build-kustomization/ignore/secret.yaml create mode 100644 cmd/flux/testdata/build-kustomization/podinfo-with-ignore-result.yaml diff --git a/cmd/flux/build_kustomization.go b/cmd/flux/build_kustomization.go index ee29edc7..ea0517c0 100644 --- a/cmd/flux/build_kustomization.go +++ b/cmd/flux/build_kustomization.go @@ -46,7 +46,14 @@ flux build kustomization my-app --path ./path/to/local/manifests --kustomization # Build in dry-run mode without connecting to the cluster. # Note that variable substitutions from Secrets and ConfigMaps are skipped in dry-run mode. -flux build kustomization my-app --path ./path/to/local/manifests --kustomization-file ./path/to/local/my-app.yaml --dry-run`, +flux build kustomization my-app --path ./path/to/local/manifests \ + --kustomization-file ./path/to/local/my-app.yaml \ + --dry-run + +# Exclude files by providing a comma separated list of entries that follow the .gitignore pattern fromat. +flux build kustomization my-app --path ./path/to/local/manifests \ + --kustomization-file ./path/to/local/my-app.yaml \ + --ignore-paths "/to_ignore/**/*.yaml,ignore.yaml"`, ValidArgsFunction: resourceNamesCompletionFunc(kustomizev1.GroupVersion.WithKind(kustomizev1.KustomizationKind)), RunE: buildKsCmdRun, } @@ -54,6 +61,7 @@ flux build kustomization my-app --path ./path/to/local/manifests --kustomization type buildKsFlags struct { kustomizationFile string path string + ignorePaths []string dryRun bool } @@ -62,6 +70,7 @@ var buildKsArgs buildKsFlags func init() { buildKsCmd.Flags().StringVar(&buildKsArgs.path, "path", "", "Path to the manifests location.") buildKsCmd.Flags().StringVar(&buildKsArgs.kustomizationFile, "kustomization-file", "", "Path to the Flux Kustomization YAML file.") + buildKsCmd.Flags().StringSliceVar(&buildKsArgs.ignorePaths, "ignore-paths", nil, "set paths to ignore in .gitignore format") buildKsCmd.Flags().BoolVar(&buildKsArgs.dryRun, "dry-run", false, "Dry run mode.") buildCmd.AddCommand(buildKsCmd) } @@ -97,12 +106,14 @@ func buildKsCmdRun(cmd *cobra.Command, args []string) (err error) { build.WithKustomizationFile(buildKsArgs.kustomizationFile), build.WithDryRun(buildKsArgs.dryRun), build.WithNamespace(*kubeconfigArgs.Namespace), + build.WithIgnore(buildKsArgs.ignorePaths), ) } else { builder, err = build.NewBuilder(name, buildKsArgs.path, build.WithClientConfig(kubeconfigArgs, kubeclientOptions), build.WithTimeout(rootArgs.timeout), build.WithKustomizationFile(buildKsArgs.kustomizationFile), + build.WithIgnore(buildKsArgs.ignorePaths), ) } diff --git a/cmd/flux/build_kustomization_test.go b/cmd/flux/build_kustomization_test.go index 5f134384..d1d06817 100644 --- a/cmd/flux/build_kustomization_test.go +++ b/cmd/flux/build_kustomization_test.go @@ -63,6 +63,12 @@ func TestBuildKustomization(t *testing.T) { resultFile: "./testdata/build-kustomization/podinfo-with-var-substitution-result.yaml", assertFunc: "assertGoldenTemplateFile", }, + { + name: "build ignore", + args: "build kustomization podinfo --path ./testdata/build-kustomization/ignore --ignore-paths \"!configmap.yaml,!secret.yaml\"", + resultFile: "./testdata/build-kustomization/podinfo-with-ignore-result.yaml", + assertFunc: "assertGoldenTemplateFile", + }, } tmpl := map[string]string{ diff --git a/cmd/flux/diff_kustomization.go b/cmd/flux/diff_kustomization.go index 25ca0097..0c4968eb 100644 --- a/cmd/flux/diff_kustomization.go +++ b/cmd/flux/diff_kustomization.go @@ -37,7 +37,13 @@ Exit status: 0 No differences were found. 1 Differences were found. >1 diff fail flux diff kustomization my-app --path ./path/to/local/manifests # Preview using a local flux kustomization file -flux diff kustomization my-app --path ./path/to/local/manifests --kustomization-file ./path/to/local/my-app.yaml`, +flux diff kustomization my-app --path ./path/to/local/manifests \ + --kustomization-file ./path/to/local/my-app.yaml + +# Exclude files by providing a comma separated list of entries that follow the .gitignore pattern fromat. +flux diff kustomization my-app --path ./path/to/local/manifests \ + --kustomization-file ./path/to/local/my-app.yaml \ + --ignore-paths "/to_ignore/**/*.yaml,ignore.yaml"`, ValidArgsFunction: resourceNamesCompletionFunc(kustomizev1.GroupVersion.WithKind(kustomizev1.KustomizationKind)), RunE: diffKsCmdRun, } @@ -45,6 +51,7 @@ flux diff kustomization my-app --path ./path/to/local/manifests --kustomization- type diffKsFlags struct { kustomizationFile string path string + ignorePaths []string progressBar bool } @@ -53,6 +60,7 @@ var diffKsArgs diffKsFlags func init() { diffKsCmd.Flags().StringVar(&diffKsArgs.path, "path", "", "Path to a local directory that matches the specified Kustomization.spec.path.") diffKsCmd.Flags().BoolVar(&diffKsArgs.progressBar, "progress-bar", true, "Boolean to set the progress bar. The default value is true.") + diffKsCmd.Flags().StringSliceVar(&diffKsArgs.ignorePaths, "ignore-paths", nil, "set paths to ignore in .gitignore format") diffKsCmd.Flags().StringVar(&diffKsArgs.kustomizationFile, "kustomization-file", "", "Path to the Flux Kustomization YAML file.") diffCmd.AddCommand(diffKsCmd) } @@ -86,12 +94,16 @@ func diffKsCmdRun(cmd *cobra.Command, args []string) error { build.WithClientConfig(kubeconfigArgs, kubeclientOptions), build.WithTimeout(rootArgs.timeout), build.WithKustomizationFile(diffKsArgs.kustomizationFile), - build.WithProgressBar()) + build.WithProgressBar(), + build.WithIgnore(diffKsArgs.ignorePaths), + ) } else { builder, err = build.NewBuilder(name, diffKsArgs.path, build.WithClientConfig(kubeconfigArgs, kubeclientOptions), build.WithTimeout(rootArgs.timeout), - build.WithKustomizationFile(diffKsArgs.kustomizationFile)) + build.WithKustomizationFile(diffKsArgs.kustomizationFile), + build.WithIgnore(diffKsArgs.ignorePaths), + ) } if err != nil { diff --git a/cmd/flux/testdata/build-kustomization/ignore/.sourceignore b/cmd/flux/testdata/build-kustomization/ignore/.sourceignore new file mode 100644 index 00000000..12bc52ca --- /dev/null +++ b/cmd/flux/testdata/build-kustomization/ignore/.sourceignore @@ -0,0 +1,2 @@ +# exclude all +/* diff --git a/cmd/flux/testdata/build-kustomization/ignore/configmap.yaml b/cmd/flux/testdata/build-kustomization/ignore/configmap.yaml new file mode 100644 index 00000000..7f58221a --- /dev/null +++ b/cmd/flux/testdata/build-kustomization/ignore/configmap.yaml @@ -0,0 +1,6 @@ +apiVersion: v1 +data: + var: test +kind: ConfigMap +metadata: + name: configmap_ignore diff --git a/cmd/flux/testdata/build-kustomization/ignore/not_deployable/ignore_svc.yaml b/cmd/flux/testdata/build-kustomization/ignore/not_deployable/ignore_svc.yaml new file mode 100644 index 00000000..43fa3984 --- /dev/null +++ b/cmd/flux/testdata/build-kustomization/ignore/not_deployable/ignore_svc.yaml @@ -0,0 +1,17 @@ +apiVersion: v1 +kind: Service +metadata: + name: do_not_deploy +spec: + type: ClusterIP + selector: + app: podinfo + ports: + - name: http + port: 9898 + protocol: TCP + targetPort: http + - port: 9999 + targetPort: grpc + protocol: TCP + name: grpc diff --git a/cmd/flux/testdata/build-kustomization/ignore/secret.yaml b/cmd/flux/testdata/build-kustomization/ignore/secret.yaml new file mode 100644 index 00000000..65cc9d0c --- /dev/null +++ b/cmd/flux/testdata/build-kustomization/ignore/secret.yaml @@ -0,0 +1,7 @@ +apiVersion: v1 +data: + token: KipTT1BTKio= +kind: Secret +metadata: + name: secret_ignore +type: Opaque diff --git a/cmd/flux/testdata/build-kustomization/podinfo-with-ignore-result.yaml b/cmd/flux/testdata/build-kustomization/podinfo-with-ignore-result.yaml new file mode 100644 index 00000000..671d7d20 --- /dev/null +++ b/cmd/flux/testdata/build-kustomization/podinfo-with-ignore-result.yaml @@ -0,0 +1,23 @@ +apiVersion: v1 +data: + var: test +kind: ConfigMap +metadata: + labels: + kustomize.toolkit.fluxcd.io/name: podinfo + kustomize.toolkit.fluxcd.io/namespace: {{ .fluxns }} + name: configmap_ignore + namespace: default +--- +apiVersion: v1 +data: + token: KipTT1BTKio= +kind: Secret +metadata: + labels: + kustomize.toolkit.fluxcd.io/name: podinfo + kustomize.toolkit.fluxcd.io/namespace: {{ .fluxns }} + name: secret_ignore + namespace: default +type: Opaque +--- diff --git a/go.mod b/go.mod index 13298e85..c0e4cd27 100644 --- a/go.mod +++ b/go.mod @@ -18,7 +18,7 @@ require ( github.com/fluxcd/pkg/apis/meta v1.0.0 github.com/fluxcd/pkg/git v0.11.0 github.com/fluxcd/pkg/git/gogit v0.8.1 - github.com/fluxcd/pkg/kustomize v1.1.0 + github.com/fluxcd/pkg/kustomize v1.1.1 github.com/fluxcd/pkg/oci v0.22.0 github.com/fluxcd/pkg/runtime v0.35.0 github.com/fluxcd/pkg/sourceignore v0.3.3 diff --git a/go.sum b/go.sum index 6e53362d..c3894065 100644 --- a/go.sum +++ b/go.sum @@ -222,8 +222,8 @@ github.com/fluxcd/pkg/git v0.11.0/go.mod h1:VHRVlrZMHNoWBlaSAWxlGH6Vwlb9VRazUhPU github.com/fluxcd/pkg/git/gogit v0.8.1 h1:Q3EV2WBX6HiXSmsHyrwFzwl82gO4ZtFwb675iQPWwVc= github.com/fluxcd/pkg/git/gogit v0.8.1/go.mod h1:5M27gCl0gyo6l+ht9HwZSzimPY3LahKVIJ7/1vCCctg= github.com/fluxcd/pkg/gittestserver v0.8.1 h1:FMqnZBuS/11+9NhtLv9UAg+wm/v0Nf+hHeUOi2wJR3Q= -github.com/fluxcd/pkg/kustomize v1.1.0 h1:4qoTJBCtlg9RbO6YUwTNV3SttvXRIZxkjRRJE+jbsKk= -github.com/fluxcd/pkg/kustomize v1.1.0/go.mod h1:i+Z9iPAoSz28oH0FmDI73iqZ3oXZxQR2O3HfhdsWhfo= +github.com/fluxcd/pkg/kustomize v1.1.1 h1:hYFJGi+fiaecY4gXvx52fumlvDEq/1RdFbaev67oBhE= +github.com/fluxcd/pkg/kustomize v1.1.1/go.mod h1:i+Z9iPAoSz28oH0FmDI73iqZ3oXZxQR2O3HfhdsWhfo= github.com/fluxcd/pkg/oci v0.22.0 h1:6QRvCj1YXGEGXHyVkmKiBvYxsE0sEjUrpFknM513MbQ= github.com/fluxcd/pkg/oci v0.22.0/go.mod h1:y0jUgMqb6ionfX+8AjhnoG8D6hSSx4elhtrQ7Uo0WzI= github.com/fluxcd/pkg/runtime v0.35.0 h1:9PYLcul8qdfLYQArcYpHe/QuMqyhAGGFN9F7uY/QVX4= diff --git a/internal/build/build.go b/internal/build/build.go index dd09594a..5f6e21e5 100644 --- a/internal/build/build.go +++ b/internal/build/build.go @@ -25,6 +25,7 @@ import ( "fmt" "io" "os" + "strings" "sync" "time" @@ -71,6 +72,7 @@ type Builder struct { namespace string resourcesPath string kustomizationFile string + ignore []string // mu is used to synchronize access to the kustomization file mu sync.Mutex action kustomize.Action @@ -156,6 +158,14 @@ func WithDryRun(dryRun bool) BuilderOptionFunc { } } +// WithIgnore sets ignore field +func WithIgnore(ignore []string) BuilderOptionFunc { + return func(b *Builder) error { + b.ignore = ignore + return nil + } +} + // NewBuilder returns a new Builder // It takes a kustomization name and a path to the resources // It also takes a list of BuilderOptionFunc to configure the builder @@ -326,9 +336,13 @@ func (b *Builder) generate(kustomization kustomizev1.Kustomization, dirPath stri if err != nil { return "", err } - gen := kustomize.NewGeneratorWithIgnore("", "", unstructured.Unstructured{Object: data}) - // acuire the lock + // a scanner will be used down the line to parse the list + // so we have to make sure to unclude newlines + ignoreList := strings.Join(b.ignore, "\n") + gen := kustomize.NewGeneratorWithIgnore("", ignoreList, unstructured.Unstructured{Object: data}) + + // acquire the lock b.mu.Lock() defer b.mu.Unlock() From 2696a93ee0957e8cad0852324043ed549ff6f2c2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Apr 2023 01:03:48 +0000 Subject: [PATCH 478/818] build(deps): bump peter-evans/create-pull-request from 4.2.4 to 5.0.0 Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 4.2.4 to 5.0.0. - [Release notes](https://github.com/peter-evans/create-pull-request/releases) - [Commits](https://github.com/peter-evans/create-pull-request/compare/38e0b6e68b4c852a5500a94740f0e535e0d7ba54...5b4a9f6a9e2af26e5f02351490b90d01eb8ec1e5) --- updated-dependencies: - dependency-name: peter-evans/create-pull-request dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/update.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/update.yaml b/.github/workflows/update.yaml index c17c55fd..ec63199d 100644 --- a/.github/workflows/update.yaml +++ b/.github/workflows/update.yaml @@ -84,7 +84,7 @@ jobs: - name: Create Pull Request id: cpr - uses: peter-evans/create-pull-request@38e0b6e68b4c852a5500a94740f0e535e0d7ba54 # v4.2.4 + uses: peter-evans/create-pull-request@5b4a9f6a9e2af26e5f02351490b90d01eb8ec1e5 # v5.0.0 with: token: ${{ secrets.BOT_GITHUB_TOKEN }} commit-message: | From 48a1c0f5d4ba6349ec515afbe56b8ce3f9adcaa4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Apr 2023 07:52:00 +0000 Subject: [PATCH 479/818] build(deps): bump github/codeql-action from 2.2.9 to 2.2.11 Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2.2.9 to 2.2.11. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/04df1262e6247151b5ac09cd2c303ac36ad3f62b...d186a2a36cc67bfa1b860e6170d37fb9634742c7) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/scan.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index 71a50fdd..47bcb77c 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -53,7 +53,7 @@ jobs: env: SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }} - name: Upload result to GitHub Code Scanning - uses: github/codeql-action/upload-sarif@04df1262e6247151b5ac09cd2c303ac36ad3f62b # v2.2.9 + uses: github/codeql-action/upload-sarif@d186a2a36cc67bfa1b860e6170d37fb9634742c7 # v2.2.11 with: sarif_file: snyk.sarif @@ -73,10 +73,10 @@ jobs: **/go.sum **/go.mod - name: Initialize CodeQL - uses: github/codeql-action/init@04df1262e6247151b5ac09cd2c303ac36ad3f62b # v2.2.9 + uses: github/codeql-action/init@d186a2a36cc67bfa1b860e6170d37fb9634742c7 # v2.2.11 with: languages: go - name: Autobuild - uses: github/codeql-action/autobuild@04df1262e6247151b5ac09cd2c303ac36ad3f62b # v2.2.9 + uses: github/codeql-action/autobuild@d186a2a36cc67bfa1b860e6170d37fb9634742c7 # v2.2.11 - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@04df1262e6247151b5ac09cd2c303ac36ad3f62b # v2.2.9 + uses: github/codeql-action/analyze@d186a2a36cc67bfa1b860e6170d37fb9634742c7 # v2.2.11 From 1435c71d9cf8bbb15a1c946f5b2bda1ef8b5917e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Apr 2023 11:36:28 +0000 Subject: [PATCH 480/818] build(deps): bump sigstore/cosign-installer from 3.0.1 to 3.0.2 Bumps [sigstore/cosign-installer](https://github.com/sigstore/cosign-installer) from 3.0.1 to 3.0.2. - [Release notes](https://github.com/sigstore/cosign-installer/releases) - [Commits](https://github.com/sigstore/cosign-installer/compare/c3667d99424e7e6047999fb6246c0da843953c65...9e9de2292db7abb3f51b7f4808d98f0d347a8919) --- updated-dependencies: - dependency-name: sigstore/cosign-installer dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/release.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 1ed1a842..b1f3baa9 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -32,7 +32,7 @@ jobs: - name: Setup Syft uses: anchore/sbom-action/download-syft@422cb34a0f8b599678c41b21163ea6088edb2624 # v0.14.1 - name: Setup Cosign - uses: sigstore/cosign-installer@c3667d99424e7e6047999fb6246c0da843953c65 # v3.0.1 + uses: sigstore/cosign-installer@9e9de2292db7abb3f51b7f4808d98f0d347a8919 # v3.0.2 - name: Setup Kustomize uses: fluxcd/pkg/actions/kustomize@main - name: Login to GitHub Container Registry @@ -134,7 +134,7 @@ jobs: --path="./flux-system" \ --source=${{ github.repositoryUrl }} \ --revision="${{ github.ref_name }}@sha1:${{ github.sha }}" - - uses: sigstore/cosign-installer@c3667d99424e7e6047999fb6246c0da843953c65 # v3.0.1 + - uses: sigstore/cosign-installer@9e9de2292db7abb3f51b7f4808d98f0d347a8919 # v3.0.2 - name: Sign manifests env: COSIGN_EXPERIMENTAL: 1 From a52f5aaa754c0c416731a7e3e799e6280af98131 Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Wed, 5 Apr 2023 17:19:21 +0100 Subject: [PATCH 481/818] Add label selector flag to get cmd Signed-off-by: Somtochi Onyekwere --- cmd/flux/get.go | 18 +++++ cmd/flux/get_test.go | 61 +++++++++++++++ cmd/flux/testdata/get/get.golden | 4 + cmd/flux/testdata/get/get_label_one.golden | 2 + cmd/flux/testdata/get/get_label_two.golden | 2 + cmd/flux/testdata/get/objects.yaml | 91 ++++++++++++++++++++++ 6 files changed, 178 insertions(+) create mode 100644 cmd/flux/get_test.go create mode 100644 cmd/flux/testdata/get/get.golden create mode 100644 cmd/flux/testdata/get/get_label_one.golden create mode 100644 cmd/flux/testdata/get/get_label_two.golden create mode 100644 cmd/flux/testdata/get/objects.yaml diff --git a/cmd/flux/get.go b/cmd/flux/get.go index 51f5b698..54355317 100644 --- a/cmd/flux/get.go +++ b/cmd/flux/get.go @@ -66,6 +66,7 @@ type GetFlags struct { allNamespaces bool noHeader bool statusSelector string + labelSelector string watch bool } @@ -78,6 +79,8 @@ func init() { getCmd.PersistentFlags().BoolVarP(&getArgs.watch, "watch", "w", false, "After listing/getting the requested object, watch for changes.") getCmd.PersistentFlags().StringVar(&getArgs.statusSelector, "status-selector", "", "specify the status condition name and the desired state to filter the get result, e.g. ready=false") + getCmd.PersistentFlags().StringVarP(&getArgs.labelSelector, "label-selector", "l", "", + "filter objects by label selector") rootCmd.AddCommand(getCmd) } @@ -150,6 +153,21 @@ func (get getCommand) run(cmd *cobra.Command, args []string) error { listOpts = append(listOpts, client.MatchingFields{"metadata.name": args[0]}) } + if getArgs.labelSelector != "" { + label, err := metav1.ParseToLabelSelector(getArgs.labelSelector) + if err != nil { + return fmt.Errorf("unable to parse label selector: %w", err) + } + + sel, err := metav1.LabelSelectorAsSelector(label) + if err != nil { + return err + } + listOpts = append(listOpts, client.MatchingLabelsSelector{ + Selector: sel, + }) + } + getAll := cmd.Use == "all" if getArgs.watch { diff --git a/cmd/flux/get_test.go b/cmd/flux/get_test.go new file mode 100644 index 00000000..62a1b725 --- /dev/null +++ b/cmd/flux/get_test.go @@ -0,0 +1,61 @@ +//go:build unit +// +build unit + +/* +Copyright 2023 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import "testing" + +func Test_GetCmd(t *testing.T) { + tmpl := map[string]string{ + "fluxns": allocateNamespace("flux-system"), + } + testEnv.CreateObjectFile("./testdata/get/objects.yaml", tmpl, t) + + tests := []struct { + name string + args string + expected string + }{ + { + name: "no label selector", + expected: "testdata/get/get.golden", + }, + { + name: "equal label selector", + args: "-l sharding.fluxcd.io/key=shard1", + expected: "testdata/get/get_label_one.golden", + }, + { + name: "notin label selector", + args: `-l "sharding.fluxcd.io/key notin (shard1, shard2)"`, + expected: "testdata/get/get_label_two.golden", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + cmd := cmdTestCase{ + args: "get sources git " + tt.args + " -n " + tmpl["fluxns"], + assert: assertGoldenTemplateFile(tt.expected, nil), + } + + cmd.runTestCmd(t) + }) + } +} diff --git a/cmd/flux/testdata/get/get.golden b/cmd/flux/testdata/get/get.golden new file mode 100644 index 00000000..5d741ccc --- /dev/null +++ b/cmd/flux/testdata/get/get.golden @@ -0,0 +1,4 @@ +NAME REVISION SUSPENDED READY MESSAGE +podinfo main@sha1:696f056d False True Fetched revision: main@sha1:696f056d +podinfo-shard1 main@sha1:696f056d False True Fetched revision: main@sha1:696f056d +podinfo-shard2 main@sha1:696f056d False True Fetched revision: main@sha1:696f056d diff --git a/cmd/flux/testdata/get/get_label_one.golden b/cmd/flux/testdata/get/get_label_one.golden new file mode 100644 index 00000000..1adcb4ae --- /dev/null +++ b/cmd/flux/testdata/get/get_label_one.golden @@ -0,0 +1,2 @@ +NAME REVISION SUSPENDED READY MESSAGE +podinfo-shard1 main@sha1:696f056d False True Fetched revision: main@sha1:696f056d diff --git a/cmd/flux/testdata/get/get_label_two.golden b/cmd/flux/testdata/get/get_label_two.golden new file mode 100644 index 00000000..c001e63f --- /dev/null +++ b/cmd/flux/testdata/get/get_label_two.golden @@ -0,0 +1,2 @@ +NAME REVISION SUSPENDED READY MESSAGE +podinfo main@sha1:696f056d False True Fetched revision: main@sha1:696f056d diff --git a/cmd/flux/testdata/get/objects.yaml b/cmd/flux/testdata/get/objects.yaml new file mode 100644 index 00000000..42913c20 --- /dev/null +++ b/cmd/flux/testdata/get/objects.yaml @@ -0,0 +1,91 @@ +--- +apiVersion: v1 +kind: Namespace +metadata: + name: {{ .fluxns }} +--- +apiVersion: source.toolkit.fluxcd.io/v1 +kind: GitRepository +metadata: + labels: + kustomize.toolkit.fluxcd.io/name: flux-system + kustomize.toolkit.fluxcd.io/namespace: {{ .fluxns }} + name: podinfo + namespace: {{ .fluxns }} +spec: + ref: + branch: main + secretRef: + name: flux-system + url: ssh://git@github.com/example/repo + interval: 5m +status: + artifact: + lastUpdateTime: "2021-08-01T04:28:42Z" + revision: main@sha1:696f056df216eea4f9401adbee0ff744d4df390f + path: "example" + url: "example" + conditions: + - lastTransitionTime: "2021-07-20T00:48:16Z" + message: 'Fetched revision: main@sha1:696f056df216eea4f9401adbee0ff744d4df390f' + reason: GitOperationSucceed + status: "True" + type: Ready +--- +apiVersion: source.toolkit.fluxcd.io/v1 +kind: GitRepository +metadata: + labels: + kustomize.toolkit.fluxcd.io/name: flux-system + kustomize.toolkit.fluxcd.io/namespace: {{ .fluxns }} + sharding.fluxcd.io/key: shard1 + name: podinfo-shard1 + namespace: {{ .fluxns }} +spec: + ref: + branch: main + secretRef: + name: flux-system + url: ssh://git@github.com/example/repo + interval: 5m +status: + artifact: + lastUpdateTime: "2021-08-01T04:28:42Z" + revision: main@sha1:696f056df216eea4f9401adbee0ff744d4df390f + path: "example" + url: "example" + conditions: + - lastTransitionTime: "2021-07-20T00:48:16Z" + message: 'Fetched revision: main@sha1:696f056df216eea4f9401adbee0ff744d4df390f' + reason: GitOperationSucceed + status: "True" + type: Ready +--- +apiVersion: source.toolkit.fluxcd.io/v1 +kind: GitRepository +metadata: + labels: + kustomize.toolkit.fluxcd.io/name: flux-system + kustomize.toolkit.fluxcd.io/namespace: {{ .fluxns }} + sharding.fluxcd.io/key: shard2 + name: podinfo-shard2 + namespace: {{ .fluxns }} +spec: + ref: + branch: main + secretRef: + name: flux-system + url: ssh://git@github.com/example/repo + interval: 5m +status: + artifact: + lastUpdateTime: "2021-08-01T04:28:42Z" + revision: main@sha1:696f056df216eea4f9401adbee0ff744d4df390f + path: "example" + url: "example" + conditions: + - lastTransitionTime: "2021-07-20T00:48:16Z" + message: 'Fetched revision: main@sha1:696f056df216eea4f9401adbee0ff744d4df390f' + reason: GitOperationSucceed + status: "True" + type: Ready From 08370cb3a61df6514a46e9c260b15326f985c343 Mon Sep 17 00:00:00 2001 From: Sanskar Jaiswal Date: Tue, 11 Apr 2023 13:34:07 +0530 Subject: [PATCH 482/818] clean dir before cloning git repo Remove all files/subdirs from the directory we are cloning into. This is needed because go-git returns a `repository already exists` error if the directory is non-empty, which is possible since we retry cloning (into the same dir) if the first attempt fails. Signed-off-by: Sanskar Jaiswal --- pkg/bootstrap/bootstrap_plain_git.go | 34 ++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/pkg/bootstrap/bootstrap_plain_git.go b/pkg/bootstrap/bootstrap_plain_git.go index bd3281c2..c79ad74a 100644 --- a/pkg/bootstrap/bootstrap_plain_git.go +++ b/pkg/bootstrap/bootstrap_plain_git.go @@ -18,6 +18,7 @@ package bootstrap import ( "context" + "errors" "fmt" "io" "os" @@ -117,6 +118,10 @@ func (b *PlainGitBootstrapper) ReconcileComponents(ctx context.Context, manifest b.logger.Actionf("cloning branch %q from Git repository %q", b.branch, b.url) var cloned bool if err = retry(1, 2*time.Second, func() (err error) { + if err = b.cleanGitRepoDir(); err != nil { + b.logger.Warningf(" failed to clean directory for git repo: %w", err) + return + } _, err = b.gitClient.Clone(ctx, b.url, repository.CloneOptions{ CheckoutStrategy: repository.CheckoutStrategy{ Branch: b.branch, @@ -258,11 +263,18 @@ func (b *PlainGitBootstrapper) ReconcileSyncConfig(ctx context.Context, options b.logger.Actionf("cloning branch %q from Git repository %q", b.branch, b.url) var cloned bool if err = retry(1, 2*time.Second, func() (err error) { + if err = b.cleanGitRepoDir(); err != nil { + b.logger.Warningf(" failed to clean directory for git repo: %w", err) + return + } _, err = b.gitClient.Clone(ctx, b.url, repository.CloneOptions{ CheckoutStrategy: repository.CheckoutStrategy{ Branch: b.branch, }, }) + if err != nil { + b.logger.Warningf(" clone failure: %s", err) + } if err == nil { cloned = true } @@ -342,11 +354,18 @@ func (b *PlainGitBootstrapper) ReconcileSyncConfig(ctx context.Context, options return fmt.Errorf("failed to recreate tmp dir: %w", err) } if err = retry(1, 2*time.Second, func() (err error) { + if err = b.cleanGitRepoDir(); err != nil { + b.logger.Warningf(" failed to clean directory for git repo: %w", err) + return + } _, err = b.gitClient.Clone(ctx, b.url, repository.CloneOptions{ CheckoutStrategy: repository.CheckoutStrategy{ Branch: b.branch, }, }) + if err != nil { + b.logger.Warningf(" clone failure: %s", err) + } return }); err != nil { return fmt.Errorf("failed to clone repository: %w", err) @@ -424,6 +443,21 @@ func (b *PlainGitBootstrapper) ReportComponentsHealth(ctx context.Context, insta return nil } +// cleanGitRepoDir cleans the directory meant for the Git repo. +func (b *PlainGitBootstrapper) cleanGitRepoDir() error { + dirs, err := os.ReadDir(b.gitClient.Path()) + if err != nil { + return err + } + var errs []error + for _, dir := range dirs { + if err := os.RemoveAll(filepath.Join(b.gitClient.Path(), dir.Name())); err != nil { + errs = append(errs, err) + } + } + return errors.Join(errs...) +} + func getOpenPgpEntity(keyRing openpgp.EntityList, passphrase, keyID string) (*openpgp.Entity, error) { if len(keyRing) == 0 { return nil, fmt.Errorf("empty GPG key ring") From 52c7cca3fc80ccd852631604060cdc78dc6add78 Mon Sep 17 00:00:00 2001 From: Aurel Canciu Date: Thu, 6 Apr 2023 22:59:14 +0200 Subject: [PATCH 483/818] Fix publishing pre-release versions to AUR Fixes #3767 Signed-off-by: Aurel Canciu --- .github/aur/flux-bin/.SRCINFO.template | 8 ++++---- .github/aur/flux-bin/PKGBUILD.template | 11 ++++++----- .github/aur/flux-bin/publish.sh | 11 ++++++----- .github/aur/flux-go/.SRCINFO.template | 2 +- .github/aur/flux-go/PKGBUILD.template | 13 +++++++------ .github/aur/flux-go/publish.sh | 7 ++++--- .github/aur/flux-scm/PKGBUILD.template | 2 +- .github/aur/flux-scm/publish.sh | 1 + 8 files changed, 30 insertions(+), 25 deletions(-) diff --git a/.github/aur/flux-bin/.SRCINFO.template b/.github/aur/flux-bin/.SRCINFO.template index 10aafed7..b75d3e62 100644 --- a/.github/aur/flux-bin/.SRCINFO.template +++ b/.github/aur/flux-bin/.SRCINFO.template @@ -10,13 +10,13 @@ pkgbase = flux-bin license = APACHE optdepends = bash-completion: auto-completion for flux in Bash optdepends = zsh-completions: auto-completion for flux in ZSH - source_x86_64 = ${PKGNAME}-${PKGVER}.tar.gz::https://github.com/fluxcd/flux2/releases/download/v${PKGVER}/flux_${PKGVER}_linux_amd64.tar.gz + source_x86_64 = flux-${PKGVER}.tar.gz::https://github.com/fluxcd/flux2/releases/download/v${VERSION}/flux_${VERSION}_linux_amd64.tar.gz sha256sums_x86_64 = ${SHA256SUM_AMD64} - source_armv6h = ${PKGNAME}-${PKGVER}.tar.gz::https://github.com/fluxcd/flux2/releases/download/v${PKGVER}/flux_${PKGVER}_linux_arm.tar.gz + source_armv6h = flux-${PKGVER}.tar.gz::https://github.com/fluxcd/flux2/releases/download/v${VERSION}/flux_${VERSION}_linux_arm.tar.gz sha256sums_armv6h = ${SHA256SUM_ARM} - source_armv7h = ${PKGNAME}-${PKGVER}.tar.gz::https://github.com/fluxcd/flux2/releases/download/v${PKGVER}/flux_${PKGVER}_linux_arm.tar.gz + source_armv7h = flux-${PKGVER}.tar.gz::https://github.com/fluxcd/flux2/releases/download/v${VERSION}/flux_${VERSION}_linux_arm.tar.gz sha256sums_armv7h = ${SHA256SUM_ARM} - source_aarch64 = ${PKGNAME}-${PKGVER}.tar.gz::https://github.com/fluxcd/flux2/releases/download/v${PKGVER}/flux_${PKGVER}_linux_arm64.tar.gz + source_aarch64 = flux-${PKGVER}.tar.gz::https://github.com/fluxcd/flux2/releases/download/v${VERSION}/flux_${VERSION}_linux_arm64.tar.gz sha256sums_aarch64 = ${SHA256SUM_ARM64} pkgname = flux-bin diff --git a/.github/aur/flux-bin/PKGBUILD.template b/.github/aur/flux-bin/PKGBUILD.template index df4272d7..c390bd51 100644 --- a/.github/aur/flux-bin/PKGBUILD.template +++ b/.github/aur/flux-bin/PKGBUILD.template @@ -4,6 +4,8 @@ pkgname=flux-bin pkgver=${PKGVER} pkgrel=${PKGREL} +_srcname=flux +_srcver=${VERSION} pkgdesc="Open and extensible continuous delivery solution for Kubernetes" url="https://fluxcd.io/" arch=("x86_64" "armv6h" "armv7h" "aarch64") @@ -11,16 +13,16 @@ license=("APACHE") optdepends=('bash-completion: auto-completion for flux in Bash' 'zsh-completions: auto-completion for flux in ZSH') source_x86_64=( - "${pkgname}-${pkgver}.tar.gz::https://github.com/fluxcd/flux2/releases/download/v${pkgver}/flux_${pkgver}_linux_amd64.tar.gz" + "${pkgname}-${pkgver}.tar.gz::https://github.com/fluxcd/flux2/releases/download/v${_srcver}/flux_${_srcver}_linux_amd64.tar.gz" ) source_armv6h=( - "${pkgname}-${pkgver}.tar.gz::https://github.com/fluxcd/flux2/releases/download/v${pkgver}/flux_${pkgver}_linux_arm.tar.gz" + "${pkgname}-${pkgver}.tar.gz::https://github.com/fluxcd/flux2/releases/download/v${_srcver}/flux_${_srcver}_linux_arm.tar.gz" ) source_armv7h=( - "${pkgname}-${pkgver}.tar.gz::https://github.com/fluxcd/flux2/releases/download/v${pkgver}/flux_${pkgver}_linux_arm.tar.gz" + "${pkgname}-${pkgver}.tar.gz::https://github.com/fluxcd/flux2/releases/download/v${_srcver}/flux_${_srcver}_linux_arm.tar.gz" ) source_aarch64=( - "${pkgname}-${pkgver}.tar.gz::https://github.com/fluxcd/flux2/releases/download/v${pkgver}/flux_${pkgver}_linux_arm64.tar.gz" + "${pkgname}-${pkgver}.tar.gz::https://github.com/fluxcd/flux2/releases/download/v${_srcver}/flux_${_srcver}_linux_arm64.tar.gz" ) sha256sums_x86_64=( ${SHA256SUM_AMD64} @@ -34,7 +36,6 @@ sha256sums_armv7h=( sha256sums_aarch64=( ${SHA256SUM_ARM64} ) -_srcname=flux package() { install -Dm755 ${_srcname} "${pkgdir}/usr/bin/${_srcname}" diff --git a/.github/aur/flux-bin/publish.sh b/.github/aur/flux-bin/publish.sh index 0e6097c1..00feb89a 100755 --- a/.github/aur/flux-bin/publish.sh +++ b/.github/aur/flux-bin/publish.sh @@ -28,6 +28,7 @@ git clone aur@aur.archlinux.org:$PKGNAME $GITDIR 2>&1 CURRENT_PKGVER=$(cat $GITDIR/.SRCINFO | grep pkgver | awk '{ print $3 }') CURRENT_PKGREL=$(cat $GITDIR/.SRCINFO | grep pkgrel | awk '{ print $3 }') +# Transform pre-release to AUR compatible version format export PKGVER=${VERSION/-/} if [[ "${CURRENT_PKGVER}" == "${PKGVER}" ]]; then @@ -36,12 +37,12 @@ else export PKGREL=1 fi -export SHA256SUM_ARM=$(sha256sum ${ROOT}/dist/flux_${PKGVER}_linux_arm.tar.gz | awk '{ print $1 }') -export SHA256SUM_ARM64=$(sha256sum ${ROOT}/dist/flux_${PKGVER}_linux_arm64.tar.gz | awk '{ print $1 }') -export SHA256SUM_AMD64=$(sha256sum ${ROOT}/dist/flux_${PKGVER}_linux_amd64.tar.gz | awk '{ print $1 }') +export SHA256SUM_ARM=$(sha256sum ${ROOT}/dist/flux_${VERSION}_linux_arm.tar.gz | awk '{ print $1 }') +export SHA256SUM_ARM64=$(sha256sum ${ROOT}/dist/flux_${VERSION}_linux_arm64.tar.gz | awk '{ print $1 }') +export SHA256SUM_AMD64=$(sha256sum ${ROOT}/dist/flux_${VERSION}_linux_amd64.tar.gz | awk '{ print $1 }') -envsubst '$PKGVER $PKGREL $SHA256SUM_AMD64 $SHA256SUM_ARM $SHA256SUM_ARM64' < .SRCINFO.template > $GITDIR/.SRCINFO -envsubst '$PKGVER $PKGREL $SHA256SUM_AMD64 $SHA256SUM_ARM $SHA256SUM_ARM64' < PKGBUILD.template > $GITDIR/PKGBUILD +envsubst '$VERSION $PKGVER $PKGREL $SHA256SUM_AMD64 $SHA256SUM_ARM $SHA256SUM_ARM64' < .SRCINFO.template > $GITDIR/.SRCINFO +envsubst '$VERSION $PKGVER $PKGREL $SHA256SUM_AMD64 $SHA256SUM_ARM $SHA256SUM_ARM64' < PKGBUILD.template > $GITDIR/PKGBUILD cd $GITDIR git config user.name "fluxcdbot" diff --git a/.github/aur/flux-go/.SRCINFO.template b/.github/aur/flux-go/.SRCINFO.template index 9f7aaf8b..d41a9e34 100644 --- a/.github/aur/flux-go/.SRCINFO.template +++ b/.github/aur/flux-go/.SRCINFO.template @@ -13,6 +13,6 @@ pkgbase = flux-go provides = flux-bin conflicts = flux-bin replaces = flux-cli - source = flux-go-${PKGVER}.tar.gz::https://github.com/fluxcd/flux2/archive/v${PKGVER}.tar.gz + source = flux-go-${PKGVER}.tar.gz::https://github.com/fluxcd/flux2/archive/v${VERSION}.tar.gz pkgname = flux-go diff --git a/.github/aur/flux-go/PKGBUILD.template b/.github/aur/flux-go/PKGBUILD.template index 225320da..146e3847 100644 --- a/.github/aur/flux-go/PKGBUILD.template +++ b/.github/aur/flux-go/PKGBUILD.template @@ -4,6 +4,8 @@ pkgname=flux-go pkgver=${PKGVER} pkgrel=${PKGREL} +_srcname=flux +_srcver=${VERSION} pkgdesc="Open and extensible continuous delivery solution for Kubernetes" url="https://fluxcd.io/" arch=("x86_64" "armv6h" "armv7h" "aarch64") @@ -16,26 +18,25 @@ makedepends=('go>=1.17', 'kustomize>=3.0') optdepends=('bash-completion: auto-completion for flux in Bash', 'zsh-completions: auto-completion for flux in ZSH') source=( - "${pkgname}-${pkgver}.tar.gz::https://github.com/fluxcd/flux2/archive/v${pkgver}.tar.gz" + "${pkgname}-${pkgver}.tar.gz::https://github.com/fluxcd/flux2/archive/v${_srcver}.tar.gz" ) sha256sums=( ${SHA256SUM} ) -_srcname=flux build() { - cd "flux2-${pkgver}" + cd "flux2-${_srcver}" export CGO_LDFLAGS="$LDFLAGS" export CGO_CFLAGS="$CFLAGS" export CGO_CXXFLAGS="$CXXFLAGS" export CGO_CPPFLAGS="$CPPFLAGS" export GOFLAGS="-buildmode=pie -trimpath -mod=readonly -modcacherw" make cmd/flux/.manifests.done - go build -ldflags "-linkmode=external -X main.VERSION=${pkgver}" -o ${_srcname} ./cmd/flux + go build -ldflags "-linkmode=external -X main.VERSION=${_srcver}" -o ${_srcname} ./cmd/flux } check() { - cd "flux2-${pkgver}" + cd "flux2-${_srcver}" case $CARCH in aarch64) export ENVTEST_ARCH=arm64 @@ -48,7 +49,7 @@ check() { } package() { - cd "flux2-${pkgver}" + cd "flux2-${_srcver}" install -Dm755 ${_srcname} "${pkgdir}/usr/bin/${_srcname}" install -Dm644 LICENSE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE" diff --git a/.github/aur/flux-go/publish.sh b/.github/aur/flux-go/publish.sh index bea591dd..fba19071 100755 --- a/.github/aur/flux-go/publish.sh +++ b/.github/aur/flux-go/publish.sh @@ -28,6 +28,7 @@ git clone aur@aur.archlinux.org:$PKGNAME $GITDIR 2>&1 CURRENT_PKGVER=$(cat $GITDIR/.SRCINFO | grep pkgver | awk '{ print $3 }') CURRENT_PKGREL=$(cat $GITDIR/.SRCINFO | grep pkgrel | awk '{ print $3 }') +# Transform pre-release to AUR compatible version format export PKGVER=${VERSION/-/} if [[ "${CURRENT_PKGVER}" == "${PKGVER}" ]]; then @@ -36,10 +37,10 @@ else export PKGREL=1 fi -export SHA256SUM=$(curl -sL https://github.com/fluxcd/flux2/archive/v$PKGVER.tar.gz | sha256sum | awk '{ print $1 }') +export SHA256SUM=$(curl -sL https://github.com/fluxcd/flux2/archive/v${VERSION}.tar.gz | sha256sum | awk '{ print $1 }') -envsubst '$PKGVER $PKGREL $SHA256SUM' < .SRCINFO.template > $GITDIR/.SRCINFO -envsubst '$PKGVER $PKGREL $SHA256SUM' < PKGBUILD.template > $GITDIR/PKGBUILD +envsubst '$VERSION $PKGVER $PKGREL $SHA256SUM' < .SRCINFO.template > $GITDIR/.SRCINFO +envsubst '$VERSION $PKGVER $PKGREL $SHA256SUM' < PKGBUILD.template > $GITDIR/PKGBUILD cd $GITDIR git config user.name "fluxcdbot" diff --git a/.github/aur/flux-scm/PKGBUILD.template b/.github/aur/flux-scm/PKGBUILD.template index 9593cf83..b4c264c0 100644 --- a/.github/aur/flux-scm/PKGBUILD.template +++ b/.github/aur/flux-scm/PKGBUILD.template @@ -4,6 +4,7 @@ pkgname=flux-scm pkgver=${PKGVER} pkgrel=${PKGREL} +_srcname=flux pkgdesc="Open and extensible continuous delivery solution for Kubernetes" url="https://fluxcd.io/" arch=("x86_64" "armv6h" "armv7h" "aarch64") @@ -18,7 +19,6 @@ source=( "git+https://github.com/fluxcd/flux2.git" ) md5sums=('SKIP') -_srcname=flux pkgver() { cd "flux2" diff --git a/.github/aur/flux-scm/publish.sh b/.github/aur/flux-scm/publish.sh index 0b743c29..ac704308 100755 --- a/.github/aur/flux-scm/publish.sh +++ b/.github/aur/flux-scm/publish.sh @@ -28,6 +28,7 @@ git clone aur@aur.archlinux.org:$PKGNAME $GITDIR 2>&1 CURRENT_PKGVER=$(cat $GITDIR/.SRCINFO | grep pkgver | awk '{ print $3 }') CURRENT_PKGREL=$(cat $GITDIR/.SRCINFO | grep pkgrel | awk '{ print $3 }') +# Transform pre-release to AUR compatible version format export PKGVER=${VERSION/-/} if [[ "${CURRENT_PKGVER}" == "${PKGVER}" ]]; then From 6700aac4a4b2265f7da5559b38ebd6c1b9498f7a Mon Sep 17 00:00:00 2001 From: Max Jonas Werner Date: Thu, 13 Apr 2023 12:40:10 +0200 Subject: [PATCH 484/818] better messaging for `pull artifact` command MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - When there's an error stat'ing the output directory flux now prints the error: Before: ``` ✗ invalid output path ./ro-dir/foo ``` After: ``` ✗ invalid output path "./ro-dir/foo": stat ./ro-dir/foo: permission denied ``` - When no output directory is provided flux now explicitly says so in the error: Before: ``` ✗ invalid output path ``` After: ``` ✗ output path cannot be empty ``` Signed-off-by: Max Jonas Werner --- cmd/flux/pull_artifact.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/flux/pull_artifact.go b/cmd/flux/pull_artifact.go index 29313f5e..105ed580 100644 --- a/cmd/flux/pull_artifact.go +++ b/cmd/flux/pull_artifact.go @@ -67,11 +67,11 @@ func pullArtifactCmdRun(cmd *cobra.Command, args []string) error { ociURL := args[0] if pullArtifactArgs.output == "" { - return fmt.Errorf("invalid output path %s", pullArtifactArgs.output) + return fmt.Errorf("output path cannot be empty") } if fs, err := os.Stat(pullArtifactArgs.output); err != nil || !fs.IsDir() { - return fmt.Errorf("invalid output path %s", pullArtifactArgs.output) + return fmt.Errorf("invalid output path %q: %w", pullArtifactArgs.output, err) } url, err := oci.ParseArtifactURL(ociURL) From 107894eccf883a9a09def1a8c4e32f482dd90535 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Apr 2023 01:10:39 +0000 Subject: [PATCH 485/818] build(deps): bump actions/checkout from 3.5.0 to 3.5.2 Bumps [actions/checkout](https://github.com/actions/checkout) from 3.5.0 to 3.5.2. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/8f4b7f84864484a7bf31766abe9204da3cbe65b3...8e5e7e5ab8b370d6c329ec480221332ada57f0ab) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/e2e-arm64.yaml | 2 +- .github/workflows/e2e-azure.yaml | 2 +- .github/workflows/e2e-bootstrap.yaml | 2 +- .github/workflows/e2e.yaml | 2 +- .github/workflows/release.yaml | 4 ++-- .github/workflows/scan.yaml | 6 +++--- .github/workflows/update.yaml | 2 +- 7 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/e2e-arm64.yaml b/.github/workflows/e2e-arm64.yaml index 843a5360..23bdf7da 100644 --- a/.github/workflows/e2e-arm64.yaml +++ b/.github/workflows/e2e-arm64.yaml @@ -20,7 +20,7 @@ jobs: KUBERNETES_VERSION: [ 1.24.7, 1.25.3, 1.26.0 ] steps: - name: Checkout - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3.5.0 + uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2 - name: Setup Go uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9 # v4.0.0 with: diff --git a/.github/workflows/e2e-azure.yaml b/.github/workflows/e2e-azure.yaml index f60ce309..67834111 100644 --- a/.github/workflows/e2e-azure.yaml +++ b/.github/workflows/e2e-azure.yaml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-22.04 steps: - name: Checkout - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3.5.0 + uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2 - name: Setup Go uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9 # v4.0.0 with: diff --git a/.github/workflows/e2e-bootstrap.yaml b/.github/workflows/e2e-bootstrap.yaml index a119b6a8..33a343f1 100644 --- a/.github/workflows/e2e-bootstrap.yaml +++ b/.github/workflows/e2e-bootstrap.yaml @@ -16,7 +16,7 @@ jobs: if: (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) && github.actor != 'dependabot[bot]' steps: - name: Checkout - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3.5.0 + uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2 - name: Setup Go uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9 # v4.0.0 with: diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index 89fc92fa..7f05ed4f 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -20,7 +20,7 @@ jobs: - 5000:5000 steps: - name: Checkout - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3.5.0 + uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2 - name: Setup Go uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9 # v4.0.0 with: diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index b1f3baa9..06701755 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -16,7 +16,7 @@ jobs: packages: write # needed for ghcr access steps: - name: Checkout - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3.5.0 + uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2 - name: Unshallow run: git fetch --prune --unshallow - name: Setup Go @@ -89,7 +89,7 @@ jobs: id-token: write packages: write steps: - - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3.5.0 + - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2 - name: Setup Kustomize uses: fluxcd/pkg/actions/kustomize@main - name: Setup Flux CLI diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index 47bcb77c..976ea17d 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -17,7 +17,7 @@ jobs: runs-on: ubuntu-latest if: github.actor != 'dependabot[bot]' steps: - - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3.5.0 + - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2 - name: Run FOSSA scan and upload build data uses: fossa-contrib/fossa-action@6728dc6fe9a068c648d080c33829ffbe56565023 # v2.0.0 with: @@ -31,7 +31,7 @@ jobs: security-events: write if: (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) && github.actor != 'dependabot[bot]' steps: - - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3.5.0 + - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2 - name: Setup Kustomize uses: fluxcd/pkg/actions/kustomize@main - name: Setup Go @@ -64,7 +64,7 @@ jobs: if: github.actor != 'dependabot[bot]' steps: - name: Checkout repository - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3.5.0 + uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2 - name: Setup Go uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9 # v4.0.0 with: diff --git a/.github/workflows/update.yaml b/.github/workflows/update.yaml index ec63199d..8baf10a8 100644 --- a/.github/workflows/update.yaml +++ b/.github/workflows/update.yaml @@ -18,7 +18,7 @@ jobs: pull-requests: write steps: - name: Check out code - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3.5.0 + uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2 - name: Setup Go uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9 # v4.0.0 with: From ec6f341497b559e339a5f56638beaa5271093142 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Apr 2023 08:17:17 +0000 Subject: [PATCH 486/818] build(deps): bump github/codeql-action from 2.2.11 to 2.2.12 Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2.2.11 to 2.2.12. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/d186a2a36cc67bfa1b860e6170d37fb9634742c7...7df0ce34898d659f95c0c4a09eaa8d4e32ee64db) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/scan.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index 976ea17d..d3a6efaf 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -53,7 +53,7 @@ jobs: env: SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }} - name: Upload result to GitHub Code Scanning - uses: github/codeql-action/upload-sarif@d186a2a36cc67bfa1b860e6170d37fb9634742c7 # v2.2.11 + uses: github/codeql-action/upload-sarif@7df0ce34898d659f95c0c4a09eaa8d4e32ee64db # v2.2.12 with: sarif_file: snyk.sarif @@ -73,10 +73,10 @@ jobs: **/go.sum **/go.mod - name: Initialize CodeQL - uses: github/codeql-action/init@d186a2a36cc67bfa1b860e6170d37fb9634742c7 # v2.2.11 + uses: github/codeql-action/init@7df0ce34898d659f95c0c4a09eaa8d4e32ee64db # v2.2.12 with: languages: go - name: Autobuild - uses: github/codeql-action/autobuild@d186a2a36cc67bfa1b860e6170d37fb9634742c7 # v2.2.11 + uses: github/codeql-action/autobuild@7df0ce34898d659f95c0c4a09eaa8d4e32ee64db # v2.2.12 - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@d186a2a36cc67bfa1b860e6170d37fb9634742c7 # v2.2.11 + uses: github/codeql-action/analyze@7df0ce34898d659f95c0c4a09eaa8d4e32ee64db # v2.2.12 From 08859f15881b44a648180fff245176890cc5cafc Mon Sep 17 00:00:00 2001 From: Hey <18427051+Hey@users.noreply.github.com> Date: Thu, 20 Apr 2023 21:35:15 +0200 Subject: [PATCH 487/818] Outdated URL The location of this URL was moved Signed-off-by: Hey <18427051+Hey@users.noreply.github.com> --- manifests/monitoring/loki-stack/release.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifests/monitoring/loki-stack/release.yaml b/manifests/monitoring/loki-stack/release.yaml index fac56914..5389e808 100644 --- a/manifests/monitoring/loki-stack/release.yaml +++ b/manifests/monitoring/loki-stack/release.yaml @@ -15,7 +15,7 @@ spec: name: grafana-charts interval: 60m # https://github.com/grafana/helm-charts/blob/main/charts/loki-stack/values.yaml - # https://github.com/grafana/helm-charts/blob/main/charts/loki/values.yaml + # https://github.com/grafana/loki/blob/main/production/helm/loki/values.yaml values: grafana: enabled: false From f431f9858cebac6867126c2ece7ee19f95b3580a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Apr 2023 01:13:50 +0000 Subject: [PATCH 488/818] build(deps): bump github/codeql-action from 2.2.12 to 2.3.0 Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2.2.12 to 2.3.0. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/7df0ce34898d659f95c0c4a09eaa8d4e32ee64db...b2c19fb9a2a485599ccf4ed5d65527d94bc57226) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/scan.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index d3a6efaf..0bc76715 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -53,7 +53,7 @@ jobs: env: SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }} - name: Upload result to GitHub Code Scanning - uses: github/codeql-action/upload-sarif@7df0ce34898d659f95c0c4a09eaa8d4e32ee64db # v2.2.12 + uses: github/codeql-action/upload-sarif@b2c19fb9a2a485599ccf4ed5d65527d94bc57226 # v2.3.0 with: sarif_file: snyk.sarif @@ -73,10 +73,10 @@ jobs: **/go.sum **/go.mod - name: Initialize CodeQL - uses: github/codeql-action/init@7df0ce34898d659f95c0c4a09eaa8d4e32ee64db # v2.2.12 + uses: github/codeql-action/init@b2c19fb9a2a485599ccf4ed5d65527d94bc57226 # v2.3.0 with: languages: go - name: Autobuild - uses: github/codeql-action/autobuild@7df0ce34898d659f95c0c4a09eaa8d4e32ee64db # v2.2.12 + uses: github/codeql-action/autobuild@b2c19fb9a2a485599ccf4ed5d65527d94bc57226 # v2.3.0 - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@7df0ce34898d659f95c0c4a09eaa8d4e32ee64db # v2.2.12 + uses: github/codeql-action/analyze@b2c19fb9a2a485599ccf4ed5d65527d94bc57226 # v2.3.0 From c6a61c1b92238fcf16ece1dc397418364a238a45 Mon Sep 17 00:00:00 2001 From: Max Jonas Werner Date: Thu, 20 Apr 2023 09:33:42 +0200 Subject: [PATCH 489/818] fix: make bootstrap work with Bitbucket Server again Bumping GGP to include fluxcd/go-git-provider#210 and fix the bootstrap process with Bitbucket Server. closes #3808 Signed-off-by: Max Jonas Werner --- go.mod | 4 ++-- go.sum | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index c0e4cd27..07947d71 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,7 @@ require ( github.com/ProtonMail/go-crypto v0.0.0-20230331115716-d34776aa93ec github.com/cyphar/filepath-securejoin v0.2.3 github.com/distribution/distribution/v3 v3.0.0-20230327091844-0c958010ace2 - github.com/fluxcd/go-git-providers v0.15.0 + github.com/fluxcd/go-git-providers v0.15.2 github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 github.com/fluxcd/helm-controller/api v0.32.1 github.com/fluxcd/image-automation-controller/api v0.32.0 @@ -215,7 +215,7 @@ require ( k8s.io/component-base v0.26.3 // indirect k8s.io/klog/v2 v2.90.1 // indirect k8s.io/kube-openapi v0.0.0-20230109183929-3758b55a6596 // indirect - k8s.io/utils v0.0.0-20230313181309-38a27ef9d749 // indirect + k8s.io/utils v0.0.0-20230406110748-d93618cff8a2 // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect ) diff --git a/go.sum b/go.sum index c3894065..33fd794e 100644 --- a/go.sum +++ b/go.sum @@ -195,8 +195,8 @@ github.com/felixge/httpsnoop v1.0.3 h1:s/nj+GCswXYzN5v2DpNMuMQYe+0DDwt5WVCU6CWBd github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0= github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= -github.com/fluxcd/go-git-providers v0.15.0 h1:WuBw+CcmXi7UhSf8mFNB6tbGelS0kVlgI9wtlWjzimk= -github.com/fluxcd/go-git-providers v0.15.0/go.mod h1:SgShGfc2rA5Gi7N65CBjMOIolarDZzZCMzEHOoY3P0I= +github.com/fluxcd/go-git-providers v0.15.2 h1:LgnzRZVGtDkhn4/oqrg50iptfP92iECTFqRjOqsVaZA= +github.com/fluxcd/go-git-providers v0.15.2/go.mod h1:BIMw08CpDDPOysXn/6MiG4LZpJCK/bUhUtyzNG0LWDk= github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 h1:Gm5sGGk+/Wq6RhX4xpCZ2IqjDp5XkjlhENaAuAlpdKc= github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4/go.mod h1:raWgfUV7lDQVXp4QXUaeNNJkRVKz97UQuF+0kdY7Vmo= github.com/fluxcd/helm-controller/api v0.32.1 h1:b2q0V+cXnqvW24Zy4zY+5Jfn1D3sqBIBTNhbqsD+r9Q= @@ -1042,8 +1042,8 @@ k8s.io/kube-openapi v0.0.0-20230109183929-3758b55a6596 h1:8cNCQs+WqqnSpZ7y0LMQPK k8s.io/kube-openapi v0.0.0-20230109183929-3758b55a6596/go.mod h1:/BYxry62FuDzmI+i9B+X2pqfySRmSOW2ARmj5Zbqhj0= k8s.io/kubectl v0.26.3 h1:bZ5SgFyeEXw6XTc1Qji0iNdtqAC76lmeIIQULg2wNXM= k8s.io/kubectl v0.26.3/go.mod h1:02+gv7Qn4dupzN3fi/9OvqqdW+uG/4Zi56vc4Zmsp1g= -k8s.io/utils v0.0.0-20230313181309-38a27ef9d749 h1:xMMXJlJbsU8w3V5N2FLDQ8YgU8s1EoULdbQBcAeNJkY= -k8s.io/utils v0.0.0-20230313181309-38a27ef9d749/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +k8s.io/utils v0.0.0-20230406110748-d93618cff8a2 h1:qY1Ad8PODbnymg2pRbkyMT/ylpTrCM8P2RJ0yroCyIk= +k8s.io/utils v0.0.0-20230406110748-d93618cff8a2/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= From 2538b6921f3818dfe996711be1bf0ea51afa8e3b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 May 2023 01:09:35 +0000 Subject: [PATCH 490/818] build(deps): bump github/codeql-action from 2.3.0 to 2.3.2 Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2.3.0 to 2.3.2. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/b2c19fb9a2a485599ccf4ed5d65527d94bc57226...f3feb00acb00f31a6f60280e6ace9ca31d91c76a) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/scan.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index 0bc76715..4520b538 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -53,7 +53,7 @@ jobs: env: SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }} - name: Upload result to GitHub Code Scanning - uses: github/codeql-action/upload-sarif@b2c19fb9a2a485599ccf4ed5d65527d94bc57226 # v2.3.0 + uses: github/codeql-action/upload-sarif@f3feb00acb00f31a6f60280e6ace9ca31d91c76a # v2.3.2 with: sarif_file: snyk.sarif @@ -73,10 +73,10 @@ jobs: **/go.sum **/go.mod - name: Initialize CodeQL - uses: github/codeql-action/init@b2c19fb9a2a485599ccf4ed5d65527d94bc57226 # v2.3.0 + uses: github/codeql-action/init@f3feb00acb00f31a6f60280e6ace9ca31d91c76a # v2.3.2 with: languages: go - name: Autobuild - uses: github/codeql-action/autobuild@b2c19fb9a2a485599ccf4ed5d65527d94bc57226 # v2.3.0 + uses: github/codeql-action/autobuild@f3feb00acb00f31a6f60280e6ace9ca31d91c76a # v2.3.2 - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@b2c19fb9a2a485599ccf4ed5d65527d94bc57226 # v2.3.0 + uses: github/codeql-action/analyze@f3feb00acb00f31a6f60280e6ace9ca31d91c76a # v2.3.2 From 86e542e524f489d47a058b3815b3b43597257de7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 May 2023 08:07:56 +0000 Subject: [PATCH 491/818] build(deps): bump sigstore/cosign-installer from 3.0.2 to 3.0.3 Bumps [sigstore/cosign-installer](https://github.com/sigstore/cosign-installer) from 3.0.2 to 3.0.3. - [Release notes](https://github.com/sigstore/cosign-installer/releases) - [Commits](https://github.com/sigstore/cosign-installer/compare/9e9de2292db7abb3f51b7f4808d98f0d347a8919...204a51a57a74d190b284a0ce69b44bc37201f343) --- updated-dependencies: - dependency-name: sigstore/cosign-installer dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/release.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 06701755..bcc7d3a1 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -32,7 +32,7 @@ jobs: - name: Setup Syft uses: anchore/sbom-action/download-syft@422cb34a0f8b599678c41b21163ea6088edb2624 # v0.14.1 - name: Setup Cosign - uses: sigstore/cosign-installer@9e9de2292db7abb3f51b7f4808d98f0d347a8919 # v3.0.2 + uses: sigstore/cosign-installer@204a51a57a74d190b284a0ce69b44bc37201f343 # v3.0.3 - name: Setup Kustomize uses: fluxcd/pkg/actions/kustomize@main - name: Login to GitHub Container Registry @@ -134,7 +134,7 @@ jobs: --path="./flux-system" \ --source=${{ github.repositoryUrl }} \ --revision="${{ github.ref_name }}@sha1:${{ github.sha }}" - - uses: sigstore/cosign-installer@9e9de2292db7abb3f51b7f4808d98f0d347a8919 # v3.0.2 + - uses: sigstore/cosign-installer@204a51a57a74d190b284a0ce69b44bc37201f343 # v3.0.3 - name: Sign manifests env: COSIGN_EXPERIMENTAL: 1 From 3edfff49a25fe28739f88a3fe0424cee28f8339d Mon Sep 17 00:00:00 2001 From: cui fliter Date: Tue, 25 Apr 2023 15:04:09 +0800 Subject: [PATCH 492/818] fix some comments Signed-off-by: cui fliter --- cmd/flux/bootstrap_git.go | 2 +- internal/build/build.go | 2 +- pkg/manifestgen/manifest.go | 2 +- rfcs/0005-artifact-revision-and-digest/README.md | 4 ++-- rfcs/RFC-0000/README.md | 2 +- tests/azure/util_test.go | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/cmd/flux/bootstrap_git.go b/cmd/flux/bootstrap_git.go index 4a6234ca..bd9dc80a 100644 --- a/cmd/flux/bootstrap_git.go +++ b/cmd/flux/bootstrap_git.go @@ -134,7 +134,7 @@ func bootstrapGitCmdRun(cmd *cobra.Command, args []string) error { } } if repositoryURL.Scheme == string(git.HTTPS) && !bootstrapArgs.tokenAuth { - return fmt.Errorf("--token-auth=true must be specified for using a HTTPS AWS CodeCommit url") + return fmt.Errorf("--token-auth=true must be specified for using an HTTPS AWS CodeCommit url") } } diff --git a/internal/build/build.go b/internal/build/build.go index 5f6e21e5..98f0f683 100644 --- a/internal/build/build.go +++ b/internal/build/build.go @@ -419,7 +419,7 @@ func maskSopsData(res *resource.Resource) error { res.PipeE(yaml.FieldClearer{Name: "sops"}) secretType, err := res.GetFieldValue(typeField) - // If the intented type is Opaque, then it can be omitted from the manifest, since it's the default + // If the intended type is Opaque, then it can be omitted from the manifest, since it's the default // Ref: https://kubernetes.io/docs/concepts/configuration/secret/#opaque-secrets if errors.As(err, &yaml.NoFieldError{}) { secretType = "Opaque" diff --git a/pkg/manifestgen/manifest.go b/pkg/manifestgen/manifest.go index db385f69..86df69d0 100644 --- a/pkg/manifestgen/manifest.go +++ b/pkg/manifestgen/manifest.go @@ -34,7 +34,7 @@ type Manifest struct { Content string } -// WriteFile writes the YAML content to a file inside the the root path. +// WriteFile writes the YAML content to a file inside the root path. // If the file does not exist, WriteFile creates it with permissions perm, // otherwise WriteFile overwrites the file, without changing permissions. func (m *Manifest) WriteFile(rootDir string) (string, error) { diff --git a/rfcs/0005-artifact-revision-and-digest/README.md b/rfcs/0005-artifact-revision-and-digest/README.md index e8107281..32b4c466 100644 --- a/rfcs/0005-artifact-revision-and-digest/README.md +++ b/rfcs/0005-artifact-revision-and-digest/README.md @@ -284,7 +284,7 @@ algorithm. #### Backwards compatibility -To allow backwards compatability in the notification-controller, Flux CLI and +To allow backwards compatibility in the notification-controller, Flux CLI and other applicable components, the `Revision` new field value format could be detected by the presence of the `@` or `:` characters. Falling back to their current behaviour if not present, phasing out the old format in a future @@ -344,7 +344,7 @@ future release. The `Digest` field MUST be used instead. #### Backwards compatibility -To allow backwards compatability, the source-controller could continue +To allow backwards compatibility, the source-controller could continue to advertise the checksum part of a `Digest` in the `Checksum` field until the field is removed. diff --git a/rfcs/RFC-0000/README.md b/rfcs/RFC-0000/README.md index b935b064..309c7dd0 100644 --- a/rfcs/RFC-0000/README.md +++ b/rfcs/RFC-0000/README.md @@ -51,7 +51,7 @@ you're proposing, but should not include things like API designs or implementation. If the RFC goal is to document best practices, -then this section can be replaced with the the actual documentation. +then this section can be replaced with the actual documentation. --> ### User Stories diff --git a/tests/azure/util_test.go b/tests/azure/util_test.go index 3ad9a9b7..4af53f39 100644 --- a/tests/azure/util_test.go +++ b/tests/azure/util_test.go @@ -182,7 +182,7 @@ patchesStrategicMerge: files["clusters/e2e/flux-system/gotk-sync.yaml"] = strings.NewReader("") err = commitAndPushAll(repo, files, defaultBranch) if err != nil { - return fmt.Errorf("error commiting and pushing manifests: %w", err) + return fmt.Errorf("error committing and pushing manifests: %w", err) } bootstrapCmd := fmt.Sprintf("flux bootstrap git --url=%s --password=%s --kubeconfig=%s"+ From 56d265ae11911d06b37b05a06a939b86fe8eb1ed Mon Sep 17 00:00:00 2001 From: Matheus Pimenta Date: Tue, 25 Apr 2023 15:20:21 +0100 Subject: [PATCH 493/818] Add OCI provider option to create Helm source command Signed-off-by: Matheus Pimenta --- cmd/flux/create_source_helm.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cmd/flux/create_source_helm.go b/cmd/flux/create_source_helm.go index e55f847a..81746082 100644 --- a/cmd/flux/create_source_helm.go +++ b/cmd/flux/create_source_helm.go @@ -83,6 +83,7 @@ type sourceHelmFlags struct { keyFile string caFile string secretRef string + ociProvider string passCredentials bool } @@ -96,6 +97,7 @@ func init() { createSourceHelmCmd.Flags().StringVar(&sourceHelmArgs.keyFile, "key-file", "", "TLS authentication key file path") createSourceHelmCmd.Flags().StringVar(&sourceHelmArgs.caFile, "ca-file", "", "TLS authentication CA file path") createSourceHelmCmd.Flags().StringVarP(&sourceHelmArgs.secretRef, "secret-ref", "", "", "the name of an existing secret containing TLS, basic auth or docker-config credentials") + createSourceHelmCmd.Flags().StringVar(&sourceHelmArgs.ociProvider, "oci-provider", "", "OCI provider for authentication") createSourceHelmCmd.Flags().BoolVarP(&sourceHelmArgs.passCredentials, "pass-credentials", "", false, "pass credentials to all domains") createSourceCmd.AddCommand(createSourceHelmCmd) @@ -143,6 +145,7 @@ func createSourceHelmCmdRun(cmd *cobra.Command, args []string) error { } if url.Scheme == sourcev1.HelmRepositoryTypeOCI { helmRepository.Spec.Type = sourcev1.HelmRepositoryTypeOCI + helmRepository.Spec.Provider = sourceHelmArgs.ociProvider } if createSourceArgs.fetchTimeout > 0 { From cd8136278140eb81d49c61b592369509eeccf148 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 12 Apr 2023 15:44:07 +0300 Subject: [PATCH 494/818] Run conformance tests for Kubernetes 1.27 Signed-off-by: Stefan Prodan --- .github/workflows/e2e-arm64.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/e2e-arm64.yaml b/.github/workflows/e2e-arm64.yaml index 23bdf7da..adaddb39 100644 --- a/.github/workflows/e2e-arm64.yaml +++ b/.github/workflows/e2e-arm64.yaml @@ -3,7 +3,7 @@ name: e2e-arm64 on: workflow_dispatch: push: - branches: [ main, update-components, release-* ] + branches: [ main, update-components, e2e-*, release-* ] permissions: contents: read @@ -17,7 +17,7 @@ jobs: matrix: # Keep this list up-to-date with https://endoflife.date/kubernetes # Check which versions are available on DockerHub with 'crane ls kindest/node' - KUBERNETES_VERSION: [ 1.24.7, 1.25.3, 1.26.0 ] + KUBERNETES_VERSION: [ 1.25.8, 1.26.3, 1.27.1 ] steps: - name: Checkout uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2 From a122ceb09b8873eeaeec771d1ba1d56172f5734e Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Sun, 16 Apr 2023 11:57:27 +0300 Subject: [PATCH 495/818] Set priority class to critical Flux components Mark source-controller, kustomize-controller and helm-controller as system-cluster-critical. This will reduce the chances of Flux controllers being evicted before other non-critical workloads. Signed-off-by: Stefan Prodan --- manifests/bases/helm-controller/patch.yaml | 3 +++ manifests/bases/kustomize-controller/patch.yaml | 3 +++ manifests/bases/source-controller/patch.yaml | 3 +++ 3 files changed, 9 insertions(+) diff --git a/manifests/bases/helm-controller/patch.yaml b/manifests/bases/helm-controller/patch.yaml index fe49320a..79773699 100644 --- a/manifests/bases/helm-controller/patch.yaml +++ b/manifests/bases/helm-controller/patch.yaml @@ -4,3 +4,6 @@ - op: add path: /spec/template/spec/serviceAccountName value: helm-controller +- op: add + path: /spec/template/spec/priorityClassName + value: system-cluster-critical diff --git a/manifests/bases/kustomize-controller/patch.yaml b/manifests/bases/kustomize-controller/patch.yaml index aa588b2b..6ce23139 100644 --- a/manifests/bases/kustomize-controller/patch.yaml +++ b/manifests/bases/kustomize-controller/patch.yaml @@ -4,3 +4,6 @@ - op: add path: /spec/template/spec/serviceAccountName value: kustomize-controller +- op: add + path: /spec/template/spec/priorityClassName + value: system-cluster-critical diff --git a/manifests/bases/source-controller/patch.yaml b/manifests/bases/source-controller/patch.yaml index 911d1865..e55604ee 100644 --- a/manifests/bases/source-controller/patch.yaml +++ b/manifests/bases/source-controller/patch.yaml @@ -4,3 +4,6 @@ - op: add path: /spec/template/spec/serviceAccountName value: source-controller +- op: add + path: /spec/template/spec/priorityClassName + value: system-cluster-critical From 961c237d33cd632fa9a61008dd515986d12a7acd Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Tue, 2 May 2023 15:57:21 +0000 Subject: [PATCH 496/818] Update toolkit components - helm-controller to v0.32.2 https://github.com/fluxcd/helm-controller/blob/v0.32.2/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 2 +- go.sum | 4 ++-- manifests/bases/helm-controller/kustomization.yaml | 4 ++-- manifests/crds/kustomization.yaml | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index 07947d71..435c612d 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/distribution/distribution/v3 v3.0.0-20230327091844-0c958010ace2 github.com/fluxcd/go-git-providers v0.15.2 github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 - github.com/fluxcd/helm-controller/api v0.32.1 + github.com/fluxcd/helm-controller/api v0.32.2 github.com/fluxcd/image-automation-controller/api v0.32.0 github.com/fluxcd/image-reflector-controller/api v0.27.0 github.com/fluxcd/kustomize-controller/api v1.0.0-rc.1 diff --git a/go.sum b/go.sum index 33fd794e..a6679041 100644 --- a/go.sum +++ b/go.sum @@ -199,8 +199,8 @@ github.com/fluxcd/go-git-providers v0.15.2 h1:LgnzRZVGtDkhn4/oqrg50iptfP92iECTFq github.com/fluxcd/go-git-providers v0.15.2/go.mod h1:BIMw08CpDDPOysXn/6MiG4LZpJCK/bUhUtyzNG0LWDk= github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 h1:Gm5sGGk+/Wq6RhX4xpCZ2IqjDp5XkjlhENaAuAlpdKc= github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4/go.mod h1:raWgfUV7lDQVXp4QXUaeNNJkRVKz97UQuF+0kdY7Vmo= -github.com/fluxcd/helm-controller/api v0.32.1 h1:b2q0V+cXnqvW24Zy4zY+5Jfn1D3sqBIBTNhbqsD+r9Q= -github.com/fluxcd/helm-controller/api v0.32.1/go.mod h1:xzQgNoaPOg77zFUqvnaX0Fn3lPA3iGDLoz8q4wiEyLA= +github.com/fluxcd/helm-controller/api v0.32.2 h1:ETkZmMEHY/qu6a9AjP6en35WrpN7NnVmhOe7IvOB7jE= +github.com/fluxcd/helm-controller/api v0.32.2/go.mod h1:xzQgNoaPOg77zFUqvnaX0Fn3lPA3iGDLoz8q4wiEyLA= github.com/fluxcd/image-automation-controller/api v0.32.0 h1:ABRLN+a8jHuOAETf1o1ohVzxxjYhOXxtJglD5YSMuUM= github.com/fluxcd/image-automation-controller/api v0.32.0/go.mod h1:DHb9GaPZz5HCgBL3u3PC4XNGcO3rUroE6ayx1PAa0Gs= github.com/fluxcd/image-reflector-controller/api v0.27.0 h1:1wceNPwx6dCPTmeGgSXLRbhRjEiyWeRSb+KMCcSJ0sw= diff --git a/manifests/bases/helm-controller/kustomization.yaml b/manifests/bases/helm-controller/kustomization.yaml index 78ef2f29..2a4ccb92 100644 --- a/manifests/bases/helm-controller/kustomization.yaml +++ b/manifests/bases/helm-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/helm-controller/releases/download/v0.32.1/helm-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.32.1/helm-controller.deployment.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.32.2/helm-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.32.2/helm-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index b5539448..2c5016ae 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -3,7 +3,7 @@ kind: Kustomization resources: - https://github.com/fluxcd/source-controller/releases/download/v1.0.0-rc.1/source-controller.crds.yaml - https://github.com/fluxcd/kustomize-controller/releases/download/v1.0.0-rc.1/kustomize-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.32.1/helm-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.32.2/helm-controller.crds.yaml - https://github.com/fluxcd/notification-controller/releases/download/v1.0.0-rc.1/notification-controller.crds.yaml - https://github.com/fluxcd/image-reflector-controller/releases/download/v0.27.0/image-reflector-controller.crds.yaml - https://github.com/fluxcd/image-automation-controller/releases/download/v0.32.0/image-automation-controller.crds.yaml From 88b5e3f71bd2914d164ce010db8137391a7951d8 Mon Sep 17 00:00:00 2001 From: Max Jonas Werner Date: Thu, 4 May 2023 11:43:50 +0200 Subject: [PATCH 497/818] bump ggp to latest version Signed-off-by: Max Jonas Werner --- go.mod | 20 +++++++++---------- go.sum | 63 ++++++++++++++++++++++++++-------------------------------- 2 files changed, 38 insertions(+), 45 deletions(-) diff --git a/go.mod b/go.mod index 435c612d..78527cdc 100644 --- a/go.mod +++ b/go.mod @@ -4,10 +4,10 @@ go 1.18 require ( github.com/Masterminds/semver/v3 v3.2.0 - github.com/ProtonMail/go-crypto v0.0.0-20230331115716-d34776aa93ec + github.com/ProtonMail/go-crypto v0.0.0-20230426101702-58e86b294756 github.com/cyphar/filepath-securejoin v0.2.3 github.com/distribution/distribution/v3 v3.0.0-20230327091844-0c958010ace2 - github.com/fluxcd/go-git-providers v0.15.2 + github.com/fluxcd/go-git-providers v0.15.3 github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 github.com/fluxcd/helm-controller/api v0.32.2 github.com/fluxcd/image-automation-controller/api v0.32.0 @@ -41,7 +41,7 @@ require ( github.com/spf13/cobra v1.7.0 github.com/spf13/pflag v1.0.5 github.com/theckman/yacspin v0.13.12 - golang.org/x/crypto v0.7.0 + golang.org/x/crypto v0.8.0 golang.org/x/term v0.7.0 k8s.io/api v0.26.3 k8s.io/apiextensions-apiserver v0.26.3 @@ -69,7 +69,7 @@ require ( github.com/MakeNowJust/heredoc v1.0.0 // indirect github.com/Microsoft/go-winio v0.6.0 // indirect github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d // indirect - github.com/acomagu/bufpipe v1.0.3 // indirect + github.com/acomagu/bufpipe v1.0.4 // indirect github.com/aws/aws-sdk-go-v2 v1.17.7 // indirect github.com/aws/aws-sdk-go-v2/config v1.18.19 // indirect github.com/aws/aws-sdk-go-v2/credentials v1.13.18 // indirect @@ -117,7 +117,7 @@ require ( github.com/go-errors/errors v1.4.2 // indirect github.com/go-git/gcfg v1.5.0 // indirect github.com/go-git/go-billy/v5 v5.4.1 // indirect - github.com/go-git/go-git/v5 v5.4.2 // indirect + github.com/go-git/go-git/v5 v5.6.1 // indirect github.com/go-logr/logr v1.2.4 // indirect github.com/go-openapi/jsonpointer v0.19.6 // indirect github.com/go-openapi/jsonreference v0.20.1 // indirect @@ -175,7 +175,7 @@ require ( github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.1.0-rc2 // indirect github.com/peterbourgon/diskv v2.0.1+incompatible // indirect - github.com/pjbgf/sha1cd v0.2.3 // indirect + github.com/pjbgf/sha1cd v0.3.0 // indirect github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/prometheus/client_golang v1.14.0 // indirect @@ -190,7 +190,7 @@ require ( github.com/texttheater/golang-levenshtein v1.0.1 // indirect github.com/vbatts/tar-split v0.11.2 // indirect github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74 // indirect - github.com/xanzy/go-gitlab v0.81.0 // indirect + github.com/xanzy/go-gitlab v0.83.0 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect github.com/xlab/treeprint v1.1.0 // indirect github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43 // indirect @@ -198,11 +198,11 @@ require ( github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f // indirect go.starlark.net v0.0.0-20221028183056-acb66ad56dd2 // indirect golang.org/x/mod v0.9.0 // indirect - golang.org/x/net v0.8.0 // indirect - golang.org/x/oauth2 v0.6.0 // indirect + golang.org/x/net v0.9.0 // indirect + golang.org/x/oauth2 v0.7.0 // indirect golang.org/x/sync v0.1.0 // indirect golang.org/x/sys v0.7.0 // indirect - golang.org/x/text v0.8.0 // indirect + golang.org/x/text v0.9.0 // indirect golang.org/x/time v0.3.0 // indirect golang.org/x/tools v0.7.0 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect diff --git a/go.sum b/go.sum index a6679041..0193d002 100644 --- a/go.sum +++ b/go.sum @@ -50,26 +50,24 @@ github.com/MakeNowJust/heredoc v1.0.0 h1:cXCdzVdstXyiTqTvfqk9SDHpKNjxuom+DOlyEeQ github.com/MakeNowJust/heredoc v1.0.0/go.mod h1:mG5amYoWBHf8vpLOuehzbGGw0EHxpZZ6lCpQ4fNJ8LE= github.com/Masterminds/semver/v3 v3.2.0 h1:3MEsd0SM6jqZojhjLWWeBY+Kcjy9i6MQAeY7YgDP83g= github.com/Masterminds/semver/v3 v3.2.0/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= -github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= -github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4/go.mod h1:UBYPn8k0D56RtnR8RFQMjmh4KrZzWJ5o7Z9SYjossQ8= -github.com/ProtonMail/go-crypto v0.0.0-20230331115716-d34776aa93ec h1:eQusauqzE1cAFR5hGnwkuSmFxKoy3+j9/cVaDeYfjjs= -github.com/ProtonMail/go-crypto v0.0.0-20230331115716-d34776aa93ec/go.mod h1:8TI4H3IbrackdNgv+92dI+rhpCaLqM0IfpgCgenFvRE= +github.com/ProtonMail/go-crypto v0.0.0-20230217124315-7d5c6f04bbb8/go.mod h1:I0gYDMZ6Z5GRU7l58bNFSkPTFN6Yl12dsUlAZ8xy98g= +github.com/ProtonMail/go-crypto v0.0.0-20230426101702-58e86b294756 h1:L6S7kR7SlhQKplIBpkra3s6yhcZV51lhRnXmYc4HohI= +github.com/ProtonMail/go-crypto v0.0.0-20230426101702-58e86b294756/go.mod h1:8TI4H3IbrackdNgv+92dI+rhpCaLqM0IfpgCgenFvRE= github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d h1:UrqY+r/OJnIp5u0s1SbQ8dVfLCZJsnvazdBP5hS4iRs= github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ= -github.com/acomagu/bufpipe v1.0.3 h1:fxAGrHZTgQ9w5QqVItgzwj235/uYZYgbXitB+dLupOk= github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= +github.com/acomagu/bufpipe v1.0.4 h1:e3H4WUzM3npvo5uv95QuJM3cQspFNtFBzvJ2oNjKIDQ= +github.com/acomagu/bufpipe v1.0.4/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= @@ -172,7 +170,6 @@ github.com/drone/envsubst v1.0.3/go.mod h1:N2jZmlMufstn1KEqvbHjw40h1KyTmnVzHcSc9 github.com/elazarl/goproxy v0.0.0-20221015165544-a0805db90819 h1:RIB4cRk+lBqKK3Oy0r2gRX4ui7tuhiZq2SuTtTCi0/0= github.com/emicklei/go-restful/v3 v3.10.0 h1:X4gma4HM7hFm6WMeAsTfqA0GOfdNoCzBIkHGoRLGXuM= github.com/emicklei/go-restful/v3 v3.10.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= -github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= 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= @@ -195,8 +192,8 @@ github.com/felixge/httpsnoop v1.0.3 h1:s/nj+GCswXYzN5v2DpNMuMQYe+0DDwt5WVCU6CWBd github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0= github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= -github.com/fluxcd/go-git-providers v0.15.2 h1:LgnzRZVGtDkhn4/oqrg50iptfP92iECTFqRjOqsVaZA= -github.com/fluxcd/go-git-providers v0.15.2/go.mod h1:BIMw08CpDDPOysXn/6MiG4LZpJCK/bUhUtyzNG0LWDk= +github.com/fluxcd/go-git-providers v0.15.3 h1:vJ1J+WxZYxrOrWp2ojpixjERxmN6XY9C/AxQbuVaIsQ= +github.com/fluxcd/go-git-providers v0.15.3/go.mod h1:6fkRPzq0EQHQKO0/6CmfoEr6YHYwBKzDbxiEUjaxzl4= github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 h1:Gm5sGGk+/Wq6RhX4xpCZ2IqjDp5XkjlhENaAuAlpdKc= github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4/go.mod h1:raWgfUV7lDQVXp4QXUaeNNJkRVKz97UQuF+0kdY7Vmo= github.com/fluxcd/helm-controller/api v0.32.2 h1:ETkZmMEHY/qu6a9AjP6en35WrpN7NnVmhOe7IvOB7jE= @@ -242,26 +239,22 @@ github.com/fluxcd/pkg/version v0.2.1 h1:RRH7+6qiWHdTvRNwpoBmilnubJ2C4FZYGgy5wTDV github.com/fluxcd/pkg/version v0.2.1/go.mod h1:UmUYHDz4BxHQMesMUx3gYVrT2Wf66H49JpTg/PW+/OY= github.com/fluxcd/source-controller/api v1.0.0-rc.1 h1:MZaP5utClMG95Aw/AVu1l05WEfmpEw/RIlCLnkCQl14= github.com/fluxcd/source-controller/api v1.0.0-rc.1/go.mod h1:CvGNdS8g/MqwpERUK6aJp4lndsrm+JBzGpoyyZ4u0c8= -github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY= github.com/gliderlabs/ssh v0.3.5/go.mod h1:8XB4KraRrX39qHhT6yxPsHedjA08I/uBVwj4xC+/+z4= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4= github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= -github.com/go-git/go-billy/v5 v5.2.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= github.com/go-git/go-billy/v5 v5.3.1/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= github.com/go-git/go-billy/v5 v5.4.1 h1:Uwp5tDRkPr+l/TnbHOQzp+tmJfLceOlbVucgpTz8ix4= github.com/go-git/go-billy/v5 v5.4.1/go.mod h1:vjbugF6Fz7JIflbVpl1hJsGjSHNltrSw45YK/ukIvQg= -github.com/go-git/go-git-fixtures/v4 v4.2.1/go.mod h1:K8zd3kDUAykwTdDCr+I0per6Y6vMiRR/nnVTBtavnB0= github.com/go-git/go-git-fixtures/v4 v4.3.1 h1:y5z6dd3qi8Hl+stezc8p3JxDkoTRqMAlKnXHuzrfjTQ= github.com/go-git/go-git-fixtures/v4 v4.3.1/go.mod h1:8LHG1a3SRW71ettAD/jW13h8c6AqjVSeL11RAdgaqpo= -github.com/go-git/go-git/v5 v5.4.2 h1:BXyZu9t0VkbiHtqrsvdq39UDhGJTl1h55VW6CSC4aY4= -github.com/go-git/go-git/v5 v5.4.2/go.mod h1:gQ1kArt6d+n+BGd+/B/I74HwRTLhth2+zti4ihgckDc= +github.com/go-git/go-git/v5 v5.6.1 h1:q4ZRqQl4pR/ZJHc1L5CFjGA1a10u76aV1iC+nh+bHsk= +github.com/go-git/go-git/v5 v5.6.1/go.mod h1:mvyoL6Unz0PiTQrGQfSfiLFhBH1c1e84ylC2MDs4ee8= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -408,7 +401,6 @@ github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uG github.com/homeport/dyff v1.5.6 h1:6PNzGM0azeYXs401RZSLyIUS4sIX+YY3WBEZ3bnzkiE= github.com/homeport/dyff v1.5.6/go.mod h1:cMmplDz/DeUWPB4T/sD9GDpuTnMD2nk3rjn2f+5roEU= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk= github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= @@ -434,7 +426,6 @@ github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1 github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= -github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= @@ -490,6 +481,7 @@ github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTS github.com/mitchellh/hashstructure v1.1.0 h1:P6P1hdjqAAknpY/M1CGipelZgp+4y9ja9kmUZPXP+H0= github.com/mitchellh/hashstructure v1.1.0/go.mod h1:xUDAozZz0Wmdiufv0uyhnHkUTN6/6d8ulp4AwfLKrmA= github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f h1:2+myh5ml7lgEU/51gbeLHfKGNfgEQQIWrlbdaOsidbQ= +github.com/mmcloughlin/avo v0.5.0/go.mod h1:ChHFdoV7ql95Wi7vuq2YT1bwCJqiWdZrQ1im3VujLYM= github.com/moby/spdystream v0.2.0 h1:cjW1zVyyoiM0T7b6UoySUFqzXMoqRckQtXwGPiBhOM8= github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= github.com/moby/term v0.0.0-20221105221325-4eb28fa6025c h1:RC8WMpjonrBfyAh6VN/POIPtYD5tRAq0qMqCRjQNK+g= @@ -524,8 +516,9 @@ github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+v github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= -github.com/pjbgf/sha1cd v0.2.3 h1:uKQP/7QOzNtKYH7UTohZLcjF5/55EnTw0jO/Ru4jZwI= github.com/pjbgf/sha1cd v0.2.3/go.mod h1:HOK9QrgzdHpbc2Kzip0Q1yi3M2MFGPADtR6HjG65m5M= +github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4= +github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI= github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU= github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -575,7 +568,6 @@ github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= @@ -613,9 +605,8 @@ github.com/vbatts/tar-split v0.11.2 h1:Via6XqJr0hceW4wff3QRzD5gAk/tatMw/4ZA7cTlI github.com/vbatts/tar-split v0.11.2/go.mod h1:vV3ZuO2yWSVsz+pfFzDG/upWH1JhjOiEaWq6kXyQ3VI= github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74 h1:JwtAtbp7r/7QSyGz8mKUbYJBg2+6Cd7OjM8o/GNOcVo= github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74/go.mod h1:RmMWU37GKR2s6pgrIEB4ixgpVCt/cf7dnJv3fuH1J1c= -github.com/xanzy/go-gitlab v0.81.0 h1:ofbhZ5ZY9AjHATWQie4qd2JfncdUmvcSA/zfQB767Dk= -github.com/xanzy/go-gitlab v0.81.0/go.mod h1:VMbY3JIWdZ/ckvHbQqkyd3iYk2aViKrNIQ23IbFMQDo= -github.com/xanzy/ssh-agent v0.3.0/go.mod h1:3s9xbODqPuuhK9JV1R321M/FlMZSBvE5aY6eAcqrDh0= +github.com/xanzy/go-gitlab v0.83.0 h1:37p0MpTPNbsTMKX/JnmJtY8Ch1sFiJzVF342+RvZEGw= +github.com/xanzy/go-gitlab v0.83.0/go.mod h1:5ryv+MnpZStBH8I/77HuQBsMbBGANtVpLWC15qOjWAw= github.com/xanzy/ssh-agent v0.3.2/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= @@ -647,22 +638,22 @@ go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk= go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= +golang.org/x/arch v0.1.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= -golang.org/x/crypto v0.7.0 h1:AvwMYaRytfdeVt3u6mLaxYtErKYjxA2OXjJ1HHq6t3A= +golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= +golang.org/x/crypto v0.8.0 h1:pd9TJtTueMTVQXzk8E2XESSMQDj/U7OUu0PqJqPXQjQ= +golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -694,6 +685,7 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.9.0 h1:KENHtAZL2y3NLMYZeHY9DW8HW8V+kQyJsY/V9JlKvCs= golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= @@ -727,7 +719,6 @@ golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81R golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210326060303-6b1517762897/go.mod h1:uSPa2vr4CLtc/ILN5odXGNXS6mhrKVzTaCXzk9m6W3k= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= @@ -738,8 +729,10 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ= +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.9.0 h1:aWJ/m6xSmxWBx+V0XRHTlrYrPG56jKsLdTFmsSsCzOM= +golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= 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= @@ -747,8 +740,8 @@ golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.6.0 h1:Lh8GPgSKBfWSwFvtuWOfeI3aAAnbXTSutYxJiOJFgIw= -golang.org/x/oauth2 v0.6.0/go.mod h1:ycmewcwgD4Rpr3eZJLSB4Kyyljb3qDh40vJ8STE5HKw= +golang.org/x/oauth2 v0.7.0 h1:qe6s0zUXlPX80/dITx3440hWZ7GwMwgDDyrSGTPJG/g= +golang.org/x/oauth2 v0.7.0/go.mod h1:hPLQkd9LyjfXTiRohC/41GhcFqxisoUQ99sCUOHO9x4= 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= @@ -776,7 +769,6 @@ golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -802,10 +794,8 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210502180810-71e4cd670f79/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -847,8 +837,9 @@ golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -897,6 +888,7 @@ golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.7.0 h1:W4OVu8VVOaIO0yzWMNdepAulS7YfoS3Zabrm8DOXXU4= golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= @@ -1045,6 +1037,7 @@ k8s.io/kubectl v0.26.3/go.mod h1:02+gv7Qn4dupzN3fi/9OvqqdW+uG/4Zi56vc4Zmsp1g= k8s.io/utils v0.0.0-20230406110748-d93618cff8a2 h1:qY1Ad8PODbnymg2pRbkyMT/ylpTrCM8P2RJ0yroCyIk= k8s.io/utils v0.0.0-20230406110748-d93618cff8a2/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/cli-utils v0.34.0 h1:zCUitt54f0/MYj/ajVFnG6XSXMhpZ72O/3RewIchW8w= From 38ada0b99826f18256132bb644303fe98de78959 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 May 2023 01:03:23 +0000 Subject: [PATCH 498/818] build(deps): bump peter-evans/create-pull-request from 5.0.0 to 5.0.1 Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 5.0.0 to 5.0.1. - [Release notes](https://github.com/peter-evans/create-pull-request/releases) - [Commits](https://github.com/peter-evans/create-pull-request/compare/5b4a9f6a9e2af26e5f02351490b90d01eb8ec1e5...284f54f989303d2699d373481a0cfa13ad5a6666) --- updated-dependencies: - dependency-name: peter-evans/create-pull-request dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/update.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/update.yaml b/.github/workflows/update.yaml index 8baf10a8..48fb20aa 100644 --- a/.github/workflows/update.yaml +++ b/.github/workflows/update.yaml @@ -84,7 +84,7 @@ jobs: - name: Create Pull Request id: cpr - uses: peter-evans/create-pull-request@5b4a9f6a9e2af26e5f02351490b90d01eb8ec1e5 # v5.0.0 + uses: peter-evans/create-pull-request@284f54f989303d2699d373481a0cfa13ad5a6666 # v5.0.1 with: token: ${{ secrets.BOT_GITHUB_TOKEN }} commit-message: | From 4d443d614be363642a775f8502c5c83427d5e38f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 May 2023 06:26:05 +0000 Subject: [PATCH 499/818] build(deps): bump github/codeql-action from 2.3.2 to 2.3.3 Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2.3.2 to 2.3.3. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/f3feb00acb00f31a6f60280e6ace9ca31d91c76a...29b1f65c5e92e24fe6b6647da1eaabe529cec70f) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/scan.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index 4520b538..be9394d3 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -53,7 +53,7 @@ jobs: env: SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }} - name: Upload result to GitHub Code Scanning - uses: github/codeql-action/upload-sarif@f3feb00acb00f31a6f60280e6ace9ca31d91c76a # v2.3.2 + uses: github/codeql-action/upload-sarif@29b1f65c5e92e24fe6b6647da1eaabe529cec70f # v2.3.3 with: sarif_file: snyk.sarif @@ -73,10 +73,10 @@ jobs: **/go.sum **/go.mod - name: Initialize CodeQL - uses: github/codeql-action/init@f3feb00acb00f31a6f60280e6ace9ca31d91c76a # v2.3.2 + uses: github/codeql-action/init@29b1f65c5e92e24fe6b6647da1eaabe529cec70f # v2.3.3 with: languages: go - name: Autobuild - uses: github/codeql-action/autobuild@f3feb00acb00f31a6f60280e6ace9ca31d91c76a # v2.3.2 + uses: github/codeql-action/autobuild@29b1f65c5e92e24fe6b6647da1eaabe529cec70f # v2.3.3 - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@f3feb00acb00f31a6f60280e6ace9ca31d91c76a # v2.3.2 + uses: github/codeql-action/analyze@29b1f65c5e92e24fe6b6647da1eaabe529cec70f # v2.3.3 From 86df468c3fbd8c46a3d1fd84e82585c663f6f8dd Mon Sep 17 00:00:00 2001 From: Vincent Gillet Date: Mon, 8 May 2023 20:01:19 +0800 Subject: [PATCH 500/818] Fix autocompletion for image repository reconcile Signed-off-by: Vincent Gillet --- cmd/flux/reconcile_image_repository.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/flux/reconcile_image_repository.go b/cmd/flux/reconcile_image_repository.go index 04e20d04..c7304eb7 100644 --- a/cmd/flux/reconcile_image_repository.go +++ b/cmd/flux/reconcile_image_repository.go @@ -30,7 +30,7 @@ var reconcileImageRepositoryCmd = &cobra.Command{ Long: `The reconcile image repository command triggers a reconciliation of an ImageRepository resource and waits for it to finish.`, Example: ` # Trigger an scan for an existing image repository flux reconcile image repository alpine`, - ValidArgsFunction: resourceNamesCompletionFunc(imagev1.GroupVersion.WithKind(imagev1.ImagePolicyKind)), + ValidArgsFunction: resourceNamesCompletionFunc(imagev1.GroupVersion.WithKind(imagev1.ImageRepositoryKind)), RunE: reconcileCommand{ apiType: imageRepositoryType, object: imageRepositoryAdapter{&imagev1.ImageRepository{}}, From 847e78541a811a849a0c5e5b5b7503bd08944576 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 May 2023 13:06:08 +0000 Subject: [PATCH 501/818] build(deps): bump anchore/sbom-action from 0.14.1 to 0.14.2 Bumps [anchore/sbom-action](https://github.com/anchore/sbom-action) from 0.14.1 to 0.14.2. - [Release notes](https://github.com/anchore/sbom-action/releases) - [Commits](https://github.com/anchore/sbom-action/compare/422cb34a0f8b599678c41b21163ea6088edb2624...4d571ad1038a9cc29d676154ef265ab8f9027042) --- updated-dependencies: - dependency-name: anchore/sbom-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/release.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index bcc7d3a1..7dedb11d 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -30,7 +30,7 @@ jobs: id: buildx uses: docker/setup-buildx-action@4b4e9c3e2d4531116a6f8ba8e71fc6e2cb6e6c8c # v2.5.0 - name: Setup Syft - uses: anchore/sbom-action/download-syft@422cb34a0f8b599678c41b21163ea6088edb2624 # v0.14.1 + uses: anchore/sbom-action/download-syft@4d571ad1038a9cc29d676154ef265ab8f9027042 # v0.14.2 - name: Setup Cosign uses: sigstore/cosign-installer@204a51a57a74d190b284a0ce69b44bc37201f343 # v3.0.3 - name: Setup Kustomize From 2e3624d63663ea4b64384e69f3fd03a24df057ef Mon Sep 17 00:00:00 2001 From: Kevin McDermott Date: Tue, 9 May 2023 14:36:17 +0100 Subject: [PATCH 502/818] Add summary to Azure Alert. This updates the Azure alert testing to add a summary which should be sent to Azure as a commit-status genre. Signed-off-by: Kevin McDermott --- tests/azure/azure_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/azure/azure_test.go b/tests/azure/azure_test.go index 55124f24..03a10748 100644 --- a/tests/azure/azure_test.go +++ b/tests/azure/azure_test.go @@ -842,6 +842,7 @@ func TestEventHubNotification(t *testing.T) { Namespace: name, }, }, + Summary: "cluster: test-1", } return nil }) From ace242fca23f548963c66327c52ce024fed6a775 Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Tue, 9 May 2023 15:23:33 +0000 Subject: [PATCH 503/818] Update toolkit components - kustomize-controller to v1.0.0-rc.2 https://github.com/fluxcd/kustomize-controller/blob/v1.0.0-rc.2/CHANGELOG.md - source-controller to v1.0.0-rc.2 https://github.com/fluxcd/source-controller/blob/v1.0.0-rc.2/CHANGELOG.md - notification-controller to v1.0.0-rc.2 https://github.com/fluxcd/notification-controller/blob/v1.0.0-rc.2/CHANGELOG.md - image-reflector-controller to v0.27.1 https://github.com/fluxcd/image-reflector-controller/blob/v0.27.1/CHANGELOG.md - image-automation-controller to v0.33.0 https://github.com/fluxcd/image-automation-controller/blob/v0.33.0/CHANGELOG.md Signed-off-by: Stefan Prodan --- cmd/flux/create_receiver.go | 2 +- go.mod | 10 +++++----- go.sum | 20 +++++++++---------- .../kustomization.yaml | 4 ++-- .../kustomization.yaml | 4 ++-- .../kustomize-controller/kustomization.yaml | 4 ++-- .../kustomization.yaml | 4 ++-- .../source-controller/kustomization.yaml | 4 ++-- manifests/crds/kustomization.yaml | 10 +++++----- 9 files changed, 31 insertions(+), 31 deletions(-) diff --git a/cmd/flux/create_receiver.go b/cmd/flux/create_receiver.go index 48643aad..5597dae2 100644 --- a/cmd/flux/create_receiver.go +++ b/cmd/flux/create_receiver.go @@ -145,7 +145,7 @@ func createReceiverCmdRun(cmd *cobra.Command, args []string) error { } logger.Successf("Receiver %s is ready", name) - logger.Successf("generated webhook URL %s", receiver.Status.URL) + logger.Successf("generated webhook URL %s", receiver.Status.WebhookPath) return nil } diff --git a/go.mod b/go.mod index 78527cdc..e6b0801a 100644 --- a/go.mod +++ b/go.mod @@ -10,10 +10,10 @@ require ( github.com/fluxcd/go-git-providers v0.15.3 github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 github.com/fluxcd/helm-controller/api v0.32.2 - github.com/fluxcd/image-automation-controller/api v0.32.0 - github.com/fluxcd/image-reflector-controller/api v0.27.0 - github.com/fluxcd/kustomize-controller/api v1.0.0-rc.1 - github.com/fluxcd/notification-controller/api v1.0.0-rc.1 + github.com/fluxcd/image-automation-controller/api v0.33.0 + github.com/fluxcd/image-reflector-controller/api v0.27.1 + github.com/fluxcd/kustomize-controller/api v1.0.0-rc.2 + github.com/fluxcd/notification-controller/api v1.0.0-rc.2 github.com/fluxcd/pkg/apis/event v0.4.1 github.com/fluxcd/pkg/apis/meta v1.0.0 github.com/fluxcd/pkg/git v0.11.0 @@ -26,7 +26,7 @@ require ( github.com/fluxcd/pkg/ssh v0.7.3 github.com/fluxcd/pkg/untar v0.2.0 github.com/fluxcd/pkg/version v0.2.1 - github.com/fluxcd/source-controller/api v1.0.0-rc.1 + github.com/fluxcd/source-controller/api v1.0.0-rc.2 github.com/gonvenience/bunt v1.3.5 github.com/gonvenience/ytbx v1.4.4 github.com/google/go-cmp v0.5.9 diff --git a/go.sum b/go.sum index 0193d002..b3ad0f27 100644 --- a/go.sum +++ b/go.sum @@ -198,14 +198,14 @@ github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 h1:Gm5sGGk+/Wq6Rh github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4/go.mod h1:raWgfUV7lDQVXp4QXUaeNNJkRVKz97UQuF+0kdY7Vmo= github.com/fluxcd/helm-controller/api v0.32.2 h1:ETkZmMEHY/qu6a9AjP6en35WrpN7NnVmhOe7IvOB7jE= github.com/fluxcd/helm-controller/api v0.32.2/go.mod h1:xzQgNoaPOg77zFUqvnaX0Fn3lPA3iGDLoz8q4wiEyLA= -github.com/fluxcd/image-automation-controller/api v0.32.0 h1:ABRLN+a8jHuOAETf1o1ohVzxxjYhOXxtJglD5YSMuUM= -github.com/fluxcd/image-automation-controller/api v0.32.0/go.mod h1:DHb9GaPZz5HCgBL3u3PC4XNGcO3rUroE6ayx1PAa0Gs= -github.com/fluxcd/image-reflector-controller/api v0.27.0 h1:1wceNPwx6dCPTmeGgSXLRbhRjEiyWeRSb+KMCcSJ0sw= -github.com/fluxcd/image-reflector-controller/api v0.27.0/go.mod h1:TNn1Y3XuinlCRiohmjUtwvjWurTspPg0U0cCvMI5Q3E= -github.com/fluxcd/kustomize-controller/api v1.0.0-rc.1 h1:HnPpGw9RhVyE4LsvOOMUcCo4jA+gSfnkM2Xe/vjlpHg= -github.com/fluxcd/kustomize-controller/api v1.0.0-rc.1/go.mod h1:ql/HdV+pGzqnHaU5oNyvYR7lHPWc/me3HUPd4g7A9BI= -github.com/fluxcd/notification-controller/api v1.0.0-rc.1 h1:L6xM9Nvm2icc7SqcUSXYiIY8bTiV73kss5KleaUewts= -github.com/fluxcd/notification-controller/api v1.0.0-rc.1/go.mod h1:bfZCGyWq1SPmZSQSCuHRum5Z1olidWp8UbZkO5kcato= +github.com/fluxcd/image-automation-controller/api v0.33.0 h1:WwF1WFl8cNOlkjoQ3R6SKOlOXDWpp2pUi7xdJQmxtEo= +github.com/fluxcd/image-automation-controller/api v0.33.0/go.mod h1:65BqKNpHQ+FfNH79WhmrTgqoetGAEBlr0aRvHLr9oug= +github.com/fluxcd/image-reflector-controller/api v0.27.1 h1:5XD2mGsazYET1e+vC7Hd26G0NTZ5bauqp2Luz8kyCfk= +github.com/fluxcd/image-reflector-controller/api v0.27.1/go.mod h1:TNn1Y3XuinlCRiohmjUtwvjWurTspPg0U0cCvMI5Q3E= +github.com/fluxcd/kustomize-controller/api v1.0.0-rc.2 h1:qImk/xj8rS+J7fzGbjUxZicKTFbXigEmK0ytU8Dr+t8= +github.com/fluxcd/kustomize-controller/api v1.0.0-rc.2/go.mod h1:ql/HdV+pGzqnHaU5oNyvYR7lHPWc/me3HUPd4g7A9BI= +github.com/fluxcd/notification-controller/api v1.0.0-rc.2 h1:nbpRC0/ow4elqVzjRO+Az1cag2skBix6j85GaeL82nI= +github.com/fluxcd/notification-controller/api v1.0.0-rc.2/go.mod h1:bfZCGyWq1SPmZSQSCuHRum5Z1olidWp8UbZkO5kcato= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= github.com/fluxcd/pkg/apis/event v0.4.1 h1:63wP8NM/uA4680F4Ft8q8/0rJivX90i7FmMkRvUI8Is= @@ -237,8 +237,8 @@ github.com/fluxcd/pkg/untar v0.2.0 h1:sJXU+FbJcNUb2ffLJNjeR3hwt3X2loVpOMlCUjyFw6 github.com/fluxcd/pkg/untar v0.2.0/go.mod h1:33AyoWaPpjX/xXpczcfhQh2AkB63TFwiR2YwROtv23E= github.com/fluxcd/pkg/version v0.2.1 h1:RRH7+6qiWHdTvRNwpoBmilnubJ2C4FZYGgy5wTDVKVc= github.com/fluxcd/pkg/version v0.2.1/go.mod h1:UmUYHDz4BxHQMesMUx3gYVrT2Wf66H49JpTg/PW+/OY= -github.com/fluxcd/source-controller/api v1.0.0-rc.1 h1:MZaP5utClMG95Aw/AVu1l05WEfmpEw/RIlCLnkCQl14= -github.com/fluxcd/source-controller/api v1.0.0-rc.1/go.mod h1:CvGNdS8g/MqwpERUK6aJp4lndsrm+JBzGpoyyZ4u0c8= +github.com/fluxcd/source-controller/api v1.0.0-rc.2 h1:14S47wfNrN92KqLkpbfSgWr84ALhogbFgaRapit/9XI= +github.com/fluxcd/source-controller/api v1.0.0-rc.2/go.mod h1:CvGNdS8g/MqwpERUK6aJp4lndsrm+JBzGpoyyZ4u0c8= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= diff --git a/manifests/bases/image-automation-controller/kustomization.yaml b/manifests/bases/image-automation-controller/kustomization.yaml index 212805b8..46fa2e48 100644 --- a/manifests/bases/image-automation-controller/kustomization.yaml +++ b/manifests/bases/image-automation-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.32.0/image-automation-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.32.0/image-automation-controller.deployment.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.33.0/image-automation-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.33.0/image-automation-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/image-reflector-controller/kustomization.yaml b/manifests/bases/image-reflector-controller/kustomization.yaml index 1c868aef..42fd7335 100644 --- a/manifests/bases/image-reflector-controller/kustomization.yaml +++ b/manifests/bases/image-reflector-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.27.0/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.27.0/image-reflector-controller.deployment.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.27.1/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.27.1/image-reflector-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/kustomize-controller/kustomization.yaml b/manifests/bases/kustomize-controller/kustomization.yaml index 45964902..4f71065b 100644 --- a/manifests/bases/kustomize-controller/kustomization.yaml +++ b/manifests/bases/kustomize-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/kustomize-controller/releases/download/v1.0.0-rc.1/kustomize-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v1.0.0-rc.1/kustomize-controller.deployment.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v1.0.0-rc.2/kustomize-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v1.0.0-rc.2/kustomize-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/notification-controller/kustomization.yaml b/manifests/bases/notification-controller/kustomization.yaml index f823074d..39510f38 100644 --- a/manifests/bases/notification-controller/kustomization.yaml +++ b/manifests/bases/notification-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/notification-controller/releases/download/v1.0.0-rc.1/notification-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v1.0.0-rc.1/notification-controller.deployment.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v1.0.0-rc.2/notification-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v1.0.0-rc.2/notification-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index 45ffa7af..28fd2012 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v1.0.0-rc.1/source-controller.crds.yaml -- https://github.com/fluxcd/source-controller/releases/download/v1.0.0-rc.1/source-controller.deployment.yaml +- https://github.com/fluxcd/source-controller/releases/download/v1.0.0-rc.2/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v1.0.0-rc.2/source-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index 2c5016ae..3af28348 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -1,9 +1,9 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v1.0.0-rc.1/source-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v1.0.0-rc.1/kustomize-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v1.0.0-rc.2/source-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v1.0.0-rc.2/kustomize-controller.crds.yaml - https://github.com/fluxcd/helm-controller/releases/download/v0.32.2/helm-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v1.0.0-rc.1/notification-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.27.0/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.32.0/image-automation-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v1.0.0-rc.2/notification-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.27.1/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.33.0/image-automation-controller.crds.yaml From fec7dfefa474c92b52f6c50ae191544ee4b708dd Mon Sep 17 00:00:00 2001 From: Devin Buhl Date: Wed, 10 May 2023 09:32:30 -0400 Subject: [PATCH 504/818] Update Alpine to 3.18 This change would be nice to get in because MUSL finally implemented TCP fallback in their DNS resolver. alpinelinux.org/posts/Alpine-3.18.0-released.html Signed-off-by: Devin Buhl --- Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 79b4ced5..ea658d8e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM alpine:3.17 as builder +FROM alpine:3.18 as builder RUN apk add --no-cache ca-certificates curl @@ -9,7 +9,7 @@ RUN curl -sL https://storage.googleapis.com/kubernetes-release/release/v${KUBECT -o /usr/local/bin/kubectl && chmod +x /usr/local/bin/kubectl && \ kubectl version --client=true -FROM alpine:3.17 as flux-cli +FROM alpine:3.18 as flux-cli RUN apk add --no-cache ca-certificates From 77d670c2247f1c71664cc7ff1c64cd45031bb624 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 11 May 2023 20:48:22 +0000 Subject: [PATCH 505/818] build(deps): bump github.com/docker/distribution Bumps [github.com/docker/distribution](https://github.com/docker/distribution) from 2.8.1+incompatible to 2.8.2+incompatible. - [Release notes](https://github.com/docker/distribution/releases) - [Commits](https://github.com/docker/distribution/compare/v2.8.1...v2.8.2) --- updated-dependencies: - dependency-name: github.com/docker/distribution dependency-type: indirect ... Signed-off-by: dependabot[bot] --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index e6b0801a..66ce944d 100644 --- a/go.mod +++ b/go.mod @@ -96,7 +96,7 @@ require ( github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/docker/cli v23.0.1+incompatible // indirect - github.com/docker/distribution v2.8.1+incompatible // indirect + github.com/docker/distribution v2.8.2+incompatible // indirect github.com/docker/docker v23.0.3+incompatible // indirect github.com/docker/docker-credential-helpers v0.7.0 // indirect github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c // indirect diff --git a/go.sum b/go.sum index b3ad0f27..94dbbcaf 100644 --- a/go.sum +++ b/go.sum @@ -152,8 +152,8 @@ github.com/distribution/distribution/v3 v3.0.0-20230327091844-0c958010ace2/go.mo github.com/dnaeon/go-vcr v1.1.0 h1:ReYa/UBrRyQdant9B4fNHGoCNKw6qh6P0fsdGmZpR7c= github.com/docker/cli v23.0.1+incompatible h1:LRyWITpGzl2C9e9uGxzisptnxAn1zfZKXy13Ul2Q5oM= github.com/docker/cli v23.0.1+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= -github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68= -github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= +github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/docker v23.0.3+incompatible h1:9GhVsShNWz1hO//9BNg/dpMnZW25KydO4wtVxWAIbho= github.com/docker/docker v23.0.3+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker-credential-helpers v0.7.0 h1:xtCHsjxogADNZcdv1pKUHXryefjlVRqWqIhk/uXJp0A= From 6fd1f794f924a636ee3d7b6ce3358b46ed1b6b2b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 12 May 2023 05:30:40 +0000 Subject: [PATCH 506/818] build(deps): bump github.com/cloudflare/circl from 1.3.2 to 1.3.3 Bumps [github.com/cloudflare/circl](https://github.com/cloudflare/circl) from 1.3.2 to 1.3.3. - [Release notes](https://github.com/cloudflare/circl/releases) - [Commits](https://github.com/cloudflare/circl/compare/v1.3.2...v1.3.3) --- updated-dependencies: - dependency-name: github.com/cloudflare/circl dependency-type: indirect ... Signed-off-by: dependabot[bot] --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 66ce944d..3c682bce 100644 --- a/go.mod +++ b/go.mod @@ -91,7 +91,7 @@ require ( github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/chai2010/gettext-go v1.0.2 // indirect github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e // indirect - github.com/cloudflare/circl v1.3.2 // indirect + github.com/cloudflare/circl v1.3.3 // indirect github.com/containerd/stargz-snapshotter/estargz v0.14.3 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect diff --git a/go.sum b/go.sum index 94dbbcaf..411095cd 100644 --- a/go.sum +++ b/go.sum @@ -130,8 +130,8 @@ github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1 h1:q763qf9huN11kDQavWs github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cloudflare/circl v1.1.0/go.mod h1:prBCrKB9DV4poKZY1l9zBXg2QJY7mvgRvtMxxK7fi4I= -github.com/cloudflare/circl v1.3.2 h1:VWp8dY3yH69fdM7lM6A1+NhhVoDu9vqK0jOgmkQHFWk= -github.com/cloudflare/circl v1.3.2/go.mod h1:+CauBF6R70Jqcyl8N2hC8pAXYbWkGIezuSbuGLtRhnw= +github.com/cloudflare/circl v1.3.3 h1:fE/Qz0QdIGqeWfnwq0RE0R7MI51s0M2E4Ga9kq5AEMs= +github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= From bc67308f856a38d39e6ed7d0222b639174649583 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 12 May 2023 05:47:08 +0000 Subject: [PATCH 507/818] build(deps): bump github.com/cloudflare/circl in /tests/azure Bumps [github.com/cloudflare/circl](https://github.com/cloudflare/circl) from 1.3.2 to 1.3.3. - [Release notes](https://github.com/cloudflare/circl/releases) - [Commits](https://github.com/cloudflare/circl/compare/v1.3.2...v1.3.3) --- updated-dependencies: - dependency-name: github.com/cloudflare/circl dependency-type: indirect ... Signed-off-by: dependabot[bot] --- tests/azure/go.mod | 2 +- tests/azure/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/azure/go.mod b/tests/azure/go.mod index 91f7f5fc..5b8158ce 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -47,7 +47,7 @@ require ( github.com/ProtonMail/go-crypto v0.0.0-20230217124315-7d5c6f04bbb8 // indirect github.com/acomagu/bufpipe v1.0.4 // indirect github.com/apparentlymart/go-textseg/v13 v13.0.0 // indirect - github.com/cloudflare/circl v1.3.2 // indirect + github.com/cloudflare/circl v1.3.3 // indirect github.com/cyphar/filepath-securejoin v0.2.3 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/devigned/tab v0.1.1 // indirect diff --git a/tests/azure/go.sum b/tests/azure/go.sum index 0ac4d8d4..61ce30ee 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -95,8 +95,8 @@ github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5P github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cloudflare/circl v1.1.0/go.mod h1:prBCrKB9DV4poKZY1l9zBXg2QJY7mvgRvtMxxK7fi4I= -github.com/cloudflare/circl v1.3.2 h1:VWp8dY3yH69fdM7lM6A1+NhhVoDu9vqK0jOgmkQHFWk= -github.com/cloudflare/circl v1.3.2/go.mod h1:+CauBF6R70Jqcyl8N2hC8pAXYbWkGIezuSbuGLtRhnw= +github.com/cloudflare/circl v1.3.3 h1:fE/Qz0QdIGqeWfnwq0RE0R7MI51s0M2E4Ga9kq5AEMs= +github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= From 29b08fc306c451da586b65514182b4431578363a Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Fri, 12 May 2023 10:42:46 +0300 Subject: [PATCH 508/818] Add OSSF Scorecard Signed-off-by: Stefan Prodan --- .github/workflows/ossf.yaml | 39 +++++++++++++++++++++++++++++++++++++ README.md | 1 + 2 files changed, 40 insertions(+) create mode 100644 .github/workflows/ossf.yaml diff --git a/.github/workflows/ossf.yaml b/.github/workflows/ossf.yaml new file mode 100644 index 00000000..c8fee985 --- /dev/null +++ b/.github/workflows/ossf.yaml @@ -0,0 +1,39 @@ +name: ossf +on: + workflow_dispatch: + push: + branches: + - main + schedule: + # Weekly on Saturdays. + - cron: '30 1 * * 6' + +permissions: read-all + +jobs: + scorecard: + runs-on: ubuntu-latest + permissions: + security-events: write + id-token: write + actions: read + contents: read + steps: + - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2 + - name: Run analysis + uses: ossf/scorecard-action@80e868c13c90f172d68d1f4501dee99e2479f7af # v2.1.3 + with: + results_file: results.sarif + results_format: sarif + repo_token: ${{ secrets.GITHUB_TOKEN }} + publish_results: true + - name: Upload artifact + uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2 + with: + name: SARIF file + path: results.sarif + retention-days: 5 + - name: Upload SARIF results + uses: github/codeql-action/upload-sarif@29b1f65c5e92e24fe6b6647da1eaabe529cec70f # v2.3.3 + with: + sarif_file: results.sarif diff --git a/README.md b/README.md index f848de35..f0256ebb 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,7 @@ [![release](https://img.shields.io/github/release/fluxcd/flux2/all.svg)](https://github.com/fluxcd/flux2/releases) [![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/4782/badge)](https://bestpractices.coreinfrastructure.org/projects/4782) +[![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/fluxcd/flux2/badge)](https://api.securityscorecards.dev/projects/github.com/fluxcd/flux2) [![FOSSA Status](https://app.fossa.com/api/projects/custom%2B162%2Fgithub.com%2Ffluxcd%2Fflux2.svg?type=shield)](https://app.fossa.com/projects/custom%2B162%2Fgithub.com%2Ffluxcd%2Fflux2?ref=badge_shield) [![Artifact HUB](https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/flux2)](https://artifacthub.io/packages/helm/fluxcd-community/flux2) From 2aa38baa35e0320e6c4a1eafd6cfd5f6bac48806 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Fri, 12 May 2023 09:20:21 +0300 Subject: [PATCH 509/818] Add ResourceQuota for critical pods Fixes insufficient quota error on GKE Signed-off-by: Stefan Prodan --- manifests/rbac/kustomization.yaml | 1 + manifests/rbac/resourcequota.yaml | 14 ++++++++++++++ 2 files changed, 15 insertions(+) create mode 100644 manifests/rbac/resourcequota.yaml diff --git a/manifests/rbac/kustomization.yaml b/manifests/rbac/kustomization.yaml index cd0afef0..4e708ef2 100644 --- a/manifests/rbac/kustomization.yaml +++ b/manifests/rbac/kustomization.yaml @@ -5,3 +5,4 @@ resources: - reconciler.yaml - edit.yaml - view.yaml + - resourcequota.yaml diff --git a/manifests/rbac/resourcequota.yaml b/manifests/rbac/resourcequota.yaml new file mode 100644 index 00000000..51739c70 --- /dev/null +++ b/manifests/rbac/resourcequota.yaml @@ -0,0 +1,14 @@ +apiVersion: v1 +kind: ResourceQuota +metadata: + name: critical-pods +spec: + hard: + pods: "1000" + scopeSelector: + matchExpressions: + - operator: In + scopeName: PriorityClass + values: + - system-node-critical + - system-cluster-critical From fcb992240e4be185706876399f0e1eedbdf5a274 Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Fri, 12 May 2023 11:46:20 +0000 Subject: [PATCH 510/818] Update toolkit components - helm-controller to v0.33.0 https://github.com/fluxcd/helm-controller/blob/v0.33.0/CHANGELOG.md - kustomize-controller to v1.0.0-rc.3 https://github.com/fluxcd/kustomize-controller/blob/v1.0.0-rc.3/CHANGELOG.md - source-controller to v1.0.0-rc.3 https://github.com/fluxcd/source-controller/blob/v1.0.0-rc.3/CHANGELOG.md - notification-controller to v1.0.0-rc.3 https://github.com/fluxcd/notification-controller/blob/v1.0.0-rc.3/CHANGELOG.md - image-reflector-controller to v0.27.2 https://github.com/fluxcd/image-reflector-controller/blob/v0.27.2/CHANGELOG.md - image-automation-controller to v0.33.1 https://github.com/fluxcd/image-automation-controller/blob/v0.33.1/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 12 +++++----- go.sum | 24 +++++++++---------- .../bases/helm-controller/kustomization.yaml | 4 ++-- .../kustomization.yaml | 4 ++-- .../kustomization.yaml | 4 ++-- .../kustomize-controller/kustomization.yaml | 4 ++-- .../kustomization.yaml | 4 ++-- .../source-controller/kustomization.yaml | 4 ++-- manifests/crds/kustomization.yaml | 12 +++++----- 9 files changed, 36 insertions(+), 36 deletions(-) diff --git a/go.mod b/go.mod index 3c682bce..438c66ba 100644 --- a/go.mod +++ b/go.mod @@ -9,11 +9,11 @@ require ( github.com/distribution/distribution/v3 v3.0.0-20230327091844-0c958010ace2 github.com/fluxcd/go-git-providers v0.15.3 github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 - github.com/fluxcd/helm-controller/api v0.32.2 - github.com/fluxcd/image-automation-controller/api v0.33.0 - github.com/fluxcd/image-reflector-controller/api v0.27.1 - github.com/fluxcd/kustomize-controller/api v1.0.0-rc.2 - github.com/fluxcd/notification-controller/api v1.0.0-rc.2 + github.com/fluxcd/helm-controller/api v0.33.0 + github.com/fluxcd/image-automation-controller/api v0.33.1 + github.com/fluxcd/image-reflector-controller/api v0.27.2 + github.com/fluxcd/kustomize-controller/api v1.0.0-rc.3 + github.com/fluxcd/notification-controller/api v1.0.0-rc.3 github.com/fluxcd/pkg/apis/event v0.4.1 github.com/fluxcd/pkg/apis/meta v1.0.0 github.com/fluxcd/pkg/git v0.11.0 @@ -26,7 +26,7 @@ require ( github.com/fluxcd/pkg/ssh v0.7.3 github.com/fluxcd/pkg/untar v0.2.0 github.com/fluxcd/pkg/version v0.2.1 - github.com/fluxcd/source-controller/api v1.0.0-rc.2 + github.com/fluxcd/source-controller/api v1.0.0-rc.3 github.com/gonvenience/bunt v1.3.5 github.com/gonvenience/ytbx v1.4.4 github.com/google/go-cmp v0.5.9 diff --git a/go.sum b/go.sum index 411095cd..bfeecaaa 100644 --- a/go.sum +++ b/go.sum @@ -196,16 +196,16 @@ github.com/fluxcd/go-git-providers v0.15.3 h1:vJ1J+WxZYxrOrWp2ojpixjERxmN6XY9C/A github.com/fluxcd/go-git-providers v0.15.3/go.mod h1:6fkRPzq0EQHQKO0/6CmfoEr6YHYwBKzDbxiEUjaxzl4= github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 h1:Gm5sGGk+/Wq6RhX4xpCZ2IqjDp5XkjlhENaAuAlpdKc= github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4/go.mod h1:raWgfUV7lDQVXp4QXUaeNNJkRVKz97UQuF+0kdY7Vmo= -github.com/fluxcd/helm-controller/api v0.32.2 h1:ETkZmMEHY/qu6a9AjP6en35WrpN7NnVmhOe7IvOB7jE= -github.com/fluxcd/helm-controller/api v0.32.2/go.mod h1:xzQgNoaPOg77zFUqvnaX0Fn3lPA3iGDLoz8q4wiEyLA= -github.com/fluxcd/image-automation-controller/api v0.33.0 h1:WwF1WFl8cNOlkjoQ3R6SKOlOXDWpp2pUi7xdJQmxtEo= -github.com/fluxcd/image-automation-controller/api v0.33.0/go.mod h1:65BqKNpHQ+FfNH79WhmrTgqoetGAEBlr0aRvHLr9oug= -github.com/fluxcd/image-reflector-controller/api v0.27.1 h1:5XD2mGsazYET1e+vC7Hd26G0NTZ5bauqp2Luz8kyCfk= -github.com/fluxcd/image-reflector-controller/api v0.27.1/go.mod h1:TNn1Y3XuinlCRiohmjUtwvjWurTspPg0U0cCvMI5Q3E= -github.com/fluxcd/kustomize-controller/api v1.0.0-rc.2 h1:qImk/xj8rS+J7fzGbjUxZicKTFbXigEmK0ytU8Dr+t8= -github.com/fluxcd/kustomize-controller/api v1.0.0-rc.2/go.mod h1:ql/HdV+pGzqnHaU5oNyvYR7lHPWc/me3HUPd4g7A9BI= -github.com/fluxcd/notification-controller/api v1.0.0-rc.2 h1:nbpRC0/ow4elqVzjRO+Az1cag2skBix6j85GaeL82nI= -github.com/fluxcd/notification-controller/api v1.0.0-rc.2/go.mod h1:bfZCGyWq1SPmZSQSCuHRum5Z1olidWp8UbZkO5kcato= +github.com/fluxcd/helm-controller/api v0.33.0 h1:XUoBxaSzJXFygpGIpLxslXhZ+Xhss3ADqLx1dP2ZZbk= +github.com/fluxcd/helm-controller/api v0.33.0/go.mod h1:fihSaRVufjN+eDvg7qBxrDjLfy9J075mTIx3UAC3c64= +github.com/fluxcd/image-automation-controller/api v0.33.1 h1:yvdNCHDOTpxp/QGj203EnO0Tr4GhZnRIfo1JHTTm12I= +github.com/fluxcd/image-automation-controller/api v0.33.1/go.mod h1:65BqKNpHQ+FfNH79WhmrTgqoetGAEBlr0aRvHLr9oug= +github.com/fluxcd/image-reflector-controller/api v0.27.2 h1:SqziaPXmF4mmPS5NGCIutRMaqrrUDhHdi0JSLz77gOo= +github.com/fluxcd/image-reflector-controller/api v0.27.2/go.mod h1:TNn1Y3XuinlCRiohmjUtwvjWurTspPg0U0cCvMI5Q3E= +github.com/fluxcd/kustomize-controller/api v1.0.0-rc.3 h1:h87VnTN00v6BsBUKqUdZH8Q7QitdwyykGg1oK9yXhlU= +github.com/fluxcd/kustomize-controller/api v1.0.0-rc.3/go.mod h1:ql/HdV+pGzqnHaU5oNyvYR7lHPWc/me3HUPd4g7A9BI= +github.com/fluxcd/notification-controller/api v1.0.0-rc.3 h1:RxHGUo9nSXj+vXEYjo+35vrABx+qugeWsNTJ6Zb/fwM= +github.com/fluxcd/notification-controller/api v1.0.0-rc.3/go.mod h1:bfZCGyWq1SPmZSQSCuHRum5Z1olidWp8UbZkO5kcato= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= github.com/fluxcd/pkg/apis/event v0.4.1 h1:63wP8NM/uA4680F4Ft8q8/0rJivX90i7FmMkRvUI8Is= @@ -237,8 +237,8 @@ github.com/fluxcd/pkg/untar v0.2.0 h1:sJXU+FbJcNUb2ffLJNjeR3hwt3X2loVpOMlCUjyFw6 github.com/fluxcd/pkg/untar v0.2.0/go.mod h1:33AyoWaPpjX/xXpczcfhQh2AkB63TFwiR2YwROtv23E= github.com/fluxcd/pkg/version v0.2.1 h1:RRH7+6qiWHdTvRNwpoBmilnubJ2C4FZYGgy5wTDVKVc= github.com/fluxcd/pkg/version v0.2.1/go.mod h1:UmUYHDz4BxHQMesMUx3gYVrT2Wf66H49JpTg/PW+/OY= -github.com/fluxcd/source-controller/api v1.0.0-rc.2 h1:14S47wfNrN92KqLkpbfSgWr84ALhogbFgaRapit/9XI= -github.com/fluxcd/source-controller/api v1.0.0-rc.2/go.mod h1:CvGNdS8g/MqwpERUK6aJp4lndsrm+JBzGpoyyZ4u0c8= +github.com/fluxcd/source-controller/api v1.0.0-rc.3 h1:zfCUEJDN0VxHRoJGjnqlTyVe61ZmImVBOzn14tepzSU= +github.com/fluxcd/source-controller/api v1.0.0-rc.3/go.mod h1:CvGNdS8g/MqwpERUK6aJp4lndsrm+JBzGpoyyZ4u0c8= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= diff --git a/manifests/bases/helm-controller/kustomization.yaml b/manifests/bases/helm-controller/kustomization.yaml index 2a4ccb92..f099b522 100644 --- a/manifests/bases/helm-controller/kustomization.yaml +++ b/manifests/bases/helm-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/helm-controller/releases/download/v0.32.2/helm-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.32.2/helm-controller.deployment.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.33.0/helm-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.33.0/helm-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/image-automation-controller/kustomization.yaml b/manifests/bases/image-automation-controller/kustomization.yaml index 46fa2e48..fd06ed55 100644 --- a/manifests/bases/image-automation-controller/kustomization.yaml +++ b/manifests/bases/image-automation-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.33.0/image-automation-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.33.0/image-automation-controller.deployment.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.33.1/image-automation-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.33.1/image-automation-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/image-reflector-controller/kustomization.yaml b/manifests/bases/image-reflector-controller/kustomization.yaml index 42fd7335..e234cc14 100644 --- a/manifests/bases/image-reflector-controller/kustomization.yaml +++ b/manifests/bases/image-reflector-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.27.1/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.27.1/image-reflector-controller.deployment.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.27.2/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.27.2/image-reflector-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/kustomize-controller/kustomization.yaml b/manifests/bases/kustomize-controller/kustomization.yaml index 4f71065b..4380da9f 100644 --- a/manifests/bases/kustomize-controller/kustomization.yaml +++ b/manifests/bases/kustomize-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/kustomize-controller/releases/download/v1.0.0-rc.2/kustomize-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v1.0.0-rc.2/kustomize-controller.deployment.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v1.0.0-rc.3/kustomize-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v1.0.0-rc.3/kustomize-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/notification-controller/kustomization.yaml b/manifests/bases/notification-controller/kustomization.yaml index 39510f38..97e1f14e 100644 --- a/manifests/bases/notification-controller/kustomization.yaml +++ b/manifests/bases/notification-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/notification-controller/releases/download/v1.0.0-rc.2/notification-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v1.0.0-rc.2/notification-controller.deployment.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v1.0.0-rc.3/notification-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v1.0.0-rc.3/notification-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index 28fd2012..4f64514b 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v1.0.0-rc.2/source-controller.crds.yaml -- https://github.com/fluxcd/source-controller/releases/download/v1.0.0-rc.2/source-controller.deployment.yaml +- https://github.com/fluxcd/source-controller/releases/download/v1.0.0-rc.3/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v1.0.0-rc.3/source-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index 3af28348..beb37e99 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -1,9 +1,9 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v1.0.0-rc.2/source-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v1.0.0-rc.2/kustomize-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.32.2/helm-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v1.0.0-rc.2/notification-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.27.1/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.33.0/image-automation-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v1.0.0-rc.3/source-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v1.0.0-rc.3/kustomize-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.33.0/helm-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v1.0.0-rc.3/notification-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.27.2/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.33.1/image-automation-controller.crds.yaml From d1ec628d6cfc3801716a6d7396c2230bb7d1aec3 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Fri, 12 May 2023 15:12:25 +0300 Subject: [PATCH 511/818] e2e: Update dependencies Signed-off-by: Stefan Prodan --- tests/azure/go.mod | 12 ++++++------ tests/azure/go.sum | 24 ++++++++++++------------ 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/tests/azure/go.mod b/tests/azure/go.mod index 5b8158ce..2317d80a 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -5,16 +5,16 @@ go 1.19 require ( github.com/Azure/azure-event-hubs-go/v3 v3.5.0 github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 - github.com/fluxcd/helm-controller/api v0.32.1 - github.com/fluxcd/image-automation-controller/api v0.32.0 - github.com/fluxcd/image-reflector-controller/api v0.27.0 - github.com/fluxcd/kustomize-controller/api v1.0.0-rc.1 - github.com/fluxcd/notification-controller/api v1.0.0-rc.1 + github.com/fluxcd/helm-controller/api v0.33.0 + github.com/fluxcd/image-automation-controller/api v0.33.1 + github.com/fluxcd/image-reflector-controller/api v0.27.2 + github.com/fluxcd/kustomize-controller/api v1.0.0-rc.3 + github.com/fluxcd/notification-controller/api v1.0.0-rc.3 github.com/fluxcd/pkg/apis/event v0.4.1 github.com/fluxcd/pkg/apis/meta v1.0.0 github.com/fluxcd/pkg/git v0.11.0 github.com/fluxcd/pkg/git/gogit v0.8.1 - github.com/fluxcd/source-controller/api v1.0.0-rc.1 + github.com/fluxcd/source-controller/api v1.0.0-rc.3 github.com/hashicorp/hc-install v0.5.1 github.com/hashicorp/terraform-exec v0.18.1 github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 diff --git a/tests/azure/go.sum b/tests/azure/go.sum index 61ce30ee..bc840e82 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -126,16 +126,16 @@ github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 h1:Gm5sGGk+/Wq6RhX4xpCZ2IqjDp5XkjlhENaAuAlpdKc= github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4/go.mod h1:raWgfUV7lDQVXp4QXUaeNNJkRVKz97UQuF+0kdY7Vmo= -github.com/fluxcd/helm-controller/api v0.32.1 h1:b2q0V+cXnqvW24Zy4zY+5Jfn1D3sqBIBTNhbqsD+r9Q= -github.com/fluxcd/helm-controller/api v0.32.1/go.mod h1:xzQgNoaPOg77zFUqvnaX0Fn3lPA3iGDLoz8q4wiEyLA= -github.com/fluxcd/image-automation-controller/api v0.32.0 h1:ABRLN+a8jHuOAETf1o1ohVzxxjYhOXxtJglD5YSMuUM= -github.com/fluxcd/image-automation-controller/api v0.32.0/go.mod h1:DHb9GaPZz5HCgBL3u3PC4XNGcO3rUroE6ayx1PAa0Gs= -github.com/fluxcd/image-reflector-controller/api v0.27.0 h1:1wceNPwx6dCPTmeGgSXLRbhRjEiyWeRSb+KMCcSJ0sw= -github.com/fluxcd/image-reflector-controller/api v0.27.0/go.mod h1:TNn1Y3XuinlCRiohmjUtwvjWurTspPg0U0cCvMI5Q3E= -github.com/fluxcd/kustomize-controller/api v1.0.0-rc.1 h1:HnPpGw9RhVyE4LsvOOMUcCo4jA+gSfnkM2Xe/vjlpHg= -github.com/fluxcd/kustomize-controller/api v1.0.0-rc.1/go.mod h1:ql/HdV+pGzqnHaU5oNyvYR7lHPWc/me3HUPd4g7A9BI= -github.com/fluxcd/notification-controller/api v1.0.0-rc.1 h1:L6xM9Nvm2icc7SqcUSXYiIY8bTiV73kss5KleaUewts= -github.com/fluxcd/notification-controller/api v1.0.0-rc.1/go.mod h1:bfZCGyWq1SPmZSQSCuHRum5Z1olidWp8UbZkO5kcato= +github.com/fluxcd/helm-controller/api v0.33.0 h1:XUoBxaSzJXFygpGIpLxslXhZ+Xhss3ADqLx1dP2ZZbk= +github.com/fluxcd/helm-controller/api v0.33.0/go.mod h1:fihSaRVufjN+eDvg7qBxrDjLfy9J075mTIx3UAC3c64= +github.com/fluxcd/image-automation-controller/api v0.33.1 h1:yvdNCHDOTpxp/QGj203EnO0Tr4GhZnRIfo1JHTTm12I= +github.com/fluxcd/image-automation-controller/api v0.33.1/go.mod h1:65BqKNpHQ+FfNH79WhmrTgqoetGAEBlr0aRvHLr9oug= +github.com/fluxcd/image-reflector-controller/api v0.27.2 h1:SqziaPXmF4mmPS5NGCIutRMaqrrUDhHdi0JSLz77gOo= +github.com/fluxcd/image-reflector-controller/api v0.27.2/go.mod h1:TNn1Y3XuinlCRiohmjUtwvjWurTspPg0U0cCvMI5Q3E= +github.com/fluxcd/kustomize-controller/api v1.0.0-rc.3 h1:h87VnTN00v6BsBUKqUdZH8Q7QitdwyykGg1oK9yXhlU= +github.com/fluxcd/kustomize-controller/api v1.0.0-rc.3/go.mod h1:ql/HdV+pGzqnHaU5oNyvYR7lHPWc/me3HUPd4g7A9BI= +github.com/fluxcd/notification-controller/api v1.0.0-rc.3 h1:RxHGUo9nSXj+vXEYjo+35vrABx+qugeWsNTJ6Zb/fwM= +github.com/fluxcd/notification-controller/api v1.0.0-rc.3/go.mod h1:bfZCGyWq1SPmZSQSCuHRum5Z1olidWp8UbZkO5kcato= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= github.com/fluxcd/pkg/apis/event v0.4.1 h1:63wP8NM/uA4680F4Ft8q8/0rJivX90i7FmMkRvUI8Is= @@ -153,8 +153,8 @@ github.com/fluxcd/pkg/ssh v0.7.3 h1:Dhs+nXdp806lBriUJtPyRi0SVIVWbJafJGD/qQ71GiY= github.com/fluxcd/pkg/ssh v0.7.3/go.mod h1:/z5ZNgQz+h9s/2nNFKAcZDHtZRMA1nj5YcriGDUOoLY= github.com/fluxcd/pkg/version v0.2.1 h1:RRH7+6qiWHdTvRNwpoBmilnubJ2C4FZYGgy5wTDVKVc= github.com/fluxcd/pkg/version v0.2.1/go.mod h1:UmUYHDz4BxHQMesMUx3gYVrT2Wf66H49JpTg/PW+/OY= -github.com/fluxcd/source-controller/api v1.0.0-rc.1 h1:MZaP5utClMG95Aw/AVu1l05WEfmpEw/RIlCLnkCQl14= -github.com/fluxcd/source-controller/api v1.0.0-rc.1/go.mod h1:CvGNdS8g/MqwpERUK6aJp4lndsrm+JBzGpoyyZ4u0c8= +github.com/fluxcd/source-controller/api v1.0.0-rc.3 h1:zfCUEJDN0VxHRoJGjnqlTyVe61ZmImVBOzn14tepzSU= +github.com/fluxcd/source-controller/api v1.0.0-rc.3/go.mod h1:CvGNdS8g/MqwpERUK6aJp4lndsrm+JBzGpoyyZ4u0c8= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= From 34ac124b6bde867c372227f6d307d7fdfb147a31 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 May 2023 01:22:42 +0000 Subject: [PATCH 512/818] build(deps): bump helm/kind-action from 1.5.0 to 1.7.0 Bumps [helm/kind-action](https://github.com/helm/kind-action) from 1.5.0 to 1.7.0. - [Release notes](https://github.com/helm/kind-action/releases) - [Commits](https://github.com/helm/kind-action/compare/d8ccf8fb623ce1bb360ae2f45f323d9d5c5e9f00...fa81e57adff234b2908110485695db0f181f3c67) --- updated-dependencies: - dependency-name: helm/kind-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/e2e-bootstrap.yaml | 2 +- .github/workflows/e2e.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/e2e-bootstrap.yaml b/.github/workflows/e2e-bootstrap.yaml index 33a343f1..36229e4c 100644 --- a/.github/workflows/e2e-bootstrap.yaml +++ b/.github/workflows/e2e-bootstrap.yaml @@ -25,7 +25,7 @@ jobs: **/go.sum **/go.mod - name: Setup Kubernetes - uses: helm/kind-action@d8ccf8fb623ce1bb360ae2f45f323d9d5c5e9f00 # v1.5.0 + uses: helm/kind-action@fa81e57adff234b2908110485695db0f181f3c67 # v1.7.0 with: version: v0.17.0 cluster_name: kind diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index 7f05ed4f..5266d8bc 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -29,7 +29,7 @@ jobs: **/go.sum **/go.mod - name: Setup Kubernetes - uses: helm/kind-action@d8ccf8fb623ce1bb360ae2f45f323d9d5c5e9f00 # v1.5.0 + uses: helm/kind-action@fa81e57adff234b2908110485695db0f181f3c67 # v1.7.0 with: version: v0.17.0 cluster_name: kind From 9e422576b8544300fd233c93a7d6e81ef1870e0f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 May 2023 07:06:34 +0000 Subject: [PATCH 513/818] build(deps): bump actions/setup-go from 4.0.0 to 4.0.1 Bumps [actions/setup-go](https://github.com/actions/setup-go) from 4.0.0 to 4.0.1. - [Release notes](https://github.com/actions/setup-go/releases) - [Commits](https://github.com/actions/setup-go/compare/4d34df0c2316fe8122ab82dc22947d607c0c91f9...fac708d6674e30b6ba41289acaab6d4b75aa0753) --- updated-dependencies: - dependency-name: actions/setup-go dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/e2e-arm64.yaml | 2 +- .github/workflows/e2e-azure.yaml | 2 +- .github/workflows/e2e-bootstrap.yaml | 2 +- .github/workflows/e2e.yaml | 2 +- .github/workflows/release.yaml | 2 +- .github/workflows/scan.yaml | 4 ++-- .github/workflows/update.yaml | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/e2e-arm64.yaml b/.github/workflows/e2e-arm64.yaml index adaddb39..5ae2c8a1 100644 --- a/.github/workflows/e2e-arm64.yaml +++ b/.github/workflows/e2e-arm64.yaml @@ -22,7 +22,7 @@ jobs: - name: Checkout uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2 - name: Setup Go - uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9 # v4.0.0 + uses: actions/setup-go@fac708d6674e30b6ba41289acaab6d4b75aa0753 # v4.0.1 with: go-version: 1.20.x cache-dependency-path: | diff --git a/.github/workflows/e2e-azure.yaml b/.github/workflows/e2e-azure.yaml index 67834111..54133b1d 100644 --- a/.github/workflows/e2e-azure.yaml +++ b/.github/workflows/e2e-azure.yaml @@ -17,7 +17,7 @@ jobs: - name: Checkout uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2 - name: Setup Go - uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9 # v4.0.0 + uses: actions/setup-go@fac708d6674e30b6ba41289acaab6d4b75aa0753 # v4.0.1 with: go-version: 1.20.x cache-dependency-path: | diff --git a/.github/workflows/e2e-bootstrap.yaml b/.github/workflows/e2e-bootstrap.yaml index 36229e4c..53e896fa 100644 --- a/.github/workflows/e2e-bootstrap.yaml +++ b/.github/workflows/e2e-bootstrap.yaml @@ -18,7 +18,7 @@ jobs: - name: Checkout uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2 - name: Setup Go - uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9 # v4.0.0 + uses: actions/setup-go@fac708d6674e30b6ba41289acaab6d4b75aa0753 # v4.0.1 with: go-version: 1.20.x cache-dependency-path: | diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index 5266d8bc..5e137cdb 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -22,7 +22,7 @@ jobs: - name: Checkout uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2 - name: Setup Go - uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9 # v4.0.0 + uses: actions/setup-go@fac708d6674e30b6ba41289acaab6d4b75aa0753 # v4.0.1 with: go-version: 1.20.x cache-dependency-path: | diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 7dedb11d..2ba62019 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -20,7 +20,7 @@ jobs: - name: Unshallow run: git fetch --prune --unshallow - name: Setup Go - uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9 # v4.0.0 + uses: actions/setup-go@fac708d6674e30b6ba41289acaab6d4b75aa0753 # v4.0.1 with: go-version: 1.20.x cache: false diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index be9394d3..7b66aaaa 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -35,7 +35,7 @@ jobs: - name: Setup Kustomize uses: fluxcd/pkg/actions/kustomize@main - name: Setup Go - uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9 # v4.0.0 + uses: actions/setup-go@fac708d6674e30b6ba41289acaab6d4b75aa0753 # v4.0.1 with: go-version: 1.20.x cache-dependency-path: | @@ -66,7 +66,7 @@ jobs: - name: Checkout repository uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2 - name: Setup Go - uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9 # v4.0.0 + uses: actions/setup-go@fac708d6674e30b6ba41289acaab6d4b75aa0753 # v4.0.1 with: go-version: 1.20.x cache-dependency-path: | diff --git a/.github/workflows/update.yaml b/.github/workflows/update.yaml index 48fb20aa..9c4f189f 100644 --- a/.github/workflows/update.yaml +++ b/.github/workflows/update.yaml @@ -20,7 +20,7 @@ jobs: - name: Check out code uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2 - name: Setup Go - uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9 # v4.0.0 + uses: actions/setup-go@fac708d6674e30b6ba41289acaab6d4b75aa0753 # v4.0.1 with: go-version: 1.20.x cache-dependency-path: | From 0ce51177151c26f5373e0135f39c0a954e763688 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 May 2023 07:17:20 +0000 Subject: [PATCH 514/818] build(deps): bump sigstore/cosign-installer from 3.0.3 to 3.0.5 Bumps [sigstore/cosign-installer](https://github.com/sigstore/cosign-installer) from 3.0.3 to 3.0.5. - [Release notes](https://github.com/sigstore/cosign-installer/releases) - [Commits](https://github.com/sigstore/cosign-installer/compare/204a51a57a74d190b284a0ce69b44bc37201f343...dd6b2e2b610a11fd73dd187a43d57cc1394e35f9) --- updated-dependencies: - dependency-name: sigstore/cosign-installer dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/release.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 2ba62019..7f47a837 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -32,7 +32,7 @@ jobs: - name: Setup Syft uses: anchore/sbom-action/download-syft@4d571ad1038a9cc29d676154ef265ab8f9027042 # v0.14.2 - name: Setup Cosign - uses: sigstore/cosign-installer@204a51a57a74d190b284a0ce69b44bc37201f343 # v3.0.3 + uses: sigstore/cosign-installer@dd6b2e2b610a11fd73dd187a43d57cc1394e35f9 # v3.0.5 - name: Setup Kustomize uses: fluxcd/pkg/actions/kustomize@main - name: Login to GitHub Container Registry @@ -134,7 +134,7 @@ jobs: --path="./flux-system" \ --source=${{ github.repositoryUrl }} \ --revision="${{ github.ref_name }}@sha1:${{ github.sha }}" - - uses: sigstore/cosign-installer@204a51a57a74d190b284a0ce69b44bc37201f343 # v3.0.3 + - uses: sigstore/cosign-installer@dd6b2e2b610a11fd73dd187a43d57cc1394e35f9 # v3.0.5 - name: Sign manifests env: COSIGN_EXPERIMENTAL: 1 From 13ff4afaa49dc0e4e3f0e2646f2f4c13c8b5c485 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Tue, 23 May 2023 18:48:52 +0300 Subject: [PATCH 515/818] Update Kubernetes to v1.27 and Kustomize to v5.0 Signed-off-by: Stefan Prodan --- cmd/flux/build_artifact.go | 2 +- cmd/flux/diff_artifact.go | 5 +- cmd/flux/list_artifact.go | 2 +- cmd/flux/pull_artifact.go | 5 +- cmd/flux/push_artifact.go | 5 +- cmd/flux/tag_artifact.go | 2 +- go.mod | 144 ++--- go.sum | 601 +++++------------- pkg/bootstrap/bootstrap_plain_git.go | 14 +- .../kustomization/kustomization.go | 7 +- pkg/status/status.go | 5 +- tests/azure/go.mod | 64 +- tests/azure/go.sum | 407 +++--------- tests/azure/util_test.go | 4 +- 14 files changed, 375 insertions(+), 892 deletions(-) diff --git a/cmd/flux/build_artifact.go b/cmd/flux/build_artifact.go index 1692ce9b..4f26d402 100644 --- a/cmd/flux/build_artifact.go +++ b/cmd/flux/build_artifact.go @@ -87,7 +87,7 @@ func buildArtifactCmdRun(cmd *cobra.Command, args []string) error { logger.Actionf("building artifact from %s", path) - ociClient := oci.NewLocalClient() + ociClient := oci.NewClient(oci.DefaultOptions()) if err := ociClient.Build(buildArtifactArgs.output, path, buildArtifactArgs.ignorePaths); err != nil { return fmt.Errorf("bulding artifact failed, error: %w", err) } diff --git a/cmd/flux/diff_artifact.go b/cmd/flux/diff_artifact.go index c75d1c45..edfd9382 100644 --- a/cmd/flux/diff_artifact.go +++ b/cmd/flux/diff_artifact.go @@ -21,10 +21,11 @@ import ( "fmt" "os" - "github.com/fluxcd/flux2/v2/internal/flags" oci "github.com/fluxcd/pkg/oci/client" sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" "github.com/spf13/cobra" + + "github.com/fluxcd/flux2/v2/internal/flags" ) var diffArtifactCmd = &cobra.Command{ @@ -81,7 +82,7 @@ func diffArtifactCmdRun(cmd *cobra.Command, args []string) error { ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) defer cancel() - ociClient := oci.NewLocalClient() + ociClient := oci.NewClient(oci.DefaultOptions()) if diffArtifactArgs.provider.String() == sourcev1.GenericOCIProvider && diffArtifactArgs.creds != "" { logger.Actionf("logging in to registry with credentials") diff --git a/cmd/flux/list_artifact.go b/cmd/flux/list_artifact.go index 4e73928f..23a61b94 100644 --- a/cmd/flux/list_artifact.go +++ b/cmd/flux/list_artifact.go @@ -78,7 +78,7 @@ func listArtifactsCmdRun(cmd *cobra.Command, args []string) error { return err } - ociClient := oci.NewLocalClient() + ociClient := oci.NewClient(oci.DefaultOptions()) if listArtifactArgs.provider.String() == sourcev1.GenericOCIProvider && listArtifactArgs.creds != "" { logger.Actionf("logging in to registry with credentials") diff --git a/cmd/flux/pull_artifact.go b/cmd/flux/pull_artifact.go index 105ed580..d61f6dcb 100644 --- a/cmd/flux/pull_artifact.go +++ b/cmd/flux/pull_artifact.go @@ -21,10 +21,11 @@ import ( "fmt" "os" - "github.com/fluxcd/flux2/v2/internal/flags" sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" "github.com/spf13/cobra" + "github.com/fluxcd/flux2/v2/internal/flags" + oci "github.com/fluxcd/pkg/oci/client" ) @@ -82,7 +83,7 @@ func pullArtifactCmdRun(cmd *cobra.Command, args []string) error { ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) defer cancel() - ociClient := oci.NewLocalClient() + ociClient := oci.NewClient(oci.DefaultOptions()) if pullArtifactArgs.provider.String() == sourcev1.GenericOCIProvider && pullArtifactArgs.creds != "" { logger.Actionf("logging in to registry with credentials") diff --git a/cmd/flux/push_artifact.go b/cmd/flux/push_artifact.go index 98760f59..661577ed 100644 --- a/cmd/flux/push_artifact.go +++ b/cmd/flux/push_artifact.go @@ -23,12 +23,13 @@ import ( "os" "strings" - "github.com/fluxcd/flux2/v2/internal/flags" sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" reg "github.com/google/go-containerregistry/pkg/name" "github.com/spf13/cobra" "sigs.k8s.io/yaml" + "github.com/fluxcd/flux2/v2/internal/flags" + oci "github.com/fluxcd/pkg/oci/client" ) @@ -183,7 +184,7 @@ func pushArtifactCmdRun(cmd *cobra.Command, args []string) error { ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) defer cancel() - ociClient := oci.NewLocalClient() + ociClient := oci.NewClient(oci.DefaultOptions()) if pushArtifactArgs.provider.String() == sourcev1.GenericOCIProvider && pushArtifactArgs.creds != "" { logger.Actionf("logging in to registry with credentials") diff --git a/cmd/flux/tag_artifact.go b/cmd/flux/tag_artifact.go index cc330d46..c7b7ecea 100644 --- a/cmd/flux/tag_artifact.go +++ b/cmd/flux/tag_artifact.go @@ -78,7 +78,7 @@ func tagArtifactCmdRun(cmd *cobra.Command, args []string) error { ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) defer cancel() - ociClient := oci.NewLocalClient() + ociClient := oci.NewClient(oci.DefaultOptions()) if tagArtifactArgs.provider.String() == sourcev1.GenericOCIProvider && tagArtifactArgs.creds != "" { logger.Actionf("logging in to registry with credentials") diff --git a/go.mod b/go.mod index 438c66ba..549b7cba 100644 --- a/go.mod +++ b/go.mod @@ -3,10 +3,10 @@ module github.com/fluxcd/flux2/v2 go 1.18 require ( - github.com/Masterminds/semver/v3 v3.2.0 - github.com/ProtonMail/go-crypto v0.0.0-20230426101702-58e86b294756 + github.com/Masterminds/semver/v3 v3.2.1 + github.com/ProtonMail/go-crypto v0.0.0-20230518184743-7afd39499903 github.com/cyphar/filepath-securejoin v0.2.3 - github.com/distribution/distribution/v3 v3.0.0-20230327091844-0c958010ace2 + github.com/distribution/distribution/v3 v3.0.0-20230519140516-983358f8e250 github.com/fluxcd/go-git-providers v0.15.3 github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 github.com/fluxcd/helm-controller/api v0.33.0 @@ -14,45 +14,45 @@ require ( github.com/fluxcd/image-reflector-controller/api v0.27.2 github.com/fluxcd/kustomize-controller/api v1.0.0-rc.3 github.com/fluxcd/notification-controller/api v1.0.0-rc.3 - github.com/fluxcd/pkg/apis/event v0.4.1 - github.com/fluxcd/pkg/apis/meta v1.0.0 - github.com/fluxcd/pkg/git v0.11.0 - github.com/fluxcd/pkg/git/gogit v0.8.1 - github.com/fluxcd/pkg/kustomize v1.1.1 - github.com/fluxcd/pkg/oci v0.22.0 - github.com/fluxcd/pkg/runtime v0.35.0 + github.com/fluxcd/pkg/apis/event v0.5.0 + github.com/fluxcd/pkg/apis/meta v1.1.0 + github.com/fluxcd/pkg/git v0.12.1 + github.com/fluxcd/pkg/git/gogit v0.10.0 + github.com/fluxcd/pkg/kustomize v1.3.1 + github.com/fluxcd/pkg/oci v0.26.1 + github.com/fluxcd/pkg/runtime v0.38.1 github.com/fluxcd/pkg/sourceignore v0.3.3 - github.com/fluxcd/pkg/ssa v0.27.0 - github.com/fluxcd/pkg/ssh v0.7.3 - github.com/fluxcd/pkg/untar v0.2.0 - github.com/fluxcd/pkg/version v0.2.1 + github.com/fluxcd/pkg/ssa v0.28.1 + github.com/fluxcd/pkg/ssh v0.7.4 + github.com/fluxcd/pkg/untar v0.3.0 + github.com/fluxcd/pkg/version v0.2.2 github.com/fluxcd/source-controller/api v1.0.0-rc.3 github.com/gonvenience/bunt v1.3.5 github.com/gonvenience/ytbx v1.4.4 github.com/google/go-cmp v0.5.9 - github.com/google/go-containerregistry v0.14.0 - github.com/homeport/dyff v1.5.6 + github.com/google/go-containerregistry v0.15.2 + github.com/homeport/dyff v1.5.7 github.com/lucasb-eyer/go-colorful v1.2.0 github.com/manifoldco/promptui v0.9.0 github.com/mattn/go-shellwords v1.0.12 github.com/olekukonko/tablewriter v0.0.5 - github.com/onsi/gomega v1.27.6 + github.com/onsi/gomega v1.27.7 github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 github.com/spf13/cobra v1.7.0 github.com/spf13/pflag v1.0.5 github.com/theckman/yacspin v0.13.12 - golang.org/x/crypto v0.8.0 - golang.org/x/term v0.7.0 - k8s.io/api v0.26.3 - k8s.io/apiextensions-apiserver v0.26.3 - k8s.io/apimachinery v0.26.3 - k8s.io/cli-runtime v0.26.3 - k8s.io/client-go v0.26.3 - k8s.io/kubectl v0.26.3 + golang.org/x/crypto v0.9.0 + golang.org/x/term v0.8.0 + k8s.io/api v0.27.2 + k8s.io/apiextensions-apiserver v0.27.2 + k8s.io/apimachinery v0.27.2 + k8s.io/cli-runtime v0.27.2 + k8s.io/client-go v0.27.2 + k8s.io/kubectl v0.27.2 sigs.k8s.io/cli-utils v0.34.0 - sigs.k8s.io/controller-runtime v0.14.6 - sigs.k8s.io/kustomize/api v0.12.1 - sigs.k8s.io/kustomize/kyaml v0.13.9 + sigs.k8s.io/controller-runtime v0.15.0 + sigs.k8s.io/kustomize/api v0.13.4 + sigs.k8s.io/kustomize/kyaml v0.14.2 sigs.k8s.io/yaml v1.3.0 ) @@ -60,44 +60,44 @@ require ( replace gopkg.in/yaml.v3 => gopkg.in/yaml.v3 v3.0.1 require ( - github.com/Azure/azure-sdk-for-go/sdk/azcore v1.5.0-beta.1 // indirect - github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0-beta.4 // indirect - github.com/Azure/azure-sdk-for-go/sdk/internal v1.1.2 // indirect + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.6.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0 // indirect github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect - github.com/AzureAD/microsoft-authentication-library-for-go v0.9.0 // indirect - github.com/BurntSushi/toml v1.0.0 // indirect + github.com/AzureAD/microsoft-authentication-library-for-go v1.0.0 // indirect + github.com/BurntSushi/toml v1.2.1 // indirect github.com/MakeNowJust/heredoc v1.0.0 // indirect - github.com/Microsoft/go-winio v0.6.0 // indirect + github.com/Microsoft/go-winio v0.6.1 // indirect github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d // indirect github.com/acomagu/bufpipe v1.0.4 // indirect - github.com/aws/aws-sdk-go-v2 v1.17.7 // indirect - github.com/aws/aws-sdk-go-v2/config v1.18.19 // indirect - github.com/aws/aws-sdk-go-v2/credentials v1.13.18 // indirect - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.1 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.31 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.25 // indirect - github.com/aws/aws-sdk-go-v2/internal/ini v1.3.32 // indirect - github.com/aws/aws-sdk-go-v2/service/ecr v1.18.7 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.25 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.12.6 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.6 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.18.7 // indirect + github.com/aws/aws-sdk-go-v2 v1.18.0 // indirect + github.com/aws/aws-sdk-go-v2/config v1.18.25 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.13.24 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.3 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.33 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.27 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.3.34 // indirect + github.com/aws/aws-sdk-go-v2/service/ecr v1.18.11 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.27 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.12.10 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.10 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.19.0 // indirect github.com/aws/smithy-go v1.13.5 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bshuster-repo/logrus-logstash-hook v1.0.0 // indirect github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd // indirect github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b // indirect github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0 // indirect - github.com/cespare/xxhash/v2 v2.1.2 // indirect + github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/chai2010/gettext-go v1.0.2 // indirect github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e // indirect github.com/cloudflare/circl v1.3.3 // indirect github.com/containerd/stargz-snapshotter/estargz v0.14.3 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect - github.com/docker/cli v23.0.1+incompatible // indirect + github.com/docker/cli v23.0.5+incompatible // indirect github.com/docker/distribution v2.8.2+incompatible // indirect - github.com/docker/docker v23.0.3+incompatible // indirect + github.com/docker/docker v23.0.5+incompatible // indirect github.com/docker/docker-credential-helpers v0.7.0 // indirect github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c // indirect github.com/docker/go-metrics v0.0.1 // indirect @@ -111,7 +111,7 @@ require ( github.com/fatih/color v1.13.0 // indirect github.com/felixge/httpsnoop v1.0.3 // indirect github.com/fluxcd/pkg/apis/acl v0.1.0 // indirect - github.com/fluxcd/pkg/apis/kustomize v1.0.0 // indirect + github.com/fluxcd/pkg/apis/kustomize v1.1.0 // indirect github.com/fluxcd/pkg/tar v0.2.0 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/go-errors/errors v1.4.2 // indirect @@ -123,7 +123,7 @@ require ( github.com/go-openapi/jsonreference v0.20.1 // indirect github.com/go-openapi/swag v0.22.3 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang-jwt/jwt/v4 v4.4.3 // indirect + github.com/golang-jwt/jwt/v4 v4.5.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.3 // indirect github.com/gomodule/redigo v1.8.2 // indirect @@ -146,14 +146,14 @@ require ( github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/go-retryablehttp v0.7.2 // indirect github.com/hashicorp/golang-lru v0.5.4 // indirect - github.com/imdario/mergo v0.3.13 // indirect + github.com/imdario/mergo v0.3.15 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/kevinburke/ssh_config v1.2.0 // indirect - github.com/klauspost/compress v1.16.0 // indirect + github.com/klauspost/compress v1.16.5 // indirect github.com/kylelemons/godebug v1.1.0 // indirect github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect github.com/mailru/easyjson v0.7.7 // indirect @@ -167,28 +167,28 @@ require ( github.com/mitchellh/go-wordwrap v1.0.1 // indirect github.com/mitchellh/hashstructure v1.1.0 // indirect github.com/moby/spdystream v0.2.0 // indirect - github.com/moby/term v0.0.0-20221105221325-4eb28fa6025c // indirect + github.com/moby/term v0.0.0-20221205130635-1aeaba878587 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect - github.com/opencontainers/image-spec v1.1.0-rc2 // indirect + github.com/opencontainers/image-spec v1.1.0-rc3 // indirect github.com/peterbourgon/diskv v2.0.1+incompatible // indirect github.com/pjbgf/sha1cd v0.3.0 // indirect github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 // indirect github.com/pkg/errors v0.9.1 // indirect - github.com/prometheus/client_golang v1.14.0 // indirect - github.com/prometheus/client_model v0.3.0 // indirect - github.com/prometheus/common v0.37.0 // indirect - github.com/prometheus/procfs v0.8.0 // indirect + github.com/prometheus/client_golang v1.15.1 // indirect + github.com/prometheus/client_model v0.4.0 // indirect + github.com/prometheus/common v0.42.0 // indirect + github.com/prometheus/procfs v0.9.0 // indirect github.com/rivo/uniseg v0.2.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/sergi/go-diff v1.3.1 // indirect - github.com/sirupsen/logrus v1.9.0 // indirect - github.com/skeema/knownhosts v1.1.0 // indirect + github.com/sirupsen/logrus v1.9.2 // indirect + github.com/skeema/knownhosts v1.1.1 // indirect github.com/texttheater/golang-levenshtein v1.0.1 // indirect - github.com/vbatts/tar-split v0.11.2 // indirect + github.com/vbatts/tar-split v0.11.3 // indirect github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74 // indirect github.com/xanzy/go-gitlab v0.83.0 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect @@ -197,24 +197,24 @@ require ( github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50 // indirect github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f // indirect go.starlark.net v0.0.0-20221028183056-acb66ad56dd2 // indirect - golang.org/x/mod v0.9.0 // indirect - golang.org/x/net v0.9.0 // indirect + golang.org/x/mod v0.10.0 // indirect + golang.org/x/net v0.10.0 // indirect golang.org/x/oauth2 v0.7.0 // indirect - golang.org/x/sync v0.1.0 // indirect - golang.org/x/sys v0.7.0 // indirect + golang.org/x/sync v0.2.0 // indirect + golang.org/x/sys v0.8.0 // indirect golang.org/x/text v0.9.0 // indirect golang.org/x/time v0.3.0 // indirect - golang.org/x/tools v0.7.0 // indirect - gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect + golang.org/x/tools v0.9.1 // indirect + gomodules.xyz/jsonpatch/v2 v2.3.0 // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/protobuf v1.29.1 // indirect + google.golang.org/protobuf v1.30.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/component-base v0.26.3 // indirect - k8s.io/klog/v2 v2.90.1 // indirect - k8s.io/kube-openapi v0.0.0-20230109183929-3758b55a6596 // indirect + k8s.io/component-base v0.27.2 // indirect + k8s.io/klog/v2 v2.100.1 // indirect + k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f // indirect k8s.io/utils v0.0.0-20230406110748-d93618cff8a2 // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect diff --git a/go.sum b/go.sum index bfeecaaa..8791c64f 100644 --- a/go.sum +++ b/go.sum @@ -1,102 +1,67 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= -cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= -cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= -cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= -cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= -cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= -cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= -cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= -cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= -cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= -cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= -cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= -cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= -cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= -cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= -cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= -cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= -cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= -cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= -cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= -cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= -cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= -cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= -cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/AdaLogics/go-fuzz-headers v0.0.0-20230106234847-43070de90fa1 h1:EKPd1INOIyr5hWOWhvpmQpY6tKjeG0hT1s3AMC/9fic= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.5.0-beta.1 h1:yLM4ZIC+NRvzwFGpXjUbf5FhPBVxJgmYXkjePgNAx64= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.5.0-beta.1/go.mod h1:ON4tFdPTwRcgWEaVDrN3584Ef+b7GgSJaXxe5fW9t4M= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0-beta.4 h1:jpSh2461XzXBEw1MJwvVRJwZS0CAgqS0h6jBdoIFtLk= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0-beta.4/go.mod h1:oWa/ZXP08smIi12UyWVbVikBxoZHZCyxijZamTK1i8Q= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.1.2 h1:+5VZ72z0Qan5Bog5C+ZkgSqUbeVUd9wgtHOrIKuc5b8= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.1.2/go.mod h1:eWRD7oawr1Mu1sLCawqVc0CUiF43ia3qQMxLscsKQ9w= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.6.0 h1:8kDqDngH+DmVBiCtIjCFTGa7MBnsIOkF9IccInFEbjk= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.6.0/go.mod h1:bjGvMhVMb+EEm3VRNQawDMUyMMjo+S5ewNjflkep/0Q= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0 h1:vcYCAze6p19qBW7MhZybIsqD8sMV8js0NyQM8JDnVtg= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0/go.mod h1:OQeznEEkTZ9OrhHJoDD8ZDq51FHgXjqtP9z6bEwBq9U= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0 h1:sXr+ck84g/ZlZUOZiNELInmMgOsuGwdjjVkEIde0OtY= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0/go.mod h1:okt5dMMTOFjX/aovMlrjvvXoPMBVSPzk9185BT0+eZM= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= -github.com/AzureAD/microsoft-authentication-library-for-go v0.9.0 h1:UE9n9rkJF62ArLb1F3DEjRt8O3jLwMWdSoypKV4f3MU= -github.com/AzureAD/microsoft-authentication-library-for-go v0.9.0/go.mod h1:kgDmCTgBzIEPFElEF+FK0SdjAor06dRq2Go927dnQ6o= +github.com/AzureAD/microsoft-authentication-library-for-go v1.0.0 h1:OBhqkivkhkMqLPymWEppkm7vgPQY2XsHoEkaMQ0AdZY= +github.com/AzureAD/microsoft-authentication-library-for-go v1.0.0/go.mod h1:kgDmCTgBzIEPFElEF+FK0SdjAor06dRq2Go927dnQ6o= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/toml v1.0.0 h1:dtDWrepsVPfW9H/4y7dDgFc2MBUSeJhlaDtK13CxFlU= -github.com/BurntSushi/toml v1.0.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak= +github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/MakeNowJust/heredoc v1.0.0 h1:cXCdzVdstXyiTqTvfqk9SDHpKNjxuom+DOlyEeQ4pzQ= github.com/MakeNowJust/heredoc v1.0.0/go.mod h1:mG5amYoWBHf8vpLOuehzbGGw0EHxpZZ6lCpQ4fNJ8LE= -github.com/Masterminds/semver/v3 v3.2.0 h1:3MEsd0SM6jqZojhjLWWeBY+Kcjy9i6MQAeY7YgDP83g= -github.com/Masterminds/semver/v3 v3.2.0/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= +github.com/Masterminds/semver/v3 v3.2.1 h1:RN9w6+7QoMeJVGyfmbcgs28Br8cvmnucEXnY0rYXWg0= +github.com/Masterminds/semver/v3 v3.2.1/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= -github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= -github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= +github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= +github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4/go.mod h1:UBYPn8k0D56RtnR8RFQMjmh4KrZzWJ5o7Z9SYjossQ8= github.com/ProtonMail/go-crypto v0.0.0-20230217124315-7d5c6f04bbb8/go.mod h1:I0gYDMZ6Z5GRU7l58bNFSkPTFN6Yl12dsUlAZ8xy98g= -github.com/ProtonMail/go-crypto v0.0.0-20230426101702-58e86b294756 h1:L6S7kR7SlhQKplIBpkra3s6yhcZV51lhRnXmYc4HohI= -github.com/ProtonMail/go-crypto v0.0.0-20230426101702-58e86b294756/go.mod h1:8TI4H3IbrackdNgv+92dI+rhpCaLqM0IfpgCgenFvRE= +github.com/ProtonMail/go-crypto v0.0.0-20230518184743-7afd39499903 h1:ZK3C5DtzV2nVAQTx5S5jQvMeDqWtD1By5mOoyY/xJek= +github.com/ProtonMail/go-crypto v0.0.0-20230518184743-7afd39499903/go.mod h1:8TI4H3IbrackdNgv+92dI+rhpCaLqM0IfpgCgenFvRE= github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d h1:UrqY+r/OJnIp5u0s1SbQ8dVfLCZJsnvazdBP5hS4iRs= github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ= github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= github.com/acomagu/bufpipe v1.0.4 h1:e3H4WUzM3npvo5uv95QuJM3cQspFNtFBzvJ2oNjKIDQ= github.com/acomagu/bufpipe v1.0.4/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= -github.com/aws/aws-sdk-go-v2 v1.17.7 h1:CLSjnhJSTSogvqUGhIC6LqFKATMRexcxLZ0i/Nzk9Eg= -github.com/aws/aws-sdk-go-v2 v1.17.7/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw= -github.com/aws/aws-sdk-go-v2/config v1.18.19 h1:AqFK6zFNtq4i1EYu+eC7lcKHYnZagMn6SW171la0bGw= -github.com/aws/aws-sdk-go-v2/config v1.18.19/go.mod h1:XvTmGMY8d52ougvakOv1RpiTLPz9dlG/OQHsKU/cMmY= -github.com/aws/aws-sdk-go-v2/credentials v1.13.18 h1:EQMdtHwz0ILTW1hoP+EwuWhwCG1hD6l3+RWFQABET4c= -github.com/aws/aws-sdk-go-v2/credentials v1.13.18/go.mod h1:vnwlwjIe+3XJPBYKu1et30ZPABG3VaXJYr8ryohpIyM= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.1 h1:gt57MN3liKiyGopcqgNzJb2+d9MJaKT/q1OksHNXVE4= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.1/go.mod h1:lfUx8puBRdM5lVVMQlwt2v+ofiG/X6Ms+dy0UkG/kXw= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.31 h1:sJLYcS+eZn5EeNINGHSCRAwUJMFVqklwkH36Vbyai7M= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.31/go.mod h1:QT0BqUvX1Bh2ABdTGnjqEjvjzrCfIniM9Sc8zn9Yndo= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.25 h1:1mnRASEKnkqsntcxHaysxwgVoUUp5dkiB+l3llKnqyg= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.25/go.mod h1:zBHOPwhBc3FlQjQJE/D3IfPWiWaQmT06Vq9aNukDo0k= -github.com/aws/aws-sdk-go-v2/internal/ini v1.3.32 h1:p5luUImdIqywn6JpQsW3tq5GNOxKmOnEpybzPx+d1lk= -github.com/aws/aws-sdk-go-v2/internal/ini v1.3.32/go.mod h1:XGhIBZDEgfqmFIugclZ6FU7v75nHhBDtzuB4xB/tEi4= -github.com/aws/aws-sdk-go-v2/service/ecr v1.18.7 h1:oQ1Esut3iaL2Dydt2RBd9gbuUevToXpdTI+Uh1xXryI= -github.com/aws/aws-sdk-go-v2/service/ecr v1.18.7/go.mod h1:RHhgOMnMIkgB4TmxQat9obSnZ6fF1fuA27+itZKUi1o= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.25 h1:5LHn8JQ0qvjD9L9JhMtylnkcw7j05GDZqM9Oin6hpr0= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.25/go.mod h1:/95IA+0lMnzW6XzqYJRpjjsAbKEORVeO0anQqjd2CNU= -github.com/aws/aws-sdk-go-v2/service/sso v1.12.6 h1:5V7DWLBd7wTELVz5bPpwzYy/sikk0gsgZfj40X+l5OI= -github.com/aws/aws-sdk-go-v2/service/sso v1.12.6/go.mod h1:Y1VOmit/Fn6Tz1uFAeCO6Q7M2fmfXSCLeL5INVYsLuY= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.6 h1:B8cauxOH1W1v7rd8RdI/MWnoR4Ze0wIHWrb90qczxj4= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.6/go.mod h1:Lh/bc9XUf8CfOY6Jp5aIkQtN+j1mc+nExc+KXj9jx2s= -github.com/aws/aws-sdk-go-v2/service/sts v1.18.7 h1:bWNgNdRko2x6gqa0blfATqAZKZokPIeM1vfmQt2pnvM= -github.com/aws/aws-sdk-go-v2/service/sts v1.18.7/go.mod h1:JuTnSoeePXmMVe9G8NcjjwgOKEfZ4cOjMuT2IBT/2eI= +github.com/aws/aws-sdk-go-v2 v1.18.0 h1:882kkTpSFhdgYRKVZ/VCgf7sd0ru57p2JCxz4/oN5RY= +github.com/aws/aws-sdk-go-v2 v1.18.0/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw= +github.com/aws/aws-sdk-go-v2/config v1.18.25 h1:JuYyZcnMPBiFqn87L2cRppo+rNwgah6YwD3VuyvaW6Q= +github.com/aws/aws-sdk-go-v2/config v1.18.25/go.mod h1:dZnYpD5wTW/dQF0rRNLVypB396zWCcPiBIvdvSWHEg4= +github.com/aws/aws-sdk-go-v2/credentials v1.13.24 h1:PjiYyls3QdCrzqUN35jMWtUK1vqVZ+zLfdOa/UPFDp0= +github.com/aws/aws-sdk-go-v2/credentials v1.13.24/go.mod h1:jYPYi99wUOPIFi0rhiOvXeSEReVOzBqFNOX5bXYoG2o= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.3 h1:jJPgroehGvjrde3XufFIJUZVK5A2L9a3KwSFgKy9n8w= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.3/go.mod h1:4Q0UFP0YJf0NrsEuEYHpM9fTSEVnD16Z3uyEF7J9JGM= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.33 h1:kG5eQilShqmJbv11XL1VpyDbaEJzWxd4zRiCG30GSn4= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.33/go.mod h1:7i0PF1ME/2eUPFcjkVIwq+DOygHEoK92t5cDqNgYbIw= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.27 h1:vFQlirhuM8lLlpI7imKOMsjdQLuN9CPi+k44F/OFVsk= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.27/go.mod h1:UrHnn3QV/d0pBZ6QBAEQcqFLf8FAzLmoUfPVIueOvoM= +github.com/aws/aws-sdk-go-v2/internal/ini v1.3.34 h1:gGLG7yKaXG02/jBlg210R7VgQIotiQntNhsCFejawx8= +github.com/aws/aws-sdk-go-v2/internal/ini v1.3.34/go.mod h1:Etz2dj6UHYuw+Xw830KfzCfWGMzqvUTCjUj5b76GVDc= +github.com/aws/aws-sdk-go-v2/service/ecr v1.18.11 h1:wlTgmb/sCmVRJrN5De3CiHj4v/bTCgL5+qpdEd0CPtw= +github.com/aws/aws-sdk-go-v2/service/ecr v1.18.11/go.mod h1:Ce1q2jlNm8BVpjLaOnwnm5v2RClAbK6txwPljFzyW6c= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.27 h1:0iKliEXAcCa2qVtRs7Ot5hItA2MsufrphbRFlz1Owxo= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.27/go.mod h1:EOwBD4J4S5qYszS5/3DpkejfuK+Z5/1uzICfPaZLtqw= +github.com/aws/aws-sdk-go-v2/service/sso v1.12.10 h1:UBQjaMTCKwyUYwiVnUt6toEJwGXsLBI6al083tpjJzY= +github.com/aws/aws-sdk-go-v2/service/sso v1.12.10/go.mod h1:ouy2P4z6sJN70fR3ka3wD3Ro3KezSxU6eKGQI2+2fjI= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.10 h1:PkHIIJs8qvq0e5QybnZoG1K/9QTrLr9OsqCIo59jOBA= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.10/go.mod h1:AFvkxc8xfBe8XA+5St5XIHHrQQtkxqrRincx4hmMHOk= +github.com/aws/aws-sdk-go-v2/service/sts v1.19.0 h1:2DQLAKDteoEDI8zpCzqBMaZlJuoE9iTYD0gFmXVax9E= +github.com/aws/aws-sdk-go-v2/service/sts v1.19.0/go.mod h1:BgQOMsg8av8jset59jelyPW7NoZcZXLVpDsXunGDrk8= github.com/aws/smithy-go v1.13.5 h1:hgz0X/DX0dGqTYpGALqXJoRKRj5oQ7150i5FdTePzO8= github.com/aws/smithy-go v1.13.5/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= @@ -117,9 +82,8 @@ github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3k github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= -github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= +github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chai2010/gettext-go v1.0.2 h1:1Lwwip6Q2QGsAdl/ZKPCwTe9fe0CjlUbqj5bFNSjIRk= github.com/chai2010/gettext-go v1.0.2/go.mod h1:y+wnP2cHYaVj19NZhYKAwEMH2CI1gNHeQQ+5AjwawxA= github.com/chzyer/logex v1.1.10 h1:Swpa1K6QvQznwJRcfTfQJmTE72DqScAa40E+fbHEXEE= @@ -137,25 +101,24 @@ github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnht github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/containerd/stargz-snapshotter/estargz v0.14.3 h1:OqlDCK3ZVUO6C3B/5FSkDwbkEETK84kQgEeFwDC+62k= github.com/containerd/stargz-snapshotter/estargz v0.14.3/go.mod h1:KY//uOCIkSuNAHhJogcZtrNHdKrA99/FCCRjE3HD36o= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/creack/pty v1.1.11 h1:07n33Z8lZxZ2qwegKbObQohDhXDQxiMMz1NOUGYlesw= +github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= github.com/cyphar/filepath-securejoin v0.2.3 h1:YX6ebbZCZP7VkM3scTTokDgBL2TY741X51MTk3ycuNI= github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/distribution/distribution/v3 v3.0.0-20230327091844-0c958010ace2 h1:KTYNpKuqtdZJOobHigxfdikPdsBwddmzeRn3UMocznM= -github.com/distribution/distribution/v3 v3.0.0-20230327091844-0c958010ace2/go.mod h1:r5XLH1cp+Wau2jxdptkYsFvvvzPPQTIe8eUuQ0vq30Q= -github.com/dnaeon/go-vcr v1.1.0 h1:ReYa/UBrRyQdant9B4fNHGoCNKw6qh6P0fsdGmZpR7c= -github.com/docker/cli v23.0.1+incompatible h1:LRyWITpGzl2C9e9uGxzisptnxAn1zfZKXy13Ul2Q5oM= -github.com/docker/cli v23.0.1+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/distribution/distribution/v3 v3.0.0-20230519140516-983358f8e250 h1:B3eXeuNArF23dRKyO8RXRiL7YAJDus6B7bjXeYPt87k= +github.com/distribution/distribution/v3 v3.0.0-20230519140516-983358f8e250/go.mod h1:t1IxPNGdTGez+YGKyJyQrtSSqisfMIm1hnFhvMPlxtE= +github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI= +github.com/docker/cli v23.0.5+incompatible h1:ufWmAOuD3Vmr7JP2G5K3cyuNC4YZWiAsuDEvFVVDafE= +github.com/docker/cli v23.0.5+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v23.0.3+incompatible h1:9GhVsShNWz1hO//9BNg/dpMnZW25KydO4wtVxWAIbho= -github.com/docker/docker v23.0.3+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v23.0.5+incompatible h1:DaxtlTJjFSnLOXVNUBU1+6kXGz2lpDoEAH6QoxaSg8k= +github.com/docker/docker v23.0.5+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker-credential-helpers v0.7.0 h1:xtCHsjxogADNZcdv1pKUHXryefjlVRqWqIhk/uXJp0A= github.com/docker/docker-credential-helpers v0.7.0/go.mod h1:rETQfLdHNT3foU5kuNkFR1R1V12OJRRO5lzt2D1b5X0= github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c h1:+pKlWGMw7gf6bQ+oDZB4KHQFypsfjYlq/C4rfL7D3g8= @@ -167,7 +130,6 @@ github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNE github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/drone/envsubst v1.0.3 h1:PCIBwNDYjs50AsLZPYdfhSATKaRg/FJmDc2D6+C2x8g= github.com/drone/envsubst v1.0.3/go.mod h1:N2jZmlMufstn1KEqvbHjw40h1KyTmnVzHcSc9bFiJ2g= -github.com/elazarl/goproxy v0.0.0-20221015165544-a0805db90819 h1:RIB4cRk+lBqKK3Oy0r2gRX4ui7tuhiZq2SuTtTCi0/0= github.com/emicklei/go-restful/v3 v3.10.0 h1:X4gma4HM7hFm6WMeAsTfqA0GOfdNoCzBIkHGoRLGXuM= github.com/emicklei/go-restful/v3 v3.10.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= @@ -178,7 +140,6 @@ github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1m github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/evanphx/json-patch v0.5.2/go.mod h1:ZWS5hhDbVDyob71nXKNL0+PWn6ToqBHMikGIFbs31qQ= github.com/evanphx/json-patch v5.6.0+incompatible h1:jBYDEEiFBPxA0v50tFdvOzQQTCvpL6mnFh5mB2/l16U= github.com/evanphx/json-patch v5.6.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJCLunww= @@ -208,35 +169,35 @@ github.com/fluxcd/notification-controller/api v1.0.0-rc.3 h1:RxHGUo9nSXj+vXEYjo+ github.com/fluxcd/notification-controller/api v1.0.0-rc.3/go.mod h1:bfZCGyWq1SPmZSQSCuHRum5Z1olidWp8UbZkO5kcato= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= -github.com/fluxcd/pkg/apis/event v0.4.1 h1:63wP8NM/uA4680F4Ft8q8/0rJivX90i7FmMkRvUI8Is= -github.com/fluxcd/pkg/apis/event v0.4.1/go.mod h1:LHT1ZsbMrcHwCHQCaFtQviQBZwhMOAbTUPK6+KgBkFo= -github.com/fluxcd/pkg/apis/kustomize v1.0.0 h1:5T2b/mRZiGWtP7fvSU8gZOApIc06H6SdLX3MlsE6LRo= -github.com/fluxcd/pkg/apis/kustomize v1.0.0/go.mod h1:XaDYlKxrf9D2zZWcZ0BnSIqGtcm8mdNtJGzZWYjCnQo= -github.com/fluxcd/pkg/apis/meta v1.0.0 h1:i9IGHd/VNEZELX7mepkiYFbJxs2J5znaB4cN9z2nPm8= -github.com/fluxcd/pkg/apis/meta v1.0.0/go.mod h1:04ZdpZYm1x+aL93K4daNHW1UX6E8K7Gyf5za9OhrE+U= -github.com/fluxcd/pkg/git v0.11.0 h1:GvB+3QOB8xbF5WNjVrkskseOnsZBuqSOzW3VxfsHuX4= -github.com/fluxcd/pkg/git v0.11.0/go.mod h1:VHRVlrZMHNoWBlaSAWxlGH6Vwlb9VRazUhPUykviHwY= -github.com/fluxcd/pkg/git/gogit v0.8.1 h1:Q3EV2WBX6HiXSmsHyrwFzwl82gO4ZtFwb675iQPWwVc= -github.com/fluxcd/pkg/git/gogit v0.8.1/go.mod h1:5M27gCl0gyo6l+ht9HwZSzimPY3LahKVIJ7/1vCCctg= -github.com/fluxcd/pkg/gittestserver v0.8.1 h1:FMqnZBuS/11+9NhtLv9UAg+wm/v0Nf+hHeUOi2wJR3Q= -github.com/fluxcd/pkg/kustomize v1.1.1 h1:hYFJGi+fiaecY4gXvx52fumlvDEq/1RdFbaev67oBhE= -github.com/fluxcd/pkg/kustomize v1.1.1/go.mod h1:i+Z9iPAoSz28oH0FmDI73iqZ3oXZxQR2O3HfhdsWhfo= -github.com/fluxcd/pkg/oci v0.22.0 h1:6QRvCj1YXGEGXHyVkmKiBvYxsE0sEjUrpFknM513MbQ= -github.com/fluxcd/pkg/oci v0.22.0/go.mod h1:y0jUgMqb6ionfX+8AjhnoG8D6hSSx4elhtrQ7Uo0WzI= -github.com/fluxcd/pkg/runtime v0.35.0 h1:9PYLcul8qdfLYQArcYpHe/QuMqyhAGGFN9F7uY/QVX4= -github.com/fluxcd/pkg/runtime v0.35.0/go.mod h1:sAaSTH8RHj3Y99xj0AtAndDTe5cv0DP4enyLV62EO78= +github.com/fluxcd/pkg/apis/event v0.5.0 h1:aAoo3AcWMh6hFfhxFED2TbyIk9590C7l17eh3Ys5I3I= +github.com/fluxcd/pkg/apis/event v0.5.0/go.mod h1:hiVliecUNHIeE128NFEgyoNxLcv/TWzrYHtf0ODj8fw= +github.com/fluxcd/pkg/apis/kustomize v1.1.0 h1:Fbv4dCB57r2+fiusozN7at8r7upTz58Z4wWw1njHPyU= +github.com/fluxcd/pkg/apis/kustomize v1.1.0/go.mod h1:CAe9Mjf9KVoTm1V4wpvq/FGXFDSnpBwfww/IG7mw3gM= +github.com/fluxcd/pkg/apis/meta v1.1.0 h1:vYU1mvUzztnQyTzZOLHQ3wm/tXd7E1QZ2V91zuVJPsQ= +github.com/fluxcd/pkg/apis/meta v1.1.0/go.mod h1:/QwCotRKL/BT6RSa4O75FlYW14fU8eRfKnoagzbkmL4= +github.com/fluxcd/pkg/git v0.12.1 h1:3HsCs+r/Au+P6870IfB1Cf6ifz6w1PzSm2xYnB+GW/4= +github.com/fluxcd/pkg/git v0.12.1/go.mod h1:HUG9ZSYSuIAfZbYTPcYptmlaWCfgSQYyzfQ5/WUQVQk= +github.com/fluxcd/pkg/git/gogit v0.10.0 h1:yL+mjSYW0SptgLQZE/x/hoSo9KulfHR524Qk2vZJKLM= +github.com/fluxcd/pkg/git/gogit v0.10.0/go.mod h1:BOEHZtgbHM5pzKTBIWbtTx2j2artkbLtKssFlZJDFu0= +github.com/fluxcd/pkg/gittestserver v0.8.3 h1:ehqTcqXyN095+AK1XCJDQBljeaOhatF9bc0lFblThCw= +github.com/fluxcd/pkg/kustomize v1.3.1 h1:xOltPfO7/3h+bRMI90sTYgs/LI5VeW9pPMUMpZbo2HI= +github.com/fluxcd/pkg/kustomize v1.3.1/go.mod h1:n9QJcwioLTWggJ+TYcVFa4jR7n0hRU+KeNA3zTWh9bo= +github.com/fluxcd/pkg/oci v0.26.1 h1:MMEo751h8FF7yTbRkbJ1piXbOyFjlBOaGpPCmaWDWAg= +github.com/fluxcd/pkg/oci v0.26.1/go.mod h1:WJRW6EbcYv5DC8PCGbIIviv1SxgCtyY9xai7GOERIKs= +github.com/fluxcd/pkg/runtime v0.38.1 h1:deY7LP2e1UfHXmxNFFzY6MAbqdLWlRgvK9f/PIXyY5Y= +github.com/fluxcd/pkg/runtime v0.38.1/go.mod h1:x7bNbCDuvErmqD3gPNgGDI/ovjHBwvNPiwmAJuIMqNM= github.com/fluxcd/pkg/sourceignore v0.3.3 h1:Ue29JAuPECEYdvIqdpXpQaDxpeySn7amarLArp7XoIs= github.com/fluxcd/pkg/sourceignore v0.3.3/go.mod h1:yuJzKggph0Bdbk9LgXjJQhvJZSTJV/1vS7mJuB7mPa0= -github.com/fluxcd/pkg/ssa v0.27.0 h1:BJnWDy3xDtYD2U+sVZPkoh6PfnQKoXsklO0pzojU8XU= -github.com/fluxcd/pkg/ssa v0.27.0/go.mod h1:fxvmVf4FxodJi5lTglMcL8JsF6hfJLG99C56/CgchH0= -github.com/fluxcd/pkg/ssh v0.7.3 h1:Dhs+nXdp806lBriUJtPyRi0SVIVWbJafJGD/qQ71GiY= -github.com/fluxcd/pkg/ssh v0.7.3/go.mod h1:/z5ZNgQz+h9s/2nNFKAcZDHtZRMA1nj5YcriGDUOoLY= +github.com/fluxcd/pkg/ssa v0.28.1 h1:h5r5irAgDjgkmIqagOLOa/U7/Rx2fT2NKIb+vDTYOMg= +github.com/fluxcd/pkg/ssa v0.28.1/go.mod h1:o55eBzWz7P/tqnCn5c622RZvjTP/GqvitqZUbsMIRwk= +github.com/fluxcd/pkg/ssh v0.7.4 h1:8GYneCKH2dxrHQBalcDgOCC2NtqD0JO91FlWgvnzrfo= +github.com/fluxcd/pkg/ssh v0.7.4/go.mod h1:9Syc8nVJaZEToPTU4E99j0jZ99w39oZtov+uiNX17sc= github.com/fluxcd/pkg/tar v0.2.0 h1:HEUHgONQYsJGeZZ4x6h5nQU9Aox1I4T3bOp1faWTqf8= github.com/fluxcd/pkg/tar v0.2.0/go.mod h1:w0/TOC7kwBJhnSJn7TCABkc/I7ib1f2Yz6vOsbLBnhw= -github.com/fluxcd/pkg/untar v0.2.0 h1:sJXU+FbJcNUb2ffLJNjeR3hwt3X2loVpOMlCUjyFw6E= -github.com/fluxcd/pkg/untar v0.2.0/go.mod h1:33AyoWaPpjX/xXpczcfhQh2AkB63TFwiR2YwROtv23E= -github.com/fluxcd/pkg/version v0.2.1 h1:RRH7+6qiWHdTvRNwpoBmilnubJ2C4FZYGgy5wTDVKVc= -github.com/fluxcd/pkg/version v0.2.1/go.mod h1:UmUYHDz4BxHQMesMUx3gYVrT2Wf66H49JpTg/PW+/OY= +github.com/fluxcd/pkg/untar v0.3.0 h1:FOGc69nBvasLjFu5Imdc7Kl/U/gRdIyyF2ZkD9gKuXI= +github.com/fluxcd/pkg/untar v0.3.0/go.mod h1:ClGpWYeDidYETkl048vCgHlsNtn5BHYHvMmQdadRGKs= +github.com/fluxcd/pkg/version v0.2.2 h1:ZpVXECeLA5hIQMft11iLp6gN3cKcz6UNuVTQPw/bRdI= +github.com/fluxcd/pkg/version v0.2.2/go.mod h1:NGnh/no8S6PyfCDxRFrPY3T5BUnqP48MxfxNRU0z8C0= github.com/fluxcd/source-controller/api v1.0.0-rc.3 h1:zfCUEJDN0VxHRoJGjnqlTyVe61ZmImVBOzn14tepzSU= github.com/fluxcd/source-controller/api v1.0.0-rc.3/go.mod h1:CvGNdS8g/MqwpERUK6aJp4lndsrm+JBzGpoyyZ4u0c8= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= @@ -255,21 +216,13 @@ github.com/go-git/go-git-fixtures/v4 v4.3.1 h1:y5z6dd3qi8Hl+stezc8p3JxDkoTRqMAlK github.com/go-git/go-git-fixtures/v4 v4.3.1/go.mod h1:8LHG1a3SRW71ettAD/jW13h8c6AqjVSeL11RAdgaqpo= github.com/go-git/go-git/v5 v5.6.1 h1:q4ZRqQl4pR/ZJHc1L5CFjGA1a10u76aV1iC+nh+bHsk= github.com/go-git/go-git/v5 v5.6.1/go.mod h1:mvyoL6Unz0PiTQrGQfSfiLFhBH1c1e84ylC2MDs4ee8= -github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= -github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= -github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/zapr v1.2.3 h1:a9vnzlIBPQBBkeaR9IuMUfmVOrQlkoC4YfPoFkX3T7A= +github.com/go-logr/zapr v1.2.4 h1:QHVo+6stLbfJmYGkQ7uGHUCu5hnAFAj6mDe6Ea0SeOo= github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE= github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= github.com/go-openapi/jsonreference v0.20.1 h1:FBLnyygC4/IZZr893oiomc9XaghoveYTrLC1F86HID8= @@ -282,27 +235,16 @@ github.com/gofrs/uuid v4.2.0+incompatible h1:yyYWMnhkhrKwwr8gAOcOCYxOOscHgDS9yZg github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang-jwt/jwt/v4 v4.4.3 h1:Hxl6lhQFj4AnOX6MLrsCb/+7tCj7DxP7VA+2rDIq5AU= -github.com/golang-jwt/jwt/v4 v4.4.3/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= +github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= +github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= @@ -329,8 +271,6 @@ github.com/gonvenience/wrap v1.1.2 h1:xPKxNwL1HCguwyM+HlP/1CIuc9LRd7k8RodLwe9YTZ github.com/gonvenience/wrap v1.1.2/go.mod h1:GiryBSXoI3BAAhbWD1cZVj7RZmtiu0ERi/6R6eJfslI= github.com/gonvenience/ytbx v1.4.4 h1:jQopwyaLsVGuwdxSiN4WkXjsEaFNPJ3V4lUj7eyEpzo= github.com/gonvenience/ytbx v1.4.4/go.mod h1:w37+MKCPcCMY/jpPNmEklD4xKqrOAVBO6kIWW2+uI6M= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= github.com/google/gnostic v0.6.9 h1:ZK/5VhkoX835RikCHpSUJV9a+S3e1zLh59YnyWeBW+0= @@ -339,17 +279,15 @@ github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5a github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-containerregistry v0.14.0 h1:z58vMqHxuwvAsVwvKEkmVBz2TlgBgH5k6koEXBtlYkw= -github.com/google/go-containerregistry v0.14.0/go.mod h1:aiJ2fp/SXvkWgmYHioXnbMdlgB8eXiiYOY55gfN91Wk= +github.com/google/go-containerregistry v0.15.2 h1:MMkSh+tjSdnmJZO7ljvEqV1DjfekB6VUEAZgy3a+TQE= +github.com/google/go-containerregistry v0.15.2/go.mod h1:wWK+LnOv4jXMM23IT/F1wdYftGWGr47Is8CG+pmHK1Q= github.com/google/go-github/v49 v49.1.0 h1:LFkMgawGQ8dfzWLH/rNE0b3u1D3n6/dw7ZmrN3b+YFY= github.com/google/go-github/v49 v49.1.0/go.mod h1:MUUzHPrhGniB6vUKa27y37likpipzG+BXXJbG04J334= github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= @@ -357,24 +295,12 @@ github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17 github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20230323073829-e72429f035bd h1:r8yyd+DJDmsUhGrRBxH5Pj7KeFK5l+Y3FsgT8keqKtk= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/pprof v0.0.0-20230406165453-00490a63f317 h1:hFhpt7CTmR3DX+b4R19ydQFtofxT0Sv3QsKNMVQYTMQ= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= @@ -394,15 +320,13 @@ github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+l github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-retryablehttp v0.7.2 h1:AcYqCvkpalPnPF2pn0KamgwamS42TqUDDYFRKq/RAd0= github.com/hashicorp/go-retryablehttp v0.7.2/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/homeport/dyff v1.5.6 h1:6PNzGM0azeYXs401RZSLyIUS4sIX+YY3WBEZ3bnzkiE= -github.com/homeport/dyff v1.5.6/go.mod h1:cMmplDz/DeUWPB4T/sD9GDpuTnMD2nk3rjn2f+5roEU= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk= +github.com/homeport/dyff v1.5.7 h1:24IrdSAb2fprR67XHMIagGoc1c4VNBV9ibNFKICsSis= +github.com/homeport/dyff v1.5.7/go.mod h1:AfPyh52slslbDkh1fy0MGIbKTiUy/2xbM1Zos5HZTm4= github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= +github.com/imdario/mergo v0.3.15 h1:M8XP7IuFNsqUx6VPK2P9OSmsYsI/YFaGil0uD21V3dM= +github.com/imdario/mergo v0.3.15/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= @@ -415,30 +339,23 @@ github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGw github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= -github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.16.0 h1:iULayQNOReoYUe+1qtKOqw9CwJv3aNQu8ivo7lw1HU4= -github.com/klauspost/compress v1.16.0/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/klauspost/compress v1.16.5 h1:IFV2oUNUzZaz+XyusxpLzpzS8Pt5rh0Z16For/djlyI= +github.com/klauspost/compress v1.16.5/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= @@ -484,8 +401,8 @@ github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f h1:2+myh5ml7lgEU/5 github.com/mmcloughlin/avo v0.5.0/go.mod h1:ChHFdoV7ql95Wi7vuq2YT1bwCJqiWdZrQ1im3VujLYM= github.com/moby/spdystream v0.2.0 h1:cjW1zVyyoiM0T7b6UoySUFqzXMoqRckQtXwGPiBhOM8= github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= -github.com/moby/term v0.0.0-20221105221325-4eb28fa6025c h1:RC8WMpjonrBfyAh6VN/POIPtYD5tRAq0qMqCRjQNK+g= -github.com/moby/term v0.0.0-20221105221325-4eb28fa6025c/go.mod h1:9OcmHNQQUTbk4XCffrLgN1NEKc2mh5u++biHVrvHsSU= +github.com/moby/term v0.0.0-20221205130635-1aeaba878587 h1:HfkjXDfhgVaN5rmueG8cL8KKeFNecRCXFhaJ2qZ5SKA= +github.com/moby/term v0.0.0-20221205130635-1aeaba878587/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -498,20 +415,19 @@ github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00/go.mod github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= -github.com/onsi/ginkgo/v2 v2.9.2 h1:BA2GMJOtfGAfagzYtrAlufIP0lq6QERkFmHLMLPwFSU= -github.com/onsi/gomega v1.27.6 h1:ENqfyGeS5AX/rlXDd/ETokDz93u0YufY1Pgxuy/PvWE= -github.com/onsi/gomega v1.27.6/go.mod h1:PIQNjfQwkP3aQAH7lf7j87O/5FiNr+ZR8+ipb+qQlhg= +github.com/onsi/ginkgo/v2 v2.9.5 h1:+6Hr4uxzP4XIUyAkg61dWBw8lb/gc4/X5luuxN/EC+Q= +github.com/onsi/gomega v1.27.7 h1:fVih9JD6ogIiHUN6ePK7HJidyEDpWGVB5mzM7cWNXoU= +github.com/onsi/gomega v1.27.7/go.mod h1:1p8OOlwo2iUUDsHnOrjE5UKYJ+e3W8eQ3qSlRahPmr4= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= -github.com/opencontainers/image-spec v1.1.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= -github.com/opencontainers/image-spec v1.1.0-rc2/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= -github.com/otiai10/copy v1.9.0 h1:7KFNiCgZ91Ru4qW4CWPf/7jqtxLagGRmIxWldPP9VY4= +github.com/opencontainers/image-spec v1.1.0-rc3 h1:fzg1mXZFj8YdPeNkRXMg+zb88BFV0Ys52cJydRwBkb8= +github.com/opencontainers/image-spec v1.1.0-rc3/go.mod h1:X4pATf0uXsnn3g5aiGIsVnJBR4mxhKzfwmvK/B2NTm8= +github.com/otiai10/copy v1.11.0 h1:OKBD80J/mLBrwnzXqGtFCzprFSGioo30JcmR4APsNwc= github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= @@ -530,51 +446,39 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= -github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= -github.com/prometheus/client_golang v1.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw= -github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= +github.com/prometheus/client_golang v1.15.1 h1:8tXpTmJbyH5lydzFPoxSIJ0J46jdh3tylbvM1xCv0LI= +github.com/prometheus/client_golang v1.15.1/go.mod h1:e9yaBhRPU2pPNsZwE+JdQl0KEt1N9XgF6zxWmaC0xOk= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4= -github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= +github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUooCfx1yqY= +github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU= github.com/prometheus/common v0.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.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= -github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= -github.com/prometheus/common v0.37.0 h1:ccBbHCgIiT9uSoFY0vX8H3zsNR5eLt17/RQLUvn8pXE= -github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= +github.com/prometheus/common v0.42.0 h1:EKsfXEYo4JpWMHH5cg+KOUWeuJSov1Id8zGR8eeI1YM= +github.com/prometheus/common v0.42.0/go.mod h1:xBwqVerjNdUDjgODMpudtOMwlOwf2SaTr1yjz4b7Zbc= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= -github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo= -github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= +github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= +github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= -github.com/skeema/knownhosts v1.1.0 h1:Wvr9V0MxhjRbl3f9nMnKnFfiWTJmtECJ9Njkea3ysW0= +github.com/sirupsen/logrus v1.9.2 h1:oxx1eChJGI6Uks2ZC4W1zpLlVgqB8ner4EuQwV4Ik1Y= +github.com/sirupsen/logrus v1.9.2/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/skeema/knownhosts v1.1.0/go.mod h1:sKFq3RD6/TKZkSWn8boUbDC7Qkgcv+8XXijpFO6roag= +github.com/skeema/knownhosts v1.1.1 h1:MTk78x9FPgDFVFkDLTrsnnfCJl7g1C/nnKvePgrIngE= +github.com/skeema/knownhosts v1.1.1/go.mod h1:g4fPeYpque7P0xefxtGzV81ihjC8sX2IqpAoNkjxbMo= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= @@ -595,14 +499,14 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= +github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY= github.com/texttheater/golang-levenshtein v1.0.1 h1:+cRNoVrfiwufQPhoMzB6N0Yf/Mqajr6t1lOv8GyGE2U= github.com/texttheater/golang-levenshtein v1.0.1/go.mod h1:PYAKrbF5sAiq9wd+H82hs7gNaen0CplQ9uvm6+enD/8= github.com/theckman/yacspin v0.13.12 h1:CdZ57+n0U6JMuh2xqjnjRq5Haj6v1ner2djtLQRzJr4= github.com/theckman/yacspin v0.13.12/go.mod h1:Rd2+oG2LmQi5f3zC3yeZAOl245z8QOvrH4OPOJNZxLg= -github.com/urfave/cli v1.22.4/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/vbatts/tar-split v0.11.2 h1:Via6XqJr0hceW4wff3QRzD5gAk/tatMw/4ZA7cTlIME= -github.com/vbatts/tar-split v0.11.2/go.mod h1:vV3ZuO2yWSVsz+pfFzDG/upWH1JhjOiEaWq6kXyQ3VI= +github.com/urfave/cli v1.22.12/go.mod h1:sSBEIC79qR6OvcmsD4U3KABeOTxDqQtdDnaFuUN30b8= +github.com/vbatts/tar-split v0.11.3 h1:hLFqsOLQ1SsppQNTMpkpPXClLDfC2A3Zgy9OUU+RVck= +github.com/vbatts/tar-split v0.11.3/go.mod h1:9QlHN18E+fEH7RdG+QAJJcuya3rqT7eXSTY7wGrAokY= github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74 h1:JwtAtbp7r/7QSyGz8mKUbYJBg2+6Cd7OjM8o/GNOcVo= github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74/go.mod h1:RmMWU37GKR2s6pgrIEB4ixgpVCt/cf7dnJv3fuH1J1c= github.com/xanzy/go-gitlab v0.83.0 h1:37p0MpTPNbsTMKX/JnmJtY8Ch1sFiJzVF342+RvZEGw= @@ -615,9 +519,7 @@ github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1: github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= github.com/xlab/treeprint v1.1.0 h1:G/1DjNkPpfZCFt9CSh6b5/nY4VimlbHF3Rh4obvtzDk= github.com/xlab/treeprint v1.1.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd/WEJu0= -github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43 h1:+lm10QQTNSBd8DVTNGHx7o/IKu9HYDvLMffDhbyLccI= @@ -626,23 +528,16 @@ github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50 h1:hlE8//ciYMzt github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50/go.mod h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96TguQh0+r/ssA= github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f h1:ERexzlUfuTvpE74urLSbIQW0Z/6hF9t8U4NsJLaioAY= github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.starlark.net v0.0.0-20221028183056-acb66ad56dd2 h1:5/KzhcSqd4UgY51l17r7C5g/JiE6DRw1Vq7VJfQHuMc= go.starlark.net v0.0.0-20221028183056-acb66ad56dd2/go.mod h1:kIVgS18CjmEC3PqMd5kaJSGEifyV/CeB9x506ZJ1Vbk= go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= -go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk= +go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A= go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= golang.org/x/arch v0.1.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= @@ -652,43 +547,19 @@ golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.8.0 h1:pd9TJtTueMTVQXzk8E2XESSMQDj/U7OUu0PqJqPXQjQ= -golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE= +golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g= +golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= -golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -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/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= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= -golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= -golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.9.0 h1:KENHtAZL2y3NLMYZeHY9DW8HW8V+kQyJsY/V9JlKvCs= -golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk= +golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -696,100 +567,50 @@ golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= 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.9.0 h1:aWJ/m6xSmxWBx+V0XRHTlrYrPG56jKsLdTFmsSsCzOM= -golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= +golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= 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= -golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= golang.org/x/oauth2 v0.7.0 h1:qe6s0zUXlPX80/dITx3440hWZ7GwMwgDDyrSGTPJG/g= golang.org/x/oauth2 v0.7.0/go.mod h1:hPLQkd9LyjfXTiRohC/41GhcFqxisoUQ99sCUOHO9x4= 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= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI= +golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -797,27 +618,25 @@ golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220906165534-d0df966e6959/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU= -golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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= golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -825,11 +644,9 @@ golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuX golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/term v0.7.0 h1:BEvjmm5fURWqcfbSKTdpkDXYBrUS1c0m8agp14W48vQ= -golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= -golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/term v0.8.0 h1:n5xxQn2i3PC0yLAbjTpNT85q/Kgzcr2gIoX9OrJUols= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -840,131 +657,40 @@ golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.7.0 h1:W4OVu8VVOaIO0yzWMNdepAulS7YfoS3Zabrm8DOXXU4= -golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= +golang.org/x/tools v0.9.1 h1:8WMNJAz3zrtPmnYC7ISf5dEn3MT0gY7jBJfw27yrrLo= +golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gomodules.xyz/jsonpatch/v2 v2.2.0 h1:4pT439QV83L+G9FkcCriY6EkpcK6r6bK+A5FBUMI7qY= -gomodules.xyz/jsonpatch/v2 v2.2.0/go.mod h1:WXp+iVDkoLQqPudfQ9GBlwB2eZ5DKOnjQZCYdOS8GPY= -google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= -google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= -google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +gomodules.xyz/jsonpatch/v2 v2.3.0 h1:8NFhfS6gzxNqjLIYnZxg319wZ5Qjnx4m/CcX+Klzazc= +gomodules.xyz/jsonpatch/v2 v2.3.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= -google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= 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= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= @@ -976,21 +702,18 @@ google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzi google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.29.1 h1:7QBf+IK2gx70Ap/hDsOmam3GE0v9HicjfEdAxE62UoM= -google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= +google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= @@ -1000,9 +723,7 @@ gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= @@ -1010,46 +731,38 @@ gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= gotest.tools/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -k8s.io/api v0.26.3 h1:emf74GIQMTik01Aum9dPP0gAypL8JTLl/lHa4V9RFSU= -k8s.io/api v0.26.3/go.mod h1:PXsqwPMXBSBcL1lJ9CYDKy7kIReUydukS5JiRlxC3qE= -k8s.io/apiextensions-apiserver v0.26.3 h1:5PGMm3oEzdB1W/FTMgGIDmm100vn7IaUP5er36dB+YE= -k8s.io/apiextensions-apiserver v0.26.3/go.mod h1:jdA5MdjNWGP+njw1EKMZc64xAT5fIhN6VJrElV3sfpQ= -k8s.io/apimachinery v0.26.3 h1:dQx6PNETJ7nODU3XPtrwkfuubs6w7sX0M8n61zHIV/k= -k8s.io/apimachinery v0.26.3/go.mod h1:ats7nN1LExKHvJ9TmwootT00Yz05MuYqPXEXaVeOy5I= -k8s.io/cli-runtime v0.26.3 h1:3ULe0oI28xmgeLMVXIstB+ZL5CTGvWSMVMLeHxitIuc= -k8s.io/cli-runtime v0.26.3/go.mod h1:5YEhXLV4kLt/OSy9yQwtSSNZU2Z7aTEYta1A+Jg4VC4= -k8s.io/client-go v0.26.3 h1:k1UY+KXfkxV2ScEL3gilKcF7761xkYsSD6BC9szIu8s= -k8s.io/client-go v0.26.3/go.mod h1:ZPNu9lm8/dbRIPAgteN30RSXea6vrCpFvq+MateTUuQ= -k8s.io/component-base v0.26.3 h1:oC0WMK/ggcbGDTkdcqefI4wIZRYdK3JySx9/HADpV0g= -k8s.io/component-base v0.26.3/go.mod h1:5kj1kZYwSC6ZstHJN7oHBqcJC6yyn41eR+Sqa/mQc8E= -k8s.io/klog/v2 v2.90.1 h1:m4bYOKall2MmOiRaR1J+We67Do7vm9KiQVlT96lnHUw= -k8s.io/klog/v2 v2.90.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= -k8s.io/kube-openapi v0.0.0-20230109183929-3758b55a6596 h1:8cNCQs+WqqnSpZ7y0LMQPKD+RZUHU17VqLPMW3qxnxc= -k8s.io/kube-openapi v0.0.0-20230109183929-3758b55a6596/go.mod h1:/BYxry62FuDzmI+i9B+X2pqfySRmSOW2ARmj5Zbqhj0= -k8s.io/kubectl v0.26.3 h1:bZ5SgFyeEXw6XTc1Qji0iNdtqAC76lmeIIQULg2wNXM= -k8s.io/kubectl v0.26.3/go.mod h1:02+gv7Qn4dupzN3fi/9OvqqdW+uG/4Zi56vc4Zmsp1g= +k8s.io/api v0.27.2 h1:+H17AJpUMvl+clT+BPnKf0E3ksMAzoBBg7CntpSuADo= +k8s.io/api v0.27.2/go.mod h1:ENmbocXfBT2ADujUXcBhHV55RIT31IIEvkntP6vZKS4= +k8s.io/apiextensions-apiserver v0.27.2 h1:iwhyoeS4xj9Y7v8YExhUwbVuBhMr3Q4bd/laClBV6Bo= +k8s.io/apiextensions-apiserver v0.27.2/go.mod h1:Oz9UdvGguL3ULgRdY9QMUzL2RZImotgxvGjdWRq6ZXQ= +k8s.io/apimachinery v0.27.2 h1:vBjGaKKieaIreI+oQwELalVG4d8f3YAMNpWLzDXkxeg= +k8s.io/apimachinery v0.27.2/go.mod h1:XNfZ6xklnMCOGGFNqXG7bUrQCoR04dh/E7FprV6pb+E= +k8s.io/cli-runtime v0.27.2 h1:9HI8gfReNujKXt16tGOAnb8b4NZ5E+e0mQQHKhFGwYw= +k8s.io/cli-runtime v0.27.2/go.mod h1:9UecpyPDTkhiYY4d9htzRqN+rKomJgyb4wi0OfrmCjw= +k8s.io/client-go v0.27.2 h1:vDLSeuYvCHKeoQRhCXjxXO45nHVv2Ip4Fe0MfioMrhE= +k8s.io/client-go v0.27.2/go.mod h1:tY0gVmUsHrAmjzHX9zs7eCjxcBsf8IiNe7KQ52biTcQ= +k8s.io/component-base v0.27.2 h1:neju+7s/r5O4x4/txeUONNTS9r1HsPbyoPBAtHsDCpo= +k8s.io/component-base v0.27.2/go.mod h1:5UPk7EjfgrfgRIuDBFtsEFAe4DAvP3U+M8RTzoSJkpo= +k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg= +k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f h1:2kWPakN3i/k81b0gvD5C5FJ2kxm1WrQFanWchyKuqGg= +k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f/go.mod h1:byini6yhqGC14c3ebc/QwanvYwhuMWF6yz2F8uwW8eg= +k8s.io/kubectl v0.27.2 h1:sSBM2j94MHBFRWfHIWtEXWCicViQzZsb177rNsKBhZg= +k8s.io/kubectl v0.27.2/go.mod h1:GCOODtxPcrjh+EC611MqREkU8RjYBh10ldQCQ6zpFKw= k8s.io/utils v0.0.0-20230406110748-d93618cff8a2 h1:qY1Ad8PODbnymg2pRbkyMT/ylpTrCM8P2RJ0yroCyIk= k8s.io/utils v0.0.0-20230406110748-d93618cff8a2/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= -rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= -rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= -rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/cli-utils v0.34.0 h1:zCUitt54f0/MYj/ajVFnG6XSXMhpZ72O/3RewIchW8w= sigs.k8s.io/cli-utils v0.34.0/go.mod h1:EXyMwPMu9OL+LRnj0JEMsGG/fRvbgFadcVlSnE8RhFs= -sigs.k8s.io/controller-runtime v0.14.6 h1:oxstGVvXGNnMvY7TAESYk+lzr6S3V5VFxQ6d92KcwQA= -sigs.k8s.io/controller-runtime v0.14.6/go.mod h1:WqIdsAY6JBsjfc/CqO0CORmNtoCtE4S6qbPc9s68h+0= +sigs.k8s.io/controller-runtime v0.15.0 h1:ML+5Adt3qZnMSYxZ7gAverBLNPSMQEibtzAgp0UPojU= +sigs.k8s.io/controller-runtime v0.15.0/go.mod h1:7ngYvp1MLT+9GeZ+6lH3LOlcHkp/+tzA/fmHa4iq9kk= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= -sigs.k8s.io/kustomize/api v0.12.1 h1:7YM7gW3kYBwtKvoY216ZzY+8hM+lV53LUayghNRJ0vM= -sigs.k8s.io/kustomize/api v0.12.1/go.mod h1:y3JUhimkZkR6sbLNwfJHxvo1TCLwuwm14sCYnkH6S1s= -sigs.k8s.io/kustomize/kyaml v0.13.9 h1:Qz53EAaFFANyNgyOEJbT/yoIHygK40/ZcvU3rgry2Tk= -sigs.k8s.io/kustomize/kyaml v0.13.9/go.mod h1:QsRbD0/KcU+wdk0/L0fIp2KLnohkVzs6fQ85/nOXac4= +sigs.k8s.io/kustomize/api v0.13.4 h1:E38Hfx0G9R9v7vRgKshviPotJQETG0S2gD3JdHLCAsI= +sigs.k8s.io/kustomize/api v0.13.4/go.mod h1:Bkaavz5RKK6ZzP0zgPrB7QbpbBJKiHuD3BB0KujY7Ls= +sigs.k8s.io/kustomize/kyaml v0.14.2 h1:9WSwztbzwGszG1bZTziQUmVMrJccnyrLb5ZMKpJGvXw= +sigs.k8s.io/kustomize/kyaml v0.14.2/go.mod h1:AN1/IpawKilWD7V+YvQwRGUvuUOOWpjsHu6uHwonSF4= sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E= sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= diff --git a/pkg/bootstrap/bootstrap_plain_git.go b/pkg/bootstrap/bootstrap_plain_git.go index c79ad74a..73a7d6d3 100644 --- a/pkg/bootstrap/bootstrap_plain_git.go +++ b/pkg/bootstrap/bootstrap_plain_git.go @@ -38,6 +38,8 @@ import ( "sigs.k8s.io/yaml" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" + "github.com/fluxcd/pkg/git" + "github.com/fluxcd/pkg/git/repository" "github.com/fluxcd/pkg/kustomize/filesys" runclient "github.com/fluxcd/pkg/runtime/client" @@ -48,8 +50,6 @@ import ( "github.com/fluxcd/flux2/v2/pkg/manifestgen/sourcesecret" "github.com/fluxcd/flux2/v2/pkg/manifestgen/sync" "github.com/fluxcd/flux2/v2/pkg/status" - "github.com/fluxcd/pkg/git" - "github.com/fluxcd/pkg/git/repository" ) type PlainGitBootstrapper struct { @@ -122,7 +122,7 @@ func (b *PlainGitBootstrapper) ReconcileComponents(ctx context.Context, manifest b.logger.Warningf(" failed to clean directory for git repo: %w", err) return } - _, err = b.gitClient.Clone(ctx, b.url, repository.CloneOptions{ + _, err = b.gitClient.Clone(ctx, b.url, repository.CloneConfig{ CheckoutStrategy: repository.CheckoutStrategy{ Branch: b.branch, }, @@ -176,7 +176,7 @@ func (b *PlainGitBootstrapper) ReconcileComponents(ctx context.Context, manifest if err == nil { b.logger.Successf("committed sync manifests to %q (%q)", b.branch, commit) b.logger.Actionf("pushing component manifests to %q", b.url) - if err = b.gitClient.Push(ctx); err != nil { + if err = b.gitClient.Push(ctx, repository.PushConfig{}); err != nil { return fmt.Errorf("failed to push manifests: %w", err) } } else { @@ -267,7 +267,7 @@ func (b *PlainGitBootstrapper) ReconcileSyncConfig(ctx context.Context, options b.logger.Warningf(" failed to clean directory for git repo: %w", err) return } - _, err = b.gitClient.Clone(ctx, b.url, repository.CloneOptions{ + _, err = b.gitClient.Clone(ctx, b.url, repository.CloneConfig{ CheckoutStrategy: repository.CheckoutStrategy{ Branch: b.branch, }, @@ -343,7 +343,7 @@ func (b *PlainGitBootstrapper) ReconcileSyncConfig(ctx context.Context, options if err == nil { b.logger.Successf("committed sync manifests to %q (%q)", b.branch, commit) b.logger.Actionf("pushing sync manifests to %q", b.url) - err = b.gitClient.Push(ctx) + err = b.gitClient.Push(ctx, repository.PushConfig{}) if err != nil { if strings.HasPrefix(err.Error(), gogit.ErrNonFastForwardUpdate.Error()) { b.logger.Waitingf("git conflict detected, retrying with a fresh clone") @@ -358,7 +358,7 @@ func (b *PlainGitBootstrapper) ReconcileSyncConfig(ctx context.Context, options b.logger.Warningf(" failed to clean directory for git repo: %w", err) return } - _, err = b.gitClient.Clone(ctx, b.url, repository.CloneOptions{ + _, err = b.gitClient.Clone(ctx, b.url, repository.CloneConfig{ CheckoutStrategy: repository.CheckoutStrategy{ Branch: b.branch, }, diff --git a/pkg/manifestgen/kustomization/kustomization.go b/pkg/manifestgen/kustomization/kustomization.go index 383361d1..6a9fcf32 100644 --- a/pkg/manifestgen/kustomization/kustomization.go +++ b/pkg/manifestgen/kustomization/kustomization.go @@ -186,11 +186,8 @@ func BuildWithRoot(root, base string) ([]byte, error) { } buildOptions := &krusty.Options{ - DoLegacyResourceSort: true, - LoadRestrictions: kustypes.LoadRestrictionsNone, - AddManagedbyLabel: false, - DoPrune: false, - PluginConfig: kustypes.DisabledPluginConfig(), + LoadRestrictions: kustypes.LoadRestrictionsNone, + PluginConfig: kustypes.DisabledPluginConfig(), } k := krusty.MakeKustomizer(buildOptions) diff --git a/pkg/status/status.go b/pkg/status/status.go index a016cca8..f28b290c 100644 --- a/pkg/status/status.go +++ b/pkg/status/status.go @@ -31,7 +31,8 @@ import ( "sigs.k8s.io/cli-utils/pkg/kstatus/status" "sigs.k8s.io/cli-utils/pkg/object" "sigs.k8s.io/controller-runtime/pkg/client" - "sigs.k8s.io/controller-runtime/pkg/client/apiutil" + + runtimeclient "github.com/fluxcd/pkg/runtime/client" "github.com/fluxcd/flux2/v2/pkg/log" ) @@ -45,7 +46,7 @@ type StatusChecker struct { } func NewStatusChecker(kubeConfig *rest.Config, pollInterval time.Duration, timeout time.Duration, log log.Logger) (*StatusChecker, error) { - restMapper, err := apiutil.NewDynamicRESTMapper(kubeConfig) + restMapper, err := runtimeclient.NewDynamicRESTMapper(kubeConfig) if err != nil { return nil, err } diff --git a/tests/azure/go.mod b/tests/azure/go.mod index 2317d80a..dc9d7b9f 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -10,21 +10,21 @@ require ( github.com/fluxcd/image-reflector-controller/api v0.27.2 github.com/fluxcd/kustomize-controller/api v1.0.0-rc.3 github.com/fluxcd/notification-controller/api v1.0.0-rc.3 - github.com/fluxcd/pkg/apis/event v0.4.1 - github.com/fluxcd/pkg/apis/meta v1.0.0 - github.com/fluxcd/pkg/git v0.11.0 - github.com/fluxcd/pkg/git/gogit v0.8.1 + github.com/fluxcd/pkg/apis/event v0.5.0 + github.com/fluxcd/pkg/apis/meta v1.1.0 + github.com/fluxcd/pkg/git v0.12.1 + github.com/fluxcd/pkg/git/gogit v0.10.0 github.com/fluxcd/source-controller/api v1.0.0-rc.3 - github.com/hashicorp/hc-install v0.5.1 + github.com/hashicorp/hc-install v0.5.2 github.com/hashicorp/terraform-exec v0.18.1 github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 - github.com/stretchr/testify v1.8.2 + github.com/stretchr/testify v1.8.3 github.com/whilp/git-urls v1.0.0 go.uber.org/multierr v1.11.0 - k8s.io/api v0.26.3 - k8s.io/apimachinery v0.26.3 - k8s.io/client-go v0.26.3 - sigs.k8s.io/controller-runtime v0.14.6 + k8s.io/api v0.27.2 + k8s.io/apimachinery v0.27.2 + k8s.io/client-go v0.27.2 + sigs.k8s.io/controller-runtime v0.15.0 ) // Fix CVE-2022-28948 @@ -42,9 +42,9 @@ require ( github.com/Azure/go-autorest/autorest/validation v0.3.1 // indirect github.com/Azure/go-autorest/logger v0.2.1 // indirect github.com/Azure/go-autorest/tracing v0.6.0 // indirect - github.com/Masterminds/semver/v3 v3.2.0 // indirect - github.com/Microsoft/go-winio v0.6.0 // indirect - github.com/ProtonMail/go-crypto v0.0.0-20230217124315-7d5c6f04bbb8 // indirect + github.com/Masterminds/semver/v3 v3.2.1 // indirect + github.com/Microsoft/go-winio v0.6.1 // indirect + github.com/ProtonMail/go-crypto v0.0.0-20230518184743-7afd39499903 // indirect github.com/acomagu/bufpipe v1.0.4 // indirect github.com/apparentlymart/go-textseg/v13 v13.0.0 // indirect github.com/cloudflare/circl v1.3.3 // indirect @@ -56,17 +56,17 @@ require ( github.com/evanphx/json-patch/v5 v5.6.0 // indirect github.com/fluxcd/pkg/apis/acl v0.1.0 // indirect github.com/fluxcd/pkg/apis/kustomize v1.0.0 // indirect - github.com/fluxcd/pkg/ssh v0.7.3 // indirect - github.com/fluxcd/pkg/version v0.2.1 // indirect + github.com/fluxcd/pkg/ssh v0.7.4 // indirect + github.com/fluxcd/pkg/version v0.2.2 // indirect github.com/go-git/gcfg v1.5.0 // indirect github.com/go-git/go-billy/v5 v5.4.1 // indirect github.com/go-logr/logr v1.2.4 // indirect - github.com/go-openapi/jsonpointer v0.19.5 // indirect - github.com/go-openapi/jsonreference v0.20.0 // indirect + github.com/go-openapi/jsonpointer v0.19.6 // indirect + github.com/go-openapi/jsonreference v0.20.1 // indirect github.com/go-openapi/swag v0.22.3 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang-jwt/jwt/v4 v4.4.2 // indirect - github.com/golang/protobuf v1.5.2 // indirect + github.com/golang/protobuf v1.5.3 // indirect github.com/google/gnostic v0.6.9 // indirect github.com/google/go-cmp v0.5.9 // indirect github.com/google/gofuzz v1.2.0 // indirect @@ -75,14 +75,14 @@ require ( github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/go-version v1.6.0 // indirect github.com/hashicorp/terraform-json v0.15.0 // indirect - github.com/imdario/mergo v0.3.13 // indirect + github.com/imdario/mergo v0.3.15 // indirect github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/jpillora/backoff v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/kevinburke/ssh_config v1.2.0 // indirect + github.com/kr/pretty v0.3.1 // indirect github.com/mailru/easyjson v0.7.7 // indirect - github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect @@ -91,28 +91,28 @@ require ( github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/sergi/go-diff v1.3.1 // indirect - github.com/skeema/knownhosts v1.1.0 // indirect + github.com/skeema/knownhosts v1.1.1 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect github.com/zclconf/go-cty v1.13.0 // indirect go.uber.org/atomic v1.10.0 // indirect - golang.org/x/crypto v0.7.0 // indirect - golang.org/x/mod v0.9.0 // indirect - golang.org/x/net v0.8.0 // indirect - golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b // indirect - golang.org/x/sys v0.6.0 // indirect - golang.org/x/term v0.6.0 // indirect - golang.org/x/text v0.8.0 // indirect + golang.org/x/crypto v0.9.0 // indirect + golang.org/x/mod v0.10.0 // indirect + golang.org/x/net v0.10.0 // indirect + golang.org/x/oauth2 v0.5.0 // indirect + golang.org/x/sys v0.8.0 // indirect + golang.org/x/term v0.8.0 // indirect + golang.org/x/text v0.9.0 // indirect golang.org/x/time v0.3.0 // indirect - golang.org/x/tools v0.6.0 // indirect + golang.org/x/tools v0.9.1 // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/protobuf v1.28.1 // indirect + google.golang.org/protobuf v1.30.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/apiextensions-apiserver v0.26.3 // indirect + k8s.io/apiextensions-apiserver v0.27.2 // indirect k8s.io/klog/v2 v2.90.1 // indirect - k8s.io/kube-openapi v0.0.0-20221110221610-a28e98eb7c70 // indirect + k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f // indirect k8s.io/utils v0.0.0-20230313181309-38a27ef9d749 // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect diff --git a/tests/azure/go.sum b/tests/azure/go.sum index bc840e82..922a3ae4 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -1,36 +1,5 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= -cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= -cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= -cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= -cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= -cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= -cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= -cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= -cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= -cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= -cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= -cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= -cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= -cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= -cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= -cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= -cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= -cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= -cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= -cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= -cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= -cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= -cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= -cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/Azure/azure-amqp-common-go/v4 v4.1.0 h1:gcS6P4q/Qv1nmdq1IWoU3mLYlHnvNxAhVjxReEFmSz8= github.com/Azure/azure-amqp-common-go/v4 v4.1.0/go.mod h1:HDiTPilyFCWPOT8dBeSjGztqgrW27LctWs/4p6nR9FY= github.com/Azure/azure-event-hubs-go/v3 v3.5.0 h1:H3nhguNPKFH+Z6GP0GZTJVsiuHjqrz5rsRsD816zNkQ= @@ -62,16 +31,15 @@ github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZ github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo= github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/Masterminds/semver/v3 v3.2.0 h1:3MEsd0SM6jqZojhjLWWeBY+Kcjy9i6MQAeY7YgDP83g= -github.com/Masterminds/semver/v3 v3.2.0/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= +github.com/Masterminds/semver/v3 v3.2.1 h1:RN9w6+7QoMeJVGyfmbcgs28Br8cvmnucEXnY0rYXWg0= +github.com/Masterminds/semver/v3 v3.2.1/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= -github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= -github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= +github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= +github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4/go.mod h1:UBYPn8k0D56RtnR8RFQMjmh4KrZzWJ5o7Z9SYjossQ8= -github.com/ProtonMail/go-crypto v0.0.0-20230217124315-7d5c6f04bbb8 h1:wPbRQzjjwFc0ih8puEVAOFGELsn1zoIIYdxvML7mDxA= -github.com/ProtonMail/go-crypto v0.0.0-20230217124315-7d5c6f04bbb8/go.mod h1:I0gYDMZ6Z5GRU7l58bNFSkPTFN6Yl12dsUlAZ8xy98g= +github.com/ProtonMail/go-crypto v0.0.0-20230518184743-7afd39499903 h1:ZK3C5DtzV2nVAQTx5S5jQvMeDqWtD1By5mOoyY/xJek= +github.com/ProtonMail/go-crypto v0.0.0-20230518184743-7afd39499903/go.mod h1:8TI4H3IbrackdNgv+92dI+rhpCaLqM0IfpgCgenFvRE= github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= github.com/acomagu/bufpipe v1.0.4 h1:e3H4WUzM3npvo5uv95QuJM3cQspFNtFBzvJ2oNjKIDQ= github.com/acomagu/bufpipe v1.0.4/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= @@ -89,10 +57,7 @@ github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7N 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= -github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cloudflare/circl v1.1.0/go.mod h1:prBCrKB9DV4poKZY1l9zBXg2QJY7mvgRvtMxxK7fi4I= github.com/cloudflare/circl v1.3.3 h1:fE/Qz0QdIGqeWfnwq0RE0R7MI51s0M2E4Ga9kq5AEMs= @@ -138,21 +103,21 @@ github.com/fluxcd/notification-controller/api v1.0.0-rc.3 h1:RxHGUo9nSXj+vXEYjo+ github.com/fluxcd/notification-controller/api v1.0.0-rc.3/go.mod h1:bfZCGyWq1SPmZSQSCuHRum5Z1olidWp8UbZkO5kcato= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= -github.com/fluxcd/pkg/apis/event v0.4.1 h1:63wP8NM/uA4680F4Ft8q8/0rJivX90i7FmMkRvUI8Is= -github.com/fluxcd/pkg/apis/event v0.4.1/go.mod h1:LHT1ZsbMrcHwCHQCaFtQviQBZwhMOAbTUPK6+KgBkFo= +github.com/fluxcd/pkg/apis/event v0.5.0 h1:aAoo3AcWMh6hFfhxFED2TbyIk9590C7l17eh3Ys5I3I= +github.com/fluxcd/pkg/apis/event v0.5.0/go.mod h1:hiVliecUNHIeE128NFEgyoNxLcv/TWzrYHtf0ODj8fw= github.com/fluxcd/pkg/apis/kustomize v1.0.0 h1:5T2b/mRZiGWtP7fvSU8gZOApIc06H6SdLX3MlsE6LRo= github.com/fluxcd/pkg/apis/kustomize v1.0.0/go.mod h1:XaDYlKxrf9D2zZWcZ0BnSIqGtcm8mdNtJGzZWYjCnQo= -github.com/fluxcd/pkg/apis/meta v1.0.0 h1:i9IGHd/VNEZELX7mepkiYFbJxs2J5znaB4cN9z2nPm8= -github.com/fluxcd/pkg/apis/meta v1.0.0/go.mod h1:04ZdpZYm1x+aL93K4daNHW1UX6E8K7Gyf5za9OhrE+U= -github.com/fluxcd/pkg/git v0.11.0 h1:GvB+3QOB8xbF5WNjVrkskseOnsZBuqSOzW3VxfsHuX4= -github.com/fluxcd/pkg/git v0.11.0/go.mod h1:VHRVlrZMHNoWBlaSAWxlGH6Vwlb9VRazUhPUykviHwY= -github.com/fluxcd/pkg/git/gogit v0.8.1 h1:Q3EV2WBX6HiXSmsHyrwFzwl82gO4ZtFwb675iQPWwVc= -github.com/fluxcd/pkg/git/gogit v0.8.1/go.mod h1:5M27gCl0gyo6l+ht9HwZSzimPY3LahKVIJ7/1vCCctg= -github.com/fluxcd/pkg/gittestserver v0.8.1 h1:FMqnZBuS/11+9NhtLv9UAg+wm/v0Nf+hHeUOi2wJR3Q= -github.com/fluxcd/pkg/ssh v0.7.3 h1:Dhs+nXdp806lBriUJtPyRi0SVIVWbJafJGD/qQ71GiY= -github.com/fluxcd/pkg/ssh v0.7.3/go.mod h1:/z5ZNgQz+h9s/2nNFKAcZDHtZRMA1nj5YcriGDUOoLY= -github.com/fluxcd/pkg/version v0.2.1 h1:RRH7+6qiWHdTvRNwpoBmilnubJ2C4FZYGgy5wTDVKVc= -github.com/fluxcd/pkg/version v0.2.1/go.mod h1:UmUYHDz4BxHQMesMUx3gYVrT2Wf66H49JpTg/PW+/OY= +github.com/fluxcd/pkg/apis/meta v1.1.0 h1:vYU1mvUzztnQyTzZOLHQ3wm/tXd7E1QZ2V91zuVJPsQ= +github.com/fluxcd/pkg/apis/meta v1.1.0/go.mod h1:/QwCotRKL/BT6RSa4O75FlYW14fU8eRfKnoagzbkmL4= +github.com/fluxcd/pkg/git v0.12.1 h1:3HsCs+r/Au+P6870IfB1Cf6ifz6w1PzSm2xYnB+GW/4= +github.com/fluxcd/pkg/git v0.12.1/go.mod h1:HUG9ZSYSuIAfZbYTPcYptmlaWCfgSQYyzfQ5/WUQVQk= +github.com/fluxcd/pkg/git/gogit v0.10.0 h1:yL+mjSYW0SptgLQZE/x/hoSo9KulfHR524Qk2vZJKLM= +github.com/fluxcd/pkg/git/gogit v0.10.0/go.mod h1:BOEHZtgbHM5pzKTBIWbtTx2j2artkbLtKssFlZJDFu0= +github.com/fluxcd/pkg/gittestserver v0.8.3 h1:ehqTcqXyN095+AK1XCJDQBljeaOhatF9bc0lFblThCw= +github.com/fluxcd/pkg/ssh v0.7.4 h1:8GYneCKH2dxrHQBalcDgOCC2NtqD0JO91FlWgvnzrfo= +github.com/fluxcd/pkg/ssh v0.7.4/go.mod h1:9Syc8nVJaZEToPTU4E99j0jZ99w39oZtov+uiNX17sc= +github.com/fluxcd/pkg/version v0.2.2 h1:ZpVXECeLA5hIQMft11iLp6gN3cKcz6UNuVTQPw/bRdI= +github.com/fluxcd/pkg/version v0.2.2/go.mod h1:NGnh/no8S6PyfCDxRFrPY3T5BUnqP48MxfxNRU0z8C0= github.com/fluxcd/source-controller/api v1.0.0-rc.3 h1:zfCUEJDN0VxHRoJGjnqlTyVe61ZmImVBOzn14tepzSU= github.com/fluxcd/source-controller/api v1.0.0-rc.3/go.mod h1:CvGNdS8g/MqwpERUK6aJp4lndsrm+JBzGpoyyZ4u0c8= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= @@ -168,21 +133,17 @@ github.com/go-git/go-billy/v5 v5.4.1/go.mod h1:vjbugF6Fz7JIflbVpl1hJsGjSHNltrSw4 github.com/go-git/go-git-fixtures/v4 v4.3.1 h1:y5z6dd3qi8Hl+stezc8p3JxDkoTRqMAlKnXHuzrfjTQ= github.com/go-git/go-git-fixtures/v4 v4.3.1/go.mod h1:8LHG1a3SRW71ettAD/jW13h8c6AqjVSeL11RAdgaqpo= github.com/go-git/go-git/v5 v5.6.1 h1:q4ZRqQl4pR/ZJHc1L5CFjGA1a10u76aV1iC+nh+bHsk= -github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/zapr v1.2.3 h1:a9vnzlIBPQBBkeaR9IuMUfmVOrQlkoC4YfPoFkX3T7A= -github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= -github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonreference v0.20.0 h1:MYlu0sBgChmCfJxxUKZ8g1cPWFOB37YSZqewK7OKeyA= -github.com/go-openapi/jsonreference v0.20.0/go.mod h1:Ag74Ico3lPc+zR+qjn4XBUmXymS4zJbYVCZmcgkasdo= -github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-logr/zapr v1.2.4 h1:QHVo+6stLbfJmYGkQ7uGHUCu5hnAFAj6mDe6Ea0SeOo= +github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE= +github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= +github.com/go-openapi/jsonreference v0.20.1 h1:FBLnyygC4/IZZr893oiomc9XaghoveYTrLC1F86HID8= +github.com/go-openapi/jsonreference v0.20.1/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g= github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= +github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= github.com/gofrs/uuid v4.2.0+incompatible h1:yyYWMnhkhrKwwr8gAOcOCYxOOscHgDS9yZgBrnJfGa0= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= @@ -191,23 +152,13 @@ github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzw github.com/golang-jwt/jwt/v4 v4.4.2 h1:rcc4lwaZgFMCZ5jxF9ABolDcIHdBytAFgqFPbSJQAYs= github.com/golang-jwt/jwt/v4 v4.4.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= @@ -217,41 +168,27 @@ github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QD github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/google/gnostic v0.6.9 h1:ZK/5VhkoX835RikCHpSUJV9a+S3e1zLh59YnyWeBW+0= github.com/google/gnostic v0.6.9/go.mod h1:Nm8234We1lq6iB9OmlgNv3nH91XLLVZHCDayfA3xq+E= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -260,17 +197,15 @@ github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+l github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/hc-install v0.5.1 h1:eCqToNCob7m2R8kM8Gr7XcVmcRSz9ppCFSVZbMh0X+0= -github.com/hashicorp/hc-install v0.5.1/go.mod h1:iDPCnzKo+SzToOh25R8OWpLdhhy7yBfJX3PmVWiYhrM= +github.com/hashicorp/hc-install v0.5.2 h1:SfwMFnEXVVirpwkDuSF5kymUOhrUxrTq3udEseZdOD0= +github.com/hashicorp/hc-install v0.5.2/go.mod h1:9QISwe6newMWIfEiXpzuu1k9HAGtQYgnSH8H9T8wmoI= github.com/hashicorp/terraform-exec v0.18.1 h1:LAbfDvNQU1l0NOQlTuudjczVhHj061fNX5H8XZxHlH4= github.com/hashicorp/terraform-exec v0.18.1/go.mod h1:58wg4IeuAJ6LVsLUeD2DWZZoc/bYi6dzhLHzxM41980= github.com/hashicorp/terraform-json v0.15.0 h1:/gIyNtR6SFw6h5yzlbDbACyGvIhKtQi8mTsbkNd79lE= github.com/hashicorp/terraform-json v0.15.0/go.mod h1:+L1RNzjDU5leLFZkHTFTbJXaoqUC6TqXlFgDoOXrtvk= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk= github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= +github.com/imdario/mergo v0.3.15 h1:M8XP7IuFNsqUx6VPK2P9OSmsYsI/YFaGil0uD21V3dM= +github.com/imdario/mergo v0.3.15/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= @@ -282,29 +217,25 @@ github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2E github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= -github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/matryer/is v1.2.0 h1:92UTHpy8CDwaJ08GqLDzhhuixiBUUD1p3AU6PHddz4A= github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= -github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 h1:YH424zrwLTlyHSH/GzLMJeu5zhYVZSx5RQxGKm1h96s= github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5/go.mod h1:PoGiBqKSQK1vIfQ+yVaFcGjDySHvym6FM1cNYnwzbrY= github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= @@ -320,31 +251,34 @@ github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjY github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/onsi/ginkgo/v2 v2.6.0 h1:9t9b9vRUbFq3C4qKFCGkVuq/fIHji802N1nrtkh1mNc= -github.com/onsi/gomega v1.27.2 h1:SKU0CXeKE/WVgIV1T61kSa3+IRE8Ekrv9rdXDwwTqnY= +github.com/onsi/ginkgo/v2 v2.9.5 h1:+6Hr4uxzP4XIUyAkg61dWBw8lb/gc4/X5luuxN/EC+Q= +github.com/onsi/gomega v1.27.7 h1:fVih9JD6ogIiHUN6ePK7HJidyEDpWGVB5mzM7cWNXoU= github.com/pjbgf/sha1cd v0.2.3/go.mod h1:HOK9QrgzdHpbc2Kzip0Q1yi3M2MFGPADtR6HjG65m5M= github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4= github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_golang v1.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw= +github.com/prometheus/client_golang v1.15.1 h1:8tXpTmJbyH5lydzFPoxSIJ0J46jdh3tylbvM1xCv0LI= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4= -github.com/prometheus/common v0.37.0 h1:ccBbHCgIiT9uSoFY0vX8H3zsNR5eLt17/RQLUvn8pXE= -github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo= +github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUooCfx1yqY= +github.com/prometheus/common v0.42.0 h1:EKsfXEYo4JpWMHH5cg+KOUWeuJSov1Id8zGR8eeI1YM= +github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= github.com/sebdah/goldie v1.0.0/go.mod h1:jXP4hmWywNEwZzhMuv2ccnqTSFpuq8iyQhtQdkkZBH4= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= -github.com/skeema/knownhosts v1.1.0 h1:Wvr9V0MxhjRbl3f9nMnKnFfiWTJmtECJ9Njkea3ysW0= +github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= github.com/skeema/knownhosts v1.1.0/go.mod h1:sKFq3RD6/TKZkSWn8boUbDC7Qkgcv+8XXijpFO6roag= +github.com/skeema/knownhosts v1.1.1 h1:MTk78x9FPgDFVFkDLTrsnnfCJl7g1C/nnKvePgrIngE= +github.com/skeema/knownhosts v1.1.1/go.mod h1:g4fPeYpque7P0xefxtGzV81ihjC8sX2IqpAoNkjxbMo= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= @@ -358,8 +292,9 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5 github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= -github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY= +github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/vmihailenco/msgpack v3.3.3+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk= github.com/vmihailenco/msgpack/v4 v4.3.12/go.mod h1:gborTTJjAo/GWTqqRjrLCn9pgNN+NXzzngzBKDPIqw4= github.com/vmihailenco/tagparser v0.1.1/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= @@ -371,9 +306,7 @@ github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= -github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/zclconf/go-cty v1.2.0/go.mod h1:hOPWgoHbaTUnI5k4D2ld+GRpFJSCe6bCM7m1q/N4PQ8= @@ -381,11 +314,6 @@ github.com/zclconf/go-cty v1.10.0/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uU github.com/zclconf/go-cty v1.13.0 h1:It5dfKTTZHe9aeppbNOda3mN7Ag7sg6QkBNm6TkyFa0= github.com/zclconf/go-cty v1.13.0/go.mod h1:YKQzy/7pZ7iq2jNFzy5go57xdxdWoLLpaEp4u238AE0= github.com/zclconf/go-cty-debug v0.0.0-20191215020915-b22d67c1ba0b/go.mod h1:ZRKQfBXbGkpdV6QMzT3rU1kSTAnfu1dO8dPKjYprgj8= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= @@ -393,8 +321,6 @@ go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= @@ -403,41 +329,19 @@ golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= -golang.org/x/crypto v0.7.0 h1:AvwMYaRytfdeVt3u6mLaxYtErKYjxA2OXjJ1HHq6t3A= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= +golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g= +golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= -golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -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/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= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= -golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= -golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.9.0 h1:KENHtAZL2y3NLMYZeHY9DW8HW8V+kQyJsY/V9JlKvCs= -golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk= +golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180811021610-c39426892332/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -445,81 +349,42 @@ golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ= +golang.org/x/net v0.6.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 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= 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= -golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b h1:clP8eMhB30EHdc0bd2Twtq6kgU7yl5ub2cQLSdrv1Dg= -golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.5.0 h1:HuArIo48skDwlrvM3sEdHXElYslAMsf3KwRkkW4MC4s= +golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I= 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= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -529,7 +394,6 @@ golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -537,147 +401,62 @@ golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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= golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.6.0 h1:clScbb1cHjoCkyRbWwBEUZ5H/tIFu5TAXIqaZD0Gcjw= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/term v0.8.0 h1:n5xxQn2i3PC0yLAbjTpNT85q/Kgzcr2gIoX9OrJUols= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/tools v0.9.1 h1:8WMNJAz3zrtPmnYC7ISf5dEn3MT0gY7jBJfw27yrrLo= +golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gomodules.xyz/jsonpatch/v2 v2.2.0 h1:4pT439QV83L+G9FkcCriY6EkpcK6r6bK+A5FBUMI7qY= -google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= -google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= -google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +gomodules.xyz/jsonpatch/v2 v2.3.0 h1:8NFhfS6gzxNqjLIYnZxg319wZ5Qjnx4m/CcX+Klzazc= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= -google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= 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= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= @@ -689,20 +468,18 @@ google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzi google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= -google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= +google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= @@ -716,31 +493,23 @@ gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -k8s.io/api v0.26.3 h1:emf74GIQMTik01Aum9dPP0gAypL8JTLl/lHa4V9RFSU= -k8s.io/api v0.26.3/go.mod h1:PXsqwPMXBSBcL1lJ9CYDKy7kIReUydukS5JiRlxC3qE= -k8s.io/apiextensions-apiserver v0.26.3 h1:5PGMm3oEzdB1W/FTMgGIDmm100vn7IaUP5er36dB+YE= -k8s.io/apiextensions-apiserver v0.26.3/go.mod h1:jdA5MdjNWGP+njw1EKMZc64xAT5fIhN6VJrElV3sfpQ= -k8s.io/apimachinery v0.26.3 h1:dQx6PNETJ7nODU3XPtrwkfuubs6w7sX0M8n61zHIV/k= -k8s.io/apimachinery v0.26.3/go.mod h1:ats7nN1LExKHvJ9TmwootT00Yz05MuYqPXEXaVeOy5I= -k8s.io/client-go v0.26.3 h1:k1UY+KXfkxV2ScEL3gilKcF7761xkYsSD6BC9szIu8s= -k8s.io/client-go v0.26.3/go.mod h1:ZPNu9lm8/dbRIPAgteN30RSXea6vrCpFvq+MateTUuQ= +k8s.io/api v0.27.2 h1:+H17AJpUMvl+clT+BPnKf0E3ksMAzoBBg7CntpSuADo= +k8s.io/api v0.27.2/go.mod h1:ENmbocXfBT2ADujUXcBhHV55RIT31IIEvkntP6vZKS4= +k8s.io/apiextensions-apiserver v0.27.2 h1:iwhyoeS4xj9Y7v8YExhUwbVuBhMr3Q4bd/laClBV6Bo= +k8s.io/apiextensions-apiserver v0.27.2/go.mod h1:Oz9UdvGguL3ULgRdY9QMUzL2RZImotgxvGjdWRq6ZXQ= +k8s.io/apimachinery v0.27.2 h1:vBjGaKKieaIreI+oQwELalVG4d8f3YAMNpWLzDXkxeg= +k8s.io/apimachinery v0.27.2/go.mod h1:XNfZ6xklnMCOGGFNqXG7bUrQCoR04dh/E7FprV6pb+E= +k8s.io/client-go v0.27.2 h1:vDLSeuYvCHKeoQRhCXjxXO45nHVv2Ip4Fe0MfioMrhE= +k8s.io/client-go v0.27.2/go.mod h1:tY0gVmUsHrAmjzHX9zs7eCjxcBsf8IiNe7KQ52biTcQ= k8s.io/klog/v2 v2.90.1 h1:m4bYOKall2MmOiRaR1J+We67Do7vm9KiQVlT96lnHUw= k8s.io/klog/v2 v2.90.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= -k8s.io/kube-openapi v0.0.0-20221110221610-a28e98eb7c70 h1:zfqQc1V6/ZgGpvrOVvr62OjiqQX4lZjfznK34NQwkqw= -k8s.io/kube-openapi v0.0.0-20221110221610-a28e98eb7c70/go.mod h1:+Axhij7bCpeqhklhUTe3xmOn6bWxolyZEeyaFpjGtl4= +k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f h1:2kWPakN3i/k81b0gvD5C5FJ2kxm1WrQFanWchyKuqGg= +k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f/go.mod h1:byini6yhqGC14c3ebc/QwanvYwhuMWF6yz2F8uwW8eg= k8s.io/utils v0.0.0-20230313181309-38a27ef9d749 h1:xMMXJlJbsU8w3V5N2FLDQ8YgU8s1EoULdbQBcAeNJkY= k8s.io/utils v0.0.0-20230313181309-38a27ef9d749/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= -rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= -rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/controller-runtime v0.14.6 h1:oxstGVvXGNnMvY7TAESYk+lzr6S3V5VFxQ6d92KcwQA= -sigs.k8s.io/controller-runtime v0.14.6/go.mod h1:WqIdsAY6JBsjfc/CqO0CORmNtoCtE4S6qbPc9s68h+0= +sigs.k8s.io/controller-runtime v0.15.0 h1:ML+5Adt3qZnMSYxZ7gAverBLNPSMQEibtzAgp0UPojU= +sigs.k8s.io/controller-runtime v0.15.0/go.mod h1:7ngYvp1MLT+9GeZ+6lH3LOlcHkp/+tzA/fmHa4iq9kk= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= diff --git a/tests/azure/util_test.go b/tests/azure/util_test.go index 4af53f39..91ab5367 100644 --- a/tests/azure/util_test.go +++ b/tests/azure/util_test.go @@ -313,7 +313,7 @@ func getRepository(repoURL, branchName string, overrideBranch bool, password str return nil, "", err } - _, err = c.Clone(context.Background(), repoURL, repository.CloneOptions{ + _, err = c.Clone(context.Background(), repoURL, repository.CloneConfig{ CheckoutStrategy: repository.CheckoutStrategy{ Branch: checkoutBranch, }, @@ -368,7 +368,7 @@ func commitAndPushAll(client *gogit.Client, files map[string]io.Reader, branchNa return err } - err = client.Push(context.Background()) + err = client.Push(context.Background(), repository.PushConfig{}) if err != nil { return err } From e678738dedf9bd5ed67231ae6a9370edd434a333 Mon Sep 17 00:00:00 2001 From: Raffael Sahli Date: Thu, 9 Mar 2023 12:29:56 +0000 Subject: [PATCH 516/818] feat: add reconcile source chart command Signed-off-by: Raffael Sahli --- cmd/flux/reconcile_source_chart.go | 44 ++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 cmd/flux/reconcile_source_chart.go diff --git a/cmd/flux/reconcile_source_chart.go b/cmd/flux/reconcile_source_chart.go new file mode 100644 index 00000000..a78ef924 --- /dev/null +++ b/cmd/flux/reconcile_source_chart.go @@ -0,0 +1,44 @@ +/* +Copyright 2020 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "github.com/spf13/cobra" + + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" +) + +var reconcileSourceHelmChartCmd = &cobra.Command{ + Use: "chart [name]", + Short: "Reconcile a HelmChart source", + Long: `The reconcile source command triggers a reconciliation of a HelmCHart resource and waits for it to finish.`, + Example: ` # Trigger a reconciliation for an existing source + flux reconcile source chart podinfo`, + ValidArgsFunction: resourceNamesCompletionFunc(sourcev1.GroupVersion.WithKind(sourcev1.HelmChartKind)), + RunE: reconcileCommand{ + apiType: helmChartType, + object: helmChartAdapter{&sourcev1.HelmChart{}}, + }.run, +} + +func init() { + reconcileSourceCmd.AddCommand(reconcileSourceHelmChartCmd) +} + +func (obj helmChartAdapter) lastHandledReconcileRequest() string { + return obj.Status.GetLastHandledReconcileRequest() +} From b8c24f906d47a88beda57ab2c7115b0536b009b6 Mon Sep 17 00:00:00 2001 From: Raffael Sahli Date: Fri, 14 Apr 2023 10:02:03 +0000 Subject: [PATCH 517/818] fix: support reconcile recursive source tree hr => chart => repo Signed-off-by: Raffael Sahli --- cmd/flux/reconcile_helmrelease.go | 35 +++++------- cmd/flux/reconcile_kustomization.go | 2 +- cmd/flux/reconcile_source_chart.go | 55 +++++++++++++++++-- cmd/flux/reconcile_with_source.go | 9 ++- .../reconcile_helmrelease_from_git.golden | 4 ++ 5 files changed, 75 insertions(+), 30 deletions(-) diff --git a/cmd/flux/reconcile_helmrelease.go b/cmd/flux/reconcile_helmrelease.go index 2433dd09..b015aa8b 100644 --- a/cmd/flux/reconcile_helmrelease.go +++ b/cmd/flux/reconcile_helmrelease.go @@ -17,11 +17,12 @@ limitations under the License. package main import ( + "fmt" + "github.com/spf13/cobra" "k8s.io/apimachinery/pkg/types" helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" - sourcev1 "github.com/fluxcd/source-controller/api/v1" sourcev1b2 "github.com/fluxcd/source-controller/api/v1beta2" ) @@ -63,28 +64,20 @@ func (obj helmReleaseAdapter) reconcileSource() bool { return rhrArgs.syncHrWithSource } -func (obj helmReleaseAdapter) getSource() (reconcileCommand, types.NamespacedName) { - var cmd reconcileCommand - switch obj.Spec.Chart.Spec.SourceRef.Kind { - case sourcev1b2.HelmRepositoryKind: - cmd = reconcileCommand{ - apiType: helmRepositoryType, - object: helmRepositoryAdapter{&sourcev1b2.HelmRepository{}}, - } - case sourcev1.GitRepositoryKind: - cmd = reconcileCommand{ - apiType: gitRepositoryType, - object: gitRepositoryAdapter{&sourcev1.GitRepository{}}, - } - case sourcev1b2.BucketKind: - cmd = reconcileCommand{ - apiType: bucketType, - object: bucketAdapter{&sourcev1b2.Bucket{}}, - } +func (obj helmReleaseAdapter) getSource() (reconcileSource, types.NamespacedName) { + cmd := reconcileWithSourceCommand{ + apiType: helmChartType, + object: helmChartAdapter{&sourcev1b2.HelmChart{}}, + force: true, + } + + ns := obj.Spec.Chart.Spec.SourceRef.Namespace + if ns == "" { + ns = obj.Namespace } return cmd, types.NamespacedName{ - Name: obj.Spec.Chart.Spec.SourceRef.Name, - Namespace: obj.Spec.Chart.Spec.SourceRef.Namespace, + Name: fmt.Sprintf("%s-%s", obj.Namespace, obj.Name), + Namespace: ns, } } diff --git a/cmd/flux/reconcile_kustomization.go b/cmd/flux/reconcile_kustomization.go index 7396091b..99d12545 100644 --- a/cmd/flux/reconcile_kustomization.go +++ b/cmd/flux/reconcile_kustomization.go @@ -63,7 +63,7 @@ func (obj kustomizationAdapter) reconcileSource() bool { return rksArgs.syncKsWithSource } -func (obj kustomizationAdapter) getSource() (reconcileCommand, types.NamespacedName) { +func (obj kustomizationAdapter) getSource() (reconcileSource, types.NamespacedName) { var cmd reconcileCommand switch obj.Spec.SourceRef.Kind { case sourcev1b2.OCIRepositoryKind: diff --git a/cmd/flux/reconcile_source_chart.go b/cmd/flux/reconcile_source_chart.go index a78ef924..134b0a13 100644 --- a/cmd/flux/reconcile_source_chart.go +++ b/cmd/flux/reconcile_source_chart.go @@ -18,27 +18,70 @@ package main import ( "github.com/spf13/cobra" + "k8s.io/apimachinery/pkg/types" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" + sourcev1 "github.com/fluxcd/source-controller/api/v1" + sourcev1b2 "github.com/fluxcd/source-controller/api/v1beta2" ) var reconcileSourceHelmChartCmd = &cobra.Command{ Use: "chart [name]", Short: "Reconcile a HelmChart source", - Long: `The reconcile source command triggers a reconciliation of a HelmCHart resource and waits for it to finish.`, + Long: `The reconcile source command triggers a reconciliation of a HelmChart resource and waits for it to finish.`, Example: ` # Trigger a reconciliation for an existing source - flux reconcile source chart podinfo`, - ValidArgsFunction: resourceNamesCompletionFunc(sourcev1.GroupVersion.WithKind(sourcev1.HelmChartKind)), - RunE: reconcileCommand{ + flux reconcile source chart podinfo + + # Trigger a reconciliation of the HelmCharts's source and apply changes + flux reconcile helmchart podinfo --with-source`, + ValidArgsFunction: resourceNamesCompletionFunc(helmv2.GroupVersion.WithKind(helmv2.HelmReleaseKind)), + RunE: reconcileWithSourceCommand{ apiType: helmChartType, - object: helmChartAdapter{&sourcev1.HelmChart{}}, + object: helmChartAdapter{&sourcev1b2.HelmChart{}}, }.run, } func init() { + reconcileSourceHelmChartCmd.Flags().BoolVar(&rhcArgs.syncHrWithSource, "with-source", false, "reconcile HelmChart source") reconcileSourceCmd.AddCommand(reconcileSourceHelmChartCmd) } func (obj helmChartAdapter) lastHandledReconcileRequest() string { return obj.Status.GetLastHandledReconcileRequest() } + +type reconcileHelmChartFlags struct { + syncHrWithSource bool +} + +var rhcArgs reconcileHelmChartFlags + +func (obj helmChartAdapter) reconcileSource() bool { + return rhcArgs.syncHrWithSource +} + +func (obj helmChartAdapter) getSource() (reconcileSource, types.NamespacedName) { + var cmd reconcileCommand + switch obj.Spec.SourceRef.Kind { + case sourcev1b2.HelmRepositoryKind: + cmd = reconcileCommand{ + apiType: helmRepositoryType, + object: helmRepositoryAdapter{&sourcev1b2.HelmRepository{}}, + } + case sourcev1.GitRepositoryKind: + cmd = reconcileCommand{ + apiType: gitRepositoryType, + object: gitRepositoryAdapter{&sourcev1.GitRepository{}}, + } + case sourcev1b2.BucketKind: + cmd = reconcileCommand{ + apiType: bucketType, + object: bucketAdapter{&sourcev1b2.Bucket{}}, + } + } + + return cmd, types.NamespacedName{ + Name: obj.Spec.SourceRef.Name, + Namespace: obj.Namespace, + } +} diff --git a/cmd/flux/reconcile_with_source.go b/cmd/flux/reconcile_with_source.go index 4c3a7eac..d0c3ae78 100644 --- a/cmd/flux/reconcile_with_source.go +++ b/cmd/flux/reconcile_with_source.go @@ -18,12 +18,17 @@ type reconcileWithSource interface { adapter reconcilable reconcileSource() bool - getSource() (reconcileCommand, types.NamespacedName) + getSource() (reconcileSource, types.NamespacedName) +} + +type reconcileSource interface { + run(cmd *cobra.Command, args []string) error } type reconcileWithSourceCommand struct { apiType object reconcileWithSource + force bool } func (reconcile reconcileWithSourceCommand) run(cmd *cobra.Command, args []string) error { @@ -54,7 +59,7 @@ func (reconcile reconcileWithSourceCommand) run(cmd *cobra.Command, args []strin return fmt.Errorf("resource is suspended") } - if reconcile.object.reconcileSource() { + if reconcile.object.reconcileSource() || reconcile.force { reconcileCmd, nsName := reconcile.object.getSource() nsCopy := *kubeconfigArgs.Namespace if nsName.Namespace != "" { diff --git a/cmd/flux/testdata/helmrelease/reconcile_helmrelease_from_git.golden b/cmd/flux/testdata/helmrelease/reconcile_helmrelease_from_git.golden index 7f7e22f5..2c2bca89 100644 --- a/cmd/flux/testdata/helmrelease/reconcile_helmrelease_from_git.golden +++ b/cmd/flux/testdata/helmrelease/reconcile_helmrelease_from_git.golden @@ -2,6 +2,10 @@ ✔ GitRepository annotated ◎ waiting for GitRepository reconciliation ✔ fetched revision 6.3.5@sha1:67e2c98a60dc92283531412a9e604dd4bae005a9 +► annotating HelmChart {{ .ns }}-thrfg in {{ .ns }} namespace +✔ HelmChart annotated +◎ waiting for HelmChart reconciliation +✔ fetched revision 6.3.5 ► annotating HelmRelease thrfg in {{ .ns }} namespace ✔ HelmRelease annotated ◎ waiting for HelmRelease reconciliation From 799848c2a0e9339f99edf11f284774e5cbfddc86 Mon Sep 17 00:00:00 2001 From: Horacio Granillo Date: Fri, 26 May 2023 15:37:55 +0200 Subject: [PATCH 518/818] Fix break lines in create helmrelease and source Signed-off-by: Horacio Granillo --- cmd/flux/create_helmrelease.go | 4 ++-- cmd/flux/create_source_helm.go | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/cmd/flux/create_helmrelease.go b/cmd/flux/create_helmrelease.go index 7ac68060..3721c1e7 100644 --- a/cmd/flux/create_helmrelease.go +++ b/cmd/flux/create_helmrelease.go @@ -83,9 +83,9 @@ var createHelmReleaseCmd = &cobra.Command{ # Create a HelmRelease with a custom release name flux create hr podinfo \ - --release-name=podinfo-dev + --release-name=podinfo-dev \ --source=HelmRepository/podinfo \ - --chart=podinfo \ + --chart=podinfo # Create a HelmRelease targeting another namespace than the resource flux create hr podinfo \ diff --git a/cmd/flux/create_source_helm.go b/cmd/flux/create_source_helm.go index 81746082..e7fa876b 100644 --- a/cmd/flux/create_source_helm.go +++ b/cmd/flux/create_source_helm.go @@ -64,13 +64,13 @@ For private Helm repositories, the basic authentication credentials are stored i # Create a source for an OCI Helm repository flux create source helm podinfo \ - --url=oci://ghcr.io/stefanprodan/charts/podinfo + --url=oci://ghcr.io/stefanprodan/charts/podinfo \ --username=username \ --password=password # Create a source for an OCI Helm repository using an existing secret with basic auth or dockerconfig credentials flux create source helm podinfo \ - --url=oci://ghcr.io/stefanprodan/charts/podinfo + --url=oci://ghcr.io/stefanprodan/charts/podinfo \ --secret-ref=docker-config`, RunE: createSourceHelmCmdRun, } From c07e33eff0fdc04184040392bfa7497d6d96d74a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 May 2023 01:21:22 +0000 Subject: [PATCH 519/818] build(deps): bump snyk/actions Bumps [snyk/actions](https://github.com/snyk/actions) from 806182742461562b67788a64410098c9d9b96adb to b98d498629f1c368650224d6d212bf7dfa89e4bf. - [Release notes](https://github.com/snyk/actions/releases) - [Commits](https://github.com/snyk/actions/compare/806182742461562b67788a64410098c9d9b96adb...b98d498629f1c368650224d6d212bf7dfa89e4bf) --- updated-dependencies: - dependency-name: snyk/actions dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- .github/workflows/scan.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index 7b66aaaa..859d49a9 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -45,7 +45,7 @@ jobs: run: | make tidy make cmd/flux/.manifests.done - - uses: snyk/actions/setup@806182742461562b67788a64410098c9d9b96adb + - uses: snyk/actions/setup@b98d498629f1c368650224d6d212bf7dfa89e4bf - name: Run Snyk to check for vulnerabilities continue-on-error: true run: | From 860682e47671faca6d6fe1b5c3fe61b87e9e9a79 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 May 2023 07:24:59 +0000 Subject: [PATCH 520/818] build(deps): bump github/codeql-action from 2.3.3 to 2.3.5 Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2.3.3 to 2.3.5. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/29b1f65c5e92e24fe6b6647da1eaabe529cec70f...0225834cc549ee0ca93cb085b92954821a145866) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/ossf.yaml | 2 +- .github/workflows/scan.yaml | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ossf.yaml b/.github/workflows/ossf.yaml index c8fee985..e281e5ba 100644 --- a/.github/workflows/ossf.yaml +++ b/.github/workflows/ossf.yaml @@ -34,6 +34,6 @@ jobs: path: results.sarif retention-days: 5 - name: Upload SARIF results - uses: github/codeql-action/upload-sarif@29b1f65c5e92e24fe6b6647da1eaabe529cec70f # v2.3.3 + uses: github/codeql-action/upload-sarif@0225834cc549ee0ca93cb085b92954821a145866 # v2.3.5 with: sarif_file: results.sarif diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index 859d49a9..ecf73332 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -53,7 +53,7 @@ jobs: env: SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }} - name: Upload result to GitHub Code Scanning - uses: github/codeql-action/upload-sarif@29b1f65c5e92e24fe6b6647da1eaabe529cec70f # v2.3.3 + uses: github/codeql-action/upload-sarif@0225834cc549ee0ca93cb085b92954821a145866 # v2.3.5 with: sarif_file: snyk.sarif @@ -73,10 +73,10 @@ jobs: **/go.sum **/go.mod - name: Initialize CodeQL - uses: github/codeql-action/init@29b1f65c5e92e24fe6b6647da1eaabe529cec70f # v2.3.3 + uses: github/codeql-action/init@0225834cc549ee0ca93cb085b92954821a145866 # v2.3.5 with: languages: go - name: Autobuild - uses: github/codeql-action/autobuild@29b1f65c5e92e24fe6b6647da1eaabe529cec70f # v2.3.3 + uses: github/codeql-action/autobuild@0225834cc549ee0ca93cb085b92954821a145866 # v2.3.5 - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@29b1f65c5e92e24fe6b6647da1eaabe529cec70f # v2.3.3 + uses: github/codeql-action/analyze@0225834cc549ee0ca93cb085b92954821a145866 # v2.3.5 From 020a494f3f0e6464ae348e5c738ff780afc58046 Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Thu, 25 May 2023 12:12:43 +0100 Subject: [PATCH 521/818] Retry oci push operations Signed-off-by: Somtochi Onyekwere --- cmd/flux/push_artifact.go | 83 ++++++++++++++++++++++++++++++++++----- go.mod | 6 +-- go.sum | 22 ++++------- 3 files changed, 85 insertions(+), 26 deletions(-) diff --git a/cmd/flux/push_artifact.go b/cmd/flux/push_artifact.go index 661577ed..6a93d25e 100644 --- a/cmd/flux/push_artifact.go +++ b/cmd/flux/push_artifact.go @@ -22,15 +22,24 @@ import ( "fmt" "os" "strings" + "time" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + "github.com/google/go-containerregistry/pkg/authn" + "github.com/google/go-containerregistry/pkg/crane" + "github.com/google/go-containerregistry/pkg/logs" + "github.com/google/go-containerregistry/pkg/name" reg "github.com/google/go-containerregistry/pkg/name" + "github.com/google/go-containerregistry/pkg/v1/remote" + "github.com/google/go-containerregistry/pkg/v1/remote/transport" "github.com/spf13/cobra" "sigs.k8s.io/yaml" - "github.com/fluxcd/flux2/v2/internal/flags" + "github.com/fluxcd/pkg/oci" + "github.com/fluxcd/pkg/oci/auth/login" + client "github.com/fluxcd/pkg/oci/client" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" - oci "github.com/fluxcd/pkg/oci/client" + "github.com/fluxcd/flux2/v2/internal/flags" ) var pushArtifactCmd = &cobra.Command{ @@ -105,6 +114,7 @@ type pushArtifactFlags struct { ignorePaths []string annotations []string output string + debug bool } var pushArtifactArgs = newPushArtifactFlags() @@ -125,6 +135,7 @@ func init() { pushArtifactCmd.Flags().StringArrayVarP(&pushArtifactArgs.annotations, "annotations", "a", nil, "Set custom OCI annotations in the format '='") pushArtifactCmd.Flags().StringVarP(&pushArtifactArgs.output, "output", "o", "", "the format in which the artifact digest should be printed, can be 'json' or 'yaml'") + pushArtifactCmd.Flags().BoolVarP(&pushArtifactArgs.debug, "debug", "", false, "display logs from underlying library") pushCmd.AddCommand(pushArtifactCmd) } @@ -147,7 +158,12 @@ func pushArtifactCmdRun(cmd *cobra.Command, args []string) error { return fmt.Errorf("invalid path %q", pushArtifactArgs.path) } - url, err := oci.ParseArtifactURL(ociURL) + url, err := client.ParseArtifactURL(ociURL) + if err != nil { + return err + } + + ref, err := name.ParseReference(url) if err != nil { return err } @@ -175,7 +191,13 @@ func pushArtifactCmdRun(cmd *cobra.Command, args []string) error { annotations[kv[0]] = kv[1] } - meta := oci.Metadata{ + if pushArtifactArgs.debug { + // direct logs from crane library to stderr + // this can be useful to figure out things happening underneath e.g when the library is retrying a request + logs.Warn.SetOutput(os.Stderr) + } + + meta := client.Metadata{ Source: pushArtifactArgs.source, Revision: pushArtifactArgs.revision, Annotations: annotations, @@ -184,13 +206,15 @@ func pushArtifactCmdRun(cmd *cobra.Command, args []string) error { ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) defer cancel() - ociClient := oci.NewClient(oci.DefaultOptions()) - + var auth authn.Authenticator + opts := client.DefaultOptions() if pushArtifactArgs.provider.String() == sourcev1.GenericOCIProvider && pushArtifactArgs.creds != "" { logger.Actionf("logging in to registry with credentials") - if err := ociClient.LoginWithCredentials(pushArtifactArgs.creds); err != nil { + auth, err = client.GetAuthFromCredentials(pushArtifactArgs.creds) + if err != nil { return fmt.Errorf("could not login with credentials: %w", err) } + opts = append(opts, crane.WithAuth(auth)) } if pushArtifactArgs.provider.String() != sourcev1.GenericOCIProvider { @@ -200,15 +224,43 @@ func pushArtifactCmdRun(cmd *cobra.Command, args []string) error { return fmt.Errorf("provider not supported: %w", err) } - if err := ociClient.LoginWithProvider(ctx, url, ociProvider); err != nil { + auth, err = login.NewManager().Login(ctx, url, ref, getProviderLoginOption(ociProvider)) + if err != nil { return fmt.Errorf("error during login with provider: %w", err) } + opts = append(opts, crane.WithAuth(auth)) + } + + if rootArgs.timeout != 0 { + backoff := remote.Backoff{ + Duration: 1.0 * time.Second, + Factor: 3, + Jitter: 0.1, + // timeout happens when the cap is exceeded or number of steps is reached + // 10 steps is big enough that most reasonable cap(under 30min) will be exceeded before + // the number of steps are completed. + Steps: 10, + Cap: rootArgs.timeout, + } + + if auth == nil { + auth, err = authn.DefaultKeychain.Resolve(ref.Context()) + if err != nil { + return err + } + } + transportOpts, err := client.WithRetryTransport(ctx, ref, auth, backoff, []string{ref.Context().Scope(transport.PushScope)}) + if err != nil { + return fmt.Errorf("error setting up transport: %w", err) + } + opts = append(opts, transportOpts, client.WithRetryBackOff(backoff)) } if pushArtifactArgs.output == "" { logger.Actionf("pushing artifact to %s", url) } + ociClient := client.NewClient(opts) digestURL, err := ociClient.Push(ctx, url, path, meta, pushArtifactArgs.ignorePaths) if err != nil { return fmt.Errorf("pushing artifact failed: %w", err) @@ -256,3 +308,16 @@ func pushArtifactCmdRun(cmd *cobra.Command, args []string) error { return nil } + +func getProviderLoginOption(provider oci.Provider) login.ProviderOptions { + var opts login.ProviderOptions + switch provider { + case oci.ProviderAzure: + opts.AzureAutoLogin = true + case oci.ProviderAWS: + opts.AwsAutoLogin = true + case oci.ProviderGCP: + opts.GcpAutoLogin = true + } + return opts +} diff --git a/go.mod b/go.mod index 549b7cba..b2c38e64 100644 --- a/go.mod +++ b/go.mod @@ -19,7 +19,7 @@ require ( github.com/fluxcd/pkg/git v0.12.1 github.com/fluxcd/pkg/git/gogit v0.10.0 github.com/fluxcd/pkg/kustomize v1.3.1 - github.com/fluxcd/pkg/oci v0.26.1 + github.com/fluxcd/pkg/oci v0.27.0 github.com/fluxcd/pkg/runtime v0.38.1 github.com/fluxcd/pkg/sourceignore v0.3.3 github.com/fluxcd/pkg/ssa v0.28.1 @@ -115,9 +115,9 @@ require ( github.com/fluxcd/pkg/tar v0.2.0 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/go-errors/errors v1.4.2 // indirect - github.com/go-git/gcfg v1.5.0 // indirect + github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect github.com/go-git/go-billy/v5 v5.4.1 // indirect - github.com/go-git/go-git/v5 v5.6.1 // indirect + github.com/go-git/go-git/v5 v5.7.0 // indirect github.com/go-logr/logr v1.2.4 // indirect github.com/go-openapi/jsonpointer v0.19.6 // indirect github.com/go-openapi/jsonreference v0.20.1 // indirect diff --git a/go.sum b/go.sum index 8791c64f..9b744562 100644 --- a/go.sum +++ b/go.sum @@ -23,7 +23,6 @@ github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migc github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4/go.mod h1:UBYPn8k0D56RtnR8RFQMjmh4KrZzWJ5o7Z9SYjossQ8= -github.com/ProtonMail/go-crypto v0.0.0-20230217124315-7d5c6f04bbb8/go.mod h1:I0gYDMZ6Z5GRU7l58bNFSkPTFN6Yl12dsUlAZ8xy98g= github.com/ProtonMail/go-crypto v0.0.0-20230518184743-7afd39499903 h1:ZK3C5DtzV2nVAQTx5S5jQvMeDqWtD1By5mOoyY/xJek= github.com/ProtonMail/go-crypto v0.0.0-20230518184743-7afd39499903/go.mod h1:8TI4H3IbrackdNgv+92dI+rhpCaLqM0IfpgCgenFvRE= github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d h1:UrqY+r/OJnIp5u0s1SbQ8dVfLCZJsnvazdBP5hS4iRs= @@ -130,6 +129,7 @@ github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNE github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/drone/envsubst v1.0.3 h1:PCIBwNDYjs50AsLZPYdfhSATKaRg/FJmDc2D6+C2x8g= github.com/drone/envsubst v1.0.3/go.mod h1:N2jZmlMufstn1KEqvbHjw40h1KyTmnVzHcSc9bFiJ2g= +github.com/elazarl/goproxy v0.0.0-20221015165544-a0805db90819 h1:RIB4cRk+lBqKK3Oy0r2gRX4ui7tuhiZq2SuTtTCi0/0= github.com/emicklei/go-restful/v3 v3.10.0 h1:X4gma4HM7hFm6WMeAsTfqA0GOfdNoCzBIkHGoRLGXuM= github.com/emicklei/go-restful/v3 v3.10.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= @@ -182,8 +182,8 @@ github.com/fluxcd/pkg/git/gogit v0.10.0/go.mod h1:BOEHZtgbHM5pzKTBIWbtTx2j2artkb github.com/fluxcd/pkg/gittestserver v0.8.3 h1:ehqTcqXyN095+AK1XCJDQBljeaOhatF9bc0lFblThCw= github.com/fluxcd/pkg/kustomize v1.3.1 h1:xOltPfO7/3h+bRMI90sTYgs/LI5VeW9pPMUMpZbo2HI= github.com/fluxcd/pkg/kustomize v1.3.1/go.mod h1:n9QJcwioLTWggJ+TYcVFa4jR7n0hRU+KeNA3zTWh9bo= -github.com/fluxcd/pkg/oci v0.26.1 h1:MMEo751h8FF7yTbRkbJ1piXbOyFjlBOaGpPCmaWDWAg= -github.com/fluxcd/pkg/oci v0.26.1/go.mod h1:WJRW6EbcYv5DC8PCGbIIviv1SxgCtyY9xai7GOERIKs= +github.com/fluxcd/pkg/oci v0.27.0 h1:Q1jnPjuNGn1/xvG+sCXsWEmXvA5O1tU0WMdXdNlDEoE= +github.com/fluxcd/pkg/oci v0.27.0/go.mod h1:LK6m+gxJFpedtb0Z5leNzIib3XbXu0Wts3eXhVbscDw= github.com/fluxcd/pkg/runtime v0.38.1 h1:deY7LP2e1UfHXmxNFFzY6MAbqdLWlRgvK9f/PIXyY5Y= github.com/fluxcd/pkg/runtime v0.38.1/go.mod h1:x7bNbCDuvErmqD3gPNgGDI/ovjHBwvNPiwmAJuIMqNM= github.com/fluxcd/pkg/sourceignore v0.3.3 h1:Ue29JAuPECEYdvIqdpXpQaDxpeySn7amarLArp7XoIs= @@ -207,15 +207,16 @@ github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY= github.com/gliderlabs/ssh v0.3.5/go.mod h1:8XB4KraRrX39qHhT6yxPsHedjA08I/uBVwj4xC+/+z4= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= -github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4= github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= +github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= +github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= github.com/go-git/go-billy/v5 v5.3.1/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= github.com/go-git/go-billy/v5 v5.4.1 h1:Uwp5tDRkPr+l/TnbHOQzp+tmJfLceOlbVucgpTz8ix4= github.com/go-git/go-billy/v5 v5.4.1/go.mod h1:vjbugF6Fz7JIflbVpl1hJsGjSHNltrSw45YK/ukIvQg= -github.com/go-git/go-git-fixtures/v4 v4.3.1 h1:y5z6dd3qi8Hl+stezc8p3JxDkoTRqMAlKnXHuzrfjTQ= github.com/go-git/go-git-fixtures/v4 v4.3.1/go.mod h1:8LHG1a3SRW71ettAD/jW13h8c6AqjVSeL11RAdgaqpo= -github.com/go-git/go-git/v5 v5.6.1 h1:q4ZRqQl4pR/ZJHc1L5CFjGA1a10u76aV1iC+nh+bHsk= -github.com/go-git/go-git/v5 v5.6.1/go.mod h1:mvyoL6Unz0PiTQrGQfSfiLFhBH1c1e84ylC2MDs4ee8= +github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20230305113008-0c11038e723f h1:Pz0DHeFij3XFhoBRGUDPzSJ+w2UcK5/0JvF8DRI58r8= +github.com/go-git/go-git/v5 v5.7.0 h1:t9AudWVLmqzlo+4bqdf7GY+46SUuRsx59SboFxkq2aE= +github.com/go-git/go-git/v5 v5.7.0/go.mod h1:coJHKEOk5kUClpsNlXrUvPrDxY3w3gjHvhcZd8Fodw8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= @@ -398,7 +399,6 @@ github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTS github.com/mitchellh/hashstructure v1.1.0 h1:P6P1hdjqAAknpY/M1CGipelZgp+4y9ja9kmUZPXP+H0= github.com/mitchellh/hashstructure v1.1.0/go.mod h1:xUDAozZz0Wmdiufv0uyhnHkUTN6/6d8ulp4AwfLKrmA= github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f h1:2+myh5ml7lgEU/51gbeLHfKGNfgEQQIWrlbdaOsidbQ= -github.com/mmcloughlin/avo v0.5.0/go.mod h1:ChHFdoV7ql95Wi7vuq2YT1bwCJqiWdZrQ1im3VujLYM= github.com/moby/spdystream v0.2.0 h1:cjW1zVyyoiM0T7b6UoySUFqzXMoqRckQtXwGPiBhOM8= github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= github.com/moby/term v0.0.0-20221205130635-1aeaba878587 h1:HfkjXDfhgVaN5rmueG8cL8KKeFNecRCXFhaJ2qZ5SKA= @@ -535,7 +535,6 @@ go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A= go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= -golang.org/x/arch v0.1.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -545,7 +544,6 @@ golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= -golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g= golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= @@ -556,7 +554,6 @@ golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHl golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk= golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= @@ -581,7 +578,6 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= 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 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= @@ -668,7 +664,6 @@ golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.9.1 h1:8WMNJAz3zrtPmnYC7ISf5dEn3MT0gY7jBJfw27yrrLo= golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= @@ -752,7 +747,6 @@ k8s.io/kubectl v0.27.2 h1:sSBM2j94MHBFRWfHIWtEXWCicViQzZsb177rNsKBhZg= k8s.io/kubectl v0.27.2/go.mod h1:GCOODtxPcrjh+EC611MqREkU8RjYBh10ldQCQ6zpFKw= k8s.io/utils v0.0.0-20230406110748-d93618cff8a2 h1:qY1Ad8PODbnymg2pRbkyMT/ylpTrCM8P2RJ0yroCyIk= k8s.io/utils v0.0.0-20230406110748-d93618cff8a2/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= -rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= sigs.k8s.io/cli-utils v0.34.0 h1:zCUitt54f0/MYj/ajVFnG6XSXMhpZ72O/3RewIchW8w= sigs.k8s.io/cli-utils v0.34.0/go.mod h1:EXyMwPMu9OL+LRnj0JEMsGG/fRvbgFadcVlSnE8RhFs= sigs.k8s.io/controller-runtime v0.15.0 h1:ML+5Adt3qZnMSYxZ7gAverBLNPSMQEibtzAgp0UPojU= From 8728b07e8517c797259e7f834ff5f65452e2c298 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Mon, 29 May 2023 12:47:54 +0300 Subject: [PATCH 522/818] Update kubectl to v1.27.2 in flux-cli image Signed-off-by: Stefan Prodan --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index ea658d8e..18c5d4c7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ FROM alpine:3.18 as builder RUN apk add --no-cache ca-certificates curl ARG ARCH=linux/amd64 -ARG KUBECTL_VER=1.26.2 +ARG KUBECTL_VER=1.27.2 RUN curl -sL https://storage.googleapis.com/kubernetes-release/release/v${KUBECTL_VER}/bin/${ARCH}/kubectl \ -o /usr/local/bin/kubectl && chmod +x /usr/local/bin/kubectl && \ From cb5eb417c55cd6fa2a3cfe8f64188597e1df8cbf Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Mon, 29 May 2023 10:04:34 +0000 Subject: [PATCH 523/818] Update toolkit components - helm-controller to v0.34.0 https://github.com/fluxcd/helm-controller/blob/v0.34.0/CHANGELOG.md - kustomize-controller to v1.0.0-rc.4 https://github.com/fluxcd/kustomize-controller/blob/v1.0.0-rc.4/CHANGELOG.md - source-controller to v1.0.0-rc.4 https://github.com/fluxcd/source-controller/blob/v1.0.0-rc.4/CHANGELOG.md - notification-controller to v1.0.0-rc.4 https://github.com/fluxcd/notification-controller/blob/v1.0.0-rc.4/CHANGELOG.md - image-reflector-controller to v0.28.0 https://github.com/fluxcd/image-reflector-controller/blob/v0.28.0/CHANGELOG.md - image-automation-controller to v0.34.0 https://github.com/fluxcd/image-automation-controller/blob/v0.34.0/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 14 +++++----- go.sum | 28 +++++++++---------- .../bases/helm-controller/kustomization.yaml | 4 +-- .../kustomization.yaml | 4 +-- .../kustomization.yaml | 4 +-- .../kustomize-controller/kustomization.yaml | 4 +-- .../kustomization.yaml | 4 +-- .../source-controller/kustomization.yaml | 4 +-- manifests/crds/kustomization.yaml | 12 ++++---- 9 files changed, 39 insertions(+), 39 deletions(-) diff --git a/go.mod b/go.mod index b2c38e64..70851f21 100644 --- a/go.mod +++ b/go.mod @@ -9,11 +9,11 @@ require ( github.com/distribution/distribution/v3 v3.0.0-20230519140516-983358f8e250 github.com/fluxcd/go-git-providers v0.15.3 github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 - github.com/fluxcd/helm-controller/api v0.33.0 - github.com/fluxcd/image-automation-controller/api v0.33.1 - github.com/fluxcd/image-reflector-controller/api v0.27.2 - github.com/fluxcd/kustomize-controller/api v1.0.0-rc.3 - github.com/fluxcd/notification-controller/api v1.0.0-rc.3 + github.com/fluxcd/helm-controller/api v0.34.0 + github.com/fluxcd/image-automation-controller/api v0.34.0 + github.com/fluxcd/image-reflector-controller/api v0.28.0 + github.com/fluxcd/kustomize-controller/api v1.0.0-rc.4 + github.com/fluxcd/notification-controller/api v1.0.0-rc.4 github.com/fluxcd/pkg/apis/event v0.5.0 github.com/fluxcd/pkg/apis/meta v1.1.0 github.com/fluxcd/pkg/git v0.12.1 @@ -26,7 +26,7 @@ require ( github.com/fluxcd/pkg/ssh v0.7.4 github.com/fluxcd/pkg/untar v0.3.0 github.com/fluxcd/pkg/version v0.2.2 - github.com/fluxcd/source-controller/api v1.0.0-rc.3 + github.com/fluxcd/source-controller/api v1.0.0-rc.4 github.com/gonvenience/bunt v1.3.5 github.com/gonvenience/ytbx v1.4.4 github.com/google/go-cmp v0.5.9 @@ -215,7 +215,7 @@ require ( k8s.io/component-base v0.27.2 // indirect k8s.io/klog/v2 v2.100.1 // indirect k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f // indirect - k8s.io/utils v0.0.0-20230406110748-d93618cff8a2 // indirect + k8s.io/utils v0.0.0-20230505201702-9f6742963106 // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect ) diff --git a/go.sum b/go.sum index 9b744562..9888baad 100644 --- a/go.sum +++ b/go.sum @@ -157,16 +157,16 @@ github.com/fluxcd/go-git-providers v0.15.3 h1:vJ1J+WxZYxrOrWp2ojpixjERxmN6XY9C/A github.com/fluxcd/go-git-providers v0.15.3/go.mod h1:6fkRPzq0EQHQKO0/6CmfoEr6YHYwBKzDbxiEUjaxzl4= github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 h1:Gm5sGGk+/Wq6RhX4xpCZ2IqjDp5XkjlhENaAuAlpdKc= github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4/go.mod h1:raWgfUV7lDQVXp4QXUaeNNJkRVKz97UQuF+0kdY7Vmo= -github.com/fluxcd/helm-controller/api v0.33.0 h1:XUoBxaSzJXFygpGIpLxslXhZ+Xhss3ADqLx1dP2ZZbk= -github.com/fluxcd/helm-controller/api v0.33.0/go.mod h1:fihSaRVufjN+eDvg7qBxrDjLfy9J075mTIx3UAC3c64= -github.com/fluxcd/image-automation-controller/api v0.33.1 h1:yvdNCHDOTpxp/QGj203EnO0Tr4GhZnRIfo1JHTTm12I= -github.com/fluxcd/image-automation-controller/api v0.33.1/go.mod h1:65BqKNpHQ+FfNH79WhmrTgqoetGAEBlr0aRvHLr9oug= -github.com/fluxcd/image-reflector-controller/api v0.27.2 h1:SqziaPXmF4mmPS5NGCIutRMaqrrUDhHdi0JSLz77gOo= -github.com/fluxcd/image-reflector-controller/api v0.27.2/go.mod h1:TNn1Y3XuinlCRiohmjUtwvjWurTspPg0U0cCvMI5Q3E= -github.com/fluxcd/kustomize-controller/api v1.0.0-rc.3 h1:h87VnTN00v6BsBUKqUdZH8Q7QitdwyykGg1oK9yXhlU= -github.com/fluxcd/kustomize-controller/api v1.0.0-rc.3/go.mod h1:ql/HdV+pGzqnHaU5oNyvYR7lHPWc/me3HUPd4g7A9BI= -github.com/fluxcd/notification-controller/api v1.0.0-rc.3 h1:RxHGUo9nSXj+vXEYjo+35vrABx+qugeWsNTJ6Zb/fwM= -github.com/fluxcd/notification-controller/api v1.0.0-rc.3/go.mod h1:bfZCGyWq1SPmZSQSCuHRum5Z1olidWp8UbZkO5kcato= +github.com/fluxcd/helm-controller/api v0.34.0 h1:GsRVMIQnFbGbjpt6yfzVPAt0Sc4aY9v695K9/fVgDMw= +github.com/fluxcd/helm-controller/api v0.34.0/go.mod h1:1v1UqS5jOgWdMDzvJBgdcY40RminDUO6A0by4IkHd5s= +github.com/fluxcd/image-automation-controller/api v0.34.0 h1:pltlvRvphPPepXGVCTeiwGcdAkufOgfcAb37eg3kj98= +github.com/fluxcd/image-automation-controller/api v0.34.0/go.mod h1:OB0s+uE7BYf6ml6fWD/7EBU8ieJrUItJyDoKZNmIcHw= +github.com/fluxcd/image-reflector-controller/api v0.28.0 h1:2a1UxPU1RHTxl+5YFFB0KuOCHrR3hL0B7fvAPJo2UXY= +github.com/fluxcd/image-reflector-controller/api v0.28.0/go.mod h1:bY28TT8Jv/pvdF/m+c64QCEiCY2BShMe22l1zRDYm4s= +github.com/fluxcd/kustomize-controller/api v1.0.0-rc.4 h1:e5dO5HaFISFNzhfi4zuPniE545vVnEi3VnSBcbxcZqU= +github.com/fluxcd/kustomize-controller/api v1.0.0-rc.4/go.mod h1:UTJu1JMr+rkabWkUWMNiOeFeDu+4ZKfJIK+oqEwOjzc= +github.com/fluxcd/notification-controller/api v1.0.0-rc.4 h1:bDqIirpscGUY0+1u+RKvTEmX43iiZ2xeQLz27FoJJD8= +github.com/fluxcd/notification-controller/api v1.0.0-rc.4/go.mod h1:XL5h5/x46e41rtNc8mwxTKX4kAtgTNuzJS0PV2c0iIQ= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= github.com/fluxcd/pkg/apis/event v0.5.0 h1:aAoo3AcWMh6hFfhxFED2TbyIk9590C7l17eh3Ys5I3I= @@ -198,8 +198,8 @@ github.com/fluxcd/pkg/untar v0.3.0 h1:FOGc69nBvasLjFu5Imdc7Kl/U/gRdIyyF2ZkD9gKuX github.com/fluxcd/pkg/untar v0.3.0/go.mod h1:ClGpWYeDidYETkl048vCgHlsNtn5BHYHvMmQdadRGKs= github.com/fluxcd/pkg/version v0.2.2 h1:ZpVXECeLA5hIQMft11iLp6gN3cKcz6UNuVTQPw/bRdI= github.com/fluxcd/pkg/version v0.2.2/go.mod h1:NGnh/no8S6PyfCDxRFrPY3T5BUnqP48MxfxNRU0z8C0= -github.com/fluxcd/source-controller/api v1.0.0-rc.3 h1:zfCUEJDN0VxHRoJGjnqlTyVe61ZmImVBOzn14tepzSU= -github.com/fluxcd/source-controller/api v1.0.0-rc.3/go.mod h1:CvGNdS8g/MqwpERUK6aJp4lndsrm+JBzGpoyyZ4u0c8= +github.com/fluxcd/source-controller/api v1.0.0-rc.4 h1:fLfxQF7c5sMlmMFNCkgRKSfeRTETgeaf+DRmHs7NfV4= +github.com/fluxcd/source-controller/api v1.0.0-rc.4/go.mod h1:W6tNXr3mRPhdc5+Jke9OZnuk/3THNzGzRJVhAtLfzss= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= @@ -745,8 +745,8 @@ k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f h1:2kWPakN3i/k81b0gvD5C5F k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f/go.mod h1:byini6yhqGC14c3ebc/QwanvYwhuMWF6yz2F8uwW8eg= k8s.io/kubectl v0.27.2 h1:sSBM2j94MHBFRWfHIWtEXWCicViQzZsb177rNsKBhZg= k8s.io/kubectl v0.27.2/go.mod h1:GCOODtxPcrjh+EC611MqREkU8RjYBh10ldQCQ6zpFKw= -k8s.io/utils v0.0.0-20230406110748-d93618cff8a2 h1:qY1Ad8PODbnymg2pRbkyMT/ylpTrCM8P2RJ0yroCyIk= -k8s.io/utils v0.0.0-20230406110748-d93618cff8a2/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +k8s.io/utils v0.0.0-20230505201702-9f6742963106 h1:EObNQ3TW2D+WptiYXlApGNLVy0zm/JIBVY9i+M4wpAU= +k8s.io/utils v0.0.0-20230505201702-9f6742963106/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= sigs.k8s.io/cli-utils v0.34.0 h1:zCUitt54f0/MYj/ajVFnG6XSXMhpZ72O/3RewIchW8w= sigs.k8s.io/cli-utils v0.34.0/go.mod h1:EXyMwPMu9OL+LRnj0JEMsGG/fRvbgFadcVlSnE8RhFs= sigs.k8s.io/controller-runtime v0.15.0 h1:ML+5Adt3qZnMSYxZ7gAverBLNPSMQEibtzAgp0UPojU= diff --git a/manifests/bases/helm-controller/kustomization.yaml b/manifests/bases/helm-controller/kustomization.yaml index f099b522..57d1f9c3 100644 --- a/manifests/bases/helm-controller/kustomization.yaml +++ b/manifests/bases/helm-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/helm-controller/releases/download/v0.33.0/helm-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.33.0/helm-controller.deployment.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.34.0/helm-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.34.0/helm-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/image-automation-controller/kustomization.yaml b/manifests/bases/image-automation-controller/kustomization.yaml index fd06ed55..5a8ab19a 100644 --- a/manifests/bases/image-automation-controller/kustomization.yaml +++ b/manifests/bases/image-automation-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.33.1/image-automation-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.33.1/image-automation-controller.deployment.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.34.0/image-automation-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.34.0/image-automation-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/image-reflector-controller/kustomization.yaml b/manifests/bases/image-reflector-controller/kustomization.yaml index e234cc14..9a56508d 100644 --- a/manifests/bases/image-reflector-controller/kustomization.yaml +++ b/manifests/bases/image-reflector-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.27.2/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.27.2/image-reflector-controller.deployment.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.28.0/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.28.0/image-reflector-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/kustomize-controller/kustomization.yaml b/manifests/bases/kustomize-controller/kustomization.yaml index 4380da9f..6b8d41d6 100644 --- a/manifests/bases/kustomize-controller/kustomization.yaml +++ b/manifests/bases/kustomize-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/kustomize-controller/releases/download/v1.0.0-rc.3/kustomize-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v1.0.0-rc.3/kustomize-controller.deployment.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v1.0.0-rc.4/kustomize-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v1.0.0-rc.4/kustomize-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/notification-controller/kustomization.yaml b/manifests/bases/notification-controller/kustomization.yaml index 97e1f14e..79280c49 100644 --- a/manifests/bases/notification-controller/kustomization.yaml +++ b/manifests/bases/notification-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/notification-controller/releases/download/v1.0.0-rc.3/notification-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v1.0.0-rc.3/notification-controller.deployment.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v1.0.0-rc.4/notification-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v1.0.0-rc.4/notification-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index 4f64514b..2cdc4b9c 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v1.0.0-rc.3/source-controller.crds.yaml -- https://github.com/fluxcd/source-controller/releases/download/v1.0.0-rc.3/source-controller.deployment.yaml +- https://github.com/fluxcd/source-controller/releases/download/v1.0.0-rc.4/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v1.0.0-rc.4/source-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index beb37e99..841a4747 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -1,9 +1,9 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v1.0.0-rc.3/source-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v1.0.0-rc.3/kustomize-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.33.0/helm-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v1.0.0-rc.3/notification-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.27.2/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.33.1/image-automation-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v1.0.0-rc.4/source-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v1.0.0-rc.4/kustomize-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.34.0/helm-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v1.0.0-rc.4/notification-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.28.0/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.34.0/image-automation-controller.crds.yaml From 41cdd3dcf727a921683a9a44534066d7b914e0d9 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Mon, 29 May 2023 13:52:36 +0300 Subject: [PATCH 524/818] Update Git packages Signed-off-by: Stefan Prodan --- go.mod | 21 ++++++----- go.sum | 35 +++++++++--------- pkg/bootstrap/bootstrap_plain_git.go | 2 +- pkg/manifestgen/install/manifests.go | 4 +-- tests/azure/azure_test.go | 4 +-- tests/azure/go.mod | 27 +++++++------- tests/azure/go.sum | 54 ++++++++++++++-------------- tests/azure/util_test.go | 10 +++--- 8 files changed, 81 insertions(+), 76 deletions(-) diff --git a/go.mod b/go.mod index 70851f21..2a18d0d2 100644 --- a/go.mod +++ b/go.mod @@ -4,11 +4,10 @@ go 1.18 require ( github.com/Masterminds/semver/v3 v3.2.1 - github.com/ProtonMail/go-crypto v0.0.0-20230518184743-7afd39499903 + github.com/ProtonMail/go-crypto v0.0.0-20230528122434-6f98819771a1 github.com/cyphar/filepath-securejoin v0.2.3 github.com/distribution/distribution/v3 v3.0.0-20230519140516-983358f8e250 - github.com/fluxcd/go-git-providers v0.15.3 - github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 + github.com/fluxcd/go-git-providers v0.16.0 github.com/fluxcd/helm-controller/api v0.34.0 github.com/fluxcd/image-automation-controller/api v0.34.0 github.com/fluxcd/image-reflector-controller/api v0.28.0 @@ -16,17 +15,18 @@ require ( github.com/fluxcd/notification-controller/api v1.0.0-rc.4 github.com/fluxcd/pkg/apis/event v0.5.0 github.com/fluxcd/pkg/apis/meta v1.1.0 - github.com/fluxcd/pkg/git v0.12.1 - github.com/fluxcd/pkg/git/gogit v0.10.0 - github.com/fluxcd/pkg/kustomize v1.3.1 + github.com/fluxcd/pkg/git v0.12.2 + github.com/fluxcd/pkg/git/gogit v0.11.1 + github.com/fluxcd/pkg/kustomize v1.3.3 github.com/fluxcd/pkg/oci v0.27.0 github.com/fluxcd/pkg/runtime v0.38.1 - github.com/fluxcd/pkg/sourceignore v0.3.3 + github.com/fluxcd/pkg/sourceignore v0.3.4 github.com/fluxcd/pkg/ssa v0.28.1 github.com/fluxcd/pkg/ssh v0.7.4 - github.com/fluxcd/pkg/untar v0.3.0 + github.com/fluxcd/pkg/tar v0.2.0 github.com/fluxcd/pkg/version v0.2.2 github.com/fluxcd/source-controller/api v1.0.0-rc.4 + github.com/go-git/go-git/v5 v5.7.0 github.com/gonvenience/bunt v1.3.5 github.com/gonvenience/ytbx v1.4.4 github.com/google/go-cmp v0.5.9 @@ -110,14 +110,13 @@ require ( github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f // indirect github.com/fatih/color v1.13.0 // indirect github.com/felixge/httpsnoop v1.0.3 // indirect + github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 // indirect github.com/fluxcd/pkg/apis/acl v0.1.0 // indirect github.com/fluxcd/pkg/apis/kustomize v1.1.0 // indirect - github.com/fluxcd/pkg/tar v0.2.0 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/go-errors/errors v1.4.2 // indirect github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect github.com/go-git/go-billy/v5 v5.4.1 // indirect - github.com/go-git/go-git/v5 v5.7.0 // indirect github.com/go-logr/logr v1.2.4 // indirect github.com/go-openapi/jsonpointer v0.19.6 // indirect github.com/go-openapi/jsonreference v0.20.1 // indirect @@ -133,7 +132,7 @@ require ( github.com/gonvenience/wrap v1.1.2 // indirect github.com/google/btree v1.1.2 // indirect github.com/google/gnostic v0.6.9 // indirect - github.com/google/go-github/v49 v49.1.0 // indirect + github.com/google/go-github/v52 v52.0.0 // indirect github.com/google/go-querystring v1.1.0 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect diff --git a/go.sum b/go.sum index 9888baad..23488681 100644 --- a/go.sum +++ b/go.sum @@ -23,8 +23,8 @@ github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migc github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4/go.mod h1:UBYPn8k0D56RtnR8RFQMjmh4KrZzWJ5o7Z9SYjossQ8= -github.com/ProtonMail/go-crypto v0.0.0-20230518184743-7afd39499903 h1:ZK3C5DtzV2nVAQTx5S5jQvMeDqWtD1By5mOoyY/xJek= -github.com/ProtonMail/go-crypto v0.0.0-20230518184743-7afd39499903/go.mod h1:8TI4H3IbrackdNgv+92dI+rhpCaLqM0IfpgCgenFvRE= +github.com/ProtonMail/go-crypto v0.0.0-20230528122434-6f98819771a1 h1:JMDGhoQvXNTqH6Y3MC0IUw6tcZvaUdujNqzK2HYWZc8= +github.com/ProtonMail/go-crypto v0.0.0-20230528122434-6f98819771a1/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d h1:UrqY+r/OJnIp5u0s1SbQ8dVfLCZJsnvazdBP5hS4iRs= github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ= github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= @@ -79,6 +79,7 @@ github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b/go.mod h1:obH5gd0Bsq github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0 h1:nvj0OLI3YqYXer/kZD8Ri1aaunCxIEsOst1BVJswV0o= github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE= github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= +github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= @@ -153,8 +154,8 @@ github.com/felixge/httpsnoop v1.0.3 h1:s/nj+GCswXYzN5v2DpNMuMQYe+0DDwt5WVCU6CWBd github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0= github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= -github.com/fluxcd/go-git-providers v0.15.3 h1:vJ1J+WxZYxrOrWp2ojpixjERxmN6XY9C/AxQbuVaIsQ= -github.com/fluxcd/go-git-providers v0.15.3/go.mod h1:6fkRPzq0EQHQKO0/6CmfoEr6YHYwBKzDbxiEUjaxzl4= +github.com/fluxcd/go-git-providers v0.16.0 h1:egDN1uv0jyHyvtFNHE1FQ1Slj5Xu7QEFxWj1shqYYGk= +github.com/fluxcd/go-git-providers v0.16.0/go.mod h1:dIUEy97GuCKAYHkDQS39Jqb6Pfg1mnGnqA5y2mp3wR4= github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 h1:Gm5sGGk+/Wq6RhX4xpCZ2IqjDp5XkjlhENaAuAlpdKc= github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4/go.mod h1:raWgfUV7lDQVXp4QXUaeNNJkRVKz97UQuF+0kdY7Vmo= github.com/fluxcd/helm-controller/api v0.34.0 h1:GsRVMIQnFbGbjpt6yfzVPAt0Sc4aY9v695K9/fVgDMw= @@ -175,27 +176,25 @@ github.com/fluxcd/pkg/apis/kustomize v1.1.0 h1:Fbv4dCB57r2+fiusozN7at8r7upTz58Z4 github.com/fluxcd/pkg/apis/kustomize v1.1.0/go.mod h1:CAe9Mjf9KVoTm1V4wpvq/FGXFDSnpBwfww/IG7mw3gM= github.com/fluxcd/pkg/apis/meta v1.1.0 h1:vYU1mvUzztnQyTzZOLHQ3wm/tXd7E1QZ2V91zuVJPsQ= github.com/fluxcd/pkg/apis/meta v1.1.0/go.mod h1:/QwCotRKL/BT6RSa4O75FlYW14fU8eRfKnoagzbkmL4= -github.com/fluxcd/pkg/git v0.12.1 h1:3HsCs+r/Au+P6870IfB1Cf6ifz6w1PzSm2xYnB+GW/4= -github.com/fluxcd/pkg/git v0.12.1/go.mod h1:HUG9ZSYSuIAfZbYTPcYptmlaWCfgSQYyzfQ5/WUQVQk= -github.com/fluxcd/pkg/git/gogit v0.10.0 h1:yL+mjSYW0SptgLQZE/x/hoSo9KulfHR524Qk2vZJKLM= -github.com/fluxcd/pkg/git/gogit v0.10.0/go.mod h1:BOEHZtgbHM5pzKTBIWbtTx2j2artkbLtKssFlZJDFu0= +github.com/fluxcd/pkg/git v0.12.2 h1:96xH3hy3WfwiD0DioyJZcGapYT3lmPc2s7jU5UM8buw= +github.com/fluxcd/pkg/git v0.12.2/go.mod h1:9TG4fEfGCF1XHLt9Xs7X2YOmkmWOiwfjH9tdGIQs8/8= +github.com/fluxcd/pkg/git/gogit v0.11.1 h1:17UbHEPQovLOhlrsPaDoJa3J7jX0I7G92TWXeEDf2eU= +github.com/fluxcd/pkg/git/gogit v0.11.1/go.mod h1:Hh358WYfwmvGf6Aaj1wjGZMN2AWlAcXRR6aubMQYq8M= github.com/fluxcd/pkg/gittestserver v0.8.3 h1:ehqTcqXyN095+AK1XCJDQBljeaOhatF9bc0lFblThCw= -github.com/fluxcd/pkg/kustomize v1.3.1 h1:xOltPfO7/3h+bRMI90sTYgs/LI5VeW9pPMUMpZbo2HI= -github.com/fluxcd/pkg/kustomize v1.3.1/go.mod h1:n9QJcwioLTWggJ+TYcVFa4jR7n0hRU+KeNA3zTWh9bo= +github.com/fluxcd/pkg/kustomize v1.3.3 h1:My3j7ImO/DMm5+nSDh+ytpSIpQ4mwDTUfNkJViShAfw= +github.com/fluxcd/pkg/kustomize v1.3.3/go.mod h1:XT2qaVCiBE4S2B23sd9l5etIKj4SApdcDHzmki+X2Vw= github.com/fluxcd/pkg/oci v0.27.0 h1:Q1jnPjuNGn1/xvG+sCXsWEmXvA5O1tU0WMdXdNlDEoE= github.com/fluxcd/pkg/oci v0.27.0/go.mod h1:LK6m+gxJFpedtb0Z5leNzIib3XbXu0Wts3eXhVbscDw= github.com/fluxcd/pkg/runtime v0.38.1 h1:deY7LP2e1UfHXmxNFFzY6MAbqdLWlRgvK9f/PIXyY5Y= github.com/fluxcd/pkg/runtime v0.38.1/go.mod h1:x7bNbCDuvErmqD3gPNgGDI/ovjHBwvNPiwmAJuIMqNM= -github.com/fluxcd/pkg/sourceignore v0.3.3 h1:Ue29JAuPECEYdvIqdpXpQaDxpeySn7amarLArp7XoIs= -github.com/fluxcd/pkg/sourceignore v0.3.3/go.mod h1:yuJzKggph0Bdbk9LgXjJQhvJZSTJV/1vS7mJuB7mPa0= +github.com/fluxcd/pkg/sourceignore v0.3.4 h1:0cfS2Pj7xp2qpaerMjYqOBr82LC+/mGHl6v6pRbi5hs= +github.com/fluxcd/pkg/sourceignore v0.3.4/go.mod h1:ejLx+/uIrPUgqVzMTR5JiWuUnzs+zTkoEf9gS92LqaE= github.com/fluxcd/pkg/ssa v0.28.1 h1:h5r5irAgDjgkmIqagOLOa/U7/Rx2fT2NKIb+vDTYOMg= github.com/fluxcd/pkg/ssa v0.28.1/go.mod h1:o55eBzWz7P/tqnCn5c622RZvjTP/GqvitqZUbsMIRwk= github.com/fluxcd/pkg/ssh v0.7.4 h1:8GYneCKH2dxrHQBalcDgOCC2NtqD0JO91FlWgvnzrfo= github.com/fluxcd/pkg/ssh v0.7.4/go.mod h1:9Syc8nVJaZEToPTU4E99j0jZ99w39oZtov+uiNX17sc= github.com/fluxcd/pkg/tar v0.2.0 h1:HEUHgONQYsJGeZZ4x6h5nQU9Aox1I4T3bOp1faWTqf8= github.com/fluxcd/pkg/tar v0.2.0/go.mod h1:w0/TOC7kwBJhnSJn7TCABkc/I7ib1f2Yz6vOsbLBnhw= -github.com/fluxcd/pkg/untar v0.3.0 h1:FOGc69nBvasLjFu5Imdc7Kl/U/gRdIyyF2ZkD9gKuXI= -github.com/fluxcd/pkg/untar v0.3.0/go.mod h1:ClGpWYeDidYETkl048vCgHlsNtn5BHYHvMmQdadRGKs= github.com/fluxcd/pkg/version v0.2.2 h1:ZpVXECeLA5hIQMft11iLp6gN3cKcz6UNuVTQPw/bRdI= github.com/fluxcd/pkg/version v0.2.2/go.mod h1:NGnh/no8S6PyfCDxRFrPY3T5BUnqP48MxfxNRU0z8C0= github.com/fluxcd/source-controller/api v1.0.0-rc.4 h1:fLfxQF7c5sMlmMFNCkgRKSfeRTETgeaf+DRmHs7NfV4= @@ -289,8 +288,8 @@ github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-containerregistry v0.15.2 h1:MMkSh+tjSdnmJZO7ljvEqV1DjfekB6VUEAZgy3a+TQE= github.com/google/go-containerregistry v0.15.2/go.mod h1:wWK+LnOv4jXMM23IT/F1wdYftGWGr47Is8CG+pmHK1Q= -github.com/google/go-github/v49 v49.1.0 h1:LFkMgawGQ8dfzWLH/rNE0b3u1D3n6/dw7ZmrN3b+YFY= -github.com/google/go-github/v49 v49.1.0/go.mod h1:MUUzHPrhGniB6vUKa27y37likpipzG+BXXJbG04J334= +github.com/google/go-github/v52 v52.0.0 h1:uyGWOY+jMQ8GVGSX8dkSwCzlehU3WfdxQ7GweO/JP7M= +github.com/google/go-github/v52 v52.0.0/go.mod h1:WJV6VEEUPuMo5pXqqa2ZCZEdbQqua4zAk2MZTIo+m+4= github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= @@ -544,6 +543,7 @@ golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= +golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g= golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= @@ -577,6 +577,7 @@ golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= +golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.6.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 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= @@ -628,6 +629,7 @@ golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220906165534-d0df966e6959/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -638,6 +640,7 @@ golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuX golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= golang.org/x/term v0.8.0 h1:n5xxQn2i3PC0yLAbjTpNT85q/Kgzcr2gIoX9OrJUols= diff --git a/pkg/bootstrap/bootstrap_plain_git.go b/pkg/bootstrap/bootstrap_plain_git.go index 73a7d6d3..e3f7bcd9 100644 --- a/pkg/bootstrap/bootstrap_plain_git.go +++ b/pkg/bootstrap/bootstrap_plain_git.go @@ -27,7 +27,7 @@ import ( "time" "github.com/ProtonMail/go-crypto/openpgp" - gogit "github.com/fluxcd/go-git/v5" + gogit "github.com/go-git/go-git/v5" corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/util/wait" diff --git a/pkg/manifestgen/install/manifests.go b/pkg/manifestgen/install/manifests.go index f607f232..7e61f31c 100644 --- a/pkg/manifestgen/install/manifests.go +++ b/pkg/manifestgen/install/manifests.go @@ -27,7 +27,7 @@ import ( "strings" "github.com/fluxcd/pkg/kustomize/filesys" - "github.com/fluxcd/pkg/untar" + "github.com/fluxcd/pkg/tar" "github.com/fluxcd/flux2/v2/pkg/manifestgen/kustomization" ) @@ -56,7 +56,7 @@ func fetch(ctx context.Context, url, version, dir string) error { } // extract - if _, err = untar.Untar(resp.Body, dir); err != nil { + if err = tar.Untar(resp.Body, dir, tar.WithMaxUntarSize(-1)); err != nil { return fmt.Errorf("failed to untar manifests.tar.gz from %s, error: %w", ghURL, err) } diff --git a/tests/azure/azure_test.go b/tests/azure/azure_test.go index 03a10748..5b5631d2 100644 --- a/tests/azure/azure_test.go +++ b/tests/azure/azure_test.go @@ -47,8 +47,6 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" - extgogit "github.com/fluxcd/go-git/v5" - "github.com/fluxcd/go-git/v5/plumbing" automationv1beta1 "github.com/fluxcd/image-automation-controller/api/v1beta1" reflectorv1beta2 "github.com/fluxcd/image-reflector-controller/api/v1beta2" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" @@ -57,6 +55,8 @@ import ( eventv1 "github.com/fluxcd/pkg/apis/event/v1beta1" "github.com/fluxcd/pkg/apis/meta" sourcev1 "github.com/fluxcd/source-controller/api/v1" + extgogit "github.com/go-git/go-git/v5" + "github.com/go-git/go-git/v5/plumbing" ) const ( diff --git a/tests/azure/go.mod b/tests/azure/go.mod index dc9d7b9f..bfa53847 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -4,17 +4,17 @@ go 1.19 require ( github.com/Azure/azure-event-hubs-go/v3 v3.5.0 - github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 github.com/fluxcd/helm-controller/api v0.33.0 - github.com/fluxcd/image-automation-controller/api v0.33.1 - github.com/fluxcd/image-reflector-controller/api v0.27.2 - github.com/fluxcd/kustomize-controller/api v1.0.0-rc.3 - github.com/fluxcd/notification-controller/api v1.0.0-rc.3 + github.com/fluxcd/image-automation-controller/api v0.34.0 + github.com/fluxcd/image-reflector-controller/api v0.28.0 + github.com/fluxcd/kustomize-controller/api v1.0.0-rc.4 + github.com/fluxcd/notification-controller/api v1.0.0-rc.4 github.com/fluxcd/pkg/apis/event v0.5.0 github.com/fluxcd/pkg/apis/meta v1.1.0 - github.com/fluxcd/pkg/git v0.12.1 - github.com/fluxcd/pkg/git/gogit v0.10.0 - github.com/fluxcd/source-controller/api v1.0.0-rc.3 + github.com/fluxcd/pkg/git v0.12.2 + github.com/fluxcd/pkg/git/gogit v0.11.1 + github.com/fluxcd/source-controller/api v1.0.0-rc.4 + github.com/go-git/go-git/v5 v5.7.0 github.com/hashicorp/hc-install v0.5.2 github.com/hashicorp/terraform-exec v0.18.1 github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 @@ -54,11 +54,12 @@ require ( github.com/emicklei/go-restful/v3 v3.10.0 // indirect github.com/emirpasic/gods v1.18.1 // indirect github.com/evanphx/json-patch/v5 v5.6.0 // indirect + github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 // indirect github.com/fluxcd/pkg/apis/acl v0.1.0 // indirect - github.com/fluxcd/pkg/apis/kustomize v1.0.0 // indirect + github.com/fluxcd/pkg/apis/kustomize v1.1.0 // indirect github.com/fluxcd/pkg/ssh v0.7.4 // indirect github.com/fluxcd/pkg/version v0.2.2 // indirect - github.com/go-git/gcfg v1.5.0 // indirect + github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect github.com/go-git/go-billy/v5 v5.4.1 // indirect github.com/go-logr/logr v1.2.4 // indirect github.com/go-openapi/jsonpointer v0.19.6 // indirect @@ -66,6 +67,7 @@ require ( github.com/go-openapi/swag v0.22.3 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang-jwt/jwt/v4 v4.4.2 // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.3 // indirect github.com/google/gnostic v0.6.9 // indirect github.com/google/go-cmp v0.5.9 // indirect @@ -81,7 +83,6 @@ require ( github.com/jpillora/backoff v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/kevinburke/ssh_config v1.2.0 // indirect - github.com/kr/pretty v0.3.1 // indirect github.com/mailru/easyjson v0.7.7 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect @@ -111,9 +112,9 @@ require ( gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect k8s.io/apiextensions-apiserver v0.27.2 // indirect - k8s.io/klog/v2 v2.90.1 // indirect + k8s.io/klog/v2 v2.100.1 // indirect k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f // indirect - k8s.io/utils v0.0.0-20230313181309-38a27ef9d749 // indirect + k8s.io/utils v0.0.0-20230505201702-9f6742963106 // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect sigs.k8s.io/yaml v1.3.0 // indirect diff --git a/tests/azure/go.sum b/tests/azure/go.sum index 922a3ae4..6bdeadc6 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -75,6 +75,7 @@ github.com/devigned/tab v0.1.1 h1:3mD6Kb1mUOYeLpJvTVSDwSg5ZsfSxfvxGRTxRsJsITA= github.com/devigned/tab v0.1.1/go.mod h1:XG9mPq0dFghrYvoBF3xdRrJzSTX1b7IQrvaL9mzjeJY= github.com/dimchansky/utfbom v1.1.0 h1:FcM3g+nofKgUteL8dm/UpdRXNC9KmADgTpLKsu0TRo4= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= +github.com/elazarl/goproxy v0.0.0-20221015165544-a0805db90819 h1:RIB4cRk+lBqKK3Oy0r2gRX4ui7tuhiZq2SuTtTCi0/0= github.com/emicklei/go-restful/v3 v3.10.0 h1:X4gma4HM7hFm6WMeAsTfqA0GOfdNoCzBIkHGoRLGXuM= github.com/emicklei/go-restful/v3 v3.10.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= @@ -93,46 +94,48 @@ github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 h1:Gm5sGGk+/Wq6Rh github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4/go.mod h1:raWgfUV7lDQVXp4QXUaeNNJkRVKz97UQuF+0kdY7Vmo= github.com/fluxcd/helm-controller/api v0.33.0 h1:XUoBxaSzJXFygpGIpLxslXhZ+Xhss3ADqLx1dP2ZZbk= github.com/fluxcd/helm-controller/api v0.33.0/go.mod h1:fihSaRVufjN+eDvg7qBxrDjLfy9J075mTIx3UAC3c64= -github.com/fluxcd/image-automation-controller/api v0.33.1 h1:yvdNCHDOTpxp/QGj203EnO0Tr4GhZnRIfo1JHTTm12I= -github.com/fluxcd/image-automation-controller/api v0.33.1/go.mod h1:65BqKNpHQ+FfNH79WhmrTgqoetGAEBlr0aRvHLr9oug= -github.com/fluxcd/image-reflector-controller/api v0.27.2 h1:SqziaPXmF4mmPS5NGCIutRMaqrrUDhHdi0JSLz77gOo= -github.com/fluxcd/image-reflector-controller/api v0.27.2/go.mod h1:TNn1Y3XuinlCRiohmjUtwvjWurTspPg0U0cCvMI5Q3E= -github.com/fluxcd/kustomize-controller/api v1.0.0-rc.3 h1:h87VnTN00v6BsBUKqUdZH8Q7QitdwyykGg1oK9yXhlU= -github.com/fluxcd/kustomize-controller/api v1.0.0-rc.3/go.mod h1:ql/HdV+pGzqnHaU5oNyvYR7lHPWc/me3HUPd4g7A9BI= -github.com/fluxcd/notification-controller/api v1.0.0-rc.3 h1:RxHGUo9nSXj+vXEYjo+35vrABx+qugeWsNTJ6Zb/fwM= -github.com/fluxcd/notification-controller/api v1.0.0-rc.3/go.mod h1:bfZCGyWq1SPmZSQSCuHRum5Z1olidWp8UbZkO5kcato= +github.com/fluxcd/image-automation-controller/api v0.34.0 h1:pltlvRvphPPepXGVCTeiwGcdAkufOgfcAb37eg3kj98= +github.com/fluxcd/image-automation-controller/api v0.34.0/go.mod h1:OB0s+uE7BYf6ml6fWD/7EBU8ieJrUItJyDoKZNmIcHw= +github.com/fluxcd/image-reflector-controller/api v0.28.0 h1:2a1UxPU1RHTxl+5YFFB0KuOCHrR3hL0B7fvAPJo2UXY= +github.com/fluxcd/image-reflector-controller/api v0.28.0/go.mod h1:bY28TT8Jv/pvdF/m+c64QCEiCY2BShMe22l1zRDYm4s= +github.com/fluxcd/kustomize-controller/api v1.0.0-rc.4 h1:e5dO5HaFISFNzhfi4zuPniE545vVnEi3VnSBcbxcZqU= +github.com/fluxcd/kustomize-controller/api v1.0.0-rc.4/go.mod h1:UTJu1JMr+rkabWkUWMNiOeFeDu+4ZKfJIK+oqEwOjzc= +github.com/fluxcd/notification-controller/api v1.0.0-rc.4 h1:bDqIirpscGUY0+1u+RKvTEmX43iiZ2xeQLz27FoJJD8= +github.com/fluxcd/notification-controller/api v1.0.0-rc.4/go.mod h1:XL5h5/x46e41rtNc8mwxTKX4kAtgTNuzJS0PV2c0iIQ= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= github.com/fluxcd/pkg/apis/event v0.5.0 h1:aAoo3AcWMh6hFfhxFED2TbyIk9590C7l17eh3Ys5I3I= github.com/fluxcd/pkg/apis/event v0.5.0/go.mod h1:hiVliecUNHIeE128NFEgyoNxLcv/TWzrYHtf0ODj8fw= -github.com/fluxcd/pkg/apis/kustomize v1.0.0 h1:5T2b/mRZiGWtP7fvSU8gZOApIc06H6SdLX3MlsE6LRo= -github.com/fluxcd/pkg/apis/kustomize v1.0.0/go.mod h1:XaDYlKxrf9D2zZWcZ0BnSIqGtcm8mdNtJGzZWYjCnQo= +github.com/fluxcd/pkg/apis/kustomize v1.1.0 h1:Fbv4dCB57r2+fiusozN7at8r7upTz58Z4wWw1njHPyU= +github.com/fluxcd/pkg/apis/kustomize v1.1.0/go.mod h1:CAe9Mjf9KVoTm1V4wpvq/FGXFDSnpBwfww/IG7mw3gM= github.com/fluxcd/pkg/apis/meta v1.1.0 h1:vYU1mvUzztnQyTzZOLHQ3wm/tXd7E1QZ2V91zuVJPsQ= github.com/fluxcd/pkg/apis/meta v1.1.0/go.mod h1:/QwCotRKL/BT6RSa4O75FlYW14fU8eRfKnoagzbkmL4= -github.com/fluxcd/pkg/git v0.12.1 h1:3HsCs+r/Au+P6870IfB1Cf6ifz6w1PzSm2xYnB+GW/4= -github.com/fluxcd/pkg/git v0.12.1/go.mod h1:HUG9ZSYSuIAfZbYTPcYptmlaWCfgSQYyzfQ5/WUQVQk= -github.com/fluxcd/pkg/git/gogit v0.10.0 h1:yL+mjSYW0SptgLQZE/x/hoSo9KulfHR524Qk2vZJKLM= -github.com/fluxcd/pkg/git/gogit v0.10.0/go.mod h1:BOEHZtgbHM5pzKTBIWbtTx2j2artkbLtKssFlZJDFu0= +github.com/fluxcd/pkg/git v0.12.2 h1:96xH3hy3WfwiD0DioyJZcGapYT3lmPc2s7jU5UM8buw= +github.com/fluxcd/pkg/git v0.12.2/go.mod h1:9TG4fEfGCF1XHLt9Xs7X2YOmkmWOiwfjH9tdGIQs8/8= +github.com/fluxcd/pkg/git/gogit v0.11.1 h1:17UbHEPQovLOhlrsPaDoJa3J7jX0I7G92TWXeEDf2eU= +github.com/fluxcd/pkg/git/gogit v0.11.1/go.mod h1:Hh358WYfwmvGf6Aaj1wjGZMN2AWlAcXRR6aubMQYq8M= github.com/fluxcd/pkg/gittestserver v0.8.3 h1:ehqTcqXyN095+AK1XCJDQBljeaOhatF9bc0lFblThCw= github.com/fluxcd/pkg/ssh v0.7.4 h1:8GYneCKH2dxrHQBalcDgOCC2NtqD0JO91FlWgvnzrfo= github.com/fluxcd/pkg/ssh v0.7.4/go.mod h1:9Syc8nVJaZEToPTU4E99j0jZ99w39oZtov+uiNX17sc= github.com/fluxcd/pkg/version v0.2.2 h1:ZpVXECeLA5hIQMft11iLp6gN3cKcz6UNuVTQPw/bRdI= github.com/fluxcd/pkg/version v0.2.2/go.mod h1:NGnh/no8S6PyfCDxRFrPY3T5BUnqP48MxfxNRU0z8C0= -github.com/fluxcd/source-controller/api v1.0.0-rc.3 h1:zfCUEJDN0VxHRoJGjnqlTyVe61ZmImVBOzn14tepzSU= -github.com/fluxcd/source-controller/api v1.0.0-rc.3/go.mod h1:CvGNdS8g/MqwpERUK6aJp4lndsrm+JBzGpoyyZ4u0c8= +github.com/fluxcd/source-controller/api v1.0.0-rc.4 h1:fLfxQF7c5sMlmMFNCkgRKSfeRTETgeaf+DRmHs7NfV4= +github.com/fluxcd/source-controller/api v1.0.0-rc.4/go.mod h1:W6tNXr3mRPhdc5+Jke9OZnuk/3THNzGzRJVhAtLfzss= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY= github.com/gliderlabs/ssh v0.3.5/go.mod h1:8XB4KraRrX39qHhT6yxPsHedjA08I/uBVwj4xC+/+z4= -github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4= github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= +github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= +github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= github.com/go-git/go-billy/v5 v5.3.1/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= github.com/go-git/go-billy/v5 v5.4.1 h1:Uwp5tDRkPr+l/TnbHOQzp+tmJfLceOlbVucgpTz8ix4= github.com/go-git/go-billy/v5 v5.4.1/go.mod h1:vjbugF6Fz7JIflbVpl1hJsGjSHNltrSw45YK/ukIvQg= -github.com/go-git/go-git-fixtures/v4 v4.3.1 h1:y5z6dd3qi8Hl+stezc8p3JxDkoTRqMAlKnXHuzrfjTQ= github.com/go-git/go-git-fixtures/v4 v4.3.1/go.mod h1:8LHG1a3SRW71ettAD/jW13h8c6AqjVSeL11RAdgaqpo= -github.com/go-git/go-git/v5 v5.6.1 h1:q4ZRqQl4pR/ZJHc1L5CFjGA1a10u76aV1iC+nh+bHsk= +github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20230305113008-0c11038e723f h1:Pz0DHeFij3XFhoBRGUDPzSJ+w2UcK5/0JvF8DRI58r8= +github.com/go-git/go-git/v5 v5.7.0 h1:t9AudWVLmqzlo+4bqdf7GY+46SUuRsx59SboFxkq2aE= +github.com/go-git/go-git/v5 v5.7.0/go.mod h1:coJHKEOk5kUClpsNlXrUvPrDxY3w3gjHvhcZd8Fodw8= github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= @@ -152,6 +155,8 @@ github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzw github.com/golang-jwt/jwt/v4 v4.4.2 h1:rcc4lwaZgFMCZ5jxF9ABolDcIHdBytAFgqFPbSJQAYs= github.com/golang-jwt/jwt/v4 v4.4.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -225,7 +230,6 @@ github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORN github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= -github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= @@ -256,7 +260,6 @@ github.com/onsi/gomega v1.27.7 h1:fVih9JD6ogIiHUN6ePK7HJidyEDpWGVB5mzM7cWNXoU= github.com/pjbgf/sha1cd v0.2.3/go.mod h1:HOK9QrgzdHpbc2Kzip0Q1yi3M2MFGPADtR6HjG65m5M= github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4= github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI= -github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -268,7 +271,6 @@ github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUo github.com/prometheus/common v0.42.0 h1:EKsfXEYo4JpWMHH5cg+KOUWeuJSov1Id8zGR8eeI1YM= github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= github.com/sebdah/goldie v1.0.0/go.mod h1:jXP4hmWywNEwZzhMuv2ccnqTSFpuq8iyQhtQdkkZBH4= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= @@ -502,12 +504,12 @@ k8s.io/apimachinery v0.27.2 h1:vBjGaKKieaIreI+oQwELalVG4d8f3YAMNpWLzDXkxeg= k8s.io/apimachinery v0.27.2/go.mod h1:XNfZ6xklnMCOGGFNqXG7bUrQCoR04dh/E7FprV6pb+E= k8s.io/client-go v0.27.2 h1:vDLSeuYvCHKeoQRhCXjxXO45nHVv2Ip4Fe0MfioMrhE= k8s.io/client-go v0.27.2/go.mod h1:tY0gVmUsHrAmjzHX9zs7eCjxcBsf8IiNe7KQ52biTcQ= -k8s.io/klog/v2 v2.90.1 h1:m4bYOKall2MmOiRaR1J+We67Do7vm9KiQVlT96lnHUw= -k8s.io/klog/v2 v2.90.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg= +k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f h1:2kWPakN3i/k81b0gvD5C5FJ2kxm1WrQFanWchyKuqGg= k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f/go.mod h1:byini6yhqGC14c3ebc/QwanvYwhuMWF6yz2F8uwW8eg= -k8s.io/utils v0.0.0-20230313181309-38a27ef9d749 h1:xMMXJlJbsU8w3V5N2FLDQ8YgU8s1EoULdbQBcAeNJkY= -k8s.io/utils v0.0.0-20230313181309-38a27ef9d749/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +k8s.io/utils v0.0.0-20230505201702-9f6742963106 h1:EObNQ3TW2D+WptiYXlApGNLVy0zm/JIBVY9i+M4wpAU= +k8s.io/utils v0.0.0-20230505201702-9f6742963106/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= sigs.k8s.io/controller-runtime v0.15.0 h1:ML+5Adt3qZnMSYxZ7gAverBLNPSMQEibtzAgp0UPojU= sigs.k8s.io/controller-runtime v0.15.0/go.mod h1:7ngYvp1MLT+9GeZ+6lH3LOlcHkp/+tzA/fmHa4iq9kk= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= diff --git a/tests/azure/util_test.go b/tests/azure/util_test.go index 91ab5367..eb3ecb76 100644 --- a/tests/azure/util_test.go +++ b/tests/azure/util_test.go @@ -35,11 +35,6 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" - extgogit "github.com/fluxcd/go-git/v5" - gitconfig "github.com/fluxcd/go-git/v5/config" - "github.com/fluxcd/go-git/v5/plumbing" - "github.com/fluxcd/go-git/v5/plumbing/object" - "github.com/fluxcd/go-git/v5/plumbing/transport/http" helmv2beta1 "github.com/fluxcd/helm-controller/api/v2beta1" automationv1beta1 "github.com/fluxcd/image-automation-controller/api/v1beta1" reflectorv1beta2 "github.com/fluxcd/image-reflector-controller/api/v1beta2" @@ -52,6 +47,11 @@ import ( "github.com/fluxcd/pkg/git/repository" sourcev1 "github.com/fluxcd/source-controller/api/v1" sourcev1b2 "github.com/fluxcd/source-controller/api/v1beta2" + extgogit "github.com/go-git/go-git/v5" + gitconfig "github.com/go-git/go-git/v5/config" + "github.com/go-git/go-git/v5/plumbing" + "github.com/go-git/go-git/v5/plumbing/object" + "github.com/go-git/go-git/v5/plumbing/transport/http" ) const defaultBranch = "main" From aa65589391db2433691d8cebde5c77c090cae3a9 Mon Sep 17 00:00:00 2001 From: Sanskar Jaiswal Date: Tue, 30 May 2023 14:31:01 +0530 Subject: [PATCH 525/818] set controller-runtime logger to a null logger This is required because controller-runtime expects its consumers to set a logger through log.SetLogger within 30 seconds of the program's initalization. If not set, the entire debug stack is printed as an error. Ref: https://github.com/kubernetes-sigs/controller-runtime/blob/ed8be90/pkg/log/log.go#L59 Since we have our own logging and don't care about controller-runtime's logger, we configure it's logger to do nothing. Signed-off-by: Sanskar Jaiswal --- cmd/flux/main.go | 11 +++++++++++ go.mod | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/cmd/flux/main.go b/cmd/flux/main.go index f38223f8..9485110c 100644 --- a/cmd/flux/main.go +++ b/cmd/flux/main.go @@ -24,12 +24,14 @@ import ( "strings" "time" + "github.com/go-logr/logr" "github.com/spf13/cobra" "golang.org/x/term" corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/util/validation" "k8s.io/cli-runtime/pkg/genericclioptions" _ "k8s.io/client-go/plugin/pkg/client/auth" + ctrllog "sigs.k8s.io/controller-runtime/pkg/log" runclient "github.com/fluxcd/pkg/runtime/client" @@ -170,6 +172,15 @@ func NewRootFlags() rootFlags { func main() { log.SetFlags(0) + + // This is required because controller-runtime expects its consumers to + // set a logger through log.SetLogger within 30 seconds of the program's + // initalization. If not set, the entire debug stack is printed as an + // error, see: https://github.com/kubernetes-sigs/controller-runtime/blob/ed8be90/pkg/log/log.go#L59 + // Since we have our own logging and don't care about controller-runtime's + // logger, we configure it's logger to do nothing. + ctrllog.SetLogger(logr.New(ctrllog.NullLogSink{})) + if err := rootCmd.Execute(); err != nil { if err, ok := err.(*RequestError); ok { diff --git a/go.mod b/go.mod index 2a18d0d2..690b1f87 100644 --- a/go.mod +++ b/go.mod @@ -27,6 +27,7 @@ require ( github.com/fluxcd/pkg/version v0.2.2 github.com/fluxcd/source-controller/api v1.0.0-rc.4 github.com/go-git/go-git/v5 v5.7.0 + github.com/go-logr/logr v1.2.4 github.com/gonvenience/bunt v1.3.5 github.com/gonvenience/ytbx v1.4.4 github.com/google/go-cmp v0.5.9 @@ -117,7 +118,6 @@ require ( github.com/go-errors/errors v1.4.2 // indirect github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect github.com/go-git/go-billy/v5 v5.4.1 // indirect - github.com/go-logr/logr v1.2.4 // indirect github.com/go-openapi/jsonpointer v0.19.6 // indirect github.com/go-openapi/jsonreference v0.20.1 // indirect github.com/go-openapi/swag v0.22.3 // indirect From 8d86637d3ffb7ae5d6570dd4423041a77ddf1c76 Mon Sep 17 00:00:00 2001 From: Sanskar Jaiswal Date: Wed, 31 May 2023 17:07:26 +0530 Subject: [PATCH 526/818] e2e: run e2e Azure tests for PRs to main if tests or wofklow changes Run e2e Azure tests for PRs and commits to main if the `tests` directory or the Azure workflow itself changes. Signed-off-by: Sanskar Jaiswal --- .github/workflows/e2e-azure.yaml | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/.github/workflows/e2e-azure.yaml b/.github/workflows/e2e-azure.yaml index 54133b1d..5caaedd4 100644 --- a/.github/workflows/e2e-azure.yaml +++ b/.github/workflows/e2e-azure.yaml @@ -5,7 +5,17 @@ on: schedule: - cron: '0 6 * * *' push: - branches: [ azure* ] + branches: + - main + paths: + - 'tests/**' + - '.github/workflows/e2e-azure.yaml' + pull_request: + branches: + - main + paths: + - 'tests/**' + - '.github/workflows/e2e-azure.yaml' permissions: contents: read @@ -13,6 +23,7 @@ permissions: jobs: e2e-amd64-aks: runs-on: ubuntu-22.04 + if: (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) && github.actor != 'dependabot[bot]' steps: - name: Checkout uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2 From 29c2c72d8f35d86f5aaec7372091b718b4792bd8 Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Thu, 1 Jun 2023 10:01:54 +0000 Subject: [PATCH 527/818] Update toolkit components - helm-controller to v0.34.1 https://github.com/fluxcd/helm-controller/blob/v0.34.1/CHANGELOG.md - source-controller to v1.0.0-rc.5 https://github.com/fluxcd/source-controller/blob/v1.0.0-rc.5/CHANGELOG.md - image-automation-controller to v0.34.1 https://github.com/fluxcd/image-automation-controller/blob/v0.34.1/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 6 +++--- go.sum | 12 ++++++------ manifests/bases/helm-controller/kustomization.yaml | 4 ++-- .../image-automation-controller/kustomization.yaml | 4 ++-- manifests/bases/source-controller/kustomization.yaml | 4 ++-- manifests/crds/kustomization.yaml | 6 +++--- 6 files changed, 18 insertions(+), 18 deletions(-) diff --git a/go.mod b/go.mod index 690b1f87..ba4c35f3 100644 --- a/go.mod +++ b/go.mod @@ -8,8 +8,8 @@ require ( github.com/cyphar/filepath-securejoin v0.2.3 github.com/distribution/distribution/v3 v3.0.0-20230519140516-983358f8e250 github.com/fluxcd/go-git-providers v0.16.0 - github.com/fluxcd/helm-controller/api v0.34.0 - github.com/fluxcd/image-automation-controller/api v0.34.0 + github.com/fluxcd/helm-controller/api v0.34.1 + github.com/fluxcd/image-automation-controller/api v0.34.1 github.com/fluxcd/image-reflector-controller/api v0.28.0 github.com/fluxcd/kustomize-controller/api v1.0.0-rc.4 github.com/fluxcd/notification-controller/api v1.0.0-rc.4 @@ -25,7 +25,7 @@ require ( github.com/fluxcd/pkg/ssh v0.7.4 github.com/fluxcd/pkg/tar v0.2.0 github.com/fluxcd/pkg/version v0.2.2 - github.com/fluxcd/source-controller/api v1.0.0-rc.4 + github.com/fluxcd/source-controller/api v1.0.0-rc.5 github.com/go-git/go-git/v5 v5.7.0 github.com/go-logr/logr v1.2.4 github.com/gonvenience/bunt v1.3.5 diff --git a/go.sum b/go.sum index 23488681..35821e9a 100644 --- a/go.sum +++ b/go.sum @@ -158,10 +158,10 @@ github.com/fluxcd/go-git-providers v0.16.0 h1:egDN1uv0jyHyvtFNHE1FQ1Slj5Xu7QEFxW github.com/fluxcd/go-git-providers v0.16.0/go.mod h1:dIUEy97GuCKAYHkDQS39Jqb6Pfg1mnGnqA5y2mp3wR4= github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 h1:Gm5sGGk+/Wq6RhX4xpCZ2IqjDp5XkjlhENaAuAlpdKc= github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4/go.mod h1:raWgfUV7lDQVXp4QXUaeNNJkRVKz97UQuF+0kdY7Vmo= -github.com/fluxcd/helm-controller/api v0.34.0 h1:GsRVMIQnFbGbjpt6yfzVPAt0Sc4aY9v695K9/fVgDMw= -github.com/fluxcd/helm-controller/api v0.34.0/go.mod h1:1v1UqS5jOgWdMDzvJBgdcY40RminDUO6A0by4IkHd5s= -github.com/fluxcd/image-automation-controller/api v0.34.0 h1:pltlvRvphPPepXGVCTeiwGcdAkufOgfcAb37eg3kj98= -github.com/fluxcd/image-automation-controller/api v0.34.0/go.mod h1:OB0s+uE7BYf6ml6fWD/7EBU8ieJrUItJyDoKZNmIcHw= +github.com/fluxcd/helm-controller/api v0.34.1 h1:oL6GG7weRIqkTlTFRoTY3DJpxqKpAFEoDDsYoxQCa8g= +github.com/fluxcd/helm-controller/api v0.34.1/go.mod h1:1v1UqS5jOgWdMDzvJBgdcY40RminDUO6A0by4IkHd5s= +github.com/fluxcd/image-automation-controller/api v0.34.1 h1:Y2RFhmltELcSGm3lsGgmRcJCBf0SdGlH/PwCxewk4w0= +github.com/fluxcd/image-automation-controller/api v0.34.1/go.mod h1:vRJscxpWXuDMmBj8vlFM3pgpVHqh5hf65RVnCaOnSGo= github.com/fluxcd/image-reflector-controller/api v0.28.0 h1:2a1UxPU1RHTxl+5YFFB0KuOCHrR3hL0B7fvAPJo2UXY= github.com/fluxcd/image-reflector-controller/api v0.28.0/go.mod h1:bY28TT8Jv/pvdF/m+c64QCEiCY2BShMe22l1zRDYm4s= github.com/fluxcd/kustomize-controller/api v1.0.0-rc.4 h1:e5dO5HaFISFNzhfi4zuPniE545vVnEi3VnSBcbxcZqU= @@ -197,8 +197,8 @@ github.com/fluxcd/pkg/tar v0.2.0 h1:HEUHgONQYsJGeZZ4x6h5nQU9Aox1I4T3bOp1faWTqf8= github.com/fluxcd/pkg/tar v0.2.0/go.mod h1:w0/TOC7kwBJhnSJn7TCABkc/I7ib1f2Yz6vOsbLBnhw= github.com/fluxcd/pkg/version v0.2.2 h1:ZpVXECeLA5hIQMft11iLp6gN3cKcz6UNuVTQPw/bRdI= github.com/fluxcd/pkg/version v0.2.2/go.mod h1:NGnh/no8S6PyfCDxRFrPY3T5BUnqP48MxfxNRU0z8C0= -github.com/fluxcd/source-controller/api v1.0.0-rc.4 h1:fLfxQF7c5sMlmMFNCkgRKSfeRTETgeaf+DRmHs7NfV4= -github.com/fluxcd/source-controller/api v1.0.0-rc.4/go.mod h1:W6tNXr3mRPhdc5+Jke9OZnuk/3THNzGzRJVhAtLfzss= +github.com/fluxcd/source-controller/api v1.0.0-rc.5 h1:muoGOb/VitVEIOh877Ledi9AvibbyevPqvuH5byWU6g= +github.com/fluxcd/source-controller/api v1.0.0-rc.5/go.mod h1:W6tNXr3mRPhdc5+Jke9OZnuk/3THNzGzRJVhAtLfzss= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= diff --git a/manifests/bases/helm-controller/kustomization.yaml b/manifests/bases/helm-controller/kustomization.yaml index 57d1f9c3..a8ee900f 100644 --- a/manifests/bases/helm-controller/kustomization.yaml +++ b/manifests/bases/helm-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/helm-controller/releases/download/v0.34.0/helm-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.34.0/helm-controller.deployment.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.34.1/helm-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.34.1/helm-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/image-automation-controller/kustomization.yaml b/manifests/bases/image-automation-controller/kustomization.yaml index 5a8ab19a..c8ba0e54 100644 --- a/manifests/bases/image-automation-controller/kustomization.yaml +++ b/manifests/bases/image-automation-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.34.0/image-automation-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.34.0/image-automation-controller.deployment.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.34.1/image-automation-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.34.1/image-automation-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index 2cdc4b9c..55a6175e 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v1.0.0-rc.4/source-controller.crds.yaml -- https://github.com/fluxcd/source-controller/releases/download/v1.0.0-rc.4/source-controller.deployment.yaml +- https://github.com/fluxcd/source-controller/releases/download/v1.0.0-rc.5/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v1.0.0-rc.5/source-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index 841a4747..3ec704bb 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -1,9 +1,9 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v1.0.0-rc.4/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v1.0.0-rc.5/source-controller.crds.yaml - https://github.com/fluxcd/kustomize-controller/releases/download/v1.0.0-rc.4/kustomize-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.34.0/helm-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.34.1/helm-controller.crds.yaml - https://github.com/fluxcd/notification-controller/releases/download/v1.0.0-rc.4/notification-controller.crds.yaml - https://github.com/fluxcd/image-reflector-controller/releases/download/v0.28.0/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.34.0/image-automation-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.34.1/image-automation-controller.crds.yaml From 09f55955e8d85f03c1d5fa6b87917f59a8def85d Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Thu, 1 Jun 2023 12:07:58 +0200 Subject: [PATCH 528/818] tests/azure: update dependencies - github.com/Azure/azure-event-hubs-go/v3 to v3.6.0 - github.com/fluxcd/helm-controller/api to v0.34.1 - github.com/fluxcd/image-automation-controller/api to v0.34.1 - github.com/fluxcd/pkg/git/gogit to v0.12.0 - github.com/fluxcd/source-controller/api to v1.0.0-rc.5 - github.com/stretchr/testify to v1.8.4 Signed-off-by: Hidde Beydals --- tests/azure/go.mod | 17 ++++++------ tests/azure/go.sum | 66 ++++++++++++---------------------------------- 2 files changed, 25 insertions(+), 58 deletions(-) diff --git a/tests/azure/go.mod b/tests/azure/go.mod index bfa53847..d2bbc329 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -3,22 +3,22 @@ module github.com/fluxcd/flux2/tests/azure go 1.19 require ( - github.com/Azure/azure-event-hubs-go/v3 v3.5.0 - github.com/fluxcd/helm-controller/api v0.33.0 - github.com/fluxcd/image-automation-controller/api v0.34.0 + github.com/Azure/azure-event-hubs-go/v3 v3.6.0 + github.com/fluxcd/helm-controller/api v0.34.1 + github.com/fluxcd/image-automation-controller/api v0.34.1 github.com/fluxcd/image-reflector-controller/api v0.28.0 github.com/fluxcd/kustomize-controller/api v1.0.0-rc.4 github.com/fluxcd/notification-controller/api v1.0.0-rc.4 github.com/fluxcd/pkg/apis/event v0.5.0 github.com/fluxcd/pkg/apis/meta v1.1.0 github.com/fluxcd/pkg/git v0.12.2 - github.com/fluxcd/pkg/git/gogit v0.11.1 - github.com/fluxcd/source-controller/api v1.0.0-rc.4 + github.com/fluxcd/pkg/git/gogit v0.12.0 + github.com/fluxcd/source-controller/api v1.0.0-rc.5 github.com/go-git/go-git/v5 v5.7.0 github.com/hashicorp/hc-install v0.5.2 github.com/hashicorp/terraform-exec v0.18.1 github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 - github.com/stretchr/testify v1.8.3 + github.com/stretchr/testify v1.8.4 github.com/whilp/git-urls v1.0.0 go.uber.org/multierr v1.11.0 k8s.io/api v0.27.2 @@ -31,9 +31,9 @@ require ( replace gopkg.in/yaml.v3 => gopkg.in/yaml.v3 v3.0.1 require ( - github.com/Azure/azure-amqp-common-go/v4 v4.1.0 // indirect + github.com/Azure/azure-amqp-common-go/v4 v4.2.0 // indirect github.com/Azure/azure-sdk-for-go v65.0.0+incompatible // indirect - github.com/Azure/go-amqp v0.19.1 // indirect + github.com/Azure/go-amqp v1.0.0 // indirect github.com/Azure/go-autorest v14.2.0+incompatible // indirect github.com/Azure/go-autorest/autorest v0.11.28 // indirect github.com/Azure/go-autorest/autorest/adal v0.9.21 // indirect @@ -54,7 +54,6 @@ require ( github.com/emicklei/go-restful/v3 v3.10.0 // indirect github.com/emirpasic/gods v1.18.1 // indirect github.com/evanphx/json-patch/v5 v5.6.0 // indirect - github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 // indirect github.com/fluxcd/pkg/apis/acl v0.1.0 // indirect github.com/fluxcd/pkg/apis/kustomize v1.1.0 // indirect github.com/fluxcd/pkg/ssh v0.7.4 // indirect diff --git a/tests/azure/go.sum b/tests/azure/go.sum index 6bdeadc6..5f5abc47 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -1,13 +1,13 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -github.com/Azure/azure-amqp-common-go/v4 v4.1.0 h1:gcS6P4q/Qv1nmdq1IWoU3mLYlHnvNxAhVjxReEFmSz8= -github.com/Azure/azure-amqp-common-go/v4 v4.1.0/go.mod h1:HDiTPilyFCWPOT8dBeSjGztqgrW27LctWs/4p6nR9FY= -github.com/Azure/azure-event-hubs-go/v3 v3.5.0 h1:H3nhguNPKFH+Z6GP0GZTJVsiuHjqrz5rsRsD816zNkQ= -github.com/Azure/azure-event-hubs-go/v3 v3.5.0/go.mod h1:7zahh3eGktdZ6Xtfv0F0mrnllBR0iE9TJMbGDsqxwkE= +github.com/Azure/azure-amqp-common-go/v4 v4.2.0 h1:q/jLx1KJ8xeI8XGfkOWMN9XrXzAfVTkyvCxPvHCjd2I= +github.com/Azure/azure-amqp-common-go/v4 v4.2.0/go.mod h1:GD3m/WPPma+621UaU6KNjKEo5Hl09z86viKwQjTpV0Q= +github.com/Azure/azure-event-hubs-go/v3 v3.6.0 h1:UXRi5KewXYoTiekVjrj0gyGfbyGvtbYdot6/4IMf4I4= +github.com/Azure/azure-event-hubs-go/v3 v3.6.0/go.mod h1:UgyRnRU7H5e33igaLHJTqbkoNR1uj0j3MA/n7dABU24= github.com/Azure/azure-sdk-for-go v65.0.0+incompatible h1:HzKLt3kIwMm4KeJYTdx9EbjRYTySD/t8i1Ee/W5EGXw= github.com/Azure/azure-sdk-for-go v65.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/go-amqp v0.19.1 h1:S1l3HiSMU7Rhko2f70lBH6Vd0mLj5UZiTWC6xKY5Kho= -github.com/Azure/go-amqp v0.19.1/go.mod h1:+bg0x3ce5+Q3ahCEXnCsGG3ETpDQe3MEVnOuT2ywPwc= +github.com/Azure/go-amqp v1.0.0 h1:QfCugi1M+4F2JDTRgVnRw7PYXLXZ9hmqk3+9+oJh3OA= +github.com/Azure/go-amqp v1.0.0/go.mod h1:+bg0x3ce5+Q3ahCEXnCsGG3ETpDQe3MEVnOuT2ywPwc= github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs= github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= github.com/Azure/go-autorest/autorest v0.11.28 h1:ndAExarwr5Y+GaHE6VCaY1kyS/HwwGGyuimVhWsHOEM= @@ -37,20 +37,16 @@ github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4/go.mod h1:UBYPn8k0D56RtnR8RFQMjmh4KrZzWJ5o7Z9SYjossQ8= github.com/ProtonMail/go-crypto v0.0.0-20230518184743-7afd39499903 h1:ZK3C5DtzV2nVAQTx5S5jQvMeDqWtD1By5mOoyY/xJek= github.com/ProtonMail/go-crypto v0.0.0-20230518184743-7afd39499903/go.mod h1:8TI4H3IbrackdNgv+92dI+rhpCaLqM0IfpgCgenFvRE= -github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= github.com/acomagu/bufpipe v1.0.4 h1:e3H4WUzM3npvo5uv95QuJM3cQspFNtFBzvJ2oNjKIDQ= github.com/acomagu/bufpipe v1.0.4/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= -github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/apparentlymart/go-textseg v1.0.0/go.mod h1:z96Txxhf3xSFMPmb5X/1W05FF/Nj9VFpLOpjS5yuumk= github.com/apparentlymart/go-textseg/v13 v13.0.0 h1:Y+KvPE1NYz0xl601PVImeQfFyEy6iT90AvPUL1NNfNw= github.com/apparentlymart/go-textseg/v13 v13.0.0/go.mod h1:ZK2fH7c4NqDTLtiYLvIkEghdlcqw7yxLeM89kiTRPUo= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= -github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= @@ -90,12 +86,10 @@ github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJ github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0= github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= -github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 h1:Gm5sGGk+/Wq6RhX4xpCZ2IqjDp5XkjlhENaAuAlpdKc= -github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4/go.mod h1:raWgfUV7lDQVXp4QXUaeNNJkRVKz97UQuF+0kdY7Vmo= -github.com/fluxcd/helm-controller/api v0.33.0 h1:XUoBxaSzJXFygpGIpLxslXhZ+Xhss3ADqLx1dP2ZZbk= -github.com/fluxcd/helm-controller/api v0.33.0/go.mod h1:fihSaRVufjN+eDvg7qBxrDjLfy9J075mTIx3UAC3c64= -github.com/fluxcd/image-automation-controller/api v0.34.0 h1:pltlvRvphPPepXGVCTeiwGcdAkufOgfcAb37eg3kj98= -github.com/fluxcd/image-automation-controller/api v0.34.0/go.mod h1:OB0s+uE7BYf6ml6fWD/7EBU8ieJrUItJyDoKZNmIcHw= +github.com/fluxcd/helm-controller/api v0.34.1 h1:oL6GG7weRIqkTlTFRoTY3DJpxqKpAFEoDDsYoxQCa8g= +github.com/fluxcd/helm-controller/api v0.34.1/go.mod h1:1v1UqS5jOgWdMDzvJBgdcY40RminDUO6A0by4IkHd5s= +github.com/fluxcd/image-automation-controller/api v0.34.1 h1:Y2RFhmltELcSGm3lsGgmRcJCBf0SdGlH/PwCxewk4w0= +github.com/fluxcd/image-automation-controller/api v0.34.1/go.mod h1:vRJscxpWXuDMmBj8vlFM3pgpVHqh5hf65RVnCaOnSGo= github.com/fluxcd/image-reflector-controller/api v0.28.0 h1:2a1UxPU1RHTxl+5YFFB0KuOCHrR3hL0B7fvAPJo2UXY= github.com/fluxcd/image-reflector-controller/api v0.28.0/go.mod h1:bY28TT8Jv/pvdF/m+c64QCEiCY2BShMe22l1zRDYm4s= github.com/fluxcd/kustomize-controller/api v1.0.0-rc.4 h1:e5dO5HaFISFNzhfi4zuPniE545vVnEi3VnSBcbxcZqU= @@ -112,27 +106,23 @@ github.com/fluxcd/pkg/apis/meta v1.1.0 h1:vYU1mvUzztnQyTzZOLHQ3wm/tXd7E1QZ2V91zu github.com/fluxcd/pkg/apis/meta v1.1.0/go.mod h1:/QwCotRKL/BT6RSa4O75FlYW14fU8eRfKnoagzbkmL4= github.com/fluxcd/pkg/git v0.12.2 h1:96xH3hy3WfwiD0DioyJZcGapYT3lmPc2s7jU5UM8buw= github.com/fluxcd/pkg/git v0.12.2/go.mod h1:9TG4fEfGCF1XHLt9Xs7X2YOmkmWOiwfjH9tdGIQs8/8= -github.com/fluxcd/pkg/git/gogit v0.11.1 h1:17UbHEPQovLOhlrsPaDoJa3J7jX0I7G92TWXeEDf2eU= -github.com/fluxcd/pkg/git/gogit v0.11.1/go.mod h1:Hh358WYfwmvGf6Aaj1wjGZMN2AWlAcXRR6aubMQYq8M= -github.com/fluxcd/pkg/gittestserver v0.8.3 h1:ehqTcqXyN095+AK1XCJDQBljeaOhatF9bc0lFblThCw= +github.com/fluxcd/pkg/git/gogit v0.12.0 h1:0mCwQND0WpCVZYHLWcXJxRvKVcyWxH4JjMQFMaea8Q4= +github.com/fluxcd/pkg/git/gogit v0.12.0/go.mod h1:Kn+GfYfZBBIaXmQj39cQvrDxT/6y8leQxXZ5/B+YYTQ= +github.com/fluxcd/pkg/gittestserver v0.8.4 h1:rA/QUZnfH77ZZG+5xfMqjgEHJdzeeE6Nn1o8cops/bU= github.com/fluxcd/pkg/ssh v0.7.4 h1:8GYneCKH2dxrHQBalcDgOCC2NtqD0JO91FlWgvnzrfo= github.com/fluxcd/pkg/ssh v0.7.4/go.mod h1:9Syc8nVJaZEToPTU4E99j0jZ99w39oZtov+uiNX17sc= github.com/fluxcd/pkg/version v0.2.2 h1:ZpVXECeLA5hIQMft11iLp6gN3cKcz6UNuVTQPw/bRdI= github.com/fluxcd/pkg/version v0.2.2/go.mod h1:NGnh/no8S6PyfCDxRFrPY3T5BUnqP48MxfxNRU0z8C0= -github.com/fluxcd/source-controller/api v1.0.0-rc.4 h1:fLfxQF7c5sMlmMFNCkgRKSfeRTETgeaf+DRmHs7NfV4= -github.com/fluxcd/source-controller/api v1.0.0-rc.4/go.mod h1:W6tNXr3mRPhdc5+Jke9OZnuk/3THNzGzRJVhAtLfzss= +github.com/fluxcd/source-controller/api v1.0.0-rc.5 h1:muoGOb/VitVEIOh877Ledi9AvibbyevPqvuH5byWU6g= +github.com/fluxcd/source-controller/api v1.0.0-rc.5/go.mod h1:W6tNXr3mRPhdc5+Jke9OZnuk/3THNzGzRJVhAtLfzss= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY= -github.com/gliderlabs/ssh v0.3.5/go.mod h1:8XB4KraRrX39qHhT6yxPsHedjA08I/uBVwj4xC+/+z4= -github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= -github.com/go-git/go-billy/v5 v5.3.1/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= github.com/go-git/go-billy/v5 v5.4.1 h1:Uwp5tDRkPr+l/TnbHOQzp+tmJfLceOlbVucgpTz8ix4= github.com/go-git/go-billy/v5 v5.4.1/go.mod h1:vjbugF6Fz7JIflbVpl1hJsGjSHNltrSw45YK/ukIvQg= -github.com/go-git/go-git-fixtures/v4 v4.3.1/go.mod h1:8LHG1a3SRW71ettAD/jW13h8c6AqjVSeL11RAdgaqpo= github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20230305113008-0c11038e723f h1:Pz0DHeFij3XFhoBRGUDPzSJ+w2UcK5/0JvF8DRI58r8= github.com/go-git/go-git/v5 v5.7.0 h1:t9AudWVLmqzlo+4bqdf7GY+46SUuRsx59SboFxkq2aE= github.com/go-git/go-git/v5 v5.7.0/go.mod h1:coJHKEOk5kUClpsNlXrUvPrDxY3w3gjHvhcZd8Fodw8= @@ -208,13 +198,11 @@ github.com/hashicorp/terraform-exec v0.18.1 h1:LAbfDvNQU1l0NOQlTuudjczVhHj061fNX github.com/hashicorp/terraform-exec v0.18.1/go.mod h1:58wg4IeuAJ6LVsLUeD2DWZZoc/bYi6dzhLHzxM41980= github.com/hashicorp/terraform-json v0.15.0 h1:/gIyNtR6SFw6h5yzlbDbACyGvIhKtQi8mTsbkNd79lE= github.com/hashicorp/terraform-json v0.15.0/go.mod h1:+L1RNzjDU5leLFZkHTFTbJXaoqUC6TqXlFgDoOXrtvk= -github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= github.com/imdario/mergo v0.3.15 h1:M8XP7IuFNsqUx6VPK2P9OSmsYsI/YFaGil0uD21V3dM= github.com/imdario/mergo v0.3.15/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= @@ -257,7 +245,6 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8m github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/onsi/ginkgo/v2 v2.9.5 h1:+6Hr4uxzP4XIUyAkg61dWBw8lb/gc4/X5luuxN/EC+Q= github.com/onsi/gomega v1.27.7 h1:fVih9JD6ogIiHUN6ePK7HJidyEDpWGVB5mzM7cWNXoU= -github.com/pjbgf/sha1cd v0.2.3/go.mod h1:HOK9QrgzdHpbc2Kzip0Q1yi3M2MFGPADtR6HjG65m5M= github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4= github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -273,12 +260,10 @@ github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJf github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= github.com/sebdah/goldie v1.0.0/go.mod h1:jXP4hmWywNEwZzhMuv2ccnqTSFpuq8iyQhtQdkkZBH4= -github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= -github.com/skeema/knownhosts v1.1.0/go.mod h1:sKFq3RD6/TKZkSWn8boUbDC7Qkgcv+8XXijpFO6roag= github.com/skeema/knownhosts v1.1.1 h1:MTk78x9FPgDFVFkDLTrsnnfCJl7g1C/nnKvePgrIngE= github.com/skeema/knownhosts v1.1.1/go.mod h1:g4fPeYpque7P0xefxtGzV81ihjC8sX2IqpAoNkjxbMo= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= @@ -291,18 +276,16 @@ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXf github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY= -github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/vmihailenco/msgpack v3.3.3+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk= github.com/vmihailenco/msgpack/v4 v4.3.12/go.mod h1:gborTTJjAo/GWTqqRjrLCn9pgNN+NXzzngzBKDPIqw4= github.com/vmihailenco/tagparser v0.1.1/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= github.com/whilp/git-urls v1.0.0 h1:95f6UMWN5FKW71ECsXRUd3FVYiXdrE7aX4NZKcPmIjU= github.com/whilp/git-urls v1.0.0/go.mod h1:J16SAmobsqc3Qcy98brfl5f5+e0clUvg1krgwk/qCfE= -github.com/xanzy/ssh-agent v0.3.2/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= @@ -326,11 +309,8 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g= golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= @@ -362,8 +342,6 @@ golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96b golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/net v0.6.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 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= @@ -385,12 +363,10 @@ golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -399,9 +375,6 @@ golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -409,8 +382,6 @@ golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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= -golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= golang.org/x/term v0.8.0 h1:n5xxQn2i3PC0yLAbjTpNT85q/Kgzcr2gIoX9OrJUols= @@ -421,7 +392,6 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= @@ -479,7 +449,6 @@ google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqw gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= @@ -488,7 +457,6 @@ gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= From 007b79c72942184a093c736ab89e3b11fcc7a66e Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Thu, 1 Jun 2023 12:28:52 +0200 Subject: [PATCH 529/818] Update github.com/fluxcd/pkg/git/gogit to v0.12.0 Signed-off-by: Hidde Beydals --- go.mod | 3 +-- go.sum | 39 +++------------------------------------ 2 files changed, 4 insertions(+), 38 deletions(-) diff --git a/go.mod b/go.mod index ba4c35f3..f65edc85 100644 --- a/go.mod +++ b/go.mod @@ -16,7 +16,7 @@ require ( github.com/fluxcd/pkg/apis/event v0.5.0 github.com/fluxcd/pkg/apis/meta v1.1.0 github.com/fluxcd/pkg/git v0.12.2 - github.com/fluxcd/pkg/git/gogit v0.11.1 + github.com/fluxcd/pkg/git/gogit v0.12.0 github.com/fluxcd/pkg/kustomize v1.3.3 github.com/fluxcd/pkg/oci v0.27.0 github.com/fluxcd/pkg/runtime v0.38.1 @@ -111,7 +111,6 @@ require ( github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f // indirect github.com/fatih/color v1.13.0 // indirect github.com/felixge/httpsnoop v1.0.3 // indirect - github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 // indirect github.com/fluxcd/pkg/apis/acl v0.1.0 // indirect github.com/fluxcd/pkg/apis/kustomize v1.1.0 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect diff --git a/go.sum b/go.sum index 35821e9a..05201806 100644 --- a/go.sum +++ b/go.sum @@ -22,21 +22,17 @@ github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4/go.mod h1:UBYPn8k0D56RtnR8RFQMjmh4KrZzWJ5o7Z9SYjossQ8= github.com/ProtonMail/go-crypto v0.0.0-20230528122434-6f98819771a1 h1:JMDGhoQvXNTqH6Y3MC0IUw6tcZvaUdujNqzK2HYWZc8= github.com/ProtonMail/go-crypto v0.0.0-20230528122434-6f98819771a1/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d h1:UrqY+r/OJnIp5u0s1SbQ8dVfLCZJsnvazdBP5hS4iRs= github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ= -github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= github.com/acomagu/bufpipe v1.0.4 h1:e3H4WUzM3npvo5uv95QuJM3cQspFNtFBzvJ2oNjKIDQ= github.com/acomagu/bufpipe v1.0.4/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= -github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= -github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/aws/aws-sdk-go-v2 v1.18.0 h1:882kkTpSFhdgYRKVZ/VCgf7sd0ru57p2JCxz4/oN5RY= github.com/aws/aws-sdk-go-v2 v1.18.0/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw= github.com/aws/aws-sdk-go-v2/config v1.18.25 h1:JuYyZcnMPBiFqn87L2cRppo+rNwgah6YwD3VuyvaW6Q= @@ -78,7 +74,6 @@ github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b h1:otBG+dV+YK+Soembj github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b/go.mod h1:obH5gd0BsqsP2LwDJ9aOkm/6J86V6lyAXCoQWGw3K50= github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0 h1:nvj0OLI3YqYXer/kZD8Ri1aaunCxIEsOst1BVJswV0o= github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE= -github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= @@ -93,7 +88,6 @@ github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5P github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1 h1:q763qf9huN11kDQavWsoZXJNW3xEE4JJyHa5Q25/sd8= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cloudflare/circl v1.1.0/go.mod h1:prBCrKB9DV4poKZY1l9zBXg2QJY7mvgRvtMxxK7fi4I= github.com/cloudflare/circl v1.3.3 h1:fE/Qz0QdIGqeWfnwq0RE0R7MI51s0M2E4Ga9kq5AEMs= github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= @@ -156,8 +150,6 @@ github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= github.com/fluxcd/go-git-providers v0.16.0 h1:egDN1uv0jyHyvtFNHE1FQ1Slj5Xu7QEFxWj1shqYYGk= github.com/fluxcd/go-git-providers v0.16.0/go.mod h1:dIUEy97GuCKAYHkDQS39Jqb6Pfg1mnGnqA5y2mp3wR4= -github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4 h1:Gm5sGGk+/Wq6RhX4xpCZ2IqjDp5XkjlhENaAuAlpdKc= -github.com/fluxcd/go-git/v5 v5.0.0-20221219190809-2e5c9d01cfc4/go.mod h1:raWgfUV7lDQVXp4QXUaeNNJkRVKz97UQuF+0kdY7Vmo= github.com/fluxcd/helm-controller/api v0.34.1 h1:oL6GG7weRIqkTlTFRoTY3DJpxqKpAFEoDDsYoxQCa8g= github.com/fluxcd/helm-controller/api v0.34.1/go.mod h1:1v1UqS5jOgWdMDzvJBgdcY40RminDUO6A0by4IkHd5s= github.com/fluxcd/image-automation-controller/api v0.34.1 h1:Y2RFhmltELcSGm3lsGgmRcJCBf0SdGlH/PwCxewk4w0= @@ -178,9 +170,9 @@ github.com/fluxcd/pkg/apis/meta v1.1.0 h1:vYU1mvUzztnQyTzZOLHQ3wm/tXd7E1QZ2V91zu github.com/fluxcd/pkg/apis/meta v1.1.0/go.mod h1:/QwCotRKL/BT6RSa4O75FlYW14fU8eRfKnoagzbkmL4= github.com/fluxcd/pkg/git v0.12.2 h1:96xH3hy3WfwiD0DioyJZcGapYT3lmPc2s7jU5UM8buw= github.com/fluxcd/pkg/git v0.12.2/go.mod h1:9TG4fEfGCF1XHLt9Xs7X2YOmkmWOiwfjH9tdGIQs8/8= -github.com/fluxcd/pkg/git/gogit v0.11.1 h1:17UbHEPQovLOhlrsPaDoJa3J7jX0I7G92TWXeEDf2eU= -github.com/fluxcd/pkg/git/gogit v0.11.1/go.mod h1:Hh358WYfwmvGf6Aaj1wjGZMN2AWlAcXRR6aubMQYq8M= -github.com/fluxcd/pkg/gittestserver v0.8.3 h1:ehqTcqXyN095+AK1XCJDQBljeaOhatF9bc0lFblThCw= +github.com/fluxcd/pkg/git/gogit v0.12.0 h1:0mCwQND0WpCVZYHLWcXJxRvKVcyWxH4JjMQFMaea8Q4= +github.com/fluxcd/pkg/git/gogit v0.12.0/go.mod h1:Kn+GfYfZBBIaXmQj39cQvrDxT/6y8leQxXZ5/B+YYTQ= +github.com/fluxcd/pkg/gittestserver v0.8.4 h1:rA/QUZnfH77ZZG+5xfMqjgEHJdzeeE6Nn1o8cops/bU= github.com/fluxcd/pkg/kustomize v1.3.3 h1:My3j7ImO/DMm5+nSDh+ytpSIpQ4mwDTUfNkJViShAfw= github.com/fluxcd/pkg/kustomize v1.3.3/go.mod h1:XT2qaVCiBE4S2B23sd9l5etIKj4SApdcDHzmki+X2Vw= github.com/fluxcd/pkg/oci v0.27.0 h1:Q1jnPjuNGn1/xvG+sCXsWEmXvA5O1tU0WMdXdNlDEoE= @@ -203,16 +195,12 @@ github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4 github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY= -github.com/gliderlabs/ssh v0.3.5/go.mod h1:8XB4KraRrX39qHhT6yxPsHedjA08I/uBVwj4xC+/+z4= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= -github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= -github.com/go-git/go-billy/v5 v5.3.1/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= github.com/go-git/go-billy/v5 v5.4.1 h1:Uwp5tDRkPr+l/TnbHOQzp+tmJfLceOlbVucgpTz8ix4= github.com/go-git/go-billy/v5 v5.4.1/go.mod h1:vjbugF6Fz7JIflbVpl1hJsGjSHNltrSw45YK/ukIvQg= -github.com/go-git/go-git-fixtures/v4 v4.3.1/go.mod h1:8LHG1a3SRW71ettAD/jW13h8c6AqjVSeL11RAdgaqpo= github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20230305113008-0c11038e723f h1:Pz0DHeFij3XFhoBRGUDPzSJ+w2UcK5/0JvF8DRI58r8= github.com/go-git/go-git/v5 v5.7.0 h1:t9AudWVLmqzlo+4bqdf7GY+46SUuRsx59SboFxkq2aE= github.com/go-git/go-git/v5 v5.7.0/go.mod h1:coJHKEOk5kUClpsNlXrUvPrDxY3w3gjHvhcZd8Fodw8= @@ -324,7 +312,6 @@ github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+l github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/homeport/dyff v1.5.7 h1:24IrdSAb2fprR67XHMIagGoc1c4VNBV9ibNFKICsSis= github.com/homeport/dyff v1.5.7/go.mod h1:AfPyh52slslbDkh1fy0MGIbKTiUy/2xbM1Zos5HZTm4= -github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= github.com/imdario/mergo v0.3.15 h1:M8XP7IuFNsqUx6VPK2P9OSmsYsI/YFaGil0uD21V3dM= github.com/imdario/mergo v0.3.15/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= @@ -332,7 +319,6 @@ github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLf github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= @@ -431,7 +417,6 @@ github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+v github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= -github.com/pjbgf/sha1cd v0.2.3/go.mod h1:HOK9QrgzdHpbc2Kzip0Q1yi3M2MFGPADtR6HjG65m5M= github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4= github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI= github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU= @@ -467,7 +452,6 @@ github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6L github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= @@ -475,7 +459,6 @@ github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/sirupsen/logrus v1.9.2 h1:oxx1eChJGI6Uks2ZC4W1zpLlVgqB8ner4EuQwV4Ik1Y= github.com/sirupsen/logrus v1.9.2/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= -github.com/skeema/knownhosts v1.1.0/go.mod h1:sKFq3RD6/TKZkSWn8boUbDC7Qkgcv+8XXijpFO6roag= github.com/skeema/knownhosts v1.1.1 h1:MTk78x9FPgDFVFkDLTrsnnfCJl7g1C/nnKvePgrIngE= github.com/skeema/knownhosts v1.1.1/go.mod h1:g4fPeYpque7P0xefxtGzV81ihjC8sX2IqpAoNkjxbMo= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= @@ -510,7 +493,6 @@ github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74 h1:JwtAtb github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74/go.mod h1:RmMWU37GKR2s6pgrIEB4ixgpVCt/cf7dnJv3fuH1J1c= github.com/xanzy/go-gitlab v0.83.0 h1:37p0MpTPNbsTMKX/JnmJtY8Ch1sFiJzVF342+RvZEGw= github.com/xanzy/go-gitlab v0.83.0/go.mod h1:5ryv+MnpZStBH8I/77HuQBsMbBGANtVpLWC15qOjWAw= -github.com/xanzy/ssh-agent v0.3.2/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= @@ -539,10 +521,7 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g= @@ -575,8 +554,6 @@ golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96b golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= @@ -606,12 +583,10 @@ golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -620,15 +595,11 @@ golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220906165534-d0df966e6959/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -638,8 +609,6 @@ golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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= golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= @@ -709,7 +678,6 @@ google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqw 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= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= @@ -720,7 +688,6 @@ gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRN gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= From fb3013cb9598a8abeff56ac5e5061f3f5741e260 Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Tue, 30 May 2023 17:11:58 +0100 Subject: [PATCH 530/818] set logger for controller runtime Signed-off-by: Somtochi Onyekwere --- tests/azure/azure_test.go | 4 +++- tests/azure/go.mod | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/azure/azure_test.go b/tests/azure/azure_test.go index 5b5631d2..6209ec9b 100644 --- a/tests/azure/azure_test.go +++ b/tests/azure/azure_test.go @@ -44,8 +44,10 @@ import ( corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" + "k8s.io/klog/v2/klogr" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" + runtimeLog "sigs.k8s.io/controller-runtime/pkg/log" automationv1beta1 "github.com/fluxcd/image-automation-controller/api/v1beta1" reflectorv1beta2 "github.com/fluxcd/image-reflector-controller/api/v1beta2" @@ -111,7 +113,7 @@ func TestMain(m *testing.M) { func setup(m *testing.M) (exitVal int, err error) { ctx := context.TODO() - + runtimeLog.SetLogger(klogr.New()) // Setup Terraform binary and init state log.Println("Setting up Azure test infrastructure") i := install.NewInstaller() diff --git a/tests/azure/go.mod b/tests/azure/go.mod index d2bbc329..38b7a8e0 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -24,6 +24,7 @@ require ( k8s.io/api v0.27.2 k8s.io/apimachinery v0.27.2 k8s.io/client-go v0.27.2 + k8s.io/klog/v2 v2.100.1 sigs.k8s.io/controller-runtime v0.15.0 ) @@ -111,7 +112,6 @@ require ( gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect k8s.io/apiextensions-apiserver v0.27.2 // indirect - k8s.io/klog/v2 v2.100.1 // indirect k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f // indirect k8s.io/utils v0.0.0-20230505201702-9f6742963106 // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect From 0337362eec06e451b93700e6b4f64dc21f81ea19 Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Wed, 31 May 2023 10:17:02 +0100 Subject: [PATCH 531/818] return clone error Signed-off-by: Somtochi Onyekwere --- tests/azure/util_test.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/azure/util_test.go b/tests/azure/util_test.go index eb3ecb76..7c4f4083 100644 --- a/tests/azure/util_test.go +++ b/tests/azure/util_test.go @@ -318,6 +318,9 @@ func getRepository(repoURL, branchName string, overrideBranch bool, password str Branch: checkoutBranch, }, }) + if err != nil { + return nil, "", err + } err = c.SwitchBranch(context.Background(), branchName) if err != nil { From bbb3063cb2267c65a598b129718d67b8f824c484 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 5 Jun 2023 01:19:20 +0000 Subject: [PATCH 532/818] build(deps): bump github/codeql-action from 2.3.5 to 2.3.6 Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2.3.5 to 2.3.6. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/0225834cc549ee0ca93cb085b92954821a145866...83f0fe6c4988d98a455712a27f0255212bba9bd4) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/ossf.yaml | 2 +- .github/workflows/scan.yaml | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ossf.yaml b/.github/workflows/ossf.yaml index e281e5ba..2e303562 100644 --- a/.github/workflows/ossf.yaml +++ b/.github/workflows/ossf.yaml @@ -34,6 +34,6 @@ jobs: path: results.sarif retention-days: 5 - name: Upload SARIF results - uses: github/codeql-action/upload-sarif@0225834cc549ee0ca93cb085b92954821a145866 # v2.3.5 + uses: github/codeql-action/upload-sarif@83f0fe6c4988d98a455712a27f0255212bba9bd4 # v2.3.6 with: sarif_file: results.sarif diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index ecf73332..81573c61 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -53,7 +53,7 @@ jobs: env: SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }} - name: Upload result to GitHub Code Scanning - uses: github/codeql-action/upload-sarif@0225834cc549ee0ca93cb085b92954821a145866 # v2.3.5 + uses: github/codeql-action/upload-sarif@83f0fe6c4988d98a455712a27f0255212bba9bd4 # v2.3.6 with: sarif_file: snyk.sarif @@ -73,10 +73,10 @@ jobs: **/go.sum **/go.mod - name: Initialize CodeQL - uses: github/codeql-action/init@0225834cc549ee0ca93cb085b92954821a145866 # v2.3.5 + uses: github/codeql-action/init@83f0fe6c4988d98a455712a27f0255212bba9bd4 # v2.3.6 with: languages: go - name: Autobuild - uses: github/codeql-action/autobuild@0225834cc549ee0ca93cb085b92954821a145866 # v2.3.5 + uses: github/codeql-action/autobuild@83f0fe6c4988d98a455712a27f0255212bba9bd4 # v2.3.6 - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@0225834cc549ee0ca93cb085b92954821a145866 # v2.3.5 + uses: github/codeql-action/analyze@83f0fe6c4988d98a455712a27f0255212bba9bd4 # v2.3.6 From cbdd71e44eca6e877036ec16666b9b27d466bb66 Mon Sep 17 00:00:00 2001 From: Max Jonas Werner Date: Thu, 1 Jun 2023 15:53:05 +0200 Subject: [PATCH 533/818] Make `flux logs` more lenient UX changes: - Only print an error when a pod doesn't have a matching container instead of exiting early. - Return a non-zero status code when no pod is found at all. Details: In certain situations there might be 3rd-party pods running in the Flux namespace that cause the command to fail streaming logs, e.g. when they have multiple containers but none of them is called `manager` (which all Flux-maintained pods do). An example of such a situation is when Flux is installed with the 3rd-party Flux extension on AKS. The `logs` command is now more forgiving and merely logs an error in these situations instead of completely bailing out. It still returns a non-zero exit code. For the parallel log streaming with `-f` the code is now a little more complex so that errors are now written to stderr in parallel with all other logs written to stdout. That's what `asyncCopy` is for. refs #3944 Signed-off-by: Max Jonas Werner --- cmd/flux/logs.go | 49 ++++++++--- cmd/flux/logs_e2e_test.go | 88 ++++++++++++++++++++ cmd/flux/{logs_test.go => logs_unit_test.go} | 70 ++-------------- cmd/flux/main_test.go | 4 + 4 files changed, 138 insertions(+), 73 deletions(-) create mode 100644 cmd/flux/logs_e2e_test.go rename cmd/flux/{logs_test.go => logs_unit_test.go} (76%) diff --git a/cmd/flux/logs.go b/cmd/flux/logs.go index d8c27ff2..84d68acb 100644 --- a/cmd/flux/logs.go +++ b/cmd/flux/logs.go @@ -20,6 +20,7 @@ import ( "bufio" "context" "encoding/json" + "errors" "fmt" "io" "os" @@ -76,7 +77,7 @@ type logsFlags struct { sinceSeconds time.Duration } -var logsArgs = &logsFlags{ +var logsArgs = logsFlags{ tail: -1, } @@ -115,7 +116,7 @@ func logsCmdRun(cmd *cobra.Command, args []string) error { return fmt.Errorf("no argument required") } - pods, err := getPods(ctx, clientset, fluxSelector) + pods, err := getPods(ctx, clientset, logsArgs.fluxNamespace, fluxSelector) if err != nil { return err } @@ -163,13 +164,16 @@ func logsCmdRun(cmd *cobra.Command, args []string) error { return podLogs(ctx, requests) } -func getPods(ctx context.Context, c *kubernetes.Clientset, label string) ([]corev1.Pod, error) { +// getPods searches for all Deployments in the given namespace that match the given label and returns a list of Pods +// from these Deployments. For each Deployment a single Pod is chosen (based on various factors such as the running +// state). If no Pod is found, an error is returned. +func getPods(ctx context.Context, c *kubernetes.Clientset, ns string, label string) ([]corev1.Pod, error) { var ret []corev1.Pod opts := metav1.ListOptions{ LabelSelector: label, } - deployList, err := c.AppsV1().Deployments(logsArgs.fluxNamespace).List(ctx, opts) + deployList, err := c.AppsV1().Deployments(ns).List(ctx, opts) if err != nil { return ret, err } @@ -179,7 +183,7 @@ func getPods(ctx context.Context, c *kubernetes.Clientset, label string) ([]core opts := metav1.ListOptions{ LabelSelector: createLabelStringFromMap(label), } - podList, err := c.CoreV1().Pods(logsArgs.fluxNamespace).List(ctx, opts) + podList, err := c.CoreV1().Pods(ns).List(ctx, opts) if err != nil { return ret, err } @@ -196,11 +200,16 @@ func getPods(ctx context.Context, c *kubernetes.Clientset, label string) ([]core } } + if len(ret) == 0 { + return nil, fmt.Errorf("no Flux pods found in namespace %q", ns) + } + return ret, nil } func parallelPodLogs(ctx context.Context, requests []rest.ResponseWrapper) error { reader, writer := io.Pipe() + errReader, errWriter := io.Pipe() wg := &sync.WaitGroup{} wg.Add(len(requests)) @@ -208,7 +217,7 @@ func parallelPodLogs(ctx context.Context, requests []rest.ResponseWrapper) error go func(req rest.ResponseWrapper) { defer wg.Done() if err := logRequest(ctx, req, writer); err != nil { - writer.CloseWithError(err) + fmt.Fprintf(errWriter, "failed getting logs: %s\n", err) return } }(request) @@ -217,20 +226,40 @@ func parallelPodLogs(ctx context.Context, requests []rest.ResponseWrapper) error go func() { wg.Wait() writer.Close() + errWriter.Close() }() - _, err := io.Copy(os.Stdout, reader) - return err + stdoutErrCh := asyncCopy(os.Stdout, reader) + stderrErrCh := asyncCopy(os.Stderr, errReader) + + return errors.Join(<-stdoutErrCh, <-stderrErrCh) +} + +// asyncCopy copies all data from from dst to src asynchronously and returns a channel for reading an error value. +// This is basically an asynchronous wrapper around `io.Copy`. The returned channel is unbuffered and always is sent +// a value (either nil or the error from `io.Copy`) as soon as `io.Copy` returns. +// This function lets you copy from multiple sources into multiple destinations in parallel. +func asyncCopy(dst io.Writer, src io.Reader) <-chan error { + errCh := make(chan error) + go func(errCh chan error) { + _, err := io.Copy(dst, src) + errCh <- err + }(errCh) + + return errCh } func podLogs(ctx context.Context, requests []rest.ResponseWrapper) error { + var retErr error for _, req := range requests { if err := logRequest(ctx, req, os.Stdout); err != nil { - return err + fmt.Fprintf(os.Stderr, "failed getting logs: %s\n", err) + retErr = fmt.Errorf("failed to collect logs from all Flux pods") + continue } } - return nil + return retErr } func createLabelStringFromMap(m map[string]string) string { diff --git a/cmd/flux/logs_e2e_test.go b/cmd/flux/logs_e2e_test.go new file mode 100644 index 00000000..65a2d76e --- /dev/null +++ b/cmd/flux/logs_e2e_test.go @@ -0,0 +1,88 @@ +//go:build e2e +// +build e2e + +/* +Copyright 2021 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "testing" +) + +func TestLogsNoArgs(t *testing.T) { + cmd := cmdTestCase{ + args: "logs", + assert: assertSuccess(), + } + cmd.runTestCmd(t) +} + +func TestLogsWrongNamespace(t *testing.T) { + cmd := cmdTestCase{ + args: "logs --flux-namespace=default", + assert: assertError(`no Flux pods found in namespace "default"`), + } + cmd.runTestCmd(t) +} + +func TestLogsAllNamespaces(t *testing.T) { + cmd := cmdTestCase{ + args: "logs --all-namespaces", + assert: assertSuccess(), + } + cmd.runTestCmd(t) +} + +func TestLogsSince(t *testing.T) { + cmd := cmdTestCase{ + args: "logs --since=2m", + assert: assertSuccess(), + } + cmd.runTestCmd(t) +} + +func TestLogsSinceInvalid(t *testing.T) { + cmd := cmdTestCase{ + args: "logs --since=XXX", + assert: assertError(`invalid argument "XXX" for "--since" flag: time: invalid duration "XXX"`), + } + cmd.runTestCmd(t) +} + +func TestLogsSinceTime(t *testing.T) { + cmd := cmdTestCase{ + args: "logs --since-time=2021-08-06T14:26:25.546Z", + assert: assertSuccess(), + } + cmd.runTestCmd(t) +} + +func TestLogsSinceTimeInvalid(t *testing.T) { + cmd := cmdTestCase{ + args: "logs --since-time=XXX", + assert: assertError("XXX is not a valid (RFC3339) time"), + } + cmd.runTestCmd(t) +} + +func TestLogsSinceOnlyOneAllowed(t *testing.T) { + cmd := cmdTestCase{ + args: "logs --since=2m --since-time=2021-08-06T14:26:25.546Z", + assert: assertError("at most one of `sinceTime` or `sinceSeconds` may be specified"), + } + cmd.runTestCmd(t) +} diff --git a/cmd/flux/logs_test.go b/cmd/flux/logs_unit_test.go similarity index 76% rename from cmd/flux/logs_test.go rename to cmd/flux/logs_unit_test.go index cb07234e..336f3314 100644 --- a/cmd/flux/logs_test.go +++ b/cmd/flux/logs_unit_test.go @@ -30,73 +30,17 @@ import ( . "github.com/onsi/gomega" ) -func TestLogsNoArgs(t *testing.T) { - cmd := cmdTestCase{ - args: "logs", - assert: assertSuccess(), - } - cmd.runTestCmd(t) -} - -func TestLogsAllNamespaces(t *testing.T) { - cmd := cmdTestCase{ - args: "logs --all-namespaces", - assert: assertSuccess(), - } - cmd.runTestCmd(t) -} - -func TestLogsSince(t *testing.T) { - cmd := cmdTestCase{ - args: "logs --since=2m", - assert: assertSuccess(), - } - cmd.runTestCmd(t) -} - -func TestLogsSinceInvalid(t *testing.T) { - cmd := cmdTestCase{ - args: "logs --since=XXX", - assert: assertError(`invalid argument "XXX" for "--since" flag: time: invalid duration "XXX"`), - } - cmd.runTestCmd(t) -} - -func TestLogsSinceTime(t *testing.T) { - cmd := cmdTestCase{ - args: "logs --since-time=2021-08-06T14:26:25.546Z", - assert: assertSuccess(), - } - cmd.runTestCmd(t) -} - -func TestLogsSinceTimeInvalid(t *testing.T) { - cmd := cmdTestCase{ - args: "logs --since-time=XXX", - assert: assertError("XXX is not a valid (RFC3339) time"), - } - cmd.runTestCmd(t) -} - -func TestLogsSinceOnlyOneAllowed(t *testing.T) { - cmd := cmdTestCase{ - args: "logs --since=2m --since-time=2021-08-06T14:26:25.546Z", - assert: assertError("at most one of `sinceTime` or `sinceSeconds` may be specified"), - } - cmd.runTestCmd(t) -} - func TestLogRequest(t *testing.T) { mapper := &testResponseMapper{} tests := []struct { name string namespace string - flags *logsFlags + flags logsFlags assertFile string }{ { name: "all logs", - flags: &logsFlags{ + flags: logsFlags{ tail: -1, allNamespaces: true, }, @@ -105,14 +49,14 @@ func TestLogRequest(t *testing.T) { { name: "filter by namespace", namespace: "default", - flags: &logsFlags{ + flags: logsFlags{ tail: -1, }, assertFile: "testdata/logs/namespace.txt", }, { name: "filter by kind and namespace", - flags: &logsFlags{ + flags: logsFlags{ tail: -1, kind: "Kustomization", }, @@ -120,7 +64,7 @@ func TestLogRequest(t *testing.T) { }, { name: "filter by loglevel", - flags: &logsFlags{ + flags: logsFlags{ tail: -1, logLevel: "error", allNamespaces: true, @@ -130,7 +74,7 @@ func TestLogRequest(t *testing.T) { { name: "filter by namespace, name, loglevel and kind", namespace: "flux-system", - flags: &logsFlags{ + flags: logsFlags{ tail: -1, logLevel: "error", kind: "Kustomization", @@ -163,7 +107,7 @@ func TestLogRequest(t *testing.T) { // reset flags to default *kubeconfigArgs.Namespace = rootArgs.defaults.Namespace - logsArgs = &logsFlags{ + logsArgs = logsFlags{ tail: -1, } }) diff --git a/cmd/flux/main_test.go b/cmd/flux/main_test.go index d153d479..dd9a6c28 100644 --- a/cmd/flux/main_test.go +++ b/cmd/flux/main_test.go @@ -392,6 +392,10 @@ func resetCmdArgs() { alertProviderArgs = alertProviderFlags{} bootstrapArgs = NewBootstrapFlags() bServerArgs = bServerFlags{} + logsArgs = logsFlags{ + tail: -1, + fluxNamespace: rootArgs.defaults.Namespace, + } buildKsArgs = buildKsFlags{} checkArgs = checkFlags{} createArgs = createFlags{} From 9c81a747435e57d7a44bd389da7e64e27f7cdc4a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Jun 2023 01:20:41 +0000 Subject: [PATCH 534/818] build(deps): bump github/codeql-action from 2.3.6 to 2.13.4 Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2.3.6 to 2.13.4. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/83f0fe6c4988d98a455712a27f0255212bba9bd4...cdcdbb579706841c47f7063dda365e292e5cad7a) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/ossf.yaml | 2 +- .github/workflows/scan.yaml | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ossf.yaml b/.github/workflows/ossf.yaml index 2e303562..6ab0fc00 100644 --- a/.github/workflows/ossf.yaml +++ b/.github/workflows/ossf.yaml @@ -34,6 +34,6 @@ jobs: path: results.sarif retention-days: 5 - name: Upload SARIF results - uses: github/codeql-action/upload-sarif@83f0fe6c4988d98a455712a27f0255212bba9bd4 # v2.3.6 + uses: github/codeql-action/upload-sarif@cdcdbb579706841c47f7063dda365e292e5cad7a # v2.13.4 with: sarif_file: results.sarif diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index 81573c61..975e1eda 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -53,7 +53,7 @@ jobs: env: SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }} - name: Upload result to GitHub Code Scanning - uses: github/codeql-action/upload-sarif@83f0fe6c4988d98a455712a27f0255212bba9bd4 # v2.3.6 + uses: github/codeql-action/upload-sarif@cdcdbb579706841c47f7063dda365e292e5cad7a # v2.13.4 with: sarif_file: snyk.sarif @@ -73,10 +73,10 @@ jobs: **/go.sum **/go.mod - name: Initialize CodeQL - uses: github/codeql-action/init@83f0fe6c4988d98a455712a27f0255212bba9bd4 # v2.3.6 + uses: github/codeql-action/init@cdcdbb579706841c47f7063dda365e292e5cad7a # v2.13.4 with: languages: go - name: Autobuild - uses: github/codeql-action/autobuild@83f0fe6c4988d98a455712a27f0255212bba9bd4 # v2.3.6 + uses: github/codeql-action/autobuild@cdcdbb579706841c47f7063dda365e292e5cad7a # v2.13.4 - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@83f0fe6c4988d98a455712a27f0255212bba9bd4 # v2.3.6 + uses: github/codeql-action/analyze@cdcdbb579706841c47f7063dda365e292e5cad7a # v2.13.4 From 6d2dd076dc64e6221899b903df0b5f6f4ad9cec0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Jun 2023 09:25:10 +0000 Subject: [PATCH 535/818] build(deps): bump docker/setup-buildx-action from 2.5.0 to 2.6.0 Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 2.5.0 to 2.6.0. - [Release notes](https://github.com/docker/setup-buildx-action/releases) - [Commits](https://github.com/docker/setup-buildx-action/compare/4b4e9c3e2d4531116a6f8ba8e71fc6e2cb6e6c8c...6a58db7e0d21ca03e6c44877909e80e45217eed2) --- updated-dependencies: - dependency-name: docker/setup-buildx-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/release.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 7f47a837..556b2e9c 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -28,7 +28,7 @@ jobs: uses: docker/setup-qemu-action@e81a89b1732b9c48d79cd809d8d81d79c4647a18 # v2.1.0 - name: Setup Docker Buildx id: buildx - uses: docker/setup-buildx-action@4b4e9c3e2d4531116a6f8ba8e71fc6e2cb6e6c8c # v2.5.0 + uses: docker/setup-buildx-action@6a58db7e0d21ca03e6c44877909e80e45217eed2 # v2.6.0 - name: Setup Syft uses: anchore/sbom-action/download-syft@4d571ad1038a9cc29d676154ef265ab8f9027042 # v0.14.2 - name: Setup Cosign From 0d1a68ecb46d986039c1873be95b6dc4e1d472fa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Jun 2023 09:39:54 +0000 Subject: [PATCH 536/818] build(deps): bump actions/checkout from 3.5.2 to 3.5.3 Bumps [actions/checkout](https://github.com/actions/checkout) from 3.5.2 to 3.5.3. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/8e5e7e5ab8b370d6c329ec480221332ada57f0ab...c85c95e3d7251135ab7dc9ce3241c5835cc595a9) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/e2e-arm64.yaml | 2 +- .github/workflows/e2e-azure.yaml | 2 +- .github/workflows/e2e-bootstrap.yaml | 2 +- .github/workflows/e2e.yaml | 2 +- .github/workflows/ossf.yaml | 2 +- .github/workflows/release.yaml | 4 ++-- .github/workflows/scan.yaml | 6 +++--- .github/workflows/update.yaml | 2 +- 8 files changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/workflows/e2e-arm64.yaml b/.github/workflows/e2e-arm64.yaml index 5ae2c8a1..f33dfd2e 100644 --- a/.github/workflows/e2e-arm64.yaml +++ b/.github/workflows/e2e-arm64.yaml @@ -20,7 +20,7 @@ jobs: KUBERNETES_VERSION: [ 1.25.8, 1.26.3, 1.27.1 ] steps: - name: Checkout - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2 + uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 - name: Setup Go uses: actions/setup-go@fac708d6674e30b6ba41289acaab6d4b75aa0753 # v4.0.1 with: diff --git a/.github/workflows/e2e-azure.yaml b/.github/workflows/e2e-azure.yaml index 5caaedd4..e4fd80ab 100644 --- a/.github/workflows/e2e-azure.yaml +++ b/.github/workflows/e2e-azure.yaml @@ -26,7 +26,7 @@ jobs: if: (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) && github.actor != 'dependabot[bot]' steps: - name: Checkout - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2 + uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 - name: Setup Go uses: actions/setup-go@fac708d6674e30b6ba41289acaab6d4b75aa0753 # v4.0.1 with: diff --git a/.github/workflows/e2e-bootstrap.yaml b/.github/workflows/e2e-bootstrap.yaml index 53e896fa..c8e50195 100644 --- a/.github/workflows/e2e-bootstrap.yaml +++ b/.github/workflows/e2e-bootstrap.yaml @@ -16,7 +16,7 @@ jobs: if: (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) && github.actor != 'dependabot[bot]' steps: - name: Checkout - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2 + uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 - name: Setup Go uses: actions/setup-go@fac708d6674e30b6ba41289acaab6d4b75aa0753 # v4.0.1 with: diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index 5e137cdb..d7655d6e 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -20,7 +20,7 @@ jobs: - 5000:5000 steps: - name: Checkout - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2 + uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 - name: Setup Go uses: actions/setup-go@fac708d6674e30b6ba41289acaab6d4b75aa0753 # v4.0.1 with: diff --git a/.github/workflows/ossf.yaml b/.github/workflows/ossf.yaml index 6ab0fc00..af49d560 100644 --- a/.github/workflows/ossf.yaml +++ b/.github/workflows/ossf.yaml @@ -19,7 +19,7 @@ jobs: actions: read contents: read steps: - - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2 + - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 - name: Run analysis uses: ossf/scorecard-action@80e868c13c90f172d68d1f4501dee99e2479f7af # v2.1.3 with: diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 556b2e9c..87d421c2 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -16,7 +16,7 @@ jobs: packages: write # needed for ghcr access steps: - name: Checkout - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2 + uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 - name: Unshallow run: git fetch --prune --unshallow - name: Setup Go @@ -89,7 +89,7 @@ jobs: id-token: write packages: write steps: - - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2 + - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 - name: Setup Kustomize uses: fluxcd/pkg/actions/kustomize@main - name: Setup Flux CLI diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index 975e1eda..f412388c 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -17,7 +17,7 @@ jobs: runs-on: ubuntu-latest if: github.actor != 'dependabot[bot]' steps: - - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2 + - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 - name: Run FOSSA scan and upload build data uses: fossa-contrib/fossa-action@6728dc6fe9a068c648d080c33829ffbe56565023 # v2.0.0 with: @@ -31,7 +31,7 @@ jobs: security-events: write if: (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) && github.actor != 'dependabot[bot]' steps: - - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2 + - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 - name: Setup Kustomize uses: fluxcd/pkg/actions/kustomize@main - name: Setup Go @@ -64,7 +64,7 @@ jobs: if: github.actor != 'dependabot[bot]' steps: - name: Checkout repository - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2 + uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 - name: Setup Go uses: actions/setup-go@fac708d6674e30b6ba41289acaab6d4b75aa0753 # v4.0.1 with: diff --git a/.github/workflows/update.yaml b/.github/workflows/update.yaml index 9c4f189f..89c09681 100644 --- a/.github/workflows/update.yaml +++ b/.github/workflows/update.yaml @@ -18,7 +18,7 @@ jobs: pull-requests: write steps: - name: Check out code - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2 + uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 - name: Setup Go uses: actions/setup-go@fac708d6674e30b6ba41289acaab6d4b75aa0753 # v4.0.1 with: From 55aa96a33a9e46232a26d51f92e6f6c210c0ae51 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Jun 2023 09:53:46 +0000 Subject: [PATCH 537/818] build(deps): bump docker/setup-qemu-action from 2.1.0 to 2.2.0 Bumps [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action) from 2.1.0 to 2.2.0. - [Release notes](https://github.com/docker/setup-qemu-action/releases) - [Commits](https://github.com/docker/setup-qemu-action/compare/e81a89b1732b9c48d79cd809d8d81d79c4647a18...2b82ce82d56a2a04d2637cd93a637ae1b359c0a7) --- updated-dependencies: - dependency-name: docker/setup-qemu-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/release.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 87d421c2..48654f6d 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -25,7 +25,7 @@ jobs: go-version: 1.20.x cache: false - name: Setup QEMU - uses: docker/setup-qemu-action@e81a89b1732b9c48d79cd809d8d81d79c4647a18 # v2.1.0 + uses: docker/setup-qemu-action@2b82ce82d56a2a04d2637cd93a637ae1b359c0a7 # v2.2.0 - name: Setup Docker Buildx id: buildx uses: docker/setup-buildx-action@6a58db7e0d21ca03e6c44877909e80e45217eed2 # v2.6.0 From 19137b8e8c7100e31f4f4f0c8080127f1aa7b3ad Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Jun 2023 10:10:29 +0000 Subject: [PATCH 538/818] build(deps): bump docker/login-action from 2.1.0 to 2.2.0 Bumps [docker/login-action](https://github.com/docker/login-action) from 2.1.0 to 2.2.0. - [Release notes](https://github.com/docker/login-action/releases) - [Commits](https://github.com/docker/login-action/compare/f4ef78c080cd8ba55a85445d5b36e214a81df20a...465a07811f14bebb1938fbed4728c6a1ff8901fc) --- updated-dependencies: - dependency-name: docker/login-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/release.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 48654f6d..29c75e7c 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -36,13 +36,13 @@ jobs: - name: Setup Kustomize uses: fluxcd/pkg/actions/kustomize@main - name: Login to GitHub Container Registry - uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a # v2.1.0 + uses: docker/login-action@465a07811f14bebb1938fbed4728c6a1ff8901fc # v2.2.0 with: registry: ghcr.io username: fluxcdbot password: ${{ secrets.GHCR_TOKEN }} - name: Login to Docker Hub - uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a # v2.1.0 + uses: docker/login-action@465a07811f14bebb1938fbed4728c6a1ff8901fc # v2.2.0 with: username: fluxcdbot password: ${{ secrets.DOCKER_FLUXCD_PASSWORD }} @@ -100,13 +100,13 @@ jobs: VERSION=$(flux version --client | awk '{ print $NF }') echo "version=${VERSION}" >> $GITHUB_OUTPUT - name: Login to GHCR - uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a # v2.1.0 + uses: docker/login-action@465a07811f14bebb1938fbed4728c6a1ff8901fc # v2.2.0 with: registry: ghcr.io username: fluxcdbot password: ${{ secrets.GHCR_TOKEN }} - name: Login to DockerHub - uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a # v2.1.0 + uses: docker/login-action@465a07811f14bebb1938fbed4728c6a1ff8901fc # v2.2.0 with: username: fluxcdbot password: ${{ secrets.DOCKER_FLUXCD_PASSWORD }} From 6bf439d4ce3518218b97ff6aee27a18b3ddcab21 Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Tue, 6 Jun 2023 15:19:07 +0100 Subject: [PATCH 539/818] fix 'patchesJson6902' is deprecated' warning Signed-off-by: Somtochi Onyekwere --- pkg/manifestgen/install/templates.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/pkg/manifestgen/install/templates.go b/pkg/manifestgen/install/templates.go index ac47cf27..85af02b7 100644 --- a/pkg/manifestgen/install/templates.go +++ b/pkg/manifestgen/install/templates.go @@ -51,8 +51,6 @@ patches: - path: node-selector.yaml target: kind: Deployment - -patchesJson6902: {{- range $i, $component := .Components }} {{- if eq $component "notification-controller" }} - target: From ab983c678f703fcdddae33667f1ef7488a5a3f98 Mon Sep 17 00:00:00 2001 From: Katsunori Tanaka <958690+darklore@users.noreply.github.com> Date: Wed, 14 Jun 2023 23:58:48 +0900 Subject: [PATCH 540/818] Use equivalent and shorter way to generate shell completions Signed-off-by: Katsunori Tanaka <958690+darklore@users.noreply.github.com> --- .goreleaser.yml | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/.goreleaser.yml b/.goreleaser.yml index 423fcea6..df71dd3b 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -83,14 +83,7 @@ brews: install: | bin.install "flux" - bash_output = Utils.safe_popen_read(bin/"flux", "completion", "bash") - (bash_completion/"flux").write bash_output - - zsh_output = Utils.safe_popen_read(bin/"flux", "completion", "zsh") - (zsh_completion/"_flux").write zsh_output - - fish_output = Utils.safe_popen_read(bin/"flux", "completion", "fish") - (fish_completion/"flux.fish").write fish_output + generate_completions_from_executable(bin/"flux", "completion") test: | system "#{bin}/flux --version" publishers: From 2b8385a874712820d939e315782c80e61eb93adf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Jun 2023 01:17:57 +0000 Subject: [PATCH 541/818] build(deps): bump goreleaser/goreleaser-action from 4.2.0 to 4.3.0 Bumps [goreleaser/goreleaser-action](https://github.com/goreleaser/goreleaser-action) from 4.2.0 to 4.3.0. - [Release notes](https://github.com/goreleaser/goreleaser-action/releases) - [Commits](https://github.com/goreleaser/goreleaser-action/compare/f82d6c1c344bcacabba2c841718984797f664a6b...336e29918d653399e599bfca99fadc1d7ffbc9f7) --- updated-dependencies: - dependency-name: goreleaser/goreleaser-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/release.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 29c75e7c..6e262138 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -74,7 +74,7 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Run GoReleaser - uses: goreleaser/goreleaser-action@f82d6c1c344bcacabba2c841718984797f664a6b # v4.2.0 + uses: goreleaser/goreleaser-action@336e29918d653399e599bfca99fadc1d7ffbc9f7 # v4.3.0 with: version: latest args: release --release-notes=output/notes.md --skip-validate From f7e51017538c3934a94bd66e0736f09323b63e9a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Jun 2023 10:37:22 +0000 Subject: [PATCH 542/818] build(deps): bump peter-evans/create-pull-request from 5.0.1 to 5.0.2 Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 5.0.1 to 5.0.2. - [Release notes](https://github.com/peter-evans/create-pull-request/releases) - [Commits](https://github.com/peter-evans/create-pull-request/compare/284f54f989303d2699d373481a0cfa13ad5a6666...153407881ec5c347639a548ade7d8ad1d6740e38) --- updated-dependencies: - dependency-name: peter-evans/create-pull-request dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/update.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/update.yaml b/.github/workflows/update.yaml index 89c09681..ff869a5a 100644 --- a/.github/workflows/update.yaml +++ b/.github/workflows/update.yaml @@ -84,7 +84,7 @@ jobs: - name: Create Pull Request id: cpr - uses: peter-evans/create-pull-request@284f54f989303d2699d373481a0cfa13ad5a6666 # v5.0.1 + uses: peter-evans/create-pull-request@153407881ec5c347639a548ade7d8ad1d6740e38 # v5.0.2 with: token: ${{ secrets.BOT_GITHUB_TOKEN }} commit-message: | From c596c70d42735dcdc8f6b936d292d5954250816d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Jun 2023 11:07:15 +0000 Subject: [PATCH 543/818] build(deps): bump docker/setup-buildx-action from 2.6.0 to 2.7.0 Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 2.6.0 to 2.7.0. - [Release notes](https://github.com/docker/setup-buildx-action/releases) - [Commits](https://github.com/docker/setup-buildx-action/compare/6a58db7e0d21ca03e6c44877909e80e45217eed2...ecf95283f03858871ff00b787d79c419715afc34) --- updated-dependencies: - dependency-name: docker/setup-buildx-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/release.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 6e262138..360c9cff 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -28,7 +28,7 @@ jobs: uses: docker/setup-qemu-action@2b82ce82d56a2a04d2637cd93a637ae1b359c0a7 # v2.2.0 - name: Setup Docker Buildx id: buildx - uses: docker/setup-buildx-action@6a58db7e0d21ca03e6c44877909e80e45217eed2 # v2.6.0 + uses: docker/setup-buildx-action@ecf95283f03858871ff00b787d79c419715afc34 # v2.7.0 - name: Setup Syft uses: anchore/sbom-action/download-syft@4d571ad1038a9cc29d676154ef265ab8f9027042 # v0.14.2 - name: Setup Cosign From 173ee5fcdc85d5db5ac988841894c9e040ff5348 Mon Sep 17 00:00:00 2001 From: Max Jonas Werner Date: Thu, 22 Jun 2023 17:57:23 +0200 Subject: [PATCH 544/818] Don't log errors with missing CRDs for "get * all" commands MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Whenever an API type is not available then both, `flux get all` and `flux get image all` will just skip over that type instead of logging an error message. Before: ``` $ flux get all ✗ failed to get API group resources: unable to retrieve the complete list of server APIs: source.toolkit.fluxcd.io/v1beta2: the server could not find the requested resource [...] ✗ failed to get API group resources: unable to retrieve the complete list of server APIs: image.toolkit.fluxcd.io/v1beta2: the server could not find the requested resource ✗ failed to get API group resources: unable to retrieve the complete list of server APIs: image.toolkit.fluxcd.io/v1beta2: the server could not find the requested resource [...] $ echo $? 0 ``` After: ``` $ flux get all $ echo $? 0 ``` closes #3973 Signed-off-by: Max Jonas Werner --- cmd/flux/get.go | 6 ++++++ cmd/flux/get_image_all.go | 6 +----- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/cmd/flux/get.go b/cmd/flux/get.go index 54355317..fe70006a 100644 --- a/cmd/flux/get.go +++ b/cmd/flux/get.go @@ -18,6 +18,7 @@ package main import ( "context" + "errors" "fmt" "os" "strings" @@ -27,6 +28,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/watch" + "k8s.io/client-go/discovery" watchtools "k8s.io/client-go/tools/watch" "sigs.k8s.io/controller-runtime/pkg/client" @@ -176,6 +178,10 @@ func (get getCommand) run(cmd *cobra.Command, args []string) error { err = kubeClient.List(ctx, get.list.asClientList(), listOpts...) if err != nil { + var discErr *discovery.ErrGroupDiscoveryFailed + if getAll && (strings.Contains(err.Error(), "no matches for kind") || errors.As(err, &discErr)) { + return nil + } return err } diff --git a/cmd/flux/get_image_all.go b/cmd/flux/get_image_all.go index 4a37e238..83c1680c 100644 --- a/cmd/flux/get_image_all.go +++ b/cmd/flux/get_image_all.go @@ -17,8 +17,6 @@ limitations under the License. package main import ( - "strings" - "github.com/spf13/cobra" autov1 "github.com/fluxcd/image-automation-controller/api/v1beta1" @@ -57,9 +55,7 @@ var getImageAllCmd = &cobra.Command{ for _, c := range allImageCmd { if err := c.run(cmd, args); err != nil { - if !strings.Contains(err.Error(), "no matches for kind") { - logger.Failuref(err.Error()) - } + logger.Failuref(err.Error()) } } From 15a49334d81e2df09ed055c9522a83d7e743e6e3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Jun 2023 01:16:48 +0000 Subject: [PATCH 545/818] build(deps): bump anchore/sbom-action from 0.14.2 to 0.14.3 Bumps [anchore/sbom-action](https://github.com/anchore/sbom-action) from 0.14.2 to 0.14.3. - [Release notes](https://github.com/anchore/sbom-action/releases) - [Commits](https://github.com/anchore/sbom-action/compare/4d571ad1038a9cc29d676154ef265ab8f9027042...78fc58e266e87a38d4194b2137a3d4e9bcaf7ca1) --- updated-dependencies: - dependency-name: anchore/sbom-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/release.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 360c9cff..3b6d255b 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -30,7 +30,7 @@ jobs: id: buildx uses: docker/setup-buildx-action@ecf95283f03858871ff00b787d79c419715afc34 # v2.7.0 - name: Setup Syft - uses: anchore/sbom-action/download-syft@4d571ad1038a9cc29d676154ef265ab8f9027042 # v0.14.2 + uses: anchore/sbom-action/download-syft@78fc58e266e87a38d4194b2137a3d4e9bcaf7ca1 # v0.14.3 - name: Setup Cosign uses: sigstore/cosign-installer@dd6b2e2b610a11fd73dd187a43d57cc1394e35f9 # v3.0.5 - name: Setup Kustomize From 0a2945e7f16548759d6dfc016031fbce6a1b0488 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Jun 2023 08:27:20 +0000 Subject: [PATCH 546/818] build(deps): bump sigstore/cosign-installer from 3.0.5 to 3.1.0 Bumps [sigstore/cosign-installer](https://github.com/sigstore/cosign-installer) from 3.0.5 to 3.1.0. - [Release notes](https://github.com/sigstore/cosign-installer/releases) - [Commits](https://github.com/sigstore/cosign-installer/compare/dd6b2e2b610a11fd73dd187a43d57cc1394e35f9...d13028333d784fcc802b67ec924bcebe75aa0a5f) --- updated-dependencies: - dependency-name: sigstore/cosign-installer dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/release.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 3b6d255b..b64bf2a9 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -32,7 +32,7 @@ jobs: - name: Setup Syft uses: anchore/sbom-action/download-syft@78fc58e266e87a38d4194b2137a3d4e9bcaf7ca1 # v0.14.3 - name: Setup Cosign - uses: sigstore/cosign-installer@dd6b2e2b610a11fd73dd187a43d57cc1394e35f9 # v3.0.5 + uses: sigstore/cosign-installer@d13028333d784fcc802b67ec924bcebe75aa0a5f # v3.1.0 - name: Setup Kustomize uses: fluxcd/pkg/actions/kustomize@main - name: Login to GitHub Container Registry @@ -134,7 +134,7 @@ jobs: --path="./flux-system" \ --source=${{ github.repositoryUrl }} \ --revision="${{ github.ref_name }}@sha1:${{ github.sha }}" - - uses: sigstore/cosign-installer@dd6b2e2b610a11fd73dd187a43d57cc1394e35f9 # v3.0.5 + - uses: sigstore/cosign-installer@d13028333d784fcc802b67ec924bcebe75aa0a5f # v3.1.0 - name: Sign manifests env: COSIGN_EXPERIMENTAL: 1 From b850f51ef5f7b3cfe2c22f0f6211bd4b34003bdf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Jun 2023 08:40:29 +0000 Subject: [PATCH 547/818] build(deps): bump ossf/scorecard-action from 2.1.3 to 2.2.0 Bumps [ossf/scorecard-action](https://github.com/ossf/scorecard-action) from 2.1.3 to 2.2.0. - [Release notes](https://github.com/ossf/scorecard-action/releases) - [Changelog](https://github.com/ossf/scorecard-action/blob/main/RELEASE.md) - [Commits](https://github.com/ossf/scorecard-action/compare/80e868c13c90f172d68d1f4501dee99e2479f7af...08b4669551908b1024bb425080c797723083c031) --- updated-dependencies: - dependency-name: ossf/scorecard-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/ossf.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ossf.yaml b/.github/workflows/ossf.yaml index af49d560..9051b641 100644 --- a/.github/workflows/ossf.yaml +++ b/.github/workflows/ossf.yaml @@ -21,7 +21,7 @@ jobs: steps: - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 - name: Run analysis - uses: ossf/scorecard-action@80e868c13c90f172d68d1f4501dee99e2479f7af # v2.1.3 + uses: ossf/scorecard-action@08b4669551908b1024bb425080c797723083c031 # v2.2.0 with: results_file: results.sarif results_format: sarif From cf7ee0081cf81d53db1b0daf969c445489f6899e Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Fri, 23 Jun 2023 19:11:58 +0300 Subject: [PATCH 548/818] Add SLSA3 generators to release workflow Generate SLSA level 3 provenance attestations for the release assets and for the multi-arch container images. Signed-off-by: Stefan Prodan --- .github/workflows/e2e-bootstrap.yaml | 1 - .github/workflows/release.yaml | 61 ++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 1 deletion(-) diff --git a/.github/workflows/e2e-bootstrap.yaml b/.github/workflows/e2e-bootstrap.yaml index c8e50195..631f1069 100644 --- a/.github/workflows/e2e-bootstrap.yaml +++ b/.github/workflows/e2e-bootstrap.yaml @@ -98,7 +98,6 @@ jobs: --path=test-cluster \ --read-write-key /tmp/flux reconcile image repository podinfo - /tmp/flux reconcile image update flux-system /tmp/flux get images all retries=10 diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index b64bf2a9..56a923b1 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -9,6 +9,10 @@ permissions: jobs: release-flux-cli: + outputs: + hashes: ${{ steps.slsa.outputs.hashes }} + image_url: ${{ steps.slsa.outputs.image_url }} + image_digest: ${{ steps.slsa.outputs.image_digest }} runs-on: ubuntu-latest permissions: contents: write # needed to write releases @@ -74,6 +78,7 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Run GoReleaser + id: run-goreleaser uses: goreleaser/goreleaser-action@336e29918d653399e599bfca99fadc1d7ffbc9f7 # v4.3.0 with: version: latest @@ -82,6 +87,22 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} HOMEBREW_TAP_GITHUB_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN }} AUR_BOT_SSH_PRIVATE_KEY: ${{ secrets.AUR_BOT_SSH_PRIVATE_KEY }} + - name: Generate SLSA metadata + id: slsa + env: + ARTIFACTS: "${{ steps.run-goreleaser.outputs.artifacts }}" + run: | + set -euo pipefail + + hashes=$(echo $ARTIFACTS | jq --raw-output '.[] | {name, "digest": (.extra.Digest // .extra.Checksum)} | select(.digest) | {digest} + {name} | join(" ") | sub("^sha256:";"")' | base64 -w0) + echo "hashes=$hashes" >> $GITHUB_OUTPUT + + image_url=fluxcd/flux-cli:${{ steps.prep.outputs.version }} + echo "image_url=$image_url" >> $GITHUB_OUTPUT + + image_digest=$(docker buildx imagetools inspect ${image_url} --format '{{json .}}' | jq -r .manifest.digest) + echo "image_digest=$image_digest" >> $GITHUB_OUTPUT + release-flux-manifests: runs-on: ubuntu-latest needs: release-flux-cli @@ -148,3 +169,43 @@ jobs: flux tag artifact oci://docker.io/fluxcd/flux-manifests:${{ steps.prep.outputs.version }} \ --tag latest + + release-provenance: + needs: [release-flux-cli] + permissions: + actions: read # for detecting the Github Actions environment. + id-token: write # for creating OIDC tokens for signing. + contents: write # for uploading attestations to GitHub releases. + uses: slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@v1.7.0 + with: + provenance-name: "provenance.intoto.jsonl" + base64-subjects: "${{ needs.release-flux-cli.outputs.hashes }}" + upload-assets: true + + dockerhub-provenance: + needs: [release-flux-cli] + permissions: + actions: read # for detecting the Github Actions environment. + id-token: write # for creating OIDC tokens for signing. + packages: write # for uploading attestations. + uses: slsa-framework/slsa-github-generator/.github/workflows/generator_container_slsa3.yml@v1.7.0 + with: + image: ${{ needs.release-flux-cli.outputs.image_url }} + digest: ${{ needs.release-flux-cli.outputs.image_digest }} + registry-username: fluxcdbot + secrets: + registry-password: ${{ secrets.DOCKER_FLUXCD_PASSWORD }} + + ghcr-provenance: + needs: [release-flux-cli] + permissions: + actions: read # for detecting the Github Actions environment. + id-token: write # for creating OIDC tokens for signing. + packages: write # for uploading attestations. + uses: slsa-framework/slsa-github-generator/.github/workflows/generator_container_slsa3.yml@v1.7.0 + with: + image: ghcr.io/${{ needs.release-flux-cli.outputs.image_url }} + digest: ${{ needs.release-flux-cli.outputs.image_digest }} + registry-username: fluxcdbot + secrets: + registry-password: ${{ secrets.GHCR_TOKEN }} From ba5c7e4fc37a1bd699d82828b0891d526ab5ed31 Mon Sep 17 00:00:00 2001 From: Sanskar Jaiswal Date: Tue, 20 Jun 2023 18:34:05 +0530 Subject: [PATCH 549/818] RFC-0004: add section about proxy Signed-off-by: Sanskar Jaiswal --- rfcs/0004-insecure-http/README.md | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/rfcs/0004-insecure-http/README.md b/rfcs/0004-insecure-http/README.md index bcf9782a..349eab69 100644 --- a/rfcs/0004-insecure-http/README.md +++ b/rfcs/0004-insecure-http/README.md @@ -4,7 +4,7 @@ **Creation Date:** 2022-09-08 -**Last update:** 2022-10-21 +**Last update:** 2023-07-26 ## Summary @@ -111,9 +111,20 @@ for the required commands, which will be used for specifying the value of `.spec > Note: This flag should not be confused with `--insecure-skip-tls-verify` which is meant to skip TLS verification > when using an HTTPS connection. +### Proxy + +The flag shall also apply to all possible proxy configurations. If the flag `--insecure-allow-http` is set to +`false`, then specifying the `HTTP_PROXY` environment variable to the controller will lead to the controller +exiting with a failure on startup. This also applies for when the `HTTPS_PROXY` enviornment variable's value is +a URL that has `http` as its scheme. + +Similarly, if a proxy is specified using the object's API, such as through `.spec.secretRef` in `Provider` in the +`notification.toolkit.fluxcd.io` API group and the proxy URL has `http` as its scheme, the reconciler will fail and +return an error, which can be viewed in the controller logs and the object's events. + ### Precedence & Validity -Objects with `.spec.insecure` as `true ` will only be allowed if HTTP connections are allowed at the controller level. +Objects with `.spec.insecure` as `true` will only be allowed if HTTP connections are allowed at the controller level. Similarly, an object can have `.spec.insecure` as `true` only if the Saas/Cloud provider allows HTTP connections. For example, using a `Bucket` with its `.spec.provider` set to `azure` would be invalid since Azure doesn't allow HTTP connections. From 761762bdc0286a92a82e1513258c3fcb7cf836f7 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Mon, 26 Jun 2023 19:36:20 +0300 Subject: [PATCH 550/818] Align go.mod version with Kubernetes (Go 1.20) Signed-off-by: Stefan Prodan --- go.mod | 2 +- tests/azure/go.mod | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/go.mod b/go.mod index f65edc85..d054be0a 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/fluxcd/flux2/v2 -go 1.18 +go 1.20 require ( github.com/Masterminds/semver/v3 v3.2.1 diff --git a/tests/azure/go.mod b/tests/azure/go.mod index 38b7a8e0..322ad589 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -1,6 +1,6 @@ module github.com/fluxcd/flux2/tests/azure -go 1.19 +go 1.20 require ( github.com/Azure/azure-event-hubs-go/v3 v3.6.0 From 66a417a3ee5c75bc07b819417677196bd3ad006c Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Mon, 26 Jun 2023 19:52:26 +0300 Subject: [PATCH 551/818] Bump Go to 1.20 in aur deps Signed-off-by: Stefan Prodan --- .github/aur/flux-go/PKGBUILD.template | 2 +- .github/aur/flux-scm/PKGBUILD.template | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/aur/flux-go/PKGBUILD.template b/.github/aur/flux-go/PKGBUILD.template index 146e3847..05372e13 100644 --- a/.github/aur/flux-go/PKGBUILD.template +++ b/.github/aur/flux-go/PKGBUILD.template @@ -14,7 +14,7 @@ provides=("flux-bin") conflicts=("flux-bin") replaces=("flux-cli") depends=("glibc") -makedepends=('go>=1.17', 'kustomize>=3.0') +makedepends=('go>=1.20', 'kustomize>=5.0') optdepends=('bash-completion: auto-completion for flux in Bash', 'zsh-completions: auto-completion for flux in ZSH') source=( diff --git a/.github/aur/flux-scm/PKGBUILD.template b/.github/aur/flux-scm/PKGBUILD.template index b4c264c0..6e213ac2 100644 --- a/.github/aur/flux-scm/PKGBUILD.template +++ b/.github/aur/flux-scm/PKGBUILD.template @@ -12,7 +12,7 @@ license=("APACHE") provides=("flux-bin") conflicts=("flux-bin") depends=("glibc") -makedepends=('go>=1.17', 'kustomize>=3.0', 'git') +makedepends=('go>=1.20', 'kustomize>=5.0', 'git') optdepends=('bash-completion: auto-completion for flux in Bash', 'zsh-completions: auto-completion for flux in ZSH') source=( From 6ed6b937f8475ad14b19c5167c61354caff0a530 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Tue, 27 Jun 2023 16:33:40 +0300 Subject: [PATCH 552/818] Fix the `flux push` example for ECR Signed-off-by: Stefan Prodan --- cmd/flux/push_artifact.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/flux/push_artifact.go b/cmd/flux/push_artifact.go index 6a93d25e..3ebd3fbe 100644 --- a/cmd/flux/push_artifact.go +++ b/cmd/flux/push_artifact.go @@ -36,7 +36,7 @@ import ( "github.com/fluxcd/pkg/oci" "github.com/fluxcd/pkg/oci/auth/login" - client "github.com/fluxcd/pkg/oci/client" + "github.com/fluxcd/pkg/oci/client" sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" "github.com/fluxcd/flux2/v2/internal/flags" @@ -89,7 +89,7 @@ The command can read the credentials from '~/.docker/config.json' but they can a # Login directly to the registry provider # You might need to export the following variable if you use local config files for AWS: # export AWS_SDK_LOAD_CONFIG=1 - flux push artifact oci://.dkr.ecr..amazonaws.com/foo:v1:$(git tag --points-at HEAD) \ + flux push artifact oci://.dkr.ecr..amazonaws.com/app-config:$(git tag --points-at HEAD) \ --path="./path/to/local/manifests" \ --source="$(git config --get remote.origin.url)" \ --revision="$(git tag --points-at HEAD)@sha1:$(git rev-parse HEAD)" \ From db0256e0f7d1c08996929f6f5c6ffddd1539b757 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 28 Jun 2023 17:36:04 +0300 Subject: [PATCH 553/818] Set minimum supported version to Kubernetes 1.24.0 Signed-off-by: Stefan Prodan --- CONTRIBUTING.md | 4 ++-- cmd/flux/check.go | 2 +- cmd/flux/testdata/check/check_pre.golden | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 28b9acc5..84b54ef2 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -68,8 +68,8 @@ for source changes. Prerequisites: * go >= 1.20 -* kubectl >= 1.20 -* kustomize >= 4.4 +* kubectl >= 1.24 +* kustomize >= 5.0 * coreutils (on Mac OS) Install the [controller-runtime/envtest](https://github.com/kubernetes-sigs/controller-runtime/tree/master/tools/setup-envtest) binaries with: diff --git a/cmd/flux/check.go b/cmd/flux/check.go index ab029f2f..e6fa29a5 100644 --- a/cmd/flux/check.go +++ b/cmd/flux/check.go @@ -57,7 +57,7 @@ type checkFlags struct { } var kubernetesConstraints = []string{ - ">=1.20.6-0", + ">=1.24.0-0", } var checkArgs checkFlags diff --git a/cmd/flux/testdata/check/check_pre.golden b/cmd/flux/testdata/check/check_pre.golden index ebb6294d..4a263acd 100644 --- a/cmd/flux/testdata/check/check_pre.golden +++ b/cmd/flux/testdata/check/check_pre.golden @@ -1,3 +1,3 @@ ► checking prerequisites -✔ Kubernetes {{ .serverVersion }} >=1.20.6-0 +✔ Kubernetes {{ .serverVersion }} >=1.24.0-0 ✔ prerequisites checks passed From 42607aadc3b1d2454cdaa66aa129facb512fdaa7 Mon Sep 17 00:00:00 2001 From: Rishikesh Nair Date: Mon, 3 Apr 2023 15:17:20 +0530 Subject: [PATCH 554/818] Add support for passing multiple objects to suspend/resume commands This change adds support for running `suspend/resume` on multiple supported resources at the same time. This improves the user experience by converting ``` flux suspend ks operator && \ flux suspend ks database && \ flux suspend ks app ``` to ``` flux suspend ks operator database app ``` This works for all types of resources (Kustomizations, Sources, etc.) since it has been implemented at the `suspend.go` and `resume.go` level. When the `--wait` flag is passed to the `resume` command, then Flux will wait for all resources in parallel within a goroutine each. Each object is only processed once, even if user provided its name more than once. If suspension or resuming fails for one object, it is still carried out for the remaining objects. As a special case, the old behaviour of `resume` is retained, i.e. when only one object name is provided, `resume` waits for the object to become ready even if the `--wait` flag is not provided. In all other cases the `--wait` flag is always considered. closes #3746 closes #3793 Co-Authored-By: Max Jonas Werner Signed-off-by: Rishikesh Nair Signed-off-by: Max Jonas Werner --- cmd/flux/kustomization_test.go | 15 ++ cmd/flux/main_test.go | 6 + cmd/flux/object.go | 2 +- cmd/flux/resume.go | 179 +++++++++++++++--- cmd/flux/resume_alert.go | 1 - cmd/flux/resume_helmrelease.go | 1 - cmd/flux/resume_image_repository.go | 1 - cmd/flux/resume_image_updateauto.go | 1 - cmd/flux/resume_kustomization.go | 1 - cmd/flux/resume_receiver.go | 1 - cmd/flux/resume_source_bucket.go | 1 - cmd/flux/resume_source_chart.go | 1 - cmd/flux/resume_source_git.go | 1 - cmd/flux/resume_source_helm.go | 1 - cmd/flux/resume_source_oci.go | 1 - cmd/flux/suspend.go | 54 ++++-- .../resume_helmrelease_from_git.golden | 2 +- .../resume_kustomization_from_git.golden | 2 +- ...ustomization_from_git_multiple_args.golden | 2 + ...ization_from_git_multiple_args_wait.golden | 6 + ...ustomization_from_git_multiple_args.golden | 4 + cmd/flux/testdata/oci/resume_oci.golden | 2 +- 22 files changed, 229 insertions(+), 56 deletions(-) create mode 100644 cmd/flux/testdata/kustomization/resume_kustomization_from_git_multiple_args.golden create mode 100644 cmd/flux/testdata/kustomization/resume_kustomization_from_git_multiple_args_wait.golden create mode 100644 cmd/flux/testdata/kustomization/suspend_kustomization_from_git_multiple_args.golden diff --git a/cmd/flux/kustomization_test.go b/cmd/flux/kustomization_test.go index e49aba46..2f6176ac 100644 --- a/cmd/flux/kustomization_test.go +++ b/cmd/flux/kustomization_test.go @@ -61,11 +61,26 @@ func TestKustomizationFromGit(t *testing.T) { "testdata/kustomization/suspend_kustomization_from_git.golden", tmpl, }, + { + "suspend kustomization tkfg foo tkfg bar", + "testdata/kustomization/suspend_kustomization_from_git_multiple_args.golden", + tmpl, + }, + { + "resume kustomization tkfg foo --wait", + "testdata/kustomization/resume_kustomization_from_git_multiple_args_wait.golden", + tmpl, + }, { "resume kustomization tkfg", "testdata/kustomization/resume_kustomization_from_git.golden", tmpl, }, + { + "resume kustomization tkfg tkfg", + "testdata/kustomization/resume_kustomization_from_git_multiple_args.golden", + tmpl, + }, { "delete kustomization tkfg --silent", "testdata/kustomization/delete_kustomization_from_git.golden", diff --git a/cmd/flux/main_test.go b/cmd/flux/main_test.go index dd9a6c28..37398309 100644 --- a/cmd/flux/main_test.go +++ b/cmd/flux/main_test.go @@ -365,6 +365,12 @@ func executeTemplate(content string, templateValues map[string]string) (string, // Run the command and return the captured output. func executeCommand(cmd string) (string, error) { defer resetCmdArgs() + defer func() { + // need to set this explicitly because apparently its value isn't changed + // in subsequent executions which causes tests to fail that rely on the value + // of "Changed". + resumeCmd.PersistentFlags().Lookup("wait").Changed = false + }() args, err := shellwords.Parse(cmd) if err != nil { return "", err diff --git a/cmd/flux/object.go b/cmd/flux/object.go index 26b3a040..681d86e0 100644 --- a/cmd/flux/object.go +++ b/cmd/flux/object.go @@ -47,7 +47,7 @@ type copyable interface { deepCopyClientObject() client.Object } -// listAdapater is the analogue to adapter, but for lists; the +// listAdapter is the analogue to adapter, but for lists; the // controller runtime distinguishes between methods dealing with // objects and lists. type listAdapter interface { diff --git a/cmd/flux/resume.go b/cmd/flux/resume.go index 9c592d6c..bc27c4eb 100644 --- a/cmd/flux/resume.go +++ b/cmd/flux/resume.go @@ -19,6 +19,8 @@ package main import ( "context" "fmt" + "sort" + "sync" "github.com/spf13/cobra" "k8s.io/apimachinery/pkg/types" @@ -59,8 +61,10 @@ type resumable interface { type resumeCommand struct { apiType - object resumable - list listResumable + client client.WithWatch + list listResumable + namespace string + shouldReconcile bool } type listResumable interface { @@ -68,6 +72,11 @@ type listResumable interface { resumeItem(i int) resumable } +type reconcileResponse struct { + resumable + err error +} + func (resume resumeCommand) run(cmd *cobra.Command, args []string) error { if len(args) < 1 && !resumeArgs.all { return fmt.Errorf("%s name is required", resume.humanKind) @@ -80,52 +89,162 @@ func (resume resumeCommand) run(cmd *cobra.Command, args []string) error { if err != nil { return err } + resume.client = kubeClient + resume.namespace = *kubeconfigArgs.Namespace - var listOpts []client.ListOption - listOpts = append(listOpts, client.InNamespace(*kubeconfigArgs.Namespace)) - if len(args) > 0 { - listOpts = append(listOpts, client.MatchingFields{ - "metadata.name": args[0], - }) - } + // require waiting for the object(s) if the user has not provided the --wait flag and gave exactly + // one object to resume. This is necessary to maintain backwards compatibility with prior versions + // of this command. Otherwise just follow the value of the --wait flag (including its default). + resume.shouldReconcile = !resumeCmd.PersistentFlags().Changed("wait") && len(args) == 1 || resumeArgs.wait - err = kubeClient.List(ctx, resume.list.asClientList(), listOpts...) + resumables, err := resume.getPatchedResumables(ctx, args) if err != nil { return err } + var wg sync.WaitGroup + wg.Add(len(resumables)) + + resultChan := make(chan reconcileResponse, len(resumables)) + for _, r := range resumables { + go func(res resumable) { + defer wg.Done() + resultChan <- resume.reconcile(ctx, res) + }(r) + } + + go func() { + defer close(resultChan) + wg.Wait() + }() + + reconcileResps := make([]reconcileResponse, 0, len(resumables)) + for c := range resultChan { + reconcileResps = append(reconcileResps, c) + } + + resume.printMessage(reconcileResps) + + return nil +} + +// getPatchedResumables returns a list of the given resumable objects that have been patched to be resumed. +// If the args slice is empty, it patches all resumable objects in the given namespace. +func (resume *resumeCommand) getPatchedResumables(ctx context.Context, args []string) ([]resumable, error) { + if len(args) < 1 { + objs, err := resume.patch(ctx, []client.ListOption{ + client.InNamespace(resume.namespace), + }) + if err != nil { + return nil, fmt.Errorf("failed patching objects: %w", err) + } + + return objs, nil + } + + var resumables []resumable + processed := make(map[string]struct{}, len(args)) + for _, arg := range args { + if _, has := processed[arg]; has { + continue // skip object that user might have provided more than once + } + processed[arg] = struct{}{} + + objs, err := resume.patch(ctx, []client.ListOption{ + client.InNamespace(resume.namespace), + client.MatchingFields{ + "metadata.name": arg, + }, + }) + if err != nil { + return nil, err + } + + resumables = append(resumables, objs...) + } + + return resumables, nil +} + +// Patches resumable objects by setting their status to unsuspended. +// Returns a slice of resumables that have been patched and any error encountered during patching. +func (resume resumeCommand) patch(ctx context.Context, listOpts []client.ListOption) ([]resumable, error) { + if err := resume.client.List(ctx, resume.list.asClientList(), listOpts...); err != nil { + return nil, err + } + if resume.list.len() == 0 { - logger.Failuref("no %s objects found in %s namespace", resume.kind, *kubeconfigArgs.Namespace) - return nil + logger.Failuref("no %s objects found in %s namespace", resume.kind, resume.namespace) + return nil, nil } + var resumables []resumable + for i := 0; i < resume.list.len(); i++ { - logger.Actionf("resuming %s %s in %s namespace", resume.humanKind, resume.list.resumeItem(i).asClientObject().GetName(), *kubeconfigArgs.Namespace) obj := resume.list.resumeItem(i) + logger.Actionf("resuming %s %s in %s namespace", resume.humanKind, obj.asClientObject().GetName(), resume.namespace) + patch := client.MergeFrom(obj.deepCopyClientObject()) obj.setUnsuspended() - if err := kubeClient.Patch(ctx, obj.asClientObject(), patch); err != nil { - return err + if err := resume.client.Patch(ctx, obj.asClientObject(), patch); err != nil { + return nil, err } + resumables = append(resumables, obj) + logger.Successf("%s resumed", resume.humanKind) + } + + return resumables, nil +} + +// Waits for resumable object to be reconciled and returns the object and any error encountered while waiting. +// Returns an empty reconcileResponse, if shouldReconcile is false. +func (resume resumeCommand) reconcile(ctx context.Context, res resumable) reconcileResponse { + if !resume.shouldReconcile { + return reconcileResponse{} + } - if resumeArgs.wait || !resumeArgs.all { - namespacedName := types.NamespacedName{ - Name: resume.list.resumeItem(i).asClientObject().GetName(), - Namespace: *kubeconfigArgs.Namespace, - } - - logger.Waitingf("waiting for %s reconciliation", resume.kind) - if err := wait.PollImmediate(rootArgs.pollInterval, rootArgs.timeout, - isReady(ctx, kubeClient, namespacedName, resume.list.resumeItem(i))); err != nil { - logger.Failuref(err.Error()) - continue - } - logger.Successf("%s reconciliation completed", resume.kind) - logger.Successf(resume.list.resumeItem(i).successMessage()) + namespacedName := types.NamespacedName{ + Name: res.asClientObject().GetName(), + Namespace: resume.namespace, + } + + logger.Waitingf("waiting for %s reconciliation", resume.kind) + + if err := wait.PollImmediate(rootArgs.pollInterval, rootArgs.timeout, + isReady(ctx, resume.client, namespacedName, res)); err != nil { + return reconcileResponse{ + resumable: res, + err: err, } } - return nil + return reconcileResponse{ + resumable: res, + err: nil, + } +} + +// Sorts the given reconcileResponses by resumable name and prints the success/error message for each response. +func (resume resumeCommand) printMessage(responses []reconcileResponse) { + sort.Slice(responses, func(i, j int) bool { + r1, r2 := responses[i], responses[j] + if r1.resumable == nil || r2.resumable == nil { + return false + } + return r1.asClientObject().GetName() <= r2.asClientObject().GetName() + }) + + // Print success/error message. + for _, r := range responses { + if r.resumable == nil { + continue + } + if r.err != nil { + logger.Failuref(r.err.Error()) + } + logger.Successf("%s %s reconciliation completed", resume.kind, r.asClientObject().GetName()) + logger.Successf(r.successMessage()) + } } diff --git a/cmd/flux/resume_alert.go b/cmd/flux/resume_alert.go index 5b86fb45..eee79658 100644 --- a/cmd/flux/resume_alert.go +++ b/cmd/flux/resume_alert.go @@ -32,7 +32,6 @@ finish the apply.`, ValidArgsFunction: resourceNamesCompletionFunc(notificationv1.GroupVersion.WithKind(notificationv1.AlertKind)), RunE: resumeCommand{ apiType: alertType, - object: alertAdapter{¬ificationv1.Alert{}}, list: &alertListAdapter{¬ificationv1.AlertList{}}, }.run, } diff --git a/cmd/flux/resume_helmrelease.go b/cmd/flux/resume_helmrelease.go index 0de4fb90..aadf7bd0 100644 --- a/cmd/flux/resume_helmrelease.go +++ b/cmd/flux/resume_helmrelease.go @@ -35,7 +35,6 @@ finish the apply.`, ValidArgsFunction: resourceNamesCompletionFunc(helmv2.GroupVersion.WithKind(helmv2.HelmReleaseKind)), RunE: resumeCommand{ apiType: helmReleaseType, - object: helmReleaseAdapter{&helmv2.HelmRelease{}}, list: helmReleaseListAdapter{&helmv2.HelmReleaseList{}}, }.run, } diff --git a/cmd/flux/resume_image_repository.go b/cmd/flux/resume_image_repository.go index a5e69c26..44bae7e0 100644 --- a/cmd/flux/resume_image_repository.go +++ b/cmd/flux/resume_image_repository.go @@ -31,7 +31,6 @@ var resumeImageRepositoryCmd = &cobra.Command{ ValidArgsFunction: resourceNamesCompletionFunc(imagev1.GroupVersion.WithKind(imagev1.ImageRepositoryKind)), RunE: resumeCommand{ apiType: imageRepositoryType, - object: imageRepositoryAdapter{&imagev1.ImageRepository{}}, list: imageRepositoryListAdapter{&imagev1.ImageRepositoryList{}}, }.run, } diff --git a/cmd/flux/resume_image_updateauto.go b/cmd/flux/resume_image_updateauto.go index 8cc40bfc..f24a4833 100644 --- a/cmd/flux/resume_image_updateauto.go +++ b/cmd/flux/resume_image_updateauto.go @@ -31,7 +31,6 @@ var resumeImageUpdateCmd = &cobra.Command{ ValidArgsFunction: resourceNamesCompletionFunc(autov1.GroupVersion.WithKind(autov1.ImageUpdateAutomationKind)), RunE: resumeCommand{ apiType: imageUpdateAutomationType, - object: imageUpdateAutomationAdapter{&autov1.ImageUpdateAutomation{}}, list: imageUpdateAutomationListAdapter{&autov1.ImageUpdateAutomationList{}}, }.run, } diff --git a/cmd/flux/resume_kustomization.go b/cmd/flux/resume_kustomization.go index fb8da244..a7cc07e2 100644 --- a/cmd/flux/resume_kustomization.go +++ b/cmd/flux/resume_kustomization.go @@ -35,7 +35,6 @@ finish the apply.`, ValidArgsFunction: resourceNamesCompletionFunc(kustomizev1.GroupVersion.WithKind(kustomizev1.KustomizationKind)), RunE: resumeCommand{ apiType: kustomizationType, - object: kustomizationAdapter{&kustomizev1.Kustomization{}}, list: kustomizationListAdapter{&kustomizev1.KustomizationList{}}, }.run, } diff --git a/cmd/flux/resume_receiver.go b/cmd/flux/resume_receiver.go index eef0d1e0..e8c3fefa 100644 --- a/cmd/flux/resume_receiver.go +++ b/cmd/flux/resume_receiver.go @@ -32,7 +32,6 @@ finish the apply.`, ValidArgsFunction: resourceNamesCompletionFunc(notificationv1.GroupVersion.WithKind(notificationv1.ReceiverKind)), RunE: resumeCommand{ apiType: receiverType, - object: receiverAdapter{¬ificationv1.Receiver{}}, list: receiverListAdapter{¬ificationv1.ReceiverList{}}, }.run, } diff --git a/cmd/flux/resume_source_bucket.go b/cmd/flux/resume_source_bucket.go index 4fd32bc2..51188cfe 100644 --- a/cmd/flux/resume_source_bucket.go +++ b/cmd/flux/resume_source_bucket.go @@ -31,7 +31,6 @@ var resumeSourceBucketCmd = &cobra.Command{ ValidArgsFunction: resourceNamesCompletionFunc(sourcev1.GroupVersion.WithKind(sourcev1.BucketKind)), RunE: resumeCommand{ apiType: bucketType, - object: bucketAdapter{&sourcev1.Bucket{}}, list: bucketListAdapter{&sourcev1.BucketList{}}, }.run, } diff --git a/cmd/flux/resume_source_chart.go b/cmd/flux/resume_source_chart.go index bbe895c1..2fe50f9d 100644 --- a/cmd/flux/resume_source_chart.go +++ b/cmd/flux/resume_source_chart.go @@ -33,7 +33,6 @@ var resumeSourceHelmChartCmd = &cobra.Command{ ValidArgsFunction: resourceNamesCompletionFunc(sourcev1.GroupVersion.WithKind(sourcev1.HelmChartKind)), RunE: resumeCommand{ apiType: helmChartType, - object: &helmChartAdapter{&sourcev1.HelmChart{}}, list: &helmChartListAdapter{&sourcev1.HelmChartList{}}, }.run, } diff --git a/cmd/flux/resume_source_git.go b/cmd/flux/resume_source_git.go index 00655285..6918eec0 100644 --- a/cmd/flux/resume_source_git.go +++ b/cmd/flux/resume_source_git.go @@ -31,7 +31,6 @@ var resumeSourceGitCmd = &cobra.Command{ ValidArgsFunction: resourceNamesCompletionFunc(sourcev1.GroupVersion.WithKind(sourcev1.GitRepositoryKind)), RunE: resumeCommand{ apiType: gitRepositoryType, - object: gitRepositoryAdapter{&sourcev1.GitRepository{}}, list: gitRepositoryListAdapter{&sourcev1.GitRepositoryList{}}, }.run, } diff --git a/cmd/flux/resume_source_helm.go b/cmd/flux/resume_source_helm.go index 6e80895f..65670fbc 100644 --- a/cmd/flux/resume_source_helm.go +++ b/cmd/flux/resume_source_helm.go @@ -31,7 +31,6 @@ var resumeSourceHelmCmd = &cobra.Command{ ValidArgsFunction: resourceNamesCompletionFunc(sourcev1.GroupVersion.WithKind(sourcev1.HelmRepositoryKind)), RunE: resumeCommand{ apiType: helmRepositoryType, - object: helmRepositoryAdapter{&sourcev1.HelmRepository{}}, list: helmRepositoryListAdapter{&sourcev1.HelmRepositoryList{}}, }.run, } diff --git a/cmd/flux/resume_source_oci.go b/cmd/flux/resume_source_oci.go index 3c121c47..979d30bd 100644 --- a/cmd/flux/resume_source_oci.go +++ b/cmd/flux/resume_source_oci.go @@ -31,7 +31,6 @@ var resumeSourceOCIRepositoryCmd = &cobra.Command{ ValidArgsFunction: resourceNamesCompletionFunc(sourcev1.GroupVersion.WithKind(sourcev1.OCIRepositoryKind)), RunE: resumeCommand{ apiType: ociRepositoryType, - object: ociRepositoryAdapter{&sourcev1.OCIRepository{}}, list: ociRepositoryListAdapter{&sourcev1.OCIRepositoryList{}}, }.run, } diff --git a/cmd/flux/suspend.go b/cmd/flux/suspend.go index a7abe356..e0023c7e 100644 --- a/cmd/flux/suspend.go +++ b/cmd/flux/suspend.go @@ -18,6 +18,7 @@ package main import ( "context" + "errors" "fmt" "github.com/spf13/cobra" @@ -75,22 +76,53 @@ func (suspend suspendCommand) run(cmd *cobra.Command, args []string) error { return err } - var listOpts []client.ListOption - listOpts = append(listOpts, client.InNamespace(*kubeconfigArgs.Namespace)) - if len(args) > 0 { - listOpts = append(listOpts, client.MatchingFields{ - "metadata.name": args[0], - }) + if len(args) < 1 && suspendArgs.all { + listOpts := []client.ListOption{ + client.InNamespace(*kubeconfigArgs.Namespace), + } + + if err := suspend.patch(ctx, kubeClient, listOpts); err != nil { + return err + } + + return nil } - err = kubeClient.List(ctx, suspend.list.asClientList(), listOpts...) - if err != nil { + processed := make(map[string]struct{}, len(args)) + for _, arg := range args { + if _, has := processed[arg]; has { + continue // skip object that user might have provided more than once + } + processed[arg] = struct{}{} + + listOpts := []client.ListOption{ + client.InNamespace(*kubeconfigArgs.Namespace), + client.MatchingFields{ + "metadata.name": arg, + }, + } + + if err := suspend.patch(ctx, kubeClient, listOpts); err != nil { + if err == ErrNoObjectsFound { + logger.Failuref("%s %s not found in %s namespace", suspend.kind, arg, *kubeconfigArgs.Namespace) + } else { + logger.Failuref("failed suspending %s %s in %s namespace: %s", suspend.kind, arg, *kubeconfigArgs.Namespace, err.Error()) + } + } + } + + return nil +} + +var ErrNoObjectsFound = errors.New("no objects found") + +func (suspend suspendCommand) patch(ctx context.Context, kubeClient client.WithWatch, listOpts []client.ListOption) error { + if err := kubeClient.List(ctx, suspend.list.asClientList(), listOpts...); err != nil { return err } if suspend.list.len() == 0 { - logger.Failuref("no %s objects found in %s namespace", suspend.kind, *kubeconfigArgs.Namespace) - return nil + return ErrNoObjectsFound } for i := 0; i < suspend.list.len(); i++ { @@ -102,8 +134,8 @@ func (suspend suspendCommand) run(cmd *cobra.Command, args []string) error { if err := kubeClient.Patch(ctx, obj.asClientObject(), patch); err != nil { return err } - logger.Successf("%s suspended", suspend.humanKind) + logger.Successf("%s suspended", suspend.humanKind) } return nil diff --git a/cmd/flux/testdata/helmrelease/resume_helmrelease_from_git.golden b/cmd/flux/testdata/helmrelease/resume_helmrelease_from_git.golden index 4369d16a..0ceaf0d4 100644 --- a/cmd/flux/testdata/helmrelease/resume_helmrelease_from_git.golden +++ b/cmd/flux/testdata/helmrelease/resume_helmrelease_from_git.golden @@ -1,5 +1,5 @@ ► resuming helmrelease thrfg in {{ .ns }} namespace ✔ helmrelease resumed ◎ waiting for HelmRelease reconciliation -✔ HelmRelease reconciliation completed +✔ HelmRelease thrfg reconciliation completed ✔ applied revision 6.3.5 diff --git a/cmd/flux/testdata/kustomization/resume_kustomization_from_git.golden b/cmd/flux/testdata/kustomization/resume_kustomization_from_git.golden index 93d8a012..f8492110 100644 --- a/cmd/flux/testdata/kustomization/resume_kustomization_from_git.golden +++ b/cmd/flux/testdata/kustomization/resume_kustomization_from_git.golden @@ -1,5 +1,5 @@ ► resuming kustomization tkfg in {{ .ns }} namespace ✔ kustomization resumed ◎ waiting for Kustomization reconciliation -✔ Kustomization reconciliation completed +✔ Kustomization tkfg reconciliation completed ✔ applied revision 6.3.5@sha1:67e2c98a60dc92283531412a9e604dd4bae005a9 diff --git a/cmd/flux/testdata/kustomization/resume_kustomization_from_git_multiple_args.golden b/cmd/flux/testdata/kustomization/resume_kustomization_from_git_multiple_args.golden new file mode 100644 index 00000000..318f29f2 --- /dev/null +++ b/cmd/flux/testdata/kustomization/resume_kustomization_from_git_multiple_args.golden @@ -0,0 +1,2 @@ +► resuming kustomization tkfg in {{ .ns }} namespace +✔ kustomization resumed diff --git a/cmd/flux/testdata/kustomization/resume_kustomization_from_git_multiple_args_wait.golden b/cmd/flux/testdata/kustomization/resume_kustomization_from_git_multiple_args_wait.golden new file mode 100644 index 00000000..e0775140 --- /dev/null +++ b/cmd/flux/testdata/kustomization/resume_kustomization_from_git_multiple_args_wait.golden @@ -0,0 +1,6 @@ +► resuming kustomization tkfg in {{ .ns }} namespace +✔ kustomization resumed +✗ no Kustomization objects found in {{ .ns }} namespace +◎ waiting for Kustomization reconciliation +✔ Kustomization tkfg reconciliation completed +✔ applied revision 6.3.5@sha1:67e2c98a60dc92283531412a9e604dd4bae005a9 diff --git a/cmd/flux/testdata/kustomization/suspend_kustomization_from_git_multiple_args.golden b/cmd/flux/testdata/kustomization/suspend_kustomization_from_git_multiple_args.golden new file mode 100644 index 00000000..42abd122 --- /dev/null +++ b/cmd/flux/testdata/kustomization/suspend_kustomization_from_git_multiple_args.golden @@ -0,0 +1,4 @@ +► suspending kustomization tkfg in {{ .ns }} namespace +✔ kustomization suspended +✗ Kustomization foo not found in {{ .ns }} namespace +✗ Kustomization bar not found in {{ .ns }} namespace diff --git a/cmd/flux/testdata/oci/resume_oci.golden b/cmd/flux/testdata/oci/resume_oci.golden index 00e628d5..34a0deba 100644 --- a/cmd/flux/testdata/oci/resume_oci.golden +++ b/cmd/flux/testdata/oci/resume_oci.golden @@ -1,5 +1,5 @@ ► resuming source oci thrfg in {{ .ns }} namespace ✔ source oci resumed ◎ waiting for OCIRepository reconciliation -✔ OCIRepository reconciliation completed +✔ OCIRepository thrfg reconciliation completed ✔ fetched revision 6.3.5@sha256:6c959c51ccbb952e5fe4737563338a0aaf975675dcf812912cf09e5463181871 From 3580d4ff85d7e4f97fd84c7a07d0ee026b3bf8ff Mon Sep 17 00:00:00 2001 From: Rishikesh Nair Date: Thu, 29 Jun 2023 12:50:38 +0530 Subject: [PATCH 555/818] Add examples for resuming/suspending multiple objects Signed-off-by: Rishikesh Nair --- cmd/flux/resume_alert.go | 5 ++++- cmd/flux/resume_helmrelease.go | 5 ++++- cmd/flux/resume_image_repository.go | 5 ++++- cmd/flux/resume_image_updateauto.go | 5 ++++- cmd/flux/resume_kustomization.go | 5 ++++- cmd/flux/resume_receiver.go | 5 ++++- cmd/flux/resume_source_bucket.go | 5 ++++- cmd/flux/resume_source_chart.go | 5 ++++- cmd/flux/resume_source_git.go | 5 ++++- cmd/flux/resume_source_helm.go | 5 ++++- cmd/flux/resume_source_oci.go | 5 ++++- cmd/flux/suspend_alert.go | 5 ++++- cmd/flux/suspend_helmrelease.go | 5 ++++- cmd/flux/suspend_image_repository.go | 5 ++++- cmd/flux/suspend_image_updateauto.go | 5 ++++- cmd/flux/suspend_kustomization.go | 5 ++++- cmd/flux/suspend_receiver.go | 5 ++++- cmd/flux/suspend_source_bucket.go | 5 ++++- cmd/flux/suspend_source_chart.go | 5 ++++- cmd/flux/suspend_source_git.go | 5 ++++- cmd/flux/suspend_source_helm.go | 5 ++++- cmd/flux/suspend_source_oci.go | 5 ++++- 22 files changed, 88 insertions(+), 22 deletions(-) diff --git a/cmd/flux/resume_alert.go b/cmd/flux/resume_alert.go index eee79658..713aebb3 100644 --- a/cmd/flux/resume_alert.go +++ b/cmd/flux/resume_alert.go @@ -28,7 +28,10 @@ var resumeAlertCmd = &cobra.Command{ Long: `The resume command marks a previously suspended Alert resource for reconciliation and waits for it to finish the apply.`, Example: ` # Resume reconciliation for an existing Alert - flux resume alert main`, + flux resume alert main + + # Resume reconciliation for multiple Alerts + flux resume alert main-1 main-2`, ValidArgsFunction: resourceNamesCompletionFunc(notificationv1.GroupVersion.WithKind(notificationv1.AlertKind)), RunE: resumeCommand{ apiType: alertType, diff --git a/cmd/flux/resume_helmrelease.go b/cmd/flux/resume_helmrelease.go index aadf7bd0..b058d273 100644 --- a/cmd/flux/resume_helmrelease.go +++ b/cmd/flux/resume_helmrelease.go @@ -31,7 +31,10 @@ var resumeHrCmd = &cobra.Command{ Long: `The resume command marks a previously suspended HelmRelease resource for reconciliation and waits for it to finish the apply.`, Example: ` # Resume reconciliation for an existing Helm release - flux resume hr podinfo`, + flux resume hr podinfo + + # Resume reconciliation for multiple Helm releases + flux resume hr podinfo-1 podinfo-2`, ValidArgsFunction: resourceNamesCompletionFunc(helmv2.GroupVersion.WithKind(helmv2.HelmReleaseKind)), RunE: resumeCommand{ apiType: helmReleaseType, diff --git a/cmd/flux/resume_image_repository.go b/cmd/flux/resume_image_repository.go index 44bae7e0..a9ab36cd 100644 --- a/cmd/flux/resume_image_repository.go +++ b/cmd/flux/resume_image_repository.go @@ -27,7 +27,10 @@ var resumeImageRepositoryCmd = &cobra.Command{ Short: "Resume a suspended ImageRepository", Long: `The resume command marks a previously suspended ImageRepository resource for reconciliation and waits for it to finish.`, Example: ` # Resume reconciliation for an existing ImageRepository - flux resume image repository alpine`, + flux resume image repository alpine + + # Resume reconciliation for multiple ImageRepositories + flux resume image repository alpine-1 alpine-2`, ValidArgsFunction: resourceNamesCompletionFunc(imagev1.GroupVersion.WithKind(imagev1.ImageRepositoryKind)), RunE: resumeCommand{ apiType: imageRepositoryType, diff --git a/cmd/flux/resume_image_updateauto.go b/cmd/flux/resume_image_updateauto.go index f24a4833..d50fddf7 100644 --- a/cmd/flux/resume_image_updateauto.go +++ b/cmd/flux/resume_image_updateauto.go @@ -27,7 +27,10 @@ var resumeImageUpdateCmd = &cobra.Command{ Short: "Resume a suspended ImageUpdateAutomation", Long: `The resume command marks a previously suspended ImageUpdateAutomation resource for reconciliation and waits for it to finish.`, Example: ` # Resume reconciliation for an existing ImageUpdateAutomation - flux resume image update latest-images`, + flux resume image update latest-images + + # Resume reconciliation for multiple ImageUpdateAutomations + flux resume image update latest-images-1 latest-images-2`, ValidArgsFunction: resourceNamesCompletionFunc(autov1.GroupVersion.WithKind(autov1.ImageUpdateAutomationKind)), RunE: resumeCommand{ apiType: imageUpdateAutomationType, diff --git a/cmd/flux/resume_kustomization.go b/cmd/flux/resume_kustomization.go index a7cc07e2..a03aed62 100644 --- a/cmd/flux/resume_kustomization.go +++ b/cmd/flux/resume_kustomization.go @@ -31,7 +31,10 @@ var resumeKsCmd = &cobra.Command{ Long: `The resume command marks a previously suspended Kustomization resource for reconciliation and waits for it to finish the apply.`, Example: ` # Resume reconciliation for an existing Kustomization - flux resume ks podinfo`, + flux resume ks podinfo + + # Resume reconciliation for multiple Kustomizations + flux resume ks podinfo-1 podinfo-2`, ValidArgsFunction: resourceNamesCompletionFunc(kustomizev1.GroupVersion.WithKind(kustomizev1.KustomizationKind)), RunE: resumeCommand{ apiType: kustomizationType, diff --git a/cmd/flux/resume_receiver.go b/cmd/flux/resume_receiver.go index e8c3fefa..c99bd755 100644 --- a/cmd/flux/resume_receiver.go +++ b/cmd/flux/resume_receiver.go @@ -28,7 +28,10 @@ var resumeReceiverCmd = &cobra.Command{ Long: `The resume command marks a previously suspended Receiver resource for reconciliation and waits for it to finish the apply.`, Example: ` # Resume reconciliation for an existing Receiver - flux resume receiver main`, + flux resume receiver main + + # Resume reconciliation for multiple Receivers + flux resume receiver main-1 main-2`, ValidArgsFunction: resourceNamesCompletionFunc(notificationv1.GroupVersion.WithKind(notificationv1.ReceiverKind)), RunE: resumeCommand{ apiType: receiverType, diff --git a/cmd/flux/resume_source_bucket.go b/cmd/flux/resume_source_bucket.go index 51188cfe..ea1fe37d 100644 --- a/cmd/flux/resume_source_bucket.go +++ b/cmd/flux/resume_source_bucket.go @@ -27,7 +27,10 @@ var resumeSourceBucketCmd = &cobra.Command{ Short: "Resume a suspended Bucket", Long: `The resume command marks a previously suspended Bucket resource for reconciliation and waits for it to finish.`, Example: ` # Resume reconciliation for an existing Bucket - flux resume source bucket podinfo`, + flux resume source bucket podinfo + + # Resume reconciliation for multiple Buckets + flux resume source bucket podinfo-1 podinfo-2`, ValidArgsFunction: resourceNamesCompletionFunc(sourcev1.GroupVersion.WithKind(sourcev1.BucketKind)), RunE: resumeCommand{ apiType: bucketType, diff --git a/cmd/flux/resume_source_chart.go b/cmd/flux/resume_source_chart.go index 2fe50f9d..6322f06f 100644 --- a/cmd/flux/resume_source_chart.go +++ b/cmd/flux/resume_source_chart.go @@ -29,7 +29,10 @@ var resumeSourceHelmChartCmd = &cobra.Command{ Short: "Resume a suspended HelmChart", Long: `The resume command marks a previously suspended HelmChart resource for reconciliation and waits for it to finish.`, Example: ` # Resume reconciliation for an existing HelmChart - flux resume source chart podinfo`, + flux resume source chart podinfo + + # Resume reconciliation for multiple HelmCharts + flux resume source chart podinfo-1 podinfo-2`, ValidArgsFunction: resourceNamesCompletionFunc(sourcev1.GroupVersion.WithKind(sourcev1.HelmChartKind)), RunE: resumeCommand{ apiType: helmChartType, diff --git a/cmd/flux/resume_source_git.go b/cmd/flux/resume_source_git.go index 6918eec0..751714a4 100644 --- a/cmd/flux/resume_source_git.go +++ b/cmd/flux/resume_source_git.go @@ -27,7 +27,10 @@ var resumeSourceGitCmd = &cobra.Command{ Short: "Resume a suspended GitRepository", Long: `The resume command marks a previously suspended GitRepository resource for reconciliation and waits for it to finish.`, Example: ` # Resume reconciliation for an existing GitRepository - flux resume source git podinfo`, + flux resume source git podinfo + + # Resume reconciliation for multiple GitRepositories + flux resume source git podinfo-1 podinfo-2`, ValidArgsFunction: resourceNamesCompletionFunc(sourcev1.GroupVersion.WithKind(sourcev1.GitRepositoryKind)), RunE: resumeCommand{ apiType: gitRepositoryType, diff --git a/cmd/flux/resume_source_helm.go b/cmd/flux/resume_source_helm.go index 65670fbc..0ac641eb 100644 --- a/cmd/flux/resume_source_helm.go +++ b/cmd/flux/resume_source_helm.go @@ -27,7 +27,10 @@ var resumeSourceHelmCmd = &cobra.Command{ Short: "Resume a suspended HelmRepository", Long: `The resume command marks a previously suspended HelmRepository resource for reconciliation and waits for it to finish.`, Example: ` # Resume reconciliation for an existing HelmRepository - flux resume source helm bitnami`, + flux resume source helm bitnami + + # Resume reconciliation for multiple HelmRepositories + flux resume source helm bitnami-1 bitnami-2`, ValidArgsFunction: resourceNamesCompletionFunc(sourcev1.GroupVersion.WithKind(sourcev1.HelmRepositoryKind)), RunE: resumeCommand{ apiType: helmRepositoryType, diff --git a/cmd/flux/resume_source_oci.go b/cmd/flux/resume_source_oci.go index 979d30bd..04b20a4b 100644 --- a/cmd/flux/resume_source_oci.go +++ b/cmd/flux/resume_source_oci.go @@ -27,7 +27,10 @@ var resumeSourceOCIRepositoryCmd = &cobra.Command{ Short: "Resume a suspended OCIRepository", Long: `The resume command marks a previously suspended OCIRepository resource for reconciliation and waits for it to finish.`, Example: ` # Resume reconciliation for an existing OCIRepository - flux resume source oci podinfo`, + flux resume source oci podinfo + + # Resume reconciliation for multiple OCIRepositories + flux resume source oci podinfo-1 podinfo-2`, ValidArgsFunction: resourceNamesCompletionFunc(sourcev1.GroupVersion.WithKind(sourcev1.OCIRepositoryKind)), RunE: resumeCommand{ apiType: ociRepositoryType, diff --git a/cmd/flux/suspend_alert.go b/cmd/flux/suspend_alert.go index 63231018..17cdd801 100644 --- a/cmd/flux/suspend_alert.go +++ b/cmd/flux/suspend_alert.go @@ -27,7 +27,10 @@ var suspendAlertCmd = &cobra.Command{ Short: "Suspend reconciliation of Alert", Long: `The suspend command disables the reconciliation of a Alert resource.`, Example: ` # Suspend reconciliation for an existing Alert - flux suspend alert main`, + flux suspend alert main + + # Suspend reconciliation for multiple Alerts + flux suspend alert main-1 main-2`, ValidArgsFunction: resourceNamesCompletionFunc(notificationv1.GroupVersion.WithKind(notificationv1.AlertKind)), RunE: suspendCommand{ apiType: alertType, diff --git a/cmd/flux/suspend_helmrelease.go b/cmd/flux/suspend_helmrelease.go index 9e2fccca..5872c8b4 100644 --- a/cmd/flux/suspend_helmrelease.go +++ b/cmd/flux/suspend_helmrelease.go @@ -28,7 +28,10 @@ var suspendHrCmd = &cobra.Command{ Short: "Suspend reconciliation of HelmRelease", Long: `The suspend command disables the reconciliation of a HelmRelease resource.`, Example: ` # Suspend reconciliation for an existing Helm release - flux suspend hr podinfo`, + flux suspend hr podinfo + + # Suspend reconciliation for multiple Helm releases + flux suspend hr podinfo-1 podinfo-2 `, ValidArgsFunction: resourceNamesCompletionFunc(helmv2.GroupVersion.WithKind(helmv2.HelmReleaseKind)), RunE: suspendCommand{ apiType: helmReleaseType, diff --git a/cmd/flux/suspend_image_repository.go b/cmd/flux/suspend_image_repository.go index 47288c35..c6e562d1 100644 --- a/cmd/flux/suspend_image_repository.go +++ b/cmd/flux/suspend_image_repository.go @@ -27,7 +27,10 @@ var suspendImageRepositoryCmd = &cobra.Command{ Short: "Suspend reconciliation of an ImageRepository", Long: `The suspend image repository command disables the reconciliation of a ImageRepository resource.`, Example: ` # Suspend reconciliation for an existing ImageRepository - flux suspend image repository alpine`, + flux suspend image repository alpine + + # Suspend reconciliation for multiple ImageRepositories + flux suspend image repository alpine-1 alpine-2`, ValidArgsFunction: resourceNamesCompletionFunc(imagev1.GroupVersion.WithKind(imagev1.ImageRepositoryKind)), RunE: suspendCommand{ apiType: imageRepositoryType, diff --git a/cmd/flux/suspend_image_updateauto.go b/cmd/flux/suspend_image_updateauto.go index c198171e..1c8f11ef 100644 --- a/cmd/flux/suspend_image_updateauto.go +++ b/cmd/flux/suspend_image_updateauto.go @@ -27,7 +27,10 @@ var suspendImageUpdateCmd = &cobra.Command{ Short: "Suspend reconciliation of an ImageUpdateAutomation", Long: `The suspend image update command disables the reconciliation of a ImageUpdateAutomation resource.`, Example: ` # Suspend reconciliation for an existing ImageUpdateAutomation - flux suspend image update latest-images`, + flux suspend image update latest-images + + # Suspend reconciliation for multiple ImageUpdateAutomations + flux suspend image update latest-images-1 latest-images-2`, ValidArgsFunction: resourceNamesCompletionFunc(autov1.GroupVersion.WithKind(autov1.ImageUpdateAutomationKind)), RunE: suspendCommand{ apiType: imageUpdateAutomationType, diff --git a/cmd/flux/suspend_kustomization.go b/cmd/flux/suspend_kustomization.go index d9d77e8c..ac6c72e1 100644 --- a/cmd/flux/suspend_kustomization.go +++ b/cmd/flux/suspend_kustomization.go @@ -28,7 +28,10 @@ var suspendKsCmd = &cobra.Command{ Short: "Suspend reconciliation of Kustomization", Long: `The suspend command disables the reconciliation of a Kustomization resource.`, Example: ` # Suspend reconciliation for an existing Kustomization - flux suspend ks podinfo`, + flux suspend ks podinfo + + # Suspend reconciliation for multiple Kustomizations + flux suspend ks podinfo-1 podinfo-2`, ValidArgsFunction: resourceNamesCompletionFunc(kustomizev1.GroupVersion.WithKind(kustomizev1.KustomizationKind)), RunE: suspendCommand{ apiType: kustomizationType, diff --git a/cmd/flux/suspend_receiver.go b/cmd/flux/suspend_receiver.go index e0110be1..7f2e6dd7 100644 --- a/cmd/flux/suspend_receiver.go +++ b/cmd/flux/suspend_receiver.go @@ -27,7 +27,10 @@ var suspendReceiverCmd = &cobra.Command{ Short: "Suspend reconciliation of Receiver", Long: `The suspend command disables the reconciliation of a Receiver resource.`, Example: ` # Suspend reconciliation for an existing Receiver - flux suspend receiver main`, + flux suspend receiver main + + # Suspend reconciliation for multiple Receivers + flux suspend receiver main-1 main-2`, ValidArgsFunction: resourceNamesCompletionFunc(notificationv1.GroupVersion.WithKind(notificationv1.ReceiverKind)), RunE: suspendCommand{ apiType: receiverType, diff --git a/cmd/flux/suspend_source_bucket.go b/cmd/flux/suspend_source_bucket.go index e38d5d47..7fdcfced 100644 --- a/cmd/flux/suspend_source_bucket.go +++ b/cmd/flux/suspend_source_bucket.go @@ -27,7 +27,10 @@ var suspendSourceBucketCmd = &cobra.Command{ Short: "Suspend reconciliation of a Bucket", Long: `The suspend command disables the reconciliation of a Bucket resource.`, Example: ` # Suspend reconciliation for an existing Bucket - flux suspend source bucket podinfo`, + flux suspend source bucket podinfo + + # Suspend reconciliation for multiple Buckets + flux suspend source bucket podinfo-1 podinfo-2`, ValidArgsFunction: resourceNamesCompletionFunc(sourcev1.GroupVersion.WithKind(sourcev1.BucketKind)), RunE: suspendCommand{ apiType: bucketType, diff --git a/cmd/flux/suspend_source_chart.go b/cmd/flux/suspend_source_chart.go index e99defcb..e91327e8 100644 --- a/cmd/flux/suspend_source_chart.go +++ b/cmd/flux/suspend_source_chart.go @@ -27,7 +27,10 @@ var suspendSourceHelmChartCmd = &cobra.Command{ Short: "Suspend reconciliation of a HelmChart", Long: `The suspend command disables the reconciliation of a HelmChart resource.`, Example: ` # Suspend reconciliation for an existing HelmChart - flux suspend source chart podinfo`, + flux suspend source chart podinfo + + # Suspend reconciliation for multiple HelmCharts + flux suspend source chart podinfo-1 podinfo-2`, ValidArgsFunction: resourceNamesCompletionFunc(sourcev1.GroupVersion.WithKind(sourcev1.HelmChartKind)), RunE: suspendCommand{ apiType: helmChartType, diff --git a/cmd/flux/suspend_source_git.go b/cmd/flux/suspend_source_git.go index bb1281fd..4decf796 100644 --- a/cmd/flux/suspend_source_git.go +++ b/cmd/flux/suspend_source_git.go @@ -27,7 +27,10 @@ var suspendSourceGitCmd = &cobra.Command{ Short: "Suspend reconciliation of a GitRepository", Long: `The suspend command disables the reconciliation of a GitRepository resource.`, Example: ` # Suspend reconciliation for an existing GitRepository - flux suspend source git podinfo`, + flux suspend source git podinfo + + # Suspend reconciliation for multiple GitRepositories + flux suspend source git podinfo-1 podinfo-2`, ValidArgsFunction: resourceNamesCompletionFunc(sourcev1.GroupVersion.WithKind(sourcev1.GitRepositoryKind)), RunE: suspendCommand{ apiType: gitRepositoryType, diff --git a/cmd/flux/suspend_source_helm.go b/cmd/flux/suspend_source_helm.go index 6d49040d..22598c64 100644 --- a/cmd/flux/suspend_source_helm.go +++ b/cmd/flux/suspend_source_helm.go @@ -27,7 +27,10 @@ var suspendSourceHelmCmd = &cobra.Command{ Short: "Suspend reconciliation of a HelmRepository", Long: `The suspend command disables the reconciliation of a HelmRepository resource.`, Example: ` # Suspend reconciliation for an existing HelmRepository - flux suspend source helm bitnami`, + flux suspend source helm bitnami + + # Suspend reconciliation for multiple HelmRepositories + flux suspend source helm bitnami-1 bitnami-2 `, ValidArgsFunction: resourceNamesCompletionFunc(sourcev1.GroupVersion.WithKind(sourcev1.HelmRepositoryKind)), RunE: suspendCommand{ apiType: helmRepositoryType, diff --git a/cmd/flux/suspend_source_oci.go b/cmd/flux/suspend_source_oci.go index 10dd6fff..3b8e36d6 100644 --- a/cmd/flux/suspend_source_oci.go +++ b/cmd/flux/suspend_source_oci.go @@ -27,7 +27,10 @@ var suspendSourceOCIRepositoryCmd = &cobra.Command{ Short: "Suspend reconciliation of an OCIRepository", Long: `The suspend command disables the reconciliation of an OCIRepository resource.`, Example: ` # Suspend reconciliation for an existing OCIRepository - flux suspend source oci podinfo`, + flux suspend source oci podinfo + + # Suspend reconciliation for multiple OCIRepositories + flux suspend source oci podinfo-1 podinfo-2`, ValidArgsFunction: resourceNamesCompletionFunc(sourcev1.GroupVersion.WithKind(sourcev1.OCIRepositoryKind)), RunE: suspendCommand{ apiType: ociRepositoryType, From d8924cd8a93679080af29127fea1a3538edf47e4 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Fri, 30 Jun 2023 16:55:54 +0300 Subject: [PATCH 556/818] Add backport GitHub Action workflow Signed-off-by: Stefan Prodan --- .github/workflows/backport.yaml | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 .github/workflows/backport.yaml diff --git a/.github/workflows/backport.yaml b/.github/workflows/backport.yaml new file mode 100644 index 00000000..55c1fd1d --- /dev/null +++ b/.github/workflows/backport.yaml @@ -0,0 +1,32 @@ +name: backport + +on: + pull_request_target: + types: [closed, labeled] + +permissions: + contents: read + +jobs: + pull-request: + runs-on: ubuntu-latest + permissions: + contents: write + pull-requests: write + if: github.event.pull_request.state == 'closed' && github.event.pull_request.merged && (github.event_name != 'labeled' || startsWith('backport:', github.event.label.name)) + steps: + - name: Checkout + uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 + with: + ref: ${{ github.event.pull_request.head.sha }} + - name: Create backport PRs + uses: korthout/backport-action@bf5fdd624b35f95d5b85991a728bd5744e8c6cf2 # v1.3.1 + # xref: https://github.com/korthout/backport-action#inputs + with: + # Match labels with a pattern `backport:` + label_pattern: '^backport:([^ ]+)$' + # A bit shorter pull-request title than the default + pull_title: '[${target_branch}] ${pull_title}' + # Simpler PR description than default + pull_description: |- + Automated backport to `${target_branch}`, triggered by a label in #${pull_number}. From d2cc01169b1b4cc068e6e28f9fb0a992f93c268d Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Fri, 30 Jun 2023 16:57:02 +0300 Subject: [PATCH 557/818] Declaratively define (and sync) labels Signed-off-by: Stefan Prodan --- .github/dependabot.yml | 4 +-- .github/labels.yaml | 49 ++++++++++++++++++++++++++++++ .github/workflows/sync-labels.yaml | 28 +++++++++++++++++ 3 files changed, 79 insertions(+), 2 deletions(-) create mode 100644 .github/labels.yaml create mode 100644 .github/workflows/sync-labels.yaml diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 6e4be739..9e16176a 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -3,7 +3,7 @@ version: 2 updates: - package-ecosystem: "github-actions" directory: "/" - labels: ["area/build"] + labels: ["area/ci", "dependencies"] schedule: - # by default this will be on a monday. + # By default, this will be on a monday. interval: "weekly" diff --git a/.github/labels.yaml b/.github/labels.yaml new file mode 100644 index 00000000..c83f0bd9 --- /dev/null +++ b/.github/labels.yaml @@ -0,0 +1,49 @@ +# Configuration file to declaratively configure labels +# Ref: https://github.com/EndBug/label-sync#Config-files + +- name: area/bootstrap + description: Bootstrap related issues and pull requests + color: '#86efc9' +- name: area/install + description: Install and uninstall related issues and pull requests + color: '#86efc9' +- name: area/diff + description: Diff related issues and pull requests + color: '#BA4192' +- name: area/bucket + description: Bucket related issues and pull requests + color: '#00b140' +- name: area/git + description: Git related issues and pull requests + color: '#863faf' +- name: area/oci + description: OCI related issues and pull requests + color: '#c739ff' +- name: area/kustomization + description: Kustomization related issues and pull requests + color: '#00e54d' +- name: area/helm + description: Helm related issues and pull requests + color: '#1673b6' +- name: area/image-automation + description: Automated image updates related issues and pull requests + color: '#c5def5' +- name: area/monitoring + description: Monitoring related issues and pull requests + color: '#dd75ae' +- name: area/multi-tenancy + description: Multi-tenancy related issues and pull requests + color: '#72CDBD' +- name: area/notification + description: Notification API related issues and pull requests + color: '#434ec1' +- name: area/source + description: Source API related issues and pull requests + color: '#863faf' +- name: area/rfc + description: Feature request proposals in the RFC format + color: '#D621C3' + aliases: ['area/RFC'] +- name: backport:release/v2.0.x + description: To be backported to release/v2.0.x + color: '#ffd700' diff --git a/.github/workflows/sync-labels.yaml b/.github/workflows/sync-labels.yaml new file mode 100644 index 00000000..f0688a42 --- /dev/null +++ b/.github/workflows/sync-labels.yaml @@ -0,0 +1,28 @@ +name: sync-labels +on: + workflow_dispatch: + push: + branches: + - main + paths: + - .github/labels.yaml + +permissions: + contents: read + +jobs: + labels: + name: Run sync + runs-on: ubuntu-latest + permissions: + issues: write + steps: + - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 + - uses: EndBug/label-sync@da00f2c11fdb78e4fae44adac2fdd713778ea3e8 # v2.3.2 + with: + # Configuration file + config-file: | + https://raw.githubusercontent.com/fluxcd/community/main/.github/standard-labels.yaml + .github/labels.yaml + # Strictly declarative + delete-other-labels: true From 02b34f05c8a3668b264b78ab4e25ed0cadc98b41 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 30 Jun 2023 14:29:43 +0000 Subject: [PATCH 558/818] build(deps): bump sigstore/cosign-installer from 3.1.0 to 3.1.1 Bumps [sigstore/cosign-installer](https://github.com/sigstore/cosign-installer) from 3.1.0 to 3.1.1. - [Release notes](https://github.com/sigstore/cosign-installer/releases) - [Commits](https://github.com/sigstore/cosign-installer/compare/d13028333d784fcc802b67ec924bcebe75aa0a5f...6e04d228eb30da1757ee4e1dd75a0ec73a653e06) --- updated-dependencies: - dependency-name: sigstore/cosign-installer dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/release.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 56a923b1..aef073a8 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -36,7 +36,7 @@ jobs: - name: Setup Syft uses: anchore/sbom-action/download-syft@78fc58e266e87a38d4194b2137a3d4e9bcaf7ca1 # v0.14.3 - name: Setup Cosign - uses: sigstore/cosign-installer@d13028333d784fcc802b67ec924bcebe75aa0a5f # v3.1.0 + uses: sigstore/cosign-installer@6e04d228eb30da1757ee4e1dd75a0ec73a653e06 # v3.1.1 - name: Setup Kustomize uses: fluxcd/pkg/actions/kustomize@main - name: Login to GitHub Container Registry @@ -155,7 +155,7 @@ jobs: --path="./flux-system" \ --source=${{ github.repositoryUrl }} \ --revision="${{ github.ref_name }}@sha1:${{ github.sha }}" - - uses: sigstore/cosign-installer@d13028333d784fcc802b67ec924bcebe75aa0a5f # v3.1.0 + - uses: sigstore/cosign-installer@6e04d228eb30da1757ee4e1dd75a0ec73a653e06 # v3.1.1 - name: Sign manifests env: COSIGN_EXPERIMENTAL: 1 From b4efd15afdf1ffc21273aa3c84c88173c2a76fdb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 30 Jun 2023 14:47:48 +0000 Subject: [PATCH 559/818] build(deps): bump docker/setup-buildx-action from 2.7.0 to 2.8.0 Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 2.7.0 to 2.8.0. - [Release notes](https://github.com/docker/setup-buildx-action/releases) - [Commits](https://github.com/docker/setup-buildx-action/compare/ecf95283f03858871ff00b787d79c419715afc34...16c0bc4a6e6ada2cfd8afd41d22d95379cf7c32a) --- updated-dependencies: - dependency-name: docker/setup-buildx-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/release.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index aef073a8..005b8551 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -32,7 +32,7 @@ jobs: uses: docker/setup-qemu-action@2b82ce82d56a2a04d2637cd93a637ae1b359c0a7 # v2.2.0 - name: Setup Docker Buildx id: buildx - uses: docker/setup-buildx-action@ecf95283f03858871ff00b787d79c419715afc34 # v2.7.0 + uses: docker/setup-buildx-action@16c0bc4a6e6ada2cfd8afd41d22d95379cf7c32a # v2.8.0 - name: Setup Syft uses: anchore/sbom-action/download-syft@78fc58e266e87a38d4194b2137a3d4e9bcaf7ca1 # v0.14.3 - name: Setup Cosign From 68fdc0a2b6161ed59c0ebd8f425b1c6fd4350cfa Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Mon, 3 Jul 2023 12:55:59 +0200 Subject: [PATCH 560/818] Update go-git to unreleased v5.8.0 To improve support for Git >=v2.41.0. Signed-off-by: Hidde Beydals --- go.mod | 3 +++ go.sum | 4 ++-- tests/azure/go.mod | 3 +++ tests/azure/go.sum | 4 ++-- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/go.mod b/go.mod index d054be0a..8ffd6328 100644 --- a/go.mod +++ b/go.mod @@ -2,6 +2,9 @@ module github.com/fluxcd/flux2/v2 go 1.20 +// Replace go-git to unreleased v5.8.0 to improve support for Git v2.41+. +replace github.com/go-git/go-git/v5 => github.com/go-git/go-git/v5 v5.7.1-0.20230702134234-dd4e2b7f4b01 + require ( github.com/Masterminds/semver/v3 v3.2.1 github.com/ProtonMail/go-crypto v0.0.0-20230528122434-6f98819771a1 diff --git a/go.sum b/go.sum index 05201806..2251cd53 100644 --- a/go.sum +++ b/go.sum @@ -202,8 +202,8 @@ github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmS github.com/go-git/go-billy/v5 v5.4.1 h1:Uwp5tDRkPr+l/TnbHOQzp+tmJfLceOlbVucgpTz8ix4= github.com/go-git/go-billy/v5 v5.4.1/go.mod h1:vjbugF6Fz7JIflbVpl1hJsGjSHNltrSw45YK/ukIvQg= github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20230305113008-0c11038e723f h1:Pz0DHeFij3XFhoBRGUDPzSJ+w2UcK5/0JvF8DRI58r8= -github.com/go-git/go-git/v5 v5.7.0 h1:t9AudWVLmqzlo+4bqdf7GY+46SUuRsx59SboFxkq2aE= -github.com/go-git/go-git/v5 v5.7.0/go.mod h1:coJHKEOk5kUClpsNlXrUvPrDxY3w3gjHvhcZd8Fodw8= +github.com/go-git/go-git/v5 v5.7.1-0.20230702134234-dd4e2b7f4b01 h1:+yTyIn80JO1XGuLjgnUwnJDFpRw5dOVk6Yv5dAzi5dI= +github.com/go-git/go-git/v5 v5.7.1-0.20230702134234-dd4e2b7f4b01/go.mod h1:coJHKEOk5kUClpsNlXrUvPrDxY3w3gjHvhcZd8Fodw8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= diff --git a/tests/azure/go.mod b/tests/azure/go.mod index 322ad589..2fb9b9f7 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -2,6 +2,9 @@ module github.com/fluxcd/flux2/tests/azure go 1.20 +// Replace go-git to unreleased v5.8.0 to improve support for Git v2.41+. +replace github.com/go-git/go-git/v5 => github.com/go-git/go-git/v5 v5.7.1-0.20230702134234-dd4e2b7f4b01 + require ( github.com/Azure/azure-event-hubs-go/v3 v3.6.0 github.com/fluxcd/helm-controller/api v0.34.1 diff --git a/tests/azure/go.sum b/tests/azure/go.sum index 5f5abc47..4ba31418 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -124,8 +124,8 @@ github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmS github.com/go-git/go-billy/v5 v5.4.1 h1:Uwp5tDRkPr+l/TnbHOQzp+tmJfLceOlbVucgpTz8ix4= github.com/go-git/go-billy/v5 v5.4.1/go.mod h1:vjbugF6Fz7JIflbVpl1hJsGjSHNltrSw45YK/ukIvQg= github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20230305113008-0c11038e723f h1:Pz0DHeFij3XFhoBRGUDPzSJ+w2UcK5/0JvF8DRI58r8= -github.com/go-git/go-git/v5 v5.7.0 h1:t9AudWVLmqzlo+4bqdf7GY+46SUuRsx59SboFxkq2aE= -github.com/go-git/go-git/v5 v5.7.0/go.mod h1:coJHKEOk5kUClpsNlXrUvPrDxY3w3gjHvhcZd8Fodw8= +github.com/go-git/go-git/v5 v5.7.1-0.20230702134234-dd4e2b7f4b01 h1:+yTyIn80JO1XGuLjgnUwnJDFpRw5dOVk6Yv5dAzi5dI= +github.com/go-git/go-git/v5 v5.7.1-0.20230702134234-dd4e2b7f4b01/go.mod h1:coJHKEOk5kUClpsNlXrUvPrDxY3w3gjHvhcZd8Fodw8= github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= From ce854236cf281e353a2f9515a59e6504e5e4869d Mon Sep 17 00:00:00 2001 From: Max Jonas Werner Date: Mon, 3 Jul 2023 13:38:55 +0200 Subject: [PATCH 561/818] Annotate errors from go-git-providers closes #3623 Signed-off-by: Max Jonas Werner --- pkg/bootstrap/bootstrap_provider.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/bootstrap/bootstrap_provider.go b/pkg/bootstrap/bootstrap_provider.go index 672f3f11..d736f2f7 100644 --- a/pkg/bootstrap/bootstrap_provider.go +++ b/pkg/bootstrap/bootstrap_provider.go @@ -343,7 +343,7 @@ func (b *GitProviderBootstrapper) reconcileOrgRepository(ctx context.Context) (g repo, err := b.provider.OrgRepositories().Get(ctx, repoRef) if err != nil { if !errors.Is(err, gitprovider.ErrNotFound) { - return nil, fmt.Errorf("failed to get Git repository %q: %w", repoRef.String(), err) + return nil, fmt.Errorf("failed to get Git repository %q: provider error: %w", repoRef.String(), err) } // go-git-providers has at present some issues with the idempotency // of the available Reconcile methods, and setting e.g. the default @@ -416,7 +416,7 @@ func (b *GitProviderBootstrapper) reconcileUserRepository(ctx context.Context) ( repo, err := b.provider.UserRepositories().Get(ctx, repoRef) if err != nil { if !errors.Is(err, gitprovider.ErrNotFound) { - return nil, fmt.Errorf("failed to get Git repository %q: %w", repoRef.String(), err) + return nil, fmt.Errorf("failed to get Git repository %q: provider error: %w", repoRef.String(), err) } // go-git-providers has at present some issues with the idempotency // of the available Reconcile methods, and setting e.g. the default From a4d7e35cddab6350fce067bad959cf1878f51ba2 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Tue, 25 Oct 2022 14:52:33 +0300 Subject: [PATCH 562/818] Cleanup internal docs Signed-off-by: Stefan Prodan --- README.md | 2 +- docs/_files/gitops-toolkit.png | Bin 62459 -> 0 bytes docs/_redirects | 18 ----- docs/internal/diagrams.md | 83 -------------------- docs/internal/release.md | 139 --------------------------------- 5 files changed, 1 insertion(+), 241 deletions(-) delete mode 100644 docs/_files/gitops-toolkit.png delete mode 100644 docs/_redirects delete mode 100644 docs/internal/diagrams.md delete mode 100644 docs/internal/release.md diff --git a/README.md b/README.md index f0256ebb..b19f9b3f 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ runtime for Flux v2. The APIs comprise Kubernetes custom resources, which can be created and updated by a cluster user, or by other automation tooling. -![overview](docs/_files/gitops-toolkit.png) +![overview](https://fluxcd.io/img/diagrams/gitops-toolkit.png) You can use the toolkit to extend Flux, or to build your own systems for continuous delivery -- see [the developer diff --git a/docs/_files/gitops-toolkit.png b/docs/_files/gitops-toolkit.png deleted file mode 100644 index cc5447b6060c3efe81dfd44171aea608f56c0303..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62459 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
repository - participant sc as Flux

source-controller - participant kc as Flux

kustomize-controller - participant kube as Kubernetes

api-server - participant nc as Flux

notification-controller - me->>git: 1. git push - sc->>git: 2. git pull - sc->>sc: 3. build artifact for revision - sc->>kube: 4. update status for revision - sc-->>nc: 5. emit events - kube->>kc: 6. notify about new revision - kc->>sc: 7. fetch artifact for revision - kc->>kc: 8. build manifests to objects - kc-->>kc: 9. decrypt secrets - kc->>kube: 10. validate objects - kc->>kube: 11. apply objects - kc-->>kube: 12. delete objects - kc-->>kube: 13. wait for readiness - kc->>kube: 14. update status for revision - kc-->>nc: 15. emit events - nc-->>me: 16. send alerts for revision -``` - -## Helm release upgrade from Git - -```mermaid -sequenceDiagram - actor me - participant git as Git

repository - participant sc as Flux

source-controller - participant hc as Flux

helm-controller - participant kube as Kubernetes

api-server - participant nc as Flux

notification-controller - me->>git: 1. git push - sc->>git: 2. git pull - sc->>sc: 3. build chart for revision - sc->>kube: 4. update chart status - sc-->>nc: 5. emit events - kube->>hc: 6. notify about new revision - hc->>sc: 7. fetch chart - hc->>kube: 8. get values - hc->>hc: 9. render and customize manifests - hc-->>kube: 10. apply CRDs - hc->>kube: 11. upgrade release - hc-->>kube: 12. run tests - hc-->>kube: 13. wait for readiness - hc->>kube: 14. update status - hc-->>nc: 15. emit events - nc-->>me: 16. send alerts -``` - -## Image update to Git - -```mermaid -sequenceDiagram - actor me - participant oci as Image

repository - participant irc as Flux

image-reflector-controller - participant iac as Flux

image-automation-controller - participant kube as Kubernetes

api-server - participant nc as Flux

notification-controller - participant git as Git

repository - me->>oci: 1. docker push - irc->>oci: 2. list tags - irc->>irc: 3. match tags to policies - irc->>kube: 4. update status - irc-->>nc: 5. emit events - kube->>iac: 6. notify about new tags - iac->>git: 7. git clone - iac->>iac: 8. patch manifests with new tags - iac->>git: 9. git push - iac->>kube: 10. update status - iac-->>nc: 11. emit events - nc-->>me: 12. send alerts -``` - diff --git a/docs/internal/release.md b/docs/internal/release.md deleted file mode 100644 index 6fa08f03..00000000 --- a/docs/internal/release.md +++ /dev/null @@ -1,139 +0,0 @@ -# Flux release procedure - -The Flux Go modules and the GitOps Toolkit controllers are released by following the [semver](https://semver.org) conventions. - -Repositories subject to semver releases: - -1. [fluxcd/pkg](https://github.com/fluxcd/pkg) - - modules: `apis/meta`, `runtime`, various utilities - - dependencies: `k8s.io/*`, `sigs.k8s.io/controller-runtime` -1. [fluxcd/source-controller](https://github.com/fluxcd/source-controller) - - modules: `api` - - dependencies: `github.com/fluxcd/pkg/*` -1. [fluxcd/kustomize-controller](https://github.com/fluxcd/kustomize-controller) - - modules: `api` - - dependencies: `github.com/fluxcd/source-controller/api`, `github.com/fluxcd/pkg/*` -1. [fluxcd/helm-controller](https://github.com/fluxcd/helm-controller) - - modules: `api` - - dependencies: `github.com/fluxcd/source-controller/api`, `github.com/fluxcd/pkg/*` -1. [fluxcd/image-reflector-controller](https://github.com/fluxcd/image-reflector-controller) - - modules: `api` - - dependencies: `github.com/fluxcd/pkg/*` -1. [fluxcd/image-automation-controller](https://github.com/fluxcd/image-automation-controller) - - modules: `api` - - dependencies: `github.com/fluxcd/source-controller/api`, `github.com/fluxcd/image-reflector-controller/api`, `github.com/fluxcd/pkg/*` -1. [fluxcd/notification-controller](https://github.com/fluxcd/notification-controller) - - modules: `api` - - dependencies: `github.com/fluxcd/pkg/*` -1. [fluxcd/flux2](https://github.com/fluxcd/flux2) - - modules: `manifestgen` - - dependencies: `github.com/fluxcd/source-controller/api`, `github.com/fluxcd/kustomize-controller/api`, `github.com/fluxcd/helm-controller/api`, `github.com/fluxcd/image-reflector-controller/api`, `github.com/fluxcd/image-automation-controller/api`, `github.com/fluxcd/notification-controller/api`, `github.com/fluxcd/pkg/*` -1. [fluxcd/terraform-provider-flux](https://github.com/fluxcd/terraform-provider-flux) - - dependencies: `github.com/fluxcd/flux2/pkg/manifestgen` - -## Release procedure - -### Go packages - -The Go packages in [fluxcd/pkg](https://github.com/fluxcd/pkg) are dedicated modules, -each module has its own set of dependencies and release cycle. - -Release procedure for a package: - -1. Checkout the `main` branch and pull changes from remote. -1. Run `make release- VER=`. - -### Controllers - -A toolkit controller has a dedicated module for its API, the API module -has its own set of dependencies. - -Release procedure for a controller and its API: - -1. Checkout the `main` branch and pull changes from remote. -1. Create a `api/` tag and push it to remote. -1. Create a new branch from `main` i.e. `release-`. This - will function as your release preparation branch. -1. Update the `github.com/fluxcd/-controller/api` version in `go.mod` -1. Add an entry to the `CHANGELOG.md` for the new release and change the - `newTag` value in ` config/manager/kustomization.yaml` to that of the - semver release you are going to make. Commit and push your changes. -1. Create a PR for your release branch and get it merged into `main`. -1. Create a `` tag for the merge commit in `main` and - push it to remote. -1. Confirm CI builds and releases the newly tagged version. - -### Flux - -Release procedure for Flux: - -1. Checkout the `main` branch and pull changes from remote. -1. Create a `` tag form `main` and push it to remote. -1. Confirm CI builds and releases the newly tagged version. - -## Upgrade Kubernetes modules - -Flux has the following Kubernetes dependencies: - -- `k8s.io/api` -- `k8s.io/apiextensions-apiserver` -- `k8s.io/apimachinery` -- `k8s.io/cli-runtime` -- `k8s.io/client-go` -- `sigs.k8s.io/controller-runtime` - -**Note** that all `k8s.io/*` packages must have the same version in `go.mod` e.g.: - -``` - k8s.io/api v0.20.2 - k8s.io/apiextensions-apiserver v0.20.2 - k8s.io/apimachinery v0.20.2 - k8s.io/cli-runtime v0.20.2 - k8s.io/client-go v0.20.2 -``` - -The specialised reconcilers depend on: - -- kustomize-controller: `sigs.k8s.io/kustomize/api` -- image-automation-controller: `sigs.k8s.io/kustomize/kyaml` -- helm-controller: `helm.sh/helm/v3` - -**Note** that the `k8s.io/*` version must be compatible with both `kustomize/api` and `helm/v3`. -If there is a breaking change in `client-go` we have to wait for Kustomize and Helm to upgrade first. - -### Upgrade procedure: - -`fluxcd/pkg`: - -1. Update the `k8s.io/*` version in `pkg/apis/meta/go.mod` -1. Release the `apis/meta` package -1. Update `apis/meta` version in `pkg/runtime/go.mod` -1. Update the `k8s.io/*` version in `pkg/runtime/go.mod` -1. Update `sigs.k8s.io/controller-runtime` version in `pkg/runtime/go.mod` -1. Release the `runtime` package - -`fluxcd/source-controller`: - -1. Update the `github.com/fluxcd/pkg/apis/meta` version in `source-controller/api/go.mod` and `source-controller/go.mod` -1. Update the `k8s.io/*` version in `source-controller/api/go.mod` and `source-controller/go.mod` -1. Update the `sigs.k8s.io/controller-runtime` version in `source-controller/api/go.mod` and `source-controller/go.mod` -1. Update the `github.com/fluxcd/pkg/runtime` version in `source-controller/go.mod` -1. Release the `api` package - -`fluxcd/-controller`: - -1. Update the `github.com/fluxcd/source-controller/api` version in `-controller/api/go.mod` and `-controller/go.mod` -1. Update the `github.com/fluxcd/pkg/apis/meta` version in `-controller/api/go.mod` and `-controller/go.mod` -1. Update the `k8s.io/*` version in `-controller/api/go.mod` and `-controller/go.mod` -1. Update the `github.com/fluxcd/pkg/runtime` version in `-controller/go.mod` -1. Release the `api` package - -`fluxcd/flux2`: - -1. Update the `github.com/fluxcd/*-controller/api` version in `flux2/go.mod` (automated with [GitHub Actions](../../.github/workflows/update.yaml)) -1. Update the `github.com/fluxcd/pkg/*` version in `flux2/go.mod` -1. Update the `k8s.io/*` and `github.com/fluxcd/pkg/runtime` version in `flux2/go.mod` - -`fluxcd/terraform-provider-flux`: - -1. Update the `github.com/fluxcd/flux2` version in `terraform-provider-flux/go.mod` (automated with [GitHub Actions](https://github.com/fluxcd/terraform-provider-flux/blob/main/.github/workflows/update.yaml)) From f09616e780ad85196653dbe471818fec4178519e Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Tue, 25 Oct 2022 14:53:04 +0300 Subject: [PATCH 563/818] Add shared packages release spec Signed-off-by: Stefan Prodan --- docs/README.md | 17 ++------ docs/release/pkg.md | 99 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 102 insertions(+), 14 deletions(-) create mode 100644 docs/release/pkg.md diff --git a/docs/README.md b/docs/README.md index 5b1ab70e..472c337b 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,17 +1,6 @@ -# Flux v2 Documentation +# Flux Development Documentation -The documentation for `flux2` has moved to this repository: . +## Release Engineering -[The Website's README](https://github.com/fluxcd/website/#readme) has information on how to +- [Shared packages release specifications](release/pkg.md) -- modify and extend documentation -- run the site locally -- publish changes - -and where all the individual pieces of content come from. - -It will be easier for us to maintain a coherent web presences (and merge all of Flux documentation) in one central repository. This was partly discussed in . - -## toolkit.fluxcd.io - -For historical reasons we are keeping a `_redirects` file in this directory. It defines how redirects from the old site `toolkit.fluxcd.io` to our new website work. Changes to this file need to be merged and a manual build triggered in the Netlify App. diff --git a/docs/release/pkg.md b/docs/release/pkg.md new file mode 100644 index 00000000..6a6d005e --- /dev/null +++ b/docs/release/pkg.md @@ -0,0 +1,99 @@ +# Flux shared packages release spec + +The Go packages in [github.com/fluxcd/pkg](https://github.com/fluxcd/pkg) are dedicated Go modules, +each module has its own set of dependencies and release cycle. + +These packages are primary meant for internal use in Flux controllers and +for projects which integrate and/or extend Flux. + +## Release versioning + +The Flux packages are released by following the +[Go module version numbering](https://go.dev/doc/modules/version-numbers) conventions: + +- `NAME/vX.Y.Z-RC.W` release candidates e.g. `runtime/v1.0.0-RC.1` +- `NAME/vX.Y.Z` stable releases e.g. `runtime/v1.0.0` + +To import or update a Flux package in a Go project: + +```shell +go get github.com/fluxcd/pkg/runtime@v1.0.0 +``` + +### Release candidates + +Release candidates are intended for testing new features or improvements. + +In most cases, a maintainer will cut a release candidate of a package to include it +in a Flux controller release candidate. + +Release candidates are not meant to be included in Flux stable releases. +Before cutting a stable release of a controller, all imported Flux packages must be pinned to a stable version. + +### Patch releases + +Patch releases are intended for critical bug fixes to the latest minor version, such as addressing security +vulnerabilities or fixes to severe problems with no workaround. + +Patch releases should not contain breaking changes, feature additions or any type of improvements. + +Patch releases should be used when updating dependencies such as `k8s.io/api` from one patch version to another. + +### Minor releases + +Minor releases are intended for backwards compatible feature additions and improvements. + +Minor releases should be used when updating dependencies such as `k8s.io/api` from one minor version to another. + +Given that Kubernetes does not follow semver, a Kubernetes package minor version bump may introduce breaking changes. +If a Kubernetes update requires a breaking change in a Flux package public API, then a major version release is necessary. + +### Major releases + +Major releases are intended for backwards incompatible feature additions and improvements. + +Any change to a package public API, such as a change to a Go function signature, requires a new major release. + +## Supported releases + +For Flux Go packages we only support the latest stable release. We expect for projects that depend on +Flux packages to stay up-to-date by automating the Go modules updates with tools like Dependabot. + +In effect, this means we'll not backport CVE fixes to an older minor or major version of a package. + +## Deprecation policy + +A Flux Go package can be deprecated at any time. Usually a deprecated package may be replaced a +different one, but there are no guarantees to always have a suitable replacement. + +A deprecated package is marked as so in its `go.mod` e.g. + +```go +// Deprecated: use github.com/fluxcd/pkg/tar instead. +module github.com/fluxcd/pkg/untar +``` + +## Release procedure + +As a project maintainer, to release a package, tag the `main` branch using semver, +and push the signed tag to upstream: + +```shell +git clone https://github.com/fluxcd/pkg.git +git switch main +git tag -s -m "runtime/v1.0.0" "runtime/v1.0.0" +git push origin "runtime/v1.0.0" +``` + +**Note** that the Git tags must be cryptographically signed with your private key +and your public key must be uploaded to GitHub. + +Release candidates of a specific package can be cut from the `main` branch or from an `dev-` branch: + +```shell +git switch dev-runtime +git tag -s -m "runtime/v1.1.0-RC.1" "runtime/v1.1.0-RC.1" +git push origin "runtime/v1.1.0-RC.1" +``` + +Before cutting a release candidate, make sure the tests are passing on the `dev` branch. From 41ba55634a24ed446a0f664ad2c4d109103dde5a Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Tue, 25 Oct 2022 18:21:59 +0300 Subject: [PATCH 564/818] Add controller release spec Signed-off-by: Stefan Prodan --- docs/README.md | 2 +- docs/release/controllers.md | 122 ++++++++++++++++++++++++++++++++++++ 2 files changed, 123 insertions(+), 1 deletion(-) create mode 100644 docs/release/controllers.md diff --git a/docs/README.md b/docs/README.md index 472c337b..f16c4016 100644 --- a/docs/README.md +++ b/docs/README.md @@ -3,4 +3,4 @@ ## Release Engineering - [Shared packages release specifications](release/pkg.md) - +- [Controllers release specifications](release/controllers.md) diff --git a/docs/release/controllers.md b/docs/release/controllers.md new file mode 100644 index 00000000..d3e20119 --- /dev/null +++ b/docs/release/controllers.md @@ -0,0 +1,122 @@ +# Flux controllers release spec + +The Flux controllers are +[Kubernetes operators](https://kubernetes.io/docs/concepts/extend-kubernetes/operator/), +each controller has its own Git repository and release cycle. + +Controller repositories and their interdependencies: + +1. [fluxcd/source-controller](https://github.com/fluxcd/source-controller) + - dependencies: `github.com/fluxcd/pkg/runtime` +2. [fluxcd/kustomize-controller](https://github.com/fluxcd/kustomize-controller) + - dependencies: `github.com/fluxcd/source-controller/api`, `github.com/fluxcd/pkg/runtime` +3. [fluxcd/helm-controller](https://github.com/fluxcd/helm-controller) + - dependencies: `github.com/fluxcd/source-controller/api`, `github.com/fluxcd/pkg/runtime` +4. [fluxcd/notification-controller](https://github.com/fluxcd/notification-controller) + - dependencies: `github.com/fluxcd/pkg/runtime` +5. [fluxcd/image-reflector-controller](https://github.com/fluxcd/image-reflector-controller) + - dependencies: `github.com/fluxcd/pkg/runtime` +6. [fluxcd/image-automation-controller](https://github.com/fluxcd/image-automation-controller) + - dependencies: `github.com/fluxcd/source-controller/api`, `github.com/fluxcd/image-reflector-controller/api`, `github.com/fluxcd/pkg/runtime` + +## Release versioning + +The Flux controllers and their API packages are released by following the +[Go module version numbering](https://go.dev/doc/modules/version-numbers) conventions: + +- `vX.Y.Z-RC.W` release candidates e.g. `v1.0.0-RC.1` +- `vX.Y.Z` stable releases e.g. `v1.0.0` + +To import or update a controller API package in a Go project: + +```shell +go get github.com/fluxcd/source-controller/api@v1.0.0 +``` + +To pull a controller container image: + +```shell +docker pull ghcr.io/fluxcd/source-controller:v1.0.0 +``` + +A Flux controller's Kubernetes Custom Resource Definitions follow the +[Kubernetes API versioning](https://kubernetes.io/docs/reference/using-api/#api-versioning) scheme: + +- `v1apha1` experimental API +- `v1beta1` release candidate (supported while v1 is not released) +- `v1` stable release (supported) + +### Release candidates + +Release candidates are intended for testing new features or improvements before a final release. + +In most cases, a maintainer will publish a release candidate of a controller for Flux users +to tests it on their staging clusters. Release candidates are not meant to be deployed in production +unless advised to do so by a maintainer. + +### Patch releases + +Patch releases are intended for critical bug fixes to the latest minor version, such as addressing security +vulnerabilities or fixes to severe problems with no workaround. + +Patch releases do not contain breaking changes, feature additions or any type of user-facing changes. +If a CVE fix requires a breaking change, then a minor release will provide the fix. + +We expect users to be running the latest patch release of a given minor release as soon as the +controller release is included in a Flux patch release. + +### Minor releases + +Minor releases are intended for backwards compatible feature additions and improvements. +Note that breaking changes may occur if required by a security vulnerability fix. + +Minor releases are used when updating Kubernetes dependencies such as `k8s.io/api` from one minor version to another. + +In effect, this means a minor version will be released for all Flux controllers approximately every three months +after each Kubernetes minor version release. + +To properly validate the controllers against the latest Kubernetes version, we reserve a time window of at least +two weeks for Flux controllers end-to-end testing. + +### Major releases + +Major releases are intended for drastic changes in the controller behaviour or security stance. + +A controller major release will be announced ahead of time throughout all communication channels, +and a support window of one year will be provided for the previous major version. + +## Release Cadence + +Flux controllers follow Kubernetes three releases per year cadence. After each Kubernetes minor release, +all controllers are tested against the latest Kubernetes version and are released at approximately two +weeks after Kubernetes. The newly released controllers offer support for Kubernetes N-2 minor versions. + +A Flux controller may have more than three minor releases per year, if maintainers decide to ship a +new feature or optimisation ahead of schedule. + +## Supported releases + +For Flux controllers we support the last three minor releases. + +Security fixes, may be backported to those three minor versions as patch releases, +depending on severity and feasibility. + +## Release procedure + +As a project maintainer, to release a controller and its API: + +1. Checkout the `main` branch and pull changes from remote. +2. Create a `api/` tag and push it to remote. +3. Create a new branch from `main` i.e. `release-`. This + will function as your release preparation branch. +4. Update the `github.com/fluxcd/-controller/api` version in `go.mod` +5. Add an entry to the `CHANGELOG.md` for the new release and change the + `newTag` value in ` config/manager/kustomization.yaml` to that of the + semver release you are going to make. Commit and push your changes. +6. Create a PR for your release branch and get it merged into `main`. +7. Create a `` tag for the merge commit in `main` and + push it to remote. +8. Confirm CI builds and releases the newly tagged version. + +**Note** that the Git tags must be cryptographically signed with your private key +and your public key must be uploaded to GitHub. From ea06d9614fcaadfe08083b5796850d66df00631c Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 26 Oct 2022 01:16:49 +0300 Subject: [PATCH 565/818] Add API versioning spec Signed-off-by: Stefan Prodan --- docs/release/controllers.md | 78 ++++++++++++++++++++++++++++--------- 1 file changed, 60 insertions(+), 18 deletions(-) diff --git a/docs/release/controllers.md b/docs/release/controllers.md index d3e20119..16820d93 100644 --- a/docs/release/controllers.md +++ b/docs/release/controllers.md @@ -7,44 +7,86 @@ each controller has its own Git repository and release cycle. Controller repositories and their interdependencies: 1. [fluxcd/source-controller](https://github.com/fluxcd/source-controller) - - dependencies: `github.com/fluxcd/pkg/runtime` -2. [fluxcd/kustomize-controller](https://github.com/fluxcd/kustomize-controller) - - dependencies: `github.com/fluxcd/source-controller/api`, `github.com/fluxcd/pkg/runtime` -3. [fluxcd/helm-controller](https://github.com/fluxcd/helm-controller) - - dependencies: `github.com/fluxcd/source-controller/api`, `github.com/fluxcd/pkg/runtime` +2. [fluxcd/kustomize-controller](https://github.com/fluxcd/kustomize-controller) (imports `fluxcd/source-controller/api`) +3. [fluxcd/helm-controller](https://github.com/fluxcd/helm-controller) (imports `fluxcd/source-controller/api`) 4. [fluxcd/notification-controller](https://github.com/fluxcd/notification-controller) - - dependencies: `github.com/fluxcd/pkg/runtime` 5. [fluxcd/image-reflector-controller](https://github.com/fluxcd/image-reflector-controller) - - dependencies: `github.com/fluxcd/pkg/runtime` -6. [fluxcd/image-automation-controller](https://github.com/fluxcd/image-automation-controller) - - dependencies: `github.com/fluxcd/source-controller/api`, `github.com/fluxcd/image-reflector-controller/api`, `github.com/fluxcd/pkg/runtime` +6. [fluxcd/image-automation-controller](https://github.com/fluxcd/image-automation-controller) (imports `fluxcd/source-controller/api` and `fluxcd/image-reflector-controller/api`) -## Release versioning +The API versioning and controller versioning are indirectly related. For example, +a source-controller minor release `v1.1.0` can introduce a new API version +`v1beta1` for a Kind `XRepository` in the `source.toolkit.fluxcd.io` group. -The Flux controllers and their API packages are released by following the +## API versioning + +The Flux APIs (Kubernetes CRDs) follow the +[Kubernetes API versioning](https://kubernetes.io/docs/reference/using-api/#api-versioning) scheme. + +### Alpha version + +An alpha version API e.g. `v1alpha1` is considered experiment and should be used on +test environments only. + +The schema of objects may change in incompatible ways in a later controller release. +The custom resources may require editing and re-creating after a CRD update. + +An alpha API is introduced after it reaches the `implementable` phase in the +[Flux RFC process](https://github.com/fluxcd/flux2/tree/main/rfcs). +We encourage users to try out the alpha APIs and provide feedback which is extremely +valuable during early stages of development. + +### Beta version + +A beta version API e.g. `v2beta1` is considered well tested and safe to be used. + +The schema of objects may change in incompatible ways in a subsequent beta or stable API version. +The custom resources may require editing after a CRD update for which migration instructions will be +provided as part of the controller changelog. + +A beta version API becomes deprecated once a subsequent beta or stable API version is released. +A deprecated beta version is subject to removal after a six months period. + +### Stable version + +A stable version API e.g. `v2` is considered feature complete. + +Any changes to the object schema do not require editing or re-creating of custom resources. +Schema fields can't be removed, only new fields can be added with a default value that +doesn't affect the controller's current behaviour. + +A stable version API becomes deprecated once a subsequent stable version is released. +Stable API versions are not subject to removal in any future release of a controller major version. + +In effect, this means that for as long as Flux `v2` is being maintained, all the stable API versions +will be supported. + +## Controller versioning + +The Flux controllers and their Go API packages are released by following the [Go module version numbering](https://go.dev/doc/modules/version-numbers) conventions: - `vX.Y.Z-RC.W` release candidates e.g. `v1.0.0-RC.1` - `vX.Y.Z` stable releases e.g. `v1.0.0` +The release artifacts can be accessed based on the controller name and version. + To import or update a controller API package in a Go project: ```shell -go get github.com/fluxcd/source-controller/api@v1.0.0 +go get github.com/fluxcd//api@ ``` To pull a controller container image: ```shell -docker pull ghcr.io/fluxcd/source-controller:v1.0.0 +docker pull ghcr.io/fluxcd/: ``` -A Flux controller's Kubernetes Custom Resource Definitions follow the -[Kubernetes API versioning](https://kubernetes.io/docs/reference/using-api/#api-versioning) scheme: +To download a controller's Kubernetes Custom resource definitions: -- `v1apha1` experimental API -- `v1beta1` release candidate (supported while v1 is not released) -- `v1` stable release (supported) +```shell +curl -sL https://github.com/fluxcd//releases/download//.crds.yaml +``` ### Release candidates From 590b7b7682dd10187ba2dd15fc2c0a76b99bc0db Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 26 Oct 2022 01:47:44 +0300 Subject: [PATCH 566/818] Add controller release artifacts spec Signed-off-by: Stefan Prodan --- docs/README.md | 2 +- docs/release/controllers.md | 76 ++++++++++++++++------------ docs/release/{pkg.md => packages.md} | 0 3 files changed, 46 insertions(+), 32 deletions(-) rename docs/release/{pkg.md => packages.md} (100%) diff --git a/docs/README.md b/docs/README.md index f16c4016..66c1fba9 100644 --- a/docs/README.md +++ b/docs/README.md @@ -2,5 +2,5 @@ ## Release Engineering -- [Shared packages release specifications](release/pkg.md) +- [Shared packages release specifications](release/packages.md) - [Controllers release specifications](release/controllers.md) diff --git a/docs/release/controllers.md b/docs/release/controllers.md index 16820d93..a47427ed 100644 --- a/docs/release/controllers.md +++ b/docs/release/controllers.md @@ -13,10 +13,6 @@ Controller repositories and their interdependencies: 5. [fluxcd/image-reflector-controller](https://github.com/fluxcd/image-reflector-controller) 6. [fluxcd/image-automation-controller](https://github.com/fluxcd/image-automation-controller) (imports `fluxcd/source-controller/api` and `fluxcd/image-reflector-controller/api`) -The API versioning and controller versioning are indirectly related. For example, -a source-controller minor release `v1.1.0` can introduce a new API version -`v1beta1` for a Kind `XRepository` in the `source.toolkit.fluxcd.io` group. - ## API versioning The Flux APIs (Kubernetes CRDs) follow the @@ -30,7 +26,10 @@ test environments only. The schema of objects may change in incompatible ways in a later controller release. The custom resources may require editing and re-creating after a CRD update. -An alpha API is introduced after it reaches the `implementable` phase in the +An alpha version API becomes deprecated once a subsequent alpha or beta API version is released. +A deprecated alpha version is subject to removal after a three months period. + +An alpha API is introduced when its proposal reaches the `implementable` phase in the [Flux RFC process](https://github.com/fluxcd/flux2/tree/main/rfcs). We encourage users to try out the alpha APIs and provide feedback which is extremely valuable during early stages of development. @@ -68,25 +67,9 @@ The Flux controllers and their Go API packages are released by following the - `vX.Y.Z-RC.W` release candidates e.g. `v1.0.0-RC.1` - `vX.Y.Z` stable releases e.g. `v1.0.0` -The release artifacts can be accessed based on the controller name and version. - -To import or update a controller API package in a Go project: - -```shell -go get github.com/fluxcd//api@ -``` - -To pull a controller container image: - -```shell -docker pull ghcr.io/fluxcd/: -``` - -To download a controller's Kubernetes Custom resource definitions: - -```shell -curl -sL https://github.com/fluxcd//releases/download//.crds.yaml -``` +The API versioning and controller versioning are indirectly related. For example, +a source-controller minor release `v1.1.0` can introduce a new API version +`v1beta1` for a Kind `XRepository` in the `source.toolkit.fluxcd.io` group. ### Release candidates @@ -114,11 +97,9 @@ Note that breaking changes may occur if required by a security vulnerability fix Minor releases are used when updating Kubernetes dependencies such as `k8s.io/api` from one minor version to another. -In effect, this means a minor version will be released for all Flux controllers approximately every three months -after each Kubernetes minor version release. - -To properly validate the controllers against the latest Kubernetes version, we reserve a time window of at least -two weeks for Flux controllers end-to-end testing. +In effect, this means a minor version will be released for all Flux controllers approximately every four months +after each Kubernetes minor version release. To properly validate the controllers against the latest Kubernetes version, +we reserve a time window of at least two weeks for Flux controllers end-to-end testing. ### Major releases @@ -127,7 +108,7 @@ Major releases are intended for drastic changes in the controller behaviour or s A controller major release will be announced ahead of time throughout all communication channels, and a support window of one year will be provided for the previous major version. -## Release Cadence +## Release cadence Flux controllers follow Kubernetes three releases per year cadence. After each Kubernetes minor release, all controllers are tested against the latest Kubernetes version and are released at approximately two @@ -143,7 +124,40 @@ For Flux controllers we support the last three minor releases. Security fixes, may be backported to those three minor versions as patch releases, depending on severity and feasibility. -## Release procedure +## Release artifacts + +Each controller release produces the following artifacts: + +- Source code (GitHub Releases page) +- Software Bill of Materials in SPDX format (GitHub Releases page) +- Kubernetes manifests such as CRDs and Deployments (GitHub Releases page) +- Signed checksums of source code, SBOM and manifests (GitHub Releases page) +- Multi-arch container images (GitHub Container Registry and DockerHub) + +All the artifacts are cryptographically signed and can be verified with Cosign. + +The release artifacts can be accessed based on the controller name and version. + +To import or update a controller's API package in a Go project: + +```shell +go get github.com/fluxcd//api@ +``` + +To verify and pull a controller's container image: + +```shell +cosign verify ghcr.io/fluxcd/: +docker pull ghcr.io/fluxcd/: +``` + +To download a controller's Kubernetes Custom resource definitions: + +```shell +curl -sL https://github.com/fluxcd//releases/download//.crds.yaml +``` + +## Controller release procedure As a project maintainer, to release a controller and its API: diff --git a/docs/release/pkg.md b/docs/release/packages.md similarity index 100% rename from docs/release/pkg.md rename to docs/release/packages.md From 29ad52bb46f117a70b752137401927e48e8d3ed6 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 26 Oct 2022 10:15:37 +0300 Subject: [PATCH 567/818] Add Flux release spec Signed-off-by: Stefan Prodan --- docs/README.md | 6 -- docs/release/README.md | 7 ++ docs/release/controllers.md | 37 ++++---- docs/release/flux.md | 173 ++++++++++++++++++++++++++++++++++++ docs/release/packages.md | 6 +- 5 files changed, 203 insertions(+), 26 deletions(-) delete mode 100644 docs/README.md create mode 100644 docs/release/README.md create mode 100644 docs/release/flux.md diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index 66c1fba9..00000000 --- a/docs/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# Flux Development Documentation - -## Release Engineering - -- [Shared packages release specifications](release/packages.md) -- [Controllers release specifications](release/controllers.md) diff --git a/docs/release/README.md b/docs/release/README.md new file mode 100644 index 00000000..3920353a --- /dev/null +++ b/docs/release/README.md @@ -0,0 +1,7 @@ +# Flux Release Documentation + +## Release specifications + +- [Flux distribution](flux.md) +- [Flux APIs and controllers](controllers.md) +- [Flux shared libraries](packages.md) diff --git a/docs/release/controllers.md b/docs/release/controllers.md index a47427ed..68d9321c 100644 --- a/docs/release/controllers.md +++ b/docs/release/controllers.md @@ -20,26 +20,27 @@ The Flux APIs (Kubernetes CRDs) follow the ### Alpha version -An alpha version API e.g. `v1alpha1` is considered experiment and should be used on +An alpha version API e.g. `v1alpha1` is considered experimental and should be used on test environments only. The schema of objects may change in incompatible ways in a later controller release. -The custom resources may require editing and re-creating after a CRD update. +The Custom Resources may require editing and re-creating after a CRD update. An alpha version API becomes deprecated once a subsequent alpha or beta API version is released. A deprecated alpha version is subject to removal after a three months period. An alpha API is introduced when its proposal reaches the `implementable` phase in the [Flux RFC process](https://github.com/fluxcd/flux2/tree/main/rfcs). -We encourage users to try out the alpha APIs and provide feedback which is extremely -valuable during early stages of development. +We encourage users to try out the alpha APIs and provide feedback +(e.g. on CNCF Slack or in the form of GitHub issues/discussions) +which is extremely valuable during early stages of development. ### Beta version A beta version API e.g. `v2beta1` is considered well tested and safe to be used. The schema of objects may change in incompatible ways in a subsequent beta or stable API version. -The custom resources may require editing after a CRD update for which migration instructions will be +The Custom Resources may require editing after a CRD update for which migration instructions will be provided as part of the controller changelog. A beta version API becomes deprecated once a subsequent beta or stable API version is released. @@ -49,7 +50,7 @@ A deprecated beta version is subject to removal after a six months period. A stable version API e.g. `v2` is considered feature complete. -Any changes to the object schema do not require editing or re-creating of custom resources. +Any changes to the object schema do not require editing or re-creating of Custom Resources. Schema fields can't be removed, only new fields can be added with a default value that doesn't affect the controller's current behaviour. @@ -110,9 +111,10 @@ and a support window of one year will be provided for the previous major version ## Release cadence -Flux controllers follow Kubernetes three releases per year cadence. After each Kubernetes minor release, -all controllers are tested against the latest Kubernetes version and are released at approximately two -weeks after Kubernetes. The newly released controllers offer support for Kubernetes N-2 minor versions. +Flux controllers are at least released at the same rate as Kubernetes, following their cadence of three +minor releases per year. After each Kubernetes minor release, all controllers are tested against the latest +Kubernetes version and are released at approximately two weeks after Kubernetes. +The newly released controllers offer support for Kubernetes N-2 minor versions. A Flux controller may have more than three minor releases per year, if maintainers decide to ship a new feature or optimisation ahead of schedule. @@ -121,9 +123,11 @@ new feature or optimisation ahead of schedule. For Flux controllers we support the last three minor releases. -Security fixes, may be backported to those three minor versions as patch releases, +Security fixes, may be back-ported to those three minor versions as patch releases, depending on severity and feasibility. +Note that back-porting is provided by the community on a best-effort basis. + ## Release artifacts Each controller release produces the following artifacts: @@ -162,16 +166,15 @@ curl -sL https://github.com/fluxcd//releases/download/ As a project maintainer, to release a controller and its API: 1. Checkout the `main` branch and pull changes from remote. -2. Create a `api/` tag and push it to remote. -3. Create a new branch from `main` i.e. `release-`. This +2. Create a new branch from `main` i.e. `release-`. This will function as your release preparation branch. -4. Update the `github.com/fluxcd/-controller/api` version in `go.mod` -5. Add an entry to the `CHANGELOG.md` for the new release and change the +3. Update the `github.com/fluxcd/-controller/api` version in `go.mod` +4. Add an entry to the `CHANGELOG.md` for the new release and change the `newTag` value in ` config/manager/kustomization.yaml` to that of the semver release you are going to make. Commit and push your changes. -6. Create a PR for your release branch and get it merged into `main`. -7. Create a `` tag for the merge commit in `main` and - push it to remote. +5. Create a PR for your release branch and get it merged into `main`. +6. Create a `api/` tag for the merge commit in `main` and push it to remote. +7. Create a `` tag for the merge commit in `main` and push it to remote. 8. Confirm CI builds and releases the newly tagged version. **Note** that the Git tags must be cryptographically signed with your private key diff --git a/docs/release/flux.md b/docs/release/flux.md new file mode 100644 index 00000000..a5f8a3ab --- /dev/null +++ b/docs/release/flux.md @@ -0,0 +1,173 @@ +# Flux release spec + +The Flux project repository [fluxcd/flux2](https://github.com/fluxcd/flux2) contains +the Flux command-line tool source code and the Kubernetes manifests for +bundling the [Flux controllers](controllers.md) into a distributable package. + +## Release versioning + +Flux is released by following the [semver](https://semver.org/) conventions: + +- `vX.Y.Z-RC.W` release candidates e.g. `v2.0.0-RC.1` +- `vX.Y.Z` stable releases e.g. `v2.0.0` + +The Flux project maintains release branches for the most recent three minor releases +e.g. `release-2.0`, `release-2.1` and `release-2.2`. + +### Release candidates + +Release candidates are intended for testing new features or improvements before a final release. + +In most cases, a maintainer will publish a release candidate for Flux users to tests it on their +staging clusters. Release candidates are not meant to be deployed in production unless advised +to do so by a maintainer. + +Release candidates can be unstable and they are deprecated by subsequent RC or stable version. + +### Patch releases + +Patch releases are intended for critical bug fixes to the latest minor version, +such as addressing security vulnerabilities or fixes to severe problems with no workaround. + +Patch releases do not contain breaking changes, feature additions or any type of user-facing changes. +If a CVE fix requires a breaking change, then a minor release will provide the fix. + +We expect users to be running the latest patch release of a given minor release. + +### Minor releases + +Minor releases are intended for backwards compatible feature additions and improvements. +Note that breaking changes may occur if required by a security vulnerability fix. + +Minor releases are used when updating the Flux controllers or Kubernetes dependencies +from one minor version to another. + +In effect, this means a Flux minor version will be released at least every four months after each +Kubernetes minor version release. To properly validate the Flux CLI and controllers against +the latest Kubernetes version, we reserve a time window of at least two weeks for end-to-end testing. + +### Major releases + +Major releases are intended for drastic changes to the Flux behaviour or security stance. + +A Flux major release will be announced ahead of time throughout all communication channels, +and a support window of one year will be provided for the previous major version. + +## Release cadence + +Flux is at least released at the same rate as Kubernetes, following their cadence of three +minor releases per year. After each Kubernetes minor release, the CLI and all controllers are +tested against the latest Kubernetes version and are released at approximately two weeks after Kubernetes. +The newly released Flux version offers support for Kubernetes N-2 minor versions. + +Flux may have more than three minor releases per year, if maintainers decide to ship a +new feature or optimisation ahead of schedule. + +## Supported releases + +For Flux the CLI and its controllers we support the last three minor releases. +Critical bug fixes such as security fixes, may be back-ported to those three minor +versions as patch releases, depending on severity and feasibility. + +Note that back-porting is provided by the community on a best-effort basis. + +The Flux controllers are guaranteed to be compatible with each other +within one minor version (older or newer) of Flux. + +The `flux` command-line tool is supported within one minor version (older or newer) of Flux. + +## Supported upgrades + +Users can upgrade from any `v2.x` release to any other `v2.x` release (the latest patch version). + +After upgrade, [Flux Custom Resources](controllers.md#api-versioning) may require editing, +for which migration instructions are provided as part of the +[changelog](#release-changelog). + +We expect users to keep Flux up-to-date on their clusters using automation tools +such as [Flux GitHub Actions](../../action) and +[Renovatebot](https://docs.renovatebot.com/modules/manager/flux/). + +Various vendors such as Microsoft Azure, D2iQ, Weaveworks and others offer a managed Flux service, +and it's their responsibility to keep Flux up-to-date and free of CVEs. +The Flux team communicates security issues to vendors as described in the +[Coordinated Vulnerability Disclosure document](https://github.com/fluxcd/.github/blob/14b735cdb23ec80d528ff4f71e562405a2f00639/CVD_LIST.md). + +## Kubernetes supported versions + +The Flux CLI and controllers offer support for all Kubernetes versions supported upstream. + +Every Flux release undergoes a series of conformance and end-to-end tests for +the latest Kubernetes minor release. The test suite is run against +[Kubernetes Kind](https://kind.sigs.k8s.io/) for both AMD64 and ARM64 distributions. + +We expect users to keep Kubernetes up-to-date with the latest patch version of a +supported minor release. Once a Kubernetes version reaches [end-of-life](https://endoflife.date/kubernetes), +we can't guarantee the next Flux release will work with it, +as we don't run end-to-end testing for EOL Kubernetes versions. + +## Release artifacts + +Each Flux release produces the following artifacts: + +- Source code (GitHub Releases page) +- Software Bill of Materials in SPDX format (GitHub Releases page) +- Kubernetes manifests of all controllers (GitHub Releases page) +- CLI binaries for Linux, macOS and Windows (GitHub Releases page) +- Signed checksums of source code, SBOM and manifests (GitHub Releases page) +- Multi-arch container images of the CLI (GitHub Container Registry and DockerHub) +- OCI artifacts with the Kubernetes manifests (GitHub Container Registry and DockerHub) +- CLI [Homebrew](https://brew.sh/) formulas for Linux and macOS + +All the artifacts are cryptographically signed and can be verified with Cosign. + +The release artifacts can be accessed based on the Flux version. + +To verify and pull the Flux CLI container image: + +```shell +cosign verify ghcr.io/fluxcd/flux-cli: +docker pull ghcr.io/fluxcd/flux-cli: +``` + +To install the latest stable release of the Flux CLI with Homebrew: + +```shell +brew install fluxcd/tap/flux +``` + +To download the Kubernetes manifests: + +```shell +cosign verify ghcr.io/fluxcd/flux-manifests: +flux pull artifact oci://ghcr.io/fluxcd/flux-manifests: --output . +``` + +## Release changelog + +All released versions of Flux are published on [GitHub Releases page](https://github.com/fluxcd/flux2/releases) +along with a list of changes from the previous release. + +The changelog contains the following information: + +- Security vulnerabilities fixes (if any) +- Breaking changes and migration instructions (if any) +- A summary of new features and improvements for the Flux APIs and controllers +- Links to the changelog of each controller version included in a Flux release +- A list of new features, improvements and bug fixes for the Flux CLI +- A list of documentation additions + +**Note** that the vulnerability disclosure procedure is explained on the [security page](https://fluxcd.io/security/). + +## Release procedure + +- `v2.X.Y-RC.Z` (Branch: `release-2.X`) + - When the `main` branch is feature-complete for `v2.X`, we will cherrypick PRs essential to `v2.X` to the `release-2.X` branch. + - We will cut the first [release candidate](#release-candidates) by tagging the `release-2.X` as `v2.X.0-RC.0`. + - If we're not satisfied with `v2.X.0-RC.0`, we'll keep releasing RCs until all issues are solved. +- `v2.X.0` (Branch: `release-2.X`) + - The final release is cut from the `release-2.X` branch and tagged as `v2.X.0`. +- `v2.X.Y, Y > 0` (Branch: `release-2.X`) + - [Patch releases](#patch-releases) are released as we cherrypick commits from `main` into the `release-2.X` branch. + - Flux controller updates (patch versions of a controller minor release included in `v2.X.0`) PRs are merged directly into the `release-2.X` branch. + - A patch release is cut from the `release-2.X` branch and tagged as `v2.X.Y`. diff --git a/docs/release/packages.md b/docs/release/packages.md index 6a6d005e..0f8534c7 100644 --- a/docs/release/packages.md +++ b/docs/release/packages.md @@ -44,9 +44,9 @@ Patch releases should be used when updating dependencies such as `k8s.io/api` fr Minor releases are intended for backwards compatible feature additions and improvements. Minor releases should be used when updating dependencies such as `k8s.io/api` from one minor version to another. - -Given that Kubernetes does not follow semver, a Kubernetes package minor version bump may introduce breaking changes. -If a Kubernetes update requires a breaking change in a Flux package public API, then a major version release is necessary. +If a [Kubernetes minor version](https://github.com/kubernetes/sig-release/blob/master/release-engineering/versioning.md) +upgrade requires a breaking change (e.g. removal of an API such as `PodSecurityPolicy`) in a Flux package public API, +then a major version release is necessary. ### Major releases From 8d5c4492d8cb71bcfea9334410f5feb02e76b697 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Fri, 23 Jun 2023 12:31:04 +0300 Subject: [PATCH 568/818] Apply suggestions from code review Co-authored-by: Aurel Canciu Co-authored-by: Hidde Beydals Signed-off-by: Stefan Prodan --- docs/release/controllers.md | 12 ++++++------ docs/release/flux.md | 8 ++++---- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/release/controllers.md b/docs/release/controllers.md index 68d9321c..0058a2bf 100644 --- a/docs/release/controllers.md +++ b/docs/release/controllers.md @@ -37,7 +37,7 @@ which is extremely valuable during early stages of development. ### Beta version -A beta version API e.g. `v2beta1` is considered well tested and safe to be used. +A beta version API e.g. `v2beta1` is considered well-tested and safe to use in production. The schema of objects may change in incompatible ways in a subsequent beta or stable API version. The Custom Resources may require editing after a CRD update for which migration instructions will be @@ -96,11 +96,11 @@ controller release is included in a Flux patch release. Minor releases are intended for backwards compatible feature additions and improvements. Note that breaking changes may occur if required by a security vulnerability fix. -Minor releases are used when updating Kubernetes dependencies such as `k8s.io/api` from one minor version to another. +In addition, minor releases are used when updating Kubernetes dependencies such as `k8s.io/api` from one minor version to another. -In effect, this means a minor version will be released for all Flux controllers approximately every four months -after each Kubernetes minor version release. To properly validate the controllers against the latest Kubernetes version, -we reserve a time window of at least two weeks for Flux controllers end-to-end testing. +In effect, this means a new minor version will at least be released for all Flux controllers approximately every four months, following each Kubernetes minor version release. To properly validate the controllers against the latest Kubernetes version, we typically allocate a time window of at least two weeks for end-to-end testing of Flux controllers. + +It is worth noting that in certain scenarios where project dependencies are not in sync with the Kubernetes version or conflicts arise, this two-week timeframe may prove insufficient, requiring additional time to address the issues appropriately. ### Major releases @@ -123,7 +123,7 @@ new feature or optimisation ahead of schedule. For Flux controllers we support the last three minor releases. -Security fixes, may be back-ported to those three minor versions as patch releases, +Security fixes may be back-ported to those three minor versions as patch releases, depending on severity and feasibility. Note that back-porting is provided by the community on a best-effort basis. diff --git a/docs/release/flux.md b/docs/release/flux.md index a5f8a3ab..44c6cbbd 100644 --- a/docs/release/flux.md +++ b/docs/release/flux.md @@ -8,21 +8,21 @@ bundling the [Flux controllers](controllers.md) into a distributable package. Flux is released by following the [semver](https://semver.org/) conventions: -- `vX.Y.Z-RC.W` release candidates e.g. `v2.0.0-RC.1` +- `vX.Y.Z-RC.W` release candidates e.g. `v2.0.0-rc.1` - `vX.Y.Z` stable releases e.g. `v2.0.0` The Flux project maintains release branches for the most recent three minor releases -e.g. `release-2.0`, `release-2.1` and `release-2.2`. +e.g. `release/2.0.x`, `release/2.1.x` and `release/2.2.x`. ### Release candidates Release candidates are intended for testing new features or improvements before a final release. -In most cases, a maintainer will publish a release candidate for Flux users to tests it on their +In most cases, a maintainer will publish a release candidate for Flux users to test on their staging clusters. Release candidates are not meant to be deployed in production unless advised to do so by a maintainer. -Release candidates can be unstable and they are deprecated by subsequent RC or stable version. +Release candidates can be unstable and they are deprecated by subsequent RC or stable versions. ### Patch releases From 91660a98d5123c5ae0dbfb12ec771cf37a2b48c3 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Fri, 23 Jun 2023 12:45:52 +0300 Subject: [PATCH 569/818] Add SLSA provenance to release artifacts Signed-off-by: Stefan Prodan --- docs/release/controllers.md | 34 +++++++++++----------------------- docs/release/flux.md | 21 +-------------------- 2 files changed, 12 insertions(+), 43 deletions(-) diff --git a/docs/release/controllers.md b/docs/release/controllers.md index 0058a2bf..45db7280 100644 --- a/docs/release/controllers.md +++ b/docs/release/controllers.md @@ -96,11 +96,17 @@ controller release is included in a Flux patch release. Minor releases are intended for backwards compatible feature additions and improvements. Note that breaking changes may occur if required by a security vulnerability fix. -In addition, minor releases are used when updating Kubernetes dependencies such as `k8s.io/api` from one minor version to another. +In addition, minor releases are used when updating Kubernetes dependencies such +as `k8s.io/api` from one minor version to another. -In effect, this means a new minor version will at least be released for all Flux controllers approximately every four months, following each Kubernetes minor version release. To properly validate the controllers against the latest Kubernetes version, we typically allocate a time window of at least two weeks for end-to-end testing of Flux controllers. +In effect, this means a new minor version will at least be released for all Flux +controllers approximately every four months, following each Kubernetes minor version release. +To properly validate the controllers against the latest Kubernetes version, +we typically allocate a time window of around two weeks for end-to-end testing of Flux controllers. -It is worth noting that in certain scenarios where project dependencies are not in sync with the Kubernetes version or conflicts arise, this two-week timeframe may prove insufficient, requiring additional time to address the issues appropriately. +It is worth noting that in certain scenarios where project dependencies are not in sync with +the Kubernetes version or conflicts arise, this two-week timeframe may prove insufficient, +requiring additional time to address the issues appropriately. ### Major releases @@ -134,33 +140,15 @@ Each controller release produces the following artifacts: - Source code (GitHub Releases page) - Software Bill of Materials in SPDX format (GitHub Releases page) +- SLSA provenance attestations (GitHub Releases page) - Kubernetes manifests such as CRDs and Deployments (GitHub Releases page) - Signed checksums of source code, SBOM and manifests (GitHub Releases page) - Multi-arch container images (GitHub Container Registry and DockerHub) -All the artifacts are cryptographically signed and can be verified with Cosign. +All the artifacts are cryptographically signed and can be verified with Cosign and GitHub OIDC. The release artifacts can be accessed based on the controller name and version. -To import or update a controller's API package in a Go project: - -```shell -go get github.com/fluxcd//api@ -``` - -To verify and pull a controller's container image: - -```shell -cosign verify ghcr.io/fluxcd/: -docker pull ghcr.io/fluxcd/: -``` - -To download a controller's Kubernetes Custom resource definitions: - -```shell -curl -sL https://github.com/fluxcd//releases/download//.crds.yaml -``` - ## Controller release procedure As a project maintainer, to release a controller and its API: diff --git a/docs/release/flux.md b/docs/release/flux.md index 44c6cbbd..cae1bbb9 100644 --- a/docs/release/flux.md +++ b/docs/release/flux.md @@ -112,6 +112,7 @@ Each Flux release produces the following artifacts: - Source code (GitHub Releases page) - Software Bill of Materials in SPDX format (GitHub Releases page) +- SLSA provenance attestations (GitHub Releases page) - Kubernetes manifests of all controllers (GitHub Releases page) - CLI binaries for Linux, macOS and Windows (GitHub Releases page) - Signed checksums of source code, SBOM and manifests (GitHub Releases page) @@ -123,26 +124,6 @@ All the artifacts are cryptographically signed and can be verified with Cosign. The release artifacts can be accessed based on the Flux version. -To verify and pull the Flux CLI container image: - -```shell -cosign verify ghcr.io/fluxcd/flux-cli: -docker pull ghcr.io/fluxcd/flux-cli: -``` - -To install the latest stable release of the Flux CLI with Homebrew: - -```shell -brew install fluxcd/tap/flux -``` - -To download the Kubernetes manifests: - -```shell -cosign verify ghcr.io/fluxcd/flux-manifests: -flux pull artifact oci://ghcr.io/fluxcd/flux-manifests: --output . -``` - ## Release changelog All released versions of Flux are published on [GitHub Releases page](https://github.com/fluxcd/flux2/releases) From 33fdaee3999b8aef59a1f8b5b842b32ac50d2961 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Fri, 23 Jun 2023 12:57:48 +0300 Subject: [PATCH 570/818] Move the release procedures to dedicated doc Signed-off-by: Stefan Prodan --- docs/release/README.md | 1 + docs/release/controllers.md | 18 ----------- docs/release/flux.md | 12 -------- docs/release/packages.md | 24 --------------- docs/release/procedure.md | 60 +++++++++++++++++++++++++++++++++++++ 5 files changed, 61 insertions(+), 54 deletions(-) create mode 100644 docs/release/procedure.md diff --git a/docs/release/README.md b/docs/release/README.md index 3920353a..03df7d1b 100644 --- a/docs/release/README.md +++ b/docs/release/README.md @@ -5,3 +5,4 @@ - [Flux distribution](flux.md) - [Flux APIs and controllers](controllers.md) - [Flux shared libraries](packages.md) +- [Flux release procedure](procedure.md) \ No newline at end of file diff --git a/docs/release/controllers.md b/docs/release/controllers.md index 45db7280..eee134dd 100644 --- a/docs/release/controllers.md +++ b/docs/release/controllers.md @@ -149,21 +149,3 @@ All the artifacts are cryptographically signed and can be verified with Cosign a The release artifacts can be accessed based on the controller name and version. -## Controller release procedure - -As a project maintainer, to release a controller and its API: - -1. Checkout the `main` branch and pull changes from remote. -2. Create a new branch from `main` i.e. `release-`. This - will function as your release preparation branch. -3. Update the `github.com/fluxcd/-controller/api` version in `go.mod` -4. Add an entry to the `CHANGELOG.md` for the new release and change the - `newTag` value in ` config/manager/kustomization.yaml` to that of the - semver release you are going to make. Commit and push your changes. -5. Create a PR for your release branch and get it merged into `main`. -6. Create a `api/` tag for the merge commit in `main` and push it to remote. -7. Create a `` tag for the merge commit in `main` and push it to remote. -8. Confirm CI builds and releases the newly tagged version. - -**Note** that the Git tags must be cryptographically signed with your private key -and your public key must be uploaded to GitHub. diff --git a/docs/release/flux.md b/docs/release/flux.md index cae1bbb9..c4994411 100644 --- a/docs/release/flux.md +++ b/docs/release/flux.md @@ -140,15 +140,3 @@ The changelog contains the following information: **Note** that the vulnerability disclosure procedure is explained on the [security page](https://fluxcd.io/security/). -## Release procedure - -- `v2.X.Y-RC.Z` (Branch: `release-2.X`) - - When the `main` branch is feature-complete for `v2.X`, we will cherrypick PRs essential to `v2.X` to the `release-2.X` branch. - - We will cut the first [release candidate](#release-candidates) by tagging the `release-2.X` as `v2.X.0-RC.0`. - - If we're not satisfied with `v2.X.0-RC.0`, we'll keep releasing RCs until all issues are solved. -- `v2.X.0` (Branch: `release-2.X`) - - The final release is cut from the `release-2.X` branch and tagged as `v2.X.0`. -- `v2.X.Y, Y > 0` (Branch: `release-2.X`) - - [Patch releases](#patch-releases) are released as we cherrypick commits from `main` into the `release-2.X` branch. - - Flux controller updates (patch versions of a controller minor release included in `v2.X.0`) PRs are merged directly into the `release-2.X` branch. - - A patch release is cut from the `release-2.X` branch and tagged as `v2.X.Y`. diff --git a/docs/release/packages.md b/docs/release/packages.md index 0f8534c7..d61c5521 100644 --- a/docs/release/packages.md +++ b/docs/release/packages.md @@ -73,27 +73,3 @@ A deprecated package is marked as so in its `go.mod` e.g. module github.com/fluxcd/pkg/untar ``` -## Release procedure - -As a project maintainer, to release a package, tag the `main` branch using semver, -and push the signed tag to upstream: - -```shell -git clone https://github.com/fluxcd/pkg.git -git switch main -git tag -s -m "runtime/v1.0.0" "runtime/v1.0.0" -git push origin "runtime/v1.0.0" -``` - -**Note** that the Git tags must be cryptographically signed with your private key -and your public key must be uploaded to GitHub. - -Release candidates of a specific package can be cut from the `main` branch or from an `dev-` branch: - -```shell -git switch dev-runtime -git tag -s -m "runtime/v1.1.0-RC.1" "runtime/v1.1.0-RC.1" -git push origin "runtime/v1.1.0-RC.1" -``` - -Before cutting a release candidate, make sure the tests are passing on the `dev` branch. diff --git a/docs/release/procedure.md b/docs/release/procedure.md new file mode 100644 index 00000000..9ac03d36 --- /dev/null +++ b/docs/release/procedure.md @@ -0,0 +1,60 @@ +# Flux release procedure + +## Shared packages release procedure + +As a project maintainer, to release a package, tag the `main` branch using semver, +and push the signed tag to upstream: + +```shell +git clone https://github.com/fluxcd/pkg.git +git switch main +git tag -s -m "runtime/v1.0.0" "runtime/v1.0.0" +git push origin "runtime/v1.0.0" +``` + +**Note** that the Git tags must be cryptographically signed with your private key +and your public key must be uploaded to GitHub. + +Release candidates of a specific package can be cut from the `main` branch or from an `dev-` branch: + +```shell +git switch dev-runtime +git tag -s -m "runtime/v1.1.0-RC.1" "runtime/v1.1.0-RC.1" +git push origin "runtime/v1.1.0-RC.1" +``` + +Before cutting a release candidate, make sure the tests are passing on the `dev` branch. + +## Controllers release procedure + +As a project maintainer, to release a controller and its API: + +1. Checkout the `main` branch and pull changes from remote. +2. Create a new branch from `main` i.e. `release-`. This + will function as your release preparation branch. +3. Update the `github.com/fluxcd/-controller/api` version in `go.mod` +4. Add an entry to the `CHANGELOG.md` for the new release and change the + `newTag` value in ` config/manager/kustomization.yaml` to that of the + semver release you are going to make. Commit and push your changes. +5. Create a PR for your release branch and get it merged into `main`. +6. Create a `api/` tag for the merge commit in `main` and push it to remote. +7. Create a `` tag for the merge commit in `main` and push it to remote. +8. Confirm CI builds and releases the newly tagged version. + +**Note** that the Git tags must be cryptographically signed with your private key +and your public key must be uploaded to GitHub. + +## Distribution release procedure + +As a project maintainer, to release a new Flux version and its CLI: + +- `v2.X.Y-RC.Z` (Branch: `release-2.X`) + - When the `main` branch is feature-complete for `v2.X`, we will cherrypick PRs essential to `v2.X` to the `release-2.X` branch. + - We will cut the first [release candidate](#release-candidates) by tagging the `release-2.X` as `v2.X.0-RC.0`. + - If we're not satisfied with `v2.X.0-RC.0`, we'll keep releasing RCs until all issues are solved. +- `v2.X.0` (Branch: `release-2.X`) + - The final release is cut from the `release-2.X` branch and tagged as `v2.X.0`. +- `v2.X.Y, Y > 0` (Branch: `release-2.X`) + - [Patch releases](#patch-releases) are released as we cherrypick commits from `main` into the `release-2.X` branch. + - Flux controller updates (patch versions of a controller minor release included in `v2.X.0`) PRs are merged directly into the `release-2.X` branch. + - A patch release is cut from the `release-2.X` branch and tagged as `v2.X.Y`. From 33be9840f0ca615a6bc0b1eeb8b992b9de0c6fdf Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Tue, 27 Jun 2023 11:56:17 +0300 Subject: [PATCH 571/818] Apply suggestions from code review Co-authored-by: Max Jonas Werner Co-authored-by: Aurel Canciu Signed-off-by: Stefan Prodan --- docs/release/controllers.md | 30 +++++++++++++++--------------- docs/release/flux.md | 10 +++++----- docs/release/packages.md | 2 +- 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/docs/release/controllers.md b/docs/release/controllers.md index eee134dd..07f9e780 100644 --- a/docs/release/controllers.md +++ b/docs/release/controllers.md @@ -2,16 +2,16 @@ The Flux controllers are [Kubernetes operators](https://kubernetes.io/docs/concepts/extend-kubernetes/operator/), -each controller has its own Git repository and release cycle. +each controller has its own Git repository and release cycle (see below for details). Controller repositories and their interdependencies: -1. [fluxcd/source-controller](https://github.com/fluxcd/source-controller) -2. [fluxcd/kustomize-controller](https://github.com/fluxcd/kustomize-controller) (imports `fluxcd/source-controller/api`) -3. [fluxcd/helm-controller](https://github.com/fluxcd/helm-controller) (imports `fluxcd/source-controller/api`) -4. [fluxcd/notification-controller](https://github.com/fluxcd/notification-controller) -5. [fluxcd/image-reflector-controller](https://github.com/fluxcd/image-reflector-controller) -6. [fluxcd/image-automation-controller](https://github.com/fluxcd/image-automation-controller) (imports `fluxcd/source-controller/api` and `fluxcd/image-reflector-controller/api`) +1. [source-controller](https://github.com/fluxcd/source-controller) +2. [kustomize-controller](https://github.com/fluxcd/kustomize-controller) (imports `fluxcd/source-controller/api`) +3. [helm-controller](https://github.com/fluxcd/helm-controller) (imports `fluxcd/source-controller/api`) +4. [notification-controller](https://github.com/fluxcd/notification-controller) +5. [image-reflector-controller](https://github.com/fluxcd/image-reflector-controller) +6. [image-automation-controller](https://github.com/fluxcd/image-automation-controller) (imports `fluxcd/source-controller/api` and `fluxcd/image-reflector-controller/api`) ## API versioning @@ -23,11 +23,11 @@ The Flux APIs (Kubernetes CRDs) follow the An alpha version API e.g. `v1alpha1` is considered experimental and should be used on test environments only. -The schema of objects may change in incompatible ways in a later controller release. +The schema of objects may change in incompatible ways in a later API version. The Custom Resources may require editing and re-creating after a CRD update. An alpha version API becomes deprecated once a subsequent alpha or beta API version is released. -A deprecated alpha version is subject to removal after a three months period. +A deprecated alpha version is subject to removal after a three month period. An alpha API is introduced when its proposal reaches the `implementable` phase in the [Flux RFC process](https://github.com/fluxcd/flux2/tree/main/rfcs). @@ -48,14 +48,14 @@ A deprecated beta version is subject to removal after a six months period. ### Stable version -A stable version API e.g. `v2` is considered feature complete. +A stable API version, e.g. `v2`, is considered feature complete. Any changes to the object schema do not require editing or re-creating of Custom Resources. Schema fields can't be removed, only new fields can be added with a default value that doesn't affect the controller's current behaviour. -A stable version API becomes deprecated once a subsequent stable version is released. -Stable API versions are not subject to removal in any future release of a controller major version. +A stable API version becomes deprecated once a subsequent stable version is released. +Stable API versions are not subject to removal in any future release within a controller major version. In effect, this means that for as long as Flux `v2` is being maintained, all the stable API versions will be supported. @@ -65,7 +65,7 @@ will be supported. The Flux controllers and their Go API packages are released by following the [Go module version numbering](https://go.dev/doc/modules/version-numbers) conventions: -- `vX.Y.Z-RC.W` release candidates e.g. `v1.0.0-RC.1` +- `vX.Y.Z-rc.W` release candidates e.g. `v1.0.0-rc.1` - `vX.Y.Z` stable releases e.g. `v1.0.0` The API versioning and controller versioning are indirectly related. For example, @@ -86,7 +86,7 @@ Patch releases are intended for critical bug fixes to the latest minor version, vulnerabilities or fixes to severe problems with no workaround. Patch releases do not contain breaking changes, feature additions or any type of user-facing changes. -If a CVE fix requires a breaking change, then a minor release will provide the fix. +If a security fix requires a breaking change, then a minor release will provide the fix. We expect users to be running the latest patch release of a given minor release as soon as the controller release is included in a Flux patch release. @@ -119,7 +119,7 @@ and a support window of one year will be provided for the previous major version Flux controllers are at least released at the same rate as Kubernetes, following their cadence of three minor releases per year. After each Kubernetes minor release, all controllers are tested against the latest -Kubernetes version and are released at approximately two weeks after Kubernetes. +Kubernetes version and then released approximately two weeks after Kubernetes. The newly released controllers offer support for Kubernetes N-2 minor versions. A Flux controller may have more than three minor releases per year, if maintainers decide to ship a diff --git a/docs/release/flux.md b/docs/release/flux.md index c4994411..98b56da5 100644 --- a/docs/release/flux.md +++ b/docs/release/flux.md @@ -8,7 +8,7 @@ bundling the [Flux controllers](controllers.md) into a distributable package. Flux is released by following the [semver](https://semver.org/) conventions: -- `vX.Y.Z-RC.W` release candidates e.g. `v2.0.0-rc.1` +- `vX.Y.Z-rc.W` release candidates e.g. `v2.0.0-rc.1` - `vX.Y.Z` stable releases e.g. `v2.0.0` The Flux project maintains release branches for the most recent three minor releases @@ -36,7 +36,7 @@ We expect users to be running the latest patch release of a given minor release. ### Minor releases -Minor releases are intended for backwards compatible feature additions and improvements. +Minor releases are intended for backward-compatible feature additions and improvements. Note that breaking changes may occur if required by a security vulnerability fix. Minor releases are used when updating the Flux controllers or Kubernetes dependencies @@ -57,11 +57,11 @@ and a support window of one year will be provided for the previous major version Flux is at least released at the same rate as Kubernetes, following their cadence of three minor releases per year. After each Kubernetes minor release, the CLI and all controllers are -tested against the latest Kubernetes version and are released at approximately two weeks after Kubernetes. +tested against the latest Kubernetes version and are released approximately two weeks after Kubernetes. The newly released Flux version offers support for Kubernetes N-2 minor versions. -Flux may have more than three minor releases per year, if maintainers decide to ship a -new feature or optimisation ahead of schedule. +Flux may have more than three minor releases per year if maintainers decide to ship a +new feature or optimization ahead of schedule. ## Supported releases diff --git a/docs/release/packages.md b/docs/release/packages.md index d61c5521..ccd6417f 100644 --- a/docs/release/packages.md +++ b/docs/release/packages.md @@ -11,7 +11,7 @@ for projects which integrate and/or extend Flux. The Flux packages are released by following the [Go module version numbering](https://go.dev/doc/modules/version-numbers) conventions: -- `NAME/vX.Y.Z-RC.W` release candidates e.g. `runtime/v1.0.0-RC.1` +- `NAME/vX.Y.Z-rc.W` release candidates e.g. `runtime/v1.0.0-rc.1` - `NAME/vX.Y.Z` stable releases e.g. `runtime/v1.0.0` To import or update a Flux package in a Go project: From 4e78e806194a98aa0db32087841fff38584c557c Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Thu, 29 Jun 2023 18:57:51 +0200 Subject: [PATCH 572/818] Document various release procedures This lacks documentation for the Terraform provider repository, which is a higher level component than anything documented here. Signed-off-by: Hidde Beydals --- docs/release/procedure.md | 407 ++++++++++++++++++++++--- docs/release/release-notes-template.md | 72 +++++ 2 files changed, 432 insertions(+), 47 deletions(-) create mode 100644 docs/release/release-notes-template.md diff --git a/docs/release/procedure.md b/docs/release/procedure.md index 9ac03d36..1f586189 100644 --- a/docs/release/procedure.md +++ b/docs/release/procedure.md @@ -1,60 +1,373 @@ -# Flux release procedure +# Flux release procedures -## Shared packages release procedure +This document provides an overview of the release procedures for each component +type in the Flux project. It is intended for project maintainers, but may also +be useful for contributors who want to understand the release process. -As a project maintainer, to release a package, tag the `main` branch using semver, -and push the signed tag to upstream: +If you have any questions, please reach out to another maintainer for +clarification. + +## Table of contents + +- [General rules](#general-rules) + + [Signing releases](#signing-releases) +- [Component types](#component-types) + + [Shared packages](#shared-packages) + + [Controllers](#controllers) + * [Minor releases](#controller-minor-releases) + * [Patch releases](#controller-patch-releases) + * [Release candidates](#controller-release-candidates) + * [Preview releases](#controller-preview-releases) + + [Distribution](#distribution) + * [Minor releases](#distribution-minor-releases) + * [Patch releases](#distribution-patch-releases) + * [Release candidates](#distribution-release-candidates) +- [Backport changes for patch releases](#backport-changes-for-patch-releases) + +## General rules + +### Signing releases + +To ensure the integrity and authenticity of releases, all releases must be +signed with a GPG key. The public key must be uploaded to the GitHub account of +the maintainer, and the private key must be kept secure. + +In addition, we recommend the following practices: + +1. Safeguard your GPG private key, preferably using a hardware security key + like a YubiKey. +2. Use a subkey dedicated to signing releases, set an expiration date for + added security, and keep the master key offline. Refer to + [this guide](https://riseup.net/en/security/message-security/openpgp/best-practices#key-configuration) + for detailed instructions. + +We understand that this may seem overwhelming. If you are not comfortable with +the process, don't hesitate to seek assistance from another maintainer who has +experience with signing releases. + +Please note that SSH signatures are not supported at this time due to limited +availability of SSH signature verification outside the `git` CLI. + +## Component types + +### Shared packages + +To release a [package](packages.md) as a project maintainer, follow these steps: + +1. Tag the `main` branch using SemVer. +2. Sign the tag according to the [general rules](#general-rules). +3. Push the signed tag to the upstream repository. + +Use the following commands as an example: ```shell git clone https://github.com/fluxcd/pkg.git git switch main -git tag -s -m "runtime/v1.0.0" "runtime/v1.0.0" -git push origin "runtime/v1.0.0" +git tag -s -m "/" "/" +git push origin "/" ``` -**Note** that the Git tags must be cryptographically signed with your private key -and your public key must be uploaded to GitHub. +In the commands above, `` represents the relative path to the directory +containing the `go.mod` file, and `` refers to the SemVer version of the +release. For instance, `runtime/v1.0.0` for [`fluxcd/pkg/runtime`](https://github.com/fluxcd/pkg/tree/main/runtime), +or `http/fetch/v0.1.0` for [`fluxcd/pkg/http/fetch`](https://github.com/fluxcd/pkg/tree/main/http/fetch). + +Before cutting a release candidate, ensure that the package's tests pass +successfully. -Release candidates of a specific package can be cut from the `main` branch or from an `dev-` branch: +Here's an example of releasing a candidate from a feature branch: ```shell -git switch dev-runtime -git tag -s -m "runtime/v1.1.0-RC.1" "runtime/v1.1.0-RC.1" -git push origin "runtime/v1.1.0-RC.1" +git switch +git tag -s -m "/-.1" "/-.1" +git push origin "/-.1" ``` -Before cutting a release candidate, make sure the tests are passing on the `dev` branch. - -## Controllers release procedure - -As a project maintainer, to release a controller and its API: - -1. Checkout the `main` branch and pull changes from remote. -2. Create a new branch from `main` i.e. `release-`. This - will function as your release preparation branch. -3. Update the `github.com/fluxcd/-controller/api` version in `go.mod` -4. Add an entry to the `CHANGELOG.md` for the new release and change the - `newTag` value in ` config/manager/kustomization.yaml` to that of the - semver release you are going to make. Commit and push your changes. -5. Create a PR for your release branch and get it merged into `main`. -6. Create a `api/` tag for the merge commit in `main` and push it to remote. -7. Create a `` tag for the merge commit in `main` and push it to remote. -8. Confirm CI builds and releases the newly tagged version. - -**Note** that the Git tags must be cryptographically signed with your private key -and your public key must be uploaded to GitHub. - -## Distribution release procedure - -As a project maintainer, to release a new Flux version and its CLI: - -- `v2.X.Y-RC.Z` (Branch: `release-2.X`) - - When the `main` branch is feature-complete for `v2.X`, we will cherrypick PRs essential to `v2.X` to the `release-2.X` branch. - - We will cut the first [release candidate](#release-candidates) by tagging the `release-2.X` as `v2.X.0-RC.0`. - - If we're not satisfied with `v2.X.0-RC.0`, we'll keep releasing RCs until all issues are solved. -- `v2.X.0` (Branch: `release-2.X`) - - The final release is cut from the `release-2.X` branch and tagged as `v2.X.0`. -- `v2.X.Y, Y > 0` (Branch: `release-2.X`) - - [Patch releases](#patch-releases) are released as we cherrypick commits from `main` into the `release-2.X` branch. - - Flux controller updates (patch versions of a controller minor release included in `v2.X.0`) PRs are merged directly into the `release-2.X` branch. - - A patch release is cut from the `release-2.X` branch and tagged as `v2.X.Y`. +### Controllers + +To release a [controller](controllers.md) as a project maintainer, follow the +steps below. Note that the release procedure differs depending on the type of +release. + +##### Controller minor releases + +1. Checkout the `main` branch and pull changes from the remote repository. + +2. Create a "release series" branch for the next minor SemVer range, e.g., + `release/v1.2.x`, and push it to the remote repository. + + ```shell + git switch -c release/v1.2.x main + ``` + +3. From the release series branch, create a release preparation branch for the + specific release. + + ```shell + git switch -c release-v1.2.0 release/v1.2.x + ``` + +4. Add an entry to `CHANGELOG.md` for the new release and commit the changes. + + ```shell + vim CHANGELOG.md + git add CHANGELOG.md + git commit -s -m "Add changelog entry for v1.2.0" + ``` + +5. Update `github.com/fluxcd/-controller/api` version in `go.mod` and + `newTag` value in `config/manager/kustomization.yaml` to the target SemVer + (e.g., `v1.2.0`). Commit and push the changes. + + ```shell + vim go.mod + vim config/manager/kustomization.yaml + git add go.mod config/manager/kustomization.yaml + git commit -s -m "Release v1.2.0" + git push origin release-v1.2.0 + ``` + +6. Create a pull request for the release branch and merge it into the release + series branch (e.g., `release/v1.2.x`). + +7. Create `api/` and `` tags for the merge commit in + `release/v1.2.x`. Ensure the tags are signed according to the [general + rules](#general-rules)., and push them to the remote repository. + + ```shell + git switch release/v1.2.x + git pull origin release/v1.2.x + git tag -s -m "api/v1.2.0" api/v1.2.0 + git push origin api/v1.2.0 + git tag -s -m "v1.2.0" v1.2.0 + git push origin v1.2.0 + ``` + +8. Confirm that the CI builds and releases the newly tagged version. + +9. Create a pull request for the release series branch and merge it into `main`. + +##### Controller patch releases + +1. Ensure everything to be included in the release is backported to the + "release series" branch (e.g., `release/v1.2.x`). If not, refer to the + [backporting](#backport-changes-for-patch-releases) section. + +2. From the release series branch, create a release preparation branch for the + specific patch release. + + ```shell + git pull origin release/v1.2.x + git switch -c release-v1.2.1 release/v1.2.1 + ``` + +3. Add an entry to `CHANGELOG.md` for the new release and commit the changes. + + ```shell + vim CHANGELOG.md + git add CHANGELOG.md + git commit -s -m "Add changelog entry for v1.2.1" + ``` + +4. Update `github.com/fluxcd/-controller/api` version in `go.mod` and + `newTag` value in `config/manager/kustomization.yaml` to the target SemVer + (e.g., `v1.2.1`). Commit and push the changes. + + ```shell + vim go.mod + vim config/manager/kustomization.yaml + git add go.mod config/manager/kustomization.yaml + git commit -s -m "Release v1.2.1" + git push origin release-v1.2.1 + ``` + +5. Create a pull request for the release branch and merge it into the release + series branch (e.g., `release/v1.2.x`). + +6. Create `api/` and `` tags for the merge commit in + `release/v1.2.x`. Ensure the tags are signed according to the [general + rules](#general-rules)., and push them to the remote repository. + + ```shell + git switch release/v1.2.x + git pull origin release/v1.2.x + git tag -s -m "api/v1.2.1" api/v1.2.1 + git push origin api/v1.2.1 + git tag -s -m "v1.2.1" v1.2.1 + git push origin v1.2.1 + ``` + +7. Confirm that the CI builds and releases the newly tagged version. + +8. Cherry-pick the changelog entry from the release series branch and create a + pull request to merge it into `main`. + + ```shell + git pull origin main + git switch -c pick-changelog-v1.2.1 main + git cherry-pick -x + git push origin pick-changelog-v1.2.1 + ``` + +#### Controller release candidates + +In some cases, it may be necessary to release a [release +candidate](controllers.md#release-candidates) of a controller. + +To create a first release candidate, follow the steps to create a [minor +release](#controller-minor-releases), but use the `rc.X` suffix for SemVer +version to release (e.g., `v1.2.0-rc.1`). + +Once the release series branch is created, subsequent release candidates and +the final (non-RC) release should follow the procedure for [patch controller +releases](#controller-patch-releases). + +#### Controller preview releases + +In some cases, it may be necessary to release a preview of a controller. +A preview release is a release that is not intended for production use, but +rather to allow users to quickly test new features or an intended bug fix, and +provide feedback. + +Preview releases are made by triggering the release GitHub Actions workflow on +a specific Git branch. This workflow will build the container image, sign it +using Cosign, and push it to the registry. But does not require a Git tag, +GitHub release, or a changelog entry. + +To create a preview release, follow the steps below. + +1. Navigate to `https://github.com/fluxcd/-controller/actions/workflows/release.yml`. +2. Click the `Run workflow` button. +3. Select the branch to release from the `Branch` dropdown. +4. The default values for the `image tag` (`preview`) should be correct, but can + be changed if necessary. +5. Click the green `Run workflow` button. +6. The workflow will now run, and the container image will be pushed to the + registry. Once the workflow has completed, the image reference will be + available in the logs, and can be shared in the relevant issue or pull + request. + +### Distribution + +To release a [Flux distribution](flux.md) as a project maintainer, follow the +steps below. + +Note that the Flux distribution contains multiple components, and you may need +to release [controllers](#controllers) before releasing the distribution. +Automation is in place to automatically create a pull request to update the +version in the `main` branch when a new controller version is released. + +#### Distribution minor releases + +1. Ensure everything to be included in the release is merged into the `main` + branch, including any controller releases you wish to include in the + release. + +2. Create a "release series" branch for the next minor SemVer range, e.g., + `release/v1.2.x`, and push it to the remote repository. + + ```shell + git switch -c release/v1.2.x main + ``` + +3. Prepare the required release notes for this release, see [release + notes](#distribution-release-notes) for more information. + +4. Tag the release series branch with the SemVer version of the release, e.g., + `v1.2.0`. Ensure the tag is signed according to the [general + rules](#general-rules), and push it to the remote repository. + + ```shell + git tag -s -m "v1.2.0" v1.2.0 + git push origin v1.2.0 + ``` + +5. Confirm that the CI builds and releases the newly tagged version. + +6. Once the release is complete, update the release notes on GitHub with the + release notes prepared in step 3. + +7. Post a message in the [`#flux` CNCF Slack channel](https://cloud-native.slack.com/archives/CLAJ40HV3) + announcing the release, and pin it. + +#### Distribution patch releases + +1. Ensure everything to be included in the release is backported to the + "release series" branch (e.g., `release/v1.2.x`). If not, refer to the + [backporting](#backport-changes-for-patch-releases) section. + +2. Prepare the required release notes for this release, see [release + notes](#distribution-release-notes) for more information. + +3. Tag the release series branch with the SemVer version of the release, e.g., + `v1.2.1`. Ensure the tag is signed according to the [general + rules](#general-rules), and push it to the remote repository. + + ```shell + git tag -s -m "v1.2.1" v1.2.1 + git push origin v1.2.1 + ``` + +4. Confirm that the CI builds and releases the newly tagged version. + +5. Once the release is complete, update the release notes on GitHub with the + release notes prepared in step 2. + +6. Post a message in the [`#flux` CNCF Slack channel](https://cloud-native.slack.com/archives/CLAJ40HV3) + +#### Distribution release candidates + +In some cases, it may be necessary to release a [release candidate](flux.md#release-candidates) +of the distribution. + +To create a first release candidate, follow the steps to create a [minor +release](#distribution-minor-releases), but use the `rc.X` suffix for SemVer +version to release (e.g., `v1.2.0-rc.1`). + +Once the release series branch is created, subsequent release candidates and +the final (non-RC) release should follow the procedure for [patch controller +releases](#controller-patch-releases). + +#### Distribution release notes + +The release notes template for Flux distributions is available in the +[release-notes-template.md](release-notes-template.md) file. + +## Backport changes for patch releases + +The Flux projects have a backport bot that automates the process of backporting +changes from `main` to the release series branches. The bot is configured to +backport pull requests that are labeled with `backport:` (e.g., +`backport:release/v2.1.x`) and have been merged into `main`. + +The label(s) are preferably added to the pull request before it is merged into +`main`. If the pull request is merged into `main` without labeling, they can +still be added to the pull request after it has been merged. + +The backport bot will automatically backport the pull request to the release +series branch and create a pull request for the backport. It will comment on +the pull request with a link to the backport pull request. + +If the backport bot is unable to backport a pull request automatically (for +example, due to conflicts), it will comment on the pull request with +instructions on how to backport the pull request manually. + +### Manual backporting + +In some cases, the backport bot may not be suitable for backporting a pull +request. For example, if the pull request contains a series of changes of which +a subset should be backported. In these cases, the pull request should be +backported manually. + +To backport a pull request manually, create a new branch from the release +series branch (e.g., `release/v2.1.x`) and cherry-pick the commits from the +pull request into the new branch. Push the new branch to the remote repository +and create a pull request to merge it into the release series branch. + +```shell +git pull origin release/v2.1.x +git switch -c backport--to-v2.1.x release/v2.1.x +git cherry-pick -x +# Repeat the cherry-pick command for each commit to backport +git push origin backport--to-v2.1.x +``` diff --git a/docs/release/release-notes-template.md b/docs/release/release-notes-template.md new file mode 100644 index 00000000..b64d769b --- /dev/null +++ b/docs/release/release-notes-template.md @@ -0,0 +1,72 @@ +# Release notes template + +This is a template for release notes. It is intended to be used as a +starting point for writing release notes for a new release. It should be copied +to a temporary file, and then edited to reflect the changes in the release. + +Once the release notes are complete, you can tag the release and push it to +GitHub. + +After the release is tagged, the CI will build the release artifacts and upload +them to the GitHub release page. The release notes can then be copied from the +temporary file to the GitHub release page. + +The release notes should be formatted using [Markdown](https://guides.github.com/features/mastering-markdown/), +and not make use of line breaks unless they function as paragraph breaks. + +For examples of release notes, including language and formatting of the release +highlights, see the [Flux release notes](https://github.com/fluxcd/flux2/releases). + +## GitHub release template + +The following template can be used for the GitHub release page: + +```markdown +## Highlights + + + +### Fixes and improvements + + + +## New documentation + + + +## Components changelog + +- -controller [v](https://github.com/fluxcd/-controller/blob//CHANGELOG.md + +## CLI changelog + + +``` + +In some scenarios, you may want to include specific information about API +changes and/or upgrade procedures. Consult [the formatting of +`v2.0.0-rc.1`](https://github.com/fluxcd/flux2/releases/tag/v2.0.0-rc.1) for +such an example. + +## Slack message template + +The following template can be used for the Slack release message: + +```markdown +:sparkles: *We are pleased to announce the release of Flux [](https://github.com/fluxcd/flux2/releases/tag//)!* + + + +:hammer_and_pick: *Fixes and improvements* + + + +:books: Documentation + + + +:heart: Big thanks to all the Flux contributors that helped us with this release! +``` + +For more concrete examples, see the pinned messages in the [Flux Slack +channel](https://cloud-native.slack.com/archives/CLAJ40HV3). \ No newline at end of file From 5abf1ee8175af87a7da94ef113bd23fcbc6bf65c Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Thu, 29 Jun 2023 19:00:19 +0200 Subject: [PATCH 573/818] Address various nits Signed-off-by: Hidde Beydals --- docs/release/README.md | 2 +- docs/release/controllers.md | 7 +++---- docs/release/flux.md | 7 +++---- docs/release/packages.md | 5 ++--- docs/release/release-notes-template.md | 2 +- 5 files changed, 10 insertions(+), 13 deletions(-) diff --git a/docs/release/README.md b/docs/release/README.md index 03df7d1b..cfc6dac4 100644 --- a/docs/release/README.md +++ b/docs/release/README.md @@ -5,4 +5,4 @@ - [Flux distribution](flux.md) - [Flux APIs and controllers](controllers.md) - [Flux shared libraries](packages.md) -- [Flux release procedure](procedure.md) \ No newline at end of file +- [Flux release procedures](procedure.md) diff --git a/docs/release/controllers.md b/docs/release/controllers.md index 07f9e780..cfcccf18 100644 --- a/docs/release/controllers.md +++ b/docs/release/controllers.md @@ -1,4 +1,4 @@ -# Flux controllers release spec +# Flux controller releases The Flux controllers are [Kubernetes operators](https://kubernetes.io/docs/concepts/extend-kubernetes/operator/), @@ -13,7 +13,7 @@ Controller repositories and their interdependencies: 5. [image-reflector-controller](https://github.com/fluxcd/image-reflector-controller) 6. [image-automation-controller](https://github.com/fluxcd/image-automation-controller) (imports `fluxcd/source-controller/api` and `fluxcd/image-reflector-controller/api`) -## API versioning +## API versioning The Flux APIs (Kubernetes CRDs) follow the [Kubernetes API versioning](https://kubernetes.io/docs/reference/using-api/#api-versioning) scheme. @@ -44,7 +44,7 @@ The Custom Resources may require editing after a CRD update for which migration provided as part of the controller changelog. A beta version API becomes deprecated once a subsequent beta or stable API version is released. -A deprecated beta version is subject to removal after a six months period. +A deprecated beta version is subject to removal after a six-months period. ### Stable version @@ -148,4 +148,3 @@ Each controller release produces the following artifacts: All the artifacts are cryptographically signed and can be verified with Cosign and GitHub OIDC. The release artifacts can be accessed based on the controller name and version. - diff --git a/docs/release/flux.md b/docs/release/flux.md index 98b56da5..508f75a5 100644 --- a/docs/release/flux.md +++ b/docs/release/flux.md @@ -1,4 +1,4 @@ -# Flux release spec +# Flux releases The Flux project repository [fluxcd/flux2](https://github.com/fluxcd/flux2) contains the Flux command-line tool source code and the Kubernetes manifests for @@ -65,8 +65,8 @@ new feature or optimization ahead of schedule. ## Supported releases -For Flux the CLI and its controllers we support the last three minor releases. -Critical bug fixes such as security fixes, may be back-ported to those three minor +For Flux the CLI and its controllers, we support the last three minor releases. +Critical bug fixes, such as security fixes, may be back-ported to those three minor versions as patch releases, depending on severity and feasibility. Note that back-porting is provided by the community on a best-effort basis. @@ -139,4 +139,3 @@ The changelog contains the following information: - A list of documentation additions **Note** that the vulnerability disclosure procedure is explained on the [security page](https://fluxcd.io/security/). - diff --git a/docs/release/packages.md b/docs/release/packages.md index ccd6417f..66354d13 100644 --- a/docs/release/packages.md +++ b/docs/release/packages.md @@ -1,9 +1,9 @@ -# Flux shared packages release spec +# Flux shared package releases The Go packages in [github.com/fluxcd/pkg](https://github.com/fluxcd/pkg) are dedicated Go modules, each module has its own set of dependencies and release cycle. -These packages are primary meant for internal use in Flux controllers and +These packages are primarily meant for internal use in Flux controllers and for projects which integrate and/or extend Flux. ## Release versioning @@ -72,4 +72,3 @@ A deprecated package is marked as so in its `go.mod` e.g. // Deprecated: use github.com/fluxcd/pkg/tar instead. module github.com/fluxcd/pkg/untar ``` - diff --git a/docs/release/release-notes-template.md b/docs/release/release-notes-template.md index b64d769b..0b3a41de 100644 --- a/docs/release/release-notes-template.md +++ b/docs/release/release-notes-template.md @@ -1,4 +1,4 @@ -# Release notes template +# Flux release note template This is a template for release notes. It is intended to be used as a starting point for writing release notes for a new release. It should be copied From 9e11b860ec0c7a78edddb65704a61229317fbbb8 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Sat, 1 Jul 2023 00:05:36 +0200 Subject: [PATCH 574/818] Address release procedure review nits Signed-off-by: Hidde Beydals --- docs/release/procedure.md | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/docs/release/procedure.md b/docs/release/procedure.md index 1f586189..603ce785 100644 --- a/docs/release/procedure.md +++ b/docs/release/procedure.md @@ -23,6 +23,7 @@ clarification. * [Patch releases](#distribution-patch-releases) * [Release candidates](#distribution-release-candidates) - [Backport changes for patch releases](#backport-changes-for-patch-releases) + + [Manual backporting](#manual-backporting) ## General rules @@ -132,7 +133,7 @@ release. 7. Create `api/` and `` tags for the merge commit in `release/v1.2.x`. Ensure the tags are signed according to the [general - rules](#general-rules)., and push them to the remote repository. + rules](#general-rules), and push them to the remote repository. ```shell git switch release/v1.2.x @@ -186,7 +187,7 @@ release. 6. Create `api/` and `` tags for the merge commit in `release/v1.2.x`. Ensure the tags are signed according to the [general - rules](#general-rules)., and push them to the remote repository. + rules](#general-rules), and push them to the remote repository. ```shell git switch release/v1.2.x @@ -229,19 +230,24 @@ A preview release is a release that is not intended for production use, but rather to allow users to quickly test new features or an intended bug fix, and provide feedback. -Preview releases are made by triggering the release GitHub Actions workflow on +Preview releases are made by triggering the `release` GitHub Actions workflow on a specific Git branch. This workflow will build the container image, sign it -using Cosign, and push it to the registry. But does not require a Git tag, +using Cosign, and push it to the registry. But it does not require a Git tag, GitHub release, or a changelog entry. To create a preview release, follow the steps below. 1. Navigate to `https://github.com/fluxcd/-controller/actions/workflows/release.yml`. + 2. Click the `Run workflow` button. + 3. Select the branch to release from the `Branch` dropdown. + 4. The default values for the `image tag` (`preview`) should be correct, but can be changed if necessary. + 5. Click the green `Run workflow` button. + 6. The workflow will now run, and the container image will be pushed to the registry. Once the workflow has completed, the image reference will be available in the logs, and can be shared in the relevant issue or pull @@ -264,10 +270,10 @@ version in the `main` branch when a new controller version is released. release. 2. Create a "release series" branch for the next minor SemVer range, e.g., - `release/v1.2.x`, and push it to the remote repository. + `release/v2.2.x`, and push it to the remote repository. ```shell - git switch -c release/v1.2.x main + git switch -c release/v2.2.x main ``` 3. Prepare the required release notes for this release, see [release @@ -278,8 +284,8 @@ version in the `main` branch when a new controller version is released. rules](#general-rules), and push it to the remote repository. ```shell - git tag -s -m "v1.2.0" v1.2.0 - git push origin v1.2.0 + git tag -s -m "v2.2.0" v2.2.0 + git push origin v2.2.0 ``` 5. Confirm that the CI builds and releases the newly tagged version. @@ -293,19 +299,19 @@ version in the `main` branch when a new controller version is released. #### Distribution patch releases 1. Ensure everything to be included in the release is backported to the - "release series" branch (e.g., `release/v1.2.x`). If not, refer to the + "release series" branch (e.g., `release/v2.2.x`). If not, refer to the [backporting](#backport-changes-for-patch-releases) section. 2. Prepare the required release notes for this release, see [release notes](#distribution-release-notes) for more information. 3. Tag the release series branch with the SemVer version of the release, e.g., - `v1.2.1`. Ensure the tag is signed according to the [general + `v2.2.1`. Ensure the tag is signed according to the [general rules](#general-rules), and push it to the remote repository. ```shell - git tag -s -m "v1.2.1" v1.2.1 - git push origin v1.2.1 + git tag -s -m "v2.2.1" v2.2.1 + git push origin v2.2.1 ``` 4. Confirm that the CI builds and releases the newly tagged version. @@ -322,7 +328,7 @@ of the distribution. To create a first release candidate, follow the steps to create a [minor release](#distribution-minor-releases), but use the `rc.X` suffix for SemVer -version to release (e.g., `v1.2.0-rc.1`). +version to release (e.g., `v2.2.0-rc.1`). Once the release series branch is created, subsequent release candidates and the final (non-RC) release should follow the procedure for [patch controller From 926842a21688dc07fe9f8fbd33b5e5ed0dbb75e1 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Mon, 3 Jul 2023 11:12:01 +0200 Subject: [PATCH 575/818] Address review comment section titles Signed-off-by: Hidde Beydals --- docs/release/procedure.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/docs/release/procedure.md b/docs/release/procedure.md index 603ce785..b9b2f07b 100644 --- a/docs/release/procedure.md +++ b/docs/release/procedure.md @@ -14,10 +14,10 @@ clarification. - [Component types](#component-types) + [Shared packages](#shared-packages) + [Controllers](#controllers) - * [Minor releases](#controller-minor-releases) - * [Patch releases](#controller-patch-releases) - * [Release candidates](#controller-release-candidates) - * [Preview releases](#controller-preview-releases) + * [Minor releases](#controllers-minor-releases) + * [Patch releases](#controllers-patch-releases) + * [Release candidates](#controllers-release-candidates) + * [Preview releases](#controllers-preview-releases) + [Distribution](#distribution) * [Minor releases](#distribution-minor-releases) * [Patch releases](#distribution-patch-releases) @@ -90,7 +90,7 @@ To release a [controller](controllers.md) as a project maintainer, follow the steps below. Note that the release procedure differs depending on the type of release. -##### Controller minor releases +##### Controllers: minor releases 1. Checkout the `main` branch and pull changes from the remote repository. @@ -148,7 +148,7 @@ release. 9. Create a pull request for the release series branch and merge it into `main`. -##### Controller patch releases +##### Controllers: patch releases 1. Ensure everything to be included in the release is backported to the "release series" branch (e.g., `release/v1.2.x`). If not, refer to the @@ -210,7 +210,7 @@ release. git push origin pick-changelog-v1.2.1 ``` -#### Controller release candidates +#### Controllers: release candidates In some cases, it may be necessary to release a [release candidate](controllers.md#release-candidates) of a controller. @@ -223,7 +223,7 @@ Once the release series branch is created, subsequent release candidates and the final (non-RC) release should follow the procedure for [patch controller releases](#controller-patch-releases). -#### Controller preview releases +#### Controllers: preview releases In some cases, it may be necessary to release a preview of a controller. A preview release is a release that is not intended for production use, but @@ -263,7 +263,7 @@ to release [controllers](#controllers) before releasing the distribution. Automation is in place to automatically create a pull request to update the version in the `main` branch when a new controller version is released. -#### Distribution minor releases +#### Distribution: minor releases 1. Ensure everything to be included in the release is merged into the `main` branch, including any controller releases you wish to include in the @@ -296,7 +296,7 @@ version in the `main` branch when a new controller version is released. 7. Post a message in the [`#flux` CNCF Slack channel](https://cloud-native.slack.com/archives/CLAJ40HV3) announcing the release, and pin it. -#### Distribution patch releases +#### Distribution: patch releases 1. Ensure everything to be included in the release is backported to the "release series" branch (e.g., `release/v2.2.x`). If not, refer to the @@ -321,7 +321,7 @@ version in the `main` branch when a new controller version is released. 6. Post a message in the [`#flux` CNCF Slack channel](https://cloud-native.slack.com/archives/CLAJ40HV3) -#### Distribution release candidates +#### Distribution: release candidates In some cases, it may be necessary to release a [release candidate](flux.md#release-candidates) of the distribution. @@ -334,7 +334,7 @@ Once the release series branch is created, subsequent release candidates and the final (non-RC) release should follow the procedure for [patch controller releases](#controller-patch-releases). -#### Distribution release notes +#### Distribution: release notes The release notes template for Flux distributions is available in the [release-notes-template.md](release-notes-template.md) file. From 1a8798a5d43657977b553091976d03b58dea9046 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Mon, 3 Jul 2023 14:58:01 +0300 Subject: [PATCH 576/818] Link to release cadence from minor section Signed-off-by: Stefan Prodan --- docs/release/controllers.md | 23 ++++++++++++----------- docs/release/flux.md | 12 ++++++++---- docs/release/procedure.md | 9 ++++----- 3 files changed, 24 insertions(+), 20 deletions(-) diff --git a/docs/release/controllers.md b/docs/release/controllers.md index cfcccf18..1459fa22 100644 --- a/docs/release/controllers.md +++ b/docs/release/controllers.md @@ -99,14 +99,9 @@ Note that breaking changes may occur if required by a security vulnerability fix In addition, minor releases are used when updating Kubernetes dependencies such as `k8s.io/api` from one minor version to another. -In effect, this means a new minor version will at least be released for all Flux -controllers approximately every four months, following each Kubernetes minor version release. -To properly validate the controllers against the latest Kubernetes version, -we typically allocate a time window of around two weeks for end-to-end testing of Flux controllers. - -It is worth noting that in certain scenarios where project dependencies are not in sync with -the Kubernetes version or conflicts arise, this two-week timeframe may prove insufficient, -requiring additional time to address the issues appropriately. +In effect, this means a controller minor version will be released at least every four months, after each +Kubernetes minor version release. For in-depth information about this, please refer to the +[release cadence](#release-cadence) section of this document. ### Major releases @@ -117,11 +112,17 @@ and a support window of one year will be provided for the previous major version ## Release cadence -Flux controllers are at least released at the same rate as Kubernetes, following their cadence of three -minor releases per year. After each Kubernetes minor release, all controllers are tested against the latest -Kubernetes version and then released approximately two weeks after Kubernetes. +Flux controllers are _at least_ released at the same rate as Kubernetes, following their cadence of three +minor releases per year. + +To properly validate the controllers against the latest Kubernetes version, +we typically allocate a time window of around two weeks for end-to-end testing of Flux controllers. The newly released controllers offer support for Kubernetes N-2 minor versions. +It is worth noting that in certain scenarios where project dependencies are not in sync with +the Kubernetes version or conflicts arise, this two-week timeframe may prove insufficient, +requiring additional time to address the issues appropriately. + A Flux controller may have more than three minor releases per year, if maintainers decide to ship a new feature or optimisation ahead of schedule. diff --git a/docs/release/flux.md b/docs/release/flux.md index 508f75a5..c030392d 100644 --- a/docs/release/flux.md +++ b/docs/release/flux.md @@ -42,9 +42,9 @@ Note that breaking changes may occur if required by a security vulnerability fix Minor releases are used when updating the Flux controllers or Kubernetes dependencies from one minor version to another. -In effect, this means a Flux minor version will be released at least every four months after each -Kubernetes minor version release. To properly validate the Flux CLI and controllers against -the latest Kubernetes version, we reserve a time window of at least two weeks for end-to-end testing. +In effect, this means a Flux minor version will be released at least every four months, after each +Kubernetes minor version release. For in-depth information about this, please refer to the +[release cadence](#release-cadence) section of this document. ### Major releases @@ -55,11 +55,15 @@ and a support window of one year will be provided for the previous major version ## Release cadence -Flux is at least released at the same rate as Kubernetes, following their cadence of three +Flux is _at least_ released at the same rate as Kubernetes, following their cadence of three minor releases per year. After each Kubernetes minor release, the CLI and all controllers are tested against the latest Kubernetes version and are released approximately two weeks after Kubernetes. The newly released Flux version offers support for Kubernetes N-2 minor versions. +It is worth noting that in certain scenarios where project dependencies are not in sync with +the Kubernetes version or conflicts arise, this two-week timeframe may prove insufficient, +requiring additional time to address the issues appropriately. + Flux may have more than three minor releases per year if maintainers decide to ship a new feature or optimization ahead of schedule. diff --git a/docs/release/procedure.md b/docs/release/procedure.md index b9b2f07b..084340e6 100644 --- a/docs/release/procedure.md +++ b/docs/release/procedure.md @@ -216,12 +216,12 @@ In some cases, it may be necessary to release a [release candidate](controllers.md#release-candidates) of a controller. To create a first release candidate, follow the steps to create a [minor -release](#controller-minor-releases), but use the `rc.X` suffix for SemVer +release](#controllers-minor-releases), but use the `rc.X` suffix for SemVer version to release (e.g., `v1.2.0-rc.1`). Once the release series branch is created, subsequent release candidates and the final (non-RC) release should follow the procedure for [patch controller -releases](#controller-patch-releases). +releases](#controllers-patch-releases). #### Controllers: preview releases @@ -331,13 +331,12 @@ release](#distribution-minor-releases), but use the `rc.X` suffix for SemVer version to release (e.g., `v2.2.0-rc.1`). Once the release series branch is created, subsequent release candidates and -the final (non-RC) release should follow the procedure for [patch controller -releases](#controller-patch-releases). +the final (non-RC) release should follow the procedure for [patch releases](#distribution-patch-releases). #### Distribution: release notes The release notes template for Flux distributions is available in the -[release-notes-template.md](release-notes-template.md) file. +[release-notes-template.md](https://github.com/fluxcd/flux2/blob/main/docs/release/release-notes-template.md) file. ## Backport changes for patch releases From 8ca8b92f92a52a0eb773a904c69b7638da6b85e7 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Tue, 4 Jul 2023 12:21:22 +0300 Subject: [PATCH 577/818] ci: run backport under fluxcdbot account Signed-off-by: Stefan Prodan --- .github/workflows/backport.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/backport.yaml b/.github/workflows/backport.yaml index 55c1fd1d..b8ddc9b4 100644 --- a/.github/workflows/backport.yaml +++ b/.github/workflows/backport.yaml @@ -23,6 +23,8 @@ jobs: uses: korthout/backport-action@bf5fdd624b35f95d5b85991a728bd5744e8c6cf2 # v1.3.1 # xref: https://github.com/korthout/backport-action#inputs with: + token: ${{ secrets.BOT_GITHUB_TOKEN }} + github_workspace: ${{ github.workspace }} # Match labels with a pattern `backport:` label_pattern: '^backport:([^ ]+)$' # A bit shorter pull-request title than the default From 5356436c945571a844c2c06a311eb5d9303a8940 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Tue, 4 Jul 2023 12:26:08 +0300 Subject: [PATCH 578/818] ci: enable workflows for `release/**` branches Signed-off-by: Stefan Prodan --- .github/workflows/backport.yaml | 10 +++------- .github/workflows/e2e-arm64.yaml | 2 +- .github/workflows/e2e-bootstrap.yaml | 4 ++-- .github/workflows/e2e.yaml | 4 ++-- .github/workflows/scan.yaml | 4 ++-- .github/workflows/update.yaml | 2 +- 6 files changed, 11 insertions(+), 15 deletions(-) diff --git a/.github/workflows/backport.yaml b/.github/workflows/backport.yaml index b8ddc9b4..86c795d1 100644 --- a/.github/workflows/backport.yaml +++ b/.github/workflows/backport.yaml @@ -4,15 +4,11 @@ on: pull_request_target: types: [closed, labeled] -permissions: - contents: read - jobs: pull-request: runs-on: ubuntu-latest permissions: - contents: write - pull-requests: write + contents: read if: github.event.pull_request.state == 'closed' && github.event.pull_request.merged && (github.event_name != 'labeled' || startsWith('backport:', github.event.label.name)) steps: - name: Checkout @@ -23,8 +19,8 @@ jobs: uses: korthout/backport-action@bf5fdd624b35f95d5b85991a728bd5744e8c6cf2 # v1.3.1 # xref: https://github.com/korthout/backport-action#inputs with: - token: ${{ secrets.BOT_GITHUB_TOKEN }} - github_workspace: ${{ github.workspace }} + # Use token to allow workflows to be triggered for the created PR + github_token: ${{ secrets.BOT_GITHUB_TOKEN }} # Match labels with a pattern `backport:` label_pattern: '^backport:([^ ]+)$' # A bit shorter pull-request title than the default diff --git a/.github/workflows/e2e-arm64.yaml b/.github/workflows/e2e-arm64.yaml index f33dfd2e..1deac0cc 100644 --- a/.github/workflows/e2e-arm64.yaml +++ b/.github/workflows/e2e-arm64.yaml @@ -3,7 +3,7 @@ name: e2e-arm64 on: workflow_dispatch: push: - branches: [ main, update-components, e2e-*, release-* ] + branches: [ 'main', 'update-components', 'e2e-*', 'release/**' ] permissions: contents: read diff --git a/.github/workflows/e2e-bootstrap.yaml b/.github/workflows/e2e-bootstrap.yaml index 631f1069..c61b9944 100644 --- a/.github/workflows/e2e-bootstrap.yaml +++ b/.github/workflows/e2e-bootstrap.yaml @@ -3,9 +3,9 @@ name: e2e-bootstrap on: workflow_dispatch: push: - branches: [ main, release-* ] + branches: [ 'main', 'release/**' ] pull_request: - branches: [ main, release-* ] + branches: [ 'main', 'release/**' ] permissions: contents: read diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index d7655d6e..d5b7b6fe 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -3,9 +3,9 @@ name: e2e on: workflow_dispatch: push: - branches: [ main, release-* ] + branches: [ 'main', 'release/**' ] pull_request: - branches: [ main, release-* ] + branches: [ 'main', 'release/**' ] permissions: contents: read diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index f412388c..ca68607f 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -3,9 +3,9 @@ name: scan on: workflow_dispatch: push: - branches: [ main ] + branches: [ 'main', 'release/**' ] pull_request: - branches: [ main ] + branches: [ 'main', 'release/**' ] schedule: - cron: '18 10 * * 3' diff --git a/.github/workflows/update.yaml b/.github/workflows/update.yaml index ff869a5a..67996a8a 100644 --- a/.github/workflows/update.yaml +++ b/.github/workflows/update.yaml @@ -99,7 +99,7 @@ jobs: body: | ${{ steps.update.outputs.pr_body }} labels: | - area/build + dependencies reviewers: ${{ secrets.ASSIGNEES }} - name: Check output From 8e61fe805cf18610a9fe363123749e44112f5a5e Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Tue, 4 Jul 2023 13:32:24 +0300 Subject: [PATCH 579/818] ci: group all GH action updates under the same PR Signed-off-by: Stefan Prodan --- .github/dependabot.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 9e16176a..e07776c5 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -4,6 +4,13 @@ updates: - package-ecosystem: "github-actions" directory: "/" labels: ["area/ci", "dependencies"] + groups: + # Group all updates together, so that they are all applied in a single PR. + # Grouped updates are currently in beta and is subject to change. + # xref: https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file#groups + ci: + patterns: + - "*" schedule: # By default, this will be on a monday. interval: "weekly" From 5690b639cd747c0a0e41b5c95462fe89da66f880 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Tue, 4 Jul 2023 14:18:43 +0300 Subject: [PATCH 580/818] Run conformance tests for Kubernetes v1.27.3 Signed-off-by: Stefan Prodan --- .github/workflows/e2e-arm64.yaml | 2 +- .github/workflows/e2e-bootstrap.yaml | 7 ++++--- .github/workflows/e2e.yaml | 7 ++++--- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/.github/workflows/e2e-arm64.yaml b/.github/workflows/e2e-arm64.yaml index 1deac0cc..ee800cf2 100644 --- a/.github/workflows/e2e-arm64.yaml +++ b/.github/workflows/e2e-arm64.yaml @@ -17,7 +17,7 @@ jobs: matrix: # Keep this list up-to-date with https://endoflife.date/kubernetes # Check which versions are available on DockerHub with 'crane ls kindest/node' - KUBERNETES_VERSION: [ 1.25.8, 1.26.3, 1.27.1 ] + KUBERNETES_VERSION: [ 1.25.8, 1.26.3, 1.27.3 ] steps: - name: Checkout uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 diff --git a/.github/workflows/e2e-bootstrap.yaml b/.github/workflows/e2e-bootstrap.yaml index c61b9944..08700a42 100644 --- a/.github/workflows/e2e-bootstrap.yaml +++ b/.github/workflows/e2e-bootstrap.yaml @@ -6,6 +6,7 @@ on: branches: [ 'main', 'release/**' ] pull_request: branches: [ 'main', 'release/**' ] + paths-ignore: [ 'docs/**', 'rfcs/**' ] permissions: contents: read @@ -27,12 +28,12 @@ jobs: - name: Setup Kubernetes uses: helm/kind-action@fa81e57adff234b2908110485695db0f181f3c67 # v1.7.0 with: - version: v0.17.0 + version: v0.20.0 cluster_name: kind # The versions below should target the newest Kubernetes version # Keep this up-to-date with https://endoflife.date/kubernetes - node_image: kindest/node:v1.26.0 - kubectl_version: v1.26.2 + node_image: kindest/node:v1.27.3@sha256:3966ac761ae0136263ffdb6cfd4db23ef8a83cba8a463690e98317add2c9ba72 + kubectl_version: v1.27.3 - name: Setup Kustomize uses: fluxcd/pkg/actions/kustomize@main - name: Build diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index d5b7b6fe..09be7645 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -6,6 +6,7 @@ on: branches: [ 'main', 'release/**' ] pull_request: branches: [ 'main', 'release/**' ] + paths-ignore: [ 'docs/**', 'rfcs/**' ] permissions: contents: read @@ -31,13 +32,13 @@ jobs: - name: Setup Kubernetes uses: helm/kind-action@fa81e57adff234b2908110485695db0f181f3c67 # v1.7.0 with: - version: v0.17.0 + version: v0.20.0 cluster_name: kind config: .github/kind/config.yaml # disable KIND-net # The versions below should target the newest Kubernetes version # Keep this up-to-date with https://endoflife.date/kubernetes - node_image: kindest/node:v1.26.0 - kubectl_version: v1.26.2 + node_image: kindest/node:v1.27.3@sha256:3966ac761ae0136263ffdb6cfd4db23ef8a83cba8a463690e98317add2c9ba72 + kubectl_version: v1.27.3 - name: Setup Calico for network policy run: | kubectl apply -f https://docs.projectcalico.org/v3.25/manifests/calico.yaml From ddcabbf95d96a205fc1fefeddf9a8690ebe18984 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Tue, 4 Jul 2023 15:13:06 +0300 Subject: [PATCH 581/818] docs: link to releases spec from website Signed-off-by: Stefan Prodan --- docs/release/README.md | 11 +- docs/release/controllers.md | 151 -------------- docs/release/flux.md | 145 -------------- docs/release/packages.md | 74 ------- docs/release/procedure.md | 378 ------------------------------------ 5 files changed, 6 insertions(+), 753 deletions(-) delete mode 100644 docs/release/controllers.md delete mode 100644 docs/release/flux.md delete mode 100644 docs/release/packages.md delete mode 100644 docs/release/procedure.md diff --git a/docs/release/README.md b/docs/release/README.md index cfc6dac4..0faa5ad2 100644 --- a/docs/release/README.md +++ b/docs/release/README.md @@ -1,8 +1,9 @@ -# Flux Release Documentation +# Flux Dev Documentation ## Release specifications -- [Flux distribution](flux.md) -- [Flux APIs and controllers](controllers.md) -- [Flux shared libraries](packages.md) -- [Flux release procedures](procedure.md) +- [Flux distribution](https://fluxcd.io/flux/releases/) +- [Flux APIs and controllers](https://fluxcd.io/flux/releases/controllers/) +- [Flux shared packages](https://fluxcd.io/flux/releases/packages/) +- [Flux release procedures](https://fluxcd.io/flux/releases/procedure/) +- [Flux release notes template](release-notes-template.md) diff --git a/docs/release/controllers.md b/docs/release/controllers.md deleted file mode 100644 index 1459fa22..00000000 --- a/docs/release/controllers.md +++ /dev/null @@ -1,151 +0,0 @@ -# Flux controller releases - -The Flux controllers are -[Kubernetes operators](https://kubernetes.io/docs/concepts/extend-kubernetes/operator/), -each controller has its own Git repository and release cycle (see below for details). - -Controller repositories and their interdependencies: - -1. [source-controller](https://github.com/fluxcd/source-controller) -2. [kustomize-controller](https://github.com/fluxcd/kustomize-controller) (imports `fluxcd/source-controller/api`) -3. [helm-controller](https://github.com/fluxcd/helm-controller) (imports `fluxcd/source-controller/api`) -4. [notification-controller](https://github.com/fluxcd/notification-controller) -5. [image-reflector-controller](https://github.com/fluxcd/image-reflector-controller) -6. [image-automation-controller](https://github.com/fluxcd/image-automation-controller) (imports `fluxcd/source-controller/api` and `fluxcd/image-reflector-controller/api`) - -## API versioning - -The Flux APIs (Kubernetes CRDs) follow the -[Kubernetes API versioning](https://kubernetes.io/docs/reference/using-api/#api-versioning) scheme. - -### Alpha version - -An alpha version API e.g. `v1alpha1` is considered experimental and should be used on -test environments only. - -The schema of objects may change in incompatible ways in a later API version. -The Custom Resources may require editing and re-creating after a CRD update. - -An alpha version API becomes deprecated once a subsequent alpha or beta API version is released. -A deprecated alpha version is subject to removal after a three month period. - -An alpha API is introduced when its proposal reaches the `implementable` phase in the -[Flux RFC process](https://github.com/fluxcd/flux2/tree/main/rfcs). -We encourage users to try out the alpha APIs and provide feedback -(e.g. on CNCF Slack or in the form of GitHub issues/discussions) -which is extremely valuable during early stages of development. - -### Beta version - -A beta version API e.g. `v2beta1` is considered well-tested and safe to use in production. - -The schema of objects may change in incompatible ways in a subsequent beta or stable API version. -The Custom Resources may require editing after a CRD update for which migration instructions will be -provided as part of the controller changelog. - -A beta version API becomes deprecated once a subsequent beta or stable API version is released. -A deprecated beta version is subject to removal after a six-months period. - -### Stable version - -A stable API version, e.g. `v2`, is considered feature complete. - -Any changes to the object schema do not require editing or re-creating of Custom Resources. -Schema fields can't be removed, only new fields can be added with a default value that -doesn't affect the controller's current behaviour. - -A stable API version becomes deprecated once a subsequent stable version is released. -Stable API versions are not subject to removal in any future release within a controller major version. - -In effect, this means that for as long as Flux `v2` is being maintained, all the stable API versions -will be supported. - -## Controller versioning - -The Flux controllers and their Go API packages are released by following the -[Go module version numbering](https://go.dev/doc/modules/version-numbers) conventions: - -- `vX.Y.Z-rc.W` release candidates e.g. `v1.0.0-rc.1` -- `vX.Y.Z` stable releases e.g. `v1.0.0` - -The API versioning and controller versioning are indirectly related. For example, -a source-controller minor release `v1.1.0` can introduce a new API version -`v1beta1` for a Kind `XRepository` in the `source.toolkit.fluxcd.io` group. - -### Release candidates - -Release candidates are intended for testing new features or improvements before a final release. - -In most cases, a maintainer will publish a release candidate of a controller for Flux users -to tests it on their staging clusters. Release candidates are not meant to be deployed in production -unless advised to do so by a maintainer. - -### Patch releases - -Patch releases are intended for critical bug fixes to the latest minor version, such as addressing security -vulnerabilities or fixes to severe problems with no workaround. - -Patch releases do not contain breaking changes, feature additions or any type of user-facing changes. -If a security fix requires a breaking change, then a minor release will provide the fix. - -We expect users to be running the latest patch release of a given minor release as soon as the -controller release is included in a Flux patch release. - -### Minor releases - -Minor releases are intended for backwards compatible feature additions and improvements. -Note that breaking changes may occur if required by a security vulnerability fix. - -In addition, minor releases are used when updating Kubernetes dependencies such -as `k8s.io/api` from one minor version to another. - -In effect, this means a controller minor version will be released at least every four months, after each -Kubernetes minor version release. For in-depth information about this, please refer to the -[release cadence](#release-cadence) section of this document. - -### Major releases - -Major releases are intended for drastic changes in the controller behaviour or security stance. - -A controller major release will be announced ahead of time throughout all communication channels, -and a support window of one year will be provided for the previous major version. - -## Release cadence - -Flux controllers are _at least_ released at the same rate as Kubernetes, following their cadence of three -minor releases per year. - -To properly validate the controllers against the latest Kubernetes version, -we typically allocate a time window of around two weeks for end-to-end testing of Flux controllers. -The newly released controllers offer support for Kubernetes N-2 minor versions. - -It is worth noting that in certain scenarios where project dependencies are not in sync with -the Kubernetes version or conflicts arise, this two-week timeframe may prove insufficient, -requiring additional time to address the issues appropriately. - -A Flux controller may have more than three minor releases per year, if maintainers decide to ship a -new feature or optimisation ahead of schedule. - -## Supported releases - -For Flux controllers we support the last three minor releases. - -Security fixes may be back-ported to those three minor versions as patch releases, -depending on severity and feasibility. - -Note that back-porting is provided by the community on a best-effort basis. - -## Release artifacts - -Each controller release produces the following artifacts: - -- Source code (GitHub Releases page) -- Software Bill of Materials in SPDX format (GitHub Releases page) -- SLSA provenance attestations (GitHub Releases page) -- Kubernetes manifests such as CRDs and Deployments (GitHub Releases page) -- Signed checksums of source code, SBOM and manifests (GitHub Releases page) -- Multi-arch container images (GitHub Container Registry and DockerHub) - -All the artifacts are cryptographically signed and can be verified with Cosign and GitHub OIDC. - -The release artifacts can be accessed based on the controller name and version. diff --git a/docs/release/flux.md b/docs/release/flux.md deleted file mode 100644 index c030392d..00000000 --- a/docs/release/flux.md +++ /dev/null @@ -1,145 +0,0 @@ -# Flux releases - -The Flux project repository [fluxcd/flux2](https://github.com/fluxcd/flux2) contains -the Flux command-line tool source code and the Kubernetes manifests for -bundling the [Flux controllers](controllers.md) into a distributable package. - -## Release versioning - -Flux is released by following the [semver](https://semver.org/) conventions: - -- `vX.Y.Z-rc.W` release candidates e.g. `v2.0.0-rc.1` -- `vX.Y.Z` stable releases e.g. `v2.0.0` - -The Flux project maintains release branches for the most recent three minor releases -e.g. `release/2.0.x`, `release/2.1.x` and `release/2.2.x`. - -### Release candidates - -Release candidates are intended for testing new features or improvements before a final release. - -In most cases, a maintainer will publish a release candidate for Flux users to test on their -staging clusters. Release candidates are not meant to be deployed in production unless advised -to do so by a maintainer. - -Release candidates can be unstable and they are deprecated by subsequent RC or stable versions. - -### Patch releases - -Patch releases are intended for critical bug fixes to the latest minor version, -such as addressing security vulnerabilities or fixes to severe problems with no workaround. - -Patch releases do not contain breaking changes, feature additions or any type of user-facing changes. -If a CVE fix requires a breaking change, then a minor release will provide the fix. - -We expect users to be running the latest patch release of a given minor release. - -### Minor releases - -Minor releases are intended for backward-compatible feature additions and improvements. -Note that breaking changes may occur if required by a security vulnerability fix. - -Minor releases are used when updating the Flux controllers or Kubernetes dependencies -from one minor version to another. - -In effect, this means a Flux minor version will be released at least every four months, after each -Kubernetes minor version release. For in-depth information about this, please refer to the -[release cadence](#release-cadence) section of this document. - -### Major releases - -Major releases are intended for drastic changes to the Flux behaviour or security stance. - -A Flux major release will be announced ahead of time throughout all communication channels, -and a support window of one year will be provided for the previous major version. - -## Release cadence - -Flux is _at least_ released at the same rate as Kubernetes, following their cadence of three -minor releases per year. After each Kubernetes minor release, the CLI and all controllers are -tested against the latest Kubernetes version and are released approximately two weeks after Kubernetes. -The newly released Flux version offers support for Kubernetes N-2 minor versions. - -It is worth noting that in certain scenarios where project dependencies are not in sync with -the Kubernetes version or conflicts arise, this two-week timeframe may prove insufficient, -requiring additional time to address the issues appropriately. - -Flux may have more than three minor releases per year if maintainers decide to ship a -new feature or optimization ahead of schedule. - -## Supported releases - -For Flux the CLI and its controllers, we support the last three minor releases. -Critical bug fixes, such as security fixes, may be back-ported to those three minor -versions as patch releases, depending on severity and feasibility. - -Note that back-porting is provided by the community on a best-effort basis. - -The Flux controllers are guaranteed to be compatible with each other -within one minor version (older or newer) of Flux. - -The `flux` command-line tool is supported within one minor version (older or newer) of Flux. - -## Supported upgrades - -Users can upgrade from any `v2.x` release to any other `v2.x` release (the latest patch version). - -After upgrade, [Flux Custom Resources](controllers.md#api-versioning) may require editing, -for which migration instructions are provided as part of the -[changelog](#release-changelog). - -We expect users to keep Flux up-to-date on their clusters using automation tools -such as [Flux GitHub Actions](../../action) and -[Renovatebot](https://docs.renovatebot.com/modules/manager/flux/). - -Various vendors such as Microsoft Azure, D2iQ, Weaveworks and others offer a managed Flux service, -and it's their responsibility to keep Flux up-to-date and free of CVEs. -The Flux team communicates security issues to vendors as described in the -[Coordinated Vulnerability Disclosure document](https://github.com/fluxcd/.github/blob/14b735cdb23ec80d528ff4f71e562405a2f00639/CVD_LIST.md). - -## Kubernetes supported versions - -The Flux CLI and controllers offer support for all Kubernetes versions supported upstream. - -Every Flux release undergoes a series of conformance and end-to-end tests for -the latest Kubernetes minor release. The test suite is run against -[Kubernetes Kind](https://kind.sigs.k8s.io/) for both AMD64 and ARM64 distributions. - -We expect users to keep Kubernetes up-to-date with the latest patch version of a -supported minor release. Once a Kubernetes version reaches [end-of-life](https://endoflife.date/kubernetes), -we can't guarantee the next Flux release will work with it, -as we don't run end-to-end testing for EOL Kubernetes versions. - -## Release artifacts - -Each Flux release produces the following artifacts: - -- Source code (GitHub Releases page) -- Software Bill of Materials in SPDX format (GitHub Releases page) -- SLSA provenance attestations (GitHub Releases page) -- Kubernetes manifests of all controllers (GitHub Releases page) -- CLI binaries for Linux, macOS and Windows (GitHub Releases page) -- Signed checksums of source code, SBOM and manifests (GitHub Releases page) -- Multi-arch container images of the CLI (GitHub Container Registry and DockerHub) -- OCI artifacts with the Kubernetes manifests (GitHub Container Registry and DockerHub) -- CLI [Homebrew](https://brew.sh/) formulas for Linux and macOS - -All the artifacts are cryptographically signed and can be verified with Cosign. - -The release artifacts can be accessed based on the Flux version. - -## Release changelog - -All released versions of Flux are published on [GitHub Releases page](https://github.com/fluxcd/flux2/releases) -along with a list of changes from the previous release. - -The changelog contains the following information: - -- Security vulnerabilities fixes (if any) -- Breaking changes and migration instructions (if any) -- A summary of new features and improvements for the Flux APIs and controllers -- Links to the changelog of each controller version included in a Flux release -- A list of new features, improvements and bug fixes for the Flux CLI -- A list of documentation additions - -**Note** that the vulnerability disclosure procedure is explained on the [security page](https://fluxcd.io/security/). diff --git a/docs/release/packages.md b/docs/release/packages.md deleted file mode 100644 index 66354d13..00000000 --- a/docs/release/packages.md +++ /dev/null @@ -1,74 +0,0 @@ -# Flux shared package releases - -The Go packages in [github.com/fluxcd/pkg](https://github.com/fluxcd/pkg) are dedicated Go modules, -each module has its own set of dependencies and release cycle. - -These packages are primarily meant for internal use in Flux controllers and -for projects which integrate and/or extend Flux. - -## Release versioning - -The Flux packages are released by following the -[Go module version numbering](https://go.dev/doc/modules/version-numbers) conventions: - -- `NAME/vX.Y.Z-rc.W` release candidates e.g. `runtime/v1.0.0-rc.1` -- `NAME/vX.Y.Z` stable releases e.g. `runtime/v1.0.0` - -To import or update a Flux package in a Go project: - -```shell -go get github.com/fluxcd/pkg/runtime@v1.0.0 -``` - -### Release candidates - -Release candidates are intended for testing new features or improvements. - -In most cases, a maintainer will cut a release candidate of a package to include it -in a Flux controller release candidate. - -Release candidates are not meant to be included in Flux stable releases. -Before cutting a stable release of a controller, all imported Flux packages must be pinned to a stable version. - -### Patch releases - -Patch releases are intended for critical bug fixes to the latest minor version, such as addressing security -vulnerabilities or fixes to severe problems with no workaround. - -Patch releases should not contain breaking changes, feature additions or any type of improvements. - -Patch releases should be used when updating dependencies such as `k8s.io/api` from one patch version to another. - -### Minor releases - -Minor releases are intended for backwards compatible feature additions and improvements. - -Minor releases should be used when updating dependencies such as `k8s.io/api` from one minor version to another. -If a [Kubernetes minor version](https://github.com/kubernetes/sig-release/blob/master/release-engineering/versioning.md) -upgrade requires a breaking change (e.g. removal of an API such as `PodSecurityPolicy`) in a Flux package public API, -then a major version release is necessary. - -### Major releases - -Major releases are intended for backwards incompatible feature additions and improvements. - -Any change to a package public API, such as a change to a Go function signature, requires a new major release. - -## Supported releases - -For Flux Go packages we only support the latest stable release. We expect for projects that depend on -Flux packages to stay up-to-date by automating the Go modules updates with tools like Dependabot. - -In effect, this means we'll not backport CVE fixes to an older minor or major version of a package. - -## Deprecation policy - -A Flux Go package can be deprecated at any time. Usually a deprecated package may be replaced a -different one, but there are no guarantees to always have a suitable replacement. - -A deprecated package is marked as so in its `go.mod` e.g. - -```go -// Deprecated: use github.com/fluxcd/pkg/tar instead. -module github.com/fluxcd/pkg/untar -``` diff --git a/docs/release/procedure.md b/docs/release/procedure.md deleted file mode 100644 index 084340e6..00000000 --- a/docs/release/procedure.md +++ /dev/null @@ -1,378 +0,0 @@ -# Flux release procedures - -This document provides an overview of the release procedures for each component -type in the Flux project. It is intended for project maintainers, but may also -be useful for contributors who want to understand the release process. - -If you have any questions, please reach out to another maintainer for -clarification. - -## Table of contents - -- [General rules](#general-rules) - + [Signing releases](#signing-releases) -- [Component types](#component-types) - + [Shared packages](#shared-packages) - + [Controllers](#controllers) - * [Minor releases](#controllers-minor-releases) - * [Patch releases](#controllers-patch-releases) - * [Release candidates](#controllers-release-candidates) - * [Preview releases](#controllers-preview-releases) - + [Distribution](#distribution) - * [Minor releases](#distribution-minor-releases) - * [Patch releases](#distribution-patch-releases) - * [Release candidates](#distribution-release-candidates) -- [Backport changes for patch releases](#backport-changes-for-patch-releases) - + [Manual backporting](#manual-backporting) - -## General rules - -### Signing releases - -To ensure the integrity and authenticity of releases, all releases must be -signed with a GPG key. The public key must be uploaded to the GitHub account of -the maintainer, and the private key must be kept secure. - -In addition, we recommend the following practices: - -1. Safeguard your GPG private key, preferably using a hardware security key - like a YubiKey. -2. Use a subkey dedicated to signing releases, set an expiration date for - added security, and keep the master key offline. Refer to - [this guide](https://riseup.net/en/security/message-security/openpgp/best-practices#key-configuration) - for detailed instructions. - -We understand that this may seem overwhelming. If you are not comfortable with -the process, don't hesitate to seek assistance from another maintainer who has -experience with signing releases. - -Please note that SSH signatures are not supported at this time due to limited -availability of SSH signature verification outside the `git` CLI. - -## Component types - -### Shared packages - -To release a [package](packages.md) as a project maintainer, follow these steps: - -1. Tag the `main` branch using SemVer. -2. Sign the tag according to the [general rules](#general-rules). -3. Push the signed tag to the upstream repository. - -Use the following commands as an example: - -```shell -git clone https://github.com/fluxcd/pkg.git -git switch main -git tag -s -m "/" "/" -git push origin "/" -``` - -In the commands above, `` represents the relative path to the directory -containing the `go.mod` file, and `` refers to the SemVer version of the -release. For instance, `runtime/v1.0.0` for [`fluxcd/pkg/runtime`](https://github.com/fluxcd/pkg/tree/main/runtime), -or `http/fetch/v0.1.0` for [`fluxcd/pkg/http/fetch`](https://github.com/fluxcd/pkg/tree/main/http/fetch). - -Before cutting a release candidate, ensure that the package's tests pass -successfully. - -Here's an example of releasing a candidate from a feature branch: - -```shell -git switch -git tag -s -m "/-.1" "/-.1" -git push origin "/-.1" -``` - -### Controllers - -To release a [controller](controllers.md) as a project maintainer, follow the -steps below. Note that the release procedure differs depending on the type of -release. - -##### Controllers: minor releases - -1. Checkout the `main` branch and pull changes from the remote repository. - -2. Create a "release series" branch for the next minor SemVer range, e.g., - `release/v1.2.x`, and push it to the remote repository. - - ```shell - git switch -c release/v1.2.x main - ``` - -3. From the release series branch, create a release preparation branch for the - specific release. - - ```shell - git switch -c release-v1.2.0 release/v1.2.x - ``` - -4. Add an entry to `CHANGELOG.md` for the new release and commit the changes. - - ```shell - vim CHANGELOG.md - git add CHANGELOG.md - git commit -s -m "Add changelog entry for v1.2.0" - ``` - -5. Update `github.com/fluxcd/-controller/api` version in `go.mod` and - `newTag` value in `config/manager/kustomization.yaml` to the target SemVer - (e.g., `v1.2.0`). Commit and push the changes. - - ```shell - vim go.mod - vim config/manager/kustomization.yaml - git add go.mod config/manager/kustomization.yaml - git commit -s -m "Release v1.2.0" - git push origin release-v1.2.0 - ``` - -6. Create a pull request for the release branch and merge it into the release - series branch (e.g., `release/v1.2.x`). - -7. Create `api/` and `` tags for the merge commit in - `release/v1.2.x`. Ensure the tags are signed according to the [general - rules](#general-rules), and push them to the remote repository. - - ```shell - git switch release/v1.2.x - git pull origin release/v1.2.x - git tag -s -m "api/v1.2.0" api/v1.2.0 - git push origin api/v1.2.0 - git tag -s -m "v1.2.0" v1.2.0 - git push origin v1.2.0 - ``` - -8. Confirm that the CI builds and releases the newly tagged version. - -9. Create a pull request for the release series branch and merge it into `main`. - -##### Controllers: patch releases - -1. Ensure everything to be included in the release is backported to the - "release series" branch (e.g., `release/v1.2.x`). If not, refer to the - [backporting](#backport-changes-for-patch-releases) section. - -2. From the release series branch, create a release preparation branch for the - specific patch release. - - ```shell - git pull origin release/v1.2.x - git switch -c release-v1.2.1 release/v1.2.1 - ``` - -3. Add an entry to `CHANGELOG.md` for the new release and commit the changes. - - ```shell - vim CHANGELOG.md - git add CHANGELOG.md - git commit -s -m "Add changelog entry for v1.2.1" - ``` - -4. Update `github.com/fluxcd/-controller/api` version in `go.mod` and - `newTag` value in `config/manager/kustomization.yaml` to the target SemVer - (e.g., `v1.2.1`). Commit and push the changes. - - ```shell - vim go.mod - vim config/manager/kustomization.yaml - git add go.mod config/manager/kustomization.yaml - git commit -s -m "Release v1.2.1" - git push origin release-v1.2.1 - ``` - -5. Create a pull request for the release branch and merge it into the release - series branch (e.g., `release/v1.2.x`). - -6. Create `api/` and `` tags for the merge commit in - `release/v1.2.x`. Ensure the tags are signed according to the [general - rules](#general-rules), and push them to the remote repository. - - ```shell - git switch release/v1.2.x - git pull origin release/v1.2.x - git tag -s -m "api/v1.2.1" api/v1.2.1 - git push origin api/v1.2.1 - git tag -s -m "v1.2.1" v1.2.1 - git push origin v1.2.1 - ``` - -7. Confirm that the CI builds and releases the newly tagged version. - -8. Cherry-pick the changelog entry from the release series branch and create a - pull request to merge it into `main`. - - ```shell - git pull origin main - git switch -c pick-changelog-v1.2.1 main - git cherry-pick -x - git push origin pick-changelog-v1.2.1 - ``` - -#### Controllers: release candidates - -In some cases, it may be necessary to release a [release -candidate](controllers.md#release-candidates) of a controller. - -To create a first release candidate, follow the steps to create a [minor -release](#controllers-minor-releases), but use the `rc.X` suffix for SemVer -version to release (e.g., `v1.2.0-rc.1`). - -Once the release series branch is created, subsequent release candidates and -the final (non-RC) release should follow the procedure for [patch controller -releases](#controllers-patch-releases). - -#### Controllers: preview releases - -In some cases, it may be necessary to release a preview of a controller. -A preview release is a release that is not intended for production use, but -rather to allow users to quickly test new features or an intended bug fix, and -provide feedback. - -Preview releases are made by triggering the `release` GitHub Actions workflow on -a specific Git branch. This workflow will build the container image, sign it -using Cosign, and push it to the registry. But it does not require a Git tag, -GitHub release, or a changelog entry. - -To create a preview release, follow the steps below. - -1. Navigate to `https://github.com/fluxcd/-controller/actions/workflows/release.yml`. - -2. Click the `Run workflow` button. - -3. Select the branch to release from the `Branch` dropdown. - -4. The default values for the `image tag` (`preview`) should be correct, but can - be changed if necessary. - -5. Click the green `Run workflow` button. - -6. The workflow will now run, and the container image will be pushed to the - registry. Once the workflow has completed, the image reference will be - available in the logs, and can be shared in the relevant issue or pull - request. - -### Distribution - -To release a [Flux distribution](flux.md) as a project maintainer, follow the -steps below. - -Note that the Flux distribution contains multiple components, and you may need -to release [controllers](#controllers) before releasing the distribution. -Automation is in place to automatically create a pull request to update the -version in the `main` branch when a new controller version is released. - -#### Distribution: minor releases - -1. Ensure everything to be included in the release is merged into the `main` - branch, including any controller releases you wish to include in the - release. - -2. Create a "release series" branch for the next minor SemVer range, e.g., - `release/v2.2.x`, and push it to the remote repository. - - ```shell - git switch -c release/v2.2.x main - ``` - -3. Prepare the required release notes for this release, see [release - notes](#distribution-release-notes) for more information. - -4. Tag the release series branch with the SemVer version of the release, e.g., - `v1.2.0`. Ensure the tag is signed according to the [general - rules](#general-rules), and push it to the remote repository. - - ```shell - git tag -s -m "v2.2.0" v2.2.0 - git push origin v2.2.0 - ``` - -5. Confirm that the CI builds and releases the newly tagged version. - -6. Once the release is complete, update the release notes on GitHub with the - release notes prepared in step 3. - -7. Post a message in the [`#flux` CNCF Slack channel](https://cloud-native.slack.com/archives/CLAJ40HV3) - announcing the release, and pin it. - -#### Distribution: patch releases - -1. Ensure everything to be included in the release is backported to the - "release series" branch (e.g., `release/v2.2.x`). If not, refer to the - [backporting](#backport-changes-for-patch-releases) section. - -2. Prepare the required release notes for this release, see [release - notes](#distribution-release-notes) for more information. - -3. Tag the release series branch with the SemVer version of the release, e.g., - `v2.2.1`. Ensure the tag is signed according to the [general - rules](#general-rules), and push it to the remote repository. - - ```shell - git tag -s -m "v2.2.1" v2.2.1 - git push origin v2.2.1 - ``` - -4. Confirm that the CI builds and releases the newly tagged version. - -5. Once the release is complete, update the release notes on GitHub with the - release notes prepared in step 2. - -6. Post a message in the [`#flux` CNCF Slack channel](https://cloud-native.slack.com/archives/CLAJ40HV3) - -#### Distribution: release candidates - -In some cases, it may be necessary to release a [release candidate](flux.md#release-candidates) -of the distribution. - -To create a first release candidate, follow the steps to create a [minor -release](#distribution-minor-releases), but use the `rc.X` suffix for SemVer -version to release (e.g., `v2.2.0-rc.1`). - -Once the release series branch is created, subsequent release candidates and -the final (non-RC) release should follow the procedure for [patch releases](#distribution-patch-releases). - -#### Distribution: release notes - -The release notes template for Flux distributions is available in the -[release-notes-template.md](https://github.com/fluxcd/flux2/blob/main/docs/release/release-notes-template.md) file. - -## Backport changes for patch releases - -The Flux projects have a backport bot that automates the process of backporting -changes from `main` to the release series branches. The bot is configured to -backport pull requests that are labeled with `backport:` (e.g., -`backport:release/v2.1.x`) and have been merged into `main`. - -The label(s) are preferably added to the pull request before it is merged into -`main`. If the pull request is merged into `main` without labeling, they can -still be added to the pull request after it has been merged. - -The backport bot will automatically backport the pull request to the release -series branch and create a pull request for the backport. It will comment on -the pull request with a link to the backport pull request. - -If the backport bot is unable to backport a pull request automatically (for -example, due to conflicts), it will comment on the pull request with -instructions on how to backport the pull request manually. - -### Manual backporting - -In some cases, the backport bot may not be suitable for backporting a pull -request. For example, if the pull request contains a series of changes of which -a subset should be backported. In these cases, the pull request should be -backported manually. - -To backport a pull request manually, create a new branch from the release -series branch (e.g., `release/v2.1.x`) and cherry-pick the commits from the -pull request into the new branch. Push the new branch to the remote repository -and create a pull request to merge it into the release series branch. - -```shell -git pull origin release/v2.1.x -git switch -c backport--to-v2.1.x release/v2.1.x -git cherry-pick -x -# Repeat the cherry-pick command for each commit to backport -git push origin backport--to-v2.1.x -``` From c377fe7651072e92d27710e703a851b0b0b747b2 Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Tue, 4 Jul 2023 12:26:47 +0000 Subject: [PATCH 582/818] Update toolkit components - helm-controller to v0.35.0 https://github.com/fluxcd/helm-controller/blob/v0.35.0/CHANGELOG.md - kustomize-controller to v1.0.0 https://github.com/fluxcd/kustomize-controller/blob/v1.0.0/CHANGELOG.md - source-controller to v1.0.0 https://github.com/fluxcd/source-controller/blob/v1.0.0/CHANGELOG.md - notification-controller to v1.0.0 https://github.com/fluxcd/notification-controller/blob/v1.0.0/CHANGELOG.md - image-reflector-controller to v0.29.0 https://github.com/fluxcd/image-reflector-controller/blob/v0.29.0/CHANGELOG.md - image-automation-controller to v0.35.0 https://github.com/fluxcd/image-automation-controller/blob/v0.35.0/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 26 +++++----- go.sum | 52 +++++++++---------- .../bases/helm-controller/kustomization.yaml | 4 +- .../kustomization.yaml | 4 +- .../kustomization.yaml | 4 +- .../kustomize-controller/kustomization.yaml | 4 +- .../kustomization.yaml | 4 +- .../source-controller/kustomization.yaml | 4 +- manifests/crds/kustomization.yaml | 12 ++--- 9 files changed, 57 insertions(+), 57 deletions(-) diff --git a/go.mod b/go.mod index 8ffd6328..8ee3d3a1 100644 --- a/go.mod +++ b/go.mod @@ -11,13 +11,13 @@ require ( github.com/cyphar/filepath-securejoin v0.2.3 github.com/distribution/distribution/v3 v3.0.0-20230519140516-983358f8e250 github.com/fluxcd/go-git-providers v0.16.0 - github.com/fluxcd/helm-controller/api v0.34.1 - github.com/fluxcd/image-automation-controller/api v0.34.1 - github.com/fluxcd/image-reflector-controller/api v0.28.0 - github.com/fluxcd/kustomize-controller/api v1.0.0-rc.4 - github.com/fluxcd/notification-controller/api v1.0.0-rc.4 + github.com/fluxcd/helm-controller/api v0.35.0 + github.com/fluxcd/image-automation-controller/api v0.35.0 + github.com/fluxcd/image-reflector-controller/api v0.29.0 + github.com/fluxcd/kustomize-controller/api v1.0.0 + github.com/fluxcd/notification-controller/api v1.0.0 github.com/fluxcd/pkg/apis/event v0.5.0 - github.com/fluxcd/pkg/apis/meta v1.1.0 + github.com/fluxcd/pkg/apis/meta v1.1.1 github.com/fluxcd/pkg/git v0.12.2 github.com/fluxcd/pkg/git/gogit v0.12.0 github.com/fluxcd/pkg/kustomize v1.3.3 @@ -28,7 +28,7 @@ require ( github.com/fluxcd/pkg/ssh v0.7.4 github.com/fluxcd/pkg/tar v0.2.0 github.com/fluxcd/pkg/version v0.2.2 - github.com/fluxcd/source-controller/api v1.0.0-rc.5 + github.com/fluxcd/source-controller/api v1.0.0 github.com/go-git/go-git/v5 v5.7.0 github.com/go-logr/logr v1.2.4 github.com/gonvenience/bunt v1.3.5 @@ -47,11 +47,11 @@ require ( github.com/theckman/yacspin v0.13.12 golang.org/x/crypto v0.9.0 golang.org/x/term v0.8.0 - k8s.io/api v0.27.2 - k8s.io/apiextensions-apiserver v0.27.2 - k8s.io/apimachinery v0.27.2 + k8s.io/api v0.27.3 + k8s.io/apiextensions-apiserver v0.27.3 + k8s.io/apimachinery v0.27.3 k8s.io/cli-runtime v0.27.2 - k8s.io/client-go v0.27.2 + k8s.io/client-go v0.27.3 k8s.io/kubectl v0.27.2 sigs.k8s.io/cli-utils v0.34.0 sigs.k8s.io/controller-runtime v0.15.0 @@ -115,7 +115,7 @@ require ( github.com/fatih/color v1.13.0 // indirect github.com/felixge/httpsnoop v1.0.3 // indirect github.com/fluxcd/pkg/apis/acl v0.1.0 // indirect - github.com/fluxcd/pkg/apis/kustomize v1.1.0 // indirect + github.com/fluxcd/pkg/apis/kustomize v1.1.1 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/go-errors/errors v1.4.2 // indirect github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect @@ -213,7 +213,7 @@ require ( gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/component-base v0.27.2 // indirect + k8s.io/component-base v0.27.3 // indirect k8s.io/klog/v2 v2.100.1 // indirect k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f // indirect k8s.io/utils v0.0.0-20230505201702-9f6742963106 // indirect diff --git a/go.sum b/go.sum index 2251cd53..651334af 100644 --- a/go.sum +++ b/go.sum @@ -150,24 +150,24 @@ github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= github.com/fluxcd/go-git-providers v0.16.0 h1:egDN1uv0jyHyvtFNHE1FQ1Slj5Xu7QEFxWj1shqYYGk= github.com/fluxcd/go-git-providers v0.16.0/go.mod h1:dIUEy97GuCKAYHkDQS39Jqb6Pfg1mnGnqA5y2mp3wR4= -github.com/fluxcd/helm-controller/api v0.34.1 h1:oL6GG7weRIqkTlTFRoTY3DJpxqKpAFEoDDsYoxQCa8g= -github.com/fluxcd/helm-controller/api v0.34.1/go.mod h1:1v1UqS5jOgWdMDzvJBgdcY40RminDUO6A0by4IkHd5s= -github.com/fluxcd/image-automation-controller/api v0.34.1 h1:Y2RFhmltELcSGm3lsGgmRcJCBf0SdGlH/PwCxewk4w0= -github.com/fluxcd/image-automation-controller/api v0.34.1/go.mod h1:vRJscxpWXuDMmBj8vlFM3pgpVHqh5hf65RVnCaOnSGo= -github.com/fluxcd/image-reflector-controller/api v0.28.0 h1:2a1UxPU1RHTxl+5YFFB0KuOCHrR3hL0B7fvAPJo2UXY= -github.com/fluxcd/image-reflector-controller/api v0.28.0/go.mod h1:bY28TT8Jv/pvdF/m+c64QCEiCY2BShMe22l1zRDYm4s= -github.com/fluxcd/kustomize-controller/api v1.0.0-rc.4 h1:e5dO5HaFISFNzhfi4zuPniE545vVnEi3VnSBcbxcZqU= -github.com/fluxcd/kustomize-controller/api v1.0.0-rc.4/go.mod h1:UTJu1JMr+rkabWkUWMNiOeFeDu+4ZKfJIK+oqEwOjzc= -github.com/fluxcd/notification-controller/api v1.0.0-rc.4 h1:bDqIirpscGUY0+1u+RKvTEmX43iiZ2xeQLz27FoJJD8= -github.com/fluxcd/notification-controller/api v1.0.0-rc.4/go.mod h1:XL5h5/x46e41rtNc8mwxTKX4kAtgTNuzJS0PV2c0iIQ= +github.com/fluxcd/helm-controller/api v0.35.0 h1:UyhKXPni5z69DzPW7GtECGGdUwKsB+OTI0A/wc7HmFY= +github.com/fluxcd/helm-controller/api v0.35.0/go.mod h1:CdHMtr5wM0xgDt/PS147H7QQS+zDxAFgDW3ZN8MnUlU= +github.com/fluxcd/image-automation-controller/api v0.35.0 h1:B7yJdAbnx0hwI6ffVu0YAyc3d3sqjXrv6ySK++g3t28= +github.com/fluxcd/image-automation-controller/api v0.35.0/go.mod h1:67HbnrXDy550zJKZZbzAZ0yfzL0Ge1O18yn/shcgy0Y= +github.com/fluxcd/image-reflector-controller/api v0.29.0 h1:Epzq0b2sYxgSwKPBN0BWEInQwMLsvU7sjqKJuzGtyIg= +github.com/fluxcd/image-reflector-controller/api v0.29.0/go.mod h1:aYwq15SpkAD/urQme2iEsNouTscfR1Qo39KBlJ+0EW8= +github.com/fluxcd/kustomize-controller/api v1.0.0 h1:BVz6lEpfGbny0ppQ82LloLSK0OoEGC51YQaw31j4vT8= +github.com/fluxcd/kustomize-controller/api v1.0.0/go.mod h1:rYUovoofr3bVPgQowWj/CSGw73qoH0tOCopJ3oNh7lM= +github.com/fluxcd/notification-controller/api v1.0.0 h1:WiXS116pwhFp7Qe/Fc1GmKCfLBRnZu+rYCeIn07cO+4= +github.com/fluxcd/notification-controller/api v1.0.0/go.mod h1:uamWZwmhSHE7xdJkgRhH4Eo5/SKKILFI4o+CoQjlczc= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= github.com/fluxcd/pkg/apis/event v0.5.0 h1:aAoo3AcWMh6hFfhxFED2TbyIk9590C7l17eh3Ys5I3I= github.com/fluxcd/pkg/apis/event v0.5.0/go.mod h1:hiVliecUNHIeE128NFEgyoNxLcv/TWzrYHtf0ODj8fw= -github.com/fluxcd/pkg/apis/kustomize v1.1.0 h1:Fbv4dCB57r2+fiusozN7at8r7upTz58Z4wWw1njHPyU= -github.com/fluxcd/pkg/apis/kustomize v1.1.0/go.mod h1:CAe9Mjf9KVoTm1V4wpvq/FGXFDSnpBwfww/IG7mw3gM= -github.com/fluxcd/pkg/apis/meta v1.1.0 h1:vYU1mvUzztnQyTzZOLHQ3wm/tXd7E1QZ2V91zuVJPsQ= -github.com/fluxcd/pkg/apis/meta v1.1.0/go.mod h1:/QwCotRKL/BT6RSa4O75FlYW14fU8eRfKnoagzbkmL4= +github.com/fluxcd/pkg/apis/kustomize v1.1.1 h1:MSGn4z0R9PptmoPFHnx2nEZ8Jtl1sKfw0cuDQY2HYwM= +github.com/fluxcd/pkg/apis/kustomize v1.1.1/go.mod h1:0pCu0ecIY+ZM0iE/hOHYwCMZ3b0SpBrjJ1SH3FFyYdE= +github.com/fluxcd/pkg/apis/meta v1.1.1 h1:sLAKLbEu7rRzJ+Mytffu3NcpfdbOBTa6hcpOQzFWm+M= +github.com/fluxcd/pkg/apis/meta v1.1.1/go.mod h1:soCfzjFWbm1mqybDcOywWKTCEYlH3skpoNGTboVk234= github.com/fluxcd/pkg/git v0.12.2 h1:96xH3hy3WfwiD0DioyJZcGapYT3lmPc2s7jU5UM8buw= github.com/fluxcd/pkg/git v0.12.2/go.mod h1:9TG4fEfGCF1XHLt9Xs7X2YOmkmWOiwfjH9tdGIQs8/8= github.com/fluxcd/pkg/git/gogit v0.12.0 h1:0mCwQND0WpCVZYHLWcXJxRvKVcyWxH4JjMQFMaea8Q4= @@ -189,8 +189,8 @@ github.com/fluxcd/pkg/tar v0.2.0 h1:HEUHgONQYsJGeZZ4x6h5nQU9Aox1I4T3bOp1faWTqf8= github.com/fluxcd/pkg/tar v0.2.0/go.mod h1:w0/TOC7kwBJhnSJn7TCABkc/I7ib1f2Yz6vOsbLBnhw= github.com/fluxcd/pkg/version v0.2.2 h1:ZpVXECeLA5hIQMft11iLp6gN3cKcz6UNuVTQPw/bRdI= github.com/fluxcd/pkg/version v0.2.2/go.mod h1:NGnh/no8S6PyfCDxRFrPY3T5BUnqP48MxfxNRU0z8C0= -github.com/fluxcd/source-controller/api v1.0.0-rc.5 h1:muoGOb/VitVEIOh877Ledi9AvibbyevPqvuH5byWU6g= -github.com/fluxcd/source-controller/api v1.0.0-rc.5/go.mod h1:W6tNXr3mRPhdc5+Jke9OZnuk/3THNzGzRJVhAtLfzss= +github.com/fluxcd/source-controller/api v1.0.0 h1:lPjmCXmEiI3tY4pReeVQBMuyLgdH8462W5ewUa9kgYM= +github.com/fluxcd/source-controller/api v1.0.0/go.mod h1:rAY5FRFGZUKpIFNyYANHIgPgJPvbALBHWsq/zHw/cXQ= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= @@ -697,18 +697,18 @@ gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= gotest.tools/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -k8s.io/api v0.27.2 h1:+H17AJpUMvl+clT+BPnKf0E3ksMAzoBBg7CntpSuADo= -k8s.io/api v0.27.2/go.mod h1:ENmbocXfBT2ADujUXcBhHV55RIT31IIEvkntP6vZKS4= -k8s.io/apiextensions-apiserver v0.27.2 h1:iwhyoeS4xj9Y7v8YExhUwbVuBhMr3Q4bd/laClBV6Bo= -k8s.io/apiextensions-apiserver v0.27.2/go.mod h1:Oz9UdvGguL3ULgRdY9QMUzL2RZImotgxvGjdWRq6ZXQ= -k8s.io/apimachinery v0.27.2 h1:vBjGaKKieaIreI+oQwELalVG4d8f3YAMNpWLzDXkxeg= -k8s.io/apimachinery v0.27.2/go.mod h1:XNfZ6xklnMCOGGFNqXG7bUrQCoR04dh/E7FprV6pb+E= +k8s.io/api v0.27.3 h1:yR6oQXXnUEBWEWcvPWS0jQL575KoAboQPfJAuKNrw5Y= +k8s.io/api v0.27.3/go.mod h1:C4BNvZnQOF7JA/0Xed2S+aUyJSfTGkGFxLXz9MnpIpg= +k8s.io/apiextensions-apiserver v0.27.3 h1:xAwC1iYabi+TDfpRhxh4Eapl14Hs2OftM2DN5MpgKX4= +k8s.io/apiextensions-apiserver v0.27.3/go.mod h1:BH3wJ5NsB9XE1w+R6SSVpKmYNyIiyIz9xAmBl8Mb+84= +k8s.io/apimachinery v0.27.3 h1:Ubye8oBufD04l9QnNtW05idcOe9Z3GQN8+7PqmuVcUM= +k8s.io/apimachinery v0.27.3/go.mod h1:XNfZ6xklnMCOGGFNqXG7bUrQCoR04dh/E7FprV6pb+E= k8s.io/cli-runtime v0.27.2 h1:9HI8gfReNujKXt16tGOAnb8b4NZ5E+e0mQQHKhFGwYw= k8s.io/cli-runtime v0.27.2/go.mod h1:9UecpyPDTkhiYY4d9htzRqN+rKomJgyb4wi0OfrmCjw= -k8s.io/client-go v0.27.2 h1:vDLSeuYvCHKeoQRhCXjxXO45nHVv2Ip4Fe0MfioMrhE= -k8s.io/client-go v0.27.2/go.mod h1:tY0gVmUsHrAmjzHX9zs7eCjxcBsf8IiNe7KQ52biTcQ= -k8s.io/component-base v0.27.2 h1:neju+7s/r5O4x4/txeUONNTS9r1HsPbyoPBAtHsDCpo= -k8s.io/component-base v0.27.2/go.mod h1:5UPk7EjfgrfgRIuDBFtsEFAe4DAvP3U+M8RTzoSJkpo= +k8s.io/client-go v0.27.3 h1:7dnEGHZEJld3lYwxvLl7WoehK6lAq7GvgjxpA3nv1E8= +k8s.io/client-go v0.27.3/go.mod h1:2MBEKuTo6V1lbKy3z1euEGnhPfGZLKTS9tiJ2xodM48= +k8s.io/component-base v0.27.3 h1:g078YmdcdTfrCE4fFobt7qmVXwS8J/3cI1XxRi/2+6k= +k8s.io/component-base v0.27.3/go.mod h1:JNiKYcGImpQ44iwSYs6dysxzR9SxIIgQalk4HaCNVUY= k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg= k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f h1:2kWPakN3i/k81b0gvD5C5FJ2kxm1WrQFanWchyKuqGg= diff --git a/manifests/bases/helm-controller/kustomization.yaml b/manifests/bases/helm-controller/kustomization.yaml index a8ee900f..817f9c7d 100644 --- a/manifests/bases/helm-controller/kustomization.yaml +++ b/manifests/bases/helm-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/helm-controller/releases/download/v0.34.1/helm-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.34.1/helm-controller.deployment.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.35.0/helm-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.35.0/helm-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/image-automation-controller/kustomization.yaml b/manifests/bases/image-automation-controller/kustomization.yaml index c8ba0e54..350faa16 100644 --- a/manifests/bases/image-automation-controller/kustomization.yaml +++ b/manifests/bases/image-automation-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.34.1/image-automation-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.34.1/image-automation-controller.deployment.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.35.0/image-automation-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.35.0/image-automation-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/image-reflector-controller/kustomization.yaml b/manifests/bases/image-reflector-controller/kustomization.yaml index 9a56508d..e255d6ca 100644 --- a/manifests/bases/image-reflector-controller/kustomization.yaml +++ b/manifests/bases/image-reflector-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.28.0/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.28.0/image-reflector-controller.deployment.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.29.0/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.29.0/image-reflector-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/kustomize-controller/kustomization.yaml b/manifests/bases/kustomize-controller/kustomization.yaml index 6b8d41d6..4544139c 100644 --- a/manifests/bases/kustomize-controller/kustomization.yaml +++ b/manifests/bases/kustomize-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/kustomize-controller/releases/download/v1.0.0-rc.4/kustomize-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v1.0.0-rc.4/kustomize-controller.deployment.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v1.0.0/kustomize-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v1.0.0/kustomize-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/notification-controller/kustomization.yaml b/manifests/bases/notification-controller/kustomization.yaml index 79280c49..582c5c5e 100644 --- a/manifests/bases/notification-controller/kustomization.yaml +++ b/manifests/bases/notification-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/notification-controller/releases/download/v1.0.0-rc.4/notification-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v1.0.0-rc.4/notification-controller.deployment.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v1.0.0/notification-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v1.0.0/notification-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index 55a6175e..10296128 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v1.0.0-rc.5/source-controller.crds.yaml -- https://github.com/fluxcd/source-controller/releases/download/v1.0.0-rc.5/source-controller.deployment.yaml +- https://github.com/fluxcd/source-controller/releases/download/v1.0.0/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v1.0.0/source-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index 3ec704bb..57e9d0d8 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -1,9 +1,9 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v1.0.0-rc.5/source-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v1.0.0-rc.4/kustomize-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.34.1/helm-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v1.0.0-rc.4/notification-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.28.0/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.34.1/image-automation-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v1.0.0/source-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v1.0.0/kustomize-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.35.0/helm-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v1.0.0/notification-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.29.0/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.35.0/image-automation-controller.crds.yaml From 9fa59df798505deae391dd89b512fde9ab1d0b98 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Tue, 4 Jul 2023 17:35:34 +0300 Subject: [PATCH 583/818] Update dependencies - k8s.io/* v0.27.3 - github.com/fluxcd/go-git-providers v0.18.0 - github.com/fluxcd/pkg/git v0.12.3 - github.com/fluxcd/pkg/oci v0.28.0 - github.com/fluxcd/pkg/runtime v0.40.0 - github.com/fluxcd/pkg/ssa v0.28.2 - github.com/fluxcd/pkg/ssh v0.8.0 - github.com/homeport/dyff v1.5.8 - golang.org/x/crypto v0.10.0 Signed-off-by: Stefan Prodan --- go.mod | 86 +++++++++++----------- go.sum | 179 +++++++++++++++++++++++---------------------- tests/azure/go.mod | 42 +++++------ tests/azure/go.sum | 95 ++++++++++++------------ 4 files changed, 203 insertions(+), 199 deletions(-) diff --git a/go.mod b/go.mod index 8ee3d3a1..98800253 100644 --- a/go.mod +++ b/go.mod @@ -7,25 +7,25 @@ replace github.com/go-git/go-git/v5 => github.com/go-git/go-git/v5 v5.7.1-0.2023 require ( github.com/Masterminds/semver/v3 v3.2.1 - github.com/ProtonMail/go-crypto v0.0.0-20230528122434-6f98819771a1 + github.com/ProtonMail/go-crypto v0.0.0-20230626094100-7e9e0395ebec github.com/cyphar/filepath-securejoin v0.2.3 - github.com/distribution/distribution/v3 v3.0.0-20230519140516-983358f8e250 - github.com/fluxcd/go-git-providers v0.16.0 + github.com/distribution/distribution/v3 v3.0.0-20230629214736-bac7f02e02a1 + github.com/fluxcd/go-git-providers v0.18.0 github.com/fluxcd/helm-controller/api v0.35.0 github.com/fluxcd/image-automation-controller/api v0.35.0 github.com/fluxcd/image-reflector-controller/api v0.29.0 github.com/fluxcd/kustomize-controller/api v1.0.0 github.com/fluxcd/notification-controller/api v1.0.0 - github.com/fluxcd/pkg/apis/event v0.5.0 + github.com/fluxcd/pkg/apis/event v0.5.1 github.com/fluxcd/pkg/apis/meta v1.1.1 - github.com/fluxcd/pkg/git v0.12.2 - github.com/fluxcd/pkg/git/gogit v0.12.0 - github.com/fluxcd/pkg/kustomize v1.3.3 - github.com/fluxcd/pkg/oci v0.27.0 - github.com/fluxcd/pkg/runtime v0.38.1 + github.com/fluxcd/pkg/git v0.12.3 + github.com/fluxcd/pkg/git/gogit v0.12.1 + github.com/fluxcd/pkg/kustomize v1.3.4 + github.com/fluxcd/pkg/oci v0.28.0 + github.com/fluxcd/pkg/runtime v0.40.0 github.com/fluxcd/pkg/sourceignore v0.3.4 - github.com/fluxcd/pkg/ssa v0.28.1 - github.com/fluxcd/pkg/ssh v0.7.4 + github.com/fluxcd/pkg/ssa v0.28.2 + github.com/fluxcd/pkg/ssh v0.8.0 github.com/fluxcd/pkg/tar v0.2.0 github.com/fluxcd/pkg/version v0.2.2 github.com/fluxcd/source-controller/api v1.0.0 @@ -35,24 +35,24 @@ require ( github.com/gonvenience/ytbx v1.4.4 github.com/google/go-cmp v0.5.9 github.com/google/go-containerregistry v0.15.2 - github.com/homeport/dyff v1.5.7 + github.com/homeport/dyff v1.5.8 github.com/lucasb-eyer/go-colorful v1.2.0 github.com/manifoldco/promptui v0.9.0 github.com/mattn/go-shellwords v1.0.12 github.com/olekukonko/tablewriter v0.0.5 - github.com/onsi/gomega v1.27.7 + github.com/onsi/gomega v1.27.8 github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 github.com/spf13/cobra v1.7.0 github.com/spf13/pflag v1.0.5 github.com/theckman/yacspin v0.13.12 - golang.org/x/crypto v0.9.0 - golang.org/x/term v0.8.0 + golang.org/x/crypto v0.10.0 + golang.org/x/term v0.9.0 k8s.io/api v0.27.3 k8s.io/apiextensions-apiserver v0.27.3 k8s.io/apimachinery v0.27.3 - k8s.io/cli-runtime v0.27.2 + k8s.io/cli-runtime v0.27.3 k8s.io/client-go v0.27.3 - k8s.io/kubectl v0.27.2 + k8s.io/kubectl v0.27.3 sigs.k8s.io/cli-utils v0.34.0 sigs.k8s.io/controller-runtime v0.15.0 sigs.k8s.io/kustomize/api v0.13.4 @@ -64,28 +64,28 @@ require ( replace gopkg.in/yaml.v3 => gopkg.in/yaml.v3 v3.0.1 require ( - github.com/Azure/azure-sdk-for-go/sdk/azcore v1.6.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.6.1 // indirect github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0 // indirect github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect github.com/AzureAD/microsoft-authentication-library-for-go v1.0.0 // indirect - github.com/BurntSushi/toml v1.2.1 // indirect + github.com/BurntSushi/toml v1.3.2 // indirect github.com/MakeNowJust/heredoc v1.0.0 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d // indirect github.com/acomagu/bufpipe v1.0.4 // indirect - github.com/aws/aws-sdk-go-v2 v1.18.0 // indirect - github.com/aws/aws-sdk-go-v2/config v1.18.25 // indirect - github.com/aws/aws-sdk-go-v2/credentials v1.13.24 // indirect - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.3 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.33 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.27 // indirect - github.com/aws/aws-sdk-go-v2/internal/ini v1.3.34 // indirect - github.com/aws/aws-sdk-go-v2/service/ecr v1.18.11 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.27 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.12.10 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.10 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.19.0 // indirect + github.com/aws/aws-sdk-go-v2 v1.18.1 // indirect + github.com/aws/aws-sdk-go-v2/config v1.18.27 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.13.26 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.4 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.34 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.28 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.3.35 // indirect + github.com/aws/aws-sdk-go-v2/service/ecr v1.18.13 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.28 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.12.12 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.12 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.19.2 // indirect github.com/aws/smithy-go v1.13.5 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bshuster-repo/logrus-logstash-hook v1.0.0 // indirect @@ -128,7 +128,7 @@ require ( github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.3 // indirect github.com/gomodule/redigo v1.8.2 // indirect - github.com/gonvenience/neat v1.3.11 // indirect + github.com/gonvenience/neat v1.3.12 // indirect github.com/gonvenience/term v1.0.2 // indirect github.com/gonvenience/text v1.0.7 // indirect github.com/gonvenience/wrap v1.1.2 // indirect @@ -145,7 +145,7 @@ require ( github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect - github.com/hashicorp/go-retryablehttp v0.7.2 // indirect + github.com/hashicorp/go-retryablehttp v0.7.4 // indirect github.com/hashicorp/golang-lru v0.5.4 // indirect github.com/imdario/mergo v0.3.15 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect @@ -160,7 +160,7 @@ require ( github.com/mailru/easyjson v0.7.7 // indirect github.com/mattn/go-ciede2000 v0.0.0-20170301095244-782e8c62fec3 // indirect github.com/mattn/go-colorable v0.1.12 // indirect - github.com/mattn/go-isatty v0.0.18 // indirect + github.com/mattn/go-isatty v0.0.19 // indirect github.com/mattn/go-runewidth v0.0.13 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect @@ -179,14 +179,14 @@ require ( github.com/pjbgf/sha1cd v0.3.0 // indirect github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 // indirect github.com/pkg/errors v0.9.1 // indirect - github.com/prometheus/client_golang v1.15.1 // indirect + github.com/prometheus/client_golang v1.16.0 // indirect github.com/prometheus/client_model v0.4.0 // indirect github.com/prometheus/common v0.42.0 // indirect - github.com/prometheus/procfs v0.9.0 // indirect + github.com/prometheus/procfs v0.10.1 // indirect github.com/rivo/uniseg v0.2.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/sergi/go-diff v1.3.1 // indirect - github.com/sirupsen/logrus v1.9.2 // indirect + github.com/sirupsen/logrus v1.9.3 // indirect github.com/skeema/knownhosts v1.1.1 // indirect github.com/texttheater/golang-levenshtein v1.0.1 // indirect github.com/vbatts/tar-split v0.11.3 // indirect @@ -198,14 +198,14 @@ require ( github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50 // indirect github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f // indirect go.starlark.net v0.0.0-20221028183056-acb66ad56dd2 // indirect - golang.org/x/mod v0.10.0 // indirect - golang.org/x/net v0.10.0 // indirect + golang.org/x/mod v0.11.0 // indirect + golang.org/x/net v0.11.0 // indirect golang.org/x/oauth2 v0.7.0 // indirect - golang.org/x/sync v0.2.0 // indirect - golang.org/x/sys v0.8.0 // indirect - golang.org/x/text v0.9.0 // indirect + golang.org/x/sync v0.3.0 // indirect + golang.org/x/sys v0.9.0 // indirect + golang.org/x/text v0.10.0 // indirect golang.org/x/time v0.3.0 // indirect - golang.org/x/tools v0.9.1 // indirect + golang.org/x/tools v0.10.0 // indirect gomodules.xyz/jsonpatch/v2 v2.3.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/protobuf v1.30.0 // indirect diff --git a/go.sum b/go.sum index 651334af..86e41f66 100644 --- a/go.sum +++ b/go.sum @@ -1,8 +1,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/AdaLogics/go-fuzz-headers v0.0.0-20230106234847-43070de90fa1 h1:EKPd1INOIyr5hWOWhvpmQpY6tKjeG0hT1s3AMC/9fic= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.6.0 h1:8kDqDngH+DmVBiCtIjCFTGa7MBnsIOkF9IccInFEbjk= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.6.0/go.mod h1:bjGvMhVMb+EEm3VRNQawDMUyMMjo+S5ewNjflkep/0Q= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.6.1 h1:SEy2xmstIphdPwNBUi7uhvjyjhVKISfwjfOJmuy7kg4= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.6.1/go.mod h1:bjGvMhVMb+EEm3VRNQawDMUyMMjo+S5ewNjflkep/0Q= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0 h1:vcYCAze6p19qBW7MhZybIsqD8sMV8js0NyQM8JDnVtg= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0/go.mod h1:OQeznEEkTZ9OrhHJoDD8ZDq51FHgXjqtP9z6bEwBq9U= github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0 h1:sXr+ck84g/ZlZUOZiNELInmMgOsuGwdjjVkEIde0OtY= @@ -12,8 +12,9 @@ github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg6 github.com/AzureAD/microsoft-authentication-library-for-go v1.0.0 h1:OBhqkivkhkMqLPymWEppkm7vgPQY2XsHoEkaMQ0AdZY= github.com/AzureAD/microsoft-authentication-library-for-go v1.0.0/go.mod h1:kgDmCTgBzIEPFElEF+FK0SdjAor06dRq2Go927dnQ6o= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak= github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8= +github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/MakeNowJust/heredoc v1.0.0 h1:cXCdzVdstXyiTqTvfqk9SDHpKNjxuom+DOlyEeQ4pzQ= github.com/MakeNowJust/heredoc v1.0.0/go.mod h1:mG5amYoWBHf8vpLOuehzbGGw0EHxpZZ6lCpQ4fNJ8LE= github.com/Masterminds/semver/v3 v3.2.1 h1:RN9w6+7QoMeJVGyfmbcgs28Br8cvmnucEXnY0rYXWg0= @@ -22,8 +23,8 @@ github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/ProtonMail/go-crypto v0.0.0-20230528122434-6f98819771a1 h1:JMDGhoQvXNTqH6Y3MC0IUw6tcZvaUdujNqzK2HYWZc8= -github.com/ProtonMail/go-crypto v0.0.0-20230528122434-6f98819771a1/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= +github.com/ProtonMail/go-crypto v0.0.0-20230626094100-7e9e0395ebec h1:vV3RryLxt42+ZIVOFbYJCH1jsZNTNmj2NYru5zfx+4E= +github.com/ProtonMail/go-crypto v0.0.0-20230626094100-7e9e0395ebec/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d h1:UrqY+r/OJnIp5u0s1SbQ8dVfLCZJsnvazdBP5hS4iRs= github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ= github.com/acomagu/bufpipe v1.0.4 h1:e3H4WUzM3npvo5uv95QuJM3cQspFNtFBzvJ2oNjKIDQ= @@ -33,30 +34,30 @@ github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRF github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= -github.com/aws/aws-sdk-go-v2 v1.18.0 h1:882kkTpSFhdgYRKVZ/VCgf7sd0ru57p2JCxz4/oN5RY= -github.com/aws/aws-sdk-go-v2 v1.18.0/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw= -github.com/aws/aws-sdk-go-v2/config v1.18.25 h1:JuYyZcnMPBiFqn87L2cRppo+rNwgah6YwD3VuyvaW6Q= -github.com/aws/aws-sdk-go-v2/config v1.18.25/go.mod h1:dZnYpD5wTW/dQF0rRNLVypB396zWCcPiBIvdvSWHEg4= -github.com/aws/aws-sdk-go-v2/credentials v1.13.24 h1:PjiYyls3QdCrzqUN35jMWtUK1vqVZ+zLfdOa/UPFDp0= -github.com/aws/aws-sdk-go-v2/credentials v1.13.24/go.mod h1:jYPYi99wUOPIFi0rhiOvXeSEReVOzBqFNOX5bXYoG2o= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.3 h1:jJPgroehGvjrde3XufFIJUZVK5A2L9a3KwSFgKy9n8w= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.3/go.mod h1:4Q0UFP0YJf0NrsEuEYHpM9fTSEVnD16Z3uyEF7J9JGM= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.33 h1:kG5eQilShqmJbv11XL1VpyDbaEJzWxd4zRiCG30GSn4= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.33/go.mod h1:7i0PF1ME/2eUPFcjkVIwq+DOygHEoK92t5cDqNgYbIw= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.27 h1:vFQlirhuM8lLlpI7imKOMsjdQLuN9CPi+k44F/OFVsk= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.27/go.mod h1:UrHnn3QV/d0pBZ6QBAEQcqFLf8FAzLmoUfPVIueOvoM= -github.com/aws/aws-sdk-go-v2/internal/ini v1.3.34 h1:gGLG7yKaXG02/jBlg210R7VgQIotiQntNhsCFejawx8= -github.com/aws/aws-sdk-go-v2/internal/ini v1.3.34/go.mod h1:Etz2dj6UHYuw+Xw830KfzCfWGMzqvUTCjUj5b76GVDc= -github.com/aws/aws-sdk-go-v2/service/ecr v1.18.11 h1:wlTgmb/sCmVRJrN5De3CiHj4v/bTCgL5+qpdEd0CPtw= -github.com/aws/aws-sdk-go-v2/service/ecr v1.18.11/go.mod h1:Ce1q2jlNm8BVpjLaOnwnm5v2RClAbK6txwPljFzyW6c= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.27 h1:0iKliEXAcCa2qVtRs7Ot5hItA2MsufrphbRFlz1Owxo= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.27/go.mod h1:EOwBD4J4S5qYszS5/3DpkejfuK+Z5/1uzICfPaZLtqw= -github.com/aws/aws-sdk-go-v2/service/sso v1.12.10 h1:UBQjaMTCKwyUYwiVnUt6toEJwGXsLBI6al083tpjJzY= -github.com/aws/aws-sdk-go-v2/service/sso v1.12.10/go.mod h1:ouy2P4z6sJN70fR3ka3wD3Ro3KezSxU6eKGQI2+2fjI= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.10 h1:PkHIIJs8qvq0e5QybnZoG1K/9QTrLr9OsqCIo59jOBA= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.10/go.mod h1:AFvkxc8xfBe8XA+5St5XIHHrQQtkxqrRincx4hmMHOk= -github.com/aws/aws-sdk-go-v2/service/sts v1.19.0 h1:2DQLAKDteoEDI8zpCzqBMaZlJuoE9iTYD0gFmXVax9E= -github.com/aws/aws-sdk-go-v2/service/sts v1.19.0/go.mod h1:BgQOMsg8av8jset59jelyPW7NoZcZXLVpDsXunGDrk8= +github.com/aws/aws-sdk-go-v2 v1.18.1 h1:+tefE750oAb7ZQGzla6bLkOwfcQCEtC5y2RqoqCeqKo= +github.com/aws/aws-sdk-go-v2 v1.18.1/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw= +github.com/aws/aws-sdk-go-v2/config v1.18.27 h1:Az9uLwmssTE6OGTpsFqOnaGpLnKDqNYOJzWuC6UAYzA= +github.com/aws/aws-sdk-go-v2/config v1.18.27/go.mod h1:0My+YgmkGxeqjXZb5BYme5pc4drjTnM+x1GJ3zv42Nw= +github.com/aws/aws-sdk-go-v2/credentials v1.13.26 h1:qmU+yhKmOCyujmuPY7tf5MxR/RKyZrOPO3V4DobiTUk= +github.com/aws/aws-sdk-go-v2/credentials v1.13.26/go.mod h1:GoXt2YC8jHUBbA4jr+W3JiemnIbkXOfxSXcisUsZ3os= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.4 h1:LxK/bitrAr4lnh9LnIS6i7zWbCOdMsfzKFBI6LUCS0I= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.4/go.mod h1:E1hLXN/BL2e6YizK1zFlYd8vsfi2GTjbjBazinMmeaM= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.34 h1:A5UqQEmPaCFpedKouS4v+dHCTUo2sKqhoKO9U5kxyWo= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.34/go.mod h1:wZpTEecJe0Btj3IYnDx/VlUzor9wm3fJHyvLpQF0VwY= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.28 h1:srIVS45eQuewqz6fKKu6ZGXaq6FuFg5NzgQBAM6g8Y4= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.28/go.mod h1:7VRpKQQedkfIEXb4k52I7swUnZP0wohVajJMRn3vsUw= +github.com/aws/aws-sdk-go-v2/internal/ini v1.3.35 h1:LWA+3kDM8ly001vJ1X1waCuLJdtTl48gwkPKWy9sosI= +github.com/aws/aws-sdk-go-v2/internal/ini v1.3.35/go.mod h1:0Eg1YjxE0Bhn56lx+SHJwCzhW+2JGtizsrx+lCqrfm0= +github.com/aws/aws-sdk-go-v2/service/ecr v1.18.13 h1:hF7MUVNjubetjggZDtn3AmqCJzD7EUi//tSdxMYPm7U= +github.com/aws/aws-sdk-go-v2/service/ecr v1.18.13/go.mod h1:XwEFO35g0uN/SftK0asWxh8Rk6DOx37R83TmWe2tzEE= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.28 h1:bkRyG4a929RCnpVSTvLM2j/T4ls015ZhhYApbmYs15s= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.28/go.mod h1:jj7znCIg05jXlaGBlFMGP8+7UN3VtCkRBG2spnmRQkU= +github.com/aws/aws-sdk-go-v2/service/sso v1.12.12 h1:nneMBM2p79PGWBQovYO/6Xnc2ryRMw3InnDJq1FHkSY= +github.com/aws/aws-sdk-go-v2/service/sso v1.12.12/go.mod h1:HuCOxYsF21eKrerARYO6HapNeh9GBNq7fius2AcwodY= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.12 h1:2qTR7IFk7/0IN/adSFhYu9Xthr0zVFTgBrmPldILn80= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.12/go.mod h1:E4VrHCPzmVB/KFXtqBGKb3c8zpbNBgKe3fisDNLAW5w= +github.com/aws/aws-sdk-go-v2/service/sts v1.19.2 h1:XFJ2Z6sNUUcAz9poj+245DMkrHE4h2j5I9/xD50RHfE= +github.com/aws/aws-sdk-go-v2/service/sts v1.19.2/go.mod h1:dp0yLPsLBOi++WTxzCjA/oZqi6NPIhoR+uF7GeMU9eg= github.com/aws/smithy-go v1.13.5 h1:hgz0X/DX0dGqTYpGALqXJoRKRj5oQ7150i5FdTePzO8= github.com/aws/smithy-go v1.13.5/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= @@ -104,8 +105,8 @@ github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxG github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/distribution/distribution/v3 v3.0.0-20230519140516-983358f8e250 h1:B3eXeuNArF23dRKyO8RXRiL7YAJDus6B7bjXeYPt87k= -github.com/distribution/distribution/v3 v3.0.0-20230519140516-983358f8e250/go.mod h1:t1IxPNGdTGez+YGKyJyQrtSSqisfMIm1hnFhvMPlxtE= +github.com/distribution/distribution/v3 v3.0.0-20230629214736-bac7f02e02a1 h1:yRwt9RluqBtKyDLRY7J0Cf/TVqvG56vKx2Eyndy8qNQ= +github.com/distribution/distribution/v3 v3.0.0-20230629214736-bac7f02e02a1/go.mod h1:+fqBJ4vPYo4Uu1ZE4d+bUtTLRXfdSL3NvCZIZ9GHv58= github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI= github.com/docker/cli v23.0.5+incompatible h1:ufWmAOuD3Vmr7JP2G5K3cyuNC4YZWiAsuDEvFVVDafE= github.com/docker/cli v23.0.5+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= @@ -148,8 +149,8 @@ github.com/felixge/httpsnoop v1.0.3 h1:s/nj+GCswXYzN5v2DpNMuMQYe+0DDwt5WVCU6CWBd github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0= github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= -github.com/fluxcd/go-git-providers v0.16.0 h1:egDN1uv0jyHyvtFNHE1FQ1Slj5Xu7QEFxWj1shqYYGk= -github.com/fluxcd/go-git-providers v0.16.0/go.mod h1:dIUEy97GuCKAYHkDQS39Jqb6Pfg1mnGnqA5y2mp3wR4= +github.com/fluxcd/go-git-providers v0.18.0 h1:4Whs6GzQdx3d7UTeIahRmzUrTZKhucySC53pwdXFV7Y= +github.com/fluxcd/go-git-providers v0.18.0/go.mod h1:++kUR1LegtRWU30bdPb9FuRUH/6+DgoHSbwOkZ5NiKo= github.com/fluxcd/helm-controller/api v0.35.0 h1:UyhKXPni5z69DzPW7GtECGGdUwKsB+OTI0A/wc7HmFY= github.com/fluxcd/helm-controller/api v0.35.0/go.mod h1:CdHMtr5wM0xgDt/PS147H7QQS+zDxAFgDW3ZN8MnUlU= github.com/fluxcd/image-automation-controller/api v0.35.0 h1:B7yJdAbnx0hwI6ffVu0YAyc3d3sqjXrv6ySK++g3t28= @@ -162,29 +163,29 @@ github.com/fluxcd/notification-controller/api v1.0.0 h1:WiXS116pwhFp7Qe/Fc1GmKCf github.com/fluxcd/notification-controller/api v1.0.0/go.mod h1:uamWZwmhSHE7xdJkgRhH4Eo5/SKKILFI4o+CoQjlczc= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= -github.com/fluxcd/pkg/apis/event v0.5.0 h1:aAoo3AcWMh6hFfhxFED2TbyIk9590C7l17eh3Ys5I3I= -github.com/fluxcd/pkg/apis/event v0.5.0/go.mod h1:hiVliecUNHIeE128NFEgyoNxLcv/TWzrYHtf0ODj8fw= +github.com/fluxcd/pkg/apis/event v0.5.1 h1:UrEmKwTK/lt42gMZunl8BQBMzjf8PSqGbWDs/GB839c= +github.com/fluxcd/pkg/apis/event v0.5.1/go.mod h1:GzBAzS8bq7751wvNkaSnr3kuwFVuWTPL20D77UgSNJQ= github.com/fluxcd/pkg/apis/kustomize v1.1.1 h1:MSGn4z0R9PptmoPFHnx2nEZ8Jtl1sKfw0cuDQY2HYwM= github.com/fluxcd/pkg/apis/kustomize v1.1.1/go.mod h1:0pCu0ecIY+ZM0iE/hOHYwCMZ3b0SpBrjJ1SH3FFyYdE= github.com/fluxcd/pkg/apis/meta v1.1.1 h1:sLAKLbEu7rRzJ+Mytffu3NcpfdbOBTa6hcpOQzFWm+M= github.com/fluxcd/pkg/apis/meta v1.1.1/go.mod h1:soCfzjFWbm1mqybDcOywWKTCEYlH3skpoNGTboVk234= -github.com/fluxcd/pkg/git v0.12.2 h1:96xH3hy3WfwiD0DioyJZcGapYT3lmPc2s7jU5UM8buw= -github.com/fluxcd/pkg/git v0.12.2/go.mod h1:9TG4fEfGCF1XHLt9Xs7X2YOmkmWOiwfjH9tdGIQs8/8= -github.com/fluxcd/pkg/git/gogit v0.12.0 h1:0mCwQND0WpCVZYHLWcXJxRvKVcyWxH4JjMQFMaea8Q4= -github.com/fluxcd/pkg/git/gogit v0.12.0/go.mod h1:Kn+GfYfZBBIaXmQj39cQvrDxT/6y8leQxXZ5/B+YYTQ= +github.com/fluxcd/pkg/git v0.12.3 h1:1KmRYTdcBKDUutg6NIT4x0BCCMT72PjjXs3AnHjybHY= +github.com/fluxcd/pkg/git v0.12.3/go.mod h1:ID2sry5OqYbgJxvANc7s6V/YwafnQd7e1AGoDvwztAU= +github.com/fluxcd/pkg/git/gogit v0.12.1 h1:06jzHOTntYN5xCSQvyFXtLXdqoP8crLh7VYgtXS9+wo= +github.com/fluxcd/pkg/git/gogit v0.12.1/go.mod h1:Z4Ysp8VifKTvWpjJMKncJsgb2iBqHuIeK80VGjlU41Y= github.com/fluxcd/pkg/gittestserver v0.8.4 h1:rA/QUZnfH77ZZG+5xfMqjgEHJdzeeE6Nn1o8cops/bU= -github.com/fluxcd/pkg/kustomize v1.3.3 h1:My3j7ImO/DMm5+nSDh+ytpSIpQ4mwDTUfNkJViShAfw= -github.com/fluxcd/pkg/kustomize v1.3.3/go.mod h1:XT2qaVCiBE4S2B23sd9l5etIKj4SApdcDHzmki+X2Vw= -github.com/fluxcd/pkg/oci v0.27.0 h1:Q1jnPjuNGn1/xvG+sCXsWEmXvA5O1tU0WMdXdNlDEoE= -github.com/fluxcd/pkg/oci v0.27.0/go.mod h1:LK6m+gxJFpedtb0Z5leNzIib3XbXu0Wts3eXhVbscDw= -github.com/fluxcd/pkg/runtime v0.38.1 h1:deY7LP2e1UfHXmxNFFzY6MAbqdLWlRgvK9f/PIXyY5Y= -github.com/fluxcd/pkg/runtime v0.38.1/go.mod h1:x7bNbCDuvErmqD3gPNgGDI/ovjHBwvNPiwmAJuIMqNM= +github.com/fluxcd/pkg/kustomize v1.3.4 h1:+XA4umfhkFqrNYQp3ZmKSJy4i3LWjbgoi6H4PllkkkA= +github.com/fluxcd/pkg/kustomize v1.3.4/go.mod h1:nsbsNGe6nQY6DGYYPowFGQlhxFRcaRFvbwqhCbwAQuE= +github.com/fluxcd/pkg/oci v0.28.0 h1:E8VvMFzU/+9vgM4IFbiwmCwaMPCq1WXPiKUmHtDVSbc= +github.com/fluxcd/pkg/oci v0.28.0/go.mod h1:eFP5sQH4yWghFbcLWxdo0eI6wZ4h3HiTW0UoG33S2pg= +github.com/fluxcd/pkg/runtime v0.40.0 h1:uGiiEbMZwd7xmbKaVmcH7iilCFW9betWbz0r1taK3G0= +github.com/fluxcd/pkg/runtime v0.40.0/go.mod h1:BqHEOVrZmt19p0q1OlGFWAYh3rZ28+IBpxLB2yPjjQ4= github.com/fluxcd/pkg/sourceignore v0.3.4 h1:0cfS2Pj7xp2qpaerMjYqOBr82LC+/mGHl6v6pRbi5hs= github.com/fluxcd/pkg/sourceignore v0.3.4/go.mod h1:ejLx+/uIrPUgqVzMTR5JiWuUnzs+zTkoEf9gS92LqaE= -github.com/fluxcd/pkg/ssa v0.28.1 h1:h5r5irAgDjgkmIqagOLOa/U7/Rx2fT2NKIb+vDTYOMg= -github.com/fluxcd/pkg/ssa v0.28.1/go.mod h1:o55eBzWz7P/tqnCn5c622RZvjTP/GqvitqZUbsMIRwk= -github.com/fluxcd/pkg/ssh v0.7.4 h1:8GYneCKH2dxrHQBalcDgOCC2NtqD0JO91FlWgvnzrfo= -github.com/fluxcd/pkg/ssh v0.7.4/go.mod h1:9Syc8nVJaZEToPTU4E99j0jZ99w39oZtov+uiNX17sc= +github.com/fluxcd/pkg/ssa v0.28.2 h1:BL42JK9Cg17PHh/VIh64e6GZ+rjO47uDMGXGSGeCdao= +github.com/fluxcd/pkg/ssa v0.28.2/go.mod h1:nL0bCiFTAMvMrEKGlVCAgtLdP8VIPBGizY5xgasaypI= +github.com/fluxcd/pkg/ssh v0.8.0 h1:CqHIsWYfAtGxh2D6ZvzGTkFout6MaQnFpytPzJPbDLA= +github.com/fluxcd/pkg/ssh v0.8.0/go.mod h1:bo6HgWqIIuXU6r5HCxRFa7Uo7b4Nnzsz6MvdtAYn2XY= github.com/fluxcd/pkg/tar v0.2.0 h1:HEUHgONQYsJGeZZ4x6h5nQU9Aox1I4T3bOp1faWTqf8= github.com/fluxcd/pkg/tar v0.2.0/go.mod h1:w0/TOC7kwBJhnSJn7TCABkc/I7ib1f2Yz6vOsbLBnhw= github.com/fluxcd/pkg/version v0.2.2 h1:ZpVXECeLA5hIQMft11iLp6gN3cKcz6UNuVTQPw/bRdI= @@ -249,8 +250,8 @@ github.com/gomodule/redigo v1.8.2 h1:H5XSIre1MB5NbPYFp+i1NBbb5qN1W8Y8YAQoAYbkm8k github.com/gomodule/redigo v1.8.2/go.mod h1:P9dn9mFrCBvWhGE1wpxx6fgq7BAeLBk+UUUzlpkBYO0= github.com/gonvenience/bunt v1.3.5 h1:wSQquifvwEWtzn27k1ngLfeLaStyt0k1b/K6TrlCNAs= github.com/gonvenience/bunt v1.3.5/go.mod h1:7ApqkVBEWvX04oJ28Q2WeI/BvJM6VtukaJAU/q/pTs8= -github.com/gonvenience/neat v1.3.11 h1:xxxCdGSuikMm7/Qp9/NwPfxLefKJM2XQiobGwPu63+Q= -github.com/gonvenience/neat v1.3.11/go.mod h1:aMdiynsB60zmUXaLgOIXQGiRgVGJQNNE/nr2F4BbIUA= +github.com/gonvenience/neat v1.3.12 h1:xwIyRbJcG9LgcDYys+HHLH9DqqHeQsUpS5CfBUeskbs= +github.com/gonvenience/neat v1.3.12/go.mod h1:8OljAIgPelN0uPPO94VBqxK+Kz98d6ZFwHDg5o/PfkE= github.com/gonvenience/term v1.0.2 h1:qKa2RydbWIrabGjR/fegJwpW5m+JvUwFL8mLhHzDXn0= github.com/gonvenience/term v1.0.2/go.mod h1:wThTR+3MzWtWn7XGVW6qQ65uaVf8GHED98KmwpuEQeo= github.com/gonvenience/text v1.0.7 h1:YmIqmgTwxnACYCG59DykgMbomwteYyNhAmEUEJtPl14= @@ -283,7 +284,7 @@ github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17 github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/pprof v0.0.0-20230406165453-00490a63f317 h1:hFhpt7CTmR3DX+b4R19ydQFtofxT0Sv3QsKNMVQYTMQ= +github.com/google/pprof v0.0.0-20230602150820-91b7bce49751 h1:hR7/MlvK23p6+lIw9SN1TigNLn9ZnF3W4SYRKq2gAHs= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -306,12 +307,12 @@ github.com/hashicorp/go-hclog v0.9.2 h1:CG6TE5H9/JXsFWJCfoIVpKFIkFe6ysEuHirp4DxC github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= -github.com/hashicorp/go-retryablehttp v0.7.2 h1:AcYqCvkpalPnPF2pn0KamgwamS42TqUDDYFRKq/RAd0= -github.com/hashicorp/go-retryablehttp v0.7.2/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8= +github.com/hashicorp/go-retryablehttp v0.7.4 h1:ZQgVdpTdAL7WpMIwLzCfbalOcSUdkDZnpUv3/+BxzFA= +github.com/hashicorp/go-retryablehttp v0.7.4/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8= github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/homeport/dyff v1.5.7 h1:24IrdSAb2fprR67XHMIagGoc1c4VNBV9ibNFKICsSis= -github.com/homeport/dyff v1.5.7/go.mod h1:AfPyh52slslbDkh1fy0MGIbKTiUy/2xbM1Zos5HZTm4= +github.com/homeport/dyff v1.5.8 h1:CZvnYFh6Pr/c+d32EnWODAHRTctrDKkz0tFr6yTYCpU= +github.com/homeport/dyff v1.5.8/go.mod h1:S669ekLW2ttUp6lT1d0jIlmH+eAsP3psfl9K6oMIBeU= github.com/imdario/mergo v0.3.15 h1:M8XP7IuFNsqUx6VPK2P9OSmsYsI/YFaGil0uD21V3dM= github.com/imdario/mergo v0.3.15/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= @@ -365,8 +366,8 @@ github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZb github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= -github.com/mattn/go-isatty v0.0.18 h1:DOKFKCQ7FNG2L1rbrmstDN4QVRdS89Nkh85u68Uwp98= -github.com/mattn/go-isatty v0.0.18/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= +github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU= github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= @@ -405,14 +406,14 @@ github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= -github.com/onsi/ginkgo/v2 v2.9.5 h1:+6Hr4uxzP4XIUyAkg61dWBw8lb/gc4/X5luuxN/EC+Q= -github.com/onsi/gomega v1.27.7 h1:fVih9JD6ogIiHUN6ePK7HJidyEDpWGVB5mzM7cWNXoU= -github.com/onsi/gomega v1.27.7/go.mod h1:1p8OOlwo2iUUDsHnOrjE5UKYJ+e3W8eQ3qSlRahPmr4= +github.com/onsi/ginkgo/v2 v2.11.0 h1:WgqUCUt/lT6yXoQ8Wef0fsNn5cAuMK7+KT9UFRz2tcU= +github.com/onsi/gomega v1.27.8 h1:gegWiwZjBsf2DgiSbf5hpokZ98JVDMcWkUiigk6/KXc= +github.com/onsi/gomega v1.27.8/go.mod h1:2J8vzI/s+2shY9XHRApDkdgPo1TKT7P2u6fXeJKFnNQ= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.0-rc3 h1:fzg1mXZFj8YdPeNkRXMg+zb88BFV0Ys52cJydRwBkb8= github.com/opencontainers/image-spec v1.1.0-rc3/go.mod h1:X4pATf0uXsnn3g5aiGIsVnJBR4mxhKzfwmvK/B2NTm8= -github.com/otiai10/copy v1.11.0 h1:OKBD80J/mLBrwnzXqGtFCzprFSGioo30JcmR4APsNwc= +github.com/otiai10/copy v1.12.0 h1:cLMgSQnXBs1eehF0Wy/FAGsgDTDmAqFR7rQylBb1nDY= github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= @@ -430,8 +431,8 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= -github.com/prometheus/client_golang v1.15.1 h1:8tXpTmJbyH5lydzFPoxSIJ0J46jdh3tylbvM1xCv0LI= -github.com/prometheus/client_golang v1.15.1/go.mod h1:e9yaBhRPU2pPNsZwE+JdQl0KEt1N9XgF6zxWmaC0xOk= +github.com/prometheus/client_golang v1.16.0 h1:yk/hx9hDbrGHovbci4BY+pRMfSuuat626eFsHb7tmT8= +github.com/prometheus/client_golang v1.16.0/go.mod h1:Zsulrv/L9oM40tJ7T815tM89lFEugiJ9HzIqaAx4LKc= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= @@ -444,8 +445,8 @@ github.com/prometheus/common v0.42.0/go.mod h1:xBwqVerjNdUDjgODMpudtOMwlOwf2SaTr github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/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.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= -github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= +github.com/prometheus/procfs v0.10.1 h1:kYK1Va/YMlutzCGazswoHKo//tZVlFpKYh+PymziUAg= +github.com/prometheus/procfs v0.10.1/go.mod h1:nwNm2aOCAYw8uTR/9bWRREkZFxAUcWzPHWJq+XBB/FM= github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= @@ -457,8 +458,8 @@ github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NF github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= -github.com/sirupsen/logrus v1.9.2 h1:oxx1eChJGI6Uks2ZC4W1zpLlVgqB8ner4EuQwV4Ik1Y= -github.com/sirupsen/logrus v1.9.2/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= +github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/skeema/knownhosts v1.1.1 h1:MTk78x9FPgDFVFkDLTrsnnfCJl7g1C/nnKvePgrIngE= github.com/skeema/knownhosts v1.1.1/go.mod h1:g4fPeYpque7P0xefxtGzV81ihjC8sX2IqpAoNkjxbMo= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= @@ -481,7 +482,7 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/texttheater/golang-levenshtein v1.0.1 h1:+cRNoVrfiwufQPhoMzB6N0Yf/Mqajr6t1lOv8GyGE2U= github.com/texttheater/golang-levenshtein v1.0.1/go.mod h1:PYAKrbF5sAiq9wd+H82hs7gNaen0CplQ9uvm6+enD/8= github.com/theckman/yacspin v0.13.12 h1:CdZ57+n0U6JMuh2xqjnjRq5Haj6v1ner2djtLQRzJr4= @@ -524,8 +525,8 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g= -golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= +golang.org/x/crypto v0.10.0 h1:LKqV2xt9+kDzSTfOhx4FrkEBcMrAgHSYgzywV9zcGmM= +golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= @@ -534,8 +535,8 @@ golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.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.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk= -golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.11.0 h1:bUO06HqtnRcc/7l71XBe4WcqTZ+3AH1J59zWDDwLKgU= +golang.org/x/mod v0.11.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -557,8 +558,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.6.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 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= -golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.11.0 h1:Gi2tvZIJyBtO9SDr1q9h5hEQCp/4L2RQ+ar0qjx2oNU= +golang.org/x/net v0.11.0/go.mod h1:2L/ixqYpgIVXmeoSA/4Lu7BzTG4KIyPIryS4IsOd1oQ= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.7.0 h1:qe6s0zUXlPX80/dITx3440hWZ7GwMwgDDyrSGTPJG/g= @@ -571,8 +572,8 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI= -golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= +golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -604,16 +605,16 @@ golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU= -golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.9.0 h1:KS/R3tvhPqvJvwcKfnBHJwwthS11LRhmM5D59eEXa0s= +golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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= golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/term v0.8.0 h1:n5xxQn2i3PC0yLAbjTpNT85q/Kgzcr2gIoX9OrJUols= -golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.9.0 h1:GRRCnKYhdQrD8kfRAdQ6Zcw1P0OcELxGLKJvtjVMZ28= +golang.org/x/term v0.9.0/go.mod h1:M6DEAAIenWoTxdKrOltXcmDY3rSplQUkrvaDU5FcQyo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -623,8 +624,8 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= -golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.10.0 h1:UpjohKhiEgNc0CSauXmwYftY1+LlaC75SJwh0SgCX58= +golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -637,8 +638,8 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= 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.9.1 h1:8WMNJAz3zrtPmnYC7ISf5dEn3MT0gY7jBJfw27yrrLo= -golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= +golang.org/x/tools v0.10.0 h1:tvDr/iQoUqNdohiYm0LmmKcBk+q86lb9EprIUFhHHGg= +golang.org/x/tools v0.10.0/go.mod h1:UJwyiVBsOA2uwvK/e5OY3GTpDUJriEd+/YlqAwLPmyM= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -703,8 +704,8 @@ k8s.io/apiextensions-apiserver v0.27.3 h1:xAwC1iYabi+TDfpRhxh4Eapl14Hs2OftM2DN5M k8s.io/apiextensions-apiserver v0.27.3/go.mod h1:BH3wJ5NsB9XE1w+R6SSVpKmYNyIiyIz9xAmBl8Mb+84= k8s.io/apimachinery v0.27.3 h1:Ubye8oBufD04l9QnNtW05idcOe9Z3GQN8+7PqmuVcUM= k8s.io/apimachinery v0.27.3/go.mod h1:XNfZ6xklnMCOGGFNqXG7bUrQCoR04dh/E7FprV6pb+E= -k8s.io/cli-runtime v0.27.2 h1:9HI8gfReNujKXt16tGOAnb8b4NZ5E+e0mQQHKhFGwYw= -k8s.io/cli-runtime v0.27.2/go.mod h1:9UecpyPDTkhiYY4d9htzRqN+rKomJgyb4wi0OfrmCjw= +k8s.io/cli-runtime v0.27.3 h1:h592I+2eJfXj/4jVYM+tu9Rv8FEc/dyCoD80UJlMW2Y= +k8s.io/cli-runtime v0.27.3/go.mod h1:LzXud3vFFuDFXn2LIrWnscPgUiEj7gQQcYZE2UPn9Kw= k8s.io/client-go v0.27.3 h1:7dnEGHZEJld3lYwxvLl7WoehK6lAq7GvgjxpA3nv1E8= k8s.io/client-go v0.27.3/go.mod h1:2MBEKuTo6V1lbKy3z1euEGnhPfGZLKTS9tiJ2xodM48= k8s.io/component-base v0.27.3 h1:g078YmdcdTfrCE4fFobt7qmVXwS8J/3cI1XxRi/2+6k= @@ -713,8 +714,8 @@ k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg= k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f h1:2kWPakN3i/k81b0gvD5C5FJ2kxm1WrQFanWchyKuqGg= k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f/go.mod h1:byini6yhqGC14c3ebc/QwanvYwhuMWF6yz2F8uwW8eg= -k8s.io/kubectl v0.27.2 h1:sSBM2j94MHBFRWfHIWtEXWCicViQzZsb177rNsKBhZg= -k8s.io/kubectl v0.27.2/go.mod h1:GCOODtxPcrjh+EC611MqREkU8RjYBh10ldQCQ6zpFKw= +k8s.io/kubectl v0.27.3 h1:HyC4o+8rCYheGDWrkcOQHGwDmyLKR5bxXFgpvF82BOw= +k8s.io/kubectl v0.27.3/go.mod h1:g9OQNCC2zxT+LT3FS09ZYqnDhlvsKAfFq76oyarBcq4= k8s.io/utils v0.0.0-20230505201702-9f6742963106 h1:EObNQ3TW2D+WptiYXlApGNLVy0zm/JIBVY9i+M4wpAU= k8s.io/utils v0.0.0-20230505201702-9f6742963106/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= sigs.k8s.io/cli-utils v0.34.0 h1:zCUitt54f0/MYj/ajVFnG6XSXMhpZ72O/3RewIchW8w= diff --git a/tests/azure/go.mod b/tests/azure/go.mod index 2fb9b9f7..9ebea258 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -7,16 +7,16 @@ replace github.com/go-git/go-git/v5 => github.com/go-git/go-git/v5 v5.7.1-0.2023 require ( github.com/Azure/azure-event-hubs-go/v3 v3.6.0 - github.com/fluxcd/helm-controller/api v0.34.1 - github.com/fluxcd/image-automation-controller/api v0.34.1 - github.com/fluxcd/image-reflector-controller/api v0.28.0 - github.com/fluxcd/kustomize-controller/api v1.0.0-rc.4 - github.com/fluxcd/notification-controller/api v1.0.0-rc.4 - github.com/fluxcd/pkg/apis/event v0.5.0 - github.com/fluxcd/pkg/apis/meta v1.1.0 - github.com/fluxcd/pkg/git v0.12.2 - github.com/fluxcd/pkg/git/gogit v0.12.0 - github.com/fluxcd/source-controller/api v1.0.0-rc.5 + github.com/fluxcd/helm-controller/api v0.35.0 + github.com/fluxcd/image-automation-controller/api v0.35.0 + github.com/fluxcd/image-reflector-controller/api v0.29.0 + github.com/fluxcd/kustomize-controller/api v1.0.0 + github.com/fluxcd/notification-controller/api v1.0.0 + github.com/fluxcd/pkg/apis/event v0.5.1 + github.com/fluxcd/pkg/apis/meta v1.1.1 + github.com/fluxcd/pkg/git v0.12.3 + github.com/fluxcd/pkg/git/gogit v0.12.1 + github.com/fluxcd/source-controller/api v1.0.0 github.com/go-git/go-git/v5 v5.7.0 github.com/hashicorp/hc-install v0.5.2 github.com/hashicorp/terraform-exec v0.18.1 @@ -24,9 +24,9 @@ require ( github.com/stretchr/testify v1.8.4 github.com/whilp/git-urls v1.0.0 go.uber.org/multierr v1.11.0 - k8s.io/api v0.27.2 - k8s.io/apimachinery v0.27.2 - k8s.io/client-go v0.27.2 + k8s.io/api v0.27.3 + k8s.io/apimachinery v0.27.3 + k8s.io/client-go v0.27.3 k8s.io/klog/v2 v2.100.1 sigs.k8s.io/controller-runtime v0.15.0 ) @@ -48,7 +48,7 @@ require ( github.com/Azure/go-autorest/tracing v0.6.0 // indirect github.com/Masterminds/semver/v3 v3.2.1 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect - github.com/ProtonMail/go-crypto v0.0.0-20230518184743-7afd39499903 // indirect + github.com/ProtonMail/go-crypto v0.0.0-20230619160724-3fbb1f12458c // indirect github.com/acomagu/bufpipe v1.0.4 // indirect github.com/apparentlymart/go-textseg/v13 v13.0.0 // indirect github.com/cloudflare/circl v1.3.3 // indirect @@ -59,8 +59,8 @@ require ( github.com/emirpasic/gods v1.18.1 // indirect github.com/evanphx/json-patch/v5 v5.6.0 // indirect github.com/fluxcd/pkg/apis/acl v0.1.0 // indirect - github.com/fluxcd/pkg/apis/kustomize v1.1.0 // indirect - github.com/fluxcd/pkg/ssh v0.7.4 // indirect + github.com/fluxcd/pkg/apis/kustomize v1.1.1 // indirect + github.com/fluxcd/pkg/ssh v0.8.0 // indirect github.com/fluxcd/pkg/version v0.2.2 // indirect github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect github.com/go-git/go-billy/v5 v5.4.1 // indirect @@ -99,13 +99,13 @@ require ( github.com/xanzy/ssh-agent v0.3.3 // indirect github.com/zclconf/go-cty v1.13.0 // indirect go.uber.org/atomic v1.10.0 // indirect - golang.org/x/crypto v0.9.0 // indirect + golang.org/x/crypto v0.10.0 // indirect golang.org/x/mod v0.10.0 // indirect golang.org/x/net v0.10.0 // indirect golang.org/x/oauth2 v0.5.0 // indirect - golang.org/x/sys v0.8.0 // indirect - golang.org/x/term v0.8.0 // indirect - golang.org/x/text v0.9.0 // indirect + golang.org/x/sys v0.9.0 // indirect + golang.org/x/term v0.9.0 // indirect + golang.org/x/text v0.10.0 // indirect golang.org/x/time v0.3.0 // indirect golang.org/x/tools v0.9.1 // indirect google.golang.org/appengine v1.6.7 // indirect @@ -114,7 +114,7 @@ require ( gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/apiextensions-apiserver v0.27.2 // indirect + k8s.io/apiextensions-apiserver v0.27.3 // indirect k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f // indirect k8s.io/utils v0.0.0-20230505201702-9f6742963106 // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect diff --git a/tests/azure/go.sum b/tests/azure/go.sum index 4ba31418..68e510e7 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -37,8 +37,8 @@ github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/ProtonMail/go-crypto v0.0.0-20230518184743-7afd39499903 h1:ZK3C5DtzV2nVAQTx5S5jQvMeDqWtD1By5mOoyY/xJek= -github.com/ProtonMail/go-crypto v0.0.0-20230518184743-7afd39499903/go.mod h1:8TI4H3IbrackdNgv+92dI+rhpCaLqM0IfpgCgenFvRE= +github.com/ProtonMail/go-crypto v0.0.0-20230619160724-3fbb1f12458c h1:figwFwYep1Qnl64Y+Rc8tyQWE0xvYAN+5EX+rD40pTU= +github.com/ProtonMail/go-crypto v0.0.0-20230619160724-3fbb1f12458c/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= github.com/acomagu/bufpipe v1.0.4 h1:e3H4WUzM3npvo5uv95QuJM3cQspFNtFBzvJ2oNjKIDQ= github.com/acomagu/bufpipe v1.0.4/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= @@ -49,13 +49,12 @@ github.com/apparentlymart/go-textseg/v13 v13.0.0/go.mod h1:ZK2fH7c4NqDTLtiYLvIkE github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= -github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= +github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= 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= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cloudflare/circl v1.1.0/go.mod h1:prBCrKB9DV4poKZY1l9zBXg2QJY7mvgRvtMxxK7fi4I= github.com/cloudflare/circl v1.3.3 h1:fE/Qz0QdIGqeWfnwq0RE0R7MI51s0M2E4Ga9kq5AEMs= github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= @@ -86,35 +85,35 @@ github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJ github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0= github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= -github.com/fluxcd/helm-controller/api v0.34.1 h1:oL6GG7weRIqkTlTFRoTY3DJpxqKpAFEoDDsYoxQCa8g= -github.com/fluxcd/helm-controller/api v0.34.1/go.mod h1:1v1UqS5jOgWdMDzvJBgdcY40RminDUO6A0by4IkHd5s= -github.com/fluxcd/image-automation-controller/api v0.34.1 h1:Y2RFhmltELcSGm3lsGgmRcJCBf0SdGlH/PwCxewk4w0= -github.com/fluxcd/image-automation-controller/api v0.34.1/go.mod h1:vRJscxpWXuDMmBj8vlFM3pgpVHqh5hf65RVnCaOnSGo= -github.com/fluxcd/image-reflector-controller/api v0.28.0 h1:2a1UxPU1RHTxl+5YFFB0KuOCHrR3hL0B7fvAPJo2UXY= -github.com/fluxcd/image-reflector-controller/api v0.28.0/go.mod h1:bY28TT8Jv/pvdF/m+c64QCEiCY2BShMe22l1zRDYm4s= -github.com/fluxcd/kustomize-controller/api v1.0.0-rc.4 h1:e5dO5HaFISFNzhfi4zuPniE545vVnEi3VnSBcbxcZqU= -github.com/fluxcd/kustomize-controller/api v1.0.0-rc.4/go.mod h1:UTJu1JMr+rkabWkUWMNiOeFeDu+4ZKfJIK+oqEwOjzc= -github.com/fluxcd/notification-controller/api v1.0.0-rc.4 h1:bDqIirpscGUY0+1u+RKvTEmX43iiZ2xeQLz27FoJJD8= -github.com/fluxcd/notification-controller/api v1.0.0-rc.4/go.mod h1:XL5h5/x46e41rtNc8mwxTKX4kAtgTNuzJS0PV2c0iIQ= +github.com/fluxcd/helm-controller/api v0.35.0 h1:UyhKXPni5z69DzPW7GtECGGdUwKsB+OTI0A/wc7HmFY= +github.com/fluxcd/helm-controller/api v0.35.0/go.mod h1:CdHMtr5wM0xgDt/PS147H7QQS+zDxAFgDW3ZN8MnUlU= +github.com/fluxcd/image-automation-controller/api v0.35.0 h1:B7yJdAbnx0hwI6ffVu0YAyc3d3sqjXrv6ySK++g3t28= +github.com/fluxcd/image-automation-controller/api v0.35.0/go.mod h1:67HbnrXDy550zJKZZbzAZ0yfzL0Ge1O18yn/shcgy0Y= +github.com/fluxcd/image-reflector-controller/api v0.29.0 h1:Epzq0b2sYxgSwKPBN0BWEInQwMLsvU7sjqKJuzGtyIg= +github.com/fluxcd/image-reflector-controller/api v0.29.0/go.mod h1:aYwq15SpkAD/urQme2iEsNouTscfR1Qo39KBlJ+0EW8= +github.com/fluxcd/kustomize-controller/api v1.0.0 h1:BVz6lEpfGbny0ppQ82LloLSK0OoEGC51YQaw31j4vT8= +github.com/fluxcd/kustomize-controller/api v1.0.0/go.mod h1:rYUovoofr3bVPgQowWj/CSGw73qoH0tOCopJ3oNh7lM= +github.com/fluxcd/notification-controller/api v1.0.0 h1:WiXS116pwhFp7Qe/Fc1GmKCfLBRnZu+rYCeIn07cO+4= +github.com/fluxcd/notification-controller/api v1.0.0/go.mod h1:uamWZwmhSHE7xdJkgRhH4Eo5/SKKILFI4o+CoQjlczc= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= -github.com/fluxcd/pkg/apis/event v0.5.0 h1:aAoo3AcWMh6hFfhxFED2TbyIk9590C7l17eh3Ys5I3I= -github.com/fluxcd/pkg/apis/event v0.5.0/go.mod h1:hiVliecUNHIeE128NFEgyoNxLcv/TWzrYHtf0ODj8fw= -github.com/fluxcd/pkg/apis/kustomize v1.1.0 h1:Fbv4dCB57r2+fiusozN7at8r7upTz58Z4wWw1njHPyU= -github.com/fluxcd/pkg/apis/kustomize v1.1.0/go.mod h1:CAe9Mjf9KVoTm1V4wpvq/FGXFDSnpBwfww/IG7mw3gM= -github.com/fluxcd/pkg/apis/meta v1.1.0 h1:vYU1mvUzztnQyTzZOLHQ3wm/tXd7E1QZ2V91zuVJPsQ= -github.com/fluxcd/pkg/apis/meta v1.1.0/go.mod h1:/QwCotRKL/BT6RSa4O75FlYW14fU8eRfKnoagzbkmL4= -github.com/fluxcd/pkg/git v0.12.2 h1:96xH3hy3WfwiD0DioyJZcGapYT3lmPc2s7jU5UM8buw= -github.com/fluxcd/pkg/git v0.12.2/go.mod h1:9TG4fEfGCF1XHLt9Xs7X2YOmkmWOiwfjH9tdGIQs8/8= -github.com/fluxcd/pkg/git/gogit v0.12.0 h1:0mCwQND0WpCVZYHLWcXJxRvKVcyWxH4JjMQFMaea8Q4= -github.com/fluxcd/pkg/git/gogit v0.12.0/go.mod h1:Kn+GfYfZBBIaXmQj39cQvrDxT/6y8leQxXZ5/B+YYTQ= +github.com/fluxcd/pkg/apis/event v0.5.1 h1:UrEmKwTK/lt42gMZunl8BQBMzjf8PSqGbWDs/GB839c= +github.com/fluxcd/pkg/apis/event v0.5.1/go.mod h1:GzBAzS8bq7751wvNkaSnr3kuwFVuWTPL20D77UgSNJQ= +github.com/fluxcd/pkg/apis/kustomize v1.1.1 h1:MSGn4z0R9PptmoPFHnx2nEZ8Jtl1sKfw0cuDQY2HYwM= +github.com/fluxcd/pkg/apis/kustomize v1.1.1/go.mod h1:0pCu0ecIY+ZM0iE/hOHYwCMZ3b0SpBrjJ1SH3FFyYdE= +github.com/fluxcd/pkg/apis/meta v1.1.1 h1:sLAKLbEu7rRzJ+Mytffu3NcpfdbOBTa6hcpOQzFWm+M= +github.com/fluxcd/pkg/apis/meta v1.1.1/go.mod h1:soCfzjFWbm1mqybDcOywWKTCEYlH3skpoNGTboVk234= +github.com/fluxcd/pkg/git v0.12.3 h1:1KmRYTdcBKDUutg6NIT4x0BCCMT72PjjXs3AnHjybHY= +github.com/fluxcd/pkg/git v0.12.3/go.mod h1:ID2sry5OqYbgJxvANc7s6V/YwafnQd7e1AGoDvwztAU= +github.com/fluxcd/pkg/git/gogit v0.12.1 h1:06jzHOTntYN5xCSQvyFXtLXdqoP8crLh7VYgtXS9+wo= +github.com/fluxcd/pkg/git/gogit v0.12.1/go.mod h1:Z4Ysp8VifKTvWpjJMKncJsgb2iBqHuIeK80VGjlU41Y= github.com/fluxcd/pkg/gittestserver v0.8.4 h1:rA/QUZnfH77ZZG+5xfMqjgEHJdzeeE6Nn1o8cops/bU= -github.com/fluxcd/pkg/ssh v0.7.4 h1:8GYneCKH2dxrHQBalcDgOCC2NtqD0JO91FlWgvnzrfo= -github.com/fluxcd/pkg/ssh v0.7.4/go.mod h1:9Syc8nVJaZEToPTU4E99j0jZ99w39oZtov+uiNX17sc= +github.com/fluxcd/pkg/ssh v0.8.0 h1:CqHIsWYfAtGxh2D6ZvzGTkFout6MaQnFpytPzJPbDLA= +github.com/fluxcd/pkg/ssh v0.8.0/go.mod h1:bo6HgWqIIuXU6r5HCxRFa7Uo7b4Nnzsz6MvdtAYn2XY= github.com/fluxcd/pkg/version v0.2.2 h1:ZpVXECeLA5hIQMft11iLp6gN3cKcz6UNuVTQPw/bRdI= github.com/fluxcd/pkg/version v0.2.2/go.mod h1:NGnh/no8S6PyfCDxRFrPY3T5BUnqP48MxfxNRU0z8C0= -github.com/fluxcd/source-controller/api v1.0.0-rc.5 h1:muoGOb/VitVEIOh877Ledi9AvibbyevPqvuH5byWU6g= -github.com/fluxcd/source-controller/api v1.0.0-rc.5/go.mod h1:W6tNXr3mRPhdc5+Jke9OZnuk/3THNzGzRJVhAtLfzss= +github.com/fluxcd/source-controller/api v1.0.0 h1:lPjmCXmEiI3tY4pReeVQBMuyLgdH8462W5ewUa9kgYM= +github.com/fluxcd/source-controller/api v1.0.0/go.mod h1:rAY5FRFGZUKpIFNyYANHIgPgJPvbALBHWsq/zHw/cXQ= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= @@ -244,7 +243,7 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/onsi/ginkgo/v2 v2.9.5 h1:+6Hr4uxzP4XIUyAkg61dWBw8lb/gc4/X5luuxN/EC+Q= -github.com/onsi/gomega v1.27.7 h1:fVih9JD6ogIiHUN6ePK7HJidyEDpWGVB5mzM7cWNXoU= +github.com/onsi/gomega v1.27.8 h1:gegWiwZjBsf2DgiSbf5hpokZ98JVDMcWkUiigk6/KXc= github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4= github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -311,9 +310,10 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g= -golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= +golang.org/x/crypto v0.10.0 h1:LKqV2xt9+kDzSTfOhx4FrkEBcMrAgHSYgzywV9zcGmM= +golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= @@ -342,6 +342,7 @@ golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96b golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.6.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 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= @@ -371,31 +372,33 @@ golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU= -golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.9.0 h1:KS/R3tvhPqvJvwcKfnBHJwwthS11LRhmM5D59eEXa0s= +golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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= +golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/term v0.8.0 h1:n5xxQn2i3PC0yLAbjTpNT85q/Kgzcr2gIoX9OrJUols= -golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.9.0 h1:GRRCnKYhdQrD8kfRAdQ6Zcw1P0OcELxGLKJvtjVMZ28= +golang.org/x/term v0.9.0/go.mod h1:M6DEAAIenWoTxdKrOltXcmDY3rSplQUkrvaDU5FcQyo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= -golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.10.0 h1:UpjohKhiEgNc0CSauXmwYftY1+LlaC75SJwh0SgCX58= +golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -464,14 +467,14 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -k8s.io/api v0.27.2 h1:+H17AJpUMvl+clT+BPnKf0E3ksMAzoBBg7CntpSuADo= -k8s.io/api v0.27.2/go.mod h1:ENmbocXfBT2ADujUXcBhHV55RIT31IIEvkntP6vZKS4= -k8s.io/apiextensions-apiserver v0.27.2 h1:iwhyoeS4xj9Y7v8YExhUwbVuBhMr3Q4bd/laClBV6Bo= -k8s.io/apiextensions-apiserver v0.27.2/go.mod h1:Oz9UdvGguL3ULgRdY9QMUzL2RZImotgxvGjdWRq6ZXQ= -k8s.io/apimachinery v0.27.2 h1:vBjGaKKieaIreI+oQwELalVG4d8f3YAMNpWLzDXkxeg= -k8s.io/apimachinery v0.27.2/go.mod h1:XNfZ6xklnMCOGGFNqXG7bUrQCoR04dh/E7FprV6pb+E= -k8s.io/client-go v0.27.2 h1:vDLSeuYvCHKeoQRhCXjxXO45nHVv2Ip4Fe0MfioMrhE= -k8s.io/client-go v0.27.2/go.mod h1:tY0gVmUsHrAmjzHX9zs7eCjxcBsf8IiNe7KQ52biTcQ= +k8s.io/api v0.27.3 h1:yR6oQXXnUEBWEWcvPWS0jQL575KoAboQPfJAuKNrw5Y= +k8s.io/api v0.27.3/go.mod h1:C4BNvZnQOF7JA/0Xed2S+aUyJSfTGkGFxLXz9MnpIpg= +k8s.io/apiextensions-apiserver v0.27.3 h1:xAwC1iYabi+TDfpRhxh4Eapl14Hs2OftM2DN5MpgKX4= +k8s.io/apiextensions-apiserver v0.27.3/go.mod h1:BH3wJ5NsB9XE1w+R6SSVpKmYNyIiyIz9xAmBl8Mb+84= +k8s.io/apimachinery v0.27.3 h1:Ubye8oBufD04l9QnNtW05idcOe9Z3GQN8+7PqmuVcUM= +k8s.io/apimachinery v0.27.3/go.mod h1:XNfZ6xklnMCOGGFNqXG7bUrQCoR04dh/E7FprV6pb+E= +k8s.io/client-go v0.27.3 h1:7dnEGHZEJld3lYwxvLl7WoehK6lAq7GvgjxpA3nv1E8= +k8s.io/client-go v0.27.3/go.mod h1:2MBEKuTo6V1lbKy3z1euEGnhPfGZLKTS9tiJ2xodM48= k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg= k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f h1:2kWPakN3i/k81b0gvD5C5FJ2kxm1WrQFanWchyKuqGg= From 25d2a3cdf1b81b09ab49425a7dc09de0925c0bbc Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Tue, 4 Jul 2023 17:37:10 +0300 Subject: [PATCH 584/818] Bump kubectl to v1.27.3 Signed-off-by: Stefan Prodan --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 18c5d4c7..0a4bcbf2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ FROM alpine:3.18 as builder RUN apk add --no-cache ca-certificates curl ARG ARCH=linux/amd64 -ARG KUBECTL_VER=1.27.2 +ARG KUBECTL_VER=1.27.3 RUN curl -sL https://storage.googleapis.com/kubernetes-release/release/v${KUBECTL_VER}/bin/${ARCH}/kubectl \ -o /usr/local/bin/kubectl && chmod +x /usr/local/bin/kubectl && \ From 506da2466b67187ab41c8119821744e8202bf8fd Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Wed, 5 Jul 2023 17:07:03 +0200 Subject: [PATCH 585/818] ci: release: disable interpretation backslash esc This ensures `jq` can properly parse the given `ARTIFACTS` JSON blob, as it contains escaped newlines in for example the Brew formula. This should address the issue with the generation of SLSA metadata. Signed-off-by: Hidde Beydals --- .github/workflows/release.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 005b8551..8261256e 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -94,7 +94,7 @@ jobs: run: | set -euo pipefail - hashes=$(echo $ARTIFACTS | jq --raw-output '.[] | {name, "digest": (.extra.Digest // .extra.Checksum)} | select(.digest) | {digest} + {name} | join(" ") | sub("^sha256:";"")' | base64 -w0) + hashes=$(echo -E $ARTIFACTS | jq --raw-output '.[] | {name, "digest": (.extra.Digest // .extra.Checksum)} | select(.digest) | {digest} + {name} | join(" ") | sub("^sha256:";"")' | base64 -w0) echo "hashes=$hashes" >> $GITHUB_OUTPUT image_url=fluxcd/flux-cli:${{ steps.prep.outputs.version }} From 625d865625469b48d505a43a854bb84600d9b06e Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Thu, 6 Jul 2023 10:21:16 +0300 Subject: [PATCH 586/818] ci: backport: set write permissions Signed-off-by: Stefan Prodan --- .github/workflows/backport.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/backport.yaml b/.github/workflows/backport.yaml index 86c795d1..70f2e31e 100644 --- a/.github/workflows/backport.yaml +++ b/.github/workflows/backport.yaml @@ -8,7 +8,8 @@ jobs: pull-request: runs-on: ubuntu-latest permissions: - contents: read + contents: write + pull-requests: write if: github.event.pull_request.state == 'closed' && github.event.pull_request.merged && (github.event_name != 'labeled' || startsWith('backport:', github.event.label.name)) steps: - name: Checkout From 36b39a50a44f86f04173e2a94dccaccb701c0229 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 5 Jul 2023 19:40:39 +0300 Subject: [PATCH 587/818] ci: release: extract the image tag from GITHUB_REF Signed-off-by: Stefan Prodan --- .github/workflows/release.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 8261256e..2e9cafb0 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -97,7 +97,7 @@ jobs: hashes=$(echo -E $ARTIFACTS | jq --raw-output '.[] | {name, "digest": (.extra.Digest // .extra.Checksum)} | select(.digest) | {digest} + {name} | join(" ") | sub("^sha256:";"")' | base64 -w0) echo "hashes=$hashes" >> $GITHUB_OUTPUT - image_url=fluxcd/flux-cli:${{ steps.prep.outputs.version }} + image_url=fluxcd/flux-cli:$GITHUB_REF_NAME echo "image_url=$image_url" >> $GITHUB_OUTPUT image_digest=$(docker buildx imagetools inspect ${image_url} --format '{{json .}}' | jq -r .manifest.digest) From 6f94ec728f7faedf2fbe7865b227967a468f1bbd Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Fri, 7 Jul 2023 11:33:20 +0200 Subject: [PATCH 588/818] action: rewrite action to use `$RUNNER_TOOL_CACHE` Plus the verification of the SHA256 of the archive, as advertised in the checksum file published together with the release. Signed-off-by: Hidde Beydals --- action/action.yml | 110 +++++++++++++++++++++++++++++++--------------- 1 file changed, 75 insertions(+), 35 deletions(-) diff --git a/action/action.yml b/action/action.yml index 75b749c7..01b2c5fe 100644 --- a/action/action.yml +++ b/action/action.yml @@ -1,64 +1,104 @@ name: Setup Flux CLI -description: A GitHub Action for running Flux commands -author: Stefan Prodan +description: A GitHub Action for installing the Flux CLI +author: Flux project branding: color: blue icon: command inputs: version: - description: "Flux version e.g. 0.8.0 (defaults to latest stable release)" + description: "Flux version e.g. 2.0.0 (defaults to latest stable release)" required: false arch: description: "arch can be amd64, arm64 or arm" - required: true - default: "amd64" + required: false + deprecationMessage: "No longer required, action will now detect runner arch." bindir: - description: "Optional location of the Flux binary. Will not use sudo if set. Updates System Path." + description: "Alternative location for the Flux binary, defaults to path relative to $RUNNER_TOOL_CACHE." required: false token: description: "GitHub Token used to authentication against the API (generally only needed to prevent quota limit errors)" required: false + deprecationMessage: "No longer required, action will now use GitHub token from runner." runs: using: composite steps: - - name: "Download flux binary to tmp" + - name: "Download the binary to the runner's cache dir" shell: bash run: | - ARCH=${{ inputs.arch }} VERSION=${{ inputs.version }} - TOKEN=${{ inputs.token }} + if [[ -z "$VERSION" ]] || [[ "$VERSION" = "latest" ]]; then + VERSION=$(curl -fsSL -H "Authorization: token ${{ github.token }}" https://api.github.com/repos/fluxcd/flux2/releases/latest | grep tag_name | cut -d '"' -f 4) + fi + if [[ -z "$VERSION" ]]; then + echo "Unable to determine Flux CLI version" + exit 1 + fi + if [[ $VERSION = v* ]]; then + VERSION="${VERSION:1}" + fi - if [ -z "${VERSION}" ]; then - if [ -n "${TOKEN}" ]; then - VERSION_SLUG=$(curl https://api.github.com/repos/fluxcd/flux2/releases/latest --silent --location --header "Authorization: token ${TOKEN}" | grep tag_name) + OS=$(echo "${RUNNER_OS}" | tr '[:upper:]' '[:lower:]') + if [[ "$OS" == "macos" ]]; then + OS="darwin" + fi + + ARCH=$(echo "${RUNNER_ARCH}" | tr '[:upper:]' '[:lower:]') + if [[ "$ARCH" == "x64" ]]; then + ARCH="amd64" + elif [[ "$ARCH" == "x86" ]]; then + ARCH="386" + fi + + FLUX_EXEC_FILE="flux" + if [[ "$OS" == "windows" ]]; then + FLUX_EXEC_FILE="${FLUX_EXEC_FILE}.exe" + fi + + FLUX_TOOL_DIR=${{ inputs.bindir }} + if [[ -z "$FLUX_TOOL_DIR" ]]; then + FLUX_TOOL_DIR="${RUNNER_TOOL_CACHE}/flux2/${VERSION}/${OS}/${ARCH}" + fi + if [[ ! -x "$FLUX_TOOL_DIR/FLUX_EXEC_FILE" ]]; then + DL_DIR="$(mktemp -dt flux2-XXXXXX)" + trap 'rm -rf $DL_DIR' EXIT + + echo "Downloading flux ${VERSION} for ${OS}/${ARCH}" + FLUX_TARGET_FILE="flux_${VERSION}_${OS}_${ARCH}.tar.gz" + if [[ "$OS" == "windows" ]]; then + FLUX_TARGET_FILE="flux_${VERSION}_${OS}_${ARCH}.zip" + fi + + FLUX_CHECKSUMS_FILE="flux_${VERSION}_checksums.txt" + + FLUX_DOWNLOAD_URL="https://github.com/fluxcd/flux2/releases/download/v${VERSION}/" + + curl -fsSL -o "$DL_DIR/$FLUX_TARGET_FILE" "$FLUX_DOWNLOAD_URL/$FLUX_TARGET_FILE" + curl -fsSL -o "$DL_DIR/$FLUX_CHECKSUMS_FILE" "$FLUX_DOWNLOAD_URL/$FLUX_CHECKSUMS_FILE" + + echo "Verifying checksum" + sum=$(openssl sha1 -sha256 "$DL_DIR/$FLUX_TARGET_FILE" | awk '{print $2}') + expected_sum=$(grep " $FLUX_TARGET_FILE\$" "$DL_DIR/$FLUX_CHECKSUMS_FILE" | awk '{print $1}') + if [ "$sum" != "$expected_sum" ]; then + echo "SHA sum of ${FLUX_TARGET_FILE} does not match. Aborting." + exit 1 + fi + + echo "Installing flux to ${FLUX_TOOL_DIR}" + mkdir -p "$FLUX_TOOL_DIR" + + if [[ "$OS" == "windows" ]]; then + unzip "$DL_DIR/$FLUX_TARGET_FILE" "$FLUX_EXEC_FILE" -d "$FLUX_TOOL_DIR" else - # With no GITHUB_TOKEN you will experience occasional failures due to rate limiting - # Ref: https://github.com/fluxcd/flux2/issues/3509#issuecomment-1400820992 - VERSION_SLUG=$(curl https://api.github.com/repos/fluxcd/flux2/releases/latest --silent --location | grep tag_name) + tar xzf "$DL_DIR/$FLUX_TARGET_FILE" -C "$FLUX_TOOL_DIR" $FLUX_EXEC_FILE fi - VERSION=$(echo "${VERSION_SLUG}" | sed -E 's/.*"([^"]+)".*/\1/' | cut -c 2-) + chmod +x "$FLUX_TOOL_DIR/$FLUX_EXEC_FILE" fi - BIN_URL="https://github.com/fluxcd/flux2/releases/download/v${VERSION}/flux_${VERSION}_linux_${ARCH}.tar.gz" - curl --silent --fail --location "${BIN_URL}" --output /tmp/flux.tar.gz - mkdir -p /tmp/flux - tar -C /tmp/flux/ -zxvf /tmp/flux.tar.gz - - name: "Copy Flux binary to execute location" - shell: bash - run: | - BINDIR=${{ inputs.bindir }} - if [ -z "${BINDIR}" ]; then - sudo cp /tmp/flux/flux /usr/local/bin - else - cp /tmp/flux/flux "${BINDIR}" - echo "${BINDIR}" >> $GITHUB_PATH - fi - - name: "Cleanup tmp" - shell: bash - run: | - rm -rf /tmp/flux/ /tmp/flux.tar.gz - - name: "Verify correct installation of binary" + echo "Adding flux to path" + echo "$FLUX_TOOL_DIR" >> "$GITHUB_PATH" + + - name: "Print installed flux version" shell: bash run: | flux -v From 0a58b0cdad0df374fc1caa4b9b784fd13e816c78 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Fri, 7 Jul 2023 11:47:45 +0200 Subject: [PATCH 589/818] ci: add workflow to test action Signed-off-by: Hidde Beydals --- .github/workflows/action.yaml | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 .github/workflows/action.yaml diff --git a/.github/workflows/action.yaml b/.github/workflows/action.yaml new file mode 100644 index 00000000..cdcb6c55 --- /dev/null +++ b/.github/workflows/action.yaml @@ -0,0 +1,29 @@ +name: test-gh-action + +on: + pull_request: + paths: + - 'action/**' + push: + paths: + - 'action/**' + branches: + - 'main' + - 'release/**' + +permissions: read-all + +jobs: + actions: + strategy: + fail-fast: false + matrix: + version: [ubuntu-latest, macos-latest, windows-latest] + + runs-on: ${{ matrix.version }} + name: action on ${{ matrix.version }} + steps: + - name: Checkout + uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 + - name: Setup flux + uses: ./action From 6f94844a35804ebcc1e77a7a0572cc970e3c94ac Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Fri, 7 Jul 2023 17:38:57 +0300 Subject: [PATCH 590/818] docs: Link to the Flux GitHub Action documentation Signed-off-by: Stefan Prodan --- action/README.md | 220 +++-------------------------------------------- 1 file changed, 13 insertions(+), 207 deletions(-) diff --git a/action/README.md b/action/README.md index ba094484..052277ac 100644 --- a/action/README.md +++ b/action/README.md @@ -1,216 +1,22 @@ # Flux GitHub Action -Usage: +To install the latest Flux CLI on Linux, macOS or Windows GitHub runners: ```yaml - steps: - - name: Setup Flux CLI - uses: fluxcd/flux2/action@main - - name: Run Flux commands - run: flux -v +steps: + - name: Setup Flux CLI + uses: fluxcd/flux2/action@main + with: + version: 'latest' + - name: Run Flux CLI + run: flux version --client ``` -The latest stable version of the `flux` binary is downloaded from -GitHub [releases](https://github.com/fluxcd/flux2/releases) -and placed at `/usr/local/bin/flux`. +The Flux GitHub Action can be used to automate various tasks in CI, such as: -Note that this action can only be used on GitHub **Linux** runners. -You can change the arch (defaults to `amd64`) with: +- [Automate Flux upgrades on clusters via Pull Requests](https://fluxcd.io/flux/flux-gh-action/#automate-flux-updates) +- [Push Kubernetes manifests to container registries](https://fluxcd.io/flux/flux-gh-action/#push-kubernetes-manifests-to-container-registries) +- [Run end-to-end testing with Flux and Kubernetes Kind](https://fluxcd.io/flux/flux-gh-action/#end-to-end-testing) -```yaml - steps: - - name: Setup Flux CLI - uses: fluxcd/flux2/action@main - with: - arch: arm64 # can be amd64, arm64 or arm -``` - -You can download a specific version with: - -```yaml - steps: - - name: Setup Flux CLI - uses: fluxcd/flux2/action@main - with: - version: 0.32.0 -``` - -You can also authenticate against the GitHub API using GitHub Actions' `GITHUB_TOKEN` secret. - -For more information, please [read about the GitHub token secret](https://docs.github.com/en/actions/security-guides/automatic-token-authentication#about-the-github_token-secret). - -```yaml - steps: - - name: Setup Flux CLI - uses: fluxcd/flux2/action@main - with: - token: ${{ secrets.GITHUB_TOKEN }} -``` - -This is useful if you are seeing failures on shared runners, those failures are usually API limits being hit. - -### Automate Flux updates - -Example workflow for updating Flux's components generated with `flux bootstrap --path=clusters/production`: - -```yaml -name: update-flux - -on: - workflow_dispatch: - schedule: - - cron: "0 * * * *" - -permissions: - contents: write - pull-requests: write - -jobs: - components: - runs-on: ubuntu-latest - steps: - - name: Check out code - uses: actions/checkout@v3 - - name: Setup Flux CLI - uses: fluxcd/flux2/action@main - - name: Check for updates - id: update - run: | - flux install \ - --export > ./clusters/production/flux-system/gotk-components.yaml - - VERSION="$(flux -v)" - echo "flux_version=$VERSION" >> $GITHUB_OUTPUT - - name: Create Pull Request - uses: peter-evans/create-pull-request@v4 - with: - token: ${{ secrets.GITHUB_TOKEN }} - branch: update-flux - commit-message: Update to ${{ steps.update.outputs.flux_version }} - title: Update to ${{ steps.update.outputs.flux_version }} - body: | - ${{ steps.update.outputs.flux_version }} -``` - -### Push Kubernetes manifests to container registries - -Example workflow for publishing Kubernetes manifests bundled as OCI artifacts to GitHub Container Registry: - -```yaml -name: push-artifact-staging - -on: - push: - branches: - - 'main' - -permissions: - packages: write # needed for ghcr.io access - -env: - OCI_REPO: "oci://ghcr.io/my-org/manifests/${{ github.event.repository.name }}" - -jobs: - kubernetes: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v3 - - name: Setup Flux CLI - uses: fluxcd/flux2/action@main - - name: Login to GHCR - uses: docker/login-action@v2 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - name: Generate manifests - run: | - kustomize build ./manifests/staging > ./deploy/app.yaml - - name: Push manifests - run: | - flux push artifact $OCI_REPO:$(git rev-parse --short HEAD) \ - --path="./deploy" \ - --source="$(git config --get remote.origin.url)" \ - --revision="$(git branch --show-current)@sha1:$(git rev-parse HEAD)" - - name: Deploy manifests to staging - run: | - flux tag artifact $OCI_REPO:$(git rev-parse --short HEAD) --tag staging -``` - -### Push and sign Kubernetes manifests to container registries - -Example workflow for publishing Kubernetes manifests bundled as OCI artifacts -which are signed with Cosign and GitHub OIDC: - -```yaml -name: push-sign-artifact - -on: - push: - branches: - - 'main' - -permissions: - packages: write # needed for ghcr.io access - id-token: write # needed for keyless signing - -env: - OCI_REPO: "oci://ghcr.io/my-org/manifests/${{ github.event.repository.name }}" - -jobs: - kubernetes: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v3 - - name: Setup Flux CLI - uses: fluxcd/flux2/action@main - - name: Setup Cosign - uses: sigstore/cosign-installer@main - - name: Login to GHCR - uses: docker/login-action@v2 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - name: Push and sign manifests - run: | - digest_url=$(flux push artifact \ - $OCI_REPO:$(git rev-parse --short HEAD) \ - --path="./manifests" \ - --source="$(git config --get remote.origin.url)" \ - --revision="$(git branch --show-current)@sha1:$(git rev-parse HEAD)" |\ - jq -r '. | .repository + "@" + .digest') - - cosign sign $digest_url -``` - -### End-to-end testing - -Example workflow for running Flux in Kubernetes Kind: - -```yaml -name: e2e - -on: - push: - branches: - - '*' - -jobs: - kubernetes: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v3 - - name: Setup Flux CLI - uses: fluxcd/flux2/action@main - - name: Setup Kubernetes Kind - uses: engineerd/setup-kind@v0.5.0 - - name: Install Flux in Kubernetes Kind - run: flux install -``` +For more information, please see the [Flux GitHub Action documentation](/flux/flux-gh-action.md). -A complete e2e testing workflow is available here -[flux2-kustomize-helm-example](https://github.com/fluxcd/flux2-kustomize-helm-example/blob/main/.github/workflows/e2e.yaml) From cfd4d285da4803c0fa955e5e788266965f10b30b Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Mon, 10 Jul 2023 12:02:21 +0000 Subject: [PATCH 591/818] Update toolkit components - kustomize-controller to v1.0.1 https://github.com/fluxcd/kustomize-controller/blob/v1.0.1/CHANGELOG.md - source-controller to v1.0.1 https://github.com/fluxcd/source-controller/blob/v1.0.1/CHANGELOG.md - image-reflector-controller to v0.29.1 https://github.com/fluxcd/image-reflector-controller/blob/v0.29.1/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 6 +++--- go.sum | 12 ++++++------ .../image-reflector-controller/kustomization.yaml | 4 ++-- .../bases/kustomize-controller/kustomization.yaml | 4 ++-- manifests/bases/source-controller/kustomization.yaml | 4 ++-- manifests/crds/kustomization.yaml | 6 +++--- 6 files changed, 18 insertions(+), 18 deletions(-) diff --git a/go.mod b/go.mod index 98800253..ce20fed5 100644 --- a/go.mod +++ b/go.mod @@ -13,8 +13,8 @@ require ( github.com/fluxcd/go-git-providers v0.18.0 github.com/fluxcd/helm-controller/api v0.35.0 github.com/fluxcd/image-automation-controller/api v0.35.0 - github.com/fluxcd/image-reflector-controller/api v0.29.0 - github.com/fluxcd/kustomize-controller/api v1.0.0 + github.com/fluxcd/image-reflector-controller/api v0.29.1 + github.com/fluxcd/kustomize-controller/api v1.0.1 github.com/fluxcd/notification-controller/api v1.0.0 github.com/fluxcd/pkg/apis/event v0.5.1 github.com/fluxcd/pkg/apis/meta v1.1.1 @@ -28,7 +28,7 @@ require ( github.com/fluxcd/pkg/ssh v0.8.0 github.com/fluxcd/pkg/tar v0.2.0 github.com/fluxcd/pkg/version v0.2.2 - github.com/fluxcd/source-controller/api v1.0.0 + github.com/fluxcd/source-controller/api v1.0.1 github.com/go-git/go-git/v5 v5.7.0 github.com/go-logr/logr v1.2.4 github.com/gonvenience/bunt v1.3.5 diff --git a/go.sum b/go.sum index 86e41f66..423b1075 100644 --- a/go.sum +++ b/go.sum @@ -155,10 +155,10 @@ github.com/fluxcd/helm-controller/api v0.35.0 h1:UyhKXPni5z69DzPW7GtECGGdUwKsB+O github.com/fluxcd/helm-controller/api v0.35.0/go.mod h1:CdHMtr5wM0xgDt/PS147H7QQS+zDxAFgDW3ZN8MnUlU= github.com/fluxcd/image-automation-controller/api v0.35.0 h1:B7yJdAbnx0hwI6ffVu0YAyc3d3sqjXrv6ySK++g3t28= github.com/fluxcd/image-automation-controller/api v0.35.0/go.mod h1:67HbnrXDy550zJKZZbzAZ0yfzL0Ge1O18yn/shcgy0Y= -github.com/fluxcd/image-reflector-controller/api v0.29.0 h1:Epzq0b2sYxgSwKPBN0BWEInQwMLsvU7sjqKJuzGtyIg= -github.com/fluxcd/image-reflector-controller/api v0.29.0/go.mod h1:aYwq15SpkAD/urQme2iEsNouTscfR1Qo39KBlJ+0EW8= -github.com/fluxcd/kustomize-controller/api v1.0.0 h1:BVz6lEpfGbny0ppQ82LloLSK0OoEGC51YQaw31j4vT8= -github.com/fluxcd/kustomize-controller/api v1.0.0/go.mod h1:rYUovoofr3bVPgQowWj/CSGw73qoH0tOCopJ3oNh7lM= +github.com/fluxcd/image-reflector-controller/api v0.29.1 h1:mnFaO60b8WyCxpc72utmAJ7J1ZtZjGGThH9NdxVeEyo= +github.com/fluxcd/image-reflector-controller/api v0.29.1/go.mod h1:aYwq15SpkAD/urQme2iEsNouTscfR1Qo39KBlJ+0EW8= +github.com/fluxcd/kustomize-controller/api v1.0.1 h1:zz9zx4Mc7rw9gqdgdhMWX1uDM2uR1x7WBUujKs4mdx8= +github.com/fluxcd/kustomize-controller/api v1.0.1/go.mod h1:rYUovoofr3bVPgQowWj/CSGw73qoH0tOCopJ3oNh7lM= github.com/fluxcd/notification-controller/api v1.0.0 h1:WiXS116pwhFp7Qe/Fc1GmKCfLBRnZu+rYCeIn07cO+4= github.com/fluxcd/notification-controller/api v1.0.0/go.mod h1:uamWZwmhSHE7xdJkgRhH4Eo5/SKKILFI4o+CoQjlczc= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= @@ -190,8 +190,8 @@ github.com/fluxcd/pkg/tar v0.2.0 h1:HEUHgONQYsJGeZZ4x6h5nQU9Aox1I4T3bOp1faWTqf8= github.com/fluxcd/pkg/tar v0.2.0/go.mod h1:w0/TOC7kwBJhnSJn7TCABkc/I7ib1f2Yz6vOsbLBnhw= github.com/fluxcd/pkg/version v0.2.2 h1:ZpVXECeLA5hIQMft11iLp6gN3cKcz6UNuVTQPw/bRdI= github.com/fluxcd/pkg/version v0.2.2/go.mod h1:NGnh/no8S6PyfCDxRFrPY3T5BUnqP48MxfxNRU0z8C0= -github.com/fluxcd/source-controller/api v1.0.0 h1:lPjmCXmEiI3tY4pReeVQBMuyLgdH8462W5ewUa9kgYM= -github.com/fluxcd/source-controller/api v1.0.0/go.mod h1:rAY5FRFGZUKpIFNyYANHIgPgJPvbALBHWsq/zHw/cXQ= +github.com/fluxcd/source-controller/api v1.0.1 h1:nycylbNBnQd+EO4UHpqXqAQJ1cGAPxgBbrfERCQ1pp8= +github.com/fluxcd/source-controller/api v1.0.1/go.mod h1:rAY5FRFGZUKpIFNyYANHIgPgJPvbALBHWsq/zHw/cXQ= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= diff --git a/manifests/bases/image-reflector-controller/kustomization.yaml b/manifests/bases/image-reflector-controller/kustomization.yaml index e255d6ca..e13f3f02 100644 --- a/manifests/bases/image-reflector-controller/kustomization.yaml +++ b/manifests/bases/image-reflector-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.29.0/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.29.0/image-reflector-controller.deployment.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.29.1/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.29.1/image-reflector-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/kustomize-controller/kustomization.yaml b/manifests/bases/kustomize-controller/kustomization.yaml index 4544139c..1ae7b51f 100644 --- a/manifests/bases/kustomize-controller/kustomization.yaml +++ b/manifests/bases/kustomize-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/kustomize-controller/releases/download/v1.0.0/kustomize-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v1.0.0/kustomize-controller.deployment.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v1.0.1/kustomize-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v1.0.1/kustomize-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index 10296128..3b8d6ec3 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v1.0.0/source-controller.crds.yaml -- https://github.com/fluxcd/source-controller/releases/download/v1.0.0/source-controller.deployment.yaml +- https://github.com/fluxcd/source-controller/releases/download/v1.0.1/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v1.0.1/source-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index 57e9d0d8..833252a6 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -1,9 +1,9 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v1.0.0/source-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v1.0.0/kustomize-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v1.0.1/source-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v1.0.1/kustomize-controller.crds.yaml - https://github.com/fluxcd/helm-controller/releases/download/v0.35.0/helm-controller.crds.yaml - https://github.com/fluxcd/notification-controller/releases/download/v1.0.0/notification-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.29.0/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.29.1/image-reflector-controller.crds.yaml - https://github.com/fluxcd/image-automation-controller/releases/download/v0.35.0/image-automation-controller.crds.yaml From 6fa495b84351d77a4504fd2015dafe4a9a09ade1 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Mon, 10 Jul 2023 16:10:20 +0200 Subject: [PATCH 592/818] action: re-allow configuration of non-default token To allow usage of action on GitHub Enterprise instances. Signed-off-by: Hidde Beydals --- action/action.yml | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/action/action.yml b/action/action.yml index 01b2c5fe..505394ee 100644 --- a/action/action.yml +++ b/action/action.yml @@ -16,9 +16,8 @@ inputs: description: "Alternative location for the Flux binary, defaults to path relative to $RUNNER_TOOL_CACHE." required: false token: - description: "GitHub Token used to authentication against the API (generally only needed to prevent quota limit errors)" + description: "Token used to authentication against the GitHub.com API. Defaults to the token from the GitHub context of the workflow." required: false - deprecationMessage: "No longer required, action will now use GitHub token from runner." runs: using: composite steps: @@ -26,8 +25,14 @@ runs: shell: bash run: | VERSION=${{ inputs.version }} + + TOKEN=${{ inputs.token }} + if [[ -z "$TOKEN" ]]; then + TOKEN=${{ github.token }} + fi + if [[ -z "$VERSION" ]] || [[ "$VERSION" = "latest" ]]; then - VERSION=$(curl -fsSL -H "Authorization: token ${{ github.token }}" https://api.github.com/repos/fluxcd/flux2/releases/latest | grep tag_name | cut -d '"' -f 4) + VERSION=$(curl -fsSL -H "Authorization: token ${TOKEN}" https://api.github.com/repos/fluxcd/flux2/releases/latest | grep tag_name | cut -d '"' -f 4) fi if [[ -z "$VERSION" ]]; then echo "Unable to determine Flux CLI version" From 90d95988aa730013b10a32297d421f28334dcdde Mon Sep 17 00:00:00 2001 From: Soule BA Date: Mon, 10 Jul 2023 17:22:07 +0200 Subject: [PATCH 593/818] Take into account the server-side inventory for local diff If implemented users will be able to use a local kustomization file while retrieving status from the live kustomization file. Signed-off-by: Soule BA --- cmd/flux/build_kustomization_test.go | 1 + internal/build/build.go | 44 ++++++--- internal/build/build_test.go | 137 +++++++++++++++++++++++++++ internal/build/diff.go | 7 +- 4 files changed, 173 insertions(+), 16 deletions(-) diff --git a/cmd/flux/build_kustomization_test.go b/cmd/flux/build_kustomization_test.go index d1d06817..383fb1fc 100644 --- a/cmd/flux/build_kustomization_test.go +++ b/cmd/flux/build_kustomization_test.go @@ -159,6 +159,7 @@ spec: tmpl := map[string]string{ "fluxns": allocateNamespace("flux-system"), } + setup(t, tmpl) testEnv.CreateObjectFile("./testdata/build-kustomization/podinfo-source.yaml", tmpl, t) diff --git a/internal/build/build.go b/internal/build/build.go index 98f0f683..a9e55c68 100644 --- a/internal/build/build.go +++ b/internal/build/build.go @@ -204,19 +204,36 @@ func NewBuilder(name, resources string, opts ...BuilderOptionFunc) (*Builder, er return b, nil } +func (b *Builder) resolveKustomization(liveKus *kustomizev1.Kustomization) (k *kustomizev1.Kustomization, err error) { + // local kustomization file takes precedence over live kustomization + if b.kustomizationFile != "" { + k, err = b.unMarshallKustomization() + if err != nil { + return + } + if !b.dryRun && liveKus != nil && liveKus.Status.Inventory != nil { + // merge the live kustomization status with the local kustomization in order to get the + // live resources status + k.Status = *liveKus.Status.DeepCopy() + } + } else { + k = liveKus + } + return +} + func (b *Builder) getKustomization(ctx context.Context) (*kustomizev1.Kustomization, error) { + liveKus := &kustomizev1.Kustomization{} namespacedName := types.NamespacedName{ Namespace: b.namespace, Name: b.name, } - - k := &kustomizev1.Kustomization{} - err := b.client.Get(ctx, namespacedName, k) + err := b.client.Get(ctx, namespacedName, liveKus) if err != nil { return nil, err } - return k, nil + return liveKus, nil } // Build builds the yaml manifests from the kustomization object @@ -251,19 +268,18 @@ func (b *Builder) build() (m resmap.ResMap, err error) { defer cancel() // Get the kustomization object - var k *kustomizev1.Kustomization - if b.kustomizationFile != "" { - k, err = b.unMarshallKustomization() - if err != nil { - return - } - } else { - k, err = b.getKustomization(ctx) + liveKus := &kustomizev1.Kustomization{} + if !b.dryRun { + liveKus, err = b.getKustomization(ctx) if err != nil { - err = fmt.Errorf("failed to get kustomization object: %w", err) - return + return nil, fmt.Errorf("failed to get kustomization object: %w", err) } } + k, err := b.resolveKustomization(liveKus) + if err != nil { + err = fmt.Errorf("failed to get kustomization object: %w", err) + return + } // store the kustomization object b.kustomization = k diff --git a/internal/build/build_test.go b/internal/build/build_test.go index df4a7099..cb40c82c 100644 --- a/internal/build/build_test.go +++ b/internal/build/build_test.go @@ -17,10 +17,15 @@ limitations under the License. package build import ( + "fmt" "strings" "testing" + "time" + kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" + "github.com/fluxcd/pkg/apis/meta" "github.com/google/go-cmp/cmp" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "sigs.k8s.io/kustomize/api/resource" "sigs.k8s.io/kustomize/kyaml/yaml" ) @@ -215,3 +220,135 @@ func Test_unMarshallKustomization(t *testing.T) { }) } } + +func Test_ResolveKustomization(t *testing.T) { + tests := []struct { + name string + localKsFile string + liveKustomization *kustomizev1.Kustomization + dryrun bool + }{ + { + name: "valid kustomization", + localKsFile: "testdata/local-kustomization/valid.yaml", + }, + { + name: "local and live kustomization", + localKsFile: "testdata/local-kustomization/valid.yaml", + liveKustomization: &kustomizev1.Kustomization{ + ObjectMeta: metav1.ObjectMeta{ + Name: "podinfo", + Namespace: "flux-system", + }, + Spec: kustomizev1.KustomizationSpec{ + Interval: metav1.Duration{Duration: time.Minute * 5}, + Path: "./testdata/local-kustomization/valid.yaml", + }, + Status: kustomizev1.KustomizationStatus{ + Conditions: []metav1.Condition{ + { + Type: meta.ReadyCondition, + Status: metav1.ConditionTrue, + }, + }, + Inventory: &kustomizev1.ResourceInventory{ + Entries: []kustomizev1.ResourceRef{ + { + ID: "flux-system_podinfo_v1_service_podinfo", + Version: "v1", + }, + }, + }, + }, + }, + }, + { + name: "local and live kustomization with dryrun", + localKsFile: "testdata/local-kustomization/valid.yaml", + liveKustomization: &kustomizev1.Kustomization{ + ObjectMeta: metav1.ObjectMeta{ + Name: "podinfo", + Namespace: "flux-system", + }, + Spec: kustomizev1.KustomizationSpec{ + Interval: metav1.Duration{Duration: time.Minute * 5}, + Path: "./testdata/local-kustomization/valid.yaml", + }, + Status: kustomizev1.KustomizationStatus{ + Conditions: []metav1.Condition{ + { + Type: meta.ReadyCondition, + Status: metav1.ConditionTrue, + }, + }, + Inventory: &kustomizev1.ResourceInventory{ + Entries: []kustomizev1.ResourceRef{ + { + ID: "flux-system_podinfo_v1_service_podinfo", + Version: "v1", + }, + }, + }, + }, + }, + dryrun: true, + }, + { + name: "live kustomization", + liveKustomization: &kustomizev1.Kustomization{ + ObjectMeta: metav1.ObjectMeta{ + Name: "podinfo", + Namespace: "flux-system", + }, + Spec: kustomizev1.KustomizationSpec{ + Interval: metav1.Duration{Duration: time.Minute * 5}, + Path: "./testdata/local-kustomization/valid.yaml", + }, + Status: kustomizev1.KustomizationStatus{ + Conditions: []metav1.Condition{ + { + Type: meta.ReadyCondition, + Status: metav1.ConditionTrue, + }, + }, + Inventory: &kustomizev1.ResourceInventory{ + Entries: []kustomizev1.ResourceRef{ + { + ID: "flux-system_podinfo_v1_service_podinfo", + Version: "v1", + }, + }, + }, + }, + }, + }, + } + + b := &Builder{} + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + b.kustomizationFile = tt.localKsFile + b.dryRun = tt.dryrun + ks, err := b.resolveKustomization(tt.liveKustomization) + if err != nil { + t.Errorf("unexpected err '%s'", err) + } + if !tt.dryrun { + if b.kustomizationFile == "" { + if cmp.Diff(ks, tt.liveKustomization) != "" { + t.Errorf("expected kustomization to match live kustomization") + } + } else { + if tt.liveKustomization != nil && cmp.Diff(ks.Status, tt.liveKustomization.Status) != "" { + t.Errorf("expected kustomization status to match live kustomization status") + } + } + } else { + if ks.Status.Inventory != nil { + fmt.Println(ks.Status.Inventory) + t.Errorf("expected kustomization status to be nil") + } + } + }) + } +} diff --git a/internal/build/diff.go b/internal/build/diff.go index e693e1d9..c316df9f 100644 --- a/internal/build/diff.go +++ b/internal/build/diff.go @@ -136,11 +136,14 @@ func (b *Builder) Diff() (string, bool, error) { if b.kustomization.Spec.Prune && len(diffErrs) == 0 { oldStatus := b.kustomization.Status.DeepCopy() if oldStatus.Inventory != nil { - diffObjects, err := diffInventory(oldStatus.Inventory, newInventory) + staleObjects, err := diffInventory(oldStatus.Inventory, newInventory) if err != nil { return "", createdOrDrifted, err } - for _, object := range diffObjects { + if len(staleObjects) > 0 { + createdOrDrifted = true + } + for _, object := range staleObjects { output.WriteString(writeString(fmt.Sprintf("► %s deleted\n", ssa.FmtUnstructured(object)), bunt.OrangeRed)) } } From 3b42b200d376430f0e24d35f1a600447d92da531 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Tue, 11 Jul 2023 09:50:42 +0200 Subject: [PATCH 594/818] action: support `openssl` and `sha256sum` As availability may be limited in some edge cases. When a job is for example running within a container, `openssl` is not always available. However, when running on a macOS or Windows runner, the actual opposite is true. Signed-off-by: Hidde Beydals --- action/action.yml | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/action/action.yml b/action/action.yml index 505394ee..d88786ee 100644 --- a/action/action.yml +++ b/action/action.yml @@ -81,7 +81,18 @@ runs: curl -fsSL -o "$DL_DIR/$FLUX_CHECKSUMS_FILE" "$FLUX_DOWNLOAD_URL/$FLUX_CHECKSUMS_FILE" echo "Verifying checksum" - sum=$(openssl sha1 -sha256 "$DL_DIR/$FLUX_TARGET_FILE" | awk '{print $2}') + sum="" + if command -v openssl > /dev/null; then + sum=$(openssl sha256 "$DL_DIR/$FLUX_TARGET_FILE" | awk '{print $2}') + elif command -v sha256sum > /dev/null; then + sum=$(sha256sum "$DL_DIR/$FLUX_TARGET_FILE" | awk '{print $1}') + fi + + if [[ -z "$sum" ]]; then + echo "Neither openssl nor sha256sum found. Cannot calculate checksum." + exit 1 + fi + expected_sum=$(grep " $FLUX_TARGET_FILE\$" "$DL_DIR/$FLUX_CHECKSUMS_FILE" | awk '{print $1}') if [ "$sum" != "$expected_sum" ]; then echo "SHA sum of ${FLUX_TARGET_FILE} does not match. Aborting." From bca1fa0968e5004e2bafe90b8ffebdc3e73a0212 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Tue, 11 Jul 2023 14:14:27 +0300 Subject: [PATCH 595/818] Update dependencies - bump the APIs packages in tests - bump golang crypto and term to latest Signed-off-by: Stefan Prodan --- go.mod | 14 +++++++------- go.sum | 28 ++++++++++++++-------------- tests/azure/go.mod | 6 +++--- tests/azure/go.sum | 12 ++++++------ 4 files changed, 30 insertions(+), 30 deletions(-) diff --git a/go.mod b/go.mod index ce20fed5..ff7f22d2 100644 --- a/go.mod +++ b/go.mod @@ -7,9 +7,9 @@ replace github.com/go-git/go-git/v5 => github.com/go-git/go-git/v5 v5.7.1-0.2023 require ( github.com/Masterminds/semver/v3 v3.2.1 - github.com/ProtonMail/go-crypto v0.0.0-20230626094100-7e9e0395ebec + github.com/ProtonMail/go-crypto v0.0.0-20230710112148-e01326fd72eb github.com/cyphar/filepath-securejoin v0.2.3 - github.com/distribution/distribution/v3 v3.0.0-20230629214736-bac7f02e02a1 + github.com/distribution/distribution/v3 v3.0.0-20230711080520-40ef2353fa4f github.com/fluxcd/go-git-providers v0.18.0 github.com/fluxcd/helm-controller/api v0.35.0 github.com/fluxcd/image-automation-controller/api v0.35.0 @@ -21,7 +21,7 @@ require ( github.com/fluxcd/pkg/git v0.12.3 github.com/fluxcd/pkg/git/gogit v0.12.1 github.com/fluxcd/pkg/kustomize v1.3.4 - github.com/fluxcd/pkg/oci v0.28.0 + github.com/fluxcd/pkg/oci v0.29.0 github.com/fluxcd/pkg/runtime v0.40.0 github.com/fluxcd/pkg/sourceignore v0.3.4 github.com/fluxcd/pkg/ssa v0.28.2 @@ -45,8 +45,8 @@ require ( github.com/spf13/cobra v1.7.0 github.com/spf13/pflag v1.0.5 github.com/theckman/yacspin v0.13.12 - golang.org/x/crypto v0.10.0 - golang.org/x/term v0.9.0 + golang.org/x/crypto v0.11.0 + golang.org/x/term v0.10.0 k8s.io/api v0.27.3 k8s.io/apiextensions-apiserver v0.27.3 k8s.io/apimachinery v0.27.3 @@ -202,8 +202,8 @@ require ( golang.org/x/net v0.11.0 // indirect golang.org/x/oauth2 v0.7.0 // indirect golang.org/x/sync v0.3.0 // indirect - golang.org/x/sys v0.9.0 // indirect - golang.org/x/text v0.10.0 // indirect + golang.org/x/sys v0.10.0 // indirect + golang.org/x/text v0.11.0 // indirect golang.org/x/time v0.3.0 // indirect golang.org/x/tools v0.10.0 // indirect gomodules.xyz/jsonpatch/v2 v2.3.0 // indirect diff --git a/go.sum b/go.sum index 423b1075..e7dd3b72 100644 --- a/go.sum +++ b/go.sum @@ -23,8 +23,8 @@ github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/ProtonMail/go-crypto v0.0.0-20230626094100-7e9e0395ebec h1:vV3RryLxt42+ZIVOFbYJCH1jsZNTNmj2NYru5zfx+4E= -github.com/ProtonMail/go-crypto v0.0.0-20230626094100-7e9e0395ebec/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= +github.com/ProtonMail/go-crypto v0.0.0-20230710112148-e01326fd72eb h1:RU+Ff2vE68zFQSoBqlb/LChFztEWWJ9EZ8LU4gA3ubU= +github.com/ProtonMail/go-crypto v0.0.0-20230710112148-e01326fd72eb/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d h1:UrqY+r/OJnIp5u0s1SbQ8dVfLCZJsnvazdBP5hS4iRs= github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ= github.com/acomagu/bufpipe v1.0.4 h1:e3H4WUzM3npvo5uv95QuJM3cQspFNtFBzvJ2oNjKIDQ= @@ -105,8 +105,8 @@ github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxG github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/distribution/distribution/v3 v3.0.0-20230629214736-bac7f02e02a1 h1:yRwt9RluqBtKyDLRY7J0Cf/TVqvG56vKx2Eyndy8qNQ= -github.com/distribution/distribution/v3 v3.0.0-20230629214736-bac7f02e02a1/go.mod h1:+fqBJ4vPYo4Uu1ZE4d+bUtTLRXfdSL3NvCZIZ9GHv58= +github.com/distribution/distribution/v3 v3.0.0-20230711080520-40ef2353fa4f h1:Df8k7piYnfycy7zSBLkN2oQaoIz1vw+msSgajUA+yKE= +github.com/distribution/distribution/v3 v3.0.0-20230711080520-40ef2353fa4f/go.mod h1:+fqBJ4vPYo4Uu1ZE4d+bUtTLRXfdSL3NvCZIZ9GHv58= github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI= github.com/docker/cli v23.0.5+incompatible h1:ufWmAOuD3Vmr7JP2G5K3cyuNC4YZWiAsuDEvFVVDafE= github.com/docker/cli v23.0.5+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= @@ -176,8 +176,8 @@ github.com/fluxcd/pkg/git/gogit v0.12.1/go.mod h1:Z4Ysp8VifKTvWpjJMKncJsgb2iBqHu github.com/fluxcd/pkg/gittestserver v0.8.4 h1:rA/QUZnfH77ZZG+5xfMqjgEHJdzeeE6Nn1o8cops/bU= github.com/fluxcd/pkg/kustomize v1.3.4 h1:+XA4umfhkFqrNYQp3ZmKSJy4i3LWjbgoi6H4PllkkkA= github.com/fluxcd/pkg/kustomize v1.3.4/go.mod h1:nsbsNGe6nQY6DGYYPowFGQlhxFRcaRFvbwqhCbwAQuE= -github.com/fluxcd/pkg/oci v0.28.0 h1:E8VvMFzU/+9vgM4IFbiwmCwaMPCq1WXPiKUmHtDVSbc= -github.com/fluxcd/pkg/oci v0.28.0/go.mod h1:eFP5sQH4yWghFbcLWxdo0eI6wZ4h3HiTW0UoG33S2pg= +github.com/fluxcd/pkg/oci v0.29.0 h1:LACJNooDB4ZWVqRkB+V5MSPE04327DBbI/8BdWFzP8Y= +github.com/fluxcd/pkg/oci v0.29.0/go.mod h1:x91ESIQjUimZSElpJTVRx3yPFBmimvulni9iBsCwXlw= github.com/fluxcd/pkg/runtime v0.40.0 h1:uGiiEbMZwd7xmbKaVmcH7iilCFW9betWbz0r1taK3G0= github.com/fluxcd/pkg/runtime v0.40.0/go.mod h1:BqHEOVrZmt19p0q1OlGFWAYh3rZ28+IBpxLB2yPjjQ4= github.com/fluxcd/pkg/sourceignore v0.3.4 h1:0cfS2Pj7xp2qpaerMjYqOBr82LC+/mGHl6v6pRbi5hs= @@ -525,8 +525,8 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.10.0 h1:LKqV2xt9+kDzSTfOhx4FrkEBcMrAgHSYgzywV9zcGmM= -golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I= +golang.org/x/crypto v0.11.0 h1:6Ewdq3tDic1mg5xRO4milcWCfMVQhI4NkqWWvqejpuA= +golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= @@ -605,16 +605,16 @@ golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.9.0 h1:KS/R3tvhPqvJvwcKfnBHJwwthS11LRhmM5D59eEXa0s= -golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA= +golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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= golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/term v0.9.0 h1:GRRCnKYhdQrD8kfRAdQ6Zcw1P0OcELxGLKJvtjVMZ28= -golang.org/x/term v0.9.0/go.mod h1:M6DEAAIenWoTxdKrOltXcmDY3rSplQUkrvaDU5FcQyo= +golang.org/x/term v0.10.0 h1:3R7pNqamzBraeqj/Tj8qt1aQ2HpmlC+Cx/qL/7hn4/c= +golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -624,8 +624,8 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.10.0 h1:UpjohKhiEgNc0CSauXmwYftY1+LlaC75SJwh0SgCX58= -golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.11.0 h1:LAntKIrcmeSKERyiOh0XMV39LXS8IE9UL2yP7+f5ij4= +golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/tests/azure/go.mod b/tests/azure/go.mod index 9ebea258..d46f209f 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -9,14 +9,14 @@ require ( github.com/Azure/azure-event-hubs-go/v3 v3.6.0 github.com/fluxcd/helm-controller/api v0.35.0 github.com/fluxcd/image-automation-controller/api v0.35.0 - github.com/fluxcd/image-reflector-controller/api v0.29.0 - github.com/fluxcd/kustomize-controller/api v1.0.0 + github.com/fluxcd/image-reflector-controller/api v0.29.1 + github.com/fluxcd/kustomize-controller/api v1.0.1 github.com/fluxcd/notification-controller/api v1.0.0 github.com/fluxcd/pkg/apis/event v0.5.1 github.com/fluxcd/pkg/apis/meta v1.1.1 github.com/fluxcd/pkg/git v0.12.3 github.com/fluxcd/pkg/git/gogit v0.12.1 - github.com/fluxcd/source-controller/api v1.0.0 + github.com/fluxcd/source-controller/api v1.0.1 github.com/go-git/go-git/v5 v5.7.0 github.com/hashicorp/hc-install v0.5.2 github.com/hashicorp/terraform-exec v0.18.1 diff --git a/tests/azure/go.sum b/tests/azure/go.sum index 68e510e7..c7004d0a 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -89,10 +89,10 @@ github.com/fluxcd/helm-controller/api v0.35.0 h1:UyhKXPni5z69DzPW7GtECGGdUwKsB+O github.com/fluxcd/helm-controller/api v0.35.0/go.mod h1:CdHMtr5wM0xgDt/PS147H7QQS+zDxAFgDW3ZN8MnUlU= github.com/fluxcd/image-automation-controller/api v0.35.0 h1:B7yJdAbnx0hwI6ffVu0YAyc3d3sqjXrv6ySK++g3t28= github.com/fluxcd/image-automation-controller/api v0.35.0/go.mod h1:67HbnrXDy550zJKZZbzAZ0yfzL0Ge1O18yn/shcgy0Y= -github.com/fluxcd/image-reflector-controller/api v0.29.0 h1:Epzq0b2sYxgSwKPBN0BWEInQwMLsvU7sjqKJuzGtyIg= -github.com/fluxcd/image-reflector-controller/api v0.29.0/go.mod h1:aYwq15SpkAD/urQme2iEsNouTscfR1Qo39KBlJ+0EW8= -github.com/fluxcd/kustomize-controller/api v1.0.0 h1:BVz6lEpfGbny0ppQ82LloLSK0OoEGC51YQaw31j4vT8= -github.com/fluxcd/kustomize-controller/api v1.0.0/go.mod h1:rYUovoofr3bVPgQowWj/CSGw73qoH0tOCopJ3oNh7lM= +github.com/fluxcd/image-reflector-controller/api v0.29.1 h1:mnFaO60b8WyCxpc72utmAJ7J1ZtZjGGThH9NdxVeEyo= +github.com/fluxcd/image-reflector-controller/api v0.29.1/go.mod h1:aYwq15SpkAD/urQme2iEsNouTscfR1Qo39KBlJ+0EW8= +github.com/fluxcd/kustomize-controller/api v1.0.1 h1:zz9zx4Mc7rw9gqdgdhMWX1uDM2uR1x7WBUujKs4mdx8= +github.com/fluxcd/kustomize-controller/api v1.0.1/go.mod h1:rYUovoofr3bVPgQowWj/CSGw73qoH0tOCopJ3oNh7lM= github.com/fluxcd/notification-controller/api v1.0.0 h1:WiXS116pwhFp7Qe/Fc1GmKCfLBRnZu+rYCeIn07cO+4= github.com/fluxcd/notification-controller/api v1.0.0/go.mod h1:uamWZwmhSHE7xdJkgRhH4Eo5/SKKILFI4o+CoQjlczc= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= @@ -112,8 +112,8 @@ github.com/fluxcd/pkg/ssh v0.8.0 h1:CqHIsWYfAtGxh2D6ZvzGTkFout6MaQnFpytPzJPbDLA= github.com/fluxcd/pkg/ssh v0.8.0/go.mod h1:bo6HgWqIIuXU6r5HCxRFa7Uo7b4Nnzsz6MvdtAYn2XY= github.com/fluxcd/pkg/version v0.2.2 h1:ZpVXECeLA5hIQMft11iLp6gN3cKcz6UNuVTQPw/bRdI= github.com/fluxcd/pkg/version v0.2.2/go.mod h1:NGnh/no8S6PyfCDxRFrPY3T5BUnqP48MxfxNRU0z8C0= -github.com/fluxcd/source-controller/api v1.0.0 h1:lPjmCXmEiI3tY4pReeVQBMuyLgdH8462W5ewUa9kgYM= -github.com/fluxcd/source-controller/api v1.0.0/go.mod h1:rAY5FRFGZUKpIFNyYANHIgPgJPvbALBHWsq/zHw/cXQ= +github.com/fluxcd/source-controller/api v1.0.1 h1:nycylbNBnQd+EO4UHpqXqAQJ1cGAPxgBbrfERCQ1pp8= +github.com/fluxcd/source-controller/api v1.0.1/go.mod h1:rAY5FRFGZUKpIFNyYANHIgPgJPvbALBHWsq/zHw/cXQ= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= From 4d76ff4e6aa3ff93ec5c90524b2411542bfe1910 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Jul 2023 00:37:57 +0000 Subject: [PATCH 596/818] build(deps): bump the ci group with 2 updates Bumps the ci group with 2 updates: [helm/kind-action](https://github.com/helm/kind-action) and [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action). Updates `helm/kind-action` from 1.7.0 to 1.8.0 - [Release notes](https://github.com/helm/kind-action/releases) - [Commits](https://github.com/helm/kind-action/compare/fa81e57adff234b2908110485695db0f181f3c67...dda0770415bac9fc20092cacbc54aa298604d140) Updates `docker/setup-buildx-action` from 2.8.0 to 2.9.1 - [Release notes](https://github.com/docker/setup-buildx-action/releases) - [Commits](https://github.com/docker/setup-buildx-action/compare/16c0bc4a6e6ada2cfd8afd41d22d95379cf7c32a...4c0219f9ac95b02789c1075625400b2acbff50b1) --- updated-dependencies: - dependency-name: helm/kind-action dependency-type: direct:production update-type: version-update:semver-minor dependency-group: ci - dependency-name: docker/setup-buildx-action dependency-type: direct:production update-type: version-update:semver-minor dependency-group: ci ... Signed-off-by: dependabot[bot] --- .github/workflows/e2e-bootstrap.yaml | 2 +- .github/workflows/e2e.yaml | 2 +- .github/workflows/release.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/e2e-bootstrap.yaml b/.github/workflows/e2e-bootstrap.yaml index 08700a42..9827b3fd 100644 --- a/.github/workflows/e2e-bootstrap.yaml +++ b/.github/workflows/e2e-bootstrap.yaml @@ -26,7 +26,7 @@ jobs: **/go.sum **/go.mod - name: Setup Kubernetes - uses: helm/kind-action@fa81e57adff234b2908110485695db0f181f3c67 # v1.7.0 + uses: helm/kind-action@dda0770415bac9fc20092cacbc54aa298604d140 # v1.8.0 with: version: v0.20.0 cluster_name: kind diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index 09be7645..290a47c9 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -30,7 +30,7 @@ jobs: **/go.sum **/go.mod - name: Setup Kubernetes - uses: helm/kind-action@fa81e57adff234b2908110485695db0f181f3c67 # v1.7.0 + uses: helm/kind-action@dda0770415bac9fc20092cacbc54aa298604d140 # v1.8.0 with: version: v0.20.0 cluster_name: kind diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 2e9cafb0..499bb120 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -32,7 +32,7 @@ jobs: uses: docker/setup-qemu-action@2b82ce82d56a2a04d2637cd93a637ae1b359c0a7 # v2.2.0 - name: Setup Docker Buildx id: buildx - uses: docker/setup-buildx-action@16c0bc4a6e6ada2cfd8afd41d22d95379cf7c32a # v2.8.0 + uses: docker/setup-buildx-action@4c0219f9ac95b02789c1075625400b2acbff50b1 # v2.9.1 - name: Setup Syft uses: anchore/sbom-action/download-syft@78fc58e266e87a38d4194b2137a3d4e9bcaf7ca1 # v0.14.3 - name: Setup Cosign From 28262f59d35774501ed41b8e5a1281baf9602b8b Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 2 Aug 2023 14:17:30 +0300 Subject: [PATCH 597/818] Set Kubernetes min version to 1.25 Signed-off-by: Stefan Prodan --- cmd/flux/check.go | 2 +- cmd/flux/testdata/check/check_pre.golden | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/flux/check.go b/cmd/flux/check.go index e6fa29a5..df5fec61 100644 --- a/cmd/flux/check.go +++ b/cmd/flux/check.go @@ -57,7 +57,7 @@ type checkFlags struct { } var kubernetesConstraints = []string{ - ">=1.24.0-0", + ">=1.25.0-0", } var checkArgs checkFlags diff --git a/cmd/flux/testdata/check/check_pre.golden b/cmd/flux/testdata/check/check_pre.golden index 4a263acd..646909e1 100644 --- a/cmd/flux/testdata/check/check_pre.golden +++ b/cmd/flux/testdata/check/check_pre.golden @@ -1,3 +1,3 @@ ► checking prerequisites -✔ Kubernetes {{ .serverVersion }} >=1.24.0-0 +✔ Kubernetes {{ .serverVersion }} >=1.25.0-0 ✔ prerequisites checks passed From 56b1e8075861d9335eb46480f06bd34a136bb0b0 Mon Sep 17 00:00:00 2001 From: Marcus Weiner Date: Mon, 7 Aug 2023 12:05:29 +0200 Subject: [PATCH 598/818] Fix selection of kustomization resource from multi doc yaml Signed-off-by: Marcus Weiner --- cmd/flux/diff_kustomization_test.go | 6 ++++++ .../flux-kustomization-multiobj.yaml | 19 +++++++++++++++++++ internal/build/build.go | 9 ++++++++- internal/build/build_test.go | 11 ++++++++++- .../local-kustomization/invalid-resource.yaml | 4 ++++ 5 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 cmd/flux/testdata/diff-kustomization/flux-kustomization-multiobj.yaml create mode 100644 internal/build/testdata/local-kustomization/invalid-resource.yaml diff --git a/cmd/flux/diff_kustomization_test.go b/cmd/flux/diff_kustomization_test.go index fc2a9c67..a381a61f 100644 --- a/cmd/flux/diff_kustomization_test.go +++ b/cmd/flux/diff_kustomization_test.go @@ -91,6 +91,12 @@ func TestDiffKustomization(t *testing.T) { objectFile: "./testdata/diff-kustomization/stringdata-sops-secret.yaml", assert: assertGoldenFile("./testdata/diff-kustomization/diff-with-drifted-stringdata-sops-secret.golden"), }, + { + name: "diff where kustomization file has multiple objects with the same name", + args: "diff kustomization podinfo --path ./testdata/build-kustomization/podinfo --progress-bar=false --kustomization-file ./testdata/diff-kustomization/flux-kustomization-multiobj.yaml", + objectFile: "", + assert: assertGoldenFile("./testdata/diff-kustomization/nothing-is-deployed.golden"), + }, } tmpl := map[string]string{ diff --git a/cmd/flux/testdata/diff-kustomization/flux-kustomization-multiobj.yaml b/cmd/flux/testdata/diff-kustomization/flux-kustomization-multiobj.yaml new file mode 100644 index 00000000..53b03336 --- /dev/null +++ b/cmd/flux/testdata/diff-kustomization/flux-kustomization-multiobj.yaml @@ -0,0 +1,19 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: podinfo + +--- +apiVersion: kustomize.toolkit.fluxcd.io/v1 +kind: Kustomization +metadata: + name: podinfo +spec: + interval: 5m0s + path: ./kustomize + force: true + prune: true + sourceRef: + kind: GitRepository + name: podinfo + targetNamespace: default diff --git a/internal/build/build.go b/internal/build/build.go index a9e55c68..f05ce123 100644 --- a/internal/build/build.go +++ b/internal/build/build.go @@ -333,7 +333,7 @@ func (b *Builder) unMarshallKustomization() (*kustomizev1.Kustomization, error) k := &kustomizev1.Kustomization{} decoder := k8syaml.NewYAMLOrJSONDecoder(bytes.NewBuffer(data), len(data)) // check for kustomization in yaml with the same name and namespace - for !(k.Name == b.name && (k.Namespace == b.namespace || k.Namespace == "")) { + for { err = decoder.Decode(k) if err != nil { if err == io.EOF { @@ -343,6 +343,13 @@ func (b *Builder) unMarshallKustomization() (*kustomizev1.Kustomization, error) return nil, fmt.Errorf("failed to unmarshall kustomization file %s: %w", b.kustomizationFile, err) } } + + if strings.HasPrefix(k.APIVersion, kustomizev1.GroupVersion.Group+"/") && + k.Kind == kustomizev1.KustomizationKind && + k.Name == b.name && + (k.Namespace == b.namespace || k.Namespace == "") { + break + } } return k, nil } diff --git a/internal/build/build_test.go b/internal/build/build_test.go index cb40c82c..be62abc5 100644 --- a/internal/build/build_test.go +++ b/internal/build/build_test.go @@ -189,6 +189,12 @@ func Test_unMarshallKustomization(t *testing.T) { wantErr: true, errString: "failed find kustomization with name", }, + { + name: "yaml containing other resource with same name as kustomization", + localKsFile: "testdata/local-kustomization/invalid-resource.yaml", + wantErr: true, + errString: "failed find kustomization with name", + }, } b := &Builder{ @@ -324,7 +330,10 @@ func Test_ResolveKustomization(t *testing.T) { }, } - b := &Builder{} + b := &Builder{ + name: "podinfo", + namespace: "flux-system", + } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { b.kustomizationFile = tt.localKsFile diff --git a/internal/build/testdata/local-kustomization/invalid-resource.yaml b/internal/build/testdata/local-kustomization/invalid-resource.yaml new file mode 100644 index 00000000..51287766 --- /dev/null +++ b/internal/build/testdata/local-kustomization/invalid-resource.yaml @@ -0,0 +1,4 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: podinfo From 3fa7af12e04d0e25ecbda5d36754bd5d6c0d9752 Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Tue, 8 Aug 2023 14:31:13 +0100 Subject: [PATCH 599/818] disable e2e test Signed-off-by: Somtochi Onyekwere --- .github/workflows/e2e-azure.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/e2e-azure.yaml b/.github/workflows/e2e-azure.yaml index e4fd80ab..66fadaf3 100644 --- a/.github/workflows/e2e-azure.yaml +++ b/.github/workflows/e2e-azure.yaml @@ -23,7 +23,8 @@ permissions: jobs: e2e-amd64-aks: runs-on: ubuntu-22.04 - if: (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) && github.actor != 'dependabot[bot]' + # This job is currently disabled since if always evaluates to false. Remove the false check when Azure subscription is enabled + if: false && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) && github.actor != 'dependabot[bot]' steps: - name: Checkout uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 From 2716ca449e14e9be3eb8e52cae3bfe27f7a14081 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ste=CC=81phane=20Este-Gracias?= Date: Sun, 6 Aug 2023 01:00:03 +0200 Subject: [PATCH 600/818] monitoring: add OCIRepository in cluster dashboard panels MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Este-Gracias --- .../monitoring-config/dashboards/cluster.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/manifests/monitoring/monitoring-config/dashboards/cluster.json b/manifests/monitoring/monitoring-config/dashboards/cluster.json index 1d493586..1ef0fed5 100644 --- a/manifests/monitoring/monitoring-config/dashboards/cluster.json +++ b/manifests/monitoring/monitoring-config/dashboards/cluster.json @@ -203,7 +203,7 @@ "targets": [ { "exemplar": true, - "expr": "count(gotk_reconcile_condition{namespace=~\"$operator_namespace\",exported_namespace=~\"$namespace\",type=\"Ready\",status=\"True\",kind=~\"GitRepository|HelmRepository|Bucket\"})\n-\nsum(gotk_reconcile_condition{namespace=~\"$operator_namespace\",exported_namespace=~\"$namespace\",type=\"Ready\",status=\"Deleted\",kind=~\"GitRepository|HelmRepository|Bucket\"})", + "expr": "count(gotk_reconcile_condition{namespace=~\"$operator_namespace\",exported_namespace=~\"$namespace\",type=\"Ready\",status=\"True\",kind=~\"GitRepository|OCIRepository|HelmRepository|Bucket\"})\n-\nsum(gotk_reconcile_condition{namespace=~\"$operator_namespace\",exported_namespace=~\"$namespace\",type=\"Ready\",status=\"Deleted\",kind=~\"GitRepository|OCIRepository|HelmRepository|Bucket\"})", "interval": "", "legendFormat": "", "refId": "A" @@ -260,7 +260,7 @@ "targets": [ { "exemplar": true, - "expr": "sum(gotk_reconcile_condition{namespace=~\"$operator_namespace\",exported_namespace=~\"$namespace\",type=\"Ready\",status=\"False\",kind=~\"GitRepository|HelmRepository|Bucket\"})", + "expr": "sum(gotk_reconcile_condition{namespace=~\"$operator_namespace\",exported_namespace=~\"$namespace\",type=\"Ready\",status=\"False\",kind=~\"GitRepository|OCIRepository|HelmRepository|Bucket\"})", "interval": "", "legendFormat": "", "refId": "A" @@ -324,7 +324,7 @@ "targets": [ { "exemplar": true, - "expr": " sum(rate(gotk_reconcile_duration_seconds_sum{namespace=~\"$operator_namespace\",exported_namespace=~\"$namespace\",kind=~\"Kustomization|HelmRelease\"}[5m])) by (kind)\n/\n sum(rate(gotk_reconcile_duration_seconds_count{namespace=~\"$operator_namespace\",exported_namespace=~\"$namespace\",kind=~\"Kustomization|HelmRelease\"}[5m])) by (kind)", + "expr": "sum(rate(gotk_reconcile_duration_seconds_sum{namespace=~\"$operator_namespace\",exported_namespace=~\"$namespace\",kind=~\"Kustomization|HelmRelease\"}[5m])) by (kind)\n/\n sum(rate(gotk_reconcile_duration_seconds_count{namespace=~\"$operator_namespace\",exported_namespace=~\"$namespace\",kind=~\"Kustomization|HelmRelease\"}[5m])) by (kind)", "interval": "", "legendFormat": "{{kind}}", "refId": "A" @@ -388,7 +388,7 @@ "targets": [ { "exemplar": true, - "expr": " sum(rate(gotk_reconcile_duration_seconds_sum{namespace=~\"$operator_namespace\",exported_namespace=~\"$namespace\",kind=~\"GitRepository|HelmRepository|Bucket\"}[5m])) by (kind)\n/\n sum(rate(gotk_reconcile_duration_seconds_count{namespace=~\"$operator_namespace\",exported_namespace=~\"$namespace\",kind=~\"GitRepository|HelmRepository|Bucket\"}[5m])) by (kind)", + "expr": "sum(rate(gotk_reconcile_duration_seconds_sum{namespace=~\"$operator_namespace\",exported_namespace=~\"$namespace\",kind=~\"GitRepository|OCIRepository|HelmRepository|Bucket\"}[5m])) by (kind)\n/\n sum(rate(gotk_reconcile_duration_seconds_count{namespace=~\"$operator_namespace\",exported_namespace=~\"$namespace\",kind=~\"GitRepository|OCIRepository|HelmRepository|Bucket\"}[5m])) by (kind)", "interval": "", "legendFormat": "{{kind}}", "refId": "A" @@ -624,7 +624,7 @@ "targets": [ { "exemplar": true, - "expr": "gotk_reconcile_condition{namespace=~\"$operator_namespace\",exported_namespace=~\"$namespace\",type=\"Ready\",status=\"False\",kind=~\"GitRepository|HelmRepository|Bucket\"}", + "expr": "gotk_reconcile_condition{namespace=~\"$operator_namespace\",exported_namespace=~\"$namespace\",type=\"Ready\",status=\"False\",kind=~\"GitRepository|OCIRepository|HelmRepository|Bucket\"}", "format": "table", "instant": true, "interval": "", @@ -735,7 +735,7 @@ "targets": [ { "exemplar": true, - "expr": " sum(rate(gotk_reconcile_duration_seconds_sum{namespace=~\"$operator_namespace\",exported_namespace=~\"$namespace\",kind=~\"Kustomization|HelmRelease\"}[5m])) by (kind, name)\n/\n sum(rate(gotk_reconcile_duration_seconds_count{namespace=~\"$operator_namespace\",exported_namespace=~\"$namespace\",kind=~\"Kustomization|HelmRelease\"}[5m])) by (kind, name)", + "expr": "sum(rate(gotk_reconcile_duration_seconds_sum{namespace=~\"$operator_namespace\",exported_namespace=~\"$namespace\",kind=~\"Kustomization|HelmRelease\"}[5m])) by (kind, name)\n/\n sum(rate(gotk_reconcile_duration_seconds_count{namespace=~\"$operator_namespace\",exported_namespace=~\"$namespace\",kind=~\"Kustomization|HelmRelease\"}[5m])) by (kind, name)", "hide": false, "interval": "", "legendFormat": "{{kind}}/{{name}}", @@ -835,7 +835,7 @@ "targets": [ { "exemplar": true, - "expr": " sum(rate(gotk_reconcile_duration_seconds_sum{namespace=~\"$operator_namespace\",exported_namespace=~\"$namespace\",kind=~\"GitRepository|HelmRepository|Bucket\"}[5m])) by (kind, name)\n/\n sum(rate(gotk_reconcile_duration_seconds_count{namespace=~\"$operator_namespace\",exported_namespace=~\"$namespace\",kind=~\"GitRepository|HelmRepository|Bucket\"}[5m])) by (kind, name)", + "expr": "sum(rate(gotk_reconcile_duration_seconds_sum{namespace=~\"$operator_namespace\",exported_namespace=~\"$namespace\",kind=~\"GitRepository|OCIRepository|HelmRepository|Bucket\"}[5m])) by (kind, name)\n/\n sum(rate(gotk_reconcile_duration_seconds_count{namespace=~\"$operator_namespace\",exported_namespace=~\"$namespace\",kind=~\"GitRepository|OCIRepository|HelmRepository|Bucket\"}[5m])) by (kind, name)", "hide": false, "interval": "", "legendFormat": "{{kind}}/{{name}}", From 23518953d01b5057b9b28df853a02f1a1d97e941 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ste=CC=81phane=20Este-Gracias?= Date: Mon, 7 Aug 2023 23:22:33 +0200 Subject: [PATCH 601/818] monitoring: add Sources Stats panels MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Este-Gracias --- .../dashboards/control-plane.json | 336 +++++++++++++++++- 1 file changed, 327 insertions(+), 9 deletions(-) diff --git a/manifests/monitoring/monitoring-config/dashboards/control-plane.json b/manifests/monitoring/monitoring-config/dashboards/control-plane.json index 40b1a1ad..a4ad008d 100644 --- a/manifests/monitoring/monitoring-config/dashboards/control-plane.json +++ b/manifests/monitoring/monitoring-config/dashboards/control-plane.json @@ -722,8 +722,8 @@ "fill": 1, "fillGradient": 0, "gridPos": { - "h": 9, - "w": 12, + "h": 8, + "w": 24, "x": 0, "y": 34 }, @@ -811,6 +811,24 @@ "alignLevel": null } }, + { + "collapsed": false, + "datasource": "${DS_PROMETHEUS}", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 42 + }, + "id": 29, + "panels": [], + "title": "Sources Stats", + "type": "row" + }, { "aliasColors": {}, "bars": true, @@ -824,8 +842,8 @@ "gridPos": { "h": 9, "w": 12, - "x": 12, - "y": 34 + "x": 0, + "y": 43 }, "hiddenSeries": false, "id": 4, @@ -872,7 +890,307 @@ "timeFrom": null, "timeRegions": [], "timeShift": null, - "title": "Git Sources ops/min", + "title": "Git Repos ops/min", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:285", + "format": "opm", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:286", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": true, + "dashLength": 10, + "dashes": false, + "datasource": "${DS_PROMETHEUS}", + "decimals": 2, + "description": "", + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 43 + }, + "hiddenSeries": false, + "id": 4, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": false, + "linewidth": 1, + "nullPointMode": "null", + "percentage": false, + "pluginVersion": "8.2.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": true, + "targets": [ + { + "expr": "sum(increase(controller_runtime_reconcile_total{controller=\"ocirepository\",result!=\"error\"}[1m]))", + "format": "time_series", + "interval": "", + "legendFormat": "successful oci pulls", + "refId": "A" + }, + { + "expr": "sum(increase(controller_runtime_reconcile_total{controller=\"ocirepository\",result=\"error\"}[1m]))", + "format": "time_series", + "interval": "", + "legendFormat": "failed oci pulls", + "refId": "B" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "OCI Repos ops/min", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:285", + "format": "opm", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:286", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": true, + "dashLength": 10, + "dashes": false, + "datasource": "${DS_PROMETHEUS}", + "decimals": 2, + "description": "", + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 52 + }, + "hiddenSeries": false, + "id": 4, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": false, + "linewidth": 1, + "nullPointMode": "null", + "percentage": false, + "pluginVersion": "8.2.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": true, + "targets": [ + { + "expr": "sum(increase(controller_runtime_reconcile_total{controller=\"helmrepository\",result!=\"error\"}[1m]))", + "format": "time_series", + "interval": "", + "legendFormat": "successful helm pulls", + "refId": "A" + }, + { + "expr": "sum(increase(controller_runtime_reconcile_total{controller=\"helmrepository\",result=\"error\"}[1m]))", + "format": "time_series", + "interval": "", + "legendFormat": "failed helm pulls", + "refId": "B" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Helm Repos ops/min", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:285", + "format": "opm", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "$$hashKey": "object:286", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": true, + "dashLength": 10, + "dashes": false, + "datasource": "${DS_PROMETHEUS}", + "decimals": 2, + "description": "", + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 52 + }, + "hiddenSeries": false, + "id": 4, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": false, + "linewidth": 1, + "nullPointMode": "null", + "percentage": false, + "pluginVersion": "8.2.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": true, + "targets": [ + { + "expr": "sum(increase(controller_runtime_reconcile_total{controller=\"bucket\",result!=\"error\"}[1m]))", + "format": "time_series", + "interval": "", + "legendFormat": "successful bucket pulls", + "refId": "A" + }, + { + "expr": "sum(increase(controller_runtime_reconcile_total{controller=\"bucket\",result=\"error\"}[1m]))", + "format": "time_series", + "interval": "", + "legendFormat": "failed bucket pulls", + "refId": "B" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Buckets ops/min", "tooltip": { "shared": true, "sort": 0, @@ -922,7 +1240,7 @@ "h": 1, "w": 24, "x": 0, - "y": 43 + "y": 61 }, "id": 19, "panels": [], @@ -941,7 +1259,7 @@ "h": 8, "w": 24, "x": 0, - "y": 44 + "y": 62 }, "hiddenSeries": false, "id": 9, @@ -1048,7 +1366,7 @@ "h": 9, "w": 12, "x": 0, - "y": 52 + "y": 70 }, "hiddenSeries": false, "id": 5, @@ -1148,7 +1466,7 @@ "h": 9, "w": 12, "x": 12, - "y": 52 + "y": 70 }, "hiddenSeries": false, "id": 6, From d6cbfa39f8fce644e546d100ef42f16f55d18388 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Wed, 9 Aug 2023 18:14:39 +0200 Subject: [PATCH 602/818] ci: enable security-and-quality CodeQL query Signed-off-by: Hidde Beydals --- .github/workflows/scan.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index ca68607f..4a6504fa 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -76,6 +76,9 @@ jobs: uses: github/codeql-action/init@cdcdbb579706841c47f7063dda365e292e5cad7a # v2.13.4 with: languages: go + # xref: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs + # xref: https://codeql.github.com/codeql-query-help/go/ + queries: security-and-quality - name: Autobuild uses: github/codeql-action/autobuild@cdcdbb579706841c47f7063dda365e292e5cad7a # v2.13.4 - name: Perform CodeQL Analysis From 7273059cb92150065338c1c8b7aed21e3d9c4aab Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 9 Aug 2023 16:35:22 +0000 Subject: [PATCH 603/818] build(deps): bump the ci group with 2 updates Bumps the ci group with 2 updates: [actions/setup-go](https://github.com/actions/setup-go) and [slsa-framework/slsa-github-generator](https://github.com/slsa-framework/slsa-github-generator). Updates `actions/setup-go` from 4.0.1 to 4.1.0 - [Release notes](https://github.com/actions/setup-go/releases) - [Commits](https://github.com/actions/setup-go/compare/fac708d6674e30b6ba41289acaab6d4b75aa0753...93397bea11091df50f3d7e59dc26a7711a8bcfbe) Updates `slsa-framework/slsa-github-generator` from 1.7.0 to 1.8.0 - [Release notes](https://github.com/slsa-framework/slsa-github-generator/releases) - [Changelog](https://github.com/slsa-framework/slsa-github-generator/blob/main/CHANGELOG.md) - [Commits](https://github.com/slsa-framework/slsa-github-generator/compare/v1.7.0...v1.8.0) --- updated-dependencies: - dependency-name: actions/setup-go dependency-type: direct:production update-type: version-update:semver-minor dependency-group: ci - dependency-name: slsa-framework/slsa-github-generator dependency-type: direct:production update-type: version-update:semver-minor dependency-group: ci ... Signed-off-by: dependabot[bot] --- .github/workflows/e2e-arm64.yaml | 2 +- .github/workflows/e2e-azure.yaml | 2 +- .github/workflows/e2e-bootstrap.yaml | 2 +- .github/workflows/e2e.yaml | 2 +- .github/workflows/release.yaml | 8 ++++---- .github/workflows/scan.yaml | 4 ++-- .github/workflows/update.yaml | 2 +- 7 files changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/workflows/e2e-arm64.yaml b/.github/workflows/e2e-arm64.yaml index ee800cf2..f4f9d27b 100644 --- a/.github/workflows/e2e-arm64.yaml +++ b/.github/workflows/e2e-arm64.yaml @@ -22,7 +22,7 @@ jobs: - name: Checkout uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 - name: Setup Go - uses: actions/setup-go@fac708d6674e30b6ba41289acaab6d4b75aa0753 # v4.0.1 + uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 with: go-version: 1.20.x cache-dependency-path: | diff --git a/.github/workflows/e2e-azure.yaml b/.github/workflows/e2e-azure.yaml index 66fadaf3..2b410a19 100644 --- a/.github/workflows/e2e-azure.yaml +++ b/.github/workflows/e2e-azure.yaml @@ -29,7 +29,7 @@ jobs: - name: Checkout uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 - name: Setup Go - uses: actions/setup-go@fac708d6674e30b6ba41289acaab6d4b75aa0753 # v4.0.1 + uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 with: go-version: 1.20.x cache-dependency-path: | diff --git a/.github/workflows/e2e-bootstrap.yaml b/.github/workflows/e2e-bootstrap.yaml index 9827b3fd..dc2432a4 100644 --- a/.github/workflows/e2e-bootstrap.yaml +++ b/.github/workflows/e2e-bootstrap.yaml @@ -19,7 +19,7 @@ jobs: - name: Checkout uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 - name: Setup Go - uses: actions/setup-go@fac708d6674e30b6ba41289acaab6d4b75aa0753 # v4.0.1 + uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 with: go-version: 1.20.x cache-dependency-path: | diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index 290a47c9..ab0ecc3d 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -23,7 +23,7 @@ jobs: - name: Checkout uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 - name: Setup Go - uses: actions/setup-go@fac708d6674e30b6ba41289acaab6d4b75aa0753 # v4.0.1 + uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 with: go-version: 1.20.x cache-dependency-path: | diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 499bb120..5e4a7839 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -24,7 +24,7 @@ jobs: - name: Unshallow run: git fetch --prune --unshallow - name: Setup Go - uses: actions/setup-go@fac708d6674e30b6ba41289acaab6d4b75aa0753 # v4.0.1 + uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 with: go-version: 1.20.x cache: false @@ -176,7 +176,7 @@ jobs: actions: read # for detecting the Github Actions environment. id-token: write # for creating OIDC tokens for signing. contents: write # for uploading attestations to GitHub releases. - uses: slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@v1.7.0 + uses: slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@v1.8.0 with: provenance-name: "provenance.intoto.jsonl" base64-subjects: "${{ needs.release-flux-cli.outputs.hashes }}" @@ -188,7 +188,7 @@ jobs: actions: read # for detecting the Github Actions environment. id-token: write # for creating OIDC tokens for signing. packages: write # for uploading attestations. - uses: slsa-framework/slsa-github-generator/.github/workflows/generator_container_slsa3.yml@v1.7.0 + uses: slsa-framework/slsa-github-generator/.github/workflows/generator_container_slsa3.yml@v1.8.0 with: image: ${{ needs.release-flux-cli.outputs.image_url }} digest: ${{ needs.release-flux-cli.outputs.image_digest }} @@ -202,7 +202,7 @@ jobs: actions: read # for detecting the Github Actions environment. id-token: write # for creating OIDC tokens for signing. packages: write # for uploading attestations. - uses: slsa-framework/slsa-github-generator/.github/workflows/generator_container_slsa3.yml@v1.7.0 + uses: slsa-framework/slsa-github-generator/.github/workflows/generator_container_slsa3.yml@v1.8.0 with: image: ghcr.io/${{ needs.release-flux-cli.outputs.image_url }} digest: ${{ needs.release-flux-cli.outputs.image_digest }} diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index 4a6504fa..849ce18f 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -35,7 +35,7 @@ jobs: - name: Setup Kustomize uses: fluxcd/pkg/actions/kustomize@main - name: Setup Go - uses: actions/setup-go@fac708d6674e30b6ba41289acaab6d4b75aa0753 # v4.0.1 + uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 with: go-version: 1.20.x cache-dependency-path: | @@ -66,7 +66,7 @@ jobs: - name: Checkout repository uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 - name: Setup Go - uses: actions/setup-go@fac708d6674e30b6ba41289acaab6d4b75aa0753 # v4.0.1 + uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 with: go-version: 1.20.x cache-dependency-path: | diff --git a/.github/workflows/update.yaml b/.github/workflows/update.yaml index 67996a8a..2496fcc6 100644 --- a/.github/workflows/update.yaml +++ b/.github/workflows/update.yaml @@ -20,7 +20,7 @@ jobs: - name: Check out code uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 - name: Setup Go - uses: actions/setup-go@fac708d6674e30b6ba41289acaab6d4b75aa0753 # v4.0.1 + uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 with: go-version: 1.20.x cache-dependency-path: | From 1b5c4245dfacbdd3d76c601fa89e3ced9c05aedb Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Thu, 17 Aug 2023 11:45:36 +0300 Subject: [PATCH 604/818] e2e: Add Kubernetes v1.28.0 to conformance tests Signed-off-by: Stefan Prodan --- .github/workflows/e2e-arm64.yaml | 2 +- .github/workflows/e2e-bootstrap.yaml | 4 ++-- .github/workflows/e2e.yaml | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/e2e-arm64.yaml b/.github/workflows/e2e-arm64.yaml index f4f9d27b..e97fe17f 100644 --- a/.github/workflows/e2e-arm64.yaml +++ b/.github/workflows/e2e-arm64.yaml @@ -17,7 +17,7 @@ jobs: matrix: # Keep this list up-to-date with https://endoflife.date/kubernetes # Check which versions are available on DockerHub with 'crane ls kindest/node' - KUBERNETES_VERSION: [ 1.25.8, 1.26.3, 1.27.3 ] + KUBERNETES_VERSION: [ 1.25.11, 1.26.6, 1.27.3, 1.28.0 ] steps: - name: Checkout uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 diff --git a/.github/workflows/e2e-bootstrap.yaml b/.github/workflows/e2e-bootstrap.yaml index dc2432a4..7f355dd2 100644 --- a/.github/workflows/e2e-bootstrap.yaml +++ b/.github/workflows/e2e-bootstrap.yaml @@ -32,8 +32,8 @@ jobs: cluster_name: kind # The versions below should target the newest Kubernetes version # Keep this up-to-date with https://endoflife.date/kubernetes - node_image: kindest/node:v1.27.3@sha256:3966ac761ae0136263ffdb6cfd4db23ef8a83cba8a463690e98317add2c9ba72 - kubectl_version: v1.27.3 + node_image: kindest/node:v1.28.0@sha256:9f3ff58f19dcf1a0611d11e8ac989fdb30a28f40f236f59f0bea31fb956ccf5c + kubectl_version: v1.28.0 - name: Setup Kustomize uses: fluxcd/pkg/actions/kustomize@main - name: Build diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index ab0ecc3d..e2d05efd 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -37,8 +37,8 @@ jobs: config: .github/kind/config.yaml # disable KIND-net # The versions below should target the newest Kubernetes version # Keep this up-to-date with https://endoflife.date/kubernetes - node_image: kindest/node:v1.27.3@sha256:3966ac761ae0136263ffdb6cfd4db23ef8a83cba8a463690e98317add2c9ba72 - kubectl_version: v1.27.3 + node_image: kindest/node:v1.28.0@sha256:9f3ff58f19dcf1a0611d11e8ac989fdb30a28f40f236f59f0bea31fb956ccf5c + kubectl_version: v1.28.0 - name: Setup Calico for network policy run: | kubectl apply -f https://docs.projectcalico.org/v3.25/manifests/calico.yaml From 0d457d6d11fdea28ca871831b98ab116987092f4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 17 Aug 2023 09:50:14 +0000 Subject: [PATCH 605/818] build(deps): bump the ci group with 2 updates Bumps the ci group with 2 updates: [korthout/backport-action](https://github.com/korthout/backport-action) and [goreleaser/goreleaser-action](https://github.com/goreleaser/goreleaser-action). Updates `korthout/backport-action` from 1.3.1 to 1.4.0 - [Release notes](https://github.com/korthout/backport-action/releases) - [Commits](https://github.com/korthout/backport-action/compare/bf5fdd624b35f95d5b85991a728bd5744e8c6cf2...bd68141f079bd036e45ea8149bc9d174d5a04703) Updates `goreleaser/goreleaser-action` from 4.3.0 to 4.4.0 - [Release notes](https://github.com/goreleaser/goreleaser-action/releases) - [Commits](https://github.com/goreleaser/goreleaser-action/compare/336e29918d653399e599bfca99fadc1d7ffbc9f7...3fa32b8bb5620a2c1afe798654bbad59f9da4906) --- updated-dependencies: - dependency-name: korthout/backport-action dependency-type: direct:production update-type: version-update:semver-minor dependency-group: ci - dependency-name: goreleaser/goreleaser-action dependency-type: direct:production update-type: version-update:semver-minor dependency-group: ci ... Signed-off-by: dependabot[bot] --- .github/workflows/backport.yaml | 2 +- .github/workflows/release.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/backport.yaml b/.github/workflows/backport.yaml index 70f2e31e..d7989fbb 100644 --- a/.github/workflows/backport.yaml +++ b/.github/workflows/backport.yaml @@ -17,7 +17,7 @@ jobs: with: ref: ${{ github.event.pull_request.head.sha }} - name: Create backport PRs - uses: korthout/backport-action@bf5fdd624b35f95d5b85991a728bd5744e8c6cf2 # v1.3.1 + uses: korthout/backport-action@bd68141f079bd036e45ea8149bc9d174d5a04703 # v1.4.0 # xref: https://github.com/korthout/backport-action#inputs with: # Use token to allow workflows to be triggered for the created PR diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 5e4a7839..0efcb060 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -79,7 +79,7 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Run GoReleaser id: run-goreleaser - uses: goreleaser/goreleaser-action@336e29918d653399e599bfca99fadc1d7ffbc9f7 # v4.3.0 + uses: goreleaser/goreleaser-action@3fa32b8bb5620a2c1afe798654bbad59f9da4906 # v4.4.0 with: version: latest args: release --release-notes=output/notes.md --skip-validate From 4f3b34f86be2a9f7340f2a92a3a7c3d753910b71 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Mon, 21 Aug 2023 16:36:52 +0200 Subject: [PATCH 606/818] build: update securejoin dependency Signed-off-by: Hidde Beydals --- go.mod | 3 +++ go.sum | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/go.mod b/go.mod index ff7f22d2..91a5bf03 100644 --- a/go.mod +++ b/go.mod @@ -5,6 +5,9 @@ go 1.20 // Replace go-git to unreleased v5.8.0 to improve support for Git v2.41+. replace github.com/go-git/go-git/v5 => github.com/go-git/go-git/v5 v5.7.1-0.20230702134234-dd4e2b7f4b01 +// Replace for Go 1.20+ Windows compatibility. +replace github.com/cyphar/filepath-securejoin => github.com/pjbgf/filepath-securejoin v0.0.0-20230821001828-0ca74e6d4bf8 + require ( github.com/Masterminds/semver/v3 v3.2.1 github.com/ProtonMail/go-crypto v0.0.0-20230710112148-e01326fd72eb diff --git a/go.sum b/go.sum index e7dd3b72..cde50989 100644 --- a/go.sum +++ b/go.sum @@ -100,8 +100,6 @@ github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHH github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= -github.com/cyphar/filepath-securejoin v0.2.3 h1:YX6ebbZCZP7VkM3scTTokDgBL2TY741X51MTk3ycuNI= -github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -418,6 +416,8 @@ github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+v github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= +github.com/pjbgf/filepath-securejoin v0.0.0-20230821001828-0ca74e6d4bf8 h1:nqjCeQ2TVnccihhBoVBd0p+70hCFT4yqJKhfc8l1D50= +github.com/pjbgf/filepath-securejoin v0.0.0-20230821001828-0ca74e6d4bf8/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4= github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI= github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU= From 0ab874083265c289d6d843e05d95ce5bfe9d15ed Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Mon, 21 Aug 2023 17:14:56 +0200 Subject: [PATCH 607/818] cmd: address typo in end-to-end tests Signed-off-by: Hidde Beydals --- cmd/flux/main_e2e_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/flux/main_e2e_test.go b/cmd/flux/main_e2e_test.go index 1cfa3ace..008b810f 100644 --- a/cmd/flux/main_e2e_test.go +++ b/cmd/flux/main_e2e_test.go @@ -41,7 +41,7 @@ func TestMain(m *testing.M) { // Install Flux. output, err := executeCommand("install --components-extra=image-reflector-controller,image-automation-controller") if err != nil { - panic(fmt.Errorf("install falied: %s error:'%w'", output, err)) + panic(fmt.Errorf("install failed: %s error:'%w'", output, err)) } // Run tests @@ -50,7 +50,7 @@ func TestMain(m *testing.M) { // Uninstall Flux output, err = executeCommand("uninstall -s --keep-namespace") if err != nil { - panic(fmt.Errorf("uninstall falied: %s error:'%w'", output, err)) + panic(fmt.Errorf("uninstall failed: %s error:'%w'", output, err)) } // Delete namespace and wait for finalisation From c03a0b7f87cb705a4976909a3bc6950514c7e8d7 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Mon, 21 Aug 2023 17:16:40 +0200 Subject: [PATCH 608/818] ci: disable fail-fast for ARM end-to-end Signed-off-by: Hidde Beydals --- .github/workflows/e2e-arm64.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/e2e-arm64.yaml b/.github/workflows/e2e-arm64.yaml index e97fe17f..92b3f918 100644 --- a/.github/workflows/e2e-arm64.yaml +++ b/.github/workflows/e2e-arm64.yaml @@ -18,6 +18,7 @@ jobs: # Keep this list up-to-date with https://endoflife.date/kubernetes # Check which versions are available on DockerHub with 'crane ls kindest/node' KUBERNETES_VERSION: [ 1.25.11, 1.26.6, 1.27.3, 1.28.0 ] + fail-fast: false steps: - name: Checkout uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 From 2c76c702056670b7cd26f0052323ef65f7f958f1 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Mon, 21 Aug 2023 19:39:19 +0300 Subject: [PATCH 609/818] Set min value for the `--ssh-rsa-bits` flag Signed-off-by: Stefan Prodan --- internal/flags/rsa_key_bits.go | 5 ++++- internal/flags/rsa_key_bits_test.go | 4 ++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/internal/flags/rsa_key_bits.go b/internal/flags/rsa_key_bits.go index e214e1bf..716a4617 100644 --- a/internal/flags/rsa_key_bits.go +++ b/internal/flags/rsa_key_bits.go @@ -39,6 +39,9 @@ func (b *RSAKeyBits) Set(str string) error { if err != nil { return err } + if bits < 1024 { + return fmt.Errorf("RSA key bit size must be at least 1024") + } if bits == 0 || bits%8 != 0 { return fmt.Errorf("RSA key bit size must be a multiples of 8") } @@ -51,5 +54,5 @@ func (b *RSAKeyBits) Type() string { } func (b *RSAKeyBits) Description() string { - return "SSH RSA public key bit size (multiplies of 8)" + return "SSH RSA public key bit size (multiplies of 8, min 1024)" } diff --git a/internal/flags/rsa_key_bits_test.go b/internal/flags/rsa_key_bits_test.go index d4bd2965..7199be73 100644 --- a/internal/flags/rsa_key_bits_test.go +++ b/internal/flags/rsa_key_bits_test.go @@ -32,8 +32,8 @@ func TestRSAKeyBits_Set(t *testing.T) { }{ {"supported", "4096", "4096", false}, {"empty (default)", "", "2048", false}, - {"unsupported", "0", "0", true}, - {"unsupported", "123", "0", true}, + {"unsupported", "512", "0", true}, + {"unsupported", "1025", "0", true}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { From 4cdb75b74d9376e934d25cb0417c07de7eed661f Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Tue, 22 Aug 2023 12:36:58 +0300 Subject: [PATCH 610/818] Fix controller version info Signed-off-by: Stefan Prodan --- cmd/flux/version.go | 18 ++++++++---- cmd/flux/version_test.go | 60 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+), 5 deletions(-) create mode 100644 cmd/flux/version_test.go diff --git a/cmd/flux/version.go b/cmd/flux/version.go index 41f21148..f02a161f 100644 --- a/cmd/flux/version.go +++ b/cmd/flux/version.go @@ -22,6 +22,7 @@ import ( "fmt" "strings" + "github.com/google/go-containerregistry/pkg/name" "github.com/spf13/cobra" v1 "k8s.io/api/apps/v1" "sigs.k8s.io/controller-runtime/pkg/client" @@ -119,12 +120,19 @@ func versionCmdRun(cmd *cobra.Command, args []string) error { } func splitImageStr(image string) (string, string, error) { - imageArr := strings.Split(image, ":") - if len(imageArr) < 2 { + ref, err := name.ParseReference(image) + if err != nil { + return "", "", fmt.Errorf("parsing image '%s' failed: %w", image, err) + } + + reg := ref.Context().RegistryStr() + repo := strings.TrimPrefix(image, reg) + parts := strings.Split(repo, ":") + if len(parts) < 2 { return "", "", fmt.Errorf("missing image tag in image %s", image) } - name, tag := imageArr[0], imageArr[1] - nameArr := strings.Split(name, "/") - return nameArr[len(nameArr)-1], tag, nil + n, t := parts[0], strings.TrimPrefix(repo, parts[0]+":") + nameArr := strings.Split(n, "/") + return nameArr[len(nameArr)-1], t, nil } diff --git a/cmd/flux/version_test.go b/cmd/flux/version_test.go new file mode 100644 index 00000000..c209a32b --- /dev/null +++ b/cmd/flux/version_test.go @@ -0,0 +1,60 @@ +/* +Copyright 2021 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "testing" + + . "github.com/onsi/gomega" +) + +func TestSplitImageStr(t *testing.T) { + tests := []struct { + url string + expectedName string + expectedTag string + }{ + { + url: "fluxcd/notification-controller:v1.0.0", + expectedName: "notification-controller", + expectedTag: "v1.0.0", + }, + { + url: "ghcr.io/fluxcd/kustomize-controller:v1.0.0", + expectedName: "kustomize-controller", + expectedTag: "v1.0.0", + }, + { + url: "reg.internal:8080/fluxcd/source-controller:v1.0.0", + expectedName: "source-controller", + expectedTag: "v1.0.0", + }, + { + url: "fluxcd/source-controller:v1.0.1@sha256:49921d1c7b100650dd654a32df1f6e626b54dfe9707d7bb7bdf43fb7c81f1baf", + expectedName: "source-controller", + expectedTag: "v1.0.1@sha256:49921d1c7b100650dd654a32df1f6e626b54dfe9707d7bb7bdf43fb7c81f1baf", + }, + } + + for _, tt := range tests { + g := NewWithT(t) + n, t, err := splitImageStr(tt.url) + g.Expect(err).To(Not(HaveOccurred())) + g.Expect(n).To(BeEquivalentTo(tt.expectedName)) + g.Expect(t).To(BeEquivalentTo(tt.expectedTag)) + } +} From 2a033215a4db4b3997862031545af93e2b9271ec Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Tue, 22 Aug 2023 13:39:39 +0200 Subject: [PATCH 611/818] cmd/events: handle error value Signed-off-by: Hidde Beydals --- cmd/flux/events.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cmd/flux/events.go b/cmd/flux/events.go index ddfd2a39..3a0e72cc 100644 --- a/cmd/flux/events.go +++ b/cmd/flux/events.go @@ -127,6 +127,9 @@ func eventsCmdRun(cmd *cobra.Command, args []string) error { } rows, err := getRows(ctx, kubeclient, clientListOpts, refListOpts, showNamespace) + if err != nil { + return err + } if len(rows) == 0 { if eventArgs.allNamespaces { logger.Failuref("No events found.") From 00c6ac81b9938e80a79c5b625b06cfb4f220c3db Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Tue, 22 Aug 2023 13:50:44 +0200 Subject: [PATCH 612/818] manifestgen/install: use clean default HTTP client Signed-off-by: Hidde Beydals --- go.mod | 2 +- pkg/manifestgen/install/install.go | 5 +++-- pkg/manifestgen/install/manifests.go | 4 +++- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/go.mod b/go.mod index 91a5bf03..cadce0eb 100644 --- a/go.mod +++ b/go.mod @@ -38,6 +38,7 @@ require ( github.com/gonvenience/ytbx v1.4.4 github.com/google/go-cmp v0.5.9 github.com/google/go-containerregistry v0.15.2 + github.com/hashicorp/go-cleanhttp v0.5.2 github.com/homeport/dyff v1.5.8 github.com/lucasb-eyer/go-colorful v1.2.0 github.com/manifoldco/promptui v0.9.0 @@ -146,7 +147,6 @@ require ( github.com/gorilla/mux v1.8.0 // indirect github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect - github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/go-retryablehttp v0.7.4 // indirect github.com/hashicorp/golang-lru v0.5.4 // indirect diff --git a/pkg/manifestgen/install/install.go b/pkg/manifestgen/install/install.go index 7742e041..594997c2 100644 --- a/pkg/manifestgen/install/install.go +++ b/pkg/manifestgen/install/install.go @@ -27,6 +27,7 @@ import ( "time" securejoin "github.com/cyphar/filepath-securejoin" + "github.com/hashicorp/go-cleanhttp" "github.com/fluxcd/flux2/v2/pkg/manifestgen" ) @@ -91,7 +92,7 @@ func Generate(options Options, manifestsBase string) (*manifestgen.Manifest, err // GetLatestVersion calls the GitHub API and returns the latest released version. func GetLatestVersion() (string, error) { ghURL := "https://api.github.com/repos/fluxcd/flux2/releases/latest" - c := http.DefaultClient + c := cleanhttp.DefaultClient() c.Timeout = 15 * time.Second res, err := c.Get(ghURL) @@ -121,7 +122,7 @@ func ExistingVersion(version string) (bool, error) { } ghURL := fmt.Sprintf("https://api.github.com/repos/fluxcd/flux2/releases/tags/%s", version) - c := http.DefaultClient + c := cleanhttp.DefaultClient() c.Timeout = 15 * time.Second res, err := c.Get(ghURL) diff --git a/pkg/manifestgen/install/manifests.go b/pkg/manifestgen/install/manifests.go index 7e61f31c..e48eac0a 100644 --- a/pkg/manifestgen/install/manifests.go +++ b/pkg/manifestgen/install/manifests.go @@ -26,6 +26,8 @@ import ( "path/filepath" "strings" + "github.com/hashicorp/go-cleanhttp" + "github.com/fluxcd/pkg/kustomize/filesys" "github.com/fluxcd/pkg/tar" @@ -44,7 +46,7 @@ func fetch(ctx context.Context, url, version, dir string) error { } // download - resp, err := http.DefaultClient.Do(req.WithContext(ctx)) + resp, err := cleanhttp.DefaultClient().Do(req.WithContext(ctx)) if err != nil { return fmt.Errorf("failed to download manifests.tar.gz from %s, error: %w", ghURL, err) } From c81afa69939c7062b7beed7d9f79568e0f5ea48c Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Tue, 22 Aug 2023 13:26:58 +0100 Subject: [PATCH 613/818] fix autocompletion for helm chart Signed-off-by: Somtochi Onyekwere --- cmd/flux/reconcile_source_chart.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/cmd/flux/reconcile_source_chart.go b/cmd/flux/reconcile_source_chart.go index 134b0a13..41540617 100644 --- a/cmd/flux/reconcile_source_chart.go +++ b/cmd/flux/reconcile_source_chart.go @@ -20,7 +20,6 @@ import ( "github.com/spf13/cobra" "k8s.io/apimachinery/pkg/types" - helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" sourcev1 "github.com/fluxcd/source-controller/api/v1" sourcev1b2 "github.com/fluxcd/source-controller/api/v1beta2" ) @@ -34,7 +33,7 @@ var reconcileSourceHelmChartCmd = &cobra.Command{ # Trigger a reconciliation of the HelmCharts's source and apply changes flux reconcile helmchart podinfo --with-source`, - ValidArgsFunction: resourceNamesCompletionFunc(helmv2.GroupVersion.WithKind(helmv2.HelmReleaseKind)), + ValidArgsFunction: resourceNamesCompletionFunc(sourcev1b2.GroupVersion.WithKind(sourcev1b2.HelmChartKind)), RunE: reconcileWithSourceCommand{ apiType: helmChartType, object: helmChartAdapter{&sourcev1b2.HelmChart{}}, From bf36a29ca2c91f9e61b6b0f11f61f752f37e61dc Mon Sep 17 00:00:00 2001 From: Sanskar Jaiswal Date: Wed, 9 Aug 2023 17:10:45 +0530 Subject: [PATCH 614/818] add support for Kubernetes TLS keys for `flux create secret tls` Add support for using `tls.key`, `tls.crt` and `ca.crt` keys while generating a Secret, using the `--tls-key-file`, `--tls-crt-file` and `--ca-crt-file` flags respectively. Mark the flags `--key-file`, `--cert-file` and `--ca-file` as deprecated. Signed-off-by: Sanskar Jaiswal --- cmd/flux/create_secret_tls.go | 67 +++++++---- cmd/flux/create_secret_tls_test.go | 8 +- .../tls/deprecated-secret-tls.yaml | 107 ++++++++++++++++++ .../create_secret/tls/secret-tls.yaml | 16 ++- .../testdata/create_secret/tls/test-ca.pem | 11 ++ pkg/manifestgen/sourcesecret/options.go | 24 +++- pkg/manifestgen/sourcesecret/sourcesecret.go | 19 ++-- 7 files changed, 213 insertions(+), 39 deletions(-) create mode 100644 cmd/flux/testdata/create_secret/tls/deprecated-secret-tls.yaml create mode 100644 cmd/flux/testdata/create_secret/tls/test-ca.pem diff --git a/cmd/flux/create_secret_tls.go b/cmd/flux/create_secret_tls.go index ffe75651..b244a6c5 100644 --- a/cmd/flux/create_secret_tls.go +++ b/cmd/flux/create_secret_tls.go @@ -38,8 +38,9 @@ var createSecretTLSCmd = &cobra.Command{ # Files are expected to be PEM-encoded. flux create secret tls certs \ --namespace=my-namespace \ - --cert-file=./client.crt \ - --key-file=./client.key \ + --tls-crt-file=./client.crt \ + --tls-key-file=./client.key \ + --ca-crt-file=./ca.crt \ --export > certs.yaml sops --encrypt --encrypted-regex '^(data|stringData)$' \ @@ -48,22 +49,37 @@ var createSecretTLSCmd = &cobra.Command{ } type secretTLSFlags struct { - certFile string - keyFile string - caFile string + certFile string + keyFile string + caFile string + caCrtFile string + tlsKeyFile string + tlsCrtFile string } var secretTLSArgs secretTLSFlags -func initSecretTLSFlags(flags *pflag.FlagSet, args *secretTLSFlags) { +func initSecretDeprecatedTLSFlags(flags *pflag.FlagSet, args *secretTLSFlags) { flags.StringVar(&args.certFile, "cert-file", "", "TLS authentication cert file path") flags.StringVar(&args.keyFile, "key-file", "", "TLS authentication key file path") flags.StringVar(&args.caFile, "ca-file", "", "TLS authentication CA file path") } +func initSecretTLSFlags(flags *pflag.FlagSet, args *secretTLSFlags) { + flags.StringVar(&args.tlsCrtFile, "tls-crt-file", "", "TLS authentication cert file path") + flags.StringVar(&args.tlsKeyFile, "tls-key-file", "", "TLS authentication key file path") + flags.StringVar(&args.caCrtFile, "ca-crt-file", "", "TLS authentication CA file path") +} + func init() { flags := createSecretTLSCmd.Flags() + initSecretDeprecatedTLSFlags(flags, &secretTLSArgs) initSecretTLSFlags(flags, &secretTLSArgs) + + flags.MarkDeprecated("cert-file", "please use --tls-crt-file instead") + flags.MarkDeprecated("key-file", "please use --tls-key-file instead") + flags.MarkDeprecated("ca-file", "please use --ca-crt-file instead") + createSecretCmd.AddCommand(createSecretTLSCmd) } @@ -75,33 +91,40 @@ func createSecretTLSCmdRun(cmd *cobra.Command, args []string) error { return err } - caBundle := []byte{} - if secretTLSArgs.caFile != "" { - var err error - caBundle, err = os.ReadFile(secretTLSArgs.caFile) + opts := sourcesecret.Options{ + Name: name, + Namespace: *kubeconfigArgs.Namespace, + Labels: labels, + } + + if secretTLSArgs.caCrtFile != "" { + opts.CACrt, err = os.ReadFile(secretTLSArgs.caCrtFile) + if err != nil { + return fmt.Errorf("unable to read TLS CA file: %w", err) + } + } else if secretTLSArgs.caFile != "" { + opts.CAFile, err = os.ReadFile(secretTLSArgs.caFile) if err != nil { return fmt.Errorf("unable to read TLS CA file: %w", err) } } - var certFile, keyFile []byte - if secretTLSArgs.certFile != "" && secretTLSArgs.keyFile != "" { - if certFile, err = os.ReadFile(secretTLSArgs.certFile); err != nil { + if secretTLSArgs.tlsCrtFile != "" && secretTLSArgs.tlsKeyFile != "" { + if opts.TlsCrt, err = os.ReadFile(secretTLSArgs.tlsCrtFile); err != nil { + return fmt.Errorf("failed to read cert file: %w", err) + } + if opts.TlsKey, err = os.ReadFile(secretTLSArgs.tlsKeyFile); err != nil { + return fmt.Errorf("failed to read key file: %w", err) + } + } else if secretTLSArgs.certFile != "" && secretTLSArgs.keyFile != "" { + if opts.CertFile, err = os.ReadFile(secretTLSArgs.certFile); err != nil { return fmt.Errorf("failed to read cert file: %w", err) } - if keyFile, err = os.ReadFile(secretTLSArgs.keyFile); err != nil { + if opts.KeyFile, err = os.ReadFile(secretTLSArgs.keyFile); err != nil { return fmt.Errorf("failed to read key file: %w", err) } } - opts := sourcesecret.Options{ - Name: name, - Namespace: *kubeconfigArgs.Namespace, - Labels: labels, - CAFile: caBundle, - CertFile: certFile, - KeyFile: keyFile, - } secret, err := sourcesecret.Generate(opts) if err != nil { return err diff --git a/cmd/flux/create_secret_tls_test.go b/cmd/flux/create_secret_tls_test.go index 31d49200..226ed8e3 100644 --- a/cmd/flux/create_secret_tls_test.go +++ b/cmd/flux/create_secret_tls_test.go @@ -4,7 +4,7 @@ import ( "testing" ) -func TestCreateTlsSecretNoArgs(t *testing.T) { +func TestCreateTlsSecret(t *testing.T) { tests := []struct { name string args string @@ -15,9 +15,13 @@ func TestCreateTlsSecretNoArgs(t *testing.T) { assert: assertError("name is required"), }, { - args: "create secret tls certs --namespace=my-namespace --cert-file=./testdata/create_secret/tls/test-cert.pem --key-file=./testdata/create_secret/tls/test-key.pem --export", + args: "create secret tls certs --namespace=my-namespace --tls-crt-file=./testdata/create_secret/tls/test-cert.pem --tls-key-file=./testdata/create_secret/tls/test-key.pem --ca-crt-file=./testdata/create_secret/tls/test-ca.pem --export", assert: assertGoldenFile("testdata/create_secret/tls/secret-tls.yaml"), }, + { + args: "create secret tls certs --namespace=my-namespace --cert-file=./testdata/create_secret/tls/test-cert.pem --key-file=./testdata/create_secret/tls/test-key.pem --ca-file=./testdata/create_secret/tls/test-ca.pem --export", + assert: assertGoldenFile("testdata/create_secret/tls/deprecated-secret-tls.yaml"), + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { diff --git a/cmd/flux/testdata/create_secret/tls/deprecated-secret-tls.yaml b/cmd/flux/testdata/create_secret/tls/deprecated-secret-tls.yaml new file mode 100644 index 00000000..04e01d63 --- /dev/null +++ b/cmd/flux/testdata/create_secret/tls/deprecated-secret-tls.yaml @@ -0,0 +1,107 @@ +Flag --cert-file has been deprecated, please use --tls-crt-file instead +Flag --key-file has been deprecated, please use --tls-key-file instead +Flag --ca-file has been deprecated, please use --ca-crt-file instead +--- +apiVersion: v1 +kind: Secret +metadata: + name: certs + namespace: my-namespace +stringData: + caFile: | + -----BEGIN CERTIFICATE----- + MIIBhzCCAS2gAwIBAgIUdsAtiX3gN0uk7ddxASWYE/tdv0wwCgYIKoZIzj0EAwIw + GTEXMBUGA1UEAxMOZXhhbXBsZS5jb20gQ0EwHhcNMjAwNDE3MDgxODAwWhcNMjUw + NDE2MDgxODAwWjAZMRcwFQYDVQQDEw5leGFtcGxlLmNvbSBDQTBZMBMGByqGSM49 + AgEGCCqGSM49AwEHA0IABK7h/5D8bV93MmEdhu02JsS6ugB8s6PzRl3PV4xs3Sbr + RNkkM59+x3b0iWx/i76qPYpNLoiVUVXQmA9Y+4DbMxijUzBRMA4GA1UdDwEB/wQE + AwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQGyUiU1QEZiMAqjsnIYTwZ + 4yp5wzAPBgNVHREECDAGhwR/AAABMAoGCCqGSM49BAMCA0gAMEUCIQDzdtvKdE8O + 1+WRTZ9MuSiFYcrEz7Zne7VXouDEKqKEigIgM4WlbDeuNCKbqhqj+xZV0pa3rweb + OD8EjjCMY69RMO0= + -----END CERTIFICATE----- + certFile: | + -----BEGIN CERTIFICATE----- + MIIFazCCA1OgAwIBAgIUT84jeO/ncOrqI+FY05Fzbg8Ed7MwDQYJKoZIhvcNAQEL + BQAwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoM + GEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDAeFw0yMTA4MDgxNDQyMzVaFw0yMjA4 + MDgxNDQyMzVaMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEw + HwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwggIiMA0GCSqGSIb3DQEB + AQUAA4ICDwAwggIKAoICAQDn/rPsZ74oypiwCzLlx57zplTiCi/WLSF+MmLGuTvM + EQnV+OND2zFgvDIV/vFs3brkd6rLVI4NcdgSj4YKULCMwwOl45hQPdCTEPJvUhCm + M+FuQ0czmEEJSjZtdLFz1B7QB/JemNnbfigxM9mlg58AlBhVJqn8q64wd/kC/W/K + JTLJuBiVf12ZiPoPfO4WSxAqD3opZ8gdbmK0KYQAhKjEto6ZrYGisfwU1gt3l8M7 + sCJSpEkOkpuQgJ8D+xzJS36VXBJQMMP9nAPps+x/rGFplsPMsXEFFiwvR1+FJZwz + lg2sJ91bLGZQ7vn74MfsGrxpiJwllRThJyT7C9V0sjb5trT2lEqZlP2dRSJYt7aJ + 1crEcdGSl6RIKgxSV6Hk8dh/ZaTjrTwaKxVkPo2IeEXy5xrR7DyonOQ6Yes0KOCm + JB5yHkFlIVEnLm/HZXEtm3bPHsFgTZuInyBCOMXpUESuVZIw8YK+Vd6AExGPPwZ4 + n5I/sCDxWII9owIj3LeLzdUG6JoroahhGmo8rgpbJpPnS+VgryQ/raUQjqDzDCuE + 9vKXKBlSUqK6H9A+NMc0mme7M8/GX7T7ewFGUB/xsdrcO4yXjqHnAe0yLf8epDjC + hh76bYqwwinVrmfcNcRxFVJZW2z0gGdgkOkOLaVVb9ggPV2SNAHbN4A+St/iRYR5 + awIDAQABo1MwUTAdBgNVHQ4EFgQUzMaCqVM30EZFfTeNUIJ5fNPAhaQwHwYDVR0j + BBgwFoAUzMaCqVM30EZFfTeNUIJ5fNPAhaQwDwYDVR0TAQH/BAUwAwEB/zANBgkq + hkiG9w0BAQsFAAOCAgEAVmk1rXtVkYR1Vs2Va/xrUaGXlFznhPU/Fft44kiEkkLp + mLVelWyAqvXYioqssZwuZnTjGz0DQPqzJjqwuGy4CHwPLmhCtfHplrbWo8a0ivYC + cL20KfZsG941siUh7LGBjTsq6mWBf2ytlFmg/fg93SgmqcEUAUcdps0JpZD8lgWB + ZMstfr6E3jaEus3OsvDD6hJNYZ5clJ5+ynLoWZ99A9JC0U46hmIZpRjbdSvasKpD + XrXTdpzyL/Do3znXE/yfoHv4//Rj2CpPHJLYRCIzvuf1mo1fWd53FjHvrbUvaHFz + CGuZROd4dC4Rx5nZw2ogIYvJ8m6HpIDkL3pBNSQJtIsvAYEQcotJoa5D/e9fu2Wr + +og37oCY4OXzViEBQvyxKD4cajNco1fgGKEaFROADwr3JceGI7Anq5W+xdUvAGNM + QuGeCueqNyrJ0CbQ1zEhwgpk/VYfB0u9m0bjMellRlKMdojby+FDCJtAJesx9no4 + SQXyx+aNHhj3qReysjGNwZvBk1IHL04HAT+ogNiYhTl1J/YON4MB5UN6Y2PxP6uG + KvJGPigx4fAwfR/d78o5ngwoH9m+8FUg8+qllJ8XgIbl/VXKTk3G4ceOm4eBmrel + DwWuBhELSjtXWPWhMlkiebgejDbAear53Lia2Cc43zx/KuhMHBTlKY/vY4F2YiI= + -----END CERTIFICATE----- + keyFile: | + -----BEGIN PRIVATE KEY----- + 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 + kOvbvVANrpsunlSAcpXm1qkV+G+xPnyJ + -----END PRIVATE KEY----- diff --git a/cmd/flux/testdata/create_secret/tls/secret-tls.yaml b/cmd/flux/testdata/create_secret/tls/secret-tls.yaml index 359af2b7..6e2cdab1 100644 --- a/cmd/flux/testdata/create_secret/tls/secret-tls.yaml +++ b/cmd/flux/testdata/create_secret/tls/secret-tls.yaml @@ -5,7 +5,19 @@ metadata: name: certs namespace: my-namespace stringData: - certFile: | + ca.crt: | + -----BEGIN CERTIFICATE----- + MIIBhzCCAS2gAwIBAgIUdsAtiX3gN0uk7ddxASWYE/tdv0wwCgYIKoZIzj0EAwIw + GTEXMBUGA1UEAxMOZXhhbXBsZS5jb20gQ0EwHhcNMjAwNDE3MDgxODAwWhcNMjUw + NDE2MDgxODAwWjAZMRcwFQYDVQQDEw5leGFtcGxlLmNvbSBDQTBZMBMGByqGSM49 + AgEGCCqGSM49AwEHA0IABK7h/5D8bV93MmEdhu02JsS6ugB8s6PzRl3PV4xs3Sbr + RNkkM59+x3b0iWx/i76qPYpNLoiVUVXQmA9Y+4DbMxijUzBRMA4GA1UdDwEB/wQE + AwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQGyUiU1QEZiMAqjsnIYTwZ + 4yp5wzAPBgNVHREECDAGhwR/AAABMAoGCCqGSM49BAMCA0gAMEUCIQDzdtvKdE8O + 1+WRTZ9MuSiFYcrEz7Zne7VXouDEKqKEigIgM4WlbDeuNCKbqhqj+xZV0pa3rweb + OD8EjjCMY69RMO0= + -----END CERTIFICATE----- + tls.crt: | -----BEGIN CERTIFICATE----- MIIFazCCA1OgAwIBAgIUT84jeO/ncOrqI+FY05Fzbg8Ed7MwDQYJKoZIhvcNAQEL BQAwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoM @@ -37,7 +49,7 @@ stringData: KvJGPigx4fAwfR/d78o5ngwoH9m+8FUg8+qllJ8XgIbl/VXKTk3G4ceOm4eBmrel DwWuBhELSjtXWPWhMlkiebgejDbAear53Lia2Cc43zx/KuhMHBTlKY/vY4F2YiI= -----END CERTIFICATE----- - keyFile: | + tls.key: | -----BEGIN PRIVATE KEY----- MIIJRAIBADANBgkqhkiG9w0BAQEFAASCCS4wggkqAgEAAoICAQDn/rPsZ74oypiw CzLlx57zplTiCi/WLSF+MmLGuTvMEQnV+OND2zFgvDIV/vFs3brkd6rLVI4NcdgS diff --git a/cmd/flux/testdata/create_secret/tls/test-ca.pem b/cmd/flux/testdata/create_secret/tls/test-ca.pem new file mode 100644 index 00000000..080bd24e --- /dev/null +++ b/cmd/flux/testdata/create_secret/tls/test-ca.pem @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBhzCCAS2gAwIBAgIUdsAtiX3gN0uk7ddxASWYE/tdv0wwCgYIKoZIzj0EAwIw +GTEXMBUGA1UEAxMOZXhhbXBsZS5jb20gQ0EwHhcNMjAwNDE3MDgxODAwWhcNMjUw +NDE2MDgxODAwWjAZMRcwFQYDVQQDEw5leGFtcGxlLmNvbSBDQTBZMBMGByqGSM49 +AgEGCCqGSM49AwEHA0IABK7h/5D8bV93MmEdhu02JsS6ugB8s6PzRl3PV4xs3Sbr +RNkkM59+x3b0iWx/i76qPYpNLoiVUVXQmA9Y+4DbMxijUzBRMA4GA1UdDwEB/wQE +AwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQGyUiU1QEZiMAqjsnIYTwZ +4yp5wzAPBgNVHREECDAGhwR/AAABMAoGCCqGSM49BAMCA0gAMEUCIQDzdtvKdE8O +1+WRTZ9MuSiFYcrEz7Zne7VXouDEKqKEigIgM4WlbDeuNCKbqhqj+xZV0pa3rweb +OD8EjjCMY69RMO0= +-----END CERTIFICATE----- diff --git a/pkg/manifestgen/sourcesecret/options.go b/pkg/manifestgen/sourcesecret/options.go index ada27ce8..96e192c3 100644 --- a/pkg/manifestgen/sourcesecret/options.go +++ b/pkg/manifestgen/sourcesecret/options.go @@ -33,13 +33,19 @@ const ( const ( UsernameSecretKey = "username" PasswordSecretKey = "password" - CAFileSecretKey = "caFile" - CertFileSecretKey = "certFile" - KeyFileSecretKey = "keyFile" + CACrtSecretKey = "ca.crt" + TlsCrtSecretKey = "tls.crt" + TlsKeySecretKey = "tls.key" PrivateKeySecretKey = "identity" PublicKeySecretKey = "identity.pub" KnownHostsSecretKey = "known_hosts" BearerTokenKey = "bearerToken" + + // Depreacted: These keys are used in the generated secrets if the + // command was invoked with the deprecated TLS flags. + CAFileSecretKey = "caFile" + CertFileSecretKey = "certFile" + KeyFileSecretKey = "keyFile" ) type Options struct { @@ -54,12 +60,18 @@ type Options struct { Keypair *ssh.KeyPair Username string Password string - CAFile []byte - CertFile []byte - KeyFile []byte + CACrt []byte + TlsCrt []byte + TlsKey []byte TargetPath string ManifestFile string BearerToken string + + // Depreacted: These fields are used to store TLS data that + // specified by the deprecated TLS flags. + CAFile []byte + CertFile []byte + KeyFile []byte } func MakeDefaultOptions() Options { diff --git a/pkg/manifestgen/sourcesecret/sourcesecret.go b/pkg/manifestgen/sourcesecret/sourcesecret.go index 41849b70..4f8ccacc 100644 --- a/pkg/manifestgen/sourcesecret/sourcesecret.go +++ b/pkg/manifestgen/sourcesecret/sourcesecret.go @@ -89,7 +89,7 @@ func Generate(options Options) (*manifestgen.Manifest, error) { } } - secret := buildSecret(keypair, hostKey, options.CAFile, options.CertFile, options.KeyFile, dockerCfgJson, options) + secret := buildSecret(keypair, hostKey, dockerCfgJson, options) b, err := yaml.Marshal(secret) if err != nil { return nil, err @@ -130,7 +130,7 @@ func LoadKeyPair(privateKey []byte, password string) (*ssh.KeyPair, error) { }, nil } -func buildSecret(keypair *ssh.KeyPair, hostKey, caFile, certFile, keyFile, dockerCfg []byte, options Options) (secret corev1.Secret) { +func buildSecret(keypair *ssh.KeyPair, hostKey, dockerCfg []byte, options Options) (secret corev1.Secret) { secret.TypeMeta = metav1.TypeMeta{ APIVersion: "v1", Kind: "Secret", @@ -156,13 +156,18 @@ func buildSecret(keypair *ssh.KeyPair, hostKey, caFile, certFile, keyFile, docke secret.StringData[BearerTokenKey] = options.BearerToken } - if len(caFile) != 0 { - secret.StringData[CAFileSecretKey] = string(caFile) + if len(options.CACrt) != 0 { + secret.StringData[CACrtSecretKey] = string(options.CACrt) + } else if len(options.CAFile) != 0 { + secret.StringData[CAFileSecretKey] = string(options.CAFile) } - if len(certFile) != 0 && len(keyFile) != 0 { - secret.StringData[CertFileSecretKey] = string(certFile) - secret.StringData[KeyFileSecretKey] = string(keyFile) + if len(options.TlsCrt) != 0 && len(options.TlsKey) != 0 { + secret.StringData[TlsCrtSecretKey] = string(options.TlsCrt) + secret.StringData[TlsKeySecretKey] = string(options.TlsKey) + } else if len(options.CertFile) != 0 && len(options.KeyFile) != 0 { + secret.StringData[CertFileSecretKey] = string(options.CertFile) + secret.StringData[KeyFileSecretKey] = string(options.KeyFile) } if keypair != nil && len(hostKey) != 0 { From b32051df5397bd9834027a14d68b3cef0a17c9f4 Mon Sep 17 00:00:00 2001 From: Sanskar Jaiswal Date: Wed, 9 Aug 2023 17:54:22 +0530 Subject: [PATCH 615/818] deprecate TLS flags for flux create secret helm Signed-off-by: Sanskar Jaiswal --- cmd/flux/create_secret_helm.go | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/cmd/flux/create_secret_helm.go b/cmd/flux/create_secret_helm.go index bf733adb..bca4b5fd 100644 --- a/cmd/flux/create_secret_helm.go +++ b/cmd/flux/create_secret_helm.go @@ -41,15 +41,8 @@ var createSecretHelmCmd = &cobra.Command{ --export > repo-auth.yaml sops --encrypt --encrypted-regex '^(data|stringData)$' \ - --in-place repo-auth.yaml + --in-place repo-auth.yaml`, - # Create a Helm authentication secret using a custom TLS cert - flux create secret helm repo-auth \ - --username=username \ - --password=password \ - --cert-file=./cert.crt \ - --key-file=./key.crt \ - --ca-file=./ca.crt`, RunE: createSecretHelmCmdRun, } @@ -62,9 +55,16 @@ type secretHelmFlags struct { var secretHelmArgs secretHelmFlags func init() { - createSecretHelmCmd.Flags().StringVarP(&secretHelmArgs.username, "username", "u", "", "basic authentication username") - createSecretHelmCmd.Flags().StringVarP(&secretHelmArgs.password, "password", "p", "", "basic authentication password") - initSecretTLSFlags(createSecretHelmCmd.Flags(), &secretHelmArgs.secretTLSFlags) + flags := createSecretHelmCmd.Flags() + flags.StringVarP(&secretHelmArgs.username, "username", "u", "", "basic authentication username") + flags.StringVarP(&secretHelmArgs.password, "password", "p", "", "basic authentication password") + + initSecretDeprecatedTLSFlags(flags, &secretHelmArgs.secretTLSFlags) + deprecationMsg := "please use the command `flux create secret tls` to generate TLS secrets" + flags.MarkDeprecated("cert-file", deprecationMsg) + flags.MarkDeprecated("key-file", deprecationMsg) + flags.MarkDeprecated("ca-file", deprecationMsg) + createSecretCmd.AddCommand(createSecretHelmCmd) } From 2fc9d73c5fcda2086c7d80b1865202e8e2dd509a Mon Sep 17 00:00:00 2001 From: Sanskar Jaiswal Date: Wed, 9 Aug 2023 17:56:50 +0530 Subject: [PATCH 616/818] add flag `--ca-crt-file` to `flux create secret git` Add flag `--ca-crt-file` to `flux create secret git` to specify the path to CA certificate. It takes precedence over `--ca-file` and uses the key `ca.crt` in the generated Secret. Signed-off-by: Sanskar Jaiswal --- cmd/flux/create_secret_git.go | 14 +++++++++++--- cmd/flux/create_secret_git_test.go | 16 ++++++++++++++++ .../create_secret/git/secret-ca-crt.yaml | 11 +++++++++++ 3 files changed, 38 insertions(+), 3 deletions(-) create mode 100644 cmd/flux/testdata/create_secret/git/secret-ca-crt.yaml diff --git a/cmd/flux/create_secret_git.go b/cmd/flux/create_secret_git.go index a9330cff..9865cbc9 100644 --- a/cmd/flux/create_secret_git.go +++ b/cmd/flux/create_secret_git.go @@ -88,6 +88,7 @@ type secretGitFlags struct { rsaBits flags.RSAKeyBits ecdsaCurve flags.ECDSACurve caFile string + caCrtFile string privateKeyFile string bearerToken string } @@ -102,6 +103,7 @@ func init() { createSecretGitCmd.Flags().Var(&secretGitArgs.rsaBits, "ssh-rsa-bits", secretGitArgs.rsaBits.Description()) createSecretGitCmd.Flags().Var(&secretGitArgs.ecdsaCurve, "ssh-ecdsa-curve", secretGitArgs.ecdsaCurve.Description()) createSecretGitCmd.Flags().StringVar(&secretGitArgs.caFile, "ca-file", "", "path to TLS CA file used for validating self-signed certificates") + createSecretGitCmd.Flags().StringVar(&secretGitArgs.caCrtFile, "ca-crt-file", "", "path to TLS CA certificate file used for validating self-signed certificates; takes precedence over --ca-file") createSecretGitCmd.Flags().StringVar(&secretGitArgs.privateKeyFile, "private-key-file", "", "path to a passwordless private key file used for authenticating to the Git SSH server") createSecretGitCmd.Flags().StringVar(&secretGitArgs.bearerToken, "bearer-token", "", "bearer authentication token") @@ -160,12 +162,18 @@ func createSecretGitCmdRun(cmd *cobra.Command, args []string) error { if secretGitArgs.username != "" && secretGitArgs.password != "" && secretGitArgs.bearerToken != "" { return fmt.Errorf("user credentials and bearer token cannot be used together") } - if secretGitArgs.caFile != "" { - caBundle, err := os.ReadFile(secretGitArgs.caFile) + + // --ca-crt-file takes precedence over --ca-file. + if secretGitArgs.caCrtFile != "" { + opts.CACrt, err = os.ReadFile(secretGitArgs.caCrtFile) + if err != nil { + return fmt.Errorf("unable to read TLS CA file: %w", err) + } + } else if secretGitArgs.caFile != "" { + opts.CAFile, err = os.ReadFile(secretGitArgs.caFile) if err != nil { return fmt.Errorf("unable to read TLS CA file: %w", err) } - opts.CAFile = caBundle } default: return fmt.Errorf("git URL scheme '%s' not supported, can be: ssh, http and https", u.Scheme) diff --git a/cmd/flux/create_secret_git_test.go b/cmd/flux/create_secret_git_test.go index bdf2431d..d4c84d0d 100644 --- a/cmd/flux/create_secret_git_test.go +++ b/cmd/flux/create_secret_git_test.go @@ -1,10 +1,21 @@ package main import ( + "fmt" + "os" "testing" ) func TestCreateGitSecret(t *testing.T) { + file, err := os.CreateTemp(t.TempDir(), "ca-crt") + if err != nil { + t.Fatal("could not create CA certificate file") + } + _, err = file.Write([]byte("ca-data")) + if err != nil { + t.Fatal("could not write to CA certificate file") + } + tests := []struct { name string args string @@ -35,6 +46,11 @@ func TestCreateGitSecret(t *testing.T) { args: "create secret git bearer-token-auth --url=https://github.com/stefanprodan/podinfo --bearer-token=ghp_baR2qnFF0O41WlucePL3udt2N9vVZS4R0hAS --namespace=my-namespace --export", assert: assertGoldenFile("testdata/create_secret/git/git-bearer-token.yaml"), }, + { + name: "git authentication with CA certificate", + args: fmt.Sprintf("create secret git ca-crt --url=https://github.com/stefanprodan/podinfo --password=my-password --username=my-username --ca-crt-file=%s --namespace=my-namespace --export", file.Name()), + assert: assertGoldenFile("testdata/create_secret/git/secret-ca-crt.yaml"), + }, { name: "git authentication with basic auth and bearer token", args: "create secret git podinfo-auth --url=https://github.com/stefanprodan/podinfo --username=aaa --password=zzzz --bearer-token=aaaa --namespace=my-namespace --export", diff --git a/cmd/flux/testdata/create_secret/git/secret-ca-crt.yaml b/cmd/flux/testdata/create_secret/git/secret-ca-crt.yaml new file mode 100644 index 00000000..958bd45f --- /dev/null +++ b/cmd/flux/testdata/create_secret/git/secret-ca-crt.yaml @@ -0,0 +1,11 @@ +--- +apiVersion: v1 +kind: Secret +metadata: + name: ca-crt + namespace: my-namespace +stringData: + ca.crt: ca-data + password: my-password + username: my-username + From 6464d6c7b474c1891fb35ccf86ea24083b4c22fe Mon Sep 17 00:00:00 2001 From: Sanskar Jaiswal Date: Thu, 10 Aug 2023 13:44:28 +0530 Subject: [PATCH 617/818] add deprecation warning per secret key field and constant Signed-off-by: Sanskar Jaiswal --- cmd/flux/create_secret_tls.go | 4 +-- pkg/manifestgen/sourcesecret/options.go | 32 ++++++++++++-------- pkg/manifestgen/sourcesecret/sourcesecret.go | 6 ++-- 3 files changed, 25 insertions(+), 17 deletions(-) diff --git a/cmd/flux/create_secret_tls.go b/cmd/flux/create_secret_tls.go index b244a6c5..82f36743 100644 --- a/cmd/flux/create_secret_tls.go +++ b/cmd/flux/create_secret_tls.go @@ -110,10 +110,10 @@ func createSecretTLSCmdRun(cmd *cobra.Command, args []string) error { } if secretTLSArgs.tlsCrtFile != "" && secretTLSArgs.tlsKeyFile != "" { - if opts.TlsCrt, err = os.ReadFile(secretTLSArgs.tlsCrtFile); err != nil { + if opts.TLSCrt, err = os.ReadFile(secretTLSArgs.tlsCrtFile); err != nil { return fmt.Errorf("failed to read cert file: %w", err) } - if opts.TlsKey, err = os.ReadFile(secretTLSArgs.tlsKeyFile); err != nil { + if opts.TLSKey, err = os.ReadFile(secretTLSArgs.tlsKeyFile); err != nil { return fmt.Errorf("failed to read key file: %w", err) } } else if secretTLSArgs.certFile != "" && secretTLSArgs.keyFile != "" { diff --git a/pkg/manifestgen/sourcesecret/options.go b/pkg/manifestgen/sourcesecret/options.go index 96e192c3..71b5f8bf 100644 --- a/pkg/manifestgen/sourcesecret/options.go +++ b/pkg/manifestgen/sourcesecret/options.go @@ -34,18 +34,22 @@ const ( UsernameSecretKey = "username" PasswordSecretKey = "password" CACrtSecretKey = "ca.crt" - TlsCrtSecretKey = "tls.crt" - TlsKeySecretKey = "tls.key" + TLSCrtSecretKey = "tls.crt" + TLSKeySecretKey = "tls.key" PrivateKeySecretKey = "identity" PublicKeySecretKey = "identity.pub" KnownHostsSecretKey = "known_hosts" BearerTokenKey = "bearerToken" - // Depreacted: These keys are used in the generated secrets if the - // command was invoked with the deprecated TLS flags. - CAFileSecretKey = "caFile" + // Deprecated: Replaced by CACrtSecretKey, but kept for backwards + // compatibility with deprecated TLS flags. + CAFileSecretKey = "caFile" + // Deprecated: Replaced by TLSCrtSecretKey, but kept for backwards + // compatibility with deprecated TLS flags. CertFileSecretKey = "certFile" - KeyFileSecretKey = "keyFile" + // Deprecated: Replaced by TLSKeySecretKey, but kept for backwards + // compatibility with deprecated TLS flags. + KeyFileSecretKey = "keyFile" ) type Options struct { @@ -61,17 +65,21 @@ type Options struct { Username string Password string CACrt []byte - TlsCrt []byte - TlsKey []byte + TLSCrt []byte + TLSKey []byte TargetPath string ManifestFile string BearerToken string - // Depreacted: These fields are used to store TLS data that - // specified by the deprecated TLS flags. - CAFile []byte + // Deprecated: Replaced by CACrt, but kept for backwards compatibility + // with deprecated TLS flags. + CAFile []byte + // Deprecated: Replaced by TLSCrt, but kept for backwards compatibility + // with deprecated TLS flags. CertFile []byte - KeyFile []byte + // Deprecated: Replaced by TLSKey, but kept for backwards compatibility + // with deprecated TLS flags. + KeyFile []byte } func MakeDefaultOptions() Options { diff --git a/pkg/manifestgen/sourcesecret/sourcesecret.go b/pkg/manifestgen/sourcesecret/sourcesecret.go index 4f8ccacc..25d3f59a 100644 --- a/pkg/manifestgen/sourcesecret/sourcesecret.go +++ b/pkg/manifestgen/sourcesecret/sourcesecret.go @@ -162,9 +162,9 @@ func buildSecret(keypair *ssh.KeyPair, hostKey, dockerCfg []byte, options Option secret.StringData[CAFileSecretKey] = string(options.CAFile) } - if len(options.TlsCrt) != 0 && len(options.TlsKey) != 0 { - secret.StringData[TlsCrtSecretKey] = string(options.TlsCrt) - secret.StringData[TlsKeySecretKey] = string(options.TlsKey) + if len(options.TLSCrt) != 0 && len(options.TLSKey) != 0 { + secret.StringData[TLSCrtSecretKey] = string(options.TLSCrt) + secret.StringData[TLSKeySecretKey] = string(options.TLSKey) } else if len(options.CertFile) != 0 && len(options.KeyFile) != 0 { secret.StringData[CertFileSecretKey] = string(options.CertFile) secret.StringData[KeyFileSecretKey] = string(options.KeyFile) From 8df27d8c3a57659e387ce0664ffce57f66c0825f Mon Sep 17 00:00:00 2001 From: Sanskar Jaiswal Date: Fri, 11 Aug 2023 15:19:49 +0530 Subject: [PATCH 618/818] modify `flux create secret tls` to create secrets of type TLS Signed-off-by: Sanskar Jaiswal --- cmd/flux/testdata/create_secret/tls/secret-tls.yaml | 1 + pkg/manifestgen/sourcesecret/sourcesecret.go | 1 + 2 files changed, 2 insertions(+) diff --git a/cmd/flux/testdata/create_secret/tls/secret-tls.yaml b/cmd/flux/testdata/create_secret/tls/secret-tls.yaml index 6e2cdab1..047c9221 100644 --- a/cmd/flux/testdata/create_secret/tls/secret-tls.yaml +++ b/cmd/flux/testdata/create_secret/tls/secret-tls.yaml @@ -102,3 +102,4 @@ stringData: XBQO4ig7vY8+1+L3w2xpTN95/rXAvB4BbO/DLea9ArikePoSJ+bVTj0YwrKBghep kOvbvVANrpsunlSAcpXm1qkV+G+xPnyJ -----END PRIVATE KEY----- +type: kubernetes.io/tls diff --git a/pkg/manifestgen/sourcesecret/sourcesecret.go b/pkg/manifestgen/sourcesecret/sourcesecret.go index 25d3f59a..f468fa72 100644 --- a/pkg/manifestgen/sourcesecret/sourcesecret.go +++ b/pkg/manifestgen/sourcesecret/sourcesecret.go @@ -163,6 +163,7 @@ func buildSecret(keypair *ssh.KeyPair, hostKey, dockerCfg []byte, options Option } if len(options.TLSCrt) != 0 && len(options.TLSKey) != 0 { + secret.Type = corev1.SecretTypeTLS secret.StringData[TLSCrtSecretKey] = string(options.TLSCrt) secret.StringData[TLSKeySecretKey] = string(options.TLSKey) } else if len(options.CertFile) != 0 && len(options.KeyFile) != 0 { From f7e522353374041a648b98f431b5c8a372779401 Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Thu, 24 Aug 2023 08:02:17 +0000 Subject: [PATCH 619/818] Update toolkit components - helm-controller to v0.36.0 https://github.com/fluxcd/helm-controller/blob/v0.36.0/CHANGELOG.md - kustomize-controller to v1.1.0 https://github.com/fluxcd/kustomize-controller/blob/v1.1.0/CHANGELOG.md - source-controller to v1.1.0 https://github.com/fluxcd/source-controller/blob/v1.1.0/CHANGELOG.md - notification-controller to v1.1.0 https://github.com/fluxcd/notification-controller/blob/v1.1.0/CHANGELOG.md - image-reflector-controller to v0.30.0 https://github.com/fluxcd/image-reflector-controller/blob/v0.30.0/CHANGELOG.md - image-automation-controller to v0.36.0 https://github.com/fluxcd/image-automation-controller/blob/v0.36.0/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 26 ++++----- go.sum | 54 +++++++++---------- .../bases/helm-controller/kustomization.yaml | 4 +- .../kustomization.yaml | 4 +- .../kustomization.yaml | 4 +- .../kustomize-controller/kustomization.yaml | 4 +- .../kustomization.yaml | 4 +- .../source-controller/kustomization.yaml | 4 +- manifests/crds/kustomization.yaml | 12 ++--- 9 files changed, 58 insertions(+), 58 deletions(-) diff --git a/go.mod b/go.mod index cadce0eb..45f96b47 100644 --- a/go.mod +++ b/go.mod @@ -14,13 +14,13 @@ require ( github.com/cyphar/filepath-securejoin v0.2.3 github.com/distribution/distribution/v3 v3.0.0-20230711080520-40ef2353fa4f github.com/fluxcd/go-git-providers v0.18.0 - github.com/fluxcd/helm-controller/api v0.35.0 - github.com/fluxcd/image-automation-controller/api v0.35.0 - github.com/fluxcd/image-reflector-controller/api v0.29.1 - github.com/fluxcd/kustomize-controller/api v1.0.1 - github.com/fluxcd/notification-controller/api v1.0.0 + github.com/fluxcd/helm-controller/api v0.36.0 + github.com/fluxcd/image-automation-controller/api v0.36.0 + github.com/fluxcd/image-reflector-controller/api v0.30.0 + github.com/fluxcd/kustomize-controller/api v1.1.0 + github.com/fluxcd/notification-controller/api v1.1.0 github.com/fluxcd/pkg/apis/event v0.5.1 - github.com/fluxcd/pkg/apis/meta v1.1.1 + github.com/fluxcd/pkg/apis/meta v1.1.2 github.com/fluxcd/pkg/git v0.12.3 github.com/fluxcd/pkg/git/gogit v0.12.1 github.com/fluxcd/pkg/kustomize v1.3.4 @@ -31,7 +31,7 @@ require ( github.com/fluxcd/pkg/ssh v0.8.0 github.com/fluxcd/pkg/tar v0.2.0 github.com/fluxcd/pkg/version v0.2.2 - github.com/fluxcd/source-controller/api v1.0.1 + github.com/fluxcd/source-controller/api v1.1.0 github.com/go-git/go-git/v5 v5.7.0 github.com/go-logr/logr v1.2.4 github.com/gonvenience/bunt v1.3.5 @@ -51,14 +51,14 @@ require ( github.com/theckman/yacspin v0.13.12 golang.org/x/crypto v0.11.0 golang.org/x/term v0.10.0 - k8s.io/api v0.27.3 - k8s.io/apiextensions-apiserver v0.27.3 - k8s.io/apimachinery v0.27.3 + k8s.io/api v0.27.4 + k8s.io/apiextensions-apiserver v0.27.4 + k8s.io/apimachinery v0.27.4 k8s.io/cli-runtime v0.27.3 - k8s.io/client-go v0.27.3 + k8s.io/client-go v0.27.4 k8s.io/kubectl v0.27.3 sigs.k8s.io/cli-utils v0.34.0 - sigs.k8s.io/controller-runtime v0.15.0 + sigs.k8s.io/controller-runtime v0.15.1 sigs.k8s.io/kustomize/api v0.13.4 sigs.k8s.io/kustomize/kyaml v0.14.2 sigs.k8s.io/yaml v1.3.0 @@ -216,7 +216,7 @@ require ( gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/component-base v0.27.3 // indirect + k8s.io/component-base v0.27.4 // indirect k8s.io/klog/v2 v2.100.1 // indirect k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f // indirect k8s.io/utils v0.0.0-20230505201702-9f6742963106 // indirect diff --git a/go.sum b/go.sum index cde50989..398956df 100644 --- a/go.sum +++ b/go.sum @@ -149,24 +149,24 @@ github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= github.com/fluxcd/go-git-providers v0.18.0 h1:4Whs6GzQdx3d7UTeIahRmzUrTZKhucySC53pwdXFV7Y= github.com/fluxcd/go-git-providers v0.18.0/go.mod h1:++kUR1LegtRWU30bdPb9FuRUH/6+DgoHSbwOkZ5NiKo= -github.com/fluxcd/helm-controller/api v0.35.0 h1:UyhKXPni5z69DzPW7GtECGGdUwKsB+OTI0A/wc7HmFY= -github.com/fluxcd/helm-controller/api v0.35.0/go.mod h1:CdHMtr5wM0xgDt/PS147H7QQS+zDxAFgDW3ZN8MnUlU= -github.com/fluxcd/image-automation-controller/api v0.35.0 h1:B7yJdAbnx0hwI6ffVu0YAyc3d3sqjXrv6ySK++g3t28= -github.com/fluxcd/image-automation-controller/api v0.35.0/go.mod h1:67HbnrXDy550zJKZZbzAZ0yfzL0Ge1O18yn/shcgy0Y= -github.com/fluxcd/image-reflector-controller/api v0.29.1 h1:mnFaO60b8WyCxpc72utmAJ7J1ZtZjGGThH9NdxVeEyo= -github.com/fluxcd/image-reflector-controller/api v0.29.1/go.mod h1:aYwq15SpkAD/urQme2iEsNouTscfR1Qo39KBlJ+0EW8= -github.com/fluxcd/kustomize-controller/api v1.0.1 h1:zz9zx4Mc7rw9gqdgdhMWX1uDM2uR1x7WBUujKs4mdx8= -github.com/fluxcd/kustomize-controller/api v1.0.1/go.mod h1:rYUovoofr3bVPgQowWj/CSGw73qoH0tOCopJ3oNh7lM= -github.com/fluxcd/notification-controller/api v1.0.0 h1:WiXS116pwhFp7Qe/Fc1GmKCfLBRnZu+rYCeIn07cO+4= -github.com/fluxcd/notification-controller/api v1.0.0/go.mod h1:uamWZwmhSHE7xdJkgRhH4Eo5/SKKILFI4o+CoQjlczc= +github.com/fluxcd/helm-controller/api v0.36.0 h1:V48f/9W2Pv3LETREaCs7jkLh1LRI6J51kKY2UzUZjvQ= +github.com/fluxcd/helm-controller/api v0.36.0/go.mod h1:zkcRy3PxG0NoxSY5SjiSA5tWOGa6spIbWsChQY8FXqM= +github.com/fluxcd/image-automation-controller/api v0.36.0 h1:Y1uzJ+K3ov5jhbUH+7+X3hfpgXIdgUO9VR7REoHUAxs= +github.com/fluxcd/image-automation-controller/api v0.36.0/go.mod h1:eZRv70cGQAxOpiqf1mZYDPgCZOmWNoGH0/PDgU60lDM= +github.com/fluxcd/image-reflector-controller/api v0.30.0 h1:DiWj+4tcbnaSqZs1Pfkyt3uSy47wg3dsNMgbFE50pYc= +github.com/fluxcd/image-reflector-controller/api v0.30.0/go.mod h1:hv57KwIzoPyy7Vu4PFcIf21eu0N3p/HbijygcuNgf8c= +github.com/fluxcd/kustomize-controller/api v1.1.0 h1:FrFdRdlPczXTolOMt/HsY6rf1tWEYBoF2uJOISx8fpg= +github.com/fluxcd/kustomize-controller/api v1.1.0/go.mod h1:FHJTX6c0+CznUNGMol5+Uc4lQsYRxWgpmIRK/xDCghA= +github.com/fluxcd/notification-controller/api v1.1.0 h1:qx5t5DmArfPLxG2bsYZXIqDXLnijUddlHeRfciALwQw= +github.com/fluxcd/notification-controller/api v1.1.0/go.mod h1:6MqWVQeI5yrYR7zp0GFqsfXitNPGJrnfOWxO2w3jylg= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= github.com/fluxcd/pkg/apis/event v0.5.1 h1:UrEmKwTK/lt42gMZunl8BQBMzjf8PSqGbWDs/GB839c= github.com/fluxcd/pkg/apis/event v0.5.1/go.mod h1:GzBAzS8bq7751wvNkaSnr3kuwFVuWTPL20D77UgSNJQ= github.com/fluxcd/pkg/apis/kustomize v1.1.1 h1:MSGn4z0R9PptmoPFHnx2nEZ8Jtl1sKfw0cuDQY2HYwM= github.com/fluxcd/pkg/apis/kustomize v1.1.1/go.mod h1:0pCu0ecIY+ZM0iE/hOHYwCMZ3b0SpBrjJ1SH3FFyYdE= -github.com/fluxcd/pkg/apis/meta v1.1.1 h1:sLAKLbEu7rRzJ+Mytffu3NcpfdbOBTa6hcpOQzFWm+M= -github.com/fluxcd/pkg/apis/meta v1.1.1/go.mod h1:soCfzjFWbm1mqybDcOywWKTCEYlH3skpoNGTboVk234= +github.com/fluxcd/pkg/apis/meta v1.1.2 h1:Unjo7hxadtB2dvGpeFqZZUdsjpRA08YYSBb7dF2WIAM= +github.com/fluxcd/pkg/apis/meta v1.1.2/go.mod h1:BHQyRHCskGMEDf6kDGbgQ+cyiNpUHbLsCOsaMYM2maI= github.com/fluxcd/pkg/git v0.12.3 h1:1KmRYTdcBKDUutg6NIT4x0BCCMT72PjjXs3AnHjybHY= github.com/fluxcd/pkg/git v0.12.3/go.mod h1:ID2sry5OqYbgJxvANc7s6V/YwafnQd7e1AGoDvwztAU= github.com/fluxcd/pkg/git/gogit v0.12.1 h1:06jzHOTntYN5xCSQvyFXtLXdqoP8crLh7VYgtXS9+wo= @@ -188,8 +188,8 @@ github.com/fluxcd/pkg/tar v0.2.0 h1:HEUHgONQYsJGeZZ4x6h5nQU9Aox1I4T3bOp1faWTqf8= github.com/fluxcd/pkg/tar v0.2.0/go.mod h1:w0/TOC7kwBJhnSJn7TCABkc/I7ib1f2Yz6vOsbLBnhw= github.com/fluxcd/pkg/version v0.2.2 h1:ZpVXECeLA5hIQMft11iLp6gN3cKcz6UNuVTQPw/bRdI= github.com/fluxcd/pkg/version v0.2.2/go.mod h1:NGnh/no8S6PyfCDxRFrPY3T5BUnqP48MxfxNRU0z8C0= -github.com/fluxcd/source-controller/api v1.0.1 h1:nycylbNBnQd+EO4UHpqXqAQJ1cGAPxgBbrfERCQ1pp8= -github.com/fluxcd/source-controller/api v1.0.1/go.mod h1:rAY5FRFGZUKpIFNyYANHIgPgJPvbALBHWsq/zHw/cXQ= +github.com/fluxcd/source-controller/api v1.1.0 h1:JPtt9WTTqVNdJfPpea8q7fUWF/00kDihxbhISzcb0WE= +github.com/fluxcd/source-controller/api v1.1.0/go.mod h1:ZLkaUd1KQIjtLPCvO63Ni5zpnSTVBAkeRgFBzMItbDQ= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= @@ -450,7 +450,7 @@ github.com/prometheus/procfs v0.10.1/go.mod h1:nwNm2aOCAYw8uTR/9bWRREkZFxAUcWzPH github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= +github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= @@ -698,18 +698,18 @@ gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= gotest.tools/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -k8s.io/api v0.27.3 h1:yR6oQXXnUEBWEWcvPWS0jQL575KoAboQPfJAuKNrw5Y= -k8s.io/api v0.27.3/go.mod h1:C4BNvZnQOF7JA/0Xed2S+aUyJSfTGkGFxLXz9MnpIpg= -k8s.io/apiextensions-apiserver v0.27.3 h1:xAwC1iYabi+TDfpRhxh4Eapl14Hs2OftM2DN5MpgKX4= -k8s.io/apiextensions-apiserver v0.27.3/go.mod h1:BH3wJ5NsB9XE1w+R6SSVpKmYNyIiyIz9xAmBl8Mb+84= -k8s.io/apimachinery v0.27.3 h1:Ubye8oBufD04l9QnNtW05idcOe9Z3GQN8+7PqmuVcUM= -k8s.io/apimachinery v0.27.3/go.mod h1:XNfZ6xklnMCOGGFNqXG7bUrQCoR04dh/E7FprV6pb+E= +k8s.io/api v0.27.4 h1:0pCo/AN9hONazBKlNUdhQymmnfLRbSZjd5H5H3f0bSs= +k8s.io/api v0.27.4/go.mod h1:O3smaaX15NfxjzILfiln1D8Z3+gEYpjEpiNA/1EVK1Y= +k8s.io/apiextensions-apiserver v0.27.4 h1:ie1yZG4nY/wvFMIR2hXBeSVq+HfNzib60FjnBYtPGSs= +k8s.io/apiextensions-apiserver v0.27.4/go.mod h1:KHZaDr5H9IbGEnSskEUp/DsdXe1hMQ7uzpQcYUFt2bM= +k8s.io/apimachinery v0.27.4 h1:CdxflD4AF61yewuid0fLl6bM4a3q04jWel0IlP+aYjs= +k8s.io/apimachinery v0.27.4/go.mod h1:XNfZ6xklnMCOGGFNqXG7bUrQCoR04dh/E7FprV6pb+E= k8s.io/cli-runtime v0.27.3 h1:h592I+2eJfXj/4jVYM+tu9Rv8FEc/dyCoD80UJlMW2Y= k8s.io/cli-runtime v0.27.3/go.mod h1:LzXud3vFFuDFXn2LIrWnscPgUiEj7gQQcYZE2UPn9Kw= -k8s.io/client-go v0.27.3 h1:7dnEGHZEJld3lYwxvLl7WoehK6lAq7GvgjxpA3nv1E8= -k8s.io/client-go v0.27.3/go.mod h1:2MBEKuTo6V1lbKy3z1euEGnhPfGZLKTS9tiJ2xodM48= -k8s.io/component-base v0.27.3 h1:g078YmdcdTfrCE4fFobt7qmVXwS8J/3cI1XxRi/2+6k= -k8s.io/component-base v0.27.3/go.mod h1:JNiKYcGImpQ44iwSYs6dysxzR9SxIIgQalk4HaCNVUY= +k8s.io/client-go v0.27.4 h1:vj2YTtSJ6J4KxaC88P4pMPEQECWMY8gqPqsTgUKzvjk= +k8s.io/client-go v0.27.4/go.mod h1:ragcly7lUlN0SRPk5/ZkGnDjPknzb37TICq07WhI6Xc= +k8s.io/component-base v0.27.4 h1:Wqc0jMKEDGjKXdae8hBXeskRP//vu1m6ypC+gwErj4c= +k8s.io/component-base v0.27.4/go.mod h1:hoiEETnLc0ioLv6WPeDt8vD34DDeB35MfQnxCARq3kY= k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg= k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f h1:2kWPakN3i/k81b0gvD5C5FJ2kxm1WrQFanWchyKuqGg= @@ -720,8 +720,8 @@ k8s.io/utils v0.0.0-20230505201702-9f6742963106 h1:EObNQ3TW2D+WptiYXlApGNLVy0zm/ k8s.io/utils v0.0.0-20230505201702-9f6742963106/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= sigs.k8s.io/cli-utils v0.34.0 h1:zCUitt54f0/MYj/ajVFnG6XSXMhpZ72O/3RewIchW8w= sigs.k8s.io/cli-utils v0.34.0/go.mod h1:EXyMwPMu9OL+LRnj0JEMsGG/fRvbgFadcVlSnE8RhFs= -sigs.k8s.io/controller-runtime v0.15.0 h1:ML+5Adt3qZnMSYxZ7gAverBLNPSMQEibtzAgp0UPojU= -sigs.k8s.io/controller-runtime v0.15.0/go.mod h1:7ngYvp1MLT+9GeZ+6lH3LOlcHkp/+tzA/fmHa4iq9kk= +sigs.k8s.io/controller-runtime v0.15.1 h1:9UvgKD4ZJGcj24vefUFgZFP3xej/3igL9BsOUTb/+4c= +sigs.k8s.io/controller-runtime v0.15.1/go.mod h1:7ngYvp1MLT+9GeZ+6lH3LOlcHkp/+tzA/fmHa4iq9kk= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= sigs.k8s.io/kustomize/api v0.13.4 h1:E38Hfx0G9R9v7vRgKshviPotJQETG0S2gD3JdHLCAsI= diff --git a/manifests/bases/helm-controller/kustomization.yaml b/manifests/bases/helm-controller/kustomization.yaml index 817f9c7d..099d7204 100644 --- a/manifests/bases/helm-controller/kustomization.yaml +++ b/manifests/bases/helm-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/helm-controller/releases/download/v0.35.0/helm-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.35.0/helm-controller.deployment.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.36.0/helm-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.36.0/helm-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/image-automation-controller/kustomization.yaml b/manifests/bases/image-automation-controller/kustomization.yaml index 350faa16..0e4a3ed8 100644 --- a/manifests/bases/image-automation-controller/kustomization.yaml +++ b/manifests/bases/image-automation-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.35.0/image-automation-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.35.0/image-automation-controller.deployment.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.36.0/image-automation-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.36.0/image-automation-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/image-reflector-controller/kustomization.yaml b/manifests/bases/image-reflector-controller/kustomization.yaml index e13f3f02..e1a30b53 100644 --- a/manifests/bases/image-reflector-controller/kustomization.yaml +++ b/manifests/bases/image-reflector-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.29.1/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.29.1/image-reflector-controller.deployment.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.30.0/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.30.0/image-reflector-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/kustomize-controller/kustomization.yaml b/manifests/bases/kustomize-controller/kustomization.yaml index 1ae7b51f..d831b6bd 100644 --- a/manifests/bases/kustomize-controller/kustomization.yaml +++ b/manifests/bases/kustomize-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/kustomize-controller/releases/download/v1.0.1/kustomize-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v1.0.1/kustomize-controller.deployment.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v1.1.0/kustomize-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v1.1.0/kustomize-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/notification-controller/kustomization.yaml b/manifests/bases/notification-controller/kustomization.yaml index 582c5c5e..262acc6b 100644 --- a/manifests/bases/notification-controller/kustomization.yaml +++ b/manifests/bases/notification-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/notification-controller/releases/download/v1.0.0/notification-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v1.0.0/notification-controller.deployment.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v1.1.0/notification-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v1.1.0/notification-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index 3b8d6ec3..e71a6682 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v1.0.1/source-controller.crds.yaml -- https://github.com/fluxcd/source-controller/releases/download/v1.0.1/source-controller.deployment.yaml +- https://github.com/fluxcd/source-controller/releases/download/v1.1.0/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v1.1.0/source-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index 833252a6..01e95e4c 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -1,9 +1,9 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v1.0.1/source-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v1.0.1/kustomize-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.35.0/helm-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v1.0.0/notification-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.29.1/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.35.0/image-automation-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v1.1.0/source-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v1.1.0/kustomize-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.36.0/helm-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v1.1.0/notification-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.30.0/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.36.0/image-automation-controller.crds.yaml From 7c2072eed10c4e6a8f98cf8453e30698f24cf9ef Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Thu, 24 Aug 2023 10:52:46 +0200 Subject: [PATCH 620/818] Update dependencies - github.com/ProtonMail/go-crypto to v0.0.0-20230717121422-5aa5874ade95 - github.com/distribution/distribution/v3 to v3.0.0-20230823142118-4f7424c8eb41 - github.com/fluxcd/pkg/apis/event to v0.5.2 - github.com/fluxcd/pkg/git to v0.13.0 - github.com/fluxcd/pkg/git/gogit to v0.13.0 - github.com/fluxcd/pkg/oci to v0.31.0 - github.com/fluxcd/pkg/runtime to v0.42.0 - github.com/fluxcd/pkg/sourceignore to v0.3.5 - github.com/fluxcd/pkg/ssa to v0.32.0 - github.com/fluxcd/pkg/ssh to v0.8.2 - github.com/go-git/go-git/v5 to v5.8.1 - github.com/google/go-containerregistry to v0.16.1 - github.com/onsi/gomega to v1.27.10 - golang.org/x/crypto to v0.12.0 - golang.org/x/term to v0.11.0 - k8s.io/cli-runtime to v0.27.4 - k8s.io/kubectl to v0.27.4 - sigs.k8s.io/cli-utils to v0.35.0 Signed-off-by: Hidde Beydals --- go.mod | 106 ++++++++++++++--------------- go.sum | 205 +++++++++++++++++++++++++++------------------------------ 2 files changed, 145 insertions(+), 166 deletions(-) diff --git a/go.mod b/go.mod index 45f96b47..b14bffba 100644 --- a/go.mod +++ b/go.mod @@ -2,100 +2,94 @@ module github.com/fluxcd/flux2/v2 go 1.20 -// Replace go-git to unreleased v5.8.0 to improve support for Git v2.41+. -replace github.com/go-git/go-git/v5 => github.com/go-git/go-git/v5 v5.7.1-0.20230702134234-dd4e2b7f4b01 - // Replace for Go 1.20+ Windows compatibility. replace github.com/cyphar/filepath-securejoin => github.com/pjbgf/filepath-securejoin v0.0.0-20230821001828-0ca74e6d4bf8 +// Fix CVE-2022-28948. +replace gopkg.in/yaml.v3 => gopkg.in/yaml.v3 v3.0.1 + require ( github.com/Masterminds/semver/v3 v3.2.1 - github.com/ProtonMail/go-crypto v0.0.0-20230710112148-e01326fd72eb + github.com/ProtonMail/go-crypto v0.0.0-20230717121422-5aa5874ade95 github.com/cyphar/filepath-securejoin v0.2.3 - github.com/distribution/distribution/v3 v3.0.0-20230711080520-40ef2353fa4f + github.com/distribution/distribution/v3 v3.0.0-20230823142118-4f7424c8eb41 github.com/fluxcd/go-git-providers v0.18.0 github.com/fluxcd/helm-controller/api v0.36.0 github.com/fluxcd/image-automation-controller/api v0.36.0 github.com/fluxcd/image-reflector-controller/api v0.30.0 github.com/fluxcd/kustomize-controller/api v1.1.0 github.com/fluxcd/notification-controller/api v1.1.0 - github.com/fluxcd/pkg/apis/event v0.5.1 + github.com/fluxcd/pkg/apis/event v0.5.2 github.com/fluxcd/pkg/apis/meta v1.1.2 - github.com/fluxcd/pkg/git v0.12.3 - github.com/fluxcd/pkg/git/gogit v0.12.1 + github.com/fluxcd/pkg/git v0.13.0 + github.com/fluxcd/pkg/git/gogit v0.13.0 github.com/fluxcd/pkg/kustomize v1.3.4 - github.com/fluxcd/pkg/oci v0.29.0 - github.com/fluxcd/pkg/runtime v0.40.0 - github.com/fluxcd/pkg/sourceignore v0.3.4 - github.com/fluxcd/pkg/ssa v0.28.2 - github.com/fluxcd/pkg/ssh v0.8.0 + github.com/fluxcd/pkg/oci v0.31.0 + github.com/fluxcd/pkg/runtime v0.42.0 + github.com/fluxcd/pkg/sourceignore v0.3.5 + github.com/fluxcd/pkg/ssa v0.32.0 + github.com/fluxcd/pkg/ssh v0.8.2 github.com/fluxcd/pkg/tar v0.2.0 github.com/fluxcd/pkg/version v0.2.2 github.com/fluxcd/source-controller/api v1.1.0 - github.com/go-git/go-git/v5 v5.7.0 + github.com/go-git/go-git/v5 v5.8.1 github.com/go-logr/logr v1.2.4 github.com/gonvenience/bunt v1.3.5 github.com/gonvenience/ytbx v1.4.4 github.com/google/go-cmp v0.5.9 - github.com/google/go-containerregistry v0.15.2 + github.com/google/go-containerregistry v0.16.1 github.com/hashicorp/go-cleanhttp v0.5.2 github.com/homeport/dyff v1.5.8 github.com/lucasb-eyer/go-colorful v1.2.0 github.com/manifoldco/promptui v0.9.0 github.com/mattn/go-shellwords v1.0.12 github.com/olekukonko/tablewriter v0.0.5 - github.com/onsi/gomega v1.27.8 + github.com/onsi/gomega v1.27.10 github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 github.com/spf13/cobra v1.7.0 github.com/spf13/pflag v1.0.5 github.com/theckman/yacspin v0.13.12 - golang.org/x/crypto v0.11.0 - golang.org/x/term v0.10.0 + golang.org/x/crypto v0.12.0 + golang.org/x/term v0.11.0 k8s.io/api v0.27.4 k8s.io/apiextensions-apiserver v0.27.4 k8s.io/apimachinery v0.27.4 - k8s.io/cli-runtime v0.27.3 + k8s.io/cli-runtime v0.27.4 k8s.io/client-go v0.27.4 - k8s.io/kubectl v0.27.3 - sigs.k8s.io/cli-utils v0.34.0 + k8s.io/kubectl v0.27.4 + sigs.k8s.io/cli-utils v0.35.0 sigs.k8s.io/controller-runtime v0.15.1 sigs.k8s.io/kustomize/api v0.13.4 sigs.k8s.io/kustomize/kyaml v0.14.2 sigs.k8s.io/yaml v1.3.0 ) -// Fix CVE-2022-28948 -replace gopkg.in/yaml.v3 => gopkg.in/yaml.v3 v3.0.1 - require ( - github.com/Azure/azure-sdk-for-go/sdk/azcore v1.6.1 // indirect - github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0 // indirect + dario.cat/mergo v1.0.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.1 // indirect + github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.1 // indirect github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0 // indirect github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect - github.com/AzureAD/microsoft-authentication-library-for-go v1.0.0 // indirect + github.com/AzureAD/microsoft-authentication-library-for-go v1.1.1 // indirect github.com/BurntSushi/toml v1.3.2 // indirect github.com/MakeNowJust/heredoc v1.0.0 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect - github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d // indirect github.com/acomagu/bufpipe v1.0.4 // indirect - github.com/aws/aws-sdk-go-v2 v1.18.1 // indirect - github.com/aws/aws-sdk-go-v2/config v1.18.27 // indirect - github.com/aws/aws-sdk-go-v2/credentials v1.13.26 // indirect - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.4 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.34 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.28 // indirect - github.com/aws/aws-sdk-go-v2/internal/ini v1.3.35 // indirect - github.com/aws/aws-sdk-go-v2/service/ecr v1.18.13 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.28 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.12.12 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.12 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.19.2 // indirect - github.com/aws/smithy-go v1.13.5 // indirect + github.com/aws/aws-sdk-go-v2 v1.21.0 // indirect + github.com/aws/aws-sdk-go-v2/config v1.18.36 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.13.35 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.11 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.41 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.35 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.3.42 // indirect + github.com/aws/aws-sdk-go-v2/service/ecr v1.19.5 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.35 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.13.5 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.15.5 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.21.5 // indirect + github.com/aws/smithy-go v1.14.2 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bshuster-repo/logrus-logstash-hook v1.0.0 // indirect - github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd // indirect - github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b // indirect - github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/chai2010/gettext-go v1.0.2 // indirect github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e // indirect @@ -103,9 +97,9 @@ require ( github.com/containerd/stargz-snapshotter/estargz v0.14.3 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect - github.com/docker/cli v23.0.5+incompatible // indirect + github.com/docker/cli v24.0.0+incompatible // indirect github.com/docker/distribution v2.8.2+incompatible // indirect - github.com/docker/docker v23.0.5+incompatible // indirect + github.com/docker/docker v24.0.0+incompatible // indirect github.com/docker/docker-credential-helpers v0.7.0 // indirect github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c // indirect github.com/docker/go-metrics v0.0.1 // indirect @@ -128,7 +122,7 @@ require ( github.com/go-openapi/jsonreference v0.20.1 // indirect github.com/go-openapi/swag v0.22.3 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang-jwt/jwt/v4 v4.5.0 // indirect + github.com/golang-jwt/jwt/v5 v5.0.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.3 // indirect github.com/gomodule/redigo v1.8.2 // indirect @@ -149,7 +143,8 @@ require ( github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/go-retryablehttp v0.7.4 // indirect - github.com/hashicorp/golang-lru v0.5.4 // indirect + github.com/hashicorp/golang-lru/arc/v2 v2.0.5 // indirect + github.com/hashicorp/golang-lru/v2 v2.0.5 // indirect github.com/imdario/mergo v0.3.15 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect @@ -190,23 +185,20 @@ require ( github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/sergi/go-diff v1.3.1 // indirect github.com/sirupsen/logrus v1.9.3 // indirect - github.com/skeema/knownhosts v1.1.1 // indirect + github.com/skeema/knownhosts v1.2.0 // indirect github.com/texttheater/golang-levenshtein v1.0.1 // indirect github.com/vbatts/tar-split v0.11.3 // indirect github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74 // indirect github.com/xanzy/go-gitlab v0.83.0 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect github.com/xlab/treeprint v1.1.0 // indirect - github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43 // indirect - github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50 // indirect - github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f // indirect go.starlark.net v0.0.0-20221028183056-acb66ad56dd2 // indirect golang.org/x/mod v0.11.0 // indirect - golang.org/x/net v0.11.0 // indirect - golang.org/x/oauth2 v0.7.0 // indirect + golang.org/x/net v0.14.0 // indirect + golang.org/x/oauth2 v0.8.0 // indirect golang.org/x/sync v0.3.0 // indirect - golang.org/x/sys v0.10.0 // indirect - golang.org/x/text v0.11.0 // indirect + golang.org/x/sys v0.11.0 // indirect + golang.org/x/text v0.12.0 // indirect golang.org/x/time v0.3.0 // indirect golang.org/x/tools v0.10.0 // indirect gomodules.xyz/jsonpatch/v2 v2.3.0 // indirect @@ -221,5 +213,5 @@ require ( k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f // indirect k8s.io/utils v0.0.0-20230505201702-9f6742963106 // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect - sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect + sigs.k8s.io/structured-merge-diff/v4 v4.3.0 // indirect ) diff --git a/go.sum b/go.sum index 398956df..86adc693 100644 --- a/go.sum +++ b/go.sum @@ -1,16 +1,18 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= +dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= github.com/AdaLogics/go-fuzz-headers v0.0.0-20230106234847-43070de90fa1 h1:EKPd1INOIyr5hWOWhvpmQpY6tKjeG0hT1s3AMC/9fic= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.6.1 h1:SEy2xmstIphdPwNBUi7uhvjyjhVKISfwjfOJmuy7kg4= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.6.1/go.mod h1:bjGvMhVMb+EEm3VRNQawDMUyMMjo+S5ewNjflkep/0Q= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0 h1:vcYCAze6p19qBW7MhZybIsqD8sMV8js0NyQM8JDnVtg= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0/go.mod h1:OQeznEEkTZ9OrhHJoDD8ZDq51FHgXjqtP9z6bEwBq9U= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.1 h1:/iHxaJhsFr0+xVFfbMr5vxz848jyiWuIEDhYq3y5odY= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.1/go.mod h1:bjGvMhVMb+EEm3VRNQawDMUyMMjo+S5ewNjflkep/0Q= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.1 h1:LNHhpdK7hzUcx/k1LIcuh5k7k1LGIWLQfCjaneSj7Fc= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.1/go.mod h1:uE9zaUfEQT/nbQjVi2IblCG9iaLtZsuYZ8ne+PuQ02M= github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0 h1:sXr+ck84g/ZlZUOZiNELInmMgOsuGwdjjVkEIde0OtY= github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0/go.mod h1:okt5dMMTOFjX/aovMlrjvvXoPMBVSPzk9185BT0+eZM= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= -github.com/AzureAD/microsoft-authentication-library-for-go v1.0.0 h1:OBhqkivkhkMqLPymWEppkm7vgPQY2XsHoEkaMQ0AdZY= -github.com/AzureAD/microsoft-authentication-library-for-go v1.0.0/go.mod h1:kgDmCTgBzIEPFElEF+FK0SdjAor06dRq2Go927dnQ6o= +github.com/AzureAD/microsoft-authentication-library-for-go v1.1.1 h1:WpB/QDNLpMw72xHJc34BNNykqSOeEJDAWkhf0u12/Jk= +github.com/AzureAD/microsoft-authentication-library-for-go v1.1.1/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8= @@ -23,10 +25,8 @@ github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/ProtonMail/go-crypto v0.0.0-20230710112148-e01326fd72eb h1:RU+Ff2vE68zFQSoBqlb/LChFztEWWJ9EZ8LU4gA3ubU= -github.com/ProtonMail/go-crypto v0.0.0-20230710112148-e01326fd72eb/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= -github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d h1:UrqY+r/OJnIp5u0s1SbQ8dVfLCZJsnvazdBP5hS4iRs= -github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ= +github.com/ProtonMail/go-crypto v0.0.0-20230717121422-5aa5874ade95 h1:KLq8BE0KwCL+mmXnjLWEAOYO+2l2AE4YMmqG1ZpZHBs= +github.com/ProtonMail/go-crypto v0.0.0-20230717121422-5aa5874ade95/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= github.com/acomagu/bufpipe v1.0.4 h1:e3H4WUzM3npvo5uv95QuJM3cQspFNtFBzvJ2oNjKIDQ= github.com/acomagu/bufpipe v1.0.4/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -34,47 +34,40 @@ github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRF github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= -github.com/aws/aws-sdk-go-v2 v1.18.1 h1:+tefE750oAb7ZQGzla6bLkOwfcQCEtC5y2RqoqCeqKo= -github.com/aws/aws-sdk-go-v2 v1.18.1/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw= -github.com/aws/aws-sdk-go-v2/config v1.18.27 h1:Az9uLwmssTE6OGTpsFqOnaGpLnKDqNYOJzWuC6UAYzA= -github.com/aws/aws-sdk-go-v2/config v1.18.27/go.mod h1:0My+YgmkGxeqjXZb5BYme5pc4drjTnM+x1GJ3zv42Nw= -github.com/aws/aws-sdk-go-v2/credentials v1.13.26 h1:qmU+yhKmOCyujmuPY7tf5MxR/RKyZrOPO3V4DobiTUk= -github.com/aws/aws-sdk-go-v2/credentials v1.13.26/go.mod h1:GoXt2YC8jHUBbA4jr+W3JiemnIbkXOfxSXcisUsZ3os= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.4 h1:LxK/bitrAr4lnh9LnIS6i7zWbCOdMsfzKFBI6LUCS0I= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.4/go.mod h1:E1hLXN/BL2e6YizK1zFlYd8vsfi2GTjbjBazinMmeaM= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.34 h1:A5UqQEmPaCFpedKouS4v+dHCTUo2sKqhoKO9U5kxyWo= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.34/go.mod h1:wZpTEecJe0Btj3IYnDx/VlUzor9wm3fJHyvLpQF0VwY= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.28 h1:srIVS45eQuewqz6fKKu6ZGXaq6FuFg5NzgQBAM6g8Y4= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.28/go.mod h1:7VRpKQQedkfIEXb4k52I7swUnZP0wohVajJMRn3vsUw= -github.com/aws/aws-sdk-go-v2/internal/ini v1.3.35 h1:LWA+3kDM8ly001vJ1X1waCuLJdtTl48gwkPKWy9sosI= -github.com/aws/aws-sdk-go-v2/internal/ini v1.3.35/go.mod h1:0Eg1YjxE0Bhn56lx+SHJwCzhW+2JGtizsrx+lCqrfm0= -github.com/aws/aws-sdk-go-v2/service/ecr v1.18.13 h1:hF7MUVNjubetjggZDtn3AmqCJzD7EUi//tSdxMYPm7U= -github.com/aws/aws-sdk-go-v2/service/ecr v1.18.13/go.mod h1:XwEFO35g0uN/SftK0asWxh8Rk6DOx37R83TmWe2tzEE= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.28 h1:bkRyG4a929RCnpVSTvLM2j/T4ls015ZhhYApbmYs15s= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.28/go.mod h1:jj7znCIg05jXlaGBlFMGP8+7UN3VtCkRBG2spnmRQkU= -github.com/aws/aws-sdk-go-v2/service/sso v1.12.12 h1:nneMBM2p79PGWBQovYO/6Xnc2ryRMw3InnDJq1FHkSY= -github.com/aws/aws-sdk-go-v2/service/sso v1.12.12/go.mod h1:HuCOxYsF21eKrerARYO6HapNeh9GBNq7fius2AcwodY= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.12 h1:2qTR7IFk7/0IN/adSFhYu9Xthr0zVFTgBrmPldILn80= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.12/go.mod h1:E4VrHCPzmVB/KFXtqBGKb3c8zpbNBgKe3fisDNLAW5w= -github.com/aws/aws-sdk-go-v2/service/sts v1.19.2 h1:XFJ2Z6sNUUcAz9poj+245DMkrHE4h2j5I9/xD50RHfE= -github.com/aws/aws-sdk-go-v2/service/sts v1.19.2/go.mod h1:dp0yLPsLBOi++WTxzCjA/oZqi6NPIhoR+uF7GeMU9eg= -github.com/aws/smithy-go v1.13.5 h1:hgz0X/DX0dGqTYpGALqXJoRKRj5oQ7150i5FdTePzO8= -github.com/aws/smithy-go v1.13.5/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= +github.com/aws/aws-sdk-go-v2 v1.21.0 h1:gMT0IW+03wtYJhRqTVYn0wLzwdnK9sRMcxmtfGzRdJc= +github.com/aws/aws-sdk-go-v2 v1.21.0/go.mod h1:/RfNgGmRxI+iFOB1OeJUyxiU+9s88k3pfHvDagGEp0M= +github.com/aws/aws-sdk-go-v2/config v1.18.36 h1:mLNA12PWU1Y+ueOO79QgQfKIPhc1MYKl44RmvASkJ7Q= +github.com/aws/aws-sdk-go-v2/config v1.18.36/go.mod h1:8AnEFxW9/XGKCbjYDCJy7iltVNyEI9Iu9qC21UzhhgQ= +github.com/aws/aws-sdk-go-v2/credentials v1.13.35 h1:QpsNitYJu0GgvMBLUIYu9H4yryA5kMksjeIVQfgXrt8= +github.com/aws/aws-sdk-go-v2/credentials v1.13.35/go.mod h1:o7rCaLtvK0hUggAGclf76mNGGkaG5a9KWlp+d9IpcV8= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.11 h1:uDZJF1hu0EVT/4bogChk8DyjSF6fof6uL/0Y26Ma7Fg= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.11/go.mod h1:TEPP4tENqBGO99KwVpV9MlOX4NSrSLP8u3KRy2CDwA8= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.41 h1:22dGT7PneFMx4+b3pz7lMTRyN8ZKH7M2cW4GP9yUS2g= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.41/go.mod h1:CrObHAuPneJBlfEJ5T3szXOUkLEThaGfvnhTf33buas= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.35 h1:SijA0mgjV8E+8G45ltVHs0fvKpTj8xmZJ3VwhGKtUSI= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.35/go.mod h1:SJC1nEVVva1g3pHAIdCp7QsRIkMmLAgoDquQ9Rr8kYw= +github.com/aws/aws-sdk-go-v2/internal/ini v1.3.42 h1:GPUcE/Yq7Ur8YSUk6lVkoIMWnJNO0HT18GUzCWCgCI0= +github.com/aws/aws-sdk-go-v2/internal/ini v1.3.42/go.mod h1:rzfdUlfA+jdgLDmPKjd3Chq9V7LVLYo1Nz++Wb91aRo= +github.com/aws/aws-sdk-go-v2/service/ecr v1.19.5 h1:hg2/a7rE9dwYr+/DPNzHQ+IsHXLNt1NsQVUecBtA8os= +github.com/aws/aws-sdk-go-v2/service/ecr v1.19.5/go.mod h1:pGwmNL8hN0jpBfKfTbmu+Rl0bJkDhaGl+9PQLrZ4KLo= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.35 h1:CdzPW9kKitgIiLV1+MHobfR5Xg25iYnyzWZhyQuSlDI= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.35/go.mod h1:QGF2Rs33W5MaN9gYdEQOBBFPLwTZkEhRwI33f7KIG0o= +github.com/aws/aws-sdk-go-v2/service/sso v1.13.5 h1:oCvTFSDi67AX0pOX3PuPdGFewvLRU2zzFSrTsgURNo0= +github.com/aws/aws-sdk-go-v2/service/sso v1.13.5/go.mod h1:fIAwKQKBFu90pBxx07BFOMJLpRUGu8VOzLJakeY+0K4= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.15.5 h1:dnInJb4S0oy8aQuri1mV6ipLlnZPfnsDNB9BGO9PDNY= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.15.5/go.mod h1:yygr8ACQRY2PrEcy3xsUI357stq2AxnFM6DIsR9lij4= +github.com/aws/aws-sdk-go-v2/service/sts v1.21.5 h1:CQBFElb0LS8RojMJlxRSo/HXipvTZW2S44Lt9Mk2aYQ= +github.com/aws/aws-sdk-go-v2/service/sts v1.21.5/go.mod h1:VC7JDqsqiwXukYEDjoHh9U0fOJtNWh04FPQz4ct4GGU= +github.com/aws/smithy-go v1.14.2 h1:MJU9hqBGbvWZdApzpvoF2WAIJDbtjK2NDJSiJP7HblQ= +github.com/aws/smithy-go v1.14.2/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bitly/go-simplejson v0.5.0 h1:6IH+V8/tVMab511d5bn4M7EwGXZf9Hj6i2xSwkNEM+Y= github.com/bshuster-repo/logrus-logstash-hook v1.0.0 h1:e+C0SB5R1pu//O4MQ3f9cFuPGoOVeF2fE4Og9otCc70= github.com/bshuster-repo/logrus-logstash-hook v1.0.0/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk= github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= -github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd h1:rFt+Y/IK1aEZkEHchZRSq9OQbsSzIT/OrI8YFFmRIng= -github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8= -github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b h1:otBG+dV+YK+Soembjv71DPz3uX/V/6MMlSyD9JBQ6kQ= -github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b/go.mod h1:obH5gd0BsqsP2LwDJ9aOkm/6J86V6lyAXCoQWGw3K50= -github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0 h1:nvj0OLI3YqYXer/kZD8Ri1aaunCxIEsOst1BVJswV0o= -github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE= github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= @@ -103,15 +96,15 @@ github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/distribution/distribution/v3 v3.0.0-20230711080520-40ef2353fa4f h1:Df8k7piYnfycy7zSBLkN2oQaoIz1vw+msSgajUA+yKE= -github.com/distribution/distribution/v3 v3.0.0-20230711080520-40ef2353fa4f/go.mod h1:+fqBJ4vPYo4Uu1ZE4d+bUtTLRXfdSL3NvCZIZ9GHv58= +github.com/distribution/distribution/v3 v3.0.0-20230823142118-4f7424c8eb41 h1:vlGNYFw1NB27Gk5tIwJpiog1Ti6FKOUI+DoFZKoCDZo= +github.com/distribution/distribution/v3 v3.0.0-20230823142118-4f7424c8eb41/go.mod h1:WREzLx07iIFUGvbm6tBoqGt40zOC3whiM1qkcWOMFrs= github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI= -github.com/docker/cli v23.0.5+incompatible h1:ufWmAOuD3Vmr7JP2G5K3cyuNC4YZWiAsuDEvFVVDafE= -github.com/docker/cli v23.0.5+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/cli v24.0.0+incompatible h1:0+1VshNwBQzQAx9lOl+OYCTCEAD8fKs/qeXMx3O0wqM= +github.com/docker/cli v24.0.0+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v23.0.5+incompatible h1:DaxtlTJjFSnLOXVNUBU1+6kXGz2lpDoEAH6QoxaSg8k= -github.com/docker/docker v23.0.5+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v24.0.0+incompatible h1:z4bf8HvONXX9Tde5lGBMQ7yCJgNahmJumdrStZAbeY4= +github.com/docker/docker v24.0.0+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker-credential-helpers v0.7.0 h1:xtCHsjxogADNZcdv1pKUHXryefjlVRqWqIhk/uXJp0A= github.com/docker/docker-credential-helpers v0.7.0/go.mod h1:rETQfLdHNT3foU5kuNkFR1R1V12OJRRO5lzt2D1b5X0= github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c h1:+pKlWGMw7gf6bQ+oDZB4KHQFypsfjYlq/C4rfL7D3g8= @@ -123,7 +116,7 @@ github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNE github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/drone/envsubst v1.0.3 h1:PCIBwNDYjs50AsLZPYdfhSATKaRg/FJmDc2D6+C2x8g= github.com/drone/envsubst v1.0.3/go.mod h1:N2jZmlMufstn1KEqvbHjw40h1KyTmnVzHcSc9bFiJ2g= -github.com/elazarl/goproxy v0.0.0-20221015165544-a0805db90819 h1:RIB4cRk+lBqKK3Oy0r2gRX4ui7tuhiZq2SuTtTCi0/0= +github.com/elazarl/goproxy v0.0.0-20230731152917-f99041a5c027 h1:1L0aalTpPz7YlMxETKpmQoWMBkeiuorElZIXoNmgiPE= github.com/emicklei/go-restful/v3 v3.10.0 h1:X4gma4HM7hFm6WMeAsTfqA0GOfdNoCzBIkHGoRLGXuM= github.com/emicklei/go-restful/v3 v3.10.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= @@ -161,29 +154,29 @@ github.com/fluxcd/notification-controller/api v1.1.0 h1:qx5t5DmArfPLxG2bsYZXIqDX github.com/fluxcd/notification-controller/api v1.1.0/go.mod h1:6MqWVQeI5yrYR7zp0GFqsfXitNPGJrnfOWxO2w3jylg= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= -github.com/fluxcd/pkg/apis/event v0.5.1 h1:UrEmKwTK/lt42gMZunl8BQBMzjf8PSqGbWDs/GB839c= -github.com/fluxcd/pkg/apis/event v0.5.1/go.mod h1:GzBAzS8bq7751wvNkaSnr3kuwFVuWTPL20D77UgSNJQ= +github.com/fluxcd/pkg/apis/event v0.5.2 h1:WtnCOeWglf7wR3dpyiWxb1JtYkw1G5OXcERb1QopFpA= +github.com/fluxcd/pkg/apis/event v0.5.2/go.mod h1:5l6SSxVTkqrXrYjgEqAajOOHkl4x0TPocAuSdu+3AEs= github.com/fluxcd/pkg/apis/kustomize v1.1.1 h1:MSGn4z0R9PptmoPFHnx2nEZ8Jtl1sKfw0cuDQY2HYwM= github.com/fluxcd/pkg/apis/kustomize v1.1.1/go.mod h1:0pCu0ecIY+ZM0iE/hOHYwCMZ3b0SpBrjJ1SH3FFyYdE= github.com/fluxcd/pkg/apis/meta v1.1.2 h1:Unjo7hxadtB2dvGpeFqZZUdsjpRA08YYSBb7dF2WIAM= github.com/fluxcd/pkg/apis/meta v1.1.2/go.mod h1:BHQyRHCskGMEDf6kDGbgQ+cyiNpUHbLsCOsaMYM2maI= -github.com/fluxcd/pkg/git v0.12.3 h1:1KmRYTdcBKDUutg6NIT4x0BCCMT72PjjXs3AnHjybHY= -github.com/fluxcd/pkg/git v0.12.3/go.mod h1:ID2sry5OqYbgJxvANc7s6V/YwafnQd7e1AGoDvwztAU= -github.com/fluxcd/pkg/git/gogit v0.12.1 h1:06jzHOTntYN5xCSQvyFXtLXdqoP8crLh7VYgtXS9+wo= -github.com/fluxcd/pkg/git/gogit v0.12.1/go.mod h1:Z4Ysp8VifKTvWpjJMKncJsgb2iBqHuIeK80VGjlU41Y= -github.com/fluxcd/pkg/gittestserver v0.8.4 h1:rA/QUZnfH77ZZG+5xfMqjgEHJdzeeE6Nn1o8cops/bU= +github.com/fluxcd/pkg/git v0.13.0 h1:GcJfldYqw6ELf0vbTCV+iFZgSpK6HZBKx3yAvn1Dqfg= +github.com/fluxcd/pkg/git v0.13.0/go.mod h1:rKB1puk7sbC4AYF1oZDBrkvu3cr0aibkd4I5yNbxSQg= +github.com/fluxcd/pkg/git/gogit v0.13.0 h1:XCwfiB5qbz08djUgo0TII09zibH97Hn56v098pkFpns= +github.com/fluxcd/pkg/git/gogit v0.13.0/go.mod h1:V3g+UyIDSAOysg5KCpHhS+HXBUmNmmbNlVruWkpCJgY= +github.com/fluxcd/pkg/gittestserver v0.8.6 h1:YM8prVKB3LC9LBBe+a2p7l1BlfV9erXCgC1em9sbqW4= github.com/fluxcd/pkg/kustomize v1.3.4 h1:+XA4umfhkFqrNYQp3ZmKSJy4i3LWjbgoi6H4PllkkkA= github.com/fluxcd/pkg/kustomize v1.3.4/go.mod h1:nsbsNGe6nQY6DGYYPowFGQlhxFRcaRFvbwqhCbwAQuE= -github.com/fluxcd/pkg/oci v0.29.0 h1:LACJNooDB4ZWVqRkB+V5MSPE04327DBbI/8BdWFzP8Y= -github.com/fluxcd/pkg/oci v0.29.0/go.mod h1:x91ESIQjUimZSElpJTVRx3yPFBmimvulni9iBsCwXlw= -github.com/fluxcd/pkg/runtime v0.40.0 h1:uGiiEbMZwd7xmbKaVmcH7iilCFW9betWbz0r1taK3G0= -github.com/fluxcd/pkg/runtime v0.40.0/go.mod h1:BqHEOVrZmt19p0q1OlGFWAYh3rZ28+IBpxLB2yPjjQ4= -github.com/fluxcd/pkg/sourceignore v0.3.4 h1:0cfS2Pj7xp2qpaerMjYqOBr82LC+/mGHl6v6pRbi5hs= -github.com/fluxcd/pkg/sourceignore v0.3.4/go.mod h1:ejLx+/uIrPUgqVzMTR5JiWuUnzs+zTkoEf9gS92LqaE= -github.com/fluxcd/pkg/ssa v0.28.2 h1:BL42JK9Cg17PHh/VIh64e6GZ+rjO47uDMGXGSGeCdao= -github.com/fluxcd/pkg/ssa v0.28.2/go.mod h1:nL0bCiFTAMvMrEKGlVCAgtLdP8VIPBGizY5xgasaypI= -github.com/fluxcd/pkg/ssh v0.8.0 h1:CqHIsWYfAtGxh2D6ZvzGTkFout6MaQnFpytPzJPbDLA= -github.com/fluxcd/pkg/ssh v0.8.0/go.mod h1:bo6HgWqIIuXU6r5HCxRFa7Uo7b4Nnzsz6MvdtAYn2XY= +github.com/fluxcd/pkg/oci v0.31.0 h1:Zpp65vcFJKRfeltuswKztJh2OrB86X3VrA1LU/VjspQ= +github.com/fluxcd/pkg/oci v0.31.0/go.mod h1:UL7nzm7p3fk5X0ZTsHl3qBhRy/NtuGqFSangXvPKUNw= +github.com/fluxcd/pkg/runtime v0.42.0 h1:a5DQ/f90YjoHBmiXZUpnp4bDSLORjInbmqP7K11L4uY= +github.com/fluxcd/pkg/runtime v0.42.0/go.mod h1:p6A3xWVV8cKLLQW0N90GehKgGMMmbNYv+OSJ/0qB0vg= +github.com/fluxcd/pkg/sourceignore v0.3.5 h1:omcHTH5X5tlPr9w1b9T7WuJTOP+o/KdVdarYb4kgkCU= +github.com/fluxcd/pkg/sourceignore v0.3.5/go.mod h1:6Xz3jErz8RsidsdrjUBBUGKes24rbdp/F38MnTGibEw= +github.com/fluxcd/pkg/ssa v0.32.0 h1:RBqs9DNrbJkFHjpfsiKilyean7gwqWFspSBTLOaBIHs= +github.com/fluxcd/pkg/ssa v0.32.0/go.mod h1:+Kf5euYAbvgJX645bo+IL7V/NlH0X7kGgFTr1W++I3c= +github.com/fluxcd/pkg/ssh v0.8.2 h1:WNfvTmnLnOUyXQDb8luSfmn1X0RIuhJBcKMFtKm6YsQ= +github.com/fluxcd/pkg/ssh v0.8.2/go.mod h1:ewbU9vakYYdGSX92qXhx6Kqi5tVQ3ppmGQakCX1R6Gw= github.com/fluxcd/pkg/tar v0.2.0 h1:HEUHgONQYsJGeZZ4x6h5nQU9Aox1I4T3bOp1faWTqf8= github.com/fluxcd/pkg/tar v0.2.0/go.mod h1:w0/TOC7kwBJhnSJn7TCABkc/I7ib1f2Yz6vOsbLBnhw= github.com/fluxcd/pkg/version v0.2.2 h1:ZpVXECeLA5hIQMft11iLp6gN3cKcz6UNuVTQPw/bRdI= @@ -201,8 +194,8 @@ github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmS github.com/go-git/go-billy/v5 v5.4.1 h1:Uwp5tDRkPr+l/TnbHOQzp+tmJfLceOlbVucgpTz8ix4= github.com/go-git/go-billy/v5 v5.4.1/go.mod h1:vjbugF6Fz7JIflbVpl1hJsGjSHNltrSw45YK/ukIvQg= github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20230305113008-0c11038e723f h1:Pz0DHeFij3XFhoBRGUDPzSJ+w2UcK5/0JvF8DRI58r8= -github.com/go-git/go-git/v5 v5.7.1-0.20230702134234-dd4e2b7f4b01 h1:+yTyIn80JO1XGuLjgnUwnJDFpRw5dOVk6Yv5dAzi5dI= -github.com/go-git/go-git/v5 v5.7.1-0.20230702134234-dd4e2b7f4b01/go.mod h1:coJHKEOk5kUClpsNlXrUvPrDxY3w3gjHvhcZd8Fodw8= +github.com/go-git/go-git/v5 v5.8.1 h1:Zo79E4p7TRk0xoRgMq0RShiTHGKcKI4+DI6BfJc/Q+A= +github.com/go-git/go-git/v5 v5.8.1/go.mod h1:FHFuoD6yGz5OSKEBK+aWN9Oah0q54Jxl0abmj6GnqAo= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= @@ -222,8 +215,8 @@ github.com/gofrs/uuid v4.2.0+incompatible h1:yyYWMnhkhrKwwr8gAOcOCYxOOscHgDS9yZg github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= -github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= +github.com/golang-jwt/jwt/v5 v5.0.0 h1:1n1XNM9hk7O9mnQoNBGolZvzebBQ7p93ULHRc28XJUE= +github.com/golang-jwt/jwt/v5 v5.0.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -273,8 +266,8 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-containerregistry v0.15.2 h1:MMkSh+tjSdnmJZO7ljvEqV1DjfekB6VUEAZgy3a+TQE= -github.com/google/go-containerregistry v0.15.2/go.mod h1:wWK+LnOv4jXMM23IT/F1wdYftGWGr47Is8CG+pmHK1Q= +github.com/google/go-containerregistry v0.16.1 h1:rUEt426sR6nyrL3gt+18ibRcvYpKYdpsa5ZW7MA08dQ= +github.com/google/go-containerregistry v0.16.1/go.mod h1:u0qB2l7mvtWVR5kNcbFIhFY1hLbf8eeGapA+vbFDCtQ= github.com/google/go-github/v52 v52.0.0 h1:uyGWOY+jMQ8GVGSX8dkSwCzlehU3WfdxQ7GweO/JP7M= github.com/google/go-github/v52 v52.0.0/go.mod h1:WJV6VEEUPuMo5pXqqa2ZCZEdbQqua4zAk2MZTIo+m+4= github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= @@ -307,8 +300,10 @@ github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+l github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-retryablehttp v0.7.4 h1:ZQgVdpTdAL7WpMIwLzCfbalOcSUdkDZnpUv3/+BxzFA= github.com/hashicorp/go-retryablehttp v0.7.4/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8= -github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= -github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/golang-lru/arc/v2 v2.0.5 h1:l2zaLDubNhW4XO3LnliVj0GXO3+/CGNJAg1dcN2Fpfw= +github.com/hashicorp/golang-lru/arc/v2 v2.0.5/go.mod h1:ny6zBSQZi2JxIeYcv7kt2sH2PXJtirBN7RDhRpxPkxU= +github.com/hashicorp/golang-lru/v2 v2.0.5 h1:wW7h1TG88eUIJ2i69gaE3uNVtEPIagzhGvHgwfx2Vm4= +github.com/hashicorp/golang-lru/v2 v2.0.5/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= github.com/homeport/dyff v1.5.8 h1:CZvnYFh6Pr/c+d32EnWODAHRTctrDKkz0tFr6yTYCpU= github.com/homeport/dyff v1.5.8/go.mod h1:S669ekLW2ttUp6lT1d0jIlmH+eAsP3psfl9K6oMIBeU= github.com/imdario/mergo v0.3.15 h1:M8XP7IuFNsqUx6VPK2P9OSmsYsI/YFaGil0uD21V3dM= @@ -382,7 +377,6 @@ github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQ github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0= github.com/mitchellh/hashstructure v1.1.0 h1:P6P1hdjqAAknpY/M1CGipelZgp+4y9ja9kmUZPXP+H0= github.com/mitchellh/hashstructure v1.1.0/go.mod h1:xUDAozZz0Wmdiufv0uyhnHkUTN6/6d8ulp4AwfLKrmA= -github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f h1:2+myh5ml7lgEU/51gbeLHfKGNfgEQQIWrlbdaOsidbQ= github.com/moby/spdystream v0.2.0 h1:cjW1zVyyoiM0T7b6UoySUFqzXMoqRckQtXwGPiBhOM8= github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= github.com/moby/term v0.0.0-20221205130635-1aeaba878587 h1:HfkjXDfhgVaN5rmueG8cL8KKeFNecRCXFhaJ2qZ5SKA= @@ -405,8 +399,8 @@ github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo/v2 v2.11.0 h1:WgqUCUt/lT6yXoQ8Wef0fsNn5cAuMK7+KT9UFRz2tcU= -github.com/onsi/gomega v1.27.8 h1:gegWiwZjBsf2DgiSbf5hpokZ98JVDMcWkUiigk6/KXc= -github.com/onsi/gomega v1.27.8/go.mod h1:2J8vzI/s+2shY9XHRApDkdgPo1TKT7P2u6fXeJKFnNQ= +github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI= +github.com/onsi/gomega v1.27.10/go.mod h1:RsS8tutOdbdgzbPtzzATp12yT7kM5I5aElG3evPbQ0M= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.0-rc3 h1:fzg1mXZFj8YdPeNkRXMg+zb88BFV0Ys52cJydRwBkb8= @@ -460,8 +454,8 @@ github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= -github.com/skeema/knownhosts v1.1.1 h1:MTk78x9FPgDFVFkDLTrsnnfCJl7g1C/nnKvePgrIngE= -github.com/skeema/knownhosts v1.1.1/go.mod h1:g4fPeYpque7P0xefxtGzV81ihjC8sX2IqpAoNkjxbMo= +github.com/skeema/knownhosts v1.2.0 h1:h9r9cf0+u7wSE+M183ZtMGgOJKiL96brpaz5ekfJCpM= +github.com/skeema/knownhosts v1.2.0/go.mod h1:g4fPeYpque7P0xefxtGzV81ihjC8sX2IqpAoNkjxbMo= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= @@ -504,19 +498,12 @@ github.com/xlab/treeprint v1.1.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43 h1:+lm10QQTNSBd8DVTNGHx7o/IKu9HYDvLMffDhbyLccI= -github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43/go.mod h1:aX5oPXxHm3bOH+xeAttToC8pqch2ScQN/JoXYupl6xs= -github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50 h1:hlE8//ciYMztlGpl/VA+Zm1AcTPHYkHJPbHqE6WJUXE= -github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50/go.mod h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96TguQh0+r/ssA= -github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f h1:ERexzlUfuTvpE74urLSbIQW0Z/6hF9t8U4NsJLaioAY= -github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.starlark.net v0.0.0-20221028183056-acb66ad56dd2 h1:5/KzhcSqd4UgY51l17r7C5g/JiE6DRw1Vq7VJfQHuMc= go.starlark.net v0.0.0-20221028183056-acb66ad56dd2/go.mod h1:kIVgS18CjmEC3PqMd5kaJSGEifyV/CeB9x506ZJ1Vbk= -go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A= -go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= -go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= +go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ= +go.uber.org/zap v1.25.0 h1:4Hvk6GtkucQ790dqmj7l1eEnRdKm3k3ZUrUMS2d5+5c= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -525,8 +512,8 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.11.0 h1:6Ewdq3tDic1mg5xRO4milcWCfMVQhI4NkqWWvqejpuA= -golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= +golang.org/x/crypto v0.12.0 h1:tFM/ta59kqch6LlvYnPa0yx5a83cL2nHflFhYKvv9Yk= +golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= @@ -558,12 +545,12 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.6.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.11.0 h1:Gi2tvZIJyBtO9SDr1q9h5hEQCp/4L2RQ+ar0qjx2oNU= -golang.org/x/net v0.11.0/go.mod h1:2L/ixqYpgIVXmeoSA/4Lu7BzTG4KIyPIryS4IsOd1oQ= +golang.org/x/net v0.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14= +golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.7.0 h1:qe6s0zUXlPX80/dITx3440hWZ7GwMwgDDyrSGTPJG/g= -golang.org/x/oauth2 v0.7.0/go.mod h1:hPLQkd9LyjfXTiRohC/41GhcFqxisoUQ99sCUOHO9x4= +golang.org/x/oauth2 v0.8.0 h1:6dkIjl3j3LtZ/O3sTgZTMsLKSftL/B8Zgq4huOIIUu8= +golang.org/x/oauth2 v0.8.0/go.mod h1:yr7u4HXZRm1R1kBWqr/xKNqewf0plRYoB7sla+BCIXE= 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= @@ -605,16 +592,16 @@ golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA= -golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM= +golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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= golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/term v0.10.0 h1:3R7pNqamzBraeqj/Tj8qt1aQ2HpmlC+Cx/qL/7hn4/c= -golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o= +golang.org/x/term v0.11.0 h1:F9tnn/DA/Im8nCwm+fX+1/eBwi4qFjRT++MhtVC4ZX0= +golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -624,8 +611,8 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.11.0 h1:LAntKIrcmeSKERyiOh0XMV39LXS8IE9UL2yP7+f5ij4= -golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc= +golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -704,8 +691,8 @@ k8s.io/apiextensions-apiserver v0.27.4 h1:ie1yZG4nY/wvFMIR2hXBeSVq+HfNzib60FjnBY k8s.io/apiextensions-apiserver v0.27.4/go.mod h1:KHZaDr5H9IbGEnSskEUp/DsdXe1hMQ7uzpQcYUFt2bM= k8s.io/apimachinery v0.27.4 h1:CdxflD4AF61yewuid0fLl6bM4a3q04jWel0IlP+aYjs= k8s.io/apimachinery v0.27.4/go.mod h1:XNfZ6xklnMCOGGFNqXG7bUrQCoR04dh/E7FprV6pb+E= -k8s.io/cli-runtime v0.27.3 h1:h592I+2eJfXj/4jVYM+tu9Rv8FEc/dyCoD80UJlMW2Y= -k8s.io/cli-runtime v0.27.3/go.mod h1:LzXud3vFFuDFXn2LIrWnscPgUiEj7gQQcYZE2UPn9Kw= +k8s.io/cli-runtime v0.27.4 h1:Zb0eci+58eHZNnoHhjRFc7W88s8dlG12VtIl3Nv2Hto= +k8s.io/cli-runtime v0.27.4/go.mod h1:k9Z1xiZq2xNplQmehpDquLgc+rE+pubpO1cK4al4Mlw= k8s.io/client-go v0.27.4 h1:vj2YTtSJ6J4KxaC88P4pMPEQECWMY8gqPqsTgUKzvjk= k8s.io/client-go v0.27.4/go.mod h1:ragcly7lUlN0SRPk5/ZkGnDjPknzb37TICq07WhI6Xc= k8s.io/component-base v0.27.4 h1:Wqc0jMKEDGjKXdae8hBXeskRP//vu1m6ypC+gwErj4c= @@ -714,12 +701,12 @@ k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg= k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f h1:2kWPakN3i/k81b0gvD5C5FJ2kxm1WrQFanWchyKuqGg= k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f/go.mod h1:byini6yhqGC14c3ebc/QwanvYwhuMWF6yz2F8uwW8eg= -k8s.io/kubectl v0.27.3 h1:HyC4o+8rCYheGDWrkcOQHGwDmyLKR5bxXFgpvF82BOw= -k8s.io/kubectl v0.27.3/go.mod h1:g9OQNCC2zxT+LT3FS09ZYqnDhlvsKAfFq76oyarBcq4= +k8s.io/kubectl v0.27.4 h1:RV1TQLIbtL34+vIM+W7HaS3KfAbqvy9lWn6pWB9els4= +k8s.io/kubectl v0.27.4/go.mod h1:qtc1s3BouB9KixJkriZMQqTsXMc+OAni6FeKAhq7q14= k8s.io/utils v0.0.0-20230505201702-9f6742963106 h1:EObNQ3TW2D+WptiYXlApGNLVy0zm/JIBVY9i+M4wpAU= k8s.io/utils v0.0.0-20230505201702-9f6742963106/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= -sigs.k8s.io/cli-utils v0.34.0 h1:zCUitt54f0/MYj/ajVFnG6XSXMhpZ72O/3RewIchW8w= -sigs.k8s.io/cli-utils v0.34.0/go.mod h1:EXyMwPMu9OL+LRnj0JEMsGG/fRvbgFadcVlSnE8RhFs= +sigs.k8s.io/cli-utils v0.35.0 h1:dfSJaF1W0frW74PtjwiyoB4cwdRygbHnC7qe7HF0g/Y= +sigs.k8s.io/cli-utils v0.35.0/go.mod h1:ITitykCJxP1vaj1Cew/FZEaVJ2YsTN9Q71m02jebkoE= sigs.k8s.io/controller-runtime v0.15.1 h1:9UvgKD4ZJGcj24vefUFgZFP3xej/3igL9BsOUTb/+4c= sigs.k8s.io/controller-runtime v0.15.1/go.mod h1:7ngYvp1MLT+9GeZ+6lH3LOlcHkp/+tzA/fmHa4iq9kk= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= @@ -728,7 +715,7 @@ sigs.k8s.io/kustomize/api v0.13.4 h1:E38Hfx0G9R9v7vRgKshviPotJQETG0S2gD3JdHLCAsI sigs.k8s.io/kustomize/api v0.13.4/go.mod h1:Bkaavz5RKK6ZzP0zgPrB7QbpbBJKiHuD3BB0KujY7Ls= sigs.k8s.io/kustomize/kyaml v0.14.2 h1:9WSwztbzwGszG1bZTziQUmVMrJccnyrLb5ZMKpJGvXw= sigs.k8s.io/kustomize/kyaml v0.14.2/go.mod h1:AN1/IpawKilWD7V+YvQwRGUvuUOOWpjsHu6uHwonSF4= -sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= -sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E= +sigs.k8s.io/structured-merge-diff/v4 v4.3.0 h1:UZbZAZfX0wV2zr7YZorDz6GXROfDFj6LvqCRm4VUVKk= +sigs.k8s.io/structured-merge-diff/v4 v4.3.0/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= From 4080d5807a999588ef888e6616104968159e52cc Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Thu, 24 Aug 2023 10:56:11 +0200 Subject: [PATCH 621/818] tests/azure: update dependencies - github.com/Azure/azure-event-hubs-go/v3 to v3.6.1 - github.com/fluxcd/helm-controller/api to v0.36.0 - github.com/fluxcd/image-automation-controller/api to v0.36.0 - github.com/fluxcd/image-reflector-controller/api to v0.30.0 - github.com/fluxcd/kustomize-controller/api to v1.1.0 - github.com/fluxcd/notification-controller/api to v1.1.0 - github.com/fluxcd/pkg/apis/event to v0.5.2 - github.com/fluxcd/pkg/apis/meta to v1.1.2 - github.com/fluxcd/pkg/git to v0.13.0 - github.com/fluxcd/pkg/git/gogit to v0.13.0 - github.com/fluxcd/source-controller/api to v1.1.0 - github.com/go-git/go-git/v5 to v5.8.1 - k8s.io/api to v0.27.4 - k8s.io/apimachinery to v0.27.4 - k8s.io/client-go to v0.27.4 - sigs.k8s.io/controller-runtime to v0.15.1 Signed-off-by: Hidde Beydals --- tests/azure/go.mod | 60 ++++++++++++------------ tests/azure/go.sum | 114 +++++++++++++++++++++++---------------------- 2 files changed, 87 insertions(+), 87 deletions(-) diff --git a/tests/azure/go.mod b/tests/azure/go.mod index d46f209f..fd600a12 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -2,39 +2,37 @@ module github.com/fluxcd/flux2/tests/azure go 1.20 -// Replace go-git to unreleased v5.8.0 to improve support for Git v2.41+. -replace github.com/go-git/go-git/v5 => github.com/go-git/go-git/v5 v5.7.1-0.20230702134234-dd4e2b7f4b01 +// Fix CVE-2022-28948 +replace gopkg.in/yaml.v3 => gopkg.in/yaml.v3 v3.0.1 require ( - github.com/Azure/azure-event-hubs-go/v3 v3.6.0 - github.com/fluxcd/helm-controller/api v0.35.0 - github.com/fluxcd/image-automation-controller/api v0.35.0 - github.com/fluxcd/image-reflector-controller/api v0.29.1 - github.com/fluxcd/kustomize-controller/api v1.0.1 - github.com/fluxcd/notification-controller/api v1.0.0 - github.com/fluxcd/pkg/apis/event v0.5.1 - github.com/fluxcd/pkg/apis/meta v1.1.1 - github.com/fluxcd/pkg/git v0.12.3 - github.com/fluxcd/pkg/git/gogit v0.12.1 - github.com/fluxcd/source-controller/api v1.0.1 - github.com/go-git/go-git/v5 v5.7.0 + github.com/Azure/azure-event-hubs-go/v3 v3.6.1 + github.com/fluxcd/helm-controller/api v0.36.0 + github.com/fluxcd/image-automation-controller/api v0.36.0 + github.com/fluxcd/image-reflector-controller/api v0.30.0 + github.com/fluxcd/kustomize-controller/api v1.1.0 + github.com/fluxcd/notification-controller/api v1.1.0 + github.com/fluxcd/pkg/apis/event v0.5.2 + github.com/fluxcd/pkg/apis/meta v1.1.2 + github.com/fluxcd/pkg/git v0.13.0 + github.com/fluxcd/pkg/git/gogit v0.13.0 + github.com/fluxcd/source-controller/api v1.1.0 + github.com/go-git/go-git/v5 v5.8.1 github.com/hashicorp/hc-install v0.5.2 github.com/hashicorp/terraform-exec v0.18.1 github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 github.com/stretchr/testify v1.8.4 github.com/whilp/git-urls v1.0.0 go.uber.org/multierr v1.11.0 - k8s.io/api v0.27.3 - k8s.io/apimachinery v0.27.3 - k8s.io/client-go v0.27.3 + k8s.io/api v0.27.4 + k8s.io/apimachinery v0.27.4 + k8s.io/client-go v0.27.4 k8s.io/klog/v2 v2.100.1 - sigs.k8s.io/controller-runtime v0.15.0 + sigs.k8s.io/controller-runtime v0.15.1 ) -// Fix CVE-2022-28948 -replace gopkg.in/yaml.v3 => gopkg.in/yaml.v3 v3.0.1 - require ( + dario.cat/mergo v1.0.0 // indirect github.com/Azure/azure-amqp-common-go/v4 v4.2.0 // indirect github.com/Azure/azure-sdk-for-go v65.0.0+incompatible // indirect github.com/Azure/go-amqp v1.0.0 // indirect @@ -48,7 +46,7 @@ require ( github.com/Azure/go-autorest/tracing v0.6.0 // indirect github.com/Masterminds/semver/v3 v3.2.1 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect - github.com/ProtonMail/go-crypto v0.0.0-20230619160724-3fbb1f12458c // indirect + github.com/ProtonMail/go-crypto v0.0.0-20230717121422-5aa5874ade95 // indirect github.com/acomagu/bufpipe v1.0.4 // indirect github.com/apparentlymart/go-textseg/v13 v13.0.0 // indirect github.com/cloudflare/circl v1.3.3 // indirect @@ -60,7 +58,7 @@ require ( github.com/evanphx/json-patch/v5 v5.6.0 // indirect github.com/fluxcd/pkg/apis/acl v0.1.0 // indirect github.com/fluxcd/pkg/apis/kustomize v1.1.1 // indirect - github.com/fluxcd/pkg/ssh v0.8.0 // indirect + github.com/fluxcd/pkg/ssh v0.8.2 // indirect github.com/fluxcd/pkg/version v0.2.2 // indirect github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect github.com/go-git/go-billy/v5 v5.4.1 // indirect @@ -95,26 +93,26 @@ require ( github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/sergi/go-diff v1.3.1 // indirect - github.com/skeema/knownhosts v1.1.1 // indirect + github.com/skeema/knownhosts v1.2.0 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect github.com/zclconf/go-cty v1.13.0 // indirect go.uber.org/atomic v1.10.0 // indirect - golang.org/x/crypto v0.10.0 // indirect + golang.org/x/crypto v0.12.0 // indirect golang.org/x/mod v0.10.0 // indirect - golang.org/x/net v0.10.0 // indirect + golang.org/x/net v0.12.0 // indirect golang.org/x/oauth2 v0.5.0 // indirect - golang.org/x/sys v0.9.0 // indirect - golang.org/x/term v0.9.0 // indirect - golang.org/x/text v0.10.0 // indirect + golang.org/x/sys v0.11.0 // indirect + golang.org/x/term v0.11.0 // indirect + golang.org/x/text v0.12.0 // indirect golang.org/x/time v0.3.0 // indirect - golang.org/x/tools v0.9.1 // indirect + golang.org/x/tools v0.9.3 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/protobuf v1.30.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/apiextensions-apiserver v0.27.3 // indirect + k8s.io/apiextensions-apiserver v0.27.4 // indirect k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f // indirect k8s.io/utils v0.0.0-20230505201702-9f6742963106 // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect diff --git a/tests/azure/go.sum b/tests/azure/go.sum index c7004d0a..d78db317 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -1,9 +1,11 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= +dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= github.com/Azure/azure-amqp-common-go/v4 v4.2.0 h1:q/jLx1KJ8xeI8XGfkOWMN9XrXzAfVTkyvCxPvHCjd2I= github.com/Azure/azure-amqp-common-go/v4 v4.2.0/go.mod h1:GD3m/WPPma+621UaU6KNjKEo5Hl09z86viKwQjTpV0Q= -github.com/Azure/azure-event-hubs-go/v3 v3.6.0 h1:UXRi5KewXYoTiekVjrj0gyGfbyGvtbYdot6/4IMf4I4= -github.com/Azure/azure-event-hubs-go/v3 v3.6.0/go.mod h1:UgyRnRU7H5e33igaLHJTqbkoNR1uj0j3MA/n7dABU24= +github.com/Azure/azure-event-hubs-go/v3 v3.6.1 h1:vSiMmn3tOwgiLyfnmhT5K6Of/3QWRLaaNZPI0hFvZyU= +github.com/Azure/azure-event-hubs-go/v3 v3.6.1/go.mod h1:i2NByb9Pr2na7y8wi/XefEVKkuA2CDUjCNoWQJtTsGo= github.com/Azure/azure-sdk-for-go v65.0.0+incompatible h1:HzKLt3kIwMm4KeJYTdx9EbjRYTySD/t8i1Ee/W5EGXw= github.com/Azure/azure-sdk-for-go v65.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/go-amqp v1.0.0 h1:QfCugi1M+4F2JDTRgVnRw7PYXLXZ9hmqk3+9+oJh3OA= @@ -37,8 +39,8 @@ github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/ProtonMail/go-crypto v0.0.0-20230619160724-3fbb1f12458c h1:figwFwYep1Qnl64Y+Rc8tyQWE0xvYAN+5EX+rD40pTU= -github.com/ProtonMail/go-crypto v0.0.0-20230619160724-3fbb1f12458c/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= +github.com/ProtonMail/go-crypto v0.0.0-20230717121422-5aa5874ade95 h1:KLq8BE0KwCL+mmXnjLWEAOYO+2l2AE4YMmqG1ZpZHBs= +github.com/ProtonMail/go-crypto v0.0.0-20230717121422-5aa5874ade95/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= github.com/acomagu/bufpipe v1.0.4 h1:e3H4WUzM3npvo5uv95QuJM3cQspFNtFBzvJ2oNjKIDQ= github.com/acomagu/bufpipe v1.0.4/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= @@ -70,7 +72,7 @@ github.com/devigned/tab v0.1.1 h1:3mD6Kb1mUOYeLpJvTVSDwSg5ZsfSxfvxGRTxRsJsITA= github.com/devigned/tab v0.1.1/go.mod h1:XG9mPq0dFghrYvoBF3xdRrJzSTX1b7IQrvaL9mzjeJY= github.com/dimchansky/utfbom v1.1.0 h1:FcM3g+nofKgUteL8dm/UpdRXNC9KmADgTpLKsu0TRo4= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= -github.com/elazarl/goproxy v0.0.0-20221015165544-a0805db90819 h1:RIB4cRk+lBqKK3Oy0r2gRX4ui7tuhiZq2SuTtTCi0/0= +github.com/elazarl/goproxy v0.0.0-20230731152917-f99041a5c027 h1:1L0aalTpPz7YlMxETKpmQoWMBkeiuorElZIXoNmgiPE= github.com/emicklei/go-restful/v3 v3.10.0 h1:X4gma4HM7hFm6WMeAsTfqA0GOfdNoCzBIkHGoRLGXuM= github.com/emicklei/go-restful/v3 v3.10.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= @@ -85,35 +87,35 @@ github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJ github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0= github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= -github.com/fluxcd/helm-controller/api v0.35.0 h1:UyhKXPni5z69DzPW7GtECGGdUwKsB+OTI0A/wc7HmFY= -github.com/fluxcd/helm-controller/api v0.35.0/go.mod h1:CdHMtr5wM0xgDt/PS147H7QQS+zDxAFgDW3ZN8MnUlU= -github.com/fluxcd/image-automation-controller/api v0.35.0 h1:B7yJdAbnx0hwI6ffVu0YAyc3d3sqjXrv6ySK++g3t28= -github.com/fluxcd/image-automation-controller/api v0.35.0/go.mod h1:67HbnrXDy550zJKZZbzAZ0yfzL0Ge1O18yn/shcgy0Y= -github.com/fluxcd/image-reflector-controller/api v0.29.1 h1:mnFaO60b8WyCxpc72utmAJ7J1ZtZjGGThH9NdxVeEyo= -github.com/fluxcd/image-reflector-controller/api v0.29.1/go.mod h1:aYwq15SpkAD/urQme2iEsNouTscfR1Qo39KBlJ+0EW8= -github.com/fluxcd/kustomize-controller/api v1.0.1 h1:zz9zx4Mc7rw9gqdgdhMWX1uDM2uR1x7WBUujKs4mdx8= -github.com/fluxcd/kustomize-controller/api v1.0.1/go.mod h1:rYUovoofr3bVPgQowWj/CSGw73qoH0tOCopJ3oNh7lM= -github.com/fluxcd/notification-controller/api v1.0.0 h1:WiXS116pwhFp7Qe/Fc1GmKCfLBRnZu+rYCeIn07cO+4= -github.com/fluxcd/notification-controller/api v1.0.0/go.mod h1:uamWZwmhSHE7xdJkgRhH4Eo5/SKKILFI4o+CoQjlczc= +github.com/fluxcd/helm-controller/api v0.36.0 h1:V48f/9W2Pv3LETREaCs7jkLh1LRI6J51kKY2UzUZjvQ= +github.com/fluxcd/helm-controller/api v0.36.0/go.mod h1:zkcRy3PxG0NoxSY5SjiSA5tWOGa6spIbWsChQY8FXqM= +github.com/fluxcd/image-automation-controller/api v0.36.0 h1:Y1uzJ+K3ov5jhbUH+7+X3hfpgXIdgUO9VR7REoHUAxs= +github.com/fluxcd/image-automation-controller/api v0.36.0/go.mod h1:eZRv70cGQAxOpiqf1mZYDPgCZOmWNoGH0/PDgU60lDM= +github.com/fluxcd/image-reflector-controller/api v0.30.0 h1:DiWj+4tcbnaSqZs1Pfkyt3uSy47wg3dsNMgbFE50pYc= +github.com/fluxcd/image-reflector-controller/api v0.30.0/go.mod h1:hv57KwIzoPyy7Vu4PFcIf21eu0N3p/HbijygcuNgf8c= +github.com/fluxcd/kustomize-controller/api v1.1.0 h1:FrFdRdlPczXTolOMt/HsY6rf1tWEYBoF2uJOISx8fpg= +github.com/fluxcd/kustomize-controller/api v1.1.0/go.mod h1:FHJTX6c0+CznUNGMol5+Uc4lQsYRxWgpmIRK/xDCghA= +github.com/fluxcd/notification-controller/api v1.1.0 h1:qx5t5DmArfPLxG2bsYZXIqDXLnijUddlHeRfciALwQw= +github.com/fluxcd/notification-controller/api v1.1.0/go.mod h1:6MqWVQeI5yrYR7zp0GFqsfXitNPGJrnfOWxO2w3jylg= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= -github.com/fluxcd/pkg/apis/event v0.5.1 h1:UrEmKwTK/lt42gMZunl8BQBMzjf8PSqGbWDs/GB839c= -github.com/fluxcd/pkg/apis/event v0.5.1/go.mod h1:GzBAzS8bq7751wvNkaSnr3kuwFVuWTPL20D77UgSNJQ= +github.com/fluxcd/pkg/apis/event v0.5.2 h1:WtnCOeWglf7wR3dpyiWxb1JtYkw1G5OXcERb1QopFpA= +github.com/fluxcd/pkg/apis/event v0.5.2/go.mod h1:5l6SSxVTkqrXrYjgEqAajOOHkl4x0TPocAuSdu+3AEs= github.com/fluxcd/pkg/apis/kustomize v1.1.1 h1:MSGn4z0R9PptmoPFHnx2nEZ8Jtl1sKfw0cuDQY2HYwM= github.com/fluxcd/pkg/apis/kustomize v1.1.1/go.mod h1:0pCu0ecIY+ZM0iE/hOHYwCMZ3b0SpBrjJ1SH3FFyYdE= -github.com/fluxcd/pkg/apis/meta v1.1.1 h1:sLAKLbEu7rRzJ+Mytffu3NcpfdbOBTa6hcpOQzFWm+M= -github.com/fluxcd/pkg/apis/meta v1.1.1/go.mod h1:soCfzjFWbm1mqybDcOywWKTCEYlH3skpoNGTboVk234= -github.com/fluxcd/pkg/git v0.12.3 h1:1KmRYTdcBKDUutg6NIT4x0BCCMT72PjjXs3AnHjybHY= -github.com/fluxcd/pkg/git v0.12.3/go.mod h1:ID2sry5OqYbgJxvANc7s6V/YwafnQd7e1AGoDvwztAU= -github.com/fluxcd/pkg/git/gogit v0.12.1 h1:06jzHOTntYN5xCSQvyFXtLXdqoP8crLh7VYgtXS9+wo= -github.com/fluxcd/pkg/git/gogit v0.12.1/go.mod h1:Z4Ysp8VifKTvWpjJMKncJsgb2iBqHuIeK80VGjlU41Y= -github.com/fluxcd/pkg/gittestserver v0.8.4 h1:rA/QUZnfH77ZZG+5xfMqjgEHJdzeeE6Nn1o8cops/bU= -github.com/fluxcd/pkg/ssh v0.8.0 h1:CqHIsWYfAtGxh2D6ZvzGTkFout6MaQnFpytPzJPbDLA= -github.com/fluxcd/pkg/ssh v0.8.0/go.mod h1:bo6HgWqIIuXU6r5HCxRFa7Uo7b4Nnzsz6MvdtAYn2XY= +github.com/fluxcd/pkg/apis/meta v1.1.2 h1:Unjo7hxadtB2dvGpeFqZZUdsjpRA08YYSBb7dF2WIAM= +github.com/fluxcd/pkg/apis/meta v1.1.2/go.mod h1:BHQyRHCskGMEDf6kDGbgQ+cyiNpUHbLsCOsaMYM2maI= +github.com/fluxcd/pkg/git v0.13.0 h1:GcJfldYqw6ELf0vbTCV+iFZgSpK6HZBKx3yAvn1Dqfg= +github.com/fluxcd/pkg/git v0.13.0/go.mod h1:rKB1puk7sbC4AYF1oZDBrkvu3cr0aibkd4I5yNbxSQg= +github.com/fluxcd/pkg/git/gogit v0.13.0 h1:XCwfiB5qbz08djUgo0TII09zibH97Hn56v098pkFpns= +github.com/fluxcd/pkg/git/gogit v0.13.0/go.mod h1:V3g+UyIDSAOysg5KCpHhS+HXBUmNmmbNlVruWkpCJgY= +github.com/fluxcd/pkg/gittestserver v0.8.6 h1:YM8prVKB3LC9LBBe+a2p7l1BlfV9erXCgC1em9sbqW4= +github.com/fluxcd/pkg/ssh v0.8.2 h1:WNfvTmnLnOUyXQDb8luSfmn1X0RIuhJBcKMFtKm6YsQ= +github.com/fluxcd/pkg/ssh v0.8.2/go.mod h1:ewbU9vakYYdGSX92qXhx6Kqi5tVQ3ppmGQakCX1R6Gw= github.com/fluxcd/pkg/version v0.2.2 h1:ZpVXECeLA5hIQMft11iLp6gN3cKcz6UNuVTQPw/bRdI= github.com/fluxcd/pkg/version v0.2.2/go.mod h1:NGnh/no8S6PyfCDxRFrPY3T5BUnqP48MxfxNRU0z8C0= -github.com/fluxcd/source-controller/api v1.0.1 h1:nycylbNBnQd+EO4UHpqXqAQJ1cGAPxgBbrfERCQ1pp8= -github.com/fluxcd/source-controller/api v1.0.1/go.mod h1:rAY5FRFGZUKpIFNyYANHIgPgJPvbALBHWsq/zHw/cXQ= +github.com/fluxcd/source-controller/api v1.1.0 h1:JPtt9WTTqVNdJfPpea8q7fUWF/00kDihxbhISzcb0WE= +github.com/fluxcd/source-controller/api v1.1.0/go.mod h1:ZLkaUd1KQIjtLPCvO63Ni5zpnSTVBAkeRgFBzMItbDQ= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= @@ -123,8 +125,8 @@ github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmS github.com/go-git/go-billy/v5 v5.4.1 h1:Uwp5tDRkPr+l/TnbHOQzp+tmJfLceOlbVucgpTz8ix4= github.com/go-git/go-billy/v5 v5.4.1/go.mod h1:vjbugF6Fz7JIflbVpl1hJsGjSHNltrSw45YK/ukIvQg= github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20230305113008-0c11038e723f h1:Pz0DHeFij3XFhoBRGUDPzSJ+w2UcK5/0JvF8DRI58r8= -github.com/go-git/go-git/v5 v5.7.1-0.20230702134234-dd4e2b7f4b01 h1:+yTyIn80JO1XGuLjgnUwnJDFpRw5dOVk6Yv5dAzi5dI= -github.com/go-git/go-git/v5 v5.7.1-0.20230702134234-dd4e2b7f4b01/go.mod h1:coJHKEOk5kUClpsNlXrUvPrDxY3w3gjHvhcZd8Fodw8= +github.com/go-git/go-git/v5 v5.8.1 h1:Zo79E4p7TRk0xoRgMq0RShiTHGKcKI4+DI6BfJc/Q+A= +github.com/go-git/go-git/v5 v5.8.1/go.mod h1:FHFuoD6yGz5OSKEBK+aWN9Oah0q54Jxl0abmj6GnqAo= github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= @@ -243,7 +245,7 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/onsi/ginkgo/v2 v2.9.5 h1:+6Hr4uxzP4XIUyAkg61dWBw8lb/gc4/X5luuxN/EC+Q= -github.com/onsi/gomega v1.27.8 h1:gegWiwZjBsf2DgiSbf5hpokZ98JVDMcWkUiigk6/KXc= +github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI= github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4= github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -257,14 +259,14 @@ github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUo github.com/prometheus/common v0.42.0 h1:EKsfXEYo4JpWMHH5cg+KOUWeuJSov1Id8zGR8eeI1YM= github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= +github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= github.com/sebdah/goldie v1.0.0/go.mod h1:jXP4hmWywNEwZzhMuv2ccnqTSFpuq8iyQhtQdkkZBH4= github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= -github.com/skeema/knownhosts v1.1.1 h1:MTk78x9FPgDFVFkDLTrsnnfCJl7g1C/nnKvePgrIngE= -github.com/skeema/knownhosts v1.1.1/go.mod h1:g4fPeYpque7P0xefxtGzV81ihjC8sX2IqpAoNkjxbMo= +github.com/skeema/knownhosts v1.2.0 h1:h9r9cf0+u7wSE+M183ZtMGgOJKiL96brpaz5ekfJCpM= +github.com/skeema/knownhosts v1.2.0/go.mod h1:g4fPeYpque7P0xefxtGzV81ihjC8sX2IqpAoNkjxbMo= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= @@ -312,8 +314,8 @@ golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.10.0 h1:LKqV2xt9+kDzSTfOhx4FrkEBcMrAgHSYgzywV9zcGmM= -golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I= +golang.org/x/crypto v0.12.0 h1:tFM/ta59kqch6LlvYnPa0yx5a83cL2nHflFhYKvv9Yk= +golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= @@ -345,8 +347,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.6.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 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= -golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.12.0 h1:cfawfvKITfUsFCeJIHJrbSxpeu/E81khclypR0GVT50= +golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.5.0 h1:HuArIo48skDwlrvM3sEdHXElYslAMsf3KwRkkW4MC4s= @@ -379,15 +381,15 @@ golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.9.0 h1:KS/R3tvhPqvJvwcKfnBHJwwthS11LRhmM5D59eEXa0s= -golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM= +golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/term v0.9.0 h1:GRRCnKYhdQrD8kfRAdQ6Zcw1P0OcELxGLKJvtjVMZ28= -golang.org/x/term v0.9.0/go.mod h1:M6DEAAIenWoTxdKrOltXcmDY3rSplQUkrvaDU5FcQyo= +golang.org/x/term v0.11.0 h1:F9tnn/DA/Im8nCwm+fX+1/eBwi4qFjRT++MhtVC4ZX0= +golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -397,8 +399,8 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.10.0 h1:UpjohKhiEgNc0CSauXmwYftY1+LlaC75SJwh0SgCX58= -golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc= +golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -411,8 +413,8 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= 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.9.1 h1:8WMNJAz3zrtPmnYC7ISf5dEn3MT0gY7jBJfw27yrrLo= -golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= +golang.org/x/tools v0.9.3 h1:Gn1I8+64MsuTb/HpH+LmQtNas23LhUVr3rYZ0eKuaMM= +golang.org/x/tools v0.9.3/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -467,22 +469,22 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -k8s.io/api v0.27.3 h1:yR6oQXXnUEBWEWcvPWS0jQL575KoAboQPfJAuKNrw5Y= -k8s.io/api v0.27.3/go.mod h1:C4BNvZnQOF7JA/0Xed2S+aUyJSfTGkGFxLXz9MnpIpg= -k8s.io/apiextensions-apiserver v0.27.3 h1:xAwC1iYabi+TDfpRhxh4Eapl14Hs2OftM2DN5MpgKX4= -k8s.io/apiextensions-apiserver v0.27.3/go.mod h1:BH3wJ5NsB9XE1w+R6SSVpKmYNyIiyIz9xAmBl8Mb+84= -k8s.io/apimachinery v0.27.3 h1:Ubye8oBufD04l9QnNtW05idcOe9Z3GQN8+7PqmuVcUM= -k8s.io/apimachinery v0.27.3/go.mod h1:XNfZ6xklnMCOGGFNqXG7bUrQCoR04dh/E7FprV6pb+E= -k8s.io/client-go v0.27.3 h1:7dnEGHZEJld3lYwxvLl7WoehK6lAq7GvgjxpA3nv1E8= -k8s.io/client-go v0.27.3/go.mod h1:2MBEKuTo6V1lbKy3z1euEGnhPfGZLKTS9tiJ2xodM48= +k8s.io/api v0.27.4 h1:0pCo/AN9hONazBKlNUdhQymmnfLRbSZjd5H5H3f0bSs= +k8s.io/api v0.27.4/go.mod h1:O3smaaX15NfxjzILfiln1D8Z3+gEYpjEpiNA/1EVK1Y= +k8s.io/apiextensions-apiserver v0.27.4 h1:ie1yZG4nY/wvFMIR2hXBeSVq+HfNzib60FjnBYtPGSs= +k8s.io/apiextensions-apiserver v0.27.4/go.mod h1:KHZaDr5H9IbGEnSskEUp/DsdXe1hMQ7uzpQcYUFt2bM= +k8s.io/apimachinery v0.27.4 h1:CdxflD4AF61yewuid0fLl6bM4a3q04jWel0IlP+aYjs= +k8s.io/apimachinery v0.27.4/go.mod h1:XNfZ6xklnMCOGGFNqXG7bUrQCoR04dh/E7FprV6pb+E= +k8s.io/client-go v0.27.4 h1:vj2YTtSJ6J4KxaC88P4pMPEQECWMY8gqPqsTgUKzvjk= +k8s.io/client-go v0.27.4/go.mod h1:ragcly7lUlN0SRPk5/ZkGnDjPknzb37TICq07WhI6Xc= k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg= k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f h1:2kWPakN3i/k81b0gvD5C5FJ2kxm1WrQFanWchyKuqGg= k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f/go.mod h1:byini6yhqGC14c3ebc/QwanvYwhuMWF6yz2F8uwW8eg= k8s.io/utils v0.0.0-20230505201702-9f6742963106 h1:EObNQ3TW2D+WptiYXlApGNLVy0zm/JIBVY9i+M4wpAU= k8s.io/utils v0.0.0-20230505201702-9f6742963106/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= -sigs.k8s.io/controller-runtime v0.15.0 h1:ML+5Adt3qZnMSYxZ7gAverBLNPSMQEibtzAgp0UPojU= -sigs.k8s.io/controller-runtime v0.15.0/go.mod h1:7ngYvp1MLT+9GeZ+6lH3LOlcHkp/+tzA/fmHa4iq9kk= +sigs.k8s.io/controller-runtime v0.15.1 h1:9UvgKD4ZJGcj24vefUFgZFP3xej/3igL9BsOUTb/+4c= +sigs.k8s.io/controller-runtime v0.15.1/go.mod h1:7ngYvp1MLT+9GeZ+6lH3LOlcHkp/+tzA/fmHa4iq9kk= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= From d80b697fbdbb0c87c23e7717f295feffc2beb87b Mon Sep 17 00:00:00 2001 From: Sunny Date: Thu, 24 Aug 2023 09:21:15 +0000 Subject: [PATCH 622/818] Add monitoring configuration deprecation notice Signed-off-by: Sunny --- manifests/monitoring/README.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 manifests/monitoring/README.md diff --git a/manifests/monitoring/README.md b/manifests/monitoring/README.md new file mode 100644 index 00000000..07f03864 --- /dev/null +++ b/manifests/monitoring/README.md @@ -0,0 +1,20 @@ +# :warning: Deprecation Notice + +Starting Flux v2.1.0, released August 24, 2023, the Flux monitoring +configurations in this repository will be marked as deprecated. New monitoring +docs are available at [Flux monitoring](https://fluxcd.io/flux/monitoring/) +docs with new example configurations in +[fluxcd/flux2-monitoring-example](https://github.com/fluxcd/flux2-monitoring-example/). +The deprecated configurations will be removed in a future release of Flux. All +users of these configurations are recommended to use the new monitoring setup, +following the docs and the new examples. + +After collecting a lot of user feedback about our monitoring recommendation, in +order to serve most of the needs of the users, we decided to create a new +monitoring setup leveraging more of the kube-prometheus-stack, specifically +kube-state-metrics, to enable configuring Flux custom metrics, see the [Flux +custom Prometheus metrics](https://fluxcd.io/flux/monitoring/custom-metrics/) +docs to learn more about it. Please refer to +[fluxcd/flux2/4128](https://github.com/fluxcd/flux2/issues/4128) for a detailed +explanation about this change and the new capabilities offered by the new +monitoring setup. From 29f77d2cb3cb28b5dcd45d0725a403a790f28dce Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 28 Aug 2023 00:57:07 +0000 Subject: [PATCH 623/818] build(deps): bump the ci group with 2 updates Bumps the ci group with 2 updates: [actions/checkout](https://github.com/actions/checkout) and [slsa-framework/slsa-github-generator](https://github.com/slsa-framework/slsa-github-generator). Updates `actions/checkout` from 3.5.3 to 3.6.0 - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/c85c95e3d7251135ab7dc9ce3241c5835cc595a9...f43a0e5ff2bd294095638e18286ca9a3d1956744) Updates `slsa-framework/slsa-github-generator` from 1.8.0 to 1.9.0 - [Release notes](https://github.com/slsa-framework/slsa-github-generator/releases) - [Changelog](https://github.com/slsa-framework/slsa-github-generator/blob/main/CHANGELOG.md) - [Commits](https://github.com/slsa-framework/slsa-github-generator/compare/v1.8.0...v1.9.0) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-minor dependency-group: ci - dependency-name: slsa-framework/slsa-github-generator dependency-type: direct:production update-type: version-update:semver-minor dependency-group: ci ... Signed-off-by: dependabot[bot] --- .github/workflows/action.yaml | 2 +- .github/workflows/backport.yaml | 2 +- .github/workflows/e2e-arm64.yaml | 2 +- .github/workflows/e2e-azure.yaml | 2 +- .github/workflows/e2e-bootstrap.yaml | 2 +- .github/workflows/e2e.yaml | 2 +- .github/workflows/ossf.yaml | 2 +- .github/workflows/release.yaml | 10 +++++----- .github/workflows/scan.yaml | 6 +++--- .github/workflows/sync-labels.yaml | 2 +- .github/workflows/update.yaml | 2 +- 11 files changed, 17 insertions(+), 17 deletions(-) diff --git a/.github/workflows/action.yaml b/.github/workflows/action.yaml index cdcb6c55..60708107 100644 --- a/.github/workflows/action.yaml +++ b/.github/workflows/action.yaml @@ -24,6 +24,6 @@ jobs: name: action on ${{ matrix.version }} steps: - name: Checkout - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 + uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 - name: Setup flux uses: ./action diff --git a/.github/workflows/backport.yaml b/.github/workflows/backport.yaml index d7989fbb..52e5ba93 100644 --- a/.github/workflows/backport.yaml +++ b/.github/workflows/backport.yaml @@ -13,7 +13,7 @@ jobs: if: github.event.pull_request.state == 'closed' && github.event.pull_request.merged && (github.event_name != 'labeled' || startsWith('backport:', github.event.label.name)) steps: - name: Checkout - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 + uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 with: ref: ${{ github.event.pull_request.head.sha }} - name: Create backport PRs diff --git a/.github/workflows/e2e-arm64.yaml b/.github/workflows/e2e-arm64.yaml index 92b3f918..823c7e2c 100644 --- a/.github/workflows/e2e-arm64.yaml +++ b/.github/workflows/e2e-arm64.yaml @@ -21,7 +21,7 @@ jobs: fail-fast: false steps: - name: Checkout - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 + uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 - name: Setup Go uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 with: diff --git a/.github/workflows/e2e-azure.yaml b/.github/workflows/e2e-azure.yaml index 2b410a19..9962dd1e 100644 --- a/.github/workflows/e2e-azure.yaml +++ b/.github/workflows/e2e-azure.yaml @@ -27,7 +27,7 @@ jobs: if: false && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) && github.actor != 'dependabot[bot]' steps: - name: Checkout - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 + uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 - name: Setup Go uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 with: diff --git a/.github/workflows/e2e-bootstrap.yaml b/.github/workflows/e2e-bootstrap.yaml index 7f355dd2..e4e0d5c4 100644 --- a/.github/workflows/e2e-bootstrap.yaml +++ b/.github/workflows/e2e-bootstrap.yaml @@ -17,7 +17,7 @@ jobs: if: (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) && github.actor != 'dependabot[bot]' steps: - name: Checkout - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 + uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 - name: Setup Go uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 with: diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index e2d05efd..dfb6ab43 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -21,7 +21,7 @@ jobs: - 5000:5000 steps: - name: Checkout - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 + uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 - name: Setup Go uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 with: diff --git a/.github/workflows/ossf.yaml b/.github/workflows/ossf.yaml index 9051b641..6a268175 100644 --- a/.github/workflows/ossf.yaml +++ b/.github/workflows/ossf.yaml @@ -19,7 +19,7 @@ jobs: actions: read contents: read steps: - - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 + - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 - name: Run analysis uses: ossf/scorecard-action@08b4669551908b1024bb425080c797723083c031 # v2.2.0 with: diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 0efcb060..87f4807d 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -20,7 +20,7 @@ jobs: packages: write # needed for ghcr access steps: - name: Checkout - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 + uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 - name: Unshallow run: git fetch --prune --unshallow - name: Setup Go @@ -110,7 +110,7 @@ jobs: id-token: write packages: write steps: - - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 + - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 - name: Setup Kustomize uses: fluxcd/pkg/actions/kustomize@main - name: Setup Flux CLI @@ -176,7 +176,7 @@ jobs: actions: read # for detecting the Github Actions environment. id-token: write # for creating OIDC tokens for signing. contents: write # for uploading attestations to GitHub releases. - uses: slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@v1.8.0 + uses: slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@v1.9.0 with: provenance-name: "provenance.intoto.jsonl" base64-subjects: "${{ needs.release-flux-cli.outputs.hashes }}" @@ -188,7 +188,7 @@ jobs: actions: read # for detecting the Github Actions environment. id-token: write # for creating OIDC tokens for signing. packages: write # for uploading attestations. - uses: slsa-framework/slsa-github-generator/.github/workflows/generator_container_slsa3.yml@v1.8.0 + uses: slsa-framework/slsa-github-generator/.github/workflows/generator_container_slsa3.yml@v1.9.0 with: image: ${{ needs.release-flux-cli.outputs.image_url }} digest: ${{ needs.release-flux-cli.outputs.image_digest }} @@ -202,7 +202,7 @@ jobs: actions: read # for detecting the Github Actions environment. id-token: write # for creating OIDC tokens for signing. packages: write # for uploading attestations. - uses: slsa-framework/slsa-github-generator/.github/workflows/generator_container_slsa3.yml@v1.8.0 + uses: slsa-framework/slsa-github-generator/.github/workflows/generator_container_slsa3.yml@v1.9.0 with: image: ghcr.io/${{ needs.release-flux-cli.outputs.image_url }} digest: ${{ needs.release-flux-cli.outputs.image_digest }} diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index 849ce18f..accdc148 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -17,7 +17,7 @@ jobs: runs-on: ubuntu-latest if: github.actor != 'dependabot[bot]' steps: - - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 + - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 - name: Run FOSSA scan and upload build data uses: fossa-contrib/fossa-action@6728dc6fe9a068c648d080c33829ffbe56565023 # v2.0.0 with: @@ -31,7 +31,7 @@ jobs: security-events: write if: (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) && github.actor != 'dependabot[bot]' steps: - - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 + - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 - name: Setup Kustomize uses: fluxcd/pkg/actions/kustomize@main - name: Setup Go @@ -64,7 +64,7 @@ jobs: if: github.actor != 'dependabot[bot]' steps: - name: Checkout repository - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 + uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 - name: Setup Go uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 with: diff --git a/.github/workflows/sync-labels.yaml b/.github/workflows/sync-labels.yaml index f0688a42..7350b13b 100644 --- a/.github/workflows/sync-labels.yaml +++ b/.github/workflows/sync-labels.yaml @@ -17,7 +17,7 @@ jobs: permissions: issues: write steps: - - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 + - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 - uses: EndBug/label-sync@da00f2c11fdb78e4fae44adac2fdd713778ea3e8 # v2.3.2 with: # Configuration file diff --git a/.github/workflows/update.yaml b/.github/workflows/update.yaml index 2496fcc6..cb825cf8 100644 --- a/.github/workflows/update.yaml +++ b/.github/workflows/update.yaml @@ -18,7 +18,7 @@ jobs: pull-requests: write steps: - name: Check out code - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 + uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 - name: Setup Go uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 with: From 709b17ce59d184427c1395bc70f496ba528d3bee Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Mon, 28 Aug 2023 12:10:03 +0300 Subject: [PATCH 624/818] Fix links to fluxcd.io Signed-off-by: Stefan Prodan --- README.md | 12 ++++++------ action/README.md | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index b19f9b3f..e92e1587 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ For more comprehensive documentation, see the following guides: - [Ways of structuring your repositories](https://fluxcd.io/flux/guides/repository-structure/) - [Manage Helm Releases](https://fluxcd.io/flux/guides/helmreleases/) - [Automate image updates to Git](https://fluxcd.io/flux/guides/image-update/) -- [Manage Kubernetes secrets with Mozilla SOPS](https://fluxcd.io/flux/guides/mozilla-sops/) +- [Manage Kubernetes secrets with Flux and SOPS](https://fluxcd.io/flux/guides/mozilla-sops/) If you need help, please refer to our **[Support page](https://fluxcd.io/support/)**. @@ -58,18 +58,18 @@ guides](https://fluxcd.io/flux/gitops-toolkit/source-watcher/). - [HelmChart CRD](https://fluxcd.io/flux/components/source/helmcharts/) - [Bucket CRD](https://fluxcd.io/flux/components/source/buckets/) - [Kustomize Controller](https://fluxcd.io/flux/components/kustomize/) - - [Kustomization CRD](https://fluxcd.io/flux/components/kustomize/kustomization/) + - [Kustomization CRD](https://fluxcd.io/flux/components/kustomize/kustomizations/) - [Helm Controller](https://fluxcd.io/flux/components/helm/) - [HelmRelease CRD](https://fluxcd.io/flux/components/helm/helmreleases/) - [Notification Controller](https://fluxcd.io/flux/components/notification/) - - [Provider CRD](https://fluxcd.io/flux/components/notification/provider/) - - [Alert CRD](https://fluxcd.io/flux/components/notification/alert/) - - [Receiver CRD](https://fluxcd.io/flux/components/notification/receiver/) + - [Provider CRD](https://fluxcd.io/flux/components/notification/providers/) + - [Alert CRD](https://fluxcd.io/flux/components/notification/alerts/) + - [Receiver CRD](https://fluxcd.io/flux/components/notification/receivers/) - [Image Automation Controllers](https://fluxcd.io/flux/components/image/) - [ImageRepository CRD](https://fluxcd.io/flux/components/image/imagerepositories/) - [ImagePolicy CRD](https://fluxcd.io/flux/components/image/imagepolicies/) - [ImageUpdateAutomation CRD](https://fluxcd.io/flux/components/image/imageupdateautomations/) - + ## Community Need help or want to contribute? Please see the links below. The Flux project is always looking for diff --git a/action/README.md b/action/README.md index 052277ac..d511dc9c 100644 --- a/action/README.md +++ b/action/README.md @@ -18,5 +18,5 @@ The Flux GitHub Action can be used to automate various tasks in CI, such as: - [Push Kubernetes manifests to container registries](https://fluxcd.io/flux/flux-gh-action/#push-kubernetes-manifests-to-container-registries) - [Run end-to-end testing with Flux and Kubernetes Kind](https://fluxcd.io/flux/flux-gh-action/#end-to-end-testing) -For more information, please see the [Flux GitHub Action documentation](/flux/flux-gh-action.md). +For more information, please see the [Flux GitHub Action documentation](https://fluxcd.io/flux/flux-gh-action/). From a814487d4b45ab3026a274e681b6cd7f9eba95b6 Mon Sep 17 00:00:00 2001 From: Max Jonas Werner Date: Mon, 28 Aug 2023 12:41:57 +0200 Subject: [PATCH 625/818] Add 2.1.x backport label Signed-off-by: Max Jonas Werner --- .github/labels.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/labels.yaml b/.github/labels.yaml index c83f0bd9..ddaf3632 100644 --- a/.github/labels.yaml +++ b/.github/labels.yaml @@ -47,3 +47,6 @@ - name: backport:release/v2.0.x description: To be backported to release/v2.0.x color: '#ffd700' +- name: backport:release/v2.1.x + description: To be backported to release/v2.1.x + color: '#ffd700' From f6b0c6e7effe190d97fd8063b3283f36586e0f50 Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Thu, 29 Sep 2022 22:07:19 +0100 Subject: [PATCH 626/818] Add refactored e2e tests Signed-off-by: Somtochi Onyekwere --- .github/workflows/e2e-azure.yaml | 74 ++- Makefile | 1 + tests/.gitignore | 6 +- tests/integration/.env.sample | 17 + tests/integration/Makefile | 24 + tests/integration/README.md | 158 +++++ tests/integration/azure_specific_test.go | 383 ++++++++++++ tests/integration/azure_test.go | 136 +++++ tests/integration/flux_test.go | 168 +++++ tests/integration/go.mod | 131 ++++ tests/integration/go.sum | 575 ++++++++++++++++++ tests/integration/image_repo_test.go | 192 ++++++ tests/integration/oci_test.go | 137 +++++ tests/integration/sops_encryption_test.go | 138 +++++ tests/integration/suite_test.go | 297 +++++++++ tests/integration/terraform/azure/aks.tf | 19 + .../terraform/azure/azuredevops.tf | 26 + .../integration/terraform/azure/event-hub.tf | 27 + tests/integration/terraform/azure/keyvault.tf | 61 ++ tests/integration/terraform/azure/main.tf | 35 ++ tests/integration/terraform/azure/outputs.tf | 41 ++ .../integration/terraform/azure/variables.tf | 21 + tests/integration/util_test.go | 413 +++++++++++++ 23 files changed, 3069 insertions(+), 11 deletions(-) create mode 100644 tests/integration/.env.sample create mode 100644 tests/integration/Makefile create mode 100644 tests/integration/README.md create mode 100644 tests/integration/azure_specific_test.go create mode 100644 tests/integration/azure_test.go create mode 100644 tests/integration/flux_test.go create mode 100644 tests/integration/go.mod create mode 100644 tests/integration/go.sum create mode 100644 tests/integration/image_repo_test.go create mode 100644 tests/integration/oci_test.go create mode 100644 tests/integration/sops_encryption_test.go create mode 100644 tests/integration/suite_test.go create mode 100644 tests/integration/terraform/azure/aks.tf create mode 100644 tests/integration/terraform/azure/azuredevops.tf create mode 100644 tests/integration/terraform/azure/event-hub.tf create mode 100644 tests/integration/terraform/azure/keyvault.tf create mode 100644 tests/integration/terraform/azure/main.tf create mode 100644 tests/integration/terraform/azure/outputs.tf create mode 100644 tests/integration/terraform/azure/variables.tf create mode 100644 tests/integration/util_test.go diff --git a/.github/workflows/e2e-azure.yaml b/.github/workflows/e2e-azure.yaml index 9962dd1e..3236c73a 100644 --- a/.github/workflows/e2e-azure.yaml +++ b/.github/workflows/e2e-azure.yaml @@ -23,7 +23,10 @@ permissions: jobs: e2e-amd64-aks: runs-on: ubuntu-22.04 - # This job is currently disabled since if always evaluates to false. Remove the false check when Azure subscription is enabled + defaults: + run: + working-directory: ./tests/azure + # This job is currently disabled. Remove the false check when Azure subscription is enabled. if: false && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) && github.actor != 'dependabot[bot]' steps: - name: Checkout @@ -32,20 +35,18 @@ jobs: uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 with: go-version: 1.20.x - cache-dependency-path: | - **/go.sum - **/go.mod + cache-dependency-path: tests/azure/go.sum - name: Setup Flux CLI run: | make build mkdir -p $HOME/.local/bin mv ./bin/flux $HOME/.local/bin + working-directory: ./ - name: Setup SOPS run: | - wget https://github.com/mozilla/sops/releases/download/v3.7.1/sops-v3.7.1.linux - chmod +x sops-v3.7.1.linux mkdir -p $HOME/.local/bin - mv sops-v3.7.1.linux $HOME/.local/bin/sops + wget https://github.com/mozilla/sops/releases/download/v3.7.1/sops-v3.7.1.linux -O $HOME/.local/bin/sops + chmod +x $HOME/.local/bin/sops - name: Setup Terraform uses: hashicorp/setup-terraform@633666f66e0061ca3b725c73b2ec20cd13a8fdd1 # v2 with: @@ -61,9 +62,62 @@ jobs: ARM_SUBSCRIPTION_ID: ${{ secrets.ARM_SUBSCRIPTION_ID }} ARM_TENANT_ID: ${{ secrets.ARM_TENANT_ID }} run: | - echo $HOME - echo $PATH ls $HOME/.local/bin az login --service-principal -u ${ARM_CLIENT_ID} -p ${ARM_CLIENT_SECRET} -t ${ARM_TENANT_ID} - cd ./tests/azure go test -v -coverprofile cover.out -timeout 60m . + + refactored-e2e-amd64-aks: + runs-on: ubuntu-22.04 + defaults: + run: + working-directory: ./tests/integration + steps: + - name: CheckoutD + uses: actions/checkout@24cb9080177205b6e8c946b17badbe402adc938f # v3.4.0 + - name: Setup Go + uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9 # v4.0.0 + with: + go-version: 1.20.x + cache-dependency-path: tests/integration/go.sum + - name: Setup Flux CLI + run: make build + working-directory: ./ + - name: Setup SOPS + run: | + mkdir -p $HOME/.local/bin + wget -O $HOME/.local/bin/sops https://github.com/mozilla/sops/releases/download/v$SOPS_VER/sops-v$SOPS_VER.linux + chmod +x $HOME/.local/bin/sops + env: + SOPS_VER: 3.7.1 + - name: Authenticate to Azure + uses: Azure/login@92a5484dfaf04ca78a94597f4f19fea633851fa2 # v1.4.6 + with: + creds: '{"clientId":"${{ secrets.ARM_CLIENT_ID }}","clientSecret":"${{ secrets.ARM_CLIENT_SECRET }}","subscriptionId":"${{ secrets.ARM_SUBSCRIPTION_ID }}","tenantId":"${{ secrets.ARM_TENANT_ID }}"}' + - name: Set dynamic variables in .env + run: | + cat > .env < build/ssh/key + export AZUREDEVOPS_SSH=build/ssh/key + touch ./build/ssh/key.pub + echo $AZUREDEVOPS_SSH_PUB_CONTENTS | base64 -d > ./build/ssh/key.pub + export AZUREDEVOPS_SSH_PUB=build/ssh/key.pub + make test-azure diff --git a/Makefile b/Makefile index 563cd0b1..44317f17 100644 --- a/Makefile +++ b/Makefile @@ -19,6 +19,7 @@ all: test build tidy: go mod tidy -compat=1.20 cd tests/azure && go mod tidy -compat=1.20 + cd tests/integration && go mod tidy -compat=1.20 fmt: go fmt ./... diff --git a/tests/.gitignore b/tests/.gitignore index 3ca910aa..0acf4705 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -5,11 +5,14 @@ ### Terraform ### # Local .terraform directories **/.terraform/* +*.terraform.lock.hcl + +# test files +build/ # .tfstate files *.tfstate *.tfstate.* - # Crash log files crash.log @@ -37,4 +40,5 @@ override.tf.json .terraformrc terraform.rc +.env # End of https://www.toptal.com/developers/gitignore/api/terraform diff --git a/tests/integration/.env.sample b/tests/integration/.env.sample new file mode 100644 index 00000000..c77e3ea4 --- /dev/null +++ b/tests/integration/.env.sample @@ -0,0 +1,17 @@ +## Azure +export TF_VAR_azuredevops_org= +export TF_VAR_azuredevops_pat= +export TF_VAR_azure_location= +## These are not terraform variables +## but they are needed for the azure tests +export AZUREDEVOPS_SSH= +export AZUREDEVOPS_SSH_PUB= +## Set the following only when authenticating using Service Principal (suited +## for CI environment). +# export ARM_CLIENT_ID= +# export ARM_CLIENT_SECRET= +# export ARM_SUBSCRIPTION_ID= +# export ARM_TENANT_ID= + +## Common variables +# export TF_VAR_tags='{"environment"="dev", "createdat"='"\"$(date -u +x%Y-%m-%d_%Hh%Mm%Ss)\""'}' diff --git a/tests/integration/Makefile b/tests/integration/Makefile new file mode 100644 index 00000000..a924232f --- /dev/null +++ b/tests/integration/Makefile @@ -0,0 +1,24 @@ +GO_TEST_ARGS ?= +PROVIDER_ARG ?= +TEST_TIMEOUT ?= 60m +FLUX_BINARY ?= ../../bin/flux + +test: sops-check + mkdir -p build + cp $(FLUX_BINARY) build/flux + # These two versions of podinfo are pushed to the cloud registry and used in tests for ImageUpdateAutomation + docker pull ghcr.io/stefanprodan/podinfo:6.0.0 + docker pull ghcr.io/stefanprodan/podinfo:6.0.1 + go test -timeout $(TEST_TIMEOUT) -v ./ $(GO_TEST_ARGS) $(PROVIDER_ARG) + +test-azure: + $(MAKE) test PROVIDER_ARG="-provider azure" GO_TEST_ARGS="--tags azure $(GO_TEST_ARGS)" + +test-gcp: + $(MAKE) test PROVIDER_ARG="-provider gcp" + + +sops-check: +ifeq ($(shell which sops),) + $(error "no sops in PATH, consider installing") +endif diff --git a/tests/integration/README.md b/tests/integration/README.md new file mode 100644 index 00000000..35484802 --- /dev/null +++ b/tests/integration/README.md @@ -0,0 +1,158 @@ +# E2E Tests + +The goal is to verify that Flux integration with cloud providers are actually working now and in the future. +Currently, we only have tests for Azure. + +## General requirements + +These CLI tools need to be installed for each of the tests to run successfully. + +- Docker CLI for registry login. +- [SOPS CLI](https://github.com/mozilla/sops) for encrypting files +- kubectl for applying certain install manifests. + +## Azure + +### Architecture + +The [azure](./terraform/azure) Terraform creates the AKS cluster and related resources to run the tests. It creates: +- An Azure Container Registry +- An Azure Kubernetes Cluster +- Two Azure DevOps repositories +- Azure EventHub for sending notifications +- An Azure Key Vault + +### Requirements + +- Azure account with an active subscription to be able to create AKS and ACR, + and permission to assign roles. Role assignment is required for allowing AKS workloads to access ACR. +- Azure CLI, need to be logged in using `az login` as a User or as a Service Principal +- An Azure DevOps organization, personal access token and ssh keys for accessing repositories + within the organization. The scope required for the personal access token is: + - `Project and Team` - read, write and manage access + - `Code` - Full + - Please take a look at the [terraform provider](https://registry.terraform.io/providers/microsoft/azuredevops/latest/docs/guides/authenticating_using_the_personal_access_token#create-a-personal-access-token) + for more explanation. + - Azure DevOps only supports RSA keys. Please see + [documentation](https://learn.microsoft.com/en-us/azure/devops/repos/git/use-ssh-keys-to-authenticate?view=azure-devops#set-up-ssh-key-authentication) + for how to set up SSH key authentication. + +**NOTE:** To use Service Principal (for example in CI environment), set the +`ARM-*` variables in `.env`, source it and authenticate Azure CLI with: +```console +$ az login --service-principal -u $ARM_CLIENT_ID -p $ARM_CLIENT_SECRET --tenant $ARM_TENANT_ID +``` + +### Permissions + +Following permissions are needed for provisioning the infrastructure and running +the tests: +- `Microsoft.Kubernetes/*` +- `Microsoft.Resources/*` +- `Microsoft.Authorization/roleAssignments/{Read,Write,Delete}` +- `Microsoft.ContainerRegistry/*` +- `Microsoft.ContainerService/*` +- `Microsoft.KeyVault/*` +- `Microsoft.EventHub/*` + + +## Tests + +Each test run is initiated by running `terraform apply` in the provider's terraform directory e.g terraform apply, +it does this by using the [tftestenv package](https://github.com/fluxcd/test-infra/blob/main/tftestenv/testenv.go) +within the `fluxcd/test-infra` repository. It then reads the output of the Terraform to get information needed +for the tests like the kubernetes client ID, the azure DevOps repository urls, the key vault ID etc. This means that +a lot of the communication with the Azure API is offset to Terraform instead of requiring it to be implemented in the test. + +The following tests are currently implemented: + +- Flux can be successfully installed on the cluster using the Flux CLI +- source-controller can clone cloud provider repositories (Azure DevOps, Google Cloud Source Repositories) (https+ssh) +- image-reflector-controller can list tags from provider container Registry image repositories +- kustomize-controller can decrypt secrets using SOPS and provider key vault +- image-automation-controller can create branches and push to cloud repositories (https+ssh) +- source-controller can pull charts from cloud provider container registry Helm repositories + +The following tests are run only for Azure since it is supported in the notification-controller: + +- notification-controller can send commit status to Azure DevOps +- notification-controller can forward events to Azure Event Hub + +### Running tests locally + +1. Ensure that you have the Flux CLI binary that is to be tested built and ready. You can build it by running + `make build` at the root of this repository. The binary is located at `./bin` directory at the root and by default + this is where the Makefile copies the binary for the tests from. If you have it in a different location, you can set it + with the `FLUX_BINARY` variable +2. Copy `.env.sample` to `.env` and add the values for the different variables for the provider that you are running the tests for. +3. Run `make test-`, setting the location of the flux binary with `FLUX_BINARY` variable + +```console +$ make test-azure +make test PROVIDER_ARG="-provider azure" +# These two versions of podinfo are pushed to the cloud registry and used in tests for ImageUpdateAutomation +mkdir -p build +cp ../../bin/flux build/flux +docker pull ghcr.io/stefanprodan/podinfo:6.0.0 +6.0.0: Pulling from stefanprodan/podinfo +Digest: sha256:e7eeab287181791d36c82c904206a845e30557c3a4a66a8143fa1a15655dae97 +Status: Image is up to date for ghcr.io/stefanprodan/podinfo:6.0.0 +ghcr.io/stefanprodan/podinfo:6.0.0 +docker pull ghcr.io/stefanprodan/podinfo:6.0.1 +6.0.1: Pulling from stefanprodan/podinfo +Digest: sha256:1169f220a670cf640e45e1a7ac42dc381a441e9d4b7396432cadb75beb5b5d68 +Status: Image is up to date for ghcr.io/stefanprodan/podinfo:6.0.1 +ghcr.io/stefanprodan/podinfo:6.0.1 +go test -timeout 60m -v ./ -existing -provider azure --tags=integration +2023/03/24 02:32:25 Setting up azure e2e test infrastructure +2023/03/24 02:32:25 Terraform binary: /usr/local/bin/terraform +2023/03/24 02:32:25 Init Terraform +....[some output has been cut out] +2023/03/24 02:39:33 helm repository condition not ready +--- PASS: TestACRHelmRelease (15.31s) +=== RUN TestKeyVaultSops +--- PASS: TestKeyVaultSops (15.98s) +PASS +2023/03/24 02:40:12 Destroying environment... +ok github.com/fluxcd/flux2/tests/integration 947.341s +``` + +In the above, the test created a build directory build/ and the flux cli binary is copied build/flux. It would be used +to bootstrap Flux on the cluster. You can configure the location of the Flux CLI binary by setting the FLUX_BINARY variable. +We also pull two version of `ghcr.io/stefanprodan/podinfo` image. These images are pushed to the Azure Container Registry +and used to test `ImageRepository` and `ImageUpdateAutomation`. The terraform resources get created and the tests are run. + +**IMPORTANT:** In case the terraform infrastructure results in a bad state, maybe due to a crash during the apply, +the whole infrastructure can be destroyed by running terraform destroy in terraform/ directory. + +### Debugging the tests + +For debugging environment provisioning, enable verbose output with `-verbose` test flag. + +```sh +make test-azure GO_TEST_ARGS="-verbose" +``` + +The test environment is destroyed at the end by default. Run the tests with -retain flag to retain the created test infrastructure. + +```sh +make test-azure GO_TEST_ARGS="-retain" +``` +The tests require the infrastructure state to be clean. For re-running the tests with a retained infrastructure, set -existing flag. + +```sh +make test-azure GO_TEST_ARGS="-retain -existing" +``` + +To delete an existing infrastructure created with -retain flag: + +```sh +make test-azure GO_TEST_ARGS="-existing" +``` + +To debug issues on the cluster created by the test (provided you passed in the `-retain` flag): + +```sh +export KUBECONFIG=./build/kubeconfig +kubectl get pods +``` diff --git a/tests/integration/azure_specific_test.go b/tests/integration/azure_specific_test.go new file mode 100644 index 00000000..63f78825 --- /dev/null +++ b/tests/integration/azure_specific_test.go @@ -0,0 +1,383 @@ +//go:build azure +// +build azure + +/* +Copyright 2023 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package integration + +import ( + "context" + "encoding/json" + "fmt" + "io" + "log" + "strings" + "testing" + "time" + + eventhub "github.com/Azure/azure-event-hubs-go/v3" + "github.com/microsoft/azure-devops-go-api/azuredevops" + "github.com/microsoft/azure-devops-go-api/azuredevops/git" + . "github.com/onsi/gomega" + giturls "github.com/whilp/git-urls" + + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" + + kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" + notiv1 "github.com/fluxcd/notification-controller/api/v1" + notiv1beta2 "github.com/fluxcd/notification-controller/api/v1beta2" + events "github.com/fluxcd/pkg/apis/event/v1beta1" + "github.com/fluxcd/pkg/apis/meta" + sourcev1 "github.com/fluxcd/source-controller/api/v1" +) + +func TestEventHubNotification(t *testing.T) { + g := NewWithT(t) + + ctx := context.TODO() + branchName := "test-notification" + testID := branchName + "-" + randStringRunes(5) + + // Start listening to eventhub with latest offset + // TODO(somtochiama): Make here provider agnostic + hub, err := eventhub.NewHubFromConnectionString(cfg.notificationURL) + g.Expect(err).ToNot(HaveOccurred()) + c := make(chan string, 10) + handler := func(ctx context.Context, event *eventhub.Event) error { + c <- string(event.Data) + return nil + } + runtimeInfo, err := hub.GetRuntimeInformation(ctx) + g.Expect(err).ToNot(HaveOccurred()) + g.Expect(len(runtimeInfo.PartitionIDs)).To(Equal(1)) + listenerHandler, err := hub.Receive(ctx, runtimeInfo.PartitionIDs[0], handler, eventhub.ReceiveWithLatestOffset()) + g.Expect(err).ToNot(HaveOccurred()) + + // Setup Flux resources + manifest := `apiVersion: v1 +kind: ConfigMap +metadata: + name: foobar` + repoUrl := getTransportURL(cfg.applicationRepository) + client, err := getRepository(ctx, t.TempDir(), repoUrl, defaultBranch, cfg.defaultAuthOpts) + g.Expect(err).ToNot(HaveOccurred()) + files := make(map[string]io.Reader) + files["configmap.yaml"] = strings.NewReader(manifest) + err = commitAndPushAll(ctx, client, files, branchName) + g.Expect(err).ToNot(HaveOccurred()) + + namespace := corev1.Namespace{ + ObjectMeta: metav1.ObjectMeta{ + Name: testID, + }, + } + g.Expect(testEnv.Create(ctx, &namespace)).To(Succeed()) + defer testEnv.Delete(ctx, &namespace) + + secret := corev1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: testID, + Namespace: testID, + }, + StringData: map[string]string{ + "address": cfg.notificationURL, + }, + } + g.Expect(testEnv.Create(ctx, &secret)).To(Succeed()) + defer testEnv.Delete(ctx, &secret) + + provider := notiv1beta2.Provider{ + ObjectMeta: metav1.ObjectMeta{ + Name: testID, + Namespace: testID, + }, + Spec: notiv1beta2.ProviderSpec{ + Type: "azureeventhub", + Address: repoUrl, + SecretRef: &meta.LocalObjectReference{ + Name: testID, + }, + }, + } + g.Expect(testEnv.Create(ctx, &provider)).To(Succeed()) + defer testEnv.Delete(ctx, &provider) + + alert := notiv1beta2.Alert{ + ObjectMeta: metav1.ObjectMeta{ + Name: testID, + Namespace: testID, + }, + Spec: notiv1beta2.AlertSpec{ + ProviderRef: meta.LocalObjectReference{ + Name: provider.Name, + }, + EventSources: []notiv1.CrossNamespaceObjectReference{ + { + Kind: "Kustomization", + Name: testID, + Namespace: testID, + }, + }, + }, + } + g.Expect(testEnv.Create(ctx, &alert)).ToNot(HaveOccurred()) + defer testEnv.Delete(ctx, &alert) + + g.Eventually(func() bool { + nn := types.NamespacedName{Name: alert.Name, Namespace: alert.Namespace} + alertObj := ¬iv1beta2.Alert{} + err := testEnv.Get(ctx, nn, alertObj) + if err != nil { + return false + } + if err := checkReadyCondition(alertObj); err != nil { + t.Log(err) + return false + } + + return true + }, testTimeout, testInterval).Should(BeTrue()) + + modifyKsSpec := func(spec *kustomizev1.KustomizationSpec) { + spec.Interval = metav1.Duration{Duration: 30 * time.Second} + spec.HealthChecks = []meta.NamespacedObjectKindReference{ + { + APIVersion: "v1", + Kind: "ConfigMap", + Name: "foobar", + Namespace: testID, + }, + } + } + g.Expect(setUpFluxConfig(ctx, testID, nsConfig{ + repoURL: repoUrl, + ref: &sourcev1.GitRepositoryRef{ + Branch: branchName, + }, + path: "./", + modifyKsSpec: modifyKsSpec, + })).To(Succeed()) + t.Cleanup(func() { + err := tearDownFluxConfig(ctx, testID) + if err != nil { + t.Logf("failed to delete resources in '%s' namespace: %s", testID, err) + } + }) + + g.Eventually(func() bool { + err := verifyGitAndKustomization(ctx, testEnv, testID, testID) + if err != nil { + t.Log(err) + return false + } + return true + }, testTimeout, testInterval).Should(BeTrue()) + + // Wait to read even from event hub + g.Eventually(func() bool { + select { + case eventJson := <-c: + event := &events.Event{} + err := json.Unmarshal([]byte(eventJson), event) + if err != nil { + t.Logf("the received event type does not match Flux format, error: %v", err) + return false + } + + if event.InvolvedObject.Kind == kustomizev1.KustomizationKind && + event.InvolvedObject.Name == testID && event.InvolvedObject.Namespace == testID { + return true + } + + return false + default: + return false + } + }, testTimeout, 1*time.Second).Should(BeTrue()) + err = listenerHandler.Close(ctx) + g.Expect(err).ToNot(HaveOccurred()) + err = hub.Close(ctx) + g.Expect(err).ToNot(HaveOccurred()) +} + +func TestAzureDevOpsCommitStatus(t *testing.T) { + g := NewWithT(t) + + ctx := context.TODO() + branchName := "commit-status" + testID := branchName + randStringRunes(5) + manifest := `apiVersion: v1 +kind: ConfigMap +metadata: + name: foobar` + + repoUrl := getTransportURL(cfg.applicationRepository) + tmpDir := t.TempDir() + c, err := getRepository(ctx, tmpDir, repoUrl, defaultBranch, cfg.defaultAuthOpts) + g.Expect(err).ToNot(HaveOccurred()) + files := make(map[string]io.Reader) + files["configmap.yaml"] = strings.NewReader(manifest) + err = commitAndPushAll(ctx, c, files, branchName) + g.Expect(err).ToNot(HaveOccurred()) + + modifyKsSpec := func(spec *kustomizev1.KustomizationSpec) { + spec.HealthChecks = []meta.NamespacedObjectKindReference{ + { + APIVersion: "v1", + Kind: "ConfigMap", + Name: "foobar", + Namespace: testID, + }, + } + } + err = setUpFluxConfig(ctx, testID, nsConfig{ + ref: &sourcev1.GitRepositoryRef{ + Branch: branchName, + }, + repoURL: repoUrl, + path: "./", + modifyKsSpec: modifyKsSpec, + }) + g.Expect(err).ToNot(HaveOccurred()) + t.Cleanup(func() { + err := tearDownFluxConfig(ctx, testID) + if err != nil { + log.Printf("failed to delete resources in '%s' namespace: %s", testID, err) + } + }) + + g.Eventually(func() bool { + err := verifyGitAndKustomization(ctx, testEnv, testID, testID) + if err != nil { + return false + } + return true + }, testTimeout, testInterval) + + secret := corev1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: "azuredevops-token", + Namespace: testID, + }, + StringData: map[string]string{ + "token": cfg.gitPat, + }, + } + g.Expect(testEnv.Create(ctx, &secret)).To(Succeed()) + defer testEnv.Delete(ctx, &secret) + + provider := notiv1beta2.Provider{ + ObjectMeta: metav1.ObjectMeta{ + Name: "azuredevops", + Namespace: testID, + }, + Spec: notiv1beta2.ProviderSpec{ + Type: "azuredevops", + Address: repoUrl, + SecretRef: &meta.LocalObjectReference{ + Name: "azuredevops-token", + }, + }, + } + g.Expect(testEnv.Create(ctx, &provider)).To(Succeed()) + defer testEnv.Delete(ctx, &provider) + + alert := notiv1beta2.Alert{ + ObjectMeta: metav1.ObjectMeta{ + Name: "azuredevops", + Namespace: testID, + }, + Spec: notiv1beta2.AlertSpec{ + ProviderRef: meta.LocalObjectReference{ + Name: provider.Name, + }, + EventSources: []notiv1.CrossNamespaceObjectReference{ + { + Kind: "Kustomization", + Name: testID, + Namespace: testID, + }, + }, + }, + } + g.Expect(testEnv.Create(ctx, &alert)).To(Succeed()) + defer testEnv.Delete(ctx, &alert) + + url, err := ParseAzureDevopsURL(repoUrl) + g.Expect(err).ToNot(HaveOccurred()) + + rev, err := c.Head() + g.Expect(err).ToNot(HaveOccurred()) + + connection := azuredevops.NewPatConnection(url.OrgURL, cfg.gitPat) + client, err := git.NewClient(ctx, connection) + g.Expect(err).ToNot(HaveOccurred()) + getArgs := git.GetStatusesArgs{ + Project: &url.Project, + RepositoryId: &url.Repo, + CommitId: &rev, + } + g.Eventually(func() bool { + statuses, err := client.GetStatuses(ctx, getArgs) + if err != nil { + return false + } + if len(*statuses) != 1 { + return false + } + return true + }, 500*time.Second, 5*time.Second) +} + +type AzureDevOpsURL struct { + OrgURL string + Project string + Repo string +} + +// TODO(somtochiama): move this into fluxcd/pkg and reuse in NC +func ParseAzureDevopsURL(s string) (AzureDevOpsURL, error) { + var args AzureDevOpsURL + u, err := giturls.Parse(s) + if err != nil { + return args, nil + } + + scheme := u.Scheme + if u.Scheme == "ssh" { + scheme = "https" + } + + id := strings.TrimLeft(u.Path, "/") + id = strings.TrimSuffix(id, ".git") + + comp := strings.Split(id, "/") + if len(comp) != 4 { + return args, fmt.Errorf("invalid repository id %q", id) + } + + args = AzureDevOpsURL{ + OrgURL: fmt.Sprintf("%s://%s/%s", scheme, u.Host, comp[0]), + Project: comp[1], + Repo: comp[3], + } + + return args, nil + +} diff --git a/tests/integration/azure_test.go b/tests/integration/azure_test.go new file mode 100644 index 00000000..e88fc49d --- /dev/null +++ b/tests/integration/azure_test.go @@ -0,0 +1,136 @@ +/* +Copyright 2023 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package integration + +import ( + "context" + "fmt" + "os" + + "github.com/fluxcd/pkg/git" + "github.com/fluxcd/test-infra/tftestenv" + tfjson "github.com/hashicorp/terraform-json" +) + +const ( + azureDevOpsKnownHosts = "ssh.dev.azure.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC7Hr1oTWqNqOlzGJOfGJ4NakVyIzf1rXYd4d7wo6jBlkLvCA4odBlL0mDUyZ0/QUfTTqeu+tm22gOsv+VrVTMk6vwRU75gY/y9ut5Mb3bR5BV58dKXyq9A9UeB5Cakehn5Zgm6x1mKoVyf+FFn26iYqXJRgzIZZcZ5V6hrE0Qg39kZm4az48o0AUbf6Sp4SLdvnuMa2sVNwHBboS7EJkm57XQPVU3/QpyNLHbWDdzwtrlS+ez30S3AdYhLKEOxAG8weOnyrtLJAUen9mTkol8oII1edf7mWWbWVf0nBmly21+nZcmCTISQBtdcyPaEno7fFQMDD26/s0lfKob4Kw8H" +) + +// createKubeConfigAKS constructs kubeconfig for an AKS cluster from the +// terraform state output at the given kubeconfig path. +func createKubeConfigAKS(ctx context.Context, state map[string]*tfjson.StateOutput, kcPath string) error { + kubeconfigYaml, ok := state["aks_kubeconfig"].Value.(string) + if !ok || kubeconfigYaml == "" { + return fmt.Errorf("failed to obtain kubeconfig from tf output") + } + return tftestenv.CreateKubeconfigAKS(ctx, kubeconfigYaml, kcPath) +} + +func getTestConfigAKS(ctx context.Context, outputs map[string]*tfjson.StateOutput) (*testConfig, error) { + fleetInfraRepository := outputs["fleet_infra_repository"].Value.(map[string]interface{}) + applicationRepository := outputs["application_repository"].Value.(map[string]interface{}) + + eventHubSas := outputs["event_hub_sas"].Value.(string) + sharedSopsId := outputs["sops_id"].Value.(string) + + kustomizeYaml := ` +resources: + - gotk-components.yaml + - gotk-sync.yaml +patchesStrategicMerge: + - |- + apiVersion: apps/v1 + kind: Deployment + metadata: + name: kustomize-controller + namespace: flux-system + spec: + template: + spec: + containers: + - name: manager + env: + - name: AZURE_AUTH_METHOD + value: msi +` + + privateKeyFile, ok := os.LookupEnv("AZUREDEVOPS_SSH") + if !ok { + return nil, fmt.Errorf("AZUREDEVOPS_SSH env variable isn't set") + } + privateKeyData, err := os.ReadFile(privateKeyFile) + if err != nil { + return nil, fmt.Errorf("error getting azure devops private key, '%s': %w", privateKeyFile, err) + } + + pubKeyFile, ok := os.LookupEnv("AZUREDEVOPS_SSH_PUB") + if !ok { + return nil, fmt.Errorf("AZUREDEVOPS_SSH_PUB env variable isn't set") + } + pubKeyData, err := os.ReadFile(pubKeyFile) + if err != nil { + return nil, fmt.Errorf("error getting ssh pubkey '%s', %w", pubKeyFile, err) + } + + config := &testConfig{ + defaultGitTransport: git.HTTP, + gitUsername: git.DefaultPublicKeyAuthUser, + gitPat: outputs["azure_devops_access_token"].Value.(string), + gitPrivateKey: string(privateKeyData), + gitPublicKey: string(pubKeyData), + knownHosts: azureDevOpsKnownHosts, + fleetInfraRepository: repoConfig{ + http: fleetInfraRepository["http"].(string), + ssh: fleetInfraRepository["ssh"].(string), + }, + applicationRepository: repoConfig{ + http: applicationRepository["http"].(string), + ssh: applicationRepository["ssh"].(string), + }, + notificationURL: eventHubSas, + sopsArgs: fmt.Sprintf("--azure-kv %s", sharedSopsId), + sopsSecretData: map[string]string{ + "sops.azure-kv": fmt.Sprintf(`clientId: %s`, outputs["aks_client_id"].Value.(string)), + }, + kustomizationYaml: kustomizeYaml, + } + + opts, err := authOpts(config.fleetInfraRepository.http, map[string][]byte{ + "password": []byte(config.gitPat), + "username": []byte("git"), + }) + if err != nil { + return nil, err + } + + config.defaultAuthOpts = opts + + return config, nil +} + +// registryLoginACR logs into the Azure Container Registries using the +// provider's CLI tools and returns the test repositories. +func registryLoginACR(ctx context.Context, output map[string]*tfjson.StateOutput) (string, error) { + // NOTE: ACR registry accept dynamic repository creation by just pushing a + // new image with a new repository name. + registryURL := output["acr_url"].Value.(string) + if err := tftestenv.RegistryLoginACR(ctx, registryURL); err != nil { + return "", err + } + + return registryURL, nil +} diff --git a/tests/integration/flux_test.go b/tests/integration/flux_test.go new file mode 100644 index 00000000..6a82f1e6 --- /dev/null +++ b/tests/integration/flux_test.go @@ -0,0 +1,168 @@ +/* +Copyright 2023 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package integration + +import ( + "context" + "fmt" + "io" + "strings" + "testing" + "time" + + "github.com/fluxcd/pkg/git" + sourcev1 "github.com/fluxcd/source-controller/api/v1" + . "github.com/onsi/gomega" + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/types" +) + +func TestFluxInstallation(t *testing.T) { + g := NewWithT(t) + ctx := context.TODO() + g.Eventually(func() bool { + err := verifyGitAndKustomization(ctx, testEnv.Client, "flux-system", "flux-system") + if err != nil { + return false + } + return true + }, 60*time.Second, 5*time.Second) +} + +func TestRepositoryCloning(t *testing.T) { + ctx := context.TODO() + branchName := "feature/branch" + tagName := "v1" + + g := NewWithT(t) + + type testStruct struct { + name string + refType string + cloneType git.TransportType + } + + tests := []testStruct{ + { + name: "ssh-feature-branch", + refType: "branch", + cloneType: git.SSH, + }, + { + name: "ssh-v1", + refType: "tag", + cloneType: git.SSH, + }, + } + + // Not all cloud providers have repositories that support authentication with an accessToken + // we don't run http tests for these. + if cfg.gitPat != "" { + httpTests := []testStruct{ + { + name: "https-feature-branch", + refType: "branch", + cloneType: git.HTTP, + }, + { + name: "https-v1", + refType: "tag", + cloneType: git.HTTP, + }, + } + + tests = append(tests, httpTests...) + } + + t.Log("Creating application sources") + url := getTransportURL(cfg.applicationRepository) + tmpDir := t.TempDir() + client, err := getRepository(ctx, tmpDir, url, defaultBranch, cfg.defaultAuthOpts) + g.Expect(err).ToNot(HaveOccurred()) + + files := make(map[string]io.Reader) + for _, tt := range tests { + manifest := `apiVersion: v1 +kind: ConfigMap +metadata: + name: foobar + ` + name := fmt.Sprintf("cloning-test/%s/configmap.yaml", tt.name) + files[name] = strings.NewReader(manifest) + } + + err = commitAndPushAll(ctx, client, files, branchName) + g.Expect(err).ToNot(HaveOccurred()) + err = createTagAndPush(ctx, client, branchName, tagName) + g.Expect(err).ToNot(HaveOccurred()) + + t.Log("Verifying application-gitops namespaces") + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + g := NewWithT(t) + ref := &sourcev1.GitRepositoryRef{ + Branch: branchName, + } + if tt.refType == "tag" { + ref = &sourcev1.GitRepositoryRef{ + Tag: tagName, + } + } + + url := cfg.applicationRepository.http + if tt.cloneType == git.SSH { + url = cfg.applicationRepository.ssh + } + + testID := fmt.Sprintf("%s-%s", tt.name, randStringRunes(5)) + err := setUpFluxConfig(ctx, testID, nsConfig{ + repoURL: url, + ref: ref, + protocol: tt.cloneType, + objectName: testID, + path: fmt.Sprintf("./cloning-test/%s", tt.name), + }) + g.Expect(err).ToNot(HaveOccurred()) + t.Cleanup(func() { + err := tearDownFluxConfig(ctx, testID) + if err != nil { + t.Logf("failed to delete resources in '%s' namespace: %s", tt.name, err) + } + }) + + g.Eventually(func() bool { + err := verifyGitAndKustomization(ctx, testEnv.Client, testID, testID) + if err != nil { + return false + } + return true + }, 120*time.Second, 5*time.Second).Should(BeTrue()) + + // Wait for configmap to be deployed + g.Eventually(func() bool { + nn := types.NamespacedName{Name: "foobar", Namespace: testID} + cm := &corev1.ConfigMap{} + err = testEnv.Get(ctx, nn, cm) + if err != nil { + return false + } + + return true + }, 120*time.Second, 5*time.Second).Should(BeTrue()) + }) + } +} diff --git a/tests/integration/go.mod b/tests/integration/go.mod new file mode 100644 index 00000000..ab27dbd2 --- /dev/null +++ b/tests/integration/go.mod @@ -0,0 +1,131 @@ +module github.com/fluxcd/flux2/tests/integration + +go 1.18 + +require ( + github.com/Azure/azure-event-hubs-go/v3 v3.6.0 + github.com/fluxcd/helm-controller/api v0.34.1 + github.com/fluxcd/image-automation-controller/api v0.34.1 + github.com/fluxcd/image-reflector-controller/api v0.28.0 + github.com/fluxcd/kustomize-controller/api v1.0.0-rc.4 + github.com/fluxcd/notification-controller/api v1.0.0-rc.4 + github.com/fluxcd/pkg/apis/event v0.5.1 + github.com/fluxcd/pkg/apis/meta v1.1.1 + github.com/fluxcd/pkg/git v0.12.2 + github.com/fluxcd/pkg/git/gogit v0.12.0 + github.com/fluxcd/pkg/runtime v0.39.0 + github.com/fluxcd/source-controller/api v1.0.0-rc.5 + github.com/fluxcd/test-infra/tftestenv v0.0.0-20230531151340-931581bd0a3e + github.com/go-git/go-git/v5 v5.7.0 + github.com/google/go-containerregistry v0.14.0 + github.com/hashicorp/terraform-json v0.16.0 + github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 + github.com/onsi/gomega v1.27.8 + github.com/whilp/git-urls v1.0.0 + k8s.io/api v0.27.3 + k8s.io/apimachinery v0.27.3 + k8s.io/client-go v0.27.3 + sigs.k8s.io/controller-runtime v0.15.0 +) + +require ( + github.com/Azure/azure-amqp-common-go/v4 v4.2.0 // indirect + github.com/Azure/azure-sdk-for-go v65.0.0+incompatible // indirect + github.com/Azure/go-amqp v1.0.0 // indirect + github.com/Azure/go-autorest v14.2.0+incompatible // indirect + github.com/Azure/go-autorest/autorest v0.11.28 // indirect + github.com/Azure/go-autorest/autorest/adal v0.9.21 // indirect + github.com/Azure/go-autorest/autorest/date v0.3.0 // indirect + github.com/Azure/go-autorest/autorest/to v0.4.0 // indirect + github.com/Azure/go-autorest/autorest/validation v0.3.1 // indirect + github.com/Azure/go-autorest/logger v0.2.1 // indirect + github.com/Azure/go-autorest/tracing v0.6.0 // indirect + github.com/Masterminds/semver/v3 v3.2.1 // indirect + github.com/Microsoft/go-winio v0.6.1 // indirect + github.com/ProtonMail/go-crypto v0.0.0-20230518184743-7afd39499903 // indirect + github.com/acomagu/bufpipe v1.0.4 // indirect + github.com/apparentlymart/go-textseg/v13 v13.0.0 // indirect + github.com/cloudflare/circl v1.3.3 // indirect + github.com/containerd/stargz-snapshotter/estargz v0.14.3 // indirect + github.com/cyphar/filepath-securejoin v0.2.3 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/devigned/tab v0.1.1 // indirect + github.com/docker/cli v23.0.1+incompatible // indirect + github.com/docker/distribution v2.8.1+incompatible // indirect + github.com/docker/docker v23.0.1+incompatible // indirect + github.com/docker/docker-credential-helpers v0.7.0 // indirect + github.com/emicklei/go-restful/v3 v3.10.0 // indirect + github.com/emirpasic/gods v1.18.1 // indirect + github.com/evanphx/json-patch/v5 v5.6.0 // indirect + github.com/fluxcd/pkg/apis/acl v0.1.0 // indirect + github.com/fluxcd/pkg/apis/kustomize v1.1.0 // indirect + github.com/fluxcd/pkg/ssh v0.7.4 // indirect + github.com/fluxcd/pkg/version v0.2.2 // indirect + github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect + github.com/go-git/go-billy/v5 v5.4.1 // indirect + github.com/go-logr/logr v1.2.4 // indirect + github.com/go-openapi/jsonpointer v0.19.6 // indirect + github.com/go-openapi/jsonreference v0.20.1 // indirect + github.com/go-openapi/swag v0.22.3 // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang-jwt/jwt/v4 v4.4.2 // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/golang/protobuf v1.5.3 // indirect + github.com/google/gnostic v0.6.9 // indirect + github.com/google/go-cmp v0.5.9 // indirect + github.com/google/gofuzz v1.2.0 // indirect + github.com/google/uuid v1.3.0 // indirect + github.com/hashicorp/errwrap v1.0.0 // indirect + github.com/hashicorp/go-cleanhttp v0.5.2 // indirect + github.com/hashicorp/go-multierror v1.1.1 // indirect + github.com/hashicorp/go-version v1.6.0 // indirect + github.com/hashicorp/hc-install v0.5.0 // indirect + github.com/hashicorp/terraform-exec v0.18.1 // indirect + github.com/imdario/mergo v0.3.15 // indirect + github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect + github.com/josharian/intern v1.0.0 // indirect + github.com/jpillora/backoff v1.0.0 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/kevinburke/ssh_config v1.2.0 // indirect + github.com/klauspost/compress v1.16.0 // indirect + github.com/mailru/easyjson v0.7.7 // indirect + github.com/mitchellh/go-homedir v1.1.0 // indirect + github.com/mitchellh/mapstructure v1.5.0 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect + github.com/opencontainers/go-digest v1.0.0 // indirect + github.com/opencontainers/image-spec v1.1.0-rc2 // indirect + github.com/pjbgf/sha1cd v0.3.0 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/sergi/go-diff v1.3.1 // indirect + github.com/sirupsen/logrus v1.9.0 // indirect + github.com/skeema/knownhosts v1.1.1 // indirect + github.com/spf13/pflag v1.0.5 // indirect + github.com/vbatts/tar-split v0.11.2 // indirect + github.com/xanzy/ssh-agent v0.3.3 // indirect + github.com/zclconf/go-cty v1.13.0 // indirect + golang.org/x/crypto v0.9.0 // indirect + golang.org/x/mod v0.10.0 // indirect + golang.org/x/net v0.10.0 // indirect + golang.org/x/oauth2 v0.6.0 // indirect + golang.org/x/sync v0.2.0 // indirect + golang.org/x/sys v0.8.0 // indirect + golang.org/x/term v0.8.0 // indirect + golang.org/x/text v0.9.0 // indirect + golang.org/x/time v0.3.0 // indirect + golang.org/x/tools v0.9.1 // indirect + google.golang.org/appengine v1.6.7 // indirect + google.golang.org/protobuf v1.30.0 // indirect + gopkg.in/inf.v0 v0.9.1 // indirect + gopkg.in/warnings.v0 v0.1.2 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + k8s.io/apiextensions-apiserver v0.27.3 // indirect + k8s.io/klog/v2 v2.100.1 // indirect + k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f // indirect + k8s.io/utils v0.0.0-20230505201702-9f6742963106 // indirect + sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect + sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect + sigs.k8s.io/yaml v1.3.0 // indirect +) diff --git a/tests/integration/go.sum b/tests/integration/go.sum new file mode 100644 index 00000000..65f998c6 --- /dev/null +++ b/tests/integration/go.sum @@ -0,0 +1,575 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +github.com/AdaLogics/go-fuzz-headers v0.0.0-20230106234847-43070de90fa1 h1:EKPd1INOIyr5hWOWhvpmQpY6tKjeG0hT1s3AMC/9fic= +github.com/Azure/azure-amqp-common-go/v4 v4.2.0 h1:q/jLx1KJ8xeI8XGfkOWMN9XrXzAfVTkyvCxPvHCjd2I= +github.com/Azure/azure-amqp-common-go/v4 v4.2.0/go.mod h1:GD3m/WPPma+621UaU6KNjKEo5Hl09z86viKwQjTpV0Q= +github.com/Azure/azure-event-hubs-go/v3 v3.6.0 h1:UXRi5KewXYoTiekVjrj0gyGfbyGvtbYdot6/4IMf4I4= +github.com/Azure/azure-event-hubs-go/v3 v3.6.0/go.mod h1:UgyRnRU7H5e33igaLHJTqbkoNR1uj0j3MA/n7dABU24= +github.com/Azure/azure-sdk-for-go v65.0.0+incompatible h1:HzKLt3kIwMm4KeJYTdx9EbjRYTySD/t8i1Ee/W5EGXw= +github.com/Azure/azure-sdk-for-go v65.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +github.com/Azure/go-amqp v1.0.0 h1:QfCugi1M+4F2JDTRgVnRw7PYXLXZ9hmqk3+9+oJh3OA= +github.com/Azure/go-amqp v1.0.0/go.mod h1:+bg0x3ce5+Q3ahCEXnCsGG3ETpDQe3MEVnOuT2ywPwc= +github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs= +github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= +github.com/Azure/go-autorest/autorest v0.11.28 h1:ndAExarwr5Y+GaHE6VCaY1kyS/HwwGGyuimVhWsHOEM= +github.com/Azure/go-autorest/autorest v0.11.28/go.mod h1:MrkzG3Y3AH668QyF9KRk5neJnGgmhQ6krbhR8Q5eMvA= +github.com/Azure/go-autorest/autorest/adal v0.9.18/go.mod h1:XVVeme+LZwABT8K5Lc3hA4nAe8LDBVle26gTrguhhPQ= +github.com/Azure/go-autorest/autorest/adal v0.9.21 h1:jjQnVFXPfekaqb8vIsv2G1lxshoW+oGv4MDlhRtnYZk= +github.com/Azure/go-autorest/autorest/adal v0.9.21/go.mod h1:zua7mBUaCc5YnSLKYgGJR/w5ePdMDA6H56upLsHzA9U= +github.com/Azure/go-autorest/autorest/azure/auth v0.4.2 h1:iM6UAvjR97ZIeR93qTcwpKNMpV+/FTWjwEbuPD495Tk= +github.com/Azure/go-autorest/autorest/azure/cli v0.3.1 h1:LXl088ZQlP0SBppGFsRZonW6hSvwgL5gRByMbvUbx8U= +github.com/Azure/go-autorest/autorest/date v0.3.0 h1:7gUk1U5M/CQbp9WoqinNzJar+8KY+LPI6wiWrP/myHw= +github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74= +github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= +github.com/Azure/go-autorest/autorest/mocks v0.4.2 h1:PGN4EDXnuQbojHbU0UWoNvmu9AGVwYHG9/fkDYhtAfw= +github.com/Azure/go-autorest/autorest/mocks v0.4.2/go.mod h1:Vy7OitM9Kei0i1Oj+LvyAWMXJHeKH1MVlzFugfVrmyU= +github.com/Azure/go-autorest/autorest/to v0.4.0 h1:oXVqrxakqqV1UZdSazDOPOLvOIz+XA683u8EctwboHk= +github.com/Azure/go-autorest/autorest/to v0.4.0/go.mod h1:fE8iZBn7LQR7zH/9XU2NcPR4o9jEImooCeWJcYV/zLE= +github.com/Azure/go-autorest/autorest/validation v0.3.1 h1:AgyqjAd94fwNAoTjl/WQXg4VvFeRFpO+UhNyRXqF1ac= +github.com/Azure/go-autorest/autorest/validation v0.3.1/go.mod h1:yhLgjC0Wda5DYXl6JAsWyUe4KVNffhoDhG0zVzUMo3E= +github.com/Azure/go-autorest/logger v0.2.1 h1:IG7i4p/mDa2Ce4TRyAO8IHnVhAVF3RFU+ZtXWSmf4Tg= +github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= +github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo= +github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= +github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= +github.com/Masterminds/semver/v3 v3.2.1 h1:RN9w6+7QoMeJVGyfmbcgs28Br8cvmnucEXnY0rYXWg0= +github.com/Masterminds/semver/v3 v3.2.1/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= +github.com/Masterminds/sprig/v3 v3.2.1/go.mod h1:UoaO7Yp8KlPnJIYWTFkMaqPUYKTfGFPhxNuwnnxkKlk= +github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= +github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= +github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= +github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= +github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= +github.com/ProtonMail/go-crypto v0.0.0-20230518184743-7afd39499903 h1:ZK3C5DtzV2nVAQTx5S5jQvMeDqWtD1By5mOoyY/xJek= +github.com/ProtonMail/go-crypto v0.0.0-20230518184743-7afd39499903/go.mod h1:8TI4H3IbrackdNgv+92dI+rhpCaLqM0IfpgCgenFvRE= +github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= +github.com/acomagu/bufpipe v1.0.4 h1:e3H4WUzM3npvo5uv95QuJM3cQspFNtFBzvJ2oNjKIDQ= +github.com/acomagu/bufpipe v1.0.4/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= +github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= +github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/apparentlymart/go-textseg/v13 v13.0.0 h1:Y+KvPE1NYz0xl601PVImeQfFyEy6iT90AvPUL1NNfNw= +github.com/apparentlymart/go-textseg/v13 v13.0.0/go.mod h1:ZK2fH7c4NqDTLtiYLvIkEghdlcqw7yxLeM89kiTRPUo= +github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= +github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= +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= +github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cloudflare/circl v1.1.0/go.mod h1:prBCrKB9DV4poKZY1l9zBXg2QJY7mvgRvtMxxK7fi4I= +github.com/cloudflare/circl v1.3.3 h1:fE/Qz0QdIGqeWfnwq0RE0R7MI51s0M2E4Ga9kq5AEMs= +github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/containerd/stargz-snapshotter/estargz v0.14.3 h1:OqlDCK3ZVUO6C3B/5FSkDwbkEETK84kQgEeFwDC+62k= +github.com/containerd/stargz-snapshotter/estargz v0.14.3/go.mod h1:KY//uOCIkSuNAHhJogcZtrNHdKrA99/FCCRjE3HD36o= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/cyphar/filepath-securejoin v0.2.3 h1:YX6ebbZCZP7VkM3scTTokDgBL2TY741X51MTk3ycuNI= +github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/devigned/tab v0.1.1 h1:3mD6Kb1mUOYeLpJvTVSDwSg5ZsfSxfvxGRTxRsJsITA= +github.com/devigned/tab v0.1.1/go.mod h1:XG9mPq0dFghrYvoBF3xdRrJzSTX1b7IQrvaL9mzjeJY= +github.com/dimchansky/utfbom v1.1.0 h1:FcM3g+nofKgUteL8dm/UpdRXNC9KmADgTpLKsu0TRo4= +github.com/docker/cli v23.0.1+incompatible h1:LRyWITpGzl2C9e9uGxzisptnxAn1zfZKXy13Ul2Q5oM= +github.com/docker/cli v23.0.1+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68= +github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/docker v23.0.1+incompatible h1:vjgvJZxprTTE1A37nm+CLNAdwu6xZekyoiVlUZEINcY= +github.com/docker/docker v23.0.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker-credential-helpers v0.7.0 h1:xtCHsjxogADNZcdv1pKUHXryefjlVRqWqIhk/uXJp0A= +github.com/docker/docker-credential-helpers v0.7.0/go.mod h1:rETQfLdHNT3foU5kuNkFR1R1V12OJRRO5lzt2D1b5X0= +github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= +github.com/elazarl/goproxy v0.0.0-20221015165544-a0805db90819 h1:RIB4cRk+lBqKK3Oy0r2gRX4ui7tuhiZq2SuTtTCi0/0= +github.com/emicklei/go-restful/v3 v3.10.0 h1:X4gma4HM7hFm6WMeAsTfqA0GOfdNoCzBIkHGoRLGXuM= +github.com/emicklei/go-restful/v3 v3.10.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= +github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= +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= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJCLunww= +github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0= +github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= +github.com/fluxcd/helm-controller/api v0.34.1 h1:oL6GG7weRIqkTlTFRoTY3DJpxqKpAFEoDDsYoxQCa8g= +github.com/fluxcd/helm-controller/api v0.34.1/go.mod h1:1v1UqS5jOgWdMDzvJBgdcY40RminDUO6A0by4IkHd5s= +github.com/fluxcd/image-automation-controller/api v0.34.1 h1:Y2RFhmltELcSGm3lsGgmRcJCBf0SdGlH/PwCxewk4w0= +github.com/fluxcd/image-automation-controller/api v0.34.1/go.mod h1:vRJscxpWXuDMmBj8vlFM3pgpVHqh5hf65RVnCaOnSGo= +github.com/fluxcd/image-reflector-controller/api v0.28.0 h1:2a1UxPU1RHTxl+5YFFB0KuOCHrR3hL0B7fvAPJo2UXY= +github.com/fluxcd/image-reflector-controller/api v0.28.0/go.mod h1:bY28TT8Jv/pvdF/m+c64QCEiCY2BShMe22l1zRDYm4s= +github.com/fluxcd/kustomize-controller/api v1.0.0-rc.4 h1:e5dO5HaFISFNzhfi4zuPniE545vVnEi3VnSBcbxcZqU= +github.com/fluxcd/kustomize-controller/api v1.0.0-rc.4/go.mod h1:UTJu1JMr+rkabWkUWMNiOeFeDu+4ZKfJIK+oqEwOjzc= +github.com/fluxcd/notification-controller/api v1.0.0-rc.4 h1:bDqIirpscGUY0+1u+RKvTEmX43iiZ2xeQLz27FoJJD8= +github.com/fluxcd/notification-controller/api v1.0.0-rc.4/go.mod h1:XL5h5/x46e41rtNc8mwxTKX4kAtgTNuzJS0PV2c0iIQ= +github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= +github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= +github.com/fluxcd/pkg/apis/event v0.5.1 h1:UrEmKwTK/lt42gMZunl8BQBMzjf8PSqGbWDs/GB839c= +github.com/fluxcd/pkg/apis/event v0.5.1/go.mod h1:GzBAzS8bq7751wvNkaSnr3kuwFVuWTPL20D77UgSNJQ= +github.com/fluxcd/pkg/apis/kustomize v1.1.0 h1:Fbv4dCB57r2+fiusozN7at8r7upTz58Z4wWw1njHPyU= +github.com/fluxcd/pkg/apis/kustomize v1.1.0/go.mod h1:CAe9Mjf9KVoTm1V4wpvq/FGXFDSnpBwfww/IG7mw3gM= +github.com/fluxcd/pkg/apis/meta v1.1.1 h1:sLAKLbEu7rRzJ+Mytffu3NcpfdbOBTa6hcpOQzFWm+M= +github.com/fluxcd/pkg/apis/meta v1.1.1/go.mod h1:soCfzjFWbm1mqybDcOywWKTCEYlH3skpoNGTboVk234= +github.com/fluxcd/pkg/git v0.12.2 h1:96xH3hy3WfwiD0DioyJZcGapYT3lmPc2s7jU5UM8buw= +github.com/fluxcd/pkg/git v0.12.2/go.mod h1:9TG4fEfGCF1XHLt9Xs7X2YOmkmWOiwfjH9tdGIQs8/8= +github.com/fluxcd/pkg/git/gogit v0.12.0 h1:0mCwQND0WpCVZYHLWcXJxRvKVcyWxH4JjMQFMaea8Q4= +github.com/fluxcd/pkg/git/gogit v0.12.0/go.mod h1:Kn+GfYfZBBIaXmQj39cQvrDxT/6y8leQxXZ5/B+YYTQ= +github.com/fluxcd/pkg/gittestserver v0.8.4 h1:rA/QUZnfH77ZZG+5xfMqjgEHJdzeeE6Nn1o8cops/bU= +github.com/fluxcd/pkg/runtime v0.39.0 h1:vgmzYS+DT0w8ikX9MqGsOdmMagoiKys2RMGdl/EDbgc= +github.com/fluxcd/pkg/runtime v0.39.0/go.mod h1:0A/0kZv/MPciAj5AoSEDKVeqUFEF6371q7o+zk6l81g= +github.com/fluxcd/pkg/ssh v0.7.4 h1:8GYneCKH2dxrHQBalcDgOCC2NtqD0JO91FlWgvnzrfo= +github.com/fluxcd/pkg/ssh v0.7.4/go.mod h1:9Syc8nVJaZEToPTU4E99j0jZ99w39oZtov+uiNX17sc= +github.com/fluxcd/pkg/version v0.2.2 h1:ZpVXECeLA5hIQMft11iLp6gN3cKcz6UNuVTQPw/bRdI= +github.com/fluxcd/pkg/version v0.2.2/go.mod h1:NGnh/no8S6PyfCDxRFrPY3T5BUnqP48MxfxNRU0z8C0= +github.com/fluxcd/source-controller/api v1.0.0-rc.5 h1:muoGOb/VitVEIOh877Ledi9AvibbyevPqvuH5byWU6g= +github.com/fluxcd/source-controller/api v1.0.0-rc.5/go.mod h1:W6tNXr3mRPhdc5+Jke9OZnuk/3THNzGzRJVhAtLfzss= +github.com/fluxcd/test-infra/tftestenv v0.0.0-20230531151340-931581bd0a3e h1:71jXb0t9pQAGleqRklVtdW38nXVTZ/KqeLSENnBldNk= +github.com/fluxcd/test-infra/tftestenv v0.0.0-20230531151340-931581bd0a3e/go.mod h1:liFlLEXgambGVdWSJ4JzbIHf1Vjpp1HwUyPazPIVZug= +github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= +github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= +github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= +github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY= +github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= +github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= +github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= +github.com/go-git/go-billy/v5 v5.2.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= +github.com/go-git/go-billy/v5 v5.3.1/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= +github.com/go-git/go-billy/v5 v5.4.1 h1:Uwp5tDRkPr+l/TnbHOQzp+tmJfLceOlbVucgpTz8ix4= +github.com/go-git/go-billy/v5 v5.4.1/go.mod h1:vjbugF6Fz7JIflbVpl1hJsGjSHNltrSw45YK/ukIvQg= +github.com/go-git/go-git-fixtures/v4 v4.2.1/go.mod h1:K8zd3kDUAykwTdDCr+I0per6Y6vMiRR/nnVTBtavnB0= +github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20230305113008-0c11038e723f h1:Pz0DHeFij3XFhoBRGUDPzSJ+w2UcK5/0JvF8DRI58r8= +github.com/go-git/go-git/v5 v5.4.2/go.mod h1:gQ1kArt6d+n+BGd+/B/I74HwRTLhth2+zti4ihgckDc= +github.com/go-git/go-git/v5 v5.7.0 h1:t9AudWVLmqzlo+4bqdf7GY+46SUuRsx59SboFxkq2aE= +github.com/go-git/go-git/v5 v5.7.0/go.mod h1:coJHKEOk5kUClpsNlXrUvPrDxY3w3gjHvhcZd8Fodw8= +github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= +github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/zapr v1.2.4 h1:QHVo+6stLbfJmYGkQ7uGHUCu5hnAFAj6mDe6Ea0SeOo= +github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE= +github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= +github.com/go-openapi/jsonreference v0.20.1 h1:FBLnyygC4/IZZr893oiomc9XaghoveYTrLC1F86HID8= +github.com/go-openapi/jsonreference v0.20.1/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= +github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g= +github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= +github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= +github.com/gofrs/uuid v4.2.0+incompatible h1:yyYWMnhkhrKwwr8gAOcOCYxOOscHgDS9yZgBrnJfGa0= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= +github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= +github.com/golang-jwt/jwt/v4 v4.4.2 h1:rcc4lwaZgFMCZ5jxF9ABolDcIHdBytAFgqFPbSJQAYs= +github.com/golang-jwt/jwt/v4 v4.4.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/google/gnostic v0.6.9 h1:ZK/5VhkoX835RikCHpSUJV9a+S3e1zLh59YnyWeBW+0= +github.com/google/gnostic v0.6.9/go.mod h1:Nm8234We1lq6iB9OmlgNv3nH91XLLVZHCDayfA3xq+E= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-containerregistry v0.14.0 h1:z58vMqHxuwvAsVwvKEkmVBz2TlgBgH5k6koEXBtlYkw= +github.com/google/go-containerregistry v0.14.0/go.mod h1:aiJ2fp/SXvkWgmYHioXnbMdlgB8eXiiYOY55gfN91Wk= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= +github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec= +github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-checkpoint v0.5.0/go.mod h1:7nfLNL10NsxqO4iWuW6tWW0HjZuDrwkBuEQsVcpCOgg= +github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= +github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= +github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= +github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/hc-install v0.5.0 h1:D9bl4KayIYKEeJ4vUDe9L5huqxZXczKaykSRcmQ0xY0= +github.com/hashicorp/hc-install v0.5.0/go.mod h1:JyzMfbzfSBSjoDCRPna1vi/24BEDxFaCPfdHtM5SCdo= +github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= +github.com/hashicorp/terraform-exec v0.18.1 h1:LAbfDvNQU1l0NOQlTuudjczVhHj061fNX5H8XZxHlH4= +github.com/hashicorp/terraform-exec v0.18.1/go.mod h1:58wg4IeuAJ6LVsLUeD2DWZZoc/bYi6dzhLHzxM41980= +github.com/hashicorp/terraform-json v0.16.0 h1:UKkeWRWb23do5LNAFlh/K3N0ymn1qTOO8c+85Albo3s= +github.com/hashicorp/terraform-json v0.16.0/go.mod h1:v0Ufk9jJnk6tcIZvScHvetlKfiNTC+WS21mnXIlc0B0= +github.com/huandu/xstrings v1.3.1/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= +github.com/huandu/xstrings v1.3.2/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= +github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= +github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= +github.com/imdario/mergo v0.3.15 h1:M8XP7IuFNsqUx6VPK2P9OSmsYsI/YFaGil0uD21V3dM= +github.com/imdario/mergo v0.3.15/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= +github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= +github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc= +github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= +github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= +github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA= +github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= +github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= +github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.16.0 h1:iULayQNOReoYUe+1qtKOqw9CwJv3aNQu8ivo7lw1HU4= +github.com/klauspost/compress v1.16.0/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= +github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/matryer/is v1.2.0 h1:92UTHpy8CDwaJ08GqLDzhhuixiBUUD1p3AU6PHddz4A= +github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= +github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= +github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 h1:YH424zrwLTlyHSH/GzLMJeu5zhYVZSx5RQxGKm1h96s= +github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5/go.mod h1:PoGiBqKSQK1vIfQ+yVaFcGjDySHvym6FM1cNYnwzbrY= +github.com/mitchellh/cli v1.1.5/go.mod h1:v8+iFts2sPIKUV1ltktPXMCC8fumSKFItNcD2cLtRR4= +github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= +github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= +github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/onsi/ginkgo/v2 v2.9.7 h1:06xGQy5www2oN160RtEZoTvnP2sPhEfePYmCDc2szss= +github.com/onsi/gomega v1.27.8 h1:gegWiwZjBsf2DgiSbf5hpokZ98JVDMcWkUiigk6/KXc= +github.com/onsi/gomega v1.27.8/go.mod h1:2J8vzI/s+2shY9XHRApDkdgPo1TKT7P2u6fXeJKFnNQ= +github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= +github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= +github.com/opencontainers/image-spec v1.1.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= +github.com/opencontainers/image-spec v1.1.0-rc2/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= +github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4= +github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +github.com/prometheus/client_golang v1.16.0 h1:yk/hx9hDbrGHovbci4BY+pRMfSuuat626eFsHb7tmT8= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUooCfx1yqY= +github.com/prometheus/common v0.42.0 h1:EKsfXEYo4JpWMHH5cg+KOUWeuJSov1Id8zGR8eeI1YM= +github.com/prometheus/procfs v0.10.1 h1:kYK1Va/YMlutzCGazswoHKo//tZVlFpKYh+PymziUAg= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= +github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= +github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= +github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= +github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= +github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/skeema/knownhosts v1.1.1 h1:MTk78x9FPgDFVFkDLTrsnnfCJl7g1C/nnKvePgrIngE= +github.com/skeema/knownhosts v1.1.1/go.mod h1:g4fPeYpque7P0xefxtGzV81ihjC8sX2IqpAoNkjxbMo= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/urfave/cli v1.22.4/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/vbatts/tar-split v0.11.2 h1:Via6XqJr0hceW4wff3QRzD5gAk/tatMw/4ZA7cTlIME= +github.com/vbatts/tar-split v0.11.2/go.mod h1:vV3ZuO2yWSVsz+pfFzDG/upWH1JhjOiEaWq6kXyQ3VI= +github.com/whilp/git-urls v1.0.0 h1:95f6UMWN5FKW71ECsXRUd3FVYiXdrE7aX4NZKcPmIjU= +github.com/whilp/git-urls v1.0.0/go.mod h1:J16SAmobsqc3Qcy98brfl5f5+e0clUvg1krgwk/qCfE= +github.com/xanzy/ssh-agent v0.3.0/go.mod h1:3s9xbODqPuuhK9JV1R321M/FlMZSBvE5aY6eAcqrDh0= +github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= +github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= +github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/zclconf/go-cty v1.13.0 h1:It5dfKTTZHe9aeppbNOda3mN7Ag7sg6QkBNm6TkyFa0= +github.com/zclconf/go-cty v1.13.0/go.mod h1:YKQzy/7pZ7iq2jNFzy5go57xdxdWoLLpaEp4u238AE0= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= +go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= +go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= +golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200414173820-0848c9571904/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= +golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= +golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g= +golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk= +golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210326060303-6b1517762897/go.mod h1:uSPa2vr4CLtc/ILN5odXGNXS6mhrKVzTaCXzk9m6W3k= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= +golang.org/x/net v0.6.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 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.6.0 h1:Lh8GPgSKBfWSwFvtuWOfeI3aAAnbXTSutYxJiOJFgIw= +golang.org/x/oauth2 v0.6.0/go.mod h1:ycmewcwgD4Rpr3eZJLSB4Kyyljb3qDh40vJ8STE5HKw= +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= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI= +golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210502180810-71e4cd670f79/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +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= +golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= +golang.org/x/term v0.8.0 h1:n5xxQn2i3PC0yLAbjTpNT85q/Kgzcr2gIoX9OrJUols= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= +golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +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.9.1 h1:8WMNJAz3zrtPmnYC7ISf5dEn3MT0gY7jBJfw27yrrLo= +golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gomodules.xyz/jsonpatch/v2 v2.3.0 h1:8NFhfS6gzxNqjLIYnZxg319wZ5Qjnx4m/CcX+Klzazc= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= +google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +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= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= +google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= +gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= +gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +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.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/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= +gotest.tools/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +k8s.io/api v0.27.3 h1:yR6oQXXnUEBWEWcvPWS0jQL575KoAboQPfJAuKNrw5Y= +k8s.io/api v0.27.3/go.mod h1:C4BNvZnQOF7JA/0Xed2S+aUyJSfTGkGFxLXz9MnpIpg= +k8s.io/apiextensions-apiserver v0.27.3 h1:xAwC1iYabi+TDfpRhxh4Eapl14Hs2OftM2DN5MpgKX4= +k8s.io/apiextensions-apiserver v0.27.3/go.mod h1:BH3wJ5NsB9XE1w+R6SSVpKmYNyIiyIz9xAmBl8Mb+84= +k8s.io/apimachinery v0.27.3 h1:Ubye8oBufD04l9QnNtW05idcOe9Z3GQN8+7PqmuVcUM= +k8s.io/apimachinery v0.27.3/go.mod h1:XNfZ6xklnMCOGGFNqXG7bUrQCoR04dh/E7FprV6pb+E= +k8s.io/client-go v0.27.3 h1:7dnEGHZEJld3lYwxvLl7WoehK6lAq7GvgjxpA3nv1E8= +k8s.io/client-go v0.27.3/go.mod h1:2MBEKuTo6V1lbKy3z1euEGnhPfGZLKTS9tiJ2xodM48= +k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg= +k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f h1:2kWPakN3i/k81b0gvD5C5FJ2kxm1WrQFanWchyKuqGg= +k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f/go.mod h1:byini6yhqGC14c3ebc/QwanvYwhuMWF6yz2F8uwW8eg= +k8s.io/utils v0.0.0-20230505201702-9f6742963106 h1:EObNQ3TW2D+WptiYXlApGNLVy0zm/JIBVY9i+M4wpAU= +k8s.io/utils v0.0.0-20230505201702-9f6742963106/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +sigs.k8s.io/controller-runtime v0.15.0 h1:ML+5Adt3qZnMSYxZ7gAverBLNPSMQEibtzAgp0UPojU= +sigs.k8s.io/controller-runtime v0.15.0/go.mod h1:7ngYvp1MLT+9GeZ+6lH3LOlcHkp/+tzA/fmHa4iq9kk= +sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= +sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= +sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= +sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E= +sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= +sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= diff --git a/tests/integration/image_repo_test.go b/tests/integration/image_repo_test.go new file mode 100644 index 00000000..96abb1f3 --- /dev/null +++ b/tests/integration/image_repo_test.go @@ -0,0 +1,192 @@ +/* +Copyright 2023 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package integration + +import ( + "bytes" + "context" + "fmt" + "io" + "os" + "path/filepath" + "strings" + "testing" + "time" + + . "github.com/onsi/gomega" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + automationv1beta1 "github.com/fluxcd/image-automation-controller/api/v1beta1" + reflectorv1beta2 "github.com/fluxcd/image-reflector-controller/api/v1beta2" + "github.com/fluxcd/pkg/apis/meta" + sourcev1 "github.com/fluxcd/source-controller/api/v1" +) + +func TestImageRepositoryAndAutomation(t *testing.T) { + g := NewWithT(t) + ctx := context.TODO() + branchName := "image-repository" + testID := branchName + "-" + randStringRunes(5) + imageURL := fmt.Sprintf("%s/podinfo", cfg.testRegistry) + + manifest := fmt.Sprintf(`apiVersion: apps/v1 +kind: Deployment +metadata: + name: podinfo + namespace: %[1]s +spec: + selector: + matchLabels: + app: podinfo + template: + metadata: + labels: + app: podinfo + spec: + containers: + - name: podinfod + image: %[2]s:%[3]s # {"$imagepolicy": "%[1]s:podinfo"} + readinessProbe: + exec: + command: + - podcli + - check + - http + - localhost:9898/readyz + initialDelaySeconds: 5 + timeoutSeconds: 5 +`, testID, imageURL, oldPodinfoVersion) + + repoUrl := getTransportURL(cfg.applicationRepository) + client, err := getRepository(ctx, t.TempDir(), repoUrl, defaultBranch, cfg.defaultAuthOpts) + g.Expect(err).ToNot(HaveOccurred()) + files := make(map[string]io.Reader) + files[testID+"/podinfo.yaml"] = strings.NewReader(manifest) + + err = commitAndPushAll(ctx, client, files, branchName) + g.Expect(err).ToNot(HaveOccurred()) + + err = setUpFluxConfig(ctx, testID, nsConfig{ + repoURL: repoUrl, + path: testID, + ref: &sourcev1.GitRepositoryRef{ + Branch: branchName, + }, + }) + g.Expect(err).ToNot(HaveOccurred()) + t.Cleanup(func() { + err := tearDownFluxConfig(ctx, testID) + if err != nil { + t.Logf("failed to delete resources in '%s' namespace: %s", testID, err) + } + }) + + g.Eventually(func() bool { + err := verifyGitAndKustomization(ctx, testEnv.Client, testID, testID) + if err != nil { + return false + } + return true + }, testTimeout, testInterval).Should(BeTrue()) + + imageRepository := reflectorv1beta2.ImageRepository{ + ObjectMeta: metav1.ObjectMeta{ + Name: "podinfo", + Namespace: testID, + }, + Spec: reflectorv1beta2.ImageRepositorySpec{ + Image: imageURL, + Interval: metav1.Duration{ + Duration: 1 * time.Minute, + }, + Provider: infraOpts.Provider, + }, + } + g.Expect(testEnv.Create(ctx, &imageRepository)).To(Succeed()) + defer testEnv.Delete(ctx, &imageRepository) + + imagePolicy := reflectorv1beta2.ImagePolicy{ + ObjectMeta: metav1.ObjectMeta{ + Name: "podinfo", + Namespace: testID, + }, + Spec: reflectorv1beta2.ImagePolicySpec{ + ImageRepositoryRef: meta.NamespacedObjectReference{ + Name: imageRepository.Name, + }, + Policy: reflectorv1beta2.ImagePolicyChoice{ + SemVer: &reflectorv1beta2.SemVerPolicy{ + Range: "6.0.x", + }, + }, + }, + } + g.Expect(testEnv.Create(ctx, &imagePolicy)).To(Succeed()) + defer testEnv.Delete(ctx, &imagePolicy) + + imageAutomation := automationv1beta1.ImageUpdateAutomation{ + ObjectMeta: metav1.ObjectMeta{ + Name: "podinfo", + Namespace: testID, + }, + Spec: automationv1beta1.ImageUpdateAutomationSpec{ + Interval: metav1.Duration{ + Duration: 1 * time.Minute, + }, + SourceRef: automationv1beta1.CrossNamespaceSourceReference{ + Kind: "GitRepository", + Name: testID, + }, + GitSpec: &automationv1beta1.GitSpec{ + Checkout: &automationv1beta1.GitCheckoutSpec{ + Reference: sourcev1.GitRepositoryRef{ + Branch: branchName, + }, + }, + Commit: automationv1beta1.CommitSpec{ + Author: automationv1beta1.CommitUser{ + Email: "imageautomation@example.com", + Name: "imageautomation", + }, + }, + }, + Update: &automationv1beta1.UpdateStrategy{ + Path: testID, + Strategy: automationv1beta1.UpdateStrategySetters, + }, + }, + } + g.Expect(testEnv.Create(ctx, &imageAutomation)).To(Succeed()) + defer testEnv.Delete(ctx, &imageAutomation) + + // Wait for image repository to be ready + g.Eventually(func() bool { + client, err := getRepository(ctx, t.TempDir(), repoUrl, branchName, cfg.defaultAuthOpts) + if err != nil { + return false + } + + b, err := os.ReadFile(filepath.Join(client.Path(), testID, "podinfo.yaml")) + if err != nil { + return false + } + if bytes.Contains(b, []byte(newPodinfoVersion)) == false { + return false + } + return true + }, testTimeout, testInterval).Should(BeTrue()) +} diff --git a/tests/integration/oci_test.go b/tests/integration/oci_test.go new file mode 100644 index 00000000..c95e07d6 --- /dev/null +++ b/tests/integration/oci_test.go @@ -0,0 +1,137 @@ +/* +Copyright 2023 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package integration + +import ( + "context" + "fmt" + "testing" + "time" + + . "github.com/onsi/gomega" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" + + helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" +) + +func TestOCIHelmRelease(t *testing.T) { + g := NewWithT(t) + ctx := context.TODO() + + // Create namespace for test + testID := "oci-helm-" + randStringRunes(5) + namespace := corev1.Namespace{ + ObjectMeta: metav1.ObjectMeta{ + Name: testID, + }, + } + g.Expect(testEnv.Create(ctx, &namespace)).To(Succeed()) + defer testEnv.Delete(ctx, &namespace) + + repoURL := fmt.Sprintf("%s/charts/podinfo", cfg.testRegistry) + err := pushImagesFromURL(repoURL, "ghcr.io/stefanprodan/charts/podinfo:6.2.0", []string{"6.2.0"}) + g.Expect(err).ToNot(HaveOccurred()) + + // Create HelmRepository and wait for it to sync + helmRepository := sourcev1.HelmRepository{ + ObjectMeta: metav1.ObjectMeta{Name: testID, Namespace: testID}, + Spec: sourcev1.HelmRepositorySpec{ + URL: fmt.Sprintf("oci://%s", cfg.testRegistry), + Interval: metav1.Duration{ + Duration: 5 * time.Minute, + }, + Provider: infraOpts.Provider, + PassCredentials: true, + Type: "oci", + }, + } + + g.Expect(testEnv.Create(ctx, &helmRepository)).To(Succeed()) + defer testEnv.Delete(ctx, &helmRepository) + + g.Eventually(func() bool { + obj := &sourcev1.HelmRepository{} + nn := types.NamespacedName{Name: helmRepository.Name, Namespace: helmRepository.Namespace} + err := testEnv.Get(ctx, nn, obj) + if err != nil { + t.Logf("error getting helm repository %s", err.Error()) + return false + } + if err := checkReadyCondition(obj); err != nil { + t.Logf("%v", err) + return false + } + return true + }, testTimeout, testInterval).Should(BeTrue()) + + // create helm release + helmRelease := helmv2.HelmRelease{ + ObjectMeta: metav1.ObjectMeta{Name: testID, Namespace: testID}, + Spec: helmv2.HelmReleaseSpec{ + Chart: helmv2.HelmChartTemplate{ + Spec: helmv2.HelmChartTemplateSpec{ + Interval: &metav1.Duration{ + Duration: 10 * time.Minute, + }, + Chart: "charts/podinfo", + Version: "6.2.0", + SourceRef: helmv2.CrossNamespaceObjectReference{ + Kind: sourcev1.HelmRepositoryKind, + Name: helmRepository.Name, + Namespace: helmRepository.Namespace, + }, + }, + }, + }, + } + + g.Expect(testEnv.Create(ctx, &helmRelease)).To(Succeed()) + defer testEnv.Delete(ctx, &helmRelease) + + g.Eventually(func() bool { + chart := &sourcev1.HelmChart{} + nn := types.NamespacedName{ + Name: fmt.Sprintf("%s-%s", helmRelease.Name, helmRelease.Namespace), + Namespace: helmRelease.Namespace, + } + if err := testEnv.Get(ctx, nn, chart); err != nil { + t.Logf("error getting helm chart %s\n", err.Error()) + return false + } + if err := checkReadyCondition(chart); err != nil { + t.Log(err) + return false + } + + obj := &helmv2.HelmRelease{} + nn = types.NamespacedName{Name: helmRelease.Name, Namespace: helmRelease.Namespace} + if err := testEnv.Get(ctx, nn, obj); err != nil { + t.Logf("error getting helm release %s\n", err.Error()) + return false + } + + if err := checkReadyCondition(obj); err != nil { + t.Log(err) + return false + } + + return true + }, testTimeout, testInterval).Should(BeTrue()) +} diff --git a/tests/integration/sops_encryption_test.go b/tests/integration/sops_encryption_test.go new file mode 100644 index 00000000..053c7ed1 --- /dev/null +++ b/tests/integration/sops_encryption_test.go @@ -0,0 +1,138 @@ +/* +Copyright 2023 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package integration + +import ( + "context" + "fmt" + "io" + "log" + "os" + "testing" + + . "github.com/onsi/gomega" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" + + kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" + "github.com/fluxcd/pkg/apis/meta" + sourcev1 "github.com/fluxcd/source-controller/api/v1" + "github.com/fluxcd/test-infra/tftestenv" +) + +func TestKeyVaultSops(t *testing.T) { + g := NewWithT(t) + ctx := context.TODO() + branchName := "key-vault" + testID := branchName + "-" + randStringRunes(5) + secretYaml := `apiVersion: v1 +kind: Secret +metadata: + name: "test" +stringData: + foo: "bar"` + + repoUrl := getTransportURL(cfg.applicationRepository) + tmpDir := t.TempDir() + client, err := getRepository(ctx, tmpDir, repoUrl, defaultBranch, cfg.defaultAuthOpts) + g.Expect(err).ToNot(HaveOccurred()) + + dir := client.Path() + "/key-vault-sops" + g.Expect(os.Mkdir(dir, 0o700)).To(Succeed()) + + filename := dir + "secret.enc.yaml" + f, err := os.Create(filename) + g.Expect(err).ToNot(HaveOccurred()) + defer f.Close() + + _, err = f.Write([]byte(secretYaml)) + g.Expect(err).ToNot(HaveOccurred()) + g.Expect(f.Sync()).To(Succeed()) + + err = tftestenv.RunCommand(ctx, client.Path(), + fmt.Sprintf("sops --encrypt --encrypted-regex '^(data|stringData)$' %s --in-place %s", cfg.sopsArgs, filename), + tftestenv.RunCommandOptions{}) + g.Expect(err).ToNot(HaveOccurred()) + + r, err := os.Open(filename) + g.Expect(err).ToNot(HaveOccurred()) + + files := make(map[string]io.Reader) + files["key-vault-sops/secret.enc.yaml"] = r + err = commitAndPushAll(ctx, client, files, branchName) + g.Expect(err).ToNot(HaveOccurred()) + + modifyKsSpec := func(spec *kustomizev1.KustomizationSpec) { + spec.Decryption = &kustomizev1.Decryption{ + Provider: "sops", + } + if cfg.sopsSecretData != nil { + spec.Decryption.SecretRef = &meta.LocalObjectReference{ + Name: "sops-keys", + } + } + } + + err = setUpFluxConfig(ctx, testID, nsConfig{ + ref: &sourcev1.GitRepositoryRef{ + Branch: branchName, + }, + repoURL: repoUrl, + path: "./key-vault-sops", + modifyKsSpec: modifyKsSpec, + protocol: cfg.defaultGitTransport, + }) + g.Expect(err).ToNot(HaveOccurred()) + t.Cleanup(func() { + err := tearDownFluxConfig(ctx, testID) + if err != nil { + log.Printf("failed to delete resources in '%s' namespace", testID) + } + }) + + if cfg.sopsSecretData != nil { + secret := corev1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: "sops-keys", + Namespace: testID, + }, + StringData: cfg.sopsSecretData, + } + g.Expect(testEnv.Create(ctx, &secret)).To(Succeed()) + defer testEnv.Delete(ctx, &secret) + } + + g.Eventually(func() bool { + err := verifyGitAndKustomization(ctx, testEnv.Client, testID, testID) + if err != nil { + return false + } + nn := types.NamespacedName{Name: "test", Namespace: testID} + secret := &corev1.Secret{} + err = testEnv.Get(ctx, nn, secret) + if err != nil { + return false + } + + if string(secret.Data["foo"]) == "bar" { + return true + } + + return false + }, testTimeout, testInterval).Should(BeTrue()) +} diff --git a/tests/integration/suite_test.go b/tests/integration/suite_test.go new file mode 100644 index 00000000..f8696caa --- /dev/null +++ b/tests/integration/suite_test.go @@ -0,0 +1,297 @@ +/* +Copyright 2023 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package integration + +import ( + "context" + "flag" + "fmt" + "log" + "math/rand" + "os" + "testing" + "time" + + tfjson "github.com/hashicorp/terraform-json" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" + "k8s.io/client-go/kubernetes/scheme" + + helmv2beta1 "github.com/fluxcd/helm-controller/api/v2beta1" + automationv1beta1 "github.com/fluxcd/image-automation-controller/api/v1beta1" + reflectorv1beta2 "github.com/fluxcd/image-reflector-controller/api/v1beta2" + kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" + notiv1beta2 "github.com/fluxcd/notification-controller/api/v1beta2" + "github.com/fluxcd/pkg/git" + sourcev1 "github.com/fluxcd/source-controller/api/v1" + sourcev1beta2 "github.com/fluxcd/source-controller/api/v1beta2" + "github.com/fluxcd/test-infra/tftestenv" +) + +const ( + // azureTerraformPath is the path to the folder containing the + // terraform files for azure infra + azureTerraformPath = "./terraform/azure" + + // kubeconfigPath is the path of the file containing the kubeconfig + kubeconfigPath = "./build/kubeconfig" + + // default branch to be used when cloning git repositories + defaultBranch = "main" +) + +var ( + // supportedProviders are the providers supported by the test. + supportedProviders = []string{"azure"} + + // cfg is a struct containing different variables needed for the test. + cfg *testConfig + + // infraOpts are the options for running the terraform environment + infraOpts tftestenv.Options + + // versions to tag and push for the podinfo image + oldPodinfoVersion = "6.0.0" + newPodinfoVersion = "6.0.1" + podinfoTags = []string{oldPodinfoVersion, newPodinfoVersion} + + // testEnv is the test environment. It contains test infrastructure and + // kubernetes client of the created cluster. + testEnv *tftestenv.Environment + + // testTimeout is used as a timeout when testing a condition with gomega's eventually + testTimeout = 60 * time.Second + // testInterval is used as an interval when testing a condition with gomega's eventually + testInterval = 5 * time.Second + + random *rand.Rand + + letterRunes = []rune("abcdefghijklmnopqrstuvwxyz1234567890") + + localImg = "ghcr.io/stefanprodan/podinfo" +) + +// testConfig hold different variable that will be needed by the different test functions. +type testConfig struct { + // authentication info for git repositories + gitPat string + gitUsername string + gitPrivateKey string + gitPublicKey string + defaultGitTransport git.TransportType + defaultAuthOpts *git.AuthOptions + knownHosts string + fleetInfraRepository repoConfig + applicationRepository repoConfig + + notificationURL string + + // cloud provider dependent argument to pass to the sops cli + sopsArgs string + // secret data for sops + sopsSecretData map[string]string + // envCredsData are data field for a secret containing environment variables that the Flux deployments + // may need + envCredsData map[string]string + // kustomizationYaml is the content of the kustomization.yaml for customizing the Flux manifests + kustomizationYaml string + + // testRegistry is the registry of the cloud provider. + testRegistry string +} + +// repoConfig contains the http/ssh urls for the created git repositories +// on the various cloud providers. +type repoConfig struct { + http string + ssh string +} + +// getTestConfig gets the test configuration that contains different variables for running the tests +type getTestConfig func(ctx context.Context, output map[string]*tfjson.StateOutput) (*testConfig, error) + +// registryLoginFunc is used to perform registry login against a provider based +// on the terraform state output values. It returns the test registry +// to test against, read from the terraform state output. +type registryLoginFunc func(ctx context.Context, output map[string]*tfjson.StateOutput) (string, error) + +// providerConfig contains the test configurations for the different cloud providers +type providerConfig struct { + terraformPath string + createKubeconfig tftestenv.CreateKubeconfig + getTestConfig getTestConfig + // registryLogin is used to perform registry login. + registryLogin registryLoginFunc +} + +func init() { + utilruntime.Must(sourcev1.AddToScheme(scheme.Scheme)) + utilruntime.Must(sourcev1beta2.AddToScheme(scheme.Scheme)) + utilruntime.Must(kustomizev1.AddToScheme(scheme.Scheme)) + utilruntime.Must(helmv2beta1.AddToScheme(scheme.Scheme)) + utilruntime.Must(reflectorv1beta2.AddToScheme(scheme.Scheme)) + utilruntime.Must(automationv1beta1.AddToScheme(scheme.Scheme)) + utilruntime.Must(notiv1beta2.AddToScheme(scheme.Scheme)) + + random = rand.New(rand.NewSource(time.Now().UnixNano())) +} + +func TestMain(m *testing.M) { + ctx := context.TODO() + + infraOpts.Bindflags(flag.CommandLine) + flag.Parse() + + // Validate the provider. + if infraOpts.Provider == "" { + log.Fatalf("-provider flag must be set to one of %v", supportedProviders) + } + var supported bool + for _, p := range supportedProviders { + if p == infraOpts.Provider { + supported = true + break + } + } + if !supported { + log.Fatalf("Unsupported provider %q, must be one of %v", infraOpts.Provider, supportedProviders) + } + // get provider specific configuration + providerCfg := getProviderConfig(infraOpts.Provider) + if providerCfg == nil { + log.Fatalf("Failed to get provider config for %q", infraOpts.Provider) + } + + // Initialize with non-zero exit code to indicate failure by default unless + // set by a successful test run. + exitCode := 1 + + // Setup Terraform binary and init state + log.Printf("Setting up %s e2e test infrastructure", infraOpts.Provider) + envOpts := []tftestenv.EnvironmentOption{ + tftestenv.WithExisting(infraOpts.Existing), + tftestenv.WithRetain(infraOpts.Retain), + tftestenv.WithVerbose(infraOpts.Verbose), + tftestenv.WithCreateKubeconfig(providerCfg.createKubeconfig), + } + + // Create terraform infrastructure + var err error + testEnv, err = tftestenv.New(ctx, scheme.Scheme, providerCfg.terraformPath, kubeconfigPath, envOpts...) + if err != nil { + log.Fatalf("Failed to provision the test infrastructure: %v", err) + } + + defer func() { + if err := testEnv.Stop(ctx); err != nil { + log.Printf("Failed to stop environment: %v", err) + } + + // Calling exit on panic prevents logging of panic error. + // Exit only on normal return. Explicitly detect panic and log the error + // on panic. + if err := recover(); err == nil { + os.Exit(exitCode) + } else { + log.Printf("panic: %v", err) + } + }() + + // get terrraform infrastructure + outputs, err := testEnv.StateOutput(ctx) + if err != nil { + panic(fmt.Sprintf("Failed to get the terraform state output: %v", err)) + } + + // get provider specific test configuration + cfg, err = providerCfg.getTestConfig(ctx, outputs) + if err != nil { + panic(fmt.Sprintf("Failed to get provider config for %v", err)) + } + + regUrl, err := providerCfg.registryLogin(ctx, outputs) + if err != nil { + panic(fmt.Sprintf("Failed to log into registry: %v", err)) + } + + cfg.testRegistry = regUrl + err = pushTestImages(ctx, cfg.testRegistry, podinfoTags) + if err != nil { + panic(fmt.Sprintf("Failed to push test images: %v", err)) + } + + tmpDir, err := os.MkdirTemp("", "*-flux-test") + if err != nil { + panic(fmt.Sprintf("Failed to create tmp dir: %v", err)) + } + defer func() { + err := os.RemoveAll(tmpDir) + if err != nil { + log.Printf("error removing tmp dir: %s\n", err) + } + }() + + log.Println("Installing flux") + err = installFlux(ctx, tmpDir, kubeconfigPath) + defer func() { + log.Println("Uninstalling Flux") + if err := uninstallFlux(ctx); err != nil { + log.Printf("Failed to uninstall: %v", err) + } + }() + if err != nil { + panic(fmt.Sprintf("error installing Flux: %v", err)) + } + + log.Println("Running e2e tests") + exitCode = m.Run() +} + +func getProviderConfig(provider string) *providerConfig { + switch provider { + case "azure": + return &providerConfig{ + terraformPath: azureTerraformPath, + createKubeconfig: createKubeConfigAKS, + getTestConfig: getTestConfigAKS, + registryLogin: registryLoginACR, + } + } + + return nil +} + +// pushTestImages pushes the local podinfo image to the remote repository specified +// by repoURL. The image should be existing on the machine. +func pushTestImages(ctx context.Context, repoURL string, tags []string) error { + for _, tag := range tags { + remoteImg := fmt.Sprintf("%s/podinfo:%s", repoURL, tag) + err := tftestenv.RetagAndPush(ctx, fmt.Sprintf("%s:%s", localImg, tag), remoteImg) + if err != nil { + return err + } + + } + return nil +} + +func randStringRunes(n int) string { + b := make([]rune, n) + for i := range b { + b[i] = letterRunes[random.Intn(len(letterRunes))] + } + return string(b) +} diff --git a/tests/integration/terraform/azure/aks.tf b/tests/integration/terraform/azure/aks.tf new file mode 100644 index 00000000..122cafa3 --- /dev/null +++ b/tests/integration/terraform/azure/aks.tf @@ -0,0 +1,19 @@ +module "aks" { + source = "git::https://github.com/fluxcd/test-infra.git//tf-modules/azure/aks" + + name = local.name + location = var.azure_location + tags = var.tags +} + +module "acr" { + source = "git::https://github.com/fluxcd/test-infra.git//tf-modules/azure/acr" + + name = local.name + location = var.azure_location + aks_principal_id = [module.aks.principal_id] + resource_group = module.aks.resource_group + tags = var.tags + + depends_on = [module.aks] +} diff --git a/tests/integration/terraform/azure/azuredevops.tf b/tests/integration/terraform/azure/azuredevops.tf new file mode 100644 index 00000000..f8a1a9b8 --- /dev/null +++ b/tests/integration/terraform/azure/azuredevops.tf @@ -0,0 +1,26 @@ +resource "azuredevops_project" "e2e" { + name = local.name + visibility = "private" + version_control = "Git" + work_item_template = "Agile" + description = "Test Project for Flux E2E test - Managed by Terraform" +} + + +resource "azuredevops_git_repository" "fleet_infra" { + project_id = azuredevops_project.e2e.id + name = "fleet-infra-${local.name}" + default_branch = "refs/heads/main" + initialization { + init_type = "Clean" + } +} + +resource "azuredevops_git_repository" "application" { + project_id = azuredevops_project.e2e.id + name = "application-${local.name}" + default_branch = "refs/heads/main" + initialization { + init_type = "Clean" + } +} diff --git a/tests/integration/terraform/azure/event-hub.tf b/tests/integration/terraform/azure/event-hub.tf new file mode 100644 index 00000000..cda95002 --- /dev/null +++ b/tests/integration/terraform/azure/event-hub.tf @@ -0,0 +1,27 @@ +resource "azurerm_eventhub_namespace" "this" { + name = local.name + location = var.azure_location + resource_group_name = module.aks.resource_group + sku = "Basic" + capacity = 1 + tags = var.tags +} + + +resource "azurerm_eventhub" "this" { + name = local.name + namespace_name = azurerm_eventhub_namespace.this.name + resource_group_name = module.aks.resource_group + partition_count = 1 + message_retention = 1 +} + +resource "azurerm_eventhub_authorization_rule" "this" { + name = local.name + resource_group_name = module.aks.resource_group + namespace_name = azurerm_eventhub_namespace.this.name + eventhub_name = azurerm_eventhub.this.name + listen = true + send = true + manage = false +} diff --git a/tests/integration/terraform/azure/keyvault.tf b/tests/integration/terraform/azure/keyvault.tf new file mode 100644 index 00000000..b86adc8e --- /dev/null +++ b/tests/integration/terraform/azure/keyvault.tf @@ -0,0 +1,61 @@ +resource "azurerm_key_vault" "this" { + name = local.name + resource_group_name = module.aks.resource_group + location = var.azure_location + tenant_id = data.azurerm_client_config.current.tenant_id + sku_name = "standard" + tags = var.tags +} + +resource "azurerm_key_vault_access_policy" "admin" { + key_vault_id = azurerm_key_vault.this.id + tenant_id = data.azurerm_client_config.current.tenant_id + object_id = data.azurerm_client_config.current.object_id + + key_permissions = [ + "Create", + "Update", + "Encrypt", + "Delete", + "Get", + "List", + "Purge", + "Recover", + "GetRotationPolicy", + "SetRotationPolicy" + ] + + secret_permissions = [ + "Get", + "Delete", + "Purge", + "Recover" + ] + +} + +resource "azurerm_key_vault_access_policy" "cluster_binding" { + key_vault_id = azurerm_key_vault.this.id + tenant_id = data.azurerm_client_config.current.tenant_id + object_id = module.aks.principal_id + + key_permissions = [ + "Decrypt", + "Encrypt", + ] +} + +resource "azurerm_key_vault_key" "sops" { + depends_on = [azurerm_key_vault_access_policy.admin] + + name = "sops" + key_vault_id = azurerm_key_vault.this.id + key_type = "RSA" + key_size = 2048 + tags = var.tags + + key_opts = [ + "decrypt", + "encrypt", + ] +} diff --git a/tests/integration/terraform/azure/main.tf b/tests/integration/terraform/azure/main.tf new file mode 100644 index 00000000..e4d22b29 --- /dev/null +++ b/tests/integration/terraform/azure/main.tf @@ -0,0 +1,35 @@ +terraform { + required_providers { + azurerm = { + source = "hashicorp/azurerm" + version = ">=3.20.0" + } + azuread = { + source = "hashicorp/azuread" + version = ">=2.28.0" + } + azuredevops = { + source = "microsoft/azuredevops" + version = ">=0.2.2" + } + } +} + +provider "azurerm" { + features {} +} + +provider "azuredevops" { + org_service_url = "https://dev.azure.com/${var.azuredevops_org}" + personal_access_token = var.azuredevops_pat +} + +data "azurerm_client_config" "current" {} + +resource "random_pet" "suffix" { + separator = "o" +} + +locals { + name = "e2e${random_pet.suffix.id}" +} diff --git a/tests/integration/terraform/azure/outputs.tf b/tests/integration/terraform/azure/outputs.tf new file mode 100644 index 00000000..a7f08904 --- /dev/null +++ b/tests/integration/terraform/azure/outputs.tf @@ -0,0 +1,41 @@ +output "aks_kubeconfig" { + description = "kubeconfig of the created AKS cluster" + value = module.aks.kubeconfig + sensitive = true +} + +output "azure_devops_access_token" { + sensitive = true + value = var.azuredevops_pat +} + +output "fleet_infra_repository" { + value = { + http = azuredevops_git_repository.fleet_infra.remote_url + ssh = "ssh://git@ssh.dev.azure.com/v3/${var.azuredevops_org}/${azuredevops_git_repository.fleet_infra.project_id}/${azuredevops_git_repository.fleet_infra.name}" + } +} + +output "application_repository" { + value = { + http = azuredevops_git_repository.application.remote_url + ssh = "ssh://git@ssh.dev.azure.com/v3/${var.azuredevops_org}/${azuredevops_git_repository.application.project_id}/${azuredevops_git_repository.application.name}" + } +} + +output "aks_client_id" { + value = module.aks.kubelet_client_id +} + +output "event_hub_sas" { + value = azurerm_eventhub_authorization_rule.this.primary_connection_string + sensitive = true +} + +output "sops_id" { + value = azurerm_key_vault_key.sops.id +} + +output "acr_url" { + value = module.acr.registry_url +} diff --git a/tests/integration/terraform/azure/variables.tf b/tests/integration/terraform/azure/variables.tf new file mode 100644 index 00000000..8f3b9376 --- /dev/null +++ b/tests/integration/terraform/azure/variables.tf @@ -0,0 +1,21 @@ +variable "azuredevops_org" { + type = string + description = "Name of Azure DevOps organizations were the repositories will be created" +} + +variable "azure_location" { + type = string + description = "Location of the resource group" + default = "eastus" +} + +variable "tags" { + type = map(string) + default = {} + description = "Tags for created Azure resources" +} + +variable "azuredevops_pat" { + type = string + description = "Personal access token for Azure DevOps repository" +} diff --git a/tests/integration/util_test.go b/tests/integration/util_test.go new file mode 100644 index 00000000..017bf193 --- /dev/null +++ b/tests/integration/util_test.go @@ -0,0 +1,413 @@ +/* +Copyright 2023 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package integration + +import ( + "context" + "errors" + "fmt" + "io" + "net/url" + "os" + "strings" + "time" + + extgogit "github.com/go-git/go-git/v5" + "github.com/go-git/go-git/v5/plumbing" + "github.com/go-git/go-git/v5/plumbing/object" + "github.com/google/go-containerregistry/pkg/crane" + corev1 "k8s.io/api/core/v1" + apierrors "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" + kerrors "k8s.io/apimachinery/pkg/util/errors" + "sigs.k8s.io/controller-runtime/pkg/client" + + kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" + "github.com/fluxcd/pkg/apis/meta" + "github.com/fluxcd/pkg/git" + "github.com/fluxcd/pkg/git/gogit" + "github.com/fluxcd/pkg/git/repository" + "github.com/fluxcd/pkg/runtime/conditions" + sourcev1 "github.com/fluxcd/source-controller/api/v1" + "github.com/fluxcd/test-infra/tftestenv" +) + +// installFlux adds the core Flux components to the cluster specified in the kubeconfig file. +func installFlux(ctx context.Context, tmpDir string, kubeconfigPath string) error { + // Create flux-system namespace + namespace := corev1.Namespace{ + ObjectMeta: metav1.ObjectMeta{ + Name: "flux-system", + }, + } + err := testEnv.Create(ctx, &namespace) + if err != nil { + return err + } + + repoURL := getTransportURL(cfg.fleetInfraRepository) + if cfg.kustomizationYaml != "" { + files := make(map[string]io.Reader) + files["clusters/e2e/flux-system/kustomization.yaml"] = strings.NewReader(cfg.kustomizationYaml) + files["clusters/e2e/flux-system/gotk-components.yaml"] = strings.NewReader("") + files["clusters/e2e/flux-system/gotk-sync.yaml"] = strings.NewReader("") + c, err := getRepository(ctx, tmpDir, repoURL, defaultBranch, cfg.defaultAuthOpts) + if err != nil { + return err + } + + err = commitAndPushAll(ctx, c, files, defaultBranch) + if err != nil { + return err + } + } + + var bootstrapArgs string + if cfg.defaultGitTransport == git.SSH { + f, err := os.CreateTemp("", "flux-e2e-ssh-key-*") + if err != nil { + return err + } + err = os.WriteFile(f.Name(), []byte(cfg.gitPrivateKey), 0o644) + if err != nil { + return err + } + bootstrapArgs = fmt.Sprintf("--private-key-file=%s -s", f.Name()) + } else { + bootstrapArgs = fmt.Sprintf("--token-auth --password=%s", cfg.gitPat) + } + + bootstrapCmd := fmt.Sprintf("./build/flux bootstrap git --url=%s %s --kubeconfig=%s --path=clusters/e2e "+ + " --components-extra image-reflector-controller,image-automation-controller", + repoURL, bootstrapArgs, kubeconfigPath) + + return tftestenv.RunCommand(ctx, "./", bootstrapCmd, tftestenv.RunCommandOptions{ + Timeout: 15 * time.Minute, + }) +} + +func uninstallFlux(ctx context.Context) error { + uninstallCmd := fmt.Sprintf("./build/flux uninstall --kubeconfig %s -s", kubeconfigPath) + if err := tftestenv.RunCommand(ctx, "./", uninstallCmd, tftestenv.RunCommandOptions{ + Timeout: 15 * time.Minute, + }); err != nil { + return err + } + return nil +} + +// verifyGitAndKustomization checks that the gitrespository and kustomization combination are working properly. +func verifyGitAndKustomization(ctx context.Context, kubeClient client.Client, namespace, name string) error { + nn := types.NamespacedName{ + Name: name, + Namespace: namespace, + } + source := &sourcev1.GitRepository{} + if err := kubeClient.Get(ctx, nn, source); err != nil { + return err + } + if err := checkReadyCondition(source); err != nil { + return err + } + + kustomization := &kustomizev1.Kustomization{} + if err := kubeClient.Get(ctx, nn, kustomization); err != nil { + return err + } + if err := checkReadyCondition(kustomization); err != nil { + return err + } + + return nil +} + +type nsConfig struct { + repoURL string + ref *sourcev1.GitRepositoryRef + protocol git.TransportType + objectName string + path string + modifyKsSpec func(spec *kustomizev1.KustomizationSpec) +} + +// setUpFluxConfigs creates the namespace, then creates the git secret, +// git repository and kustomization in that namespace +func setUpFluxConfig(ctx context.Context, name string, opts nsConfig) error { + transport := cfg.defaultGitTransport + if opts.protocol != "" { + transport = opts.protocol + } + + namespace := corev1.Namespace{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + } + if err := testEnv.Create(ctx, &namespace); err != nil && !apierrors.IsAlreadyExists(err) { + return err + } + + secret := corev1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: "git-credentials", + Namespace: name, + }, + } + + secret.StringData = map[string]string{ + "username": cfg.gitUsername, + "password": cfg.gitPat, + } + + if transport == git.SSH { + secret.StringData = map[string]string{ + "identity": cfg.gitPrivateKey, + "identity.pub": cfg.gitPublicKey, + "known_hosts": cfg.knownHosts, + } + } + if err := testEnv.Create(ctx, &secret); err != nil { + return err + } + + ref := &sourcev1.GitRepositoryRef{ + Branch: name, + } + + if opts.ref != nil { + ref = opts.ref + } + + gitSpec := &sourcev1.GitRepositorySpec{ + Interval: metav1.Duration{ + Duration: 1 * time.Minute, + }, + Reference: ref, + SecretRef: &meta.LocalObjectReference{ + Name: secret.Name, + }, + URL: opts.repoURL, + } + + source := &sourcev1.GitRepository{ + ObjectMeta: metav1.ObjectMeta{Name: name, Namespace: namespace.Name}, + Spec: *gitSpec, + } + if err := testEnv.Create(ctx, source); err != nil { + return err + } + + ksSpec := &kustomizev1.KustomizationSpec{ + Path: opts.path, + TargetNamespace: name, + SourceRef: kustomizev1.CrossNamespaceSourceReference{ + Kind: sourcev1.GitRepositoryKind, + Name: source.Name, + Namespace: source.Namespace, + }, + Interval: metav1.Duration{ + Duration: 1 * time.Minute, + }, + Prune: true, + } + if opts.modifyKsSpec != nil { + opts.modifyKsSpec(ksSpec) + } + kustomization := &kustomizev1.Kustomization{ + ObjectMeta: metav1.ObjectMeta{Name: name, Namespace: namespace.Name}, + Spec: *ksSpec, + } + + return testEnv.Create(ctx, kustomization) +} + +func tearDownFluxConfig(ctx context.Context, name string) error { + var allErr []error + + source := &sourcev1.GitRepository{ObjectMeta: metav1.ObjectMeta{Name: name, Namespace: name}} + if err := testEnv.Delete(ctx, source); err != nil { + allErr = append(allErr, err) + } + + kustomization := &kustomizev1.Kustomization{ObjectMeta: metav1.ObjectMeta{Name: name, Namespace: name}} + if err := testEnv.Delete(ctx, kustomization); err != nil { + allErr = append(allErr, err) + } + + namespace := corev1.Namespace{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + } + if err := testEnv.Delete(ctx, &namespace); err != nil { + allErr = append(allErr, err) + } + + return kerrors.NewAggregate(allErr) +} + +// getRepository and clones the git repository to the directory. +func getRepository(ctx context.Context, dir, repoURL, branchName string, authOpts *git.AuthOptions) (*gogit.Client, error) { + c, err := gogit.NewClient(dir, authOpts, gogit.WithSingleBranch(false), gogit.WithDiskStorage()) + if err != nil { + return nil, err + } + + _, err = c.Clone(ctx, repoURL, repository.CloneConfig{ + CheckoutStrategy: repository.CheckoutStrategy{ + Branch: branchName, + }, + }) + if err != nil { + return nil, err + } + + return c, nil +} + +// commitAndPushAll checks out to the specified branch, creates the files, commits and then pushes them to +// the remote git repository. +func commitAndPushAll(ctx context.Context, client *gogit.Client, files map[string]io.Reader, branchName string) error { + err := client.SwitchBranch(ctx, branchName) + if err != nil && !errors.Is(err, plumbing.ErrReferenceNotFound) { + return err + } + + _, err = client.Commit(git.Commit{ + Author: git.Signature{ + Name: git.DefaultPublicKeyAuthUser, + Email: "test@example.com", + When: time.Now(), + }, + }, repository.WithFiles(files)) + if err != nil { + if errors.Is(err, git.ErrNoStagedFiles) { + return nil + } + + return err + } + + err = client.Push(ctx, repository.PushConfig{}) + if err != nil { + return fmt.Errorf("unable to push: %s", err) + } + + return nil +} + +func createTagAndPush(ctx context.Context, client *gogit.Client, branchName, newTag string) error { + repo, err := extgogit.PlainOpen(client.Path()) + if err != nil { + return err + } + + ref, err := repo.Reference(plumbing.NewBranchReferenceName(branchName), false) + if err != nil { + return err + } + + tags, err := repo.TagObjects() + if err != nil { + return err + } + + err = tags.ForEach(func(tag *object.Tag) error { + if tag.Name == newTag { + err = repo.DeleteTag(tag.Name) + if err != nil { + return err + } + } + + return nil + }) + if err != nil { + return fmt.Errorf("error deleting local tag: %w", err) + } + + // Delete remote tag + if err := client.Push(ctx, repository.PushConfig{ + Refspecs: []string{fmt.Sprintf(":refs/tags/%s", newTag)}, + Force: true, + }); err != nil && !errors.Is(err, extgogit.NoErrAlreadyUpToDate) { + return fmt.Errorf("unable to delete existing tag: %w", err) + } + + sig := &object.Signature{ + Name: git.DefaultPublicKeyAuthUser, + Email: "test@example.com", + When: time.Now(), + } + if _, err = repo.CreateTag(newTag, ref.Hash(), &extgogit.CreateTagOptions{ + Tagger: sig, + Message: "create tag", + }); err != nil { + return fmt.Errorf("unable to create tag: %w", err) + } + + return client.Push(ctx, repository.PushConfig{ + Refspecs: []string{"refs/tags/*:refs/tags/*"}, + }) +} + +func pushImagesFromURL(repoURL, imgURL string, tags []string) error { + img, err := crane.Pull(imgURL) + if err != nil { + return err + } + + for _, tag := range tags { + if err := crane.Push(img, fmt.Sprintf("%s:%s", repoURL, tag)); err != nil { + return err + } + } + + return nil +} + +func getTransportURL(repoCfg repoConfig) string { + if cfg.defaultGitTransport == git.SSH { + return repoCfg.ssh + } + + return repoCfg.http +} + +func authOpts(repoURL string, authData map[string][]byte) (*git.AuthOptions, error) { + u, err := url.Parse(repoURL) + if err != nil { + return nil, err + } + + return git.NewAuthOptions(*u, authData) +} + +// checkReadyCondition checks for a Ready condition, it returns nil if the condition is true +// or an error (with the message if the Ready condition is present). +func checkReadyCondition(from conditions.Getter) error { + if conditions.IsReady(from) { + return nil + } + errMsg := fmt.Sprintf("object not ready") + readyMsg := conditions.GetMessage(from, meta.ReadyCondition) + if readyMsg != "" { + errMsg += ": " + readyMsg + } + return errors.New(errMsg) +} From 7c1b8979198daeef50ed232d5023bccf768ff15d Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Wed, 21 Jun 2023 20:43:07 +0100 Subject: [PATCH 627/818] Add terraform files and config for GCP Signed-off-by: Somtochi Onyekwere --- tests/.gitignore | 1 + tests/integration/.env.sample | 9 ++ tests/integration/README.md | 46 +++++++ tests/integration/gcp_test.go | 129 +++++++++++++++++++ tests/integration/suite_test.go | 13 +- tests/integration/terraform/gcp/main.tf | 49 +++++++ tests/integration/terraform/gcp/outputs.tf | 28 ++++ tests/integration/terraform/gcp/variables.tf | 37 ++++++ 8 files changed, 310 insertions(+), 2 deletions(-) create mode 100644 tests/integration/gcp_test.go create mode 100644 tests/integration/terraform/gcp/main.tf create mode 100644 tests/integration/terraform/gcp/outputs.tf create mode 100644 tests/integration/terraform/gcp/variables.tf diff --git a/tests/.gitignore b/tests/.gitignore index 0acf4705..fda47f9d 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -13,6 +13,7 @@ build/ # .tfstate files *.tfstate *.tfstate.* +*.terraform.lock.hcl # Crash log files crash.log diff --git a/tests/integration/.env.sample b/tests/integration/.env.sample index c77e3ea4..767e9b7e 100644 --- a/tests/integration/.env.sample +++ b/tests/integration/.env.sample @@ -13,5 +13,14 @@ export AZUREDEVOPS_SSH_PUB= # export ARM_SUBSCRIPTION_ID= # export ARM_TENANT_ID= +## GCP +export TF_VAR_gcp_project_id= +export TF_VAR_gcp_zone= +export TF_VAR_gcp_keyring= +export TF_VAR_gcp_crypto_key= +## Set the following only when using service account. +## Provide absolute path to the service account JSON key file. +# export GOOGLE_APPLICATION_CREDENTIALS= + ## Common variables # export TF_VAR_tags='{"environment"="dev", "createdat"='"\"$(date -u +x%Y-%m-%d_%Hh%Mm%Ss)\""'}' diff --git a/tests/integration/README.md b/tests/integration/README.md index 35484802..f4232f1d 100644 --- a/tests/integration/README.md +++ b/tests/integration/README.md @@ -55,6 +55,52 @@ the tests: - `Microsoft.KeyVault/*` - `Microsoft.EventHub/*` +## GCP + +### Architecture + +The [gcp](./terraform/gcp) terraform files create the GKE cluster and related resources to run the tests. It creates: +- An Google Container Registry and Artifact Registry +- An Google Kubernetes Cluster +- Two Google Cloud Source Repositories + +Note: It doesn't create Google KMS keyrings and crypto keys because these cannot be destroyed. Instead, you have +to pass in the crypto key and keyring that would be used to test the sops encryption in Flux. Please see `.env.sample` +for the terraform variables + +### Requirements + +- GCP account with an active project to be able to create GKE and GCR, and permission to assign roles. +- Existing GCP KMS keyring and crypto key. +- gcloud CLI, need to be logged in using `gcloud auth login` as a User (not a + Service Account), configure application default credentials with `gcloud auth + application-default login` and docker credential helper with `gcloud auth configure-docker`. + + **NOTE:** To use Service Account (for example in CI environment), set + `GOOGLE_APPLICATION_CREDENTIALS` variable in `.env` with the path to the JSON + key file, source it and authenticate gcloud CLI with: + ```console + $ gcloud auth activate-service-account --key-file=$GOOGLE_APPLICATION_CREDENTIALS + ``` + Depending on the Container/Artifact Registry host used in the test, authenticate + docker accordingly + ```console + $ gcloud auth print-access-token | docker login -u oauth2accesstoken --password-stdin https://us-central1-docker.pkg.dev + $ gcloud auth print-access-token | docker login -u oauth2accesstoken --password-stdin https://gcr.io + ``` + In this case, the GCP client in terraform uses the Service Account to + authenticate and the gcloud CLI is used only to authenticate with Google + Container Registry and Google Artifact Registry. + + **NOTE FOR CI USAGE:** When saving the JSON key file as a CI secret, compress + the file content with + ```console + $ cat key.json | jq -r tostring + ``` + to prevent aggressive masking in the logs. Refer + [aggressive replacement in logs](https://github.com/google-github-actions/auth/blob/v1.1.0/docs/TROUBLESHOOTING.md#aggressive--replacement-in-logs) + for more details. +- Register SSH Keys with Google Cloud. # add docs ## Tests diff --git a/tests/integration/gcp_test.go b/tests/integration/gcp_test.go new file mode 100644 index 00000000..02bc6ab4 --- /dev/null +++ b/tests/integration/gcp_test.go @@ -0,0 +1,129 @@ +/* +Copyright 2023 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package integration + +import ( + "context" + "fmt" + "io" + "os" + "strings" + + "github.com/fluxcd/pkg/git" + "github.com/fluxcd/test-infra/tftestenv" + tfjson "github.com/hashicorp/terraform-json" +) + +const ( + gkeDevOpsKnownHosts = "[source.developers.google.com]:2022 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBB5Iy4/cq/gt/fPqe3uyMy4jwv1Alc94yVPxmnwNhBzJqEV5gRPiRk5u4/JJMbbu9QUVAguBABxL7sBZa5PH/xY=" +) + +// createKubeConfigGKE constructs kubeconfig for a GKE cluster from the +// terraform state output at the given kubeconfig path. +func createKubeConfigGKE(ctx context.Context, state map[string]*tfjson.StateOutput, kcPath string) error { + kubeconfigYaml, ok := state["kubeconfig"].Value.(string) + if !ok || kubeconfigYaml == "" { + return fmt.Errorf("failed to obtain kubeconfig from tf output") + } + return tftestenv.CreateKubeconfigGKE(ctx, kubeconfigYaml, kcPath) +} + +// registryLoginGCR logs into the container/artifact registries using the +// provider's CLI tools and returns a list of test repositories. +func registryLoginGCR(ctx context.Context, output map[string]*tfjson.StateOutput) (string, error) { + // NOTE: ACR registry accept dynamic repository creation by just pushing a + // new image with a new repository name. + project := output["gcp_project"].Value.(string) + region := output["gcp_region"].Value.(string) + repositoryID := output["artifact_registry_id"].Value.(string) + artifactRegistryURL, artifactRepoURL := tftestenv.GetGoogleArtifactRegistryAndRepository(project, region, repositoryID) + if err := tftestenv.RegistryLoginGCR(ctx, artifactRegistryURL); err != nil { + return "", err + } + + return artifactRepoURL, nil +} + +func getTestConfigGKE(ctx context.Context, outputs map[string]*tfjson.StateOutput) (*testConfig, error) { + sharedSopsId := outputs["sops_id"].Value.(string) + + privateKeyFile, ok := os.LookupEnv("GCP_SOURCEREPO_SSH") + if !ok { + return nil, fmt.Errorf("GCP_SOURCEREPO_SSH env variable isn't set") + } + privateKeyData, err := os.ReadFile(privateKeyFile) + if err != nil { + return nil, fmt.Errorf("error getting gcp source repositories private key, '%s': %w", privateKeyFile, err) + } + + pubKeyFile, ok := os.LookupEnv("GCP_SOURCEREPO_SSH_PUB") + if !ok { + return nil, fmt.Errorf("GCP_SOURCEREPO_SSH_PUB env variable isn't set") + } + pubKeyData, err := os.ReadFile(pubKeyFile) + if err != nil { + return nil, fmt.Errorf("error getting ssh pubkey '%s', %w", pubKeyFile, err) + } + + config := &testConfig{ + defaultGitTransport: git.SSH, + gitUsername: "git", + gitPrivateKey: string(privateKeyData), + gitPublicKey: string(pubKeyData), + knownHosts: gkeDevOpsKnownHosts, + fleetInfraRepository: repoConfig{ + ssh: outputs["fleet_infra_url"].Value.(string), + }, + applicationRepository: repoConfig{ + ssh: outputs["application_url"].Value.(string), + }, + sopsArgs: fmt.Sprintf("--gcp-kms %s", sharedSopsId), + } + + opts, err := authOpts(config.fleetInfraRepository.ssh, map[string][]byte{ + "identity": []byte(config.gitPrivateKey), + "known_hosts": []byte(config.knownHosts), + }) + if err != nil { + return nil, err + } + + config.defaultAuthOpts = opts + + // In Azure, the repository is initialized with a default branch through + // terraform. We have to do it manually here for GCP to prevent errors + // when trying to clone later. We only need to do it for the application repository + // since flux bootstrap pushes to the main branch. + files := make(map[string]io.Reader) + files["README.md"] = strings.NewReader("# Flux test repo") + tmpDir, err := os.MkdirTemp("", "*-flux-test") + if err != nil { + return nil, err + } + defer os.RemoveAll(tmpDir) + + client, err := getRepository(context.Background(), tmpDir, config.applicationRepository.ssh, defaultBranch, config.defaultAuthOpts) + if err != nil { + return nil, err + } + err = commitAndPushAll(context.Background(), client, files, defaultBranch) + if err != nil { + return nil, err + } + + return config, nil +} diff --git a/tests/integration/suite_test.go b/tests/integration/suite_test.go index f8696caa..9272c84f 100644 --- a/tests/integration/suite_test.go +++ b/tests/integration/suite_test.go @@ -45,6 +45,9 @@ const ( // azureTerraformPath is the path to the folder containing the // terraform files for azure infra azureTerraformPath = "./terraform/azure" + // gcpTerraformPath is the path to the folder containing the + // terraform files for gcp infra + gcpTerraformPath = "./terraform/gcp" // kubeconfigPath is the path of the file containing the kubeconfig kubeconfigPath = "./build/kubeconfig" @@ -55,7 +58,7 @@ const ( var ( // supportedProviders are the providers supported by the test. - supportedProviders = []string{"azure"} + supportedProviders = []string{"azure", "gcp"} // cfg is a struct containing different variables needed for the test. cfg *testConfig @@ -269,8 +272,14 @@ func getProviderConfig(provider string) *providerConfig { getTestConfig: getTestConfigAKS, registryLogin: registryLoginACR, } + case "gcp": + return &providerConfig{ + terraformPath: gcpTerraformPath, + createKubeconfig: createKubeConfigGKE, + getTestConfig: getTestConfigGKE, + registryLogin: registryLoginGCR, + } } - return nil } diff --git a/tests/integration/terraform/gcp/main.tf b/tests/integration/terraform/gcp/main.tf new file mode 100644 index 00000000..e8d1691c --- /dev/null +++ b/tests/integration/terraform/gcp/main.tf @@ -0,0 +1,49 @@ +provider "google" { + project = var.gcp_project_id + region = var.gcp_region + zone = var.gcp_zone +} + +resource "random_pet" "suffix" {} + +data "google_kms_key_ring" "keyring" { + name = var.gcp_keyring + location = "global" +} + +data "google_kms_crypto_key" "my_crypto_key" { + name = var.gcp_crypto_key + key_ring = data.google_kms_key_ring.keyring.id +} + +data "google_project" "project" { +} + +module "gke" { + source = "git::https://github.com/fluxcd/test-infra.git//tf-modules/gcp/gke" + name = "flux-e2e-${random_pet.suffix.id}" + tags = var.tags +} + +module "gcr" { + source = "git::https://github.com/fluxcd/test-infra.git//tf-modules/gcp/gcr" + name = "flux-e2e-${random_pet.suffix.id}" + tags = var.tags +} + +resource "google_sourcerepo_repository" "fleet-infra" { + name = "fleet-infra-${random_pet.suffix.id}" +} + +resource "google_sourcerepo_repository" "application" { + name = "application-${random_pet.suffix.id}" +} + +resource "google_kms_key_ring_iam_binding" "key_ring" { + key_ring_id = data.google_kms_key_ring.keyring.id + role = "roles/cloudkms.cryptoKeyEncrypterDecrypter" + + members = [ + "serviceAccount:${data.google_project.project.number}-compute@developer.gserviceaccount.com", + ] +} diff --git a/tests/integration/terraform/gcp/outputs.tf b/tests/integration/terraform/gcp/outputs.tf new file mode 100644 index 00000000..cdf6fbd3 --- /dev/null +++ b/tests/integration/terraform/gcp/outputs.tf @@ -0,0 +1,28 @@ +output "kubeconfig" { + value = module.gke.kubeconfig + sensitive = true +} + +output "gcp_project" { + value = var.gcp_project_id +} + +output "gcp_region" { + value = var.gcp_region +} + +output "artifact_registry_id" { + value = module.gcr.artifact_repository_id +} + +output "sops_id" { + value = data.google_kms_crypto_key.my_crypto_key.id +} + +output "fleet_infra_url" { + value = "ssh://${var.gcp_email}@source.developers.google.com:2022/p/${var.gcp_project_id}/r/${google_sourcerepo_repository.fleet-infra.name}" +} + +output "application_url" { + value = "ssh://${var.gcp_email}@source.developers.google.com:2022/p/${var.gcp_project_id}/r/${google_sourcerepo_repository.application.name}" +} diff --git a/tests/integration/terraform/gcp/variables.tf b/tests/integration/terraform/gcp/variables.tf new file mode 100644 index 00000000..5996ddcc --- /dev/null +++ b/tests/integration/terraform/gcp/variables.tf @@ -0,0 +1,37 @@ +variable "gcp_project_id" { + type = string + description = "GCP project to create the resources in" +} + +variable "gcp_email" { + type = string + description = "GCP email" +} + +variable "gcp_region" { + type = string + default = "us-central1" + description = "GCP region" +} + +variable "gcp_zone" { + type = string + default = "us-central1" + description = "GCP region" +} + + +variable "gcp_keyring" { + type = string + description = "GCP keyring that contains crypto key for encrypting secrets" +} + +variable "gcp_crypto_key" { + type = string + description = "GCP crypto key for encrypting secrets" +} + +variable "tags" { + type = map(string) + default = {} +} From e63ddb99de1f170ddd2b15006f1378d16f5cdb5c Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Tue, 27 Jun 2023 10:34:07 +0100 Subject: [PATCH 628/818] make tests for notifications provider agnostic Signed-off-by: Somtochi Onyekwere --- tests/.gitignore | 1 - tests/integration/.env.sample | 25 ++- tests/integration/README.md | 41 +++- tests/integration/azure_specific_test.go | 173 --------------- tests/integration/azure_test.go | 55 ++++- tests/integration/gcp_test.go | 85 ++++++-- tests/integration/go.mod | 14 +- tests/integration/go.sum | 42 +++- tests/integration/notification_test.go | 204 ++++++++++++++++++ tests/integration/suite_test.go | 43 ++-- tests/integration/terraform/gcp/gke.tf | 13 ++ tests/integration/terraform/gcp/kms.tf | 18 ++ tests/integration/terraform/gcp/main.tf | 42 +--- tests/integration/terraform/gcp/outputs.tf | 12 +- tests/integration/terraform/gcp/pubsub.tf | 11 + tests/integration/terraform/gcp/sourcerepo.tf | 7 + tests/integration/terraform/gcp/variables.tf | 10 +- tests/integration/util_test.go | 6 +- 18 files changed, 515 insertions(+), 287 deletions(-) create mode 100644 tests/integration/notification_test.go create mode 100644 tests/integration/terraform/gcp/gke.tf create mode 100644 tests/integration/terraform/gcp/kms.tf create mode 100644 tests/integration/terraform/gcp/pubsub.tf create mode 100644 tests/integration/terraform/gcp/sourcerepo.tf diff --git a/tests/.gitignore b/tests/.gitignore index fda47f9d..0acf4705 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -13,7 +13,6 @@ build/ # .tfstate files *.tfstate *.tfstate.* -*.terraform.lock.hcl # Crash log files crash.log diff --git a/tests/integration/.env.sample b/tests/integration/.env.sample index 767e9b7e..ad9e1fe7 100644 --- a/tests/integration/.env.sample +++ b/tests/integration/.env.sample @@ -1,11 +1,7 @@ ## Azure -export TF_VAR_azuredevops_org= -export TF_VAR_azuredevops_pat= -export TF_VAR_azure_location= -## These are not terraform variables -## but they are needed for the azure tests -export AZUREDEVOPS_SSH= -export AZUREDEVOPS_SSH_PUB= +# export TF_VAR_azuredevops_org= +# export TF_VAR_azuredevops_pat= +# export TF_VAR_azure_location= ## Set the following only when authenticating using Service Principal (suited ## for CI environment). # export ARM_CLIENT_ID= @@ -14,13 +10,20 @@ export AZUREDEVOPS_SSH_PUB= # export ARM_TENANT_ID= ## GCP -export TF_VAR_gcp_project_id= -export TF_VAR_gcp_zone= -export TF_VAR_gcp_keyring= -export TF_VAR_gcp_crypto_key= +# export TF_VAR_gcp_project_id= +# export TF_VAR_gcp_zone= +# export TF_VAR_gcp_region= +# export TF_VAR_gcp_keyring= +# export TF_VAR_gcp_crypto_key= +## Email address of a GCP user used for git repository cloning over ssh. +# export TF_VAR_gcp_email= ## Set the following only when using service account. ## Provide absolute path to the service account JSON key file. # export GOOGLE_APPLICATION_CREDENTIALS= ## Common variables # export TF_VAR_tags='{"environment"="dev", "createdat"='"\"$(date -u +x%Y-%m-%d_%Hh%Mm%Ss)\""'}' +## These are not terraform variables +## but they are needed for the bootstrap tests +# export GITREPO_SSH_PATH= +# export GITREPO_SSH_PUB_PATH= diff --git a/tests/integration/README.md b/tests/integration/README.md index f4232f1d..5477628d 100644 --- a/tests/integration/README.md +++ b/tests/integration/README.md @@ -1,7 +1,7 @@ # E2E Tests The goal is to verify that Flux integration with cloud providers are actually working now and in the future. -Currently, we only have tests for Azure. +Currently, we only have tests for Azure and GCP. ## General requirements @@ -60,9 +60,10 @@ the tests: ### Architecture The [gcp](./terraform/gcp) terraform files create the GKE cluster and related resources to run the tests. It creates: -- An Google Container Registry and Artifact Registry -- An Google Kubernetes Cluster +- A Google Container Registry and Artifact Registry +- A Google Kubernetes Cluster - Two Google Cloud Source Repositories +- A Google Pub/Sub Topic and a subscription to the service that would be used in the tests Note: It doesn't create Google KMS keyrings and crypto keys because these cannot be destroyed. Instead, you have to pass in the crypto key and keyring that would be used to test the sops encryption in Flux. Please see `.env.sample` @@ -72,6 +73,8 @@ for the terraform variables - GCP account with an active project to be able to create GKE and GCR, and permission to assign roles. - Existing GCP KMS keyring and crypto key. + - [Create a Keyring](https://cloud.google.com/kms/docs/create-key-ring) + - [Create a Crypto Key](https://cloud.google.com/kms/docs/create-key) - gcloud CLI, need to be logged in using `gcloud auth login` as a User (not a Service Account), configure application default credentials with `gcloud auth application-default login` and docker credential helper with `gcloud auth configure-docker`. @@ -86,7 +89,6 @@ for the terraform variables docker accordingly ```console $ gcloud auth print-access-token | docker login -u oauth2accesstoken --password-stdin https://us-central1-docker.pkg.dev - $ gcloud auth print-access-token | docker login -u oauth2accesstoken --password-stdin https://gcr.io ``` In this case, the GCP client in terraform uses the Service Account to authenticate and the gcloud CLI is used only to authenticate with Google @@ -100,15 +102,33 @@ for the terraform variables to prevent aggressive masking in the logs. Refer [aggressive replacement in logs](https://github.com/google-github-actions/auth/blob/v1.1.0/docs/TROUBLESHOOTING.md#aggressive--replacement-in-logs) for more details. -- Register SSH Keys with Google Cloud. # add docs +- Register [SSH Keys with Google Cloud](https://cloud.google.com/source-repositories/docs/authentication#ssh) + - Google Cloud supports these three SSH key types: RSA (only for keys with more than 2048 bits), ECDSA and ED25519 + - **Note:** Google doesn't allow an SSH key to be associated with a service account email address. Therefore, there has to be an actual + user that the SSH keys are registered to, and the email of this user will be passed to terraform through the `TF_VAR_gcp_email` + variable. + +### Permissions + +Following roles are needed for provisioning the infrastructure and running the tests: + +- Compute Instance Admin (v1) +- Kubernetes Engine Admin +- Service Account User +- Artifact Registry Administrator +- Artifact Registry Repository Administrator +- Cloud KMS Admin +- Cloud KMS CryptoKey Encrypter +- Source Repository Administrator +- Pub/Sub Admin ## Tests Each test run is initiated by running `terraform apply` in the provider's terraform directory e.g terraform apply, it does this by using the [tftestenv package](https://github.com/fluxcd/test-infra/blob/main/tftestenv/testenv.go) within the `fluxcd/test-infra` repository. It then reads the output of the Terraform to get information needed -for the tests like the kubernetes client ID, the azure DevOps repository urls, the key vault ID etc. This means that -a lot of the communication with the Azure API is offset to Terraform instead of requiring it to be implemented in the test. +for the tests like the kubernetes client ID, the cloud repository urls, the key vault ID etc. This means that +a lot of the communication with the cloud provider API is offset to Terraform instead of requiring it to be implemented in the test. The following tests are currently implemented: @@ -118,11 +138,11 @@ The following tests are currently implemented: - kustomize-controller can decrypt secrets using SOPS and provider key vault - image-automation-controller can create branches and push to cloud repositories (https+ssh) - source-controller can pull charts from cloud provider container registry Helm repositories +- notification-controller can forward events to cloud Events Service(EventHub for Azure and Google Pub/Sub) The following tests are run only for Azure since it is supported in the notification-controller: - notification-controller can send commit status to Azure DevOps -- notification-controller can forward events to Azure Event Hub ### Running tests locally @@ -165,8 +185,9 @@ ok github.com/fluxcd/flux2/tests/integration 947.341s In the above, the test created a build directory build/ and the flux cli binary is copied build/flux. It would be used to bootstrap Flux on the cluster. You can configure the location of the Flux CLI binary by setting the FLUX_BINARY variable. -We also pull two version of `ghcr.io/stefanprodan/podinfo` image. These images are pushed to the Azure Container Registry -and used to test `ImageRepository` and `ImageUpdateAutomation`. The terraform resources get created and the tests are run. +We also pull two version of `ghcr.io/stefanprodan/podinfo` image. These images are pushed to the cloud provider's +Container Registry and used to test `ImageRepository` and `ImageUpdateAutomation`. The terraform resources get created +and the tests are run. **IMPORTANT:** In case the terraform infrastructure results in a bad state, maybe due to a crash during the apply, the whole infrastructure can be destroyed by running terraform destroy in terraform/ directory. diff --git a/tests/integration/azure_specific_test.go b/tests/integration/azure_specific_test.go index 63f78825..536de394 100644 --- a/tests/integration/azure_specific_test.go +++ b/tests/integration/azure_specific_test.go @@ -21,7 +21,6 @@ package integration import ( "context" - "encoding/json" "fmt" "io" "log" @@ -29,7 +28,6 @@ import ( "testing" "time" - eventhub "github.com/Azure/azure-event-hubs-go/v3" "github.com/microsoft/azure-devops-go-api/azuredevops" "github.com/microsoft/azure-devops-go-api/azuredevops/git" . "github.com/onsi/gomega" @@ -37,185 +35,14 @@ import ( corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/types" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" notiv1 "github.com/fluxcd/notification-controller/api/v1" notiv1beta2 "github.com/fluxcd/notification-controller/api/v1beta2" - events "github.com/fluxcd/pkg/apis/event/v1beta1" "github.com/fluxcd/pkg/apis/meta" sourcev1 "github.com/fluxcd/source-controller/api/v1" ) -func TestEventHubNotification(t *testing.T) { - g := NewWithT(t) - - ctx := context.TODO() - branchName := "test-notification" - testID := branchName + "-" + randStringRunes(5) - - // Start listening to eventhub with latest offset - // TODO(somtochiama): Make here provider agnostic - hub, err := eventhub.NewHubFromConnectionString(cfg.notificationURL) - g.Expect(err).ToNot(HaveOccurred()) - c := make(chan string, 10) - handler := func(ctx context.Context, event *eventhub.Event) error { - c <- string(event.Data) - return nil - } - runtimeInfo, err := hub.GetRuntimeInformation(ctx) - g.Expect(err).ToNot(HaveOccurred()) - g.Expect(len(runtimeInfo.PartitionIDs)).To(Equal(1)) - listenerHandler, err := hub.Receive(ctx, runtimeInfo.PartitionIDs[0], handler, eventhub.ReceiveWithLatestOffset()) - g.Expect(err).ToNot(HaveOccurred()) - - // Setup Flux resources - manifest := `apiVersion: v1 -kind: ConfigMap -metadata: - name: foobar` - repoUrl := getTransportURL(cfg.applicationRepository) - client, err := getRepository(ctx, t.TempDir(), repoUrl, defaultBranch, cfg.defaultAuthOpts) - g.Expect(err).ToNot(HaveOccurred()) - files := make(map[string]io.Reader) - files["configmap.yaml"] = strings.NewReader(manifest) - err = commitAndPushAll(ctx, client, files, branchName) - g.Expect(err).ToNot(HaveOccurred()) - - namespace := corev1.Namespace{ - ObjectMeta: metav1.ObjectMeta{ - Name: testID, - }, - } - g.Expect(testEnv.Create(ctx, &namespace)).To(Succeed()) - defer testEnv.Delete(ctx, &namespace) - - secret := corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: testID, - Namespace: testID, - }, - StringData: map[string]string{ - "address": cfg.notificationURL, - }, - } - g.Expect(testEnv.Create(ctx, &secret)).To(Succeed()) - defer testEnv.Delete(ctx, &secret) - - provider := notiv1beta2.Provider{ - ObjectMeta: metav1.ObjectMeta{ - Name: testID, - Namespace: testID, - }, - Spec: notiv1beta2.ProviderSpec{ - Type: "azureeventhub", - Address: repoUrl, - SecretRef: &meta.LocalObjectReference{ - Name: testID, - }, - }, - } - g.Expect(testEnv.Create(ctx, &provider)).To(Succeed()) - defer testEnv.Delete(ctx, &provider) - - alert := notiv1beta2.Alert{ - ObjectMeta: metav1.ObjectMeta{ - Name: testID, - Namespace: testID, - }, - Spec: notiv1beta2.AlertSpec{ - ProviderRef: meta.LocalObjectReference{ - Name: provider.Name, - }, - EventSources: []notiv1.CrossNamespaceObjectReference{ - { - Kind: "Kustomization", - Name: testID, - Namespace: testID, - }, - }, - }, - } - g.Expect(testEnv.Create(ctx, &alert)).ToNot(HaveOccurred()) - defer testEnv.Delete(ctx, &alert) - - g.Eventually(func() bool { - nn := types.NamespacedName{Name: alert.Name, Namespace: alert.Namespace} - alertObj := ¬iv1beta2.Alert{} - err := testEnv.Get(ctx, nn, alertObj) - if err != nil { - return false - } - if err := checkReadyCondition(alertObj); err != nil { - t.Log(err) - return false - } - - return true - }, testTimeout, testInterval).Should(BeTrue()) - - modifyKsSpec := func(spec *kustomizev1.KustomizationSpec) { - spec.Interval = metav1.Duration{Duration: 30 * time.Second} - spec.HealthChecks = []meta.NamespacedObjectKindReference{ - { - APIVersion: "v1", - Kind: "ConfigMap", - Name: "foobar", - Namespace: testID, - }, - } - } - g.Expect(setUpFluxConfig(ctx, testID, nsConfig{ - repoURL: repoUrl, - ref: &sourcev1.GitRepositoryRef{ - Branch: branchName, - }, - path: "./", - modifyKsSpec: modifyKsSpec, - })).To(Succeed()) - t.Cleanup(func() { - err := tearDownFluxConfig(ctx, testID) - if err != nil { - t.Logf("failed to delete resources in '%s' namespace: %s", testID, err) - } - }) - - g.Eventually(func() bool { - err := verifyGitAndKustomization(ctx, testEnv, testID, testID) - if err != nil { - t.Log(err) - return false - } - return true - }, testTimeout, testInterval).Should(BeTrue()) - - // Wait to read even from event hub - g.Eventually(func() bool { - select { - case eventJson := <-c: - event := &events.Event{} - err := json.Unmarshal([]byte(eventJson), event) - if err != nil { - t.Logf("the received event type does not match Flux format, error: %v", err) - return false - } - - if event.InvolvedObject.Kind == kustomizev1.KustomizationKind && - event.InvolvedObject.Name == testID && event.InvolvedObject.Namespace == testID { - return true - } - - return false - default: - return false - } - }, testTimeout, 1*time.Second).Should(BeTrue()) - err = listenerHandler.Close(ctx) - g.Expect(err).ToNot(HaveOccurred()) - err = hub.Close(ctx) - g.Expect(err).ToNot(HaveOccurred()) -} - func TestAzureDevOpsCommitStatus(t *testing.T) { g := NewWithT(t) diff --git a/tests/integration/azure_test.go b/tests/integration/azure_test.go index e88fc49d..6c7cab14 100644 --- a/tests/integration/azure_test.go +++ b/tests/integration/azure_test.go @@ -21,6 +21,7 @@ import ( "fmt" "os" + eventhub "github.com/Azure/azure-event-hubs-go/v3" "github.com/fluxcd/pkg/git" "github.com/fluxcd/test-infra/tftestenv" tfjson "github.com/hashicorp/terraform-json" @@ -68,24 +69,36 @@ patchesStrategicMerge: value: msi ` - privateKeyFile, ok := os.LookupEnv("AZUREDEVOPS_SSH") + privateKeyFile, ok := os.LookupEnv(envVarGitRepoSSHPath) if !ok { - return nil, fmt.Errorf("AZUREDEVOPS_SSH env variable isn't set") + return nil, fmt.Errorf("%s env variable isn't set", envVarGitRepoSSHPath) } privateKeyData, err := os.ReadFile(privateKeyFile) if err != nil { return nil, fmt.Errorf("error getting azure devops private key, '%s': %w", privateKeyFile, err) } - pubKeyFile, ok := os.LookupEnv("AZUREDEVOPS_SSH_PUB") + pubKeyFile, ok := os.LookupEnv(envVarGitRepoSSHPubPath) if !ok { - return nil, fmt.Errorf("AZUREDEVOPS_SSH_PUB env variable isn't set") + return nil, fmt.Errorf("%s env variable isn't set", envVarGitRepoSSHPubPath) } pubKeyData, err := os.ReadFile(pubKeyFile) if err != nil { return nil, fmt.Errorf("error getting ssh pubkey '%s', %w", pubKeyFile, err) } + c := make(chan []byte, 10) + closefn, err := setupEventHubHandler(ctx, c, eventHubSas) + + var notificationCfg = notificationConfig{ + notificationChan: c, + providerType: "azureeventhub", + closeChan: closefn, + secret: map[string]string{ + "address": eventHubSas, + }, + } + config := &testConfig{ defaultGitTransport: git.HTTP, gitUsername: git.DefaultPublicKeyAuthUser, @@ -93,15 +106,15 @@ patchesStrategicMerge: gitPrivateKey: string(privateKeyData), gitPublicKey: string(pubKeyData), knownHosts: azureDevOpsKnownHosts, - fleetInfraRepository: repoConfig{ + fleetInfraRepository: gitUrl{ http: fleetInfraRepository["http"].(string), ssh: fleetInfraRepository["ssh"].(string), }, - applicationRepository: repoConfig{ + applicationRepository: gitUrl{ http: applicationRepository["http"].(string), ssh: applicationRepository["ssh"].(string), }, - notificationURL: eventHubSas, + notificationCfg: notificationCfg, sopsArgs: fmt.Sprintf("--azure-kv %s", sharedSopsId), sopsSecretData: map[string]string{ "sops.azure-kv": fmt.Sprintf(`clientId: %s`, outputs["aks_client_id"].Value.(string)), @@ -116,7 +129,6 @@ patchesStrategicMerge: if err != nil { return nil, err } - config.defaultAuthOpts = opts return config, nil @@ -134,3 +146,30 @@ func registryLoginACR(ctx context.Context, output map[string]*tfjson.StateOutput return registryURL, nil } + +func setupEventHubHandler(ctx context.Context, c chan []byte, eventHubSas string) (func(), error) { + hub, err := eventhub.NewHubFromConnectionString(eventHubSas) + if err != nil { + return nil, err + } + + handler := func(ctx context.Context, event *eventhub.Event) error { + c <- event.Data + return nil + } + runtimeInfo, err := hub.GetRuntimeInformation(ctx) + if err != nil { + return nil, err + } + listenerHandler, err := hub.Receive(ctx, runtimeInfo.PartitionIDs[0], handler, eventhub.ReceiveWithLatestOffset()) + if err != nil { + return nil, err + } + + closefn := func() { + listenerHandler.Close(ctx) + hub.Close(ctx) + } + + return closefn, nil +} diff --git a/tests/integration/gcp_test.go b/tests/integration/gcp_test.go index 02bc6ab4..8d901dcb 100644 --- a/tests/integration/gcp_test.go +++ b/tests/integration/gcp_test.go @@ -20,34 +20,37 @@ import ( "context" "fmt" "io" + "log" "os" "strings" + "cloud.google.com/go/pubsub" + tfjson "github.com/hashicorp/terraform-json" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + "github.com/fluxcd/pkg/git" "github.com/fluxcd/test-infra/tftestenv" - tfjson "github.com/hashicorp/terraform-json" ) const ( - gkeDevOpsKnownHosts = "[source.developers.google.com]:2022 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBB5Iy4/cq/gt/fPqe3uyMy4jwv1Alc94yVPxmnwNhBzJqEV5gRPiRk5u4/JJMbbu9QUVAguBABxL7sBZa5PH/xY=" + gcpSourceRepoKnownHosts = "[source.developers.google.com]:2022 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBB5Iy4/cq/gt/fPqe3uyMy4jwv1Alc94yVPxmnwNhBzJqEV5gRPiRk5u4/JJMbbu9QUVAguBABxL7sBZa5PH/xY=" ) // createKubeConfigGKE constructs kubeconfig for a GKE cluster from the // terraform state output at the given kubeconfig path. func createKubeConfigGKE(ctx context.Context, state map[string]*tfjson.StateOutput, kcPath string) error { - kubeconfigYaml, ok := state["kubeconfig"].Value.(string) + kubeconfigYaml, ok := state["gke_kubeconfig"].Value.(string) if !ok || kubeconfigYaml == "" { return fmt.Errorf("failed to obtain kubeconfig from tf output") } return tftestenv.CreateKubeconfigGKE(ctx, kubeconfigYaml, kcPath) } -// registryLoginGCR logs into the container/artifact registries using the -// provider's CLI tools and returns a list of test repositories. +// registryLoginGCR logs into the Artifact registries using the gcloud +// and returns a list of test repositories. func registryLoginGCR(ctx context.Context, output map[string]*tfjson.StateOutput) (string, error) { - // NOTE: ACR registry accept dynamic repository creation by just pushing a - // new image with a new repository name. - project := output["gcp_project"].Value.(string) + project := output["gcp_project_id"].Value.(string) region := output["gcp_region"].Value.(string) repositoryID := output["artifact_registry_id"].Value.(string) artifactRegistryURL, artifactRepoURL := tftestenv.GetGoogleArtifactRegistryAndRepository(project, region, repositoryID) @@ -61,37 +64,57 @@ func registryLoginGCR(ctx context.Context, output map[string]*tfjson.StateOutput func getTestConfigGKE(ctx context.Context, outputs map[string]*tfjson.StateOutput) (*testConfig, error) { sharedSopsId := outputs["sops_id"].Value.(string) - privateKeyFile, ok := os.LookupEnv("GCP_SOURCEREPO_SSH") + privateKeyFile, ok := os.LookupEnv(envVarGitRepoSSHPath) if !ok { - return nil, fmt.Errorf("GCP_SOURCEREPO_SSH env variable isn't set") + return nil, fmt.Errorf("%s env variable isn't set", envVarGitRepoSSHPath) } privateKeyData, err := os.ReadFile(privateKeyFile) if err != nil { return nil, fmt.Errorf("error getting gcp source repositories private key, '%s': %w", privateKeyFile, err) } - pubKeyFile, ok := os.LookupEnv("GCP_SOURCEREPO_SSH_PUB") + pubKeyFile, ok := os.LookupEnv(envVarGitRepoSSHPubPath) if !ok { - return nil, fmt.Errorf("GCP_SOURCEREPO_SSH_PUB env variable isn't set") + return nil, fmt.Errorf("%s env variable isn't set", envVarGitRepoSSHPubPath) } pubKeyData, err := os.ReadFile(pubKeyFile) if err != nil { return nil, fmt.Errorf("error getting ssh pubkey '%s', %w", pubKeyFile, err) } + c := make(chan []byte, 10) + projectID := outputs["gcp_project_id"].Value.(string) + topicID := outputs["pubsub_topic"].Value.(string) + + fn, err := setupPubSubReceiver(ctx, c, projectID, topicID) + if err != nil { + return nil, err + } + + var notificationCfg = notificationConfig{ + providerType: "googlepubsub", + providerChannel: topicID, + notificationChan: c, + closeChan: fn, + secret: map[string]string{ + "address": projectID, + }, + } + config := &testConfig{ defaultGitTransport: git.SSH, gitUsername: "git", gitPrivateKey: string(privateKeyData), gitPublicKey: string(pubKeyData), - knownHosts: gkeDevOpsKnownHosts, - fleetInfraRepository: repoConfig{ - ssh: outputs["fleet_infra_url"].Value.(string), + knownHosts: gcpSourceRepoKnownHosts, + fleetInfraRepository: gitUrl{ + ssh: outputs["fleet_infra_repository"].Value.(string), }, - applicationRepository: repoConfig{ - ssh: outputs["application_url"].Value.(string), + applicationRepository: gitUrl{ + ssh: outputs["application_repository"].Value.(string), }, - sopsArgs: fmt.Sprintf("--gcp-kms %s", sharedSopsId), + notificationCfg: notificationCfg, + sopsArgs: fmt.Sprintf("--gcp-kms %s", sharedSopsId), } opts, err := authOpts(config.fleetInfraRepository.ssh, map[string][]byte{ @@ -127,3 +150,29 @@ func getTestConfigGKE(ctx context.Context, outputs map[string]*tfjson.StateOutpu return config, nil } + +func setupPubSubReceiver(ctx context.Context, c chan []byte, projectID string, topicID string) (func(), error) { + newCtx, cancel := context.WithCancel(ctx) + pubsubClient, err := pubsub.NewClient(newCtx, projectID) + if err != nil { + cancel() + return nil, fmt.Errorf("error creating pubsub client: %s", err) + } + + sub := pubsubClient.Subscription(topicID) + go func() { + err = sub.Receive(ctx, func(ctx context.Context, message *pubsub.Message) { + c <- message.Data + message.Ack() + }) + if err != nil && status.Code(err) != codes.Canceled { + log.Printf("error receiving message in subscription: %s\n", err) + return + } + }() + + return func() { + cancel() + pubsubClient.Close() + }, nil +} diff --git a/tests/integration/go.mod b/tests/integration/go.mod index ab27dbd2..6a405660 100644 --- a/tests/integration/go.mod +++ b/tests/integration/go.mod @@ -3,6 +3,7 @@ module github.com/fluxcd/flux2/tests/integration go 1.18 require ( + cloud.google.com/go/pubsub v1.31.0 github.com/Azure/azure-event-hubs-go/v3 v3.6.0 github.com/fluxcd/helm-controller/api v0.34.1 github.com/fluxcd/image-automation-controller/api v0.34.1 @@ -22,6 +23,7 @@ require ( github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 github.com/onsi/gomega v1.27.8 github.com/whilp/git-urls v1.0.0 + google.golang.org/grpc v1.55.0 k8s.io/api v0.27.3 k8s.io/apimachinery v0.27.3 k8s.io/client-go v0.27.3 @@ -29,6 +31,10 @@ require ( ) require ( + cloud.google.com/go v0.110.2 // indirect + cloud.google.com/go/compute v1.19.0 // indirect + cloud.google.com/go/compute/metadata v0.2.3 // indirect + cloud.google.com/go/iam v1.0.1 // indirect github.com/Azure/azure-amqp-common-go/v4 v4.2.0 // indirect github.com/Azure/azure-sdk-for-go v65.0.0+incompatible // indirect github.com/Azure/go-amqp v1.0.0 // indirect @@ -74,7 +80,10 @@ require ( github.com/google/gnostic v0.6.9 // indirect github.com/google/go-cmp v0.5.9 // indirect github.com/google/gofuzz v1.2.0 // indirect + github.com/google/s2a-go v0.1.4 // indirect github.com/google/uuid v1.3.0 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect + github.com/googleapis/gax-go/v2 v2.9.1 // indirect github.com/hashicorp/errwrap v1.0.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect @@ -105,17 +114,20 @@ require ( github.com/vbatts/tar-split v0.11.2 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect github.com/zclconf/go-cty v1.13.0 // indirect + go.opencensus.io v0.24.0 // indirect golang.org/x/crypto v0.9.0 // indirect golang.org/x/mod v0.10.0 // indirect golang.org/x/net v0.10.0 // indirect - golang.org/x/oauth2 v0.6.0 // indirect + golang.org/x/oauth2 v0.8.0 // indirect golang.org/x/sync v0.2.0 // indirect golang.org/x/sys v0.8.0 // indirect golang.org/x/term v0.8.0 // indirect golang.org/x/text v0.9.0 // indirect golang.org/x/time v0.3.0 // indirect golang.org/x/tools v0.9.1 // indirect + google.golang.org/api v0.124.0 // indirect google.golang.org/appengine v1.6.7 // indirect + google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect google.golang.org/protobuf v1.30.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect diff --git a/tests/integration/go.sum b/tests/integration/go.sum index 65f998c6..09f99d0c 100644 --- a/tests/integration/go.sum +++ b/tests/integration/go.sum @@ -1,5 +1,16 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.110.2 h1:sdFPBr6xG9/wkBbfhmUz/JmZC7X6LavQgcrVINrKiVA= +cloud.google.com/go v0.110.2/go.mod h1:k04UEeEtb6ZBRTv3dZz4CeJC3jKGxyhl0sAiVVquxiw= +cloud.google.com/go/compute v1.19.0 h1:+9zda3WGgW1ZSTlVppLCYFIr48Pa35q1uG2N1itbCEQ= +cloud.google.com/go/compute v1.19.0/go.mod h1:rikpw2y+UMidAe9tISo04EHNOIf42RLYF/q8Bs93scU= +cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= +cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= +cloud.google.com/go/iam v1.0.1 h1:lyeCAU6jpnVNrE9zGQkTl3WgNgK/X+uWwaw0kynZJMU= +cloud.google.com/go/iam v1.0.1/go.mod h1:yR3tmSL8BcZB4bxByRv2jkSIahVmCtfKZwLYGBalRE8= +cloud.google.com/go/kms v1.10.2 h1:8UePKEypK3SQ6g+4mn/s/VgE5L7XOh+FwGGRUqvY3Hw= +cloud.google.com/go/pubsub v1.31.0 h1:aXdyyJz90kA+bor9+6+xHAciMD5mj8v15WqFZ5E0sek= +cloud.google.com/go/pubsub v1.31.0/go.mod h1:dYmJ3K97NCQ/e4OwZ20rD4Ym3Bu8Gu9m/aJdWQjdcks= github.com/AdaLogics/go-fuzz-headers v0.0.0-20230106234847-43070de90fa1 h1:EKPd1INOIyr5hWOWhvpmQpY6tKjeG0hT1s3AMC/9fic= github.com/Azure/azure-amqp-common-go/v4 v4.2.0 h1:q/jLx1KJ8xeI8XGfkOWMN9XrXzAfVTkyvCxPvHCjd2I= github.com/Azure/azure-amqp-common-go/v4 v4.2.0/go.mod h1:GD3m/WPPma+621UaU6KNjKEo5Hl09z86viKwQjTpV0Q= @@ -64,6 +75,7 @@ github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7N 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= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cloudflare/circl v1.1.0/go.mod h1:prBCrKB9DV4poKZY1l9zBXg2QJY7mvgRvtMxxK7fi4I= @@ -71,7 +83,11 @@ github.com/cloudflare/circl v1.3.3 h1:fE/Qz0QdIGqeWfnwq0RE0R7MI51s0M2E4Ga9kq5AEM github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/containerd/stargz-snapshotter/estargz v0.14.3 h1:OqlDCK3ZVUO6C3B/5FSkDwbkEETK84kQgEeFwDC+62k= github.com/containerd/stargz-snapshotter/estargz v0.14.3/go.mod h1:KY//uOCIkSuNAHhJogcZtrNHdKrA99/FCCRjE3HD36o= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= @@ -104,6 +120,7 @@ github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.m github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= +github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJCLunww= github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= @@ -180,6 +197,7 @@ github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzw github.com/golang-jwt/jwt/v4 v4.4.2 h1:rcc4lwaZgFMCZ5jxF9ABolDcIHdBytAFgqFPbSJQAYs= github.com/golang-jwt/jwt/v4 v4.4.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= @@ -206,6 +224,7 @@ github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= @@ -215,10 +234,16 @@ github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/ github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec= +github.com/google/s2a-go v0.1.4 h1:1kZ/sQM3srePvKs3tXAvQzo66XfcReoqFpIpIccE7Oc= +github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/enterprise-certificate-proxy v0.2.3 h1:yk9/cqRKtT9wXZSsRH9aurXEpJX+U6FLtpYTdC3R06k= +github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +github.com/googleapis/gax-go/v2 v2.9.1 h1:DpTpJqzZ3NvX9zqjhIuI1oVzYZMvboZe+3LoeEIJjHM= +github.com/googleapis/gax-go/v2 v2.9.1/go.mod h1:4FG3gMrVZlyMp5itSYKMU9z/lBE7+SbnUOvzH2HqbEY= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -365,6 +390,8 @@ github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9dec github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/zclconf/go-cty v1.13.0 h1:It5dfKTTZHe9aeppbNOda3mN7Ag7sg6QkBNm6TkyFa0= github.com/zclconf/go-cty v1.13.0/go.mod h1:YKQzy/7pZ7iq2jNFzy5go57xdxdWoLLpaEp4u238AE0= +go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= +go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= @@ -378,6 +405,7 @@ golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= @@ -406,6 +434,7 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210326060303-6b1517762897/go.mod h1:uSPa2vr4CLtc/ILN5odXGNXS6mhrKVzTaCXzk9m6W3k= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= @@ -419,8 +448,8 @@ golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.6.0 h1:Lh8GPgSKBfWSwFvtuWOfeI3aAAnbXTSutYxJiOJFgIw= -golang.org/x/oauth2 v0.6.0/go.mod h1:ycmewcwgD4Rpr3eZJLSB4Kyyljb3qDh40vJ8STE5HKw= +golang.org/x/oauth2 v0.8.0 h1:6dkIjl3j3LtZ/O3sTgZTMsLKSftL/B8Zgq4huOIIUu8= +golang.org/x/oauth2 v0.8.0/go.mod h1:yr7u4HXZRm1R1kBWqr/xKNqewf0plRYoB7sla+BCIXE= 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= @@ -473,6 +502,7 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= @@ -497,6 +527,8 @@ golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gomodules.xyz/jsonpatch/v2 v2.3.0 h1:8NFhfS6gzxNqjLIYnZxg319wZ5Qjnx4m/CcX+Klzazc= +google.golang.org/api v0.124.0 h1:dP6Ef1VgOGqQ8eiv4GiY8RhmeyqzovcXBYPDUYG8Syo= +google.golang.org/api v0.124.0/go.mod h1:xu2HQurE5gi/3t1aFCvhPD781p0a3p11sdunTJ2BlP4= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= @@ -506,13 +538,19 @@ google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98 google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 h1:KpwkzHKEF7B9Zxg18WzOa7djJ+Ha5DzthMyZYQfEn2A= +google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= +google.golang.org/grpc v1.55.0 h1:3Oj82/tFSCeUrRTg/5E/7d/W5A1tj6Ky1ABAuZuv5ag= +google.golang.org/grpc v1.55.0/go.mod h1:iYEXKGkEBhg1PjZQvoYEVPTDkHo1/bjTnfwTeGONTY8= 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= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= diff --git a/tests/integration/notification_test.go b/tests/integration/notification_test.go new file mode 100644 index 00000000..4ea01692 --- /dev/null +++ b/tests/integration/notification_test.go @@ -0,0 +1,204 @@ +/* +Copyright 2023 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package integration + +import ( + "context" + "encoding/json" + "io" + "strings" + "testing" + "time" + + . "github.com/onsi/gomega" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" + + kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" + notiv1 "github.com/fluxcd/notification-controller/api/v1" + notiv1beta2 "github.com/fluxcd/notification-controller/api/v1beta2" + events "github.com/fluxcd/pkg/apis/event/v1beta1" + "github.com/fluxcd/pkg/apis/meta" + sourcev1 "github.com/fluxcd/source-controller/api/v1" +) + +func TestNotification(t *testing.T) { + g := NewWithT(t) + + ctx := context.TODO() + branchName := "test-notification" + testID := branchName + "-" + randStringRunes(5) + defer cfg.notificationCfg.closeChan() + + // Setup Flux resources + manifest := `apiVersion: v1 +kind: ConfigMap +metadata: + name: foobar` + repoUrl := getTransportURL(cfg.applicationRepository) + client, err := getRepository(ctx, t.TempDir(), repoUrl, defaultBranch, cfg.defaultAuthOpts) + g.Expect(err).ToNot(HaveOccurred()) + files := make(map[string]io.Reader) + files["configmap.yaml"] = strings.NewReader(manifest) + err = commitAndPushAll(ctx, client, files, branchName) + g.Expect(err).ToNot(HaveOccurred()) + + namespace := corev1.Namespace{ + ObjectMeta: metav1.ObjectMeta{ + Name: testID, + }, + } + g.Expect(testEnv.Create(ctx, &namespace)).To(Succeed()) + defer testEnv.Delete(ctx, &namespace) + + provider := notiv1beta2.Provider{ + ObjectMeta: metav1.ObjectMeta{ + Name: testID, + Namespace: testID, + }, + Spec: notiv1beta2.ProviderSpec{ + Type: cfg.notificationCfg.providerType, + Address: cfg.notificationCfg.providerAddress, + Channel: cfg.notificationCfg.providerChannel, + }, + } + + if cfg.notificationCfg.secret != nil { + secret := corev1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: testID, + Namespace: testID, + }, + StringData: cfg.notificationCfg.secret, + } + + g.Expect(testEnv.Create(ctx, &secret)).To(Succeed()) + defer testEnv.Delete(ctx, &secret) + + provider.Spec.SecretRef = &meta.LocalObjectReference{ + Name: testID, + } + } + + g.Expect(testEnv.Create(ctx, &provider)).To(Succeed()) + defer testEnv.Delete(ctx, &provider) + + alert := notiv1beta2.Alert{ + ObjectMeta: metav1.ObjectMeta{ + Name: testID, + Namespace: testID, + }, + Spec: notiv1beta2.AlertSpec{ + ProviderRef: meta.LocalObjectReference{ + Name: provider.Name, + }, + EventSources: []notiv1.CrossNamespaceObjectReference{ + { + Kind: "Kustomization", + Name: testID, + Namespace: testID, + }, + }, + }, + } + g.Expect(testEnv.Create(ctx, &alert)).ToNot(HaveOccurred()) + defer testEnv.Delete(ctx, &alert) + + g.Eventually(func() bool { + nn := types.NamespacedName{Name: provider.Name, Namespace: provider.Namespace} + obj := ¬iv1beta2.Provider{} + err := testEnv.Get(ctx, nn, obj) + if err != nil { + return false + } + if err := checkReadyCondition(obj); err != nil { + t.Log(err) + return false + } + + nn = types.NamespacedName{Name: alert.Name, Namespace: alert.Namespace} + alertObj := ¬iv1beta2.Alert{} + err = testEnv.Get(ctx, nn, alertObj) + if err != nil { + return false + } + if err := checkReadyCondition(alertObj); err != nil { + t.Log(err) + return false + } + + return true + }, testTimeout, testInterval).Should(BeTrue()) + + modifyKsSpec := func(spec *kustomizev1.KustomizationSpec) { + spec.Interval = metav1.Duration{Duration: 30 * time.Second} + spec.HealthChecks = []meta.NamespacedObjectKindReference{ + { + APIVersion: "v1", + Kind: "ConfigMap", + Name: "foobar", + Namespace: testID, + }, + } + } + g.Expect(setUpFluxConfig(ctx, testID, nsConfig{ + repoURL: repoUrl, + ref: &sourcev1.GitRepositoryRef{ + Branch: branchName, + }, + path: "./", + modifyKsSpec: modifyKsSpec, + })).To(Succeed()) + t.Cleanup(func() { + err := tearDownFluxConfig(ctx, testID) + if err != nil { + t.Logf("failed to delete resources in '%s' namespace: %s", testID, err) + } + }) + + g.Eventually(func() bool { + err := verifyGitAndKustomization(ctx, testEnv, testID, testID) + if err != nil { + t.Log(err) + return false + } + return true + }, testTimeout, testInterval).Should(BeTrue()) + + // Wait to read event from notification channel. + g.Eventually(func() bool { + select { + case eventJson := <-cfg.notificationCfg.notificationChan: + event := &events.Event{} + err := json.Unmarshal([]byte(eventJson), event) + if err != nil { + t.Logf("the received event type does not match Flux format, error: %v", err) + return false + } + + if event.InvolvedObject.Kind == kustomizev1.KustomizationKind && + event.InvolvedObject.Name == testID && event.InvolvedObject.Namespace == testID { + return true + } + + return false + default: + return false + } + }, testTimeout, 1*time.Second).Should(BeTrue()) +} diff --git a/tests/integration/suite_test.go b/tests/integration/suite_test.go index 9272c84f..be2ca0cf 100644 --- a/tests/integration/suite_test.go +++ b/tests/integration/suite_test.go @@ -54,6 +54,13 @@ const ( // default branch to be used when cloning git repositories defaultBranch = "main" + + // envVarGitRepoSSHPath is the environment variable that contains the path + // to the ssh key for the git repository + envVarGitRepoSSHPath = "GITREPO_SSH_PATH" + // envVarGitRepoSSHPubPath is the environment variable that contains the path + // to the ssh public key for the git repository + envVarGitRepoSSHPubPath = "GITREPO_SSH_PUB_PATH" ) var ( @@ -97,18 +104,18 @@ type testConfig struct { defaultGitTransport git.TransportType defaultAuthOpts *git.AuthOptions knownHosts string - fleetInfraRepository repoConfig - applicationRepository repoConfig - - notificationURL string + fleetInfraRepository gitUrl + applicationRepository gitUrl - // cloud provider dependent argument to pass to the sops cli + // sopsArgs is the cloud provider dependent argument to pass to the sops cli sopsArgs string - // secret data for sops + + // notificationCfg contains the values needed to properly set up notification on the + // cluster. + notificationCfg notificationConfig + + // sopsSecretData is the secret's data for the sops decryption sopsSecretData map[string]string - // envCredsData are data field for a secret containing environment variables that the Flux deployments - // may need - envCredsData map[string]string // kustomizationYaml is the content of the kustomization.yaml for customizing the Flux manifests kustomizationYaml string @@ -116,9 +123,21 @@ type testConfig struct { testRegistry string } -// repoConfig contains the http/ssh urls for the created git repositories +// notificationConfig contains various fields for configuring +// providers and testing notifications for the different +// cloud providers. +type notificationConfig struct { + providerChannel string + providerType string + providerAddress string + secret map[string]string + notificationChan chan []byte + closeChan func() +} + +// gitUrl contains the http/ssh urls for the created git repositories // on the various cloud providers. -type repoConfig struct { +type gitUrl struct { http string ssh string } @@ -222,7 +241,7 @@ func TestMain(m *testing.M) { // get provider specific test configuration cfg, err = providerCfg.getTestConfig(ctx, outputs) if err != nil { - panic(fmt.Sprintf("Failed to get provider config for %v", err)) + panic(fmt.Sprintf("Failed to get test config: %v", err)) } regUrl, err := providerCfg.registryLogin(ctx, outputs) diff --git a/tests/integration/terraform/gcp/gke.tf b/tests/integration/terraform/gcp/gke.tf new file mode 100644 index 00000000..5de455db --- /dev/null +++ b/tests/integration/terraform/gcp/gke.tf @@ -0,0 +1,13 @@ +module "gke" { + source = "git::https://github.com/fluxcd/test-infra.git//tf-modules/gcp/gke" + + name = local.name + tags = var.tags +} + +module "gcr" { + source = "git::https://github.com/fluxcd/test-infra.git//tf-modules/gcp/gcr" + + name = local.name + tags = var.tags +} diff --git a/tests/integration/terraform/gcp/kms.tf b/tests/integration/terraform/gcp/kms.tf new file mode 100644 index 00000000..6aed72a3 --- /dev/null +++ b/tests/integration/terraform/gcp/kms.tf @@ -0,0 +1,18 @@ +data "google_kms_key_ring" "keyring" { + name = var.gcp_keyring + location = "global" +} + +data "google_kms_crypto_key" "my_crypto_key" { + name = var.gcp_crypto_key + key_ring = data.google_kms_key_ring.keyring.id +} + +resource "google_kms_key_ring_iam_binding" "key_ring" { + key_ring_id = data.google_kms_key_ring.keyring.id + role = "roles/cloudkms.cryptoKeyEncrypterDecrypter" + + members = [ + "serviceAccount:${data.google_project.project.number}-compute@developer.gserviceaccount.com", + ] +} diff --git a/tests/integration/terraform/gcp/main.tf b/tests/integration/terraform/gcp/main.tf index e8d1691c..cc917453 100644 --- a/tests/integration/terraform/gcp/main.tf +++ b/tests/integration/terraform/gcp/main.tf @@ -6,44 +6,8 @@ provider "google" { resource "random_pet" "suffix" {} -data "google_kms_key_ring" "keyring" { - name = var.gcp_keyring - location = "global" +locals { + name = "e2e-${random_pet.suffix.id}" } -data "google_kms_crypto_key" "my_crypto_key" { - name = var.gcp_crypto_key - key_ring = data.google_kms_key_ring.keyring.id -} - -data "google_project" "project" { -} - -module "gke" { - source = "git::https://github.com/fluxcd/test-infra.git//tf-modules/gcp/gke" - name = "flux-e2e-${random_pet.suffix.id}" - tags = var.tags -} - -module "gcr" { - source = "git::https://github.com/fluxcd/test-infra.git//tf-modules/gcp/gcr" - name = "flux-e2e-${random_pet.suffix.id}" - tags = var.tags -} - -resource "google_sourcerepo_repository" "fleet-infra" { - name = "fleet-infra-${random_pet.suffix.id}" -} - -resource "google_sourcerepo_repository" "application" { - name = "application-${random_pet.suffix.id}" -} - -resource "google_kms_key_ring_iam_binding" "key_ring" { - key_ring_id = data.google_kms_key_ring.keyring.id - role = "roles/cloudkms.cryptoKeyEncrypterDecrypter" - - members = [ - "serviceAccount:${data.google_project.project.number}-compute@developer.gserviceaccount.com", - ] -} +data "google_project" "project" {} diff --git a/tests/integration/terraform/gcp/outputs.tf b/tests/integration/terraform/gcp/outputs.tf index cdf6fbd3..d356b188 100644 --- a/tests/integration/terraform/gcp/outputs.tf +++ b/tests/integration/terraform/gcp/outputs.tf @@ -1,9 +1,9 @@ -output "kubeconfig" { +output "gke_kubeconfig" { value = module.gke.kubeconfig sensitive = true } -output "gcp_project" { +output "gcp_project_id" { value = var.gcp_project_id } @@ -19,10 +19,14 @@ output "sops_id" { value = data.google_kms_crypto_key.my_crypto_key.id } -output "fleet_infra_url" { +output "fleet_infra_repository" { value = "ssh://${var.gcp_email}@source.developers.google.com:2022/p/${var.gcp_project_id}/r/${google_sourcerepo_repository.fleet-infra.name}" } -output "application_url" { +output "application_repository" { value = "ssh://${var.gcp_email}@source.developers.google.com:2022/p/${var.gcp_project_id}/r/${google_sourcerepo_repository.application.name}" } + +output "pubsub_topic" { + value = google_pubsub_topic.pubsub.name +} diff --git a/tests/integration/terraform/gcp/pubsub.tf b/tests/integration/terraform/gcp/pubsub.tf new file mode 100644 index 00000000..c59c0e99 --- /dev/null +++ b/tests/integration/terraform/gcp/pubsub.tf @@ -0,0 +1,11 @@ +resource "google_pubsub_topic" "pubsub" { + name = local.name + labels = var.tags + message_retention_duration = "7200s" +} + +resource "google_pubsub_subscription" "sub" { + project = var.gcp_project_id + name = local.name + topic = google_pubsub_topic.pubsub.name +} diff --git a/tests/integration/terraform/gcp/sourcerepo.tf b/tests/integration/terraform/gcp/sourcerepo.tf new file mode 100644 index 00000000..02a14928 --- /dev/null +++ b/tests/integration/terraform/gcp/sourcerepo.tf @@ -0,0 +1,7 @@ +resource "google_sourcerepo_repository" "fleet-infra" { + name = "fleet-infra-${random_pet.suffix.id}" +} + +resource "google_sourcerepo_repository" "application" { + name = "application-${random_pet.suffix.id}" +} diff --git a/tests/integration/terraform/gcp/variables.tf b/tests/integration/terraform/gcp/variables.tf index 5996ddcc..6af9e7d6 100644 --- a/tests/integration/terraform/gcp/variables.tf +++ b/tests/integration/terraform/gcp/variables.tf @@ -5,7 +5,7 @@ variable "gcp_project_id" { variable "gcp_email" { type = string - description = "GCP email" + description = "GCP user email" } variable "gcp_region" { @@ -17,10 +17,9 @@ variable "gcp_region" { variable "gcp_zone" { type = string default = "us-central1" - description = "GCP region" + description = "GCP zone" } - variable "gcp_keyring" { type = string description = "GCP keyring that contains crypto key for encrypting secrets" @@ -32,6 +31,7 @@ variable "gcp_crypto_key" { } variable "tags" { - type = map(string) - default = {} + type = map(string) + default = {} + description = "tags for created resources" } diff --git a/tests/integration/util_test.go b/tests/integration/util_test.go index 017bf193..674c3b68 100644 --- a/tests/integration/util_test.go +++ b/tests/integration/util_test.go @@ -381,12 +381,12 @@ func pushImagesFromURL(repoURL, imgURL string, tags []string) error { return nil } -func getTransportURL(repoCfg repoConfig) string { +func getTransportURL(urls gitUrl) string { if cfg.defaultGitTransport == git.SSH { - return repoCfg.ssh + return urls.ssh } - return repoCfg.http + return urls.http } func authOpts(repoURL string, authData map[string][]byte) (*git.AuthOptions, error) { From ab94c8064c63135935a1f8d518e8325d53c7bcff Mon Sep 17 00:00:00 2001 From: Sunny Date: Wed, 19 Jul 2023 17:40:01 +0000 Subject: [PATCH 629/818] tests/int: Add IAM setup automation docs and misc fixes Add instructions about how to create service accounts with IAM permissions and populate the secrets and variables required in the CI. Update the panic recovery code to ensure that the exit status surfaces on panic along with a log message. Signed-off-by: Sunny --- .github/workflows/e2e-azure.yaml | 33 +++--- tests/integration/README.md | 138 +++++++++++++++++++++-- tests/integration/suite_test.go | 9 +- tests/integration/terraform/azure/aks.tf | 1 + 4 files changed, 148 insertions(+), 33 deletions(-) diff --git a/.github/workflows/e2e-azure.yaml b/.github/workflows/e2e-azure.yaml index 3236c73a..def40dab 100644 --- a/.github/workflows/e2e-azure.yaml +++ b/.github/workflows/e2e-azure.yaml @@ -3,7 +3,7 @@ name: e2e-azure on: workflow_dispatch: schedule: - - cron: '0 6 * * *' + - cron: '0 6 * * *' push: branches: - main @@ -48,7 +48,7 @@ jobs: wget https://github.com/mozilla/sops/releases/download/v3.7.1/sops-v3.7.1.linux -O $HOME/.local/bin/sops chmod +x $HOME/.local/bin/sops - name: Setup Terraform - uses: hashicorp/setup-terraform@633666f66e0061ca3b725c73b2ec20cd13a8fdd1 # v2 + uses: hashicorp/setup-terraform@633666f66e0061ca3b725c73b2ec20cd13a8fdd1 # v2 with: terraform_version: 1.2.8 terraform_wrapper: false @@ -71,6 +71,7 @@ jobs: defaults: run: working-directory: ./tests/integration + if: (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) && github.actor != 'dependabot[bot]' steps: - name: CheckoutD uses: actions/checkout@24cb9080177205b6e8c946b17badbe402adc938f # v3.4.0 @@ -92,7 +93,7 @@ jobs: - name: Authenticate to Azure uses: Azure/login@92a5484dfaf04ca78a94597f4f19fea633851fa2 # v1.4.6 with: - creds: '{"clientId":"${{ secrets.ARM_CLIENT_ID }}","clientSecret":"${{ secrets.ARM_CLIENT_SECRET }}","subscriptionId":"${{ secrets.ARM_SUBSCRIPTION_ID }}","tenantId":"${{ secrets.ARM_TENANT_ID }}"}' + creds: '{"clientId":"${{ secrets.AZ_ARM_CLIENT_ID }}","clientSecret":"${{ secrets.AZ_ARM_CLIENT_SECRET }}","subscriptionId":"${{ secrets.AZ_ARM_SUBSCRIPTION_ID }}","tenantId":"${{ secrets.AZ_ARM_TENANT_ID }}"}' - name: Set dynamic variables in .env run: | cat > .env < build/ssh/key - export AZUREDEVOPS_SSH=build/ssh/key + echo $GITREPO_SSH_CONTENTS | base64 -d > build/ssh/key + export GITREPO_SSH_PATH=build/ssh/key touch ./build/ssh/key.pub - echo $AZUREDEVOPS_SSH_PUB_CONTENTS | base64 -d > ./build/ssh/key.pub - export AZUREDEVOPS_SSH_PUB=build/ssh/key.pub + echo $GITREPO_SSH_PUB_CONTENTS | base64 -d > ./build/ssh/key.pub + export GITREPO_SSH_PUB_PATH=build/ssh/key.pub make test-azure diff --git a/tests/integration/README.md b/tests/integration/README.md index 5477628d..aadfe49b 100644 --- a/tests/integration/README.md +++ b/tests/integration/README.md @@ -55,6 +55,63 @@ the tests: - `Microsoft.KeyVault/*` - `Microsoft.EventHub/*` +### IAM and CI setup + +To create the necessary IAM role with all the permissions, set up CI secrets and +variables using +[azure-gh-actions](https://github.com/fluxcd/test-infra/tree/main/tf-modules/azure/github-actions) +use: + +```hcl +resource "tls_private_key" "privatekey" { + algorithm = "RSA" + rsa_bits = 4096 +} + +module "azure_gh_actions" { + source = "git::https://github.com/fluxcd/test-infra.git//tf-modules/azure/github-actions" + + azure_owners = ["owner-id-1", "owner-id-2"] + azure_app_name = "flux2-e2e" + azure_app_description = "flux2 e2e" + azure_app_secret_name = "flux2-e2e" + azure_permissions = [ + "Microsoft.Kubernetes/*", + "Microsoft.Resources/*", + "Microsoft.Authorization/roleAssignments/Read", + "Microsoft.Authorization/roleAssignments/Write", + "Microsoft.Authorization/roleAssignments/Delete", + "Microsoft.ContainerRegistry/*", + "Microsoft.ContainerService/*", + "Microsoft.KeyVault/*", + "Microsoft.EventHub/*" + ] + azure_location = "eastus" + + github_project = "flux2" + + github_secret_client_id_name = "AZ_ARM_CLIENT_ID" + github_secret_client_secret_name = "AZ_ARM_CLIENT_SECRET" + github_secret_subscription_id_name = "AZ_ARM_SUBSCRIPTION_ID" + github_secret_tenant_id_name = "AZ_ARM_TENANT_ID" + + github_secret_custom = { + "TF_VAR_azuredevops_org" = "", + "TF_VAR_azuredevops_pat" = "", + "GITREPO_SSH_CONTENTS" = base64encode(tls_private_key.privatekey.private_key_openssh), + "GITREPO_SSH_PUB_CONTENTS" = base64encode(tls_private_key.privatekey.public_key_openssh) + } +} + +output "publickey" { + value = tls_private_key.privatekey.public_key_openssh +} +``` + +Copy the `publickey` output printed after applying, or run `terraform output` to +print it again, and add it in the Azure DevOps SSH public keys under the user +account that'll be used by flux in the tests. + ## GCP ### Architecture @@ -73,8 +130,11 @@ for the terraform variables - GCP account with an active project to be able to create GKE and GCR, and permission to assign roles. - Existing GCP KMS keyring and crypto key. - - [Create a Keyring](https://cloud.google.com/kms/docs/create-key-ring) - - [Create a Crypto Key](https://cloud.google.com/kms/docs/create-key) + - [Create a Keyring](https://cloud.google.com/kms/docs/create-key-ring) in + `global` location. + - [Create a Crypto Key](https://cloud.google.com/kms/docs/create-key) with + symmetric algorithm for encryption and decryption, and software based + protection level. - gcloud CLI, need to be logged in using `gcloud auth login` as a User (not a Service Account), configure application default credentials with `gcloud auth application-default login` and docker credential helper with `gcloud auth configure-docker`. @@ -112,15 +172,71 @@ for the terraform variables Following roles are needed for provisioning the infrastructure and running the tests: -- Compute Instance Admin (v1) -- Kubernetes Engine Admin -- Service Account User -- Artifact Registry Administrator -- Artifact Registry Repository Administrator -- Cloud KMS Admin -- Cloud KMS CryptoKey Encrypter -- Source Repository Administrator -- Pub/Sub Admin +- Compute Instance Admin (v1) - `roles/compute.instanceAdmin.v1` +- Kubernetes Engine Admin - `roles/container.admin` +- Service Account User - `roles/iam.serviceAccountUser` +- Service Account Token Creator - `roles/iam.serviceAccountTokenCreator` +- Artifact Registry Administrator - `roles/artifactregistry.admin` +- Artifact Registry Repository Administrator - `roles/artifactregistry.repoAdmin` +- Cloud KMS Admin - `roles/cloudkms.admin` +- Cloud KMS CryptoKey Encrypter - `roles/cloudkms.cryptoKeyEncrypt` +- Source Repository Administrator - `roles/source.admin` +- Pub/Sub Admin - `roles/pubsub.admin` + +### IAM and CI setup + +To create the necessary IAM role with all the permissions, set up CI secrets and +variables using +[gcp-gh-actions](https://github.com/fluxcd/test-infra/tree/main/tf-modules/gcp/github-actions) +use: + +```hcl +provider "google" {} + +resource "tls_private_key" "privatekey" { + algorithm = "RSA" + rsa_bits = 4096 +} + +module "gcp_gh_actions" { + source = "git::https://github.com/fluxcd/test-infra.git//tf-modules/gcp/github-actions" + + gcp_service_account_id = "flux2-e2e-test" + gcp_service_account_name = "flux2-e2e-test" + gcp_roles = [ + "roles/compute.instanceAdmin.v1", + "roles/container.admin", + "roles/iam.serviceAccountUser", + "roles/iam.serviceAccountTokenCreator", + "roles/artifactregistry.admin", + "roles/artifactregistry.repoAdmin", + "roles/cloudkms.admin", + "roles/cloudkms.cryptoKeyEncrypter", + "roles/source.admin", + "roles/pubsub.admin" + ] + + github_project = "flux2" + + github_secret_credentials_name = "FLUX2_E2E_GOOGLE_CREDENTIALS" + + github_secret_custom = { + "TF_VAR_gcp_keyring" = "", + "TF_VAR_gcp_crypto_key" = "", + "TF_VAR_gcp_email" = "", + "GITREPO_SSH_CONTENTS" = base64encode(tls_private_key.privatekey.private_key_openssh), + "GITREPO_SSH_PUB_CONTENTS" = base64encode(tls_private_key.privatekey.public_key_openssh) + } +} + +output "publickey" { + value = tls_private_key.privatekey.public_key_openssh +} +``` + +Copy the `publickey` output printed after applying, or run `terraform output` to +print it again, and add it in the Google Source Repository SSH public keys under +the user account with email address referred in `TF_VAR_gcp_email` above. ## Tests diff --git a/tests/integration/suite_test.go b/tests/integration/suite_test.go index be2ca0cf..b6ee3589 100644 --- a/tests/integration/suite_test.go +++ b/tests/integration/suite_test.go @@ -222,14 +222,11 @@ func TestMain(m *testing.M) { log.Printf("Failed to stop environment: %v", err) } - // Calling exit on panic prevents logging of panic error. - // Exit only on normal return. Explicitly detect panic and log the error - // on panic. - if err := recover(); err == nil { - os.Exit(exitCode) - } else { + // Log the panic error before exit to surface the cause of panic. + if err := recover(); err != nil { log.Printf("panic: %v", err) } + os.Exit(exitCode) }() // get terrraform infrastructure diff --git a/tests/integration/terraform/azure/aks.tf b/tests/integration/terraform/azure/aks.tf index 122cafa3..8ffadfce 100644 --- a/tests/integration/terraform/azure/aks.tf +++ b/tests/integration/terraform/azure/aks.tf @@ -13,6 +13,7 @@ module "acr" { location = var.azure_location aks_principal_id = [module.aks.principal_id] resource_group = module.aks.resource_group + admin_enabled = true tags = var.tags depends_on = [module.aks] From cdc1c98a115b1b797931fb87e199fe18d2891172 Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Wed, 19 Jul 2023 17:58:28 +0000 Subject: [PATCH 630/818] add workflow for gcp Signed-off-by: Somtochi Onyekwere --- .github/workflows/e2e-azure.yaml | 2 +- .github/workflows/e2e-gcp.yaml | 92 ++++++++++++++++++++++++++++++++ tests/integration/README.md | 2 +- 3 files changed, 94 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/e2e-gcp.yaml diff --git a/.github/workflows/e2e-azure.yaml b/.github/workflows/e2e-azure.yaml index def40dab..e34cb93c 100644 --- a/.github/workflows/e2e-azure.yaml +++ b/.github/workflows/e2e-azure.yaml @@ -97,7 +97,7 @@ jobs: - name: Set dynamic variables in .env run: | cat > .env < .env < build/ssh/key + export GITREPO_SSH_PATH=build/ssh/key + touch ./build/ssh/key.pub + echo $GITREPO_SSH_PUB_CONTENTS | base64 -d > ./build/ssh/key.pub + export GITREPO_SSH_PUB_PATH=build/ssh/key.pub + make test-gcp diff --git a/tests/integration/README.md b/tests/integration/README.md index aadfe49b..6e4c0349 100644 --- a/tests/integration/README.md +++ b/tests/integration/README.md @@ -179,7 +179,7 @@ Following roles are needed for provisioning the infrastructure and running the t - Artifact Registry Administrator - `roles/artifactregistry.admin` - Artifact Registry Repository Administrator - `roles/artifactregistry.repoAdmin` - Cloud KMS Admin - `roles/cloudkms.admin` -- Cloud KMS CryptoKey Encrypter - `roles/cloudkms.cryptoKeyEncrypt` +- Cloud KMS CryptoKey Encrypter - `roles/cloudkms.cryptoKeyEncrypter` - Source Repository Administrator - `roles/source.admin` - Pub/Sub Admin - `roles/pubsub.admin` From 3b637a512521de9414eab0850020b98ca6baa77b Mon Sep 17 00:00:00 2001 From: Sunny Date: Fri, 21 Jul 2023 14:50:51 +0000 Subject: [PATCH 631/818] tests/int: Separate ssh key names for Azure & GCP - Also update IAM setup docs to include github terraform provider configuration with github owner so that it can be used with a repository under an organization. Signed-off-by: Sunny --- .github/workflows/e2e-azure.yaml | 4 ++-- .github/workflows/e2e-gcp.yaml | 4 ++-- tests/integration/README.md | 38 +++++++++++++++++++++++--------- 3 files changed, 31 insertions(+), 15 deletions(-) diff --git a/.github/workflows/e2e-azure.yaml b/.github/workflows/e2e-azure.yaml index e34cb93c..bd8573be 100644 --- a/.github/workflows/e2e-azure.yaml +++ b/.github/workflows/e2e-azure.yaml @@ -110,8 +110,8 @@ jobs: TF_VAR_azuredevops_org: ${{ secrets.TF_VAR_azuredevops_org }} TF_VAR_azuredevops_pat: ${{ secrets.TF_VAR_azuredevops_pat }} TF_VAR_location: ${{ vars.TF_VAR_azure_location }} - GITREPO_SSH_CONTENTS: ${{ secrets.GITREPO_SSH_CONTENTS }} - GITREPO_SSH_PUB_CONTENTS: ${{ secrets.GITREPO_SSH_PUB_CONTENTS }} + GITREPO_SSH_CONTENTS: ${{ secrets.AZURE_GITREPO_SSH_CONTENTS }} + GITREPO_SSH_PUB_CONTENTS: ${{ secrets.AZURE_GITREPO_SSH_PUB_CONTENTS }} run: | source .env mkdir -p ./build/ssh diff --git a/.github/workflows/e2e-gcp.yaml b/.github/workflows/e2e-gcp.yaml index 91634d4c..99d7be26 100644 --- a/.github/workflows/e2e-gcp.yaml +++ b/.github/workflows/e2e-gcp.yaml @@ -78,8 +78,8 @@ jobs: TF_VAR_gcp_email: ${{ secrets.TF_VAR_gcp_email }} TF_VAR_gcp_keyring: ${{ secret.TF_VAR_gcp_keyring }} TF_VAR_gcp_crypto_key: ${{ secret.TF_VAR_gcp_crypto_key }} - GITREPO_SSH_CONTENTS: ${{ secrets.GITREPO_SSH_CONTENTS }} - GITREPO_SSH_PUB_CONTENTS: ${{ secrets.GITREPO_SSH_PUB_CONTENTS }} + GITREPO_SSH_CONTENTS: ${{ secrets.GCP_GITREPO_SSH_CONTENTS }} + GITREPO_SSH_PUB_CONTENTS: ${{ secrets.GCP_GITREPO_SSH_PUB_CONTENTS }} run: | source .env mkdir -p ./build/ssh diff --git a/tests/integration/README.md b/tests/integration/README.md index 6e4c0349..afd6be64 100644 --- a/tests/integration/README.md +++ b/tests/integration/README.md @@ -60,9 +60,14 @@ the tests: To create the necessary IAM role with all the permissions, set up CI secrets and variables using [azure-gh-actions](https://github.com/fluxcd/test-infra/tree/main/tf-modules/azure/github-actions) -use: +use the terraform configuration below. Please make sure all the requirements of +azure-gh-actions are followed before running it. ```hcl +provider "github" { + owner = "fluxcd" +} + resource "tls_private_key" "privatekey" { algorithm = "RSA" rsa_bits = 4096 @@ -96,10 +101,10 @@ module "azure_gh_actions" { github_secret_tenant_id_name = "AZ_ARM_TENANT_ID" github_secret_custom = { - "TF_VAR_azuredevops_org" = "", - "TF_VAR_azuredevops_pat" = "", - "GITREPO_SSH_CONTENTS" = base64encode(tls_private_key.privatekey.private_key_openssh), - "GITREPO_SSH_PUB_CONTENTS" = base64encode(tls_private_key.privatekey.public_key_openssh) + "TF_VAR_azuredevops_org" = "", + "TF_VAR_azuredevops_pat" = "", + "AZURE_GITREPO_SSH_CONTENTS" = base64encode(tls_private_key.privatekey.private_key_openssh), + "AZURE_GITREPO_SSH_PUB_CONTENTS" = base64encode(tls_private_key.privatekey.public_key_openssh) } } @@ -112,6 +117,9 @@ Copy the `publickey` output printed after applying, or run `terraform output` to print it again, and add it in the Azure DevOps SSH public keys under the user account that'll be used by flux in the tests. +**NOTE:** The environment variables used above are for the GitHub workflow that +runs the tests. Change the variable names if needed accordingly. + ## GCP ### Architecture @@ -188,11 +196,16 @@ Following roles are needed for provisioning the infrastructure and running the t To create the necessary IAM role with all the permissions, set up CI secrets and variables using [gcp-gh-actions](https://github.com/fluxcd/test-infra/tree/main/tf-modules/gcp/github-actions) -use: +use the terraform configuration below. Please make sure all the requirements of +gcp-gh-actions are followed before running it. ```hcl provider "google" {} +provider "github" { + owner = "fluxcd" +} + resource "tls_private_key" "privatekey" { algorithm = "RSA" rsa_bits = 4096 @@ -221,11 +234,11 @@ module "gcp_gh_actions" { github_secret_credentials_name = "FLUX2_E2E_GOOGLE_CREDENTIALS" github_secret_custom = { - "TF_VAR_gcp_keyring" = "", - "TF_VAR_gcp_crypto_key" = "", - "TF_VAR_gcp_email" = "", - "GITREPO_SSH_CONTENTS" = base64encode(tls_private_key.privatekey.private_key_openssh), - "GITREPO_SSH_PUB_CONTENTS" = base64encode(tls_private_key.privatekey.public_key_openssh) + "TF_VAR_gcp_keyring" = "", + "TF_VAR_gcp_crypto_key" = "", + "TF_VAR_gcp_email" = "", + "GCP_GITREPO_SSH_CONTENTS" = base64encode(tls_private_key.privatekey.private_key_openssh), + "GCP_GITREPO_SSH_PUB_CONTENTS" = base64encode(tls_private_key.privatekey.public_key_openssh) } } @@ -238,6 +251,9 @@ Copy the `publickey` output printed after applying, or run `terraform output` to print it again, and add it in the Google Source Repository SSH public keys under the user account with email address referred in `TF_VAR_gcp_email` above. +**NOTE:** The environment variables used above are for the GitHub workflow that +runs the tests. Change the variable names if needed accordingly. + ## Tests Each test run is initiated by running `terraform apply` in the provider's terraform directory e.g terraform apply, From 7141271bae96a9c8dc17f7cc1ada808d295c0222 Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Wed, 16 Aug 2023 22:14:13 +0100 Subject: [PATCH 632/818] instructions for test user in Azure DevOps and GCP source repo Signed-off-by: Somtochi Onyekwere --- tests/integration/README.md | 27 ++++++++++++++++--- tests/integration/terraform/gcp/sourcerepo.tf | 19 +++++++++++++ 2 files changed, 42 insertions(+), 4 deletions(-) diff --git a/tests/integration/README.md b/tests/integration/README.md index afd6be64..01c331b8 100644 --- a/tests/integration/README.md +++ b/tests/integration/README.md @@ -36,6 +36,17 @@ The [azure](./terraform/azure) Terraform creates the AKS cluster and related res - Azure DevOps only supports RSA keys. Please see [documentation](https://learn.microsoft.com/en-us/azure/devops/repos/git/use-ssh-keys-to-authenticate?view=azure-devops#set-up-ssh-key-authentication) for how to set up SSH key authentication. + - When using in CI, create a test user and use the test user's PAT and SSH key + for all Azure DevOps interactions. To grant the test user access in Azure + DevOps: + - Go to `Organization Settings` on the sidebar of the organization page. + - Under `General` > `Users`, click on `Add User` and input the user's email, + select `Access Level` of `Basic`. + - Go to `Security` > `Permissions`, click on the `User` tab. + - For the invited user, set the following permissions to `Allow`: + - `General: Create new project`. + - The user will get an email invitation and would need to create a Microsoft + account if they don't have one yet. **NOTE:** To use Service Principal (for example in CI environment), set the `ARM-*` variables in `.env`, source it and authenticate Azure CLI with: @@ -171,10 +182,18 @@ for the terraform variables [aggressive replacement in logs](https://github.com/google-github-actions/auth/blob/v1.1.0/docs/TROUBLESHOOTING.md#aggressive--replacement-in-logs) for more details. - Register [SSH Keys with Google Cloud](https://cloud.google.com/source-repositories/docs/authentication#ssh) - - Google Cloud supports these three SSH key types: RSA (only for keys with more than 2048 bits), ECDSA and ED25519 - - **Note:** Google doesn't allow an SSH key to be associated with a service account email address. Therefore, there has to be an actual - user that the SSH keys are registered to, and the email of this user will be passed to terraform through the `TF_VAR_gcp_email` - variable. + - Google Cloud supports these three SSH key types: RSA (only for keys with + more than 2048 bits), ECDSA and ED25519. + - The SSH user doesn't have to be a member of the GCP project. The terraform + setup will grant the user permissions to the repository. Visit + https://source.cloud.google.com, login or create a GCP account with the SSH + user's email address and add SSH keys in the account. Set this email as the + value for the environment variable `TF_VAR_gcp_email` in `.env` file to be + used as a terraform variable. + + **Note:** Google doesn't allow a SSH key to be associated with a service + account email address. Therefore, there has to be an actual user that the SSH + key is registered to. ### Permissions diff --git a/tests/integration/terraform/gcp/sourcerepo.tf b/tests/integration/terraform/gcp/sourcerepo.tf index 02a14928..4d7f5ee9 100644 --- a/tests/integration/terraform/gcp/sourcerepo.tf +++ b/tests/integration/terraform/gcp/sourcerepo.tf @@ -5,3 +5,22 @@ resource "google_sourcerepo_repository" "fleet-infra" { resource "google_sourcerepo_repository" "application" { name = "application-${random_pet.suffix.id}" } + +resource "google_sourcerepo_repository_iam_binding" "application_binding" { + project = google_sourcerepo_repository.application.project + repository = google_sourcerepo_repository.application.name + role = "roles/source.admin" + members = [ + "user:${var.gcp_email}", + ] +} + +resource "google_sourcerepo_repository_iam_binding" "fleet-infra_binding" { + project = google_sourcerepo_repository.fleet-infra.project + repository = google_sourcerepo_repository.fleet-infra.name + role = "roles/source.admin" + members = [ + "user:${var.gcp_email}", + ] +} + From c2e526ca57bce323537f64c682bf9982502abd44 Mon Sep 17 00:00:00 2001 From: Sunny Date: Thu, 31 Aug 2023 14:50:47 +0000 Subject: [PATCH 633/818] workflows/e2e-gcp: Fix secret variable typo Also update terraform config to add a description to the service account and a note about github organization repo. Signed-off-by: Sunny --- .github/workflows/e2e-gcp.yaml | 4 ++-- tests/integration/README.md | 9 +++++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/.github/workflows/e2e-gcp.yaml b/.github/workflows/e2e-gcp.yaml index 99d7be26..5f68c639 100644 --- a/.github/workflows/e2e-gcp.yaml +++ b/.github/workflows/e2e-gcp.yaml @@ -76,8 +76,8 @@ jobs: TF_VAR_gcp_region: ${{ vars.TF_VAR_gcp_region }} TF_VAR_gcp_zone: ${{ vars.TF_VAR_gcp_zone }} TF_VAR_gcp_email: ${{ secrets.TF_VAR_gcp_email }} - TF_VAR_gcp_keyring: ${{ secret.TF_VAR_gcp_keyring }} - TF_VAR_gcp_crypto_key: ${{ secret.TF_VAR_gcp_crypto_key }} + TF_VAR_gcp_keyring: ${{ secrets.TF_VAR_gcp_keyring }} + TF_VAR_gcp_crypto_key: ${{ secrets.TF_VAR_gcp_crypto_key }} GITREPO_SSH_CONTENTS: ${{ secrets.GCP_GITREPO_SSH_CONTENTS }} GITREPO_SSH_PUB_CONTENTS: ${{ secrets.GCP_GITREPO_SSH_PUB_CONTENTS }} run: | diff --git a/tests/integration/README.md b/tests/integration/README.md index 01c331b8..db6f8d14 100644 --- a/tests/integration/README.md +++ b/tests/integration/README.md @@ -218,6 +218,10 @@ variables using use the terraform configuration below. Please make sure all the requirements of gcp-gh-actions are followed before running it. +**NOTE:** When running the following for a repo under and organization, set the +environment variable `GITHUB_ORGANIZATION` if setting the `owner` in the +`github` provider doesn't work. + ```hcl provider "google" {} @@ -233,8 +237,9 @@ resource "tls_private_key" "privatekey" { module "gcp_gh_actions" { source = "git::https://github.com/fluxcd/test-infra.git//tf-modules/gcp/github-actions" - gcp_service_account_id = "flux2-e2e-test" - gcp_service_account_name = "flux2-e2e-test" + gcp_service_account_id = "flux2-e2e-test" + gcp_service_account_name = "flux2-e2e-test" + gcp_service_account_description = "For running fluxcd/flux2 e2e tests." gcp_roles = [ "roles/compute.instanceAdmin.v1", "roles/container.admin", From a9a67a27e7a2637c56db048f5d22fa616e327384 Mon Sep 17 00:00:00 2001 From: Sunny Date: Thu, 31 Aug 2023 16:00:53 +0000 Subject: [PATCH 634/818] workflows/e2e-azure: Disable new azure job There's no azure subscription to run the tests against at present. Signed-off-by: Sunny --- .github/workflows/e2e-azure.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/e2e-azure.yaml b/.github/workflows/e2e-azure.yaml index bd8573be..80e70dc5 100644 --- a/.github/workflows/e2e-azure.yaml +++ b/.github/workflows/e2e-azure.yaml @@ -71,7 +71,8 @@ jobs: defaults: run: working-directory: ./tests/integration - if: (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) && github.actor != 'dependabot[bot]' + # This job is currently disabled. Remove the false check when Azure subscription is enabled. + if: false && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) && github.actor != 'dependabot[bot]' steps: - name: CheckoutD uses: actions/checkout@24cb9080177205b6e8c946b17badbe402adc938f # v3.4.0 From 5d1cadcd5ecc9ba88ca5258e767b90eea8bb4195 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 31 Aug 2023 18:24:29 +0000 Subject: [PATCH 635/818] build(deps): bump github.com/docker/docker in /tests/integration Bumps [github.com/docker/docker](https://github.com/docker/docker) from 23.0.1+incompatible to 23.0.3+incompatible. - [Release notes](https://github.com/docker/docker/releases) - [Commits](https://github.com/docker/docker/compare/v23.0.1...v23.0.3) --- updated-dependencies: - dependency-name: github.com/docker/docker dependency-type: indirect ... Signed-off-by: dependabot[bot] --- tests/integration/go.mod | 2 +- tests/integration/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/integration/go.mod b/tests/integration/go.mod index 6a405660..e9164d51 100644 --- a/tests/integration/go.mod +++ b/tests/integration/go.mod @@ -58,7 +58,7 @@ require ( github.com/devigned/tab v0.1.1 // indirect github.com/docker/cli v23.0.1+incompatible // indirect github.com/docker/distribution v2.8.1+incompatible // indirect - github.com/docker/docker v23.0.1+incompatible // indirect + github.com/docker/docker v23.0.3+incompatible // indirect github.com/docker/docker-credential-helpers v0.7.0 // indirect github.com/emicklei/go-restful/v3 v3.10.0 // indirect github.com/emirpasic/gods v1.18.1 // indirect diff --git a/tests/integration/go.sum b/tests/integration/go.sum index 09f99d0c..b1b63e50 100644 --- a/tests/integration/go.sum +++ b/tests/integration/go.sum @@ -104,8 +104,8 @@ github.com/docker/cli v23.0.1+incompatible h1:LRyWITpGzl2C9e9uGxzisptnxAn1zfZKXy github.com/docker/cli v23.0.1+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68= github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v23.0.1+incompatible h1:vjgvJZxprTTE1A37nm+CLNAdwu6xZekyoiVlUZEINcY= -github.com/docker/docker v23.0.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v23.0.3+incompatible h1:9GhVsShNWz1hO//9BNg/dpMnZW25KydO4wtVxWAIbho= +github.com/docker/docker v23.0.3+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker-credential-helpers v0.7.0 h1:xtCHsjxogADNZcdv1pKUHXryefjlVRqWqIhk/uXJp0A= github.com/docker/docker-credential-helpers v0.7.0/go.mod h1:rETQfLdHNT3foU5kuNkFR1R1V12OJRRO5lzt2D1b5X0= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= From aff3365750e69e1b25383f22928a1221e3990a55 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 1 Sep 2023 07:59:47 +0000 Subject: [PATCH 636/818] build(deps): bump github.com/docker/distribution in /tests/integration Bumps [github.com/docker/distribution](https://github.com/docker/distribution) from 2.8.1+incompatible to 2.8.2+incompatible. - [Release notes](https://github.com/docker/distribution/releases) - [Commits](https://github.com/docker/distribution/compare/v2.8.1...v2.8.2) --- updated-dependencies: - dependency-name: github.com/docker/distribution dependency-type: indirect ... Signed-off-by: dependabot[bot] --- tests/integration/go.mod | 2 +- tests/integration/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/integration/go.mod b/tests/integration/go.mod index e9164d51..f98b27a0 100644 --- a/tests/integration/go.mod +++ b/tests/integration/go.mod @@ -57,7 +57,7 @@ require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/devigned/tab v0.1.1 // indirect github.com/docker/cli v23.0.1+incompatible // indirect - github.com/docker/distribution v2.8.1+incompatible // indirect + github.com/docker/distribution v2.8.2+incompatible // indirect github.com/docker/docker v23.0.3+incompatible // indirect github.com/docker/docker-credential-helpers v0.7.0 // indirect github.com/emicklei/go-restful/v3 v3.10.0 // indirect diff --git a/tests/integration/go.sum b/tests/integration/go.sum index b1b63e50..889c1301 100644 --- a/tests/integration/go.sum +++ b/tests/integration/go.sum @@ -102,8 +102,8 @@ github.com/devigned/tab v0.1.1/go.mod h1:XG9mPq0dFghrYvoBF3xdRrJzSTX1b7IQrvaL9mz github.com/dimchansky/utfbom v1.1.0 h1:FcM3g+nofKgUteL8dm/UpdRXNC9KmADgTpLKsu0TRo4= github.com/docker/cli v23.0.1+incompatible h1:LRyWITpGzl2C9e9uGxzisptnxAn1zfZKXy13Ul2Q5oM= github.com/docker/cli v23.0.1+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= -github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68= -github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= +github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/docker v23.0.3+incompatible h1:9GhVsShNWz1hO//9BNg/dpMnZW25KydO4wtVxWAIbho= github.com/docker/docker v23.0.3+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker-credential-helpers v0.7.0 h1:xtCHsjxogADNZcdv1pKUHXryefjlVRqWqIhk/uXJp0A= From dbb9ea303de16a0349e79a4480573d2c6723f490 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Sep 2023 00:52:11 +0000 Subject: [PATCH 637/818] build(deps): bump the ci group with 4 updates Bumps the ci group with 4 updates: [actions/checkout](https://github.com/actions/checkout), [actions/setup-go](https://github.com/actions/setup-go), [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) and [sigstore/cosign-installer](https://github.com/sigstore/cosign-installer). Updates `actions/checkout` from 3.4.0 to 3.6.0 - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v3.4.0...f43a0e5ff2bd294095638e18286ca9a3d1956744) Updates `actions/setup-go` from 4.0.0 to 4.1.0 - [Release notes](https://github.com/actions/setup-go/releases) - [Commits](https://github.com/actions/setup-go/compare/v4...93397bea11091df50f3d7e59dc26a7711a8bcfbe) Updates `docker/setup-buildx-action` from 2.9.1 to 2.10.0 - [Release notes](https://github.com/docker/setup-buildx-action/releases) - [Commits](https://github.com/docker/setup-buildx-action/compare/4c0219f9ac95b02789c1075625400b2acbff50b1...885d1462b80bc1c1c7f0b00334ad271f09369c55) Updates `sigstore/cosign-installer` from 3.1.1 to 3.1.2 - [Release notes](https://github.com/sigstore/cosign-installer/releases) - [Commits](https://github.com/sigstore/cosign-installer/compare/6e04d228eb30da1757ee4e1dd75a0ec73a653e06...11086d25041f77fe8fe7b9ea4e48e3b9192b8f19) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-minor dependency-group: ci - dependency-name: actions/setup-go dependency-type: direct:production update-type: version-update:semver-minor dependency-group: ci - dependency-name: docker/setup-buildx-action dependency-type: direct:production update-type: version-update:semver-minor dependency-group: ci - dependency-name: sigstore/cosign-installer dependency-type: direct:production update-type: version-update:semver-patch dependency-group: ci ... Signed-off-by: dependabot[bot] --- .github/workflows/e2e-azure.yaml | 4 ++-- .github/workflows/e2e-gcp.yaml | 6 +++--- .github/workflows/release.yaml | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/e2e-azure.yaml b/.github/workflows/e2e-azure.yaml index 80e70dc5..829e0457 100644 --- a/.github/workflows/e2e-azure.yaml +++ b/.github/workflows/e2e-azure.yaml @@ -75,9 +75,9 @@ jobs: if: false && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) && github.actor != 'dependabot[bot]' steps: - name: CheckoutD - uses: actions/checkout@24cb9080177205b6e8c946b17badbe402adc938f # v3.4.0 + uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 - name: Setup Go - uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9 # v4.0.0 + uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 with: go-version: 1.20.x cache-dependency-path: tests/integration/go.sum diff --git a/.github/workflows/e2e-gcp.yaml b/.github/workflows/e2e-gcp.yaml index 5f68c639..8ba23223 100644 --- a/.github/workflows/e2e-gcp.yaml +++ b/.github/workflows/e2e-gcp.yaml @@ -29,9 +29,9 @@ jobs: if: (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) && github.actor != 'dependabot[bot]' steps: - name: Checkout - uses: actions/checkout@24cb9080177205b6e8c946b17badbe402adc938f # v3.4.0 + uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 - name: Setup Go - uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9 # v4.0.0 + uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 with: go-version: 1.20.x cache-dependency-path: tests/integration/go.sum @@ -56,7 +56,7 @@ jobs: - name: Setup QEMU uses: docker/setup-qemu-action@2b82ce82d56a2a04d2637cd93a637ae1b359c0a7 # v2.2.0 - name: Setup Docker Buildx - uses: docker/setup-buildx-action@4c0219f9ac95b02789c1075625400b2acbff50b1 # v2.9.1 + uses: docker/setup-buildx-action@885d1462b80bc1c1c7f0b00334ad271f09369c55 # v2.10.0 - name: Log into us-central1-docker.pkg.dev uses: docker/login-action@465a07811f14bebb1938fbed4728c6a1ff8901fc # v2.2.0 with: diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 87f4807d..25409bf0 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -32,11 +32,11 @@ jobs: uses: docker/setup-qemu-action@2b82ce82d56a2a04d2637cd93a637ae1b359c0a7 # v2.2.0 - name: Setup Docker Buildx id: buildx - uses: docker/setup-buildx-action@4c0219f9ac95b02789c1075625400b2acbff50b1 # v2.9.1 + uses: docker/setup-buildx-action@885d1462b80bc1c1c7f0b00334ad271f09369c55 # v2.10.0 - name: Setup Syft uses: anchore/sbom-action/download-syft@78fc58e266e87a38d4194b2137a3d4e9bcaf7ca1 # v0.14.3 - name: Setup Cosign - uses: sigstore/cosign-installer@6e04d228eb30da1757ee4e1dd75a0ec73a653e06 # v3.1.1 + uses: sigstore/cosign-installer@11086d25041f77fe8fe7b9ea4e48e3b9192b8f19 # v3.1.2 - name: Setup Kustomize uses: fluxcd/pkg/actions/kustomize@main - name: Login to GitHub Container Registry @@ -155,7 +155,7 @@ jobs: --path="./flux-system" \ --source=${{ github.repositoryUrl }} \ --revision="${{ github.ref_name }}@sha1:${{ github.sha }}" - - uses: sigstore/cosign-installer@6e04d228eb30da1757ee4e1dd75a0ec73a653e06 # v3.1.1 + - uses: sigstore/cosign-installer@11086d25041f77fe8fe7b9ea4e48e3b9192b8f19 # v3.1.2 - name: Sign manifests env: COSIGN_EXPERIMENTAL: 1 From 2d1937a5c89632f03d7758279ed1d5b30fdcfdfc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 7 Sep 2023 13:02:50 +0000 Subject: [PATCH 638/818] build(deps): bump github.com/cyphar/filepath-securejoin in /tests/azure Bumps [github.com/cyphar/filepath-securejoin](https://github.com/cyphar/filepath-securejoin) from 0.2.3 to 0.2.4. - [Release notes](https://github.com/cyphar/filepath-securejoin/releases) - [Commits](https://github.com/cyphar/filepath-securejoin/compare/v0.2.3...v0.2.4) --- updated-dependencies: - dependency-name: github.com/cyphar/filepath-securejoin dependency-type: indirect ... Signed-off-by: dependabot[bot] --- tests/azure/go.mod | 2 +- tests/azure/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/azure/go.mod b/tests/azure/go.mod index fd600a12..5069b494 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -50,7 +50,7 @@ require ( github.com/acomagu/bufpipe v1.0.4 // indirect github.com/apparentlymart/go-textseg/v13 v13.0.0 // indirect github.com/cloudflare/circl v1.3.3 // indirect - github.com/cyphar/filepath-securejoin v0.2.3 // indirect + github.com/cyphar/filepath-securejoin v0.2.4 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/devigned/tab v0.1.1 // indirect github.com/emicklei/go-restful/v3 v3.10.0 // indirect diff --git a/tests/azure/go.sum b/tests/azure/go.sum index d78db317..612c2150 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -63,8 +63,8 @@ github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGX github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/cyphar/filepath-securejoin v0.2.3 h1:YX6ebbZCZP7VkM3scTTokDgBL2TY741X51MTk3ycuNI= -github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= +github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg= +github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= From ab18cfe1a2ab078421fbdf5fdf652b801d22be41 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 8 Sep 2023 07:28:36 +0000 Subject: [PATCH 639/818] build(deps): bump github.com/cyphar/filepath-securejoin Bumps [github.com/cyphar/filepath-securejoin](https://github.com/cyphar/filepath-securejoin) from 0.2.3 to 0.2.4. - [Release notes](https://github.com/cyphar/filepath-securejoin/releases) - [Commits](https://github.com/cyphar/filepath-securejoin/compare/v0.2.3...v0.2.4) --- updated-dependencies: - dependency-name: github.com/cyphar/filepath-securejoin dependency-type: indirect ... Signed-off-by: dependabot[bot] --- tests/integration/go.mod | 2 +- tests/integration/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/integration/go.mod b/tests/integration/go.mod index f98b27a0..0c553c98 100644 --- a/tests/integration/go.mod +++ b/tests/integration/go.mod @@ -53,7 +53,7 @@ require ( github.com/apparentlymart/go-textseg/v13 v13.0.0 // indirect github.com/cloudflare/circl v1.3.3 // indirect github.com/containerd/stargz-snapshotter/estargz v0.14.3 // indirect - github.com/cyphar/filepath-securejoin v0.2.3 // indirect + github.com/cyphar/filepath-securejoin v0.2.4 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/devigned/tab v0.1.1 // indirect github.com/docker/cli v23.0.1+incompatible // indirect diff --git a/tests/integration/go.sum b/tests/integration/go.sum index 889c1301..02472dfa 100644 --- a/tests/integration/go.sum +++ b/tests/integration/go.sum @@ -92,8 +92,8 @@ github.com/containerd/stargz-snapshotter/estargz v0.14.3 h1:OqlDCK3ZVUO6C3B/5FSk github.com/containerd/stargz-snapshotter/estargz v0.14.3/go.mod h1:KY//uOCIkSuNAHhJogcZtrNHdKrA99/FCCRjE3HD36o= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/cyphar/filepath-securejoin v0.2.3 h1:YX6ebbZCZP7VkM3scTTokDgBL2TY741X51MTk3ycuNI= -github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= +github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg= +github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= From 8cd7d8c5d242bac978926b5d13807947abdc3e16 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Sep 2023 01:13:25 +0000 Subject: [PATCH 640/818] build(deps): bump the ci group with 3 updates Bumps the ci group with 3 updates: [actions/checkout](https://github.com/actions/checkout), [actions/upload-artifact](https://github.com/actions/upload-artifact) and [goreleaser/goreleaser-action](https://github.com/goreleaser/goreleaser-action). Updates `actions/checkout` from 3.6.0 to 4.0.0 - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/f43a0e5ff2bd294095638e18286ca9a3d1956744...3df4ab11eba7bda6032a0b82a6bb43b11571feac) Updates `actions/upload-artifact` from 3.1.2 to 3.1.3 - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/0b7f8abb1508181956e8e162db84b466c27e18ce...a8a3f3ad30e3422c9c7b888a15615d19a852ae32) Updates `goreleaser/goreleaser-action` from 4.4.0 to 4.6.0 - [Release notes](https://github.com/goreleaser/goreleaser-action/releases) - [Commits](https://github.com/goreleaser/goreleaser-action/compare/3fa32b8bb5620a2c1afe798654bbad59f9da4906...5fdedb94abba051217030cc86d4523cf3f02243d) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-major dependency-group: ci - dependency-name: actions/upload-artifact dependency-type: direct:production update-type: version-update:semver-patch dependency-group: ci - dependency-name: goreleaser/goreleaser-action dependency-type: direct:production update-type: version-update:semver-minor dependency-group: ci ... Signed-off-by: dependabot[bot] --- .github/workflows/action.yaml | 2 +- .github/workflows/backport.yaml | 2 +- .github/workflows/e2e-arm64.yaml | 2 +- .github/workflows/e2e-azure.yaml | 4 ++-- .github/workflows/e2e-bootstrap.yaml | 2 +- .github/workflows/e2e-gcp.yaml | 2 +- .github/workflows/e2e.yaml | 2 +- .github/workflows/ossf.yaml | 4 ++-- .github/workflows/release.yaml | 6 +++--- .github/workflows/scan.yaml | 6 +++--- .github/workflows/sync-labels.yaml | 2 +- .github/workflows/update.yaml | 2 +- 12 files changed, 18 insertions(+), 18 deletions(-) diff --git a/.github/workflows/action.yaml b/.github/workflows/action.yaml index 60708107..e1b53c48 100644 --- a/.github/workflows/action.yaml +++ b/.github/workflows/action.yaml @@ -24,6 +24,6 @@ jobs: name: action on ${{ matrix.version }} steps: - name: Checkout - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - name: Setup flux uses: ./action diff --git a/.github/workflows/backport.yaml b/.github/workflows/backport.yaml index 52e5ba93..b3d38869 100644 --- a/.github/workflows/backport.yaml +++ b/.github/workflows/backport.yaml @@ -13,7 +13,7 @@ jobs: if: github.event.pull_request.state == 'closed' && github.event.pull_request.merged && (github.event_name != 'labeled' || startsWith('backport:', github.event.label.name)) steps: - name: Checkout - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 with: ref: ${{ github.event.pull_request.head.sha }} - name: Create backport PRs diff --git a/.github/workflows/e2e-arm64.yaml b/.github/workflows/e2e-arm64.yaml index 823c7e2c..d309c7d6 100644 --- a/.github/workflows/e2e-arm64.yaml +++ b/.github/workflows/e2e-arm64.yaml @@ -21,7 +21,7 @@ jobs: fail-fast: false steps: - name: Checkout - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - name: Setup Go uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 with: diff --git a/.github/workflows/e2e-azure.yaml b/.github/workflows/e2e-azure.yaml index 829e0457..c1916609 100644 --- a/.github/workflows/e2e-azure.yaml +++ b/.github/workflows/e2e-azure.yaml @@ -30,7 +30,7 @@ jobs: if: false && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) && github.actor != 'dependabot[bot]' steps: - name: Checkout - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - name: Setup Go uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 with: @@ -75,7 +75,7 @@ jobs: if: false && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) && github.actor != 'dependabot[bot]' steps: - name: CheckoutD - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - name: Setup Go uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 with: diff --git a/.github/workflows/e2e-bootstrap.yaml b/.github/workflows/e2e-bootstrap.yaml index e4e0d5c4..2ccb4408 100644 --- a/.github/workflows/e2e-bootstrap.yaml +++ b/.github/workflows/e2e-bootstrap.yaml @@ -17,7 +17,7 @@ jobs: if: (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) && github.actor != 'dependabot[bot]' steps: - name: Checkout - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - name: Setup Go uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 with: diff --git a/.github/workflows/e2e-gcp.yaml b/.github/workflows/e2e-gcp.yaml index 8ba23223..89b919c3 100644 --- a/.github/workflows/e2e-gcp.yaml +++ b/.github/workflows/e2e-gcp.yaml @@ -29,7 +29,7 @@ jobs: if: (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) && github.actor != 'dependabot[bot]' steps: - name: Checkout - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - name: Setup Go uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 with: diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index dfb6ab43..7c7a99ab 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -21,7 +21,7 @@ jobs: - 5000:5000 steps: - name: Checkout - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - name: Setup Go uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 with: diff --git a/.github/workflows/ossf.yaml b/.github/workflows/ossf.yaml index 6a268175..bec8827b 100644 --- a/.github/workflows/ossf.yaml +++ b/.github/workflows/ossf.yaml @@ -19,7 +19,7 @@ jobs: actions: read contents: read steps: - - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - name: Run analysis uses: ossf/scorecard-action@08b4669551908b1024bb425080c797723083c031 # v2.2.0 with: @@ -28,7 +28,7 @@ jobs: repo_token: ${{ secrets.GITHUB_TOKEN }} publish_results: true - name: Upload artifact - uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2 + uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3.1.3 with: name: SARIF file path: results.sarif diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 25409bf0..aa96fa0c 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -20,7 +20,7 @@ jobs: packages: write # needed for ghcr access steps: - name: Checkout - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - name: Unshallow run: git fetch --prune --unshallow - name: Setup Go @@ -79,7 +79,7 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Run GoReleaser id: run-goreleaser - uses: goreleaser/goreleaser-action@3fa32b8bb5620a2c1afe798654bbad59f9da4906 # v4.4.0 + uses: goreleaser/goreleaser-action@5fdedb94abba051217030cc86d4523cf3f02243d # v4.6.0 with: version: latest args: release --release-notes=output/notes.md --skip-validate @@ -110,7 +110,7 @@ jobs: id-token: write packages: write steps: - - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - name: Setup Kustomize uses: fluxcd/pkg/actions/kustomize@main - name: Setup Flux CLI diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index accdc148..a8f29dbd 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -17,7 +17,7 @@ jobs: runs-on: ubuntu-latest if: github.actor != 'dependabot[bot]' steps: - - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - name: Run FOSSA scan and upload build data uses: fossa-contrib/fossa-action@6728dc6fe9a068c648d080c33829ffbe56565023 # v2.0.0 with: @@ -31,7 +31,7 @@ jobs: security-events: write if: (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) && github.actor != 'dependabot[bot]' steps: - - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - name: Setup Kustomize uses: fluxcd/pkg/actions/kustomize@main - name: Setup Go @@ -64,7 +64,7 @@ jobs: if: github.actor != 'dependabot[bot]' steps: - name: Checkout repository - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - name: Setup Go uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 with: diff --git a/.github/workflows/sync-labels.yaml b/.github/workflows/sync-labels.yaml index 7350b13b..17144468 100644 --- a/.github/workflows/sync-labels.yaml +++ b/.github/workflows/sync-labels.yaml @@ -17,7 +17,7 @@ jobs: permissions: issues: write steps: - - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - uses: EndBug/label-sync@da00f2c11fdb78e4fae44adac2fdd713778ea3e8 # v2.3.2 with: # Configuration file diff --git a/.github/workflows/update.yaml b/.github/workflows/update.yaml index cb825cf8..1b3ab231 100644 --- a/.github/workflows/update.yaml +++ b/.github/workflows/update.yaml @@ -18,7 +18,7 @@ jobs: pull-requests: write steps: - name: Check out code - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - name: Setup Go uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 with: From bc90e7cf011d6964fcf8f1cd094d18fe09569aaa Mon Sep 17 00:00:00 2001 From: Son Bui Date: Tue, 12 Sep 2023 17:12:20 +0800 Subject: [PATCH 641/818] chore: remove support armv6h for aur package #4224 Signed-off-by: Son Bui --- .github/aur/flux-go/.SRCINFO.template | 1 - .github/aur/flux-go/PKGBUILD.template | 4 ++-- .github/aur/flux-scm/.SRCINFO.template | 1 - .github/aur/flux-scm/PKGBUILD.template | 4 ++-- 4 files changed, 4 insertions(+), 6 deletions(-) diff --git a/.github/aur/flux-go/.SRCINFO.template b/.github/aur/flux-go/.SRCINFO.template index d41a9e34..134f969c 100644 --- a/.github/aur/flux-go/.SRCINFO.template +++ b/.github/aur/flux-go/.SRCINFO.template @@ -4,7 +4,6 @@ pkgbase = flux-go pkgrel = ${PKGREL} url = https://fluxcd.io/ arch = x86_64 - arch = armv6h arch = armv7h arch = aarch64 license = APACHE diff --git a/.github/aur/flux-go/PKGBUILD.template b/.github/aur/flux-go/PKGBUILD.template index 05372e13..6125498a 100644 --- a/.github/aur/flux-go/PKGBUILD.template +++ b/.github/aur/flux-go/PKGBUILD.template @@ -8,7 +8,7 @@ _srcname=flux _srcver=${VERSION} pkgdesc="Open and extensible continuous delivery solution for Kubernetes" url="https://fluxcd.io/" -arch=("x86_64" "armv6h" "armv7h" "aarch64") +arch=("x86_64" "armv7h" "aarch64") license=("APACHE") provides=("flux-bin") conflicts=("flux-bin") @@ -41,7 +41,7 @@ check() { aarch64) export ENVTEST_ARCH=arm64 ;; - armv6h|armv7h) + armv7h) export ENVTEST_ARCH=arm ;; esac diff --git a/.github/aur/flux-scm/.SRCINFO.template b/.github/aur/flux-scm/.SRCINFO.template index 343c7ce2..6237e672 100644 --- a/.github/aur/flux-scm/.SRCINFO.template +++ b/.github/aur/flux-scm/.SRCINFO.template @@ -4,7 +4,6 @@ pkgbase = flux-scm pkgrel = ${PKGREL} url = https://fluxcd.io/ arch = x86_64 - arch = armv6h arch = armv7h arch = aarch64 license = APACHE diff --git a/.github/aur/flux-scm/PKGBUILD.template b/.github/aur/flux-scm/PKGBUILD.template index 6e213ac2..dc091714 100644 --- a/.github/aur/flux-scm/PKGBUILD.template +++ b/.github/aur/flux-scm/PKGBUILD.template @@ -7,7 +7,7 @@ pkgrel=${PKGREL} _srcname=flux pkgdesc="Open and extensible continuous delivery solution for Kubernetes" url="https://fluxcd.io/" -arch=("x86_64" "armv6h" "armv7h" "aarch64") +arch=("x86_64" "armv7h" "aarch64") license=("APACHE") provides=("flux-bin") conflicts=("flux-bin") @@ -42,7 +42,7 @@ check() { aarch64) export ENVTEST_ARCH=arm64 ;; - armv6h|armv7h) + armv7h) export ENVTEST_ARCH=arm ;; esac From c721474e0bcbe21d7161bb62dd380908578f575b Mon Sep 17 00:00:00 2001 From: Max Jonas Werner Date: Wed, 13 Sep 2023 17:47:07 +0200 Subject: [PATCH 642/818] Upgrade github.com/fluxcd/pkg/{git,git/gogit} This allows us to get rid of the replace directive consuming the filepath-securejoin fork. Signed-off-by: Max Jonas Werner --- go.mod | 29 ++++++-------- go.sum | 57 +++++++++++++-------------- tests/azure/go.mod | 24 ++++++------ tests/azure/go.sum | 55 +++++++++++++------------- tests/integration/go.mod | 33 ++++++++-------- tests/integration/go.sum | 85 +++++++++++++++++++++------------------- 6 files changed, 142 insertions(+), 141 deletions(-) diff --git a/go.mod b/go.mod index b14bffba..baca76a6 100644 --- a/go.mod +++ b/go.mod @@ -2,16 +2,13 @@ module github.com/fluxcd/flux2/v2 go 1.20 -// Replace for Go 1.20+ Windows compatibility. -replace github.com/cyphar/filepath-securejoin => github.com/pjbgf/filepath-securejoin v0.0.0-20230821001828-0ca74e6d4bf8 - // Fix CVE-2022-28948. replace gopkg.in/yaml.v3 => gopkg.in/yaml.v3 v3.0.1 require ( github.com/Masterminds/semver/v3 v3.2.1 - github.com/ProtonMail/go-crypto v0.0.0-20230717121422-5aa5874ade95 - github.com/cyphar/filepath-securejoin v0.2.3 + github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 + github.com/cyphar/filepath-securejoin v0.2.4 github.com/distribution/distribution/v3 v3.0.0-20230823142118-4f7424c8eb41 github.com/fluxcd/go-git-providers v0.18.0 github.com/fluxcd/helm-controller/api v0.36.0 @@ -21,8 +18,8 @@ require ( github.com/fluxcd/notification-controller/api v1.1.0 github.com/fluxcd/pkg/apis/event v0.5.2 github.com/fluxcd/pkg/apis/meta v1.1.2 - github.com/fluxcd/pkg/git v0.13.0 - github.com/fluxcd/pkg/git/gogit v0.13.0 + github.com/fluxcd/pkg/git v0.14.0 + github.com/fluxcd/pkg/git/gogit v0.14.0 github.com/fluxcd/pkg/kustomize v1.3.4 github.com/fluxcd/pkg/oci v0.31.0 github.com/fluxcd/pkg/runtime v0.42.0 @@ -32,7 +29,7 @@ require ( github.com/fluxcd/pkg/tar v0.2.0 github.com/fluxcd/pkg/version v0.2.2 github.com/fluxcd/source-controller/api v1.1.0 - github.com/go-git/go-git/v5 v5.8.1 + github.com/go-git/go-git/v5 v5.9.0 github.com/go-logr/logr v1.2.4 github.com/gonvenience/bunt v1.3.5 github.com/gonvenience/ytbx v1.4.4 @@ -49,8 +46,8 @@ require ( github.com/spf13/cobra v1.7.0 github.com/spf13/pflag v1.0.5 github.com/theckman/yacspin v0.13.12 - golang.org/x/crypto v0.12.0 - golang.org/x/term v0.11.0 + golang.org/x/crypto v0.13.0 + golang.org/x/term v0.12.0 k8s.io/api v0.27.4 k8s.io/apiextensions-apiserver v0.27.4 k8s.io/apimachinery v0.27.4 @@ -117,7 +114,7 @@ require ( github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/go-errors/errors v1.4.2 // indirect github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect - github.com/go-git/go-billy/v5 v5.4.1 // indirect + github.com/go-git/go-billy/v5 v5.5.0 // indirect github.com/go-openapi/jsonpointer v0.19.6 // indirect github.com/go-openapi/jsonreference v0.20.1 // indirect github.com/go-openapi/swag v0.22.3 // indirect @@ -193,14 +190,14 @@ require ( github.com/xanzy/ssh-agent v0.3.3 // indirect github.com/xlab/treeprint v1.1.0 // indirect go.starlark.net v0.0.0-20221028183056-acb66ad56dd2 // indirect - golang.org/x/mod v0.11.0 // indirect - golang.org/x/net v0.14.0 // indirect + golang.org/x/mod v0.12.0 // indirect + golang.org/x/net v0.15.0 // indirect golang.org/x/oauth2 v0.8.0 // indirect golang.org/x/sync v0.3.0 // indirect - golang.org/x/sys v0.11.0 // indirect - golang.org/x/text v0.12.0 // indirect + golang.org/x/sys v0.12.0 // indirect + golang.org/x/text v0.13.0 // indirect golang.org/x/time v0.3.0 // indirect - golang.org/x/tools v0.10.0 // indirect + golang.org/x/tools v0.13.0 // indirect gomodules.xyz/jsonpatch/v2 v2.3.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/protobuf v1.30.0 // indirect diff --git a/go.sum b/go.sum index 86adc693..086255ea 100644 --- a/go.sum +++ b/go.sum @@ -25,8 +25,8 @@ github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/ProtonMail/go-crypto v0.0.0-20230717121422-5aa5874ade95 h1:KLq8BE0KwCL+mmXnjLWEAOYO+2l2AE4YMmqG1ZpZHBs= -github.com/ProtonMail/go-crypto v0.0.0-20230717121422-5aa5874ade95/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= +github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 h1:kkhsdkhsCvIsutKu5zLMgWtgh9YxGCNAw8Ad8hjwfYg= +github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= github.com/acomagu/bufpipe v1.0.4 h1:e3H4WUzM3npvo5uv95QuJM3cQspFNtFBzvJ2oNjKIDQ= github.com/acomagu/bufpipe v1.0.4/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -93,6 +93,8 @@ github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHH github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= +github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg= +github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -116,7 +118,7 @@ github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNE github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/drone/envsubst v1.0.3 h1:PCIBwNDYjs50AsLZPYdfhSATKaRg/FJmDc2D6+C2x8g= github.com/drone/envsubst v1.0.3/go.mod h1:N2jZmlMufstn1KEqvbHjw40h1KyTmnVzHcSc9bFiJ2g= -github.com/elazarl/goproxy v0.0.0-20230731152917-f99041a5c027 h1:1L0aalTpPz7YlMxETKpmQoWMBkeiuorElZIXoNmgiPE= +github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a h1:mATvB/9r/3gvcejNsXKSkQ6lcIaNec2nyfOdlTBR2lU= github.com/emicklei/go-restful/v3 v3.10.0 h1:X4gma4HM7hFm6WMeAsTfqA0GOfdNoCzBIkHGoRLGXuM= github.com/emicklei/go-restful/v3 v3.10.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= @@ -160,10 +162,10 @@ github.com/fluxcd/pkg/apis/kustomize v1.1.1 h1:MSGn4z0R9PptmoPFHnx2nEZ8Jtl1sKfw0 github.com/fluxcd/pkg/apis/kustomize v1.1.1/go.mod h1:0pCu0ecIY+ZM0iE/hOHYwCMZ3b0SpBrjJ1SH3FFyYdE= github.com/fluxcd/pkg/apis/meta v1.1.2 h1:Unjo7hxadtB2dvGpeFqZZUdsjpRA08YYSBb7dF2WIAM= github.com/fluxcd/pkg/apis/meta v1.1.2/go.mod h1:BHQyRHCskGMEDf6kDGbgQ+cyiNpUHbLsCOsaMYM2maI= -github.com/fluxcd/pkg/git v0.13.0 h1:GcJfldYqw6ELf0vbTCV+iFZgSpK6HZBKx3yAvn1Dqfg= -github.com/fluxcd/pkg/git v0.13.0/go.mod h1:rKB1puk7sbC4AYF1oZDBrkvu3cr0aibkd4I5yNbxSQg= -github.com/fluxcd/pkg/git/gogit v0.13.0 h1:XCwfiB5qbz08djUgo0TII09zibH97Hn56v098pkFpns= -github.com/fluxcd/pkg/git/gogit v0.13.0/go.mod h1:V3g+UyIDSAOysg5KCpHhS+HXBUmNmmbNlVruWkpCJgY= +github.com/fluxcd/pkg/git v0.14.0 h1:gefX0A1HkoFhT9mX+ybw2EBNTgebLje0TPyBlKpYrlk= +github.com/fluxcd/pkg/git v0.14.0/go.mod h1:Oq1kLyTk8u2hlGk+7HC1uQ4xX5i0/umJSn+dSIsE6BY= +github.com/fluxcd/pkg/git/gogit v0.14.0 h1:4apklSXh55panQzgFIUwHZUei6B/zqXm4ygtF3jb6uI= +github.com/fluxcd/pkg/git/gogit v0.14.0/go.mod h1:EfTdPc1AaGS1NTF4h6HqXqyKEdOV0UyBeG7khQ7/ai0= github.com/fluxcd/pkg/gittestserver v0.8.6 h1:YM8prVKB3LC9LBBe+a2p7l1BlfV9erXCgC1em9sbqW4= github.com/fluxcd/pkg/kustomize v1.3.4 h1:+XA4umfhkFqrNYQp3ZmKSJy4i3LWjbgoi6H4PllkkkA= github.com/fluxcd/pkg/kustomize v1.3.4/go.mod h1:nsbsNGe6nQY6DGYYPowFGQlhxFRcaRFvbwqhCbwAQuE= @@ -191,11 +193,11 @@ github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxI github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= -github.com/go-git/go-billy/v5 v5.4.1 h1:Uwp5tDRkPr+l/TnbHOQzp+tmJfLceOlbVucgpTz8ix4= -github.com/go-git/go-billy/v5 v5.4.1/go.mod h1:vjbugF6Fz7JIflbVpl1hJsGjSHNltrSw45YK/ukIvQg= +github.com/go-git/go-billy/v5 v5.5.0 h1:yEY4yhzCDuMGSv83oGxiBotRzhwhNr8VZyphhiu+mTU= +github.com/go-git/go-billy/v5 v5.5.0/go.mod h1:hmexnoNsr2SJU1Ju67OaNz5ASJY3+sHgFRpCtpDCKow= github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20230305113008-0c11038e723f h1:Pz0DHeFij3XFhoBRGUDPzSJ+w2UcK5/0JvF8DRI58r8= -github.com/go-git/go-git/v5 v5.8.1 h1:Zo79E4p7TRk0xoRgMq0RShiTHGKcKI4+DI6BfJc/Q+A= -github.com/go-git/go-git/v5 v5.8.1/go.mod h1:FHFuoD6yGz5OSKEBK+aWN9Oah0q54Jxl0abmj6GnqAo= +github.com/go-git/go-git/v5 v5.9.0 h1:cD9SFA7sHVRdJ7AYck1ZaAa/yeuBvGPxwXDL8cxrObY= +github.com/go-git/go-git/v5 v5.9.0/go.mod h1:RKIqga24sWdMGZF+1Ekv9kylsDz6LzdTSI2s/OsZWE0= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= @@ -211,7 +213,7 @@ github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/ github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= -github.com/gofrs/uuid v4.2.0+incompatible h1:yyYWMnhkhrKwwr8gAOcOCYxOOscHgDS9yZgBrnJfGa0= +github.com/gofrs/uuid v4.4.0+incompatible h1:3qXRTX8/NbyulANqlc0lchS1gqAVxRgsuW1YrTJupqA= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= @@ -393,7 +395,6 @@ github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00/go.mod github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= @@ -410,8 +411,6 @@ github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+v github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= -github.com/pjbgf/filepath-securejoin v0.0.0-20230821001828-0ca74e6d4bf8 h1:nqjCeQ2TVnccihhBoVBd0p+70hCFT4yqJKhfc8l1D50= -github.com/pjbgf/filepath-securejoin v0.0.0-20230821001828-0ca74e6d4bf8/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4= github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI= github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU= @@ -512,8 +511,8 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.12.0 h1:tFM/ta59kqch6LlvYnPa0yx5a83cL2nHflFhYKvv9Yk= -golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= +golang.org/x/crypto v0.13.0 h1:mvySKfSWJ+UKUii46M40LOvyWfN0s2U+46/jDd0e6Ck= +golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= @@ -522,8 +521,8 @@ golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.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.11.0 h1:bUO06HqtnRcc/7l71XBe4WcqTZ+3AH1J59zWDDwLKgU= -golang.org/x/mod v0.11.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc= +golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -545,8 +544,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.6.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.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14= -golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= +golang.org/x/net v0.15.0 h1:ugBLEUaxABaB5AJqW9enI0ACdci2RUd4eP51NTBvuJ8= +golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.8.0 h1:6dkIjl3j3LtZ/O3sTgZTMsLKSftL/B8Zgq4huOIIUu8= @@ -592,16 +591,16 @@ golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM= -golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= +golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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= golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/term v0.11.0 h1:F9tnn/DA/Im8nCwm+fX+1/eBwi4qFjRT++MhtVC4ZX0= -golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= +golang.org/x/term v0.12.0 h1:/ZfYdc3zq+q02Rv9vGqTeSItdzZTSNDmfTi0mBAuidU= +golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -611,8 +610,8 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc= -golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -625,8 +624,8 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= 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.10.0 h1:tvDr/iQoUqNdohiYm0LmmKcBk+q86lb9EprIUFhHHGg= -golang.org/x/tools v0.10.0/go.mod h1:UJwyiVBsOA2uwvK/e5OY3GTpDUJriEd+/YlqAwLPmyM= +golang.org/x/tools v0.13.0 h1:Iey4qkscZuv0VvIt8E0neZjtPVQFSc870HQ448QgEmQ= +golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/tests/azure/go.mod b/tests/azure/go.mod index 5069b494..47e67124 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -14,10 +14,10 @@ require ( github.com/fluxcd/notification-controller/api v1.1.0 github.com/fluxcd/pkg/apis/event v0.5.2 github.com/fluxcd/pkg/apis/meta v1.1.2 - github.com/fluxcd/pkg/git v0.13.0 - github.com/fluxcd/pkg/git/gogit v0.13.0 + github.com/fluxcd/pkg/git v0.14.0 + github.com/fluxcd/pkg/git/gogit v0.14.0 github.com/fluxcd/source-controller/api v1.1.0 - github.com/go-git/go-git/v5 v5.8.1 + github.com/go-git/go-git/v5 v5.9.0 github.com/hashicorp/hc-install v0.5.2 github.com/hashicorp/terraform-exec v0.18.1 github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 @@ -46,7 +46,7 @@ require ( github.com/Azure/go-autorest/tracing v0.6.0 // indirect github.com/Masterminds/semver/v3 v3.2.1 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect - github.com/ProtonMail/go-crypto v0.0.0-20230717121422-5aa5874ade95 // indirect + github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 // indirect github.com/acomagu/bufpipe v1.0.4 // indirect github.com/apparentlymart/go-textseg/v13 v13.0.0 // indirect github.com/cloudflare/circl v1.3.3 // indirect @@ -61,7 +61,7 @@ require ( github.com/fluxcd/pkg/ssh v0.8.2 // indirect github.com/fluxcd/pkg/version v0.2.2 // indirect github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect - github.com/go-git/go-billy/v5 v5.4.1 // indirect + github.com/go-git/go-billy/v5 v5.5.0 // indirect github.com/go-logr/logr v1.2.4 // indirect github.com/go-openapi/jsonpointer v0.19.6 // indirect github.com/go-openapi/jsonreference v0.20.1 // indirect @@ -97,15 +97,15 @@ require ( github.com/xanzy/ssh-agent v0.3.3 // indirect github.com/zclconf/go-cty v1.13.0 // indirect go.uber.org/atomic v1.10.0 // indirect - golang.org/x/crypto v0.12.0 // indirect - golang.org/x/mod v0.10.0 // indirect - golang.org/x/net v0.12.0 // indirect + golang.org/x/crypto v0.13.0 // indirect + golang.org/x/mod v0.12.0 // indirect + golang.org/x/net v0.15.0 // indirect golang.org/x/oauth2 v0.5.0 // indirect - golang.org/x/sys v0.11.0 // indirect - golang.org/x/term v0.11.0 // indirect - golang.org/x/text v0.12.0 // indirect + golang.org/x/sys v0.12.0 // indirect + golang.org/x/term v0.12.0 // indirect + golang.org/x/text v0.13.0 // indirect golang.org/x/time v0.3.0 // indirect - golang.org/x/tools v0.9.3 // indirect + golang.org/x/tools v0.13.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/protobuf v1.30.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect diff --git a/tests/azure/go.sum b/tests/azure/go.sum index 612c2150..4c9912b1 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -39,8 +39,8 @@ github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/ProtonMail/go-crypto v0.0.0-20230717121422-5aa5874ade95 h1:KLq8BE0KwCL+mmXnjLWEAOYO+2l2AE4YMmqG1ZpZHBs= -github.com/ProtonMail/go-crypto v0.0.0-20230717121422-5aa5874ade95/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= +github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 h1:kkhsdkhsCvIsutKu5zLMgWtgh9YxGCNAw8Ad8hjwfYg= +github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= github.com/acomagu/bufpipe v1.0.4 h1:e3H4WUzM3npvo5uv95QuJM3cQspFNtFBzvJ2oNjKIDQ= github.com/acomagu/bufpipe v1.0.4/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= @@ -72,7 +72,7 @@ github.com/devigned/tab v0.1.1 h1:3mD6Kb1mUOYeLpJvTVSDwSg5ZsfSxfvxGRTxRsJsITA= github.com/devigned/tab v0.1.1/go.mod h1:XG9mPq0dFghrYvoBF3xdRrJzSTX1b7IQrvaL9mzjeJY= github.com/dimchansky/utfbom v1.1.0 h1:FcM3g+nofKgUteL8dm/UpdRXNC9KmADgTpLKsu0TRo4= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= -github.com/elazarl/goproxy v0.0.0-20230731152917-f99041a5c027 h1:1L0aalTpPz7YlMxETKpmQoWMBkeiuorElZIXoNmgiPE= +github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a h1:mATvB/9r/3gvcejNsXKSkQ6lcIaNec2nyfOdlTBR2lU= github.com/emicklei/go-restful/v3 v3.10.0 h1:X4gma4HM7hFm6WMeAsTfqA0GOfdNoCzBIkHGoRLGXuM= github.com/emicklei/go-restful/v3 v3.10.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= @@ -105,10 +105,10 @@ github.com/fluxcd/pkg/apis/kustomize v1.1.1 h1:MSGn4z0R9PptmoPFHnx2nEZ8Jtl1sKfw0 github.com/fluxcd/pkg/apis/kustomize v1.1.1/go.mod h1:0pCu0ecIY+ZM0iE/hOHYwCMZ3b0SpBrjJ1SH3FFyYdE= github.com/fluxcd/pkg/apis/meta v1.1.2 h1:Unjo7hxadtB2dvGpeFqZZUdsjpRA08YYSBb7dF2WIAM= github.com/fluxcd/pkg/apis/meta v1.1.2/go.mod h1:BHQyRHCskGMEDf6kDGbgQ+cyiNpUHbLsCOsaMYM2maI= -github.com/fluxcd/pkg/git v0.13.0 h1:GcJfldYqw6ELf0vbTCV+iFZgSpK6HZBKx3yAvn1Dqfg= -github.com/fluxcd/pkg/git v0.13.0/go.mod h1:rKB1puk7sbC4AYF1oZDBrkvu3cr0aibkd4I5yNbxSQg= -github.com/fluxcd/pkg/git/gogit v0.13.0 h1:XCwfiB5qbz08djUgo0TII09zibH97Hn56v098pkFpns= -github.com/fluxcd/pkg/git/gogit v0.13.0/go.mod h1:V3g+UyIDSAOysg5KCpHhS+HXBUmNmmbNlVruWkpCJgY= +github.com/fluxcd/pkg/git v0.14.0 h1:gefX0A1HkoFhT9mX+ybw2EBNTgebLje0TPyBlKpYrlk= +github.com/fluxcd/pkg/git v0.14.0/go.mod h1:Oq1kLyTk8u2hlGk+7HC1uQ4xX5i0/umJSn+dSIsE6BY= +github.com/fluxcd/pkg/git/gogit v0.14.0 h1:4apklSXh55panQzgFIUwHZUei6B/zqXm4ygtF3jb6uI= +github.com/fluxcd/pkg/git/gogit v0.14.0/go.mod h1:EfTdPc1AaGS1NTF4h6HqXqyKEdOV0UyBeG7khQ7/ai0= github.com/fluxcd/pkg/gittestserver v0.8.6 h1:YM8prVKB3LC9LBBe+a2p7l1BlfV9erXCgC1em9sbqW4= github.com/fluxcd/pkg/ssh v0.8.2 h1:WNfvTmnLnOUyXQDb8luSfmn1X0RIuhJBcKMFtKm6YsQ= github.com/fluxcd/pkg/ssh v0.8.2/go.mod h1:ewbU9vakYYdGSX92qXhx6Kqi5tVQ3ppmGQakCX1R6Gw= @@ -122,11 +122,11 @@ github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeME github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= -github.com/go-git/go-billy/v5 v5.4.1 h1:Uwp5tDRkPr+l/TnbHOQzp+tmJfLceOlbVucgpTz8ix4= -github.com/go-git/go-billy/v5 v5.4.1/go.mod h1:vjbugF6Fz7JIflbVpl1hJsGjSHNltrSw45YK/ukIvQg= +github.com/go-git/go-billy/v5 v5.5.0 h1:yEY4yhzCDuMGSv83oGxiBotRzhwhNr8VZyphhiu+mTU= +github.com/go-git/go-billy/v5 v5.5.0/go.mod h1:hmexnoNsr2SJU1Ju67OaNz5ASJY3+sHgFRpCtpDCKow= github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20230305113008-0c11038e723f h1:Pz0DHeFij3XFhoBRGUDPzSJ+w2UcK5/0JvF8DRI58r8= -github.com/go-git/go-git/v5 v5.8.1 h1:Zo79E4p7TRk0xoRgMq0RShiTHGKcKI4+DI6BfJc/Q+A= -github.com/go-git/go-git/v5 v5.8.1/go.mod h1:FHFuoD6yGz5OSKEBK+aWN9Oah0q54Jxl0abmj6GnqAo= +github.com/go-git/go-git/v5 v5.9.0 h1:cD9SFA7sHVRdJ7AYck1ZaAa/yeuBvGPxwXDL8cxrObY= +github.com/go-git/go-git/v5 v5.9.0/go.mod h1:RKIqga24sWdMGZF+1Ekv9kylsDz6LzdTSI2s/OsZWE0= github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= @@ -138,7 +138,7 @@ github.com/go-openapi/jsonreference v0.20.1/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g= github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= -github.com/gofrs/uuid v4.2.0+incompatible h1:yyYWMnhkhrKwwr8gAOcOCYxOOscHgDS9yZgBrnJfGa0= +github.com/gofrs/uuid v4.4.0+incompatible h1:3qXRTX8/NbyulANqlc0lchS1gqAVxRgsuW1YrTJupqA= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= @@ -243,7 +243,6 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/onsi/ginkgo/v2 v2.9.5 h1:+6Hr4uxzP4XIUyAkg61dWBw8lb/gc4/X5luuxN/EC+Q= github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI= github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4= @@ -314,8 +313,8 @@ golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.12.0 h1:tFM/ta59kqch6LlvYnPa0yx5a83cL2nHflFhYKvv9Yk= -golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= +golang.org/x/crypto v0.13.0 h1:mvySKfSWJ+UKUii46M40LOvyWfN0s2U+46/jDd0e6Ck= +golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= @@ -324,8 +323,8 @@ golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.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.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk= -golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc= +golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180811021610-c39426892332/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -347,8 +346,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.6.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.12.0 h1:cfawfvKITfUsFCeJIHJrbSxpeu/E81khclypR0GVT50= -golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= +golang.org/x/net v0.15.0 h1:ugBLEUaxABaB5AJqW9enI0ACdci2RUd4eP51NTBvuJ8= +golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.5.0 h1:HuArIo48skDwlrvM3sEdHXElYslAMsf3KwRkkW4MC4s= @@ -361,7 +360,7 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI= +golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -381,15 +380,15 @@ golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM= -golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= +golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/term v0.11.0 h1:F9tnn/DA/Im8nCwm+fX+1/eBwi4qFjRT++MhtVC4ZX0= -golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= +golang.org/x/term v0.12.0 h1:/ZfYdc3zq+q02Rv9vGqTeSItdzZTSNDmfTi0mBAuidU= +golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -399,8 +398,8 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc= -golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -413,8 +412,8 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= 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.9.3 h1:Gn1I8+64MsuTb/HpH+LmQtNas23LhUVr3rYZ0eKuaMM= -golang.org/x/tools v0.9.3/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= +golang.org/x/tools v0.13.0 h1:Iey4qkscZuv0VvIt8E0neZjtPVQFSc870HQ448QgEmQ= +golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/tests/integration/go.mod b/tests/integration/go.mod index 0c553c98..b3001b08 100644 --- a/tests/integration/go.mod +++ b/tests/integration/go.mod @@ -12,16 +12,16 @@ require ( github.com/fluxcd/notification-controller/api v1.0.0-rc.4 github.com/fluxcd/pkg/apis/event v0.5.1 github.com/fluxcd/pkg/apis/meta v1.1.1 - github.com/fluxcd/pkg/git v0.12.2 - github.com/fluxcd/pkg/git/gogit v0.12.0 + github.com/fluxcd/pkg/git v0.14.0 + github.com/fluxcd/pkg/git/gogit v0.14.0 github.com/fluxcd/pkg/runtime v0.39.0 github.com/fluxcd/source-controller/api v1.0.0-rc.5 github.com/fluxcd/test-infra/tftestenv v0.0.0-20230531151340-931581bd0a3e - github.com/go-git/go-git/v5 v5.7.0 + github.com/go-git/go-git/v5 v5.9.0 github.com/google/go-containerregistry v0.14.0 github.com/hashicorp/terraform-json v0.16.0 github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 - github.com/onsi/gomega v1.27.8 + github.com/onsi/gomega v1.27.10 github.com/whilp/git-urls v1.0.0 google.golang.org/grpc v1.55.0 k8s.io/api v0.27.3 @@ -35,6 +35,7 @@ require ( cloud.google.com/go/compute v1.19.0 // indirect cloud.google.com/go/compute/metadata v0.2.3 // indirect cloud.google.com/go/iam v1.0.1 // indirect + dario.cat/mergo v1.0.0 // indirect github.com/Azure/azure-amqp-common-go/v4 v4.2.0 // indirect github.com/Azure/azure-sdk-for-go v65.0.0+incompatible // indirect github.com/Azure/go-amqp v1.0.0 // indirect @@ -48,7 +49,7 @@ require ( github.com/Azure/go-autorest/tracing v0.6.0 // indirect github.com/Masterminds/semver/v3 v3.2.1 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect - github.com/ProtonMail/go-crypto v0.0.0-20230518184743-7afd39499903 // indirect + github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 // indirect github.com/acomagu/bufpipe v1.0.4 // indirect github.com/apparentlymart/go-textseg/v13 v13.0.0 // indirect github.com/cloudflare/circl v1.3.3 // indirect @@ -65,10 +66,10 @@ require ( github.com/evanphx/json-patch/v5 v5.6.0 // indirect github.com/fluxcd/pkg/apis/acl v0.1.0 // indirect github.com/fluxcd/pkg/apis/kustomize v1.1.0 // indirect - github.com/fluxcd/pkg/ssh v0.7.4 // indirect + github.com/fluxcd/pkg/ssh v0.8.2 // indirect github.com/fluxcd/pkg/version v0.2.2 // indirect github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect - github.com/go-git/go-billy/v5 v5.4.1 // indirect + github.com/go-git/go-billy/v5 v5.5.0 // indirect github.com/go-logr/logr v1.2.4 // indirect github.com/go-openapi/jsonpointer v0.19.6 // indirect github.com/go-openapi/jsonreference v0.20.1 // indirect @@ -109,22 +110,22 @@ require ( github.com/pkg/errors v0.9.1 // indirect github.com/sergi/go-diff v1.3.1 // indirect github.com/sirupsen/logrus v1.9.0 // indirect - github.com/skeema/knownhosts v1.1.1 // indirect + github.com/skeema/knownhosts v1.2.0 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/vbatts/tar-split v0.11.2 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect github.com/zclconf/go-cty v1.13.0 // indirect go.opencensus.io v0.24.0 // indirect - golang.org/x/crypto v0.9.0 // indirect - golang.org/x/mod v0.10.0 // indirect - golang.org/x/net v0.10.0 // indirect + golang.org/x/crypto v0.13.0 // indirect + golang.org/x/mod v0.12.0 // indirect + golang.org/x/net v0.15.0 // indirect golang.org/x/oauth2 v0.8.0 // indirect - golang.org/x/sync v0.2.0 // indirect - golang.org/x/sys v0.8.0 // indirect - golang.org/x/term v0.8.0 // indirect - golang.org/x/text v0.9.0 // indirect + golang.org/x/sync v0.3.0 // indirect + golang.org/x/sys v0.12.0 // indirect + golang.org/x/term v0.12.0 // indirect + golang.org/x/text v0.13.0 // indirect golang.org/x/time v0.3.0 // indirect - golang.org/x/tools v0.9.1 // indirect + golang.org/x/tools v0.13.0 // indirect google.golang.org/api v0.124.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect diff --git a/tests/integration/go.sum b/tests/integration/go.sum index 02472dfa..a41cda11 100644 --- a/tests/integration/go.sum +++ b/tests/integration/go.sum @@ -11,6 +11,8 @@ cloud.google.com/go/iam v1.0.1/go.mod h1:yR3tmSL8BcZB4bxByRv2jkSIahVmCtfKZwLYGBa cloud.google.com/go/kms v1.10.2 h1:8UePKEypK3SQ6g+4mn/s/VgE5L7XOh+FwGGRUqvY3Hw= cloud.google.com/go/pubsub v1.31.0 h1:aXdyyJz90kA+bor9+6+xHAciMD5mj8v15WqFZ5E0sek= cloud.google.com/go/pubsub v1.31.0/go.mod h1:dYmJ3K97NCQ/e4OwZ20rD4Ym3Bu8Gu9m/aJdWQjdcks= +dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= +dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= github.com/AdaLogics/go-fuzz-headers v0.0.0-20230106234847-43070de90fa1 h1:EKPd1INOIyr5hWOWhvpmQpY6tKjeG0hT1s3AMC/9fic= github.com/Azure/azure-amqp-common-go/v4 v4.2.0 h1:q/jLx1KJ8xeI8XGfkOWMN9XrXzAfVTkyvCxPvHCjd2I= github.com/Azure/azure-amqp-common-go/v4 v4.2.0/go.mod h1:GD3m/WPPma+621UaU6KNjKEo5Hl09z86viKwQjTpV0Q= @@ -55,8 +57,8 @@ github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migc github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= -github.com/ProtonMail/go-crypto v0.0.0-20230518184743-7afd39499903 h1:ZK3C5DtzV2nVAQTx5S5jQvMeDqWtD1By5mOoyY/xJek= -github.com/ProtonMail/go-crypto v0.0.0-20230518184743-7afd39499903/go.mod h1:8TI4H3IbrackdNgv+92dI+rhpCaLqM0IfpgCgenFvRE= +github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 h1:kkhsdkhsCvIsutKu5zLMgWtgh9YxGCNAw8Ad8hjwfYg= +github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= github.com/acomagu/bufpipe v1.0.4 h1:e3H4WUzM3npvo5uv95QuJM3cQspFNtFBzvJ2oNjKIDQ= github.com/acomagu/bufpipe v1.0.4/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= @@ -71,14 +73,13 @@ github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkY github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= -github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= +github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= 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= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cloudflare/circl v1.1.0/go.mod h1:prBCrKB9DV4poKZY1l9zBXg2QJY7mvgRvtMxxK7fi4I= github.com/cloudflare/circl v1.3.3 h1:fE/Qz0QdIGqeWfnwq0RE0R7MI51s0M2E4Ga9kq5AEMs= github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= @@ -109,7 +110,7 @@ github.com/docker/docker v23.0.3+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bc github.com/docker/docker-credential-helpers v0.7.0 h1:xtCHsjxogADNZcdv1pKUHXryefjlVRqWqIhk/uXJp0A= github.com/docker/docker-credential-helpers v0.7.0/go.mod h1:rETQfLdHNT3foU5kuNkFR1R1V12OJRRO5lzt2D1b5X0= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= -github.com/elazarl/goproxy v0.0.0-20221015165544-a0805db90819 h1:RIB4cRk+lBqKK3Oy0r2gRX4ui7tuhiZq2SuTtTCi0/0= +github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a h1:mATvB/9r/3gvcejNsXKSkQ6lcIaNec2nyfOdlTBR2lU= github.com/emicklei/go-restful/v3 v3.10.0 h1:X4gma4HM7hFm6WMeAsTfqA0GOfdNoCzBIkHGoRLGXuM= github.com/emicklei/go-restful/v3 v3.10.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= @@ -145,15 +146,15 @@ github.com/fluxcd/pkg/apis/kustomize v1.1.0 h1:Fbv4dCB57r2+fiusozN7at8r7upTz58Z4 github.com/fluxcd/pkg/apis/kustomize v1.1.0/go.mod h1:CAe9Mjf9KVoTm1V4wpvq/FGXFDSnpBwfww/IG7mw3gM= github.com/fluxcd/pkg/apis/meta v1.1.1 h1:sLAKLbEu7rRzJ+Mytffu3NcpfdbOBTa6hcpOQzFWm+M= github.com/fluxcd/pkg/apis/meta v1.1.1/go.mod h1:soCfzjFWbm1mqybDcOywWKTCEYlH3skpoNGTboVk234= -github.com/fluxcd/pkg/git v0.12.2 h1:96xH3hy3WfwiD0DioyJZcGapYT3lmPc2s7jU5UM8buw= -github.com/fluxcd/pkg/git v0.12.2/go.mod h1:9TG4fEfGCF1XHLt9Xs7X2YOmkmWOiwfjH9tdGIQs8/8= -github.com/fluxcd/pkg/git/gogit v0.12.0 h1:0mCwQND0WpCVZYHLWcXJxRvKVcyWxH4JjMQFMaea8Q4= -github.com/fluxcd/pkg/git/gogit v0.12.0/go.mod h1:Kn+GfYfZBBIaXmQj39cQvrDxT/6y8leQxXZ5/B+YYTQ= -github.com/fluxcd/pkg/gittestserver v0.8.4 h1:rA/QUZnfH77ZZG+5xfMqjgEHJdzeeE6Nn1o8cops/bU= +github.com/fluxcd/pkg/git v0.14.0 h1:gefX0A1HkoFhT9mX+ybw2EBNTgebLje0TPyBlKpYrlk= +github.com/fluxcd/pkg/git v0.14.0/go.mod h1:Oq1kLyTk8u2hlGk+7HC1uQ4xX5i0/umJSn+dSIsE6BY= +github.com/fluxcd/pkg/git/gogit v0.14.0 h1:4apklSXh55panQzgFIUwHZUei6B/zqXm4ygtF3jb6uI= +github.com/fluxcd/pkg/git/gogit v0.14.0/go.mod h1:EfTdPc1AaGS1NTF4h6HqXqyKEdOV0UyBeG7khQ7/ai0= +github.com/fluxcd/pkg/gittestserver v0.8.6 h1:YM8prVKB3LC9LBBe+a2p7l1BlfV9erXCgC1em9sbqW4= github.com/fluxcd/pkg/runtime v0.39.0 h1:vgmzYS+DT0w8ikX9MqGsOdmMagoiKys2RMGdl/EDbgc= github.com/fluxcd/pkg/runtime v0.39.0/go.mod h1:0A/0kZv/MPciAj5AoSEDKVeqUFEF6371q7o+zk6l81g= -github.com/fluxcd/pkg/ssh v0.7.4 h1:8GYneCKH2dxrHQBalcDgOCC2NtqD0JO91FlWgvnzrfo= -github.com/fluxcd/pkg/ssh v0.7.4/go.mod h1:9Syc8nVJaZEToPTU4E99j0jZ99w39oZtov+uiNX17sc= +github.com/fluxcd/pkg/ssh v0.8.2 h1:WNfvTmnLnOUyXQDb8luSfmn1X0RIuhJBcKMFtKm6YsQ= +github.com/fluxcd/pkg/ssh v0.8.2/go.mod h1:ewbU9vakYYdGSX92qXhx6Kqi5tVQ3ppmGQakCX1R6Gw= github.com/fluxcd/pkg/version v0.2.2 h1:ZpVXECeLA5hIQMft11iLp6gN3cKcz6UNuVTQPw/bRdI= github.com/fluxcd/pkg/version v0.2.2/go.mod h1:NGnh/no8S6PyfCDxRFrPY3T5BUnqP48MxfxNRU0z8C0= github.com/fluxcd/source-controller/api v1.0.0-rc.5 h1:muoGOb/VitVEIOh877Ledi9AvibbyevPqvuH5byWU6g= @@ -171,13 +172,13 @@ github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66D github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= github.com/go-git/go-billy/v5 v5.2.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= github.com/go-git/go-billy/v5 v5.3.1/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= -github.com/go-git/go-billy/v5 v5.4.1 h1:Uwp5tDRkPr+l/TnbHOQzp+tmJfLceOlbVucgpTz8ix4= -github.com/go-git/go-billy/v5 v5.4.1/go.mod h1:vjbugF6Fz7JIflbVpl1hJsGjSHNltrSw45YK/ukIvQg= +github.com/go-git/go-billy/v5 v5.5.0 h1:yEY4yhzCDuMGSv83oGxiBotRzhwhNr8VZyphhiu+mTU= +github.com/go-git/go-billy/v5 v5.5.0/go.mod h1:hmexnoNsr2SJU1Ju67OaNz5ASJY3+sHgFRpCtpDCKow= github.com/go-git/go-git-fixtures/v4 v4.2.1/go.mod h1:K8zd3kDUAykwTdDCr+I0per6Y6vMiRR/nnVTBtavnB0= github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20230305113008-0c11038e723f h1:Pz0DHeFij3XFhoBRGUDPzSJ+w2UcK5/0JvF8DRI58r8= github.com/go-git/go-git/v5 v5.4.2/go.mod h1:gQ1kArt6d+n+BGd+/B/I74HwRTLhth2+zti4ihgckDc= -github.com/go-git/go-git/v5 v5.7.0 h1:t9AudWVLmqzlo+4bqdf7GY+46SUuRsx59SboFxkq2aE= -github.com/go-git/go-git/v5 v5.7.0/go.mod h1:coJHKEOk5kUClpsNlXrUvPrDxY3w3gjHvhcZd8Fodw8= +github.com/go-git/go-git/v5 v5.9.0 h1:cD9SFA7sHVRdJ7AYck1ZaAa/yeuBvGPxwXDL8cxrObY= +github.com/go-git/go-git/v5 v5.9.0/go.mod h1:RKIqga24sWdMGZF+1Ekv9kylsDz6LzdTSI2s/OsZWE0= github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= @@ -189,7 +190,7 @@ github.com/go-openapi/jsonreference v0.20.1/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g= github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= -github.com/gofrs/uuid v4.2.0+incompatible h1:yyYWMnhkhrKwwr8gAOcOCYxOOscHgDS9yZgBrnJfGa0= +github.com/gofrs/uuid v4.4.0+incompatible h1:3qXRTX8/NbyulANqlc0lchS1gqAVxRgsuW1YrTJupqA= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= @@ -321,9 +322,9 @@ github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjY github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/onsi/ginkgo/v2 v2.9.7 h1:06xGQy5www2oN160RtEZoTvnP2sPhEfePYmCDc2szss= -github.com/onsi/gomega v1.27.8 h1:gegWiwZjBsf2DgiSbf5hpokZ98JVDMcWkUiigk6/KXc= -github.com/onsi/gomega v1.27.8/go.mod h1:2J8vzI/s+2shY9XHRApDkdgPo1TKT7P2u6fXeJKFnNQ= +github.com/onsi/ginkgo/v2 v2.11.0 h1:WgqUCUt/lT6yXoQ8Wef0fsNn5cAuMK7+KT9UFRz2tcU= +github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI= +github.com/onsi/gomega v1.27.10/go.mod h1:RsS8tutOdbdgzbPtzzATp12yT7kM5I5aElG3evPbQ0M= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= @@ -342,7 +343,7 @@ github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUo github.com/prometheus/common v0.42.0 h1:EKsfXEYo4JpWMHH5cg+KOUWeuJSov1Id8zGR8eeI1YM= github.com/prometheus/procfs v0.10.1 h1:kYK1Va/YMlutzCGazswoHKo//tZVlFpKYh+PymziUAg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= +github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= @@ -353,8 +354,8 @@ github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMB github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= -github.com/skeema/knownhosts v1.1.1 h1:MTk78x9FPgDFVFkDLTrsnnfCJl7g1C/nnKvePgrIngE= -github.com/skeema/knownhosts v1.1.1/go.mod h1:g4fPeYpque7P0xefxtGzV81ihjC8sX2IqpAoNkjxbMo= +github.com/skeema/knownhosts v1.2.0 h1:h9r9cf0+u7wSE+M183ZtMGgOJKiL96brpaz5ekfJCpM= +github.com/skeema/knownhosts v1.2.0/go.mod h1:g4fPeYpque7P0xefxtGzV81ihjC8sX2IqpAoNkjxbMo= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= @@ -408,10 +409,11 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g= -golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= +golang.org/x/crypto v0.13.0 h1:mvySKfSWJ+UKUii46M40LOvyWfN0s2U+46/jDd0e6Ck= +golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= @@ -421,8 +423,8 @@ golang.org/x/mod v0.3.0/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.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk= -golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc= +golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -441,11 +443,12 @@ golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96b golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= golang.org/x/net v0.6.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 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= -golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.15.0 h1:ugBLEUaxABaB5AJqW9enI0ACdci2RUd4eP51NTBvuJ8= +golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.8.0 h1:6dkIjl3j3LtZ/O3sTgZTMsLKSftL/B8Zgq4huOIIUu8= @@ -458,8 +461,8 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI= -golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= +golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -479,23 +482,24 @@ golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210502180810-71e4cd670f79/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU= -golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= +golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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= +golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/term v0.8.0 h1:n5xxQn2i3PC0yLAbjTpNT85q/Kgzcr2gIoX9OrJUols= -golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.12.0 h1:/ZfYdc3zq+q02Rv9vGqTeSItdzZTSNDmfTi0mBAuidU= +golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -503,11 +507,12 @@ golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= +golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= -golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -520,8 +525,8 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= 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.9.1 h1:8WMNJAz3zrtPmnYC7ISf5dEn3MT0gY7jBJfw27yrrLo= -golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= +golang.org/x/tools v0.13.0 h1:Iey4qkscZuv0VvIt8E0neZjtPVQFSc870HQ448QgEmQ= +golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= From 1fc463c065d083934398fbdc3948912fa696ba4b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Sep 2023 01:02:23 +0000 Subject: [PATCH 643/818] build(deps): bump the ci group with 4 updates Bumps the ci group with 4 updates: [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action), [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action), [docker/login-action](https://github.com/docker/login-action) and [goreleaser/goreleaser-action](https://github.com/goreleaser/goreleaser-action). Updates `docker/setup-qemu-action` from 2.2.0 to 3.0.0 - [Release notes](https://github.com/docker/setup-qemu-action/releases) - [Commits](https://github.com/docker/setup-qemu-action/compare/2b82ce82d56a2a04d2637cd93a637ae1b359c0a7...68827325e0b33c7199eb31dd4e31fbe9023e06e3) Updates `docker/setup-buildx-action` from 2.10.0 to 3.0.0 - [Release notes](https://github.com/docker/setup-buildx-action/releases) - [Commits](https://github.com/docker/setup-buildx-action/compare/885d1462b80bc1c1c7f0b00334ad271f09369c55...f95db51fddba0c2d1ec667646a06c2ce06100226) Updates `docker/login-action` from 2.2.0 to 3.0.0 - [Release notes](https://github.com/docker/login-action/releases) - [Commits](https://github.com/docker/login-action/compare/465a07811f14bebb1938fbed4728c6a1ff8901fc...343f7c4344506bcbf9b4de18042ae17996df046d) Updates `goreleaser/goreleaser-action` from 4.6.0 to 5.0.0 - [Release notes](https://github.com/goreleaser/goreleaser-action/releases) - [Commits](https://github.com/goreleaser/goreleaser-action/compare/5fdedb94abba051217030cc86d4523cf3f02243d...7ec5c2b0c6cdda6e8bbb49444bc797dd33d74dd8) --- updated-dependencies: - dependency-name: docker/setup-qemu-action dependency-type: direct:production update-type: version-update:semver-major dependency-group: ci - dependency-name: docker/setup-buildx-action dependency-type: direct:production update-type: version-update:semver-major dependency-group: ci - dependency-name: docker/login-action dependency-type: direct:production update-type: version-update:semver-major dependency-group: ci - dependency-name: goreleaser/goreleaser-action dependency-type: direct:production update-type: version-update:semver-major dependency-group: ci ... Signed-off-by: dependabot[bot] --- .github/workflows/e2e-gcp.yaml | 6 +++--- .github/workflows/release.yaml | 14 +++++++------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/e2e-gcp.yaml b/.github/workflows/e2e-gcp.yaml index 89b919c3..601adc1c 100644 --- a/.github/workflows/e2e-gcp.yaml +++ b/.github/workflows/e2e-gcp.yaml @@ -54,11 +54,11 @@ jobs: - name: Setup gcloud uses: google-github-actions/setup-gcloud@e30db14379863a8c79331b04a9969f4c1e225e0b # v1.1.1 - name: Setup QEMU - uses: docker/setup-qemu-action@2b82ce82d56a2a04d2637cd93a637ae1b359c0a7 # v2.2.0 + uses: docker/setup-qemu-action@68827325e0b33c7199eb31dd4e31fbe9023e06e3 # v3.0.0 - name: Setup Docker Buildx - uses: docker/setup-buildx-action@885d1462b80bc1c1c7f0b00334ad271f09369c55 # v2.10.0 + uses: docker/setup-buildx-action@f95db51fddba0c2d1ec667646a06c2ce06100226 # v3.0.0 - name: Log into us-central1-docker.pkg.dev - uses: docker/login-action@465a07811f14bebb1938fbed4728c6a1ff8901fc # v2.2.0 + uses: docker/login-action@343f7c4344506bcbf9b4de18042ae17996df046d # v3.0.0 with: registry: us-central1-docker.pkg.dev username: oauth2accesstoken diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index aa96fa0c..a066b6db 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -29,10 +29,10 @@ jobs: go-version: 1.20.x cache: false - name: Setup QEMU - uses: docker/setup-qemu-action@2b82ce82d56a2a04d2637cd93a637ae1b359c0a7 # v2.2.0 + uses: docker/setup-qemu-action@68827325e0b33c7199eb31dd4e31fbe9023e06e3 # v3.0.0 - name: Setup Docker Buildx id: buildx - uses: docker/setup-buildx-action@885d1462b80bc1c1c7f0b00334ad271f09369c55 # v2.10.0 + uses: docker/setup-buildx-action@f95db51fddba0c2d1ec667646a06c2ce06100226 # v3.0.0 - name: Setup Syft uses: anchore/sbom-action/download-syft@78fc58e266e87a38d4194b2137a3d4e9bcaf7ca1 # v0.14.3 - name: Setup Cosign @@ -40,13 +40,13 @@ jobs: - name: Setup Kustomize uses: fluxcd/pkg/actions/kustomize@main - name: Login to GitHub Container Registry - uses: docker/login-action@465a07811f14bebb1938fbed4728c6a1ff8901fc # v2.2.0 + uses: docker/login-action@343f7c4344506bcbf9b4de18042ae17996df046d # v3.0.0 with: registry: ghcr.io username: fluxcdbot password: ${{ secrets.GHCR_TOKEN }} - name: Login to Docker Hub - uses: docker/login-action@465a07811f14bebb1938fbed4728c6a1ff8901fc # v2.2.0 + uses: docker/login-action@343f7c4344506bcbf9b4de18042ae17996df046d # v3.0.0 with: username: fluxcdbot password: ${{ secrets.DOCKER_FLUXCD_PASSWORD }} @@ -79,7 +79,7 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Run GoReleaser id: run-goreleaser - uses: goreleaser/goreleaser-action@5fdedb94abba051217030cc86d4523cf3f02243d # v4.6.0 + uses: goreleaser/goreleaser-action@7ec5c2b0c6cdda6e8bbb49444bc797dd33d74dd8 # v5.0.0 with: version: latest args: release --release-notes=output/notes.md --skip-validate @@ -121,13 +121,13 @@ jobs: VERSION=$(flux version --client | awk '{ print $NF }') echo "version=${VERSION}" >> $GITHUB_OUTPUT - name: Login to GHCR - uses: docker/login-action@465a07811f14bebb1938fbed4728c6a1ff8901fc # v2.2.0 + uses: docker/login-action@343f7c4344506bcbf9b4de18042ae17996df046d # v3.0.0 with: registry: ghcr.io username: fluxcdbot password: ${{ secrets.GHCR_TOKEN }} - name: Login to DockerHub - uses: docker/login-action@465a07811f14bebb1938fbed4728c6a1ff8901fc # v2.2.0 + uses: docker/login-action@343f7c4344506bcbf9b4de18042ae17996df046d # v3.0.0 with: username: fluxcdbot password: ${{ secrets.DOCKER_FLUXCD_PASSWORD }} From 1654791feb75057a73dcd80383f16db3c432b966 Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Fri, 8 Sep 2023 17:37:23 +0100 Subject: [PATCH 644/818] update description of kubeconfig flags Signed-off-by: Somtochi Onyekwere --- cmd/flux/main.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/cmd/flux/main.go b/cmd/flux/main.go index 9485110c..1226a347 100644 --- a/cmd/flux/main.go +++ b/cmd/flux/main.go @@ -151,6 +151,11 @@ func init() { apiServer := "" kubeconfigArgs.APIServer = &apiServer rootCmd.PersistentFlags().StringVar(kubeconfigArgs.APIServer, "server", *kubeconfigArgs.APIServer, "The address and port of the Kubernetes API server") + // Update the description for kubeconfig TLS flags so that user's don't mistake it for a Flux specific flag + rootCmd.Flag("insecure-skip-tls-verify").Usage = "If true, the Kubernetes API server's certificate will not be checked for validity. This will make your HTTPS connections insecure" + rootCmd.Flag("client-certificate").Usage = "Path to a client certificate file for TLS authentication to the Kubernetes API server" + rootCmd.Flag("certificate-authority").Usage = "Path to a cert file for the certificate authority to authenticate the Kubernetes API server" + rootCmd.Flag("client-key").Usage = "Path to a client key file for TLS authentication to the Kubernetes API server" kubeclientOptions.BindFlags(rootCmd.PersistentFlags()) From 0c47d738a9d73f4c355e42faf42f3477ae9bb453 Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Mon, 18 Sep 2023 15:11:52 +0000 Subject: [PATCH 645/818] Update toolkit components - helm-controller to v0.36.1 https://github.com/fluxcd/helm-controller/blob/v0.36.1/CHANGELOG.md - source-controller to v1.1.1 https://github.com/fluxcd/source-controller/blob/v1.1.1/CHANGELOG.md - image-automation-controller to v0.36.1 https://github.com/fluxcd/image-automation-controller/blob/v0.36.1/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 6 +++--- go.sum | 12 ++++++------ manifests/bases/helm-controller/kustomization.yaml | 4 ++-- .../image-automation-controller/kustomization.yaml | 4 ++-- manifests/bases/source-controller/kustomization.yaml | 4 ++-- manifests/crds/kustomization.yaml | 6 +++--- 6 files changed, 18 insertions(+), 18 deletions(-) diff --git a/go.mod b/go.mod index baca76a6..fcc6ae61 100644 --- a/go.mod +++ b/go.mod @@ -11,8 +11,8 @@ require ( github.com/cyphar/filepath-securejoin v0.2.4 github.com/distribution/distribution/v3 v3.0.0-20230823142118-4f7424c8eb41 github.com/fluxcd/go-git-providers v0.18.0 - github.com/fluxcd/helm-controller/api v0.36.0 - github.com/fluxcd/image-automation-controller/api v0.36.0 + github.com/fluxcd/helm-controller/api v0.36.1 + github.com/fluxcd/image-automation-controller/api v0.36.1 github.com/fluxcd/image-reflector-controller/api v0.30.0 github.com/fluxcd/kustomize-controller/api v1.1.0 github.com/fluxcd/notification-controller/api v1.1.0 @@ -28,7 +28,7 @@ require ( github.com/fluxcd/pkg/ssh v0.8.2 github.com/fluxcd/pkg/tar v0.2.0 github.com/fluxcd/pkg/version v0.2.2 - github.com/fluxcd/source-controller/api v1.1.0 + github.com/fluxcd/source-controller/api v1.1.1 github.com/go-git/go-git/v5 v5.9.0 github.com/go-logr/logr v1.2.4 github.com/gonvenience/bunt v1.3.5 diff --git a/go.sum b/go.sum index 086255ea..c16b1593 100644 --- a/go.sum +++ b/go.sum @@ -144,10 +144,10 @@ github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= github.com/fluxcd/go-git-providers v0.18.0 h1:4Whs6GzQdx3d7UTeIahRmzUrTZKhucySC53pwdXFV7Y= github.com/fluxcd/go-git-providers v0.18.0/go.mod h1:++kUR1LegtRWU30bdPb9FuRUH/6+DgoHSbwOkZ5NiKo= -github.com/fluxcd/helm-controller/api v0.36.0 h1:V48f/9W2Pv3LETREaCs7jkLh1LRI6J51kKY2UzUZjvQ= -github.com/fluxcd/helm-controller/api v0.36.0/go.mod h1:zkcRy3PxG0NoxSY5SjiSA5tWOGa6spIbWsChQY8FXqM= -github.com/fluxcd/image-automation-controller/api v0.36.0 h1:Y1uzJ+K3ov5jhbUH+7+X3hfpgXIdgUO9VR7REoHUAxs= -github.com/fluxcd/image-automation-controller/api v0.36.0/go.mod h1:eZRv70cGQAxOpiqf1mZYDPgCZOmWNoGH0/PDgU60lDM= +github.com/fluxcd/helm-controller/api v0.36.1 h1:v1Y8x7fCyWg5n0hkGJabwOKcBN6yuFKLMCELe7LEgxs= +github.com/fluxcd/helm-controller/api v0.36.1/go.mod h1:zkcRy3PxG0NoxSY5SjiSA5tWOGa6spIbWsChQY8FXqM= +github.com/fluxcd/image-automation-controller/api v0.36.1 h1:Knd4SSm/bJ0iqvYcQq87uDaT/mW9poM1jOvHpJ/4tzk= +github.com/fluxcd/image-automation-controller/api v0.36.1/go.mod h1:IsjdBtgm71KHRGDTZZZiGYdWGoJ5VjenE9F4ueADM/o= github.com/fluxcd/image-reflector-controller/api v0.30.0 h1:DiWj+4tcbnaSqZs1Pfkyt3uSy47wg3dsNMgbFE50pYc= github.com/fluxcd/image-reflector-controller/api v0.30.0/go.mod h1:hv57KwIzoPyy7Vu4PFcIf21eu0N3p/HbijygcuNgf8c= github.com/fluxcd/kustomize-controller/api v1.1.0 h1:FrFdRdlPczXTolOMt/HsY6rf1tWEYBoF2uJOISx8fpg= @@ -183,8 +183,8 @@ github.com/fluxcd/pkg/tar v0.2.0 h1:HEUHgONQYsJGeZZ4x6h5nQU9Aox1I4T3bOp1faWTqf8= github.com/fluxcd/pkg/tar v0.2.0/go.mod h1:w0/TOC7kwBJhnSJn7TCABkc/I7ib1f2Yz6vOsbLBnhw= github.com/fluxcd/pkg/version v0.2.2 h1:ZpVXECeLA5hIQMft11iLp6gN3cKcz6UNuVTQPw/bRdI= github.com/fluxcd/pkg/version v0.2.2/go.mod h1:NGnh/no8S6PyfCDxRFrPY3T5BUnqP48MxfxNRU0z8C0= -github.com/fluxcd/source-controller/api v1.1.0 h1:JPtt9WTTqVNdJfPpea8q7fUWF/00kDihxbhISzcb0WE= -github.com/fluxcd/source-controller/api v1.1.0/go.mod h1:ZLkaUd1KQIjtLPCvO63Ni5zpnSTVBAkeRgFBzMItbDQ= +github.com/fluxcd/source-controller/api v1.1.1 h1:0KQTEnLxBRrovISc5JeovTfyTjhh4vwodNnYyD6XD/Q= +github.com/fluxcd/source-controller/api v1.1.1/go.mod h1:ZLkaUd1KQIjtLPCvO63Ni5zpnSTVBAkeRgFBzMItbDQ= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= diff --git a/manifests/bases/helm-controller/kustomization.yaml b/manifests/bases/helm-controller/kustomization.yaml index 099d7204..2037bdfe 100644 --- a/manifests/bases/helm-controller/kustomization.yaml +++ b/manifests/bases/helm-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/helm-controller/releases/download/v0.36.0/helm-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.36.0/helm-controller.deployment.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.36.1/helm-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.36.1/helm-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/image-automation-controller/kustomization.yaml b/manifests/bases/image-automation-controller/kustomization.yaml index 0e4a3ed8..f6beff59 100644 --- a/manifests/bases/image-automation-controller/kustomization.yaml +++ b/manifests/bases/image-automation-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.36.0/image-automation-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.36.0/image-automation-controller.deployment.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.36.1/image-automation-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.36.1/image-automation-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index e71a6682..67d4566a 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v1.1.0/source-controller.crds.yaml -- https://github.com/fluxcd/source-controller/releases/download/v1.1.0/source-controller.deployment.yaml +- https://github.com/fluxcd/source-controller/releases/download/v1.1.1/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v1.1.1/source-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index 01e95e4c..feaa2d60 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -1,9 +1,9 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v1.1.0/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v1.1.1/source-controller.crds.yaml - https://github.com/fluxcd/kustomize-controller/releases/download/v1.1.0/kustomize-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.36.0/helm-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.36.1/helm-controller.crds.yaml - https://github.com/fluxcd/notification-controller/releases/download/v1.1.0/notification-controller.crds.yaml - https://github.com/fluxcd/image-reflector-controller/releases/download/v0.30.0/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.36.0/image-automation-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.36.1/image-automation-controller.crds.yaml From 1cba3e447606180a19c8873103d150a625efe506 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Tue, 19 Sep 2023 11:10:22 +0200 Subject: [PATCH 646/818] tests/azure: update controller dependencies - github.com/fluxcd/helm-controller/api to v0.36.1 - github.com/fluxcd/image-automation-controller/api to v0.36.1 - github.com/fluxcd/source-controller/api to v1.1.1 Signed-off-by: Hidde Beydals --- tests/azure/go.mod | 6 +++--- tests/azure/go.sum | 12 ++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/tests/azure/go.mod b/tests/azure/go.mod index 47e67124..24320579 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -7,8 +7,8 @@ replace gopkg.in/yaml.v3 => gopkg.in/yaml.v3 v3.0.1 require ( github.com/Azure/azure-event-hubs-go/v3 v3.6.1 - github.com/fluxcd/helm-controller/api v0.36.0 - github.com/fluxcd/image-automation-controller/api v0.36.0 + github.com/fluxcd/helm-controller/api v0.36.1 + github.com/fluxcd/image-automation-controller/api v0.36.1 github.com/fluxcd/image-reflector-controller/api v0.30.0 github.com/fluxcd/kustomize-controller/api v1.1.0 github.com/fluxcd/notification-controller/api v1.1.0 @@ -16,7 +16,7 @@ require ( github.com/fluxcd/pkg/apis/meta v1.1.2 github.com/fluxcd/pkg/git v0.14.0 github.com/fluxcd/pkg/git/gogit v0.14.0 - github.com/fluxcd/source-controller/api v1.1.0 + github.com/fluxcd/source-controller/api v1.1.1 github.com/go-git/go-git/v5 v5.9.0 github.com/hashicorp/hc-install v0.5.2 github.com/hashicorp/terraform-exec v0.18.1 diff --git a/tests/azure/go.sum b/tests/azure/go.sum index 4c9912b1..05cbdbe7 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -87,10 +87,10 @@ github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJ github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0= github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= -github.com/fluxcd/helm-controller/api v0.36.0 h1:V48f/9W2Pv3LETREaCs7jkLh1LRI6J51kKY2UzUZjvQ= -github.com/fluxcd/helm-controller/api v0.36.0/go.mod h1:zkcRy3PxG0NoxSY5SjiSA5tWOGa6spIbWsChQY8FXqM= -github.com/fluxcd/image-automation-controller/api v0.36.0 h1:Y1uzJ+K3ov5jhbUH+7+X3hfpgXIdgUO9VR7REoHUAxs= -github.com/fluxcd/image-automation-controller/api v0.36.0/go.mod h1:eZRv70cGQAxOpiqf1mZYDPgCZOmWNoGH0/PDgU60lDM= +github.com/fluxcd/helm-controller/api v0.36.1 h1:v1Y8x7fCyWg5n0hkGJabwOKcBN6yuFKLMCELe7LEgxs= +github.com/fluxcd/helm-controller/api v0.36.1/go.mod h1:zkcRy3PxG0NoxSY5SjiSA5tWOGa6spIbWsChQY8FXqM= +github.com/fluxcd/image-automation-controller/api v0.36.1 h1:Knd4SSm/bJ0iqvYcQq87uDaT/mW9poM1jOvHpJ/4tzk= +github.com/fluxcd/image-automation-controller/api v0.36.1/go.mod h1:IsjdBtgm71KHRGDTZZZiGYdWGoJ5VjenE9F4ueADM/o= github.com/fluxcd/image-reflector-controller/api v0.30.0 h1:DiWj+4tcbnaSqZs1Pfkyt3uSy47wg3dsNMgbFE50pYc= github.com/fluxcd/image-reflector-controller/api v0.30.0/go.mod h1:hv57KwIzoPyy7Vu4PFcIf21eu0N3p/HbijygcuNgf8c= github.com/fluxcd/kustomize-controller/api v1.1.0 h1:FrFdRdlPczXTolOMt/HsY6rf1tWEYBoF2uJOISx8fpg= @@ -114,8 +114,8 @@ github.com/fluxcd/pkg/ssh v0.8.2 h1:WNfvTmnLnOUyXQDb8luSfmn1X0RIuhJBcKMFtKm6YsQ= github.com/fluxcd/pkg/ssh v0.8.2/go.mod h1:ewbU9vakYYdGSX92qXhx6Kqi5tVQ3ppmGQakCX1R6Gw= github.com/fluxcd/pkg/version v0.2.2 h1:ZpVXECeLA5hIQMft11iLp6gN3cKcz6UNuVTQPw/bRdI= github.com/fluxcd/pkg/version v0.2.2/go.mod h1:NGnh/no8S6PyfCDxRFrPY3T5BUnqP48MxfxNRU0z8C0= -github.com/fluxcd/source-controller/api v1.1.0 h1:JPtt9WTTqVNdJfPpea8q7fUWF/00kDihxbhISzcb0WE= -github.com/fluxcd/source-controller/api v1.1.0/go.mod h1:ZLkaUd1KQIjtLPCvO63Ni5zpnSTVBAkeRgFBzMItbDQ= +github.com/fluxcd/source-controller/api v1.1.1 h1:0KQTEnLxBRrovISc5JeovTfyTjhh4vwodNnYyD6XD/Q= +github.com/fluxcd/source-controller/api v1.1.1/go.mod h1:ZLkaUd1KQIjtLPCvO63Ni5zpnSTVBAkeRgFBzMItbDQ= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= From f9e7190a04b75354bf038ad36b47a41ee36f2f4c Mon Sep 17 00:00:00 2001 From: Son Bui Date: Mon, 11 Sep 2023 11:24:23 +0800 Subject: [PATCH 647/818] Improve AUR package templates - remove armv6h #4224 - unique source name #4224 - improve pkgver/_srcver #4224 - fix source name in .SRCINFO Signed-off-by: Son Bui --- .github/aur/flux-bin/.SRCINFO.template | 9 +++------ .github/aur/flux-bin/PKGBUILD.template | 14 ++++---------- 2 files changed, 7 insertions(+), 16 deletions(-) diff --git a/.github/aur/flux-bin/.SRCINFO.template b/.github/aur/flux-bin/.SRCINFO.template index b75d3e62..d09772f6 100644 --- a/.github/aur/flux-bin/.SRCINFO.template +++ b/.github/aur/flux-bin/.SRCINFO.template @@ -4,19 +4,16 @@ pkgbase = flux-bin pkgrel = ${PKGREL} url = https://fluxcd.io/ arch = x86_64 - arch = armv6h arch = armv7h arch = aarch64 license = APACHE optdepends = bash-completion: auto-completion for flux in Bash optdepends = zsh-completions: auto-completion for flux in ZSH - source_x86_64 = flux-${PKGVER}.tar.gz::https://github.com/fluxcd/flux2/releases/download/v${VERSION}/flux_${VERSION}_linux_amd64.tar.gz + source_x86_64 = flux-bin-${PKGVER}_linux_amd64.tar.gz::https://github.com/fluxcd/flux2/releases/download/v${VERSION}/flux_${VERSION}_linux_amd64.tar.gz sha256sums_x86_64 = ${SHA256SUM_AMD64} - source_armv6h = flux-${PKGVER}.tar.gz::https://github.com/fluxcd/flux2/releases/download/v${VERSION}/flux_${VERSION}_linux_arm.tar.gz - sha256sums_armv6h = ${SHA256SUM_ARM} - source_armv7h = flux-${PKGVER}.tar.gz::https://github.com/fluxcd/flux2/releases/download/v${VERSION}/flux_${VERSION}_linux_arm.tar.gz + source_armv7h = flux-bin-${PKGVER}_linux_arm.tar.gz::https://github.com/fluxcd/flux2/releases/download/v${VERSION}/flux_${VERSION}_linux_arm.tar.gz sha256sums_armv7h = ${SHA256SUM_ARM} - source_aarch64 = flux-${PKGVER}.tar.gz::https://github.com/fluxcd/flux2/releases/download/v${VERSION}/flux_${VERSION}_linux_arm64.tar.gz + source_aarch64 = flux-bin-${PKGVER}_linux_arm64.tar.gz::https://github.com/fluxcd/flux2/releases/download/v${VERSION}/flux_${VERSION}_linux_arm64.tar.gz sha256sums_aarch64 = ${SHA256SUM_ARM64} pkgname = flux-bin diff --git a/.github/aur/flux-bin/PKGBUILD.template b/.github/aur/flux-bin/PKGBUILD.template index c390bd51..f011e1f9 100644 --- a/.github/aur/flux-bin/PKGBUILD.template +++ b/.github/aur/flux-bin/PKGBUILD.template @@ -8,28 +8,22 @@ _srcname=flux _srcver=${VERSION} pkgdesc="Open and extensible continuous delivery solution for Kubernetes" url="https://fluxcd.io/" -arch=("x86_64" "armv6h" "armv7h" "aarch64") +arch=("x86_64" "armv7h" "aarch64") license=("APACHE") optdepends=('bash-completion: auto-completion for flux in Bash' 'zsh-completions: auto-completion for flux in ZSH') source_x86_64=( - "${pkgname}-${pkgver}.tar.gz::https://github.com/fluxcd/flux2/releases/download/v${_srcver}/flux_${_srcver}_linux_amd64.tar.gz" -) -source_armv6h=( - "${pkgname}-${pkgver}.tar.gz::https://github.com/fluxcd/flux2/releases/download/v${_srcver}/flux_${_srcver}_linux_arm.tar.gz" + "${pkgname}-${pkgver}_linux_amd64.tar.gz::https://github.com/fluxcd/flux2/releases/download/v${_srcver}/flux_${_srcver}_linux_amd64.tar.gz" ) source_armv7h=( - "${pkgname}-${pkgver}.tar.gz::https://github.com/fluxcd/flux2/releases/download/v${_srcver}/flux_${_srcver}_linux_arm.tar.gz" + "${pkgname}-${pkgver}_linux_arm.tar.gz::https://github.com/fluxcd/flux2/releases/download/v${_srcver}/flux_${_srcver}_linux_arm.tar.gz" ) source_aarch64=( - "${pkgname}-${pkgver}.tar.gz::https://github.com/fluxcd/flux2/releases/download/v${_srcver}/flux_${_srcver}_linux_arm64.tar.gz" + "${pkgname}-${pkgver}_linux_arm64.tar.gz::https://github.com/fluxcd/flux2/releases/download/v${_srcver}/flux_${_srcver}_linux_arm64.tar.gz" ) sha256sums_x86_64=( ${SHA256SUM_AMD64} ) -sha256sums_armv6h=( - ${SHA256SUM_ARM} -) sha256sums_armv7h=( ${SHA256SUM_ARM} ) From 524a729f5de2886c909ecff50ec31401135da0a3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 25 Sep 2023 00:39:21 +0000 Subject: [PATCH 648/818] build(deps): bump the ci group with 1 update Bumps the ci group with 1 update: [actions/checkout](https://github.com/actions/checkout). - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/3df4ab11eba7bda6032a0b82a6bb43b11571feac...8ade135a41bc03ea155e62e844d188df1ea18608) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-minor dependency-group: ci ... Signed-off-by: dependabot[bot] --- .github/workflows/action.yaml | 2 +- .github/workflows/backport.yaml | 2 +- .github/workflows/e2e-arm64.yaml | 2 +- .github/workflows/e2e-azure.yaml | 4 ++-- .github/workflows/e2e-bootstrap.yaml | 2 +- .github/workflows/e2e-gcp.yaml | 2 +- .github/workflows/e2e.yaml | 2 +- .github/workflows/ossf.yaml | 2 +- .github/workflows/release.yaml | 4 ++-- .github/workflows/scan.yaml | 6 +++--- .github/workflows/sync-labels.yaml | 2 +- .github/workflows/update.yaml | 2 +- 12 files changed, 16 insertions(+), 16 deletions(-) diff --git a/.github/workflows/action.yaml b/.github/workflows/action.yaml index e1b53c48..b6a7c32c 100644 --- a/.github/workflows/action.yaml +++ b/.github/workflows/action.yaml @@ -24,6 +24,6 @@ jobs: name: action on ${{ matrix.version }} steps: - name: Checkout - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 + uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - name: Setup flux uses: ./action diff --git a/.github/workflows/backport.yaml b/.github/workflows/backport.yaml index b3d38869..8e990c9d 100644 --- a/.github/workflows/backport.yaml +++ b/.github/workflows/backport.yaml @@ -13,7 +13,7 @@ jobs: if: github.event.pull_request.state == 'closed' && github.event.pull_request.merged && (github.event_name != 'labeled' || startsWith('backport:', github.event.label.name)) steps: - name: Checkout - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 + uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 with: ref: ${{ github.event.pull_request.head.sha }} - name: Create backport PRs diff --git a/.github/workflows/e2e-arm64.yaml b/.github/workflows/e2e-arm64.yaml index d309c7d6..ba4a871e 100644 --- a/.github/workflows/e2e-arm64.yaml +++ b/.github/workflows/e2e-arm64.yaml @@ -21,7 +21,7 @@ jobs: fail-fast: false steps: - name: Checkout - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 + uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - name: Setup Go uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 with: diff --git a/.github/workflows/e2e-azure.yaml b/.github/workflows/e2e-azure.yaml index c1916609..4621eefe 100644 --- a/.github/workflows/e2e-azure.yaml +++ b/.github/workflows/e2e-azure.yaml @@ -30,7 +30,7 @@ jobs: if: false && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) && github.actor != 'dependabot[bot]' steps: - name: Checkout - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 + uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - name: Setup Go uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 with: @@ -75,7 +75,7 @@ jobs: if: false && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) && github.actor != 'dependabot[bot]' steps: - name: CheckoutD - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 + uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - name: Setup Go uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 with: diff --git a/.github/workflows/e2e-bootstrap.yaml b/.github/workflows/e2e-bootstrap.yaml index 2ccb4408..379be360 100644 --- a/.github/workflows/e2e-bootstrap.yaml +++ b/.github/workflows/e2e-bootstrap.yaml @@ -17,7 +17,7 @@ jobs: if: (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) && github.actor != 'dependabot[bot]' steps: - name: Checkout - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 + uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - name: Setup Go uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 with: diff --git a/.github/workflows/e2e-gcp.yaml b/.github/workflows/e2e-gcp.yaml index 601adc1c..d881677c 100644 --- a/.github/workflows/e2e-gcp.yaml +++ b/.github/workflows/e2e-gcp.yaml @@ -29,7 +29,7 @@ jobs: if: (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) && github.actor != 'dependabot[bot]' steps: - name: Checkout - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 + uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - name: Setup Go uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 with: diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index 7c7a99ab..59094080 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -21,7 +21,7 @@ jobs: - 5000:5000 steps: - name: Checkout - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 + uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - name: Setup Go uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 with: diff --git a/.github/workflows/ossf.yaml b/.github/workflows/ossf.yaml index bec8827b..1fca3716 100644 --- a/.github/workflows/ossf.yaml +++ b/.github/workflows/ossf.yaml @@ -19,7 +19,7 @@ jobs: actions: read contents: read steps: - - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 + - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - name: Run analysis uses: ossf/scorecard-action@08b4669551908b1024bb425080c797723083c031 # v2.2.0 with: diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index a066b6db..095cb5d6 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -20,7 +20,7 @@ jobs: packages: write # needed for ghcr access steps: - name: Checkout - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 + uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - name: Unshallow run: git fetch --prune --unshallow - name: Setup Go @@ -110,7 +110,7 @@ jobs: id-token: write packages: write steps: - - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 + - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - name: Setup Kustomize uses: fluxcd/pkg/actions/kustomize@main - name: Setup Flux CLI diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index a8f29dbd..8a84ad5c 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -17,7 +17,7 @@ jobs: runs-on: ubuntu-latest if: github.actor != 'dependabot[bot]' steps: - - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 + - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - name: Run FOSSA scan and upload build data uses: fossa-contrib/fossa-action@6728dc6fe9a068c648d080c33829ffbe56565023 # v2.0.0 with: @@ -31,7 +31,7 @@ jobs: security-events: write if: (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) && github.actor != 'dependabot[bot]' steps: - - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 + - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - name: Setup Kustomize uses: fluxcd/pkg/actions/kustomize@main - name: Setup Go @@ -64,7 +64,7 @@ jobs: if: github.actor != 'dependabot[bot]' steps: - name: Checkout repository - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 + uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - name: Setup Go uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 with: diff --git a/.github/workflows/sync-labels.yaml b/.github/workflows/sync-labels.yaml index 17144468..63969548 100644 --- a/.github/workflows/sync-labels.yaml +++ b/.github/workflows/sync-labels.yaml @@ -17,7 +17,7 @@ jobs: permissions: issues: write steps: - - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 + - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - uses: EndBug/label-sync@da00f2c11fdb78e4fae44adac2fdd713778ea3e8 # v2.3.2 with: # Configuration file diff --git a/.github/workflows/update.yaml b/.github/workflows/update.yaml index 1b3ab231..3dcbcb6d 100644 --- a/.github/workflows/update.yaml +++ b/.github/workflows/update.yaml @@ -18,7 +18,7 @@ jobs: pull-requests: write steps: - name: Check out code - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 + uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - name: Setup Go uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 with: From 630ca340dd6aac95fa8d66fc262ceafb1905768f Mon Sep 17 00:00:00 2001 From: Matheus Pimenta Date: Wed, 27 Sep 2023 12:21:28 +0100 Subject: [PATCH 649/818] Add badge for SLSA Level 3 Signed-off-by: Matheus Pimenta --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index e92e1587..5641b7be 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,7 @@ [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/fluxcd/flux2/badge)](https://api.securityscorecards.dev/projects/github.com/fluxcd/flux2) [![FOSSA Status](https://app.fossa.com/api/projects/custom%2B162%2Fgithub.com%2Ffluxcd%2Fflux2.svg?type=shield)](https://app.fossa.com/projects/custom%2B162%2Fgithub.com%2Ffluxcd%2Fflux2?ref=badge_shield) [![Artifact HUB](https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/flux2)](https://artifacthub.io/packages/helm/fluxcd-community/flux2) +[![SLSA 3](https://slsa.dev/images/gh-badge-level3.svg)](https://fluxcd.io/flux/security/slsa-assessment) Flux is a tool for keeping Kubernetes clusters in sync with sources of configuration (like Git repositories and OCI artifacts), From cf78e029aa6a3710672a3c7bec798c452b5dcd95 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Oct 2023 00:47:36 +0000 Subject: [PATCH 650/818] build(deps): bump the ci group with 1 update Bumps the ci group with 1 update: [ossf/scorecard-action](https://github.com/ossf/scorecard-action). - [Release notes](https://github.com/ossf/scorecard-action/releases) - [Changelog](https://github.com/ossf/scorecard-action/blob/main/RELEASE.md) - [Commits](https://github.com/ossf/scorecard-action/compare/08b4669551908b1024bb425080c797723083c031...483ef80eb98fb506c348f7d62e28055e49fe2398) --- updated-dependencies: - dependency-name: ossf/scorecard-action dependency-type: direct:production update-type: version-update:semver-minor dependency-group: ci ... Signed-off-by: dependabot[bot] --- .github/workflows/ossf.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ossf.yaml b/.github/workflows/ossf.yaml index 1fca3716..02ae21bd 100644 --- a/.github/workflows/ossf.yaml +++ b/.github/workflows/ossf.yaml @@ -21,7 +21,7 @@ jobs: steps: - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 - name: Run analysis - uses: ossf/scorecard-action@08b4669551908b1024bb425080c797723083c031 # v2.2.0 + uses: ossf/scorecard-action@483ef80eb98fb506c348f7d62e28055e49fe2398 # v2.3.0 with: results_file: results.sarif results_format: sarif From 084fb6318daeef5302b84e8df085e37df37e63ce Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Wed, 11 Oct 2023 14:02:03 +0000 Subject: [PATCH 651/818] Update toolkit components - helm-controller to v0.36.2 https://github.com/fluxcd/helm-controller/blob/v0.36.2/CHANGELOG.md - kustomize-controller to v1.1.1 https://github.com/fluxcd/kustomize-controller/blob/v1.1.1/CHANGELOG.md - source-controller to v1.1.2 https://github.com/fluxcd/source-controller/blob/v1.1.2/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 6 +++--- go.sum | 12 ++++++------ manifests/bases/helm-controller/kustomization.yaml | 4 ++-- .../bases/kustomize-controller/kustomization.yaml | 4 ++-- manifests/bases/source-controller/kustomization.yaml | 4 ++-- manifests/crds/kustomization.yaml | 6 +++--- 6 files changed, 18 insertions(+), 18 deletions(-) diff --git a/go.mod b/go.mod index fcc6ae61..83c799c1 100644 --- a/go.mod +++ b/go.mod @@ -11,10 +11,10 @@ require ( github.com/cyphar/filepath-securejoin v0.2.4 github.com/distribution/distribution/v3 v3.0.0-20230823142118-4f7424c8eb41 github.com/fluxcd/go-git-providers v0.18.0 - github.com/fluxcd/helm-controller/api v0.36.1 + github.com/fluxcd/helm-controller/api v0.36.2 github.com/fluxcd/image-automation-controller/api v0.36.1 github.com/fluxcd/image-reflector-controller/api v0.30.0 - github.com/fluxcd/kustomize-controller/api v1.1.0 + github.com/fluxcd/kustomize-controller/api v1.1.1 github.com/fluxcd/notification-controller/api v1.1.0 github.com/fluxcd/pkg/apis/event v0.5.2 github.com/fluxcd/pkg/apis/meta v1.1.2 @@ -28,7 +28,7 @@ require ( github.com/fluxcd/pkg/ssh v0.8.2 github.com/fluxcd/pkg/tar v0.2.0 github.com/fluxcd/pkg/version v0.2.2 - github.com/fluxcd/source-controller/api v1.1.1 + github.com/fluxcd/source-controller/api v1.1.2 github.com/go-git/go-git/v5 v5.9.0 github.com/go-logr/logr v1.2.4 github.com/gonvenience/bunt v1.3.5 diff --git a/go.sum b/go.sum index c16b1593..bc3db0bf 100644 --- a/go.sum +++ b/go.sum @@ -144,14 +144,14 @@ github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= github.com/fluxcd/go-git-providers v0.18.0 h1:4Whs6GzQdx3d7UTeIahRmzUrTZKhucySC53pwdXFV7Y= github.com/fluxcd/go-git-providers v0.18.0/go.mod h1:++kUR1LegtRWU30bdPb9FuRUH/6+DgoHSbwOkZ5NiKo= -github.com/fluxcd/helm-controller/api v0.36.1 h1:v1Y8x7fCyWg5n0hkGJabwOKcBN6yuFKLMCELe7LEgxs= -github.com/fluxcd/helm-controller/api v0.36.1/go.mod h1:zkcRy3PxG0NoxSY5SjiSA5tWOGa6spIbWsChQY8FXqM= +github.com/fluxcd/helm-controller/api v0.36.2 h1:9JaTc91yocG1oQkM/GMfpZ/nGPpliRjZBNwyAsW5584= +github.com/fluxcd/helm-controller/api v0.36.2/go.mod h1:zkcRy3PxG0NoxSY5SjiSA5tWOGa6spIbWsChQY8FXqM= github.com/fluxcd/image-automation-controller/api v0.36.1 h1:Knd4SSm/bJ0iqvYcQq87uDaT/mW9poM1jOvHpJ/4tzk= github.com/fluxcd/image-automation-controller/api v0.36.1/go.mod h1:IsjdBtgm71KHRGDTZZZiGYdWGoJ5VjenE9F4ueADM/o= github.com/fluxcd/image-reflector-controller/api v0.30.0 h1:DiWj+4tcbnaSqZs1Pfkyt3uSy47wg3dsNMgbFE50pYc= github.com/fluxcd/image-reflector-controller/api v0.30.0/go.mod h1:hv57KwIzoPyy7Vu4PFcIf21eu0N3p/HbijygcuNgf8c= -github.com/fluxcd/kustomize-controller/api v1.1.0 h1:FrFdRdlPczXTolOMt/HsY6rf1tWEYBoF2uJOISx8fpg= -github.com/fluxcd/kustomize-controller/api v1.1.0/go.mod h1:FHJTX6c0+CznUNGMol5+Uc4lQsYRxWgpmIRK/xDCghA= +github.com/fluxcd/kustomize-controller/api v1.1.1 h1:pQcAzvBC3cFGOCgk0zrcsO1Kjtal1tvd6rHXkyp2R78= +github.com/fluxcd/kustomize-controller/api v1.1.1/go.mod h1:FHJTX6c0+CznUNGMol5+Uc4lQsYRxWgpmIRK/xDCghA= github.com/fluxcd/notification-controller/api v1.1.0 h1:qx5t5DmArfPLxG2bsYZXIqDXLnijUddlHeRfciALwQw= github.com/fluxcd/notification-controller/api v1.1.0/go.mod h1:6MqWVQeI5yrYR7zp0GFqsfXitNPGJrnfOWxO2w3jylg= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= @@ -183,8 +183,8 @@ github.com/fluxcd/pkg/tar v0.2.0 h1:HEUHgONQYsJGeZZ4x6h5nQU9Aox1I4T3bOp1faWTqf8= github.com/fluxcd/pkg/tar v0.2.0/go.mod h1:w0/TOC7kwBJhnSJn7TCABkc/I7ib1f2Yz6vOsbLBnhw= github.com/fluxcd/pkg/version v0.2.2 h1:ZpVXECeLA5hIQMft11iLp6gN3cKcz6UNuVTQPw/bRdI= github.com/fluxcd/pkg/version v0.2.2/go.mod h1:NGnh/no8S6PyfCDxRFrPY3T5BUnqP48MxfxNRU0z8C0= -github.com/fluxcd/source-controller/api v1.1.1 h1:0KQTEnLxBRrovISc5JeovTfyTjhh4vwodNnYyD6XD/Q= -github.com/fluxcd/source-controller/api v1.1.1/go.mod h1:ZLkaUd1KQIjtLPCvO63Ni5zpnSTVBAkeRgFBzMItbDQ= +github.com/fluxcd/source-controller/api v1.1.2 h1:FfKDKVWnopo+Q2pOAxgHEjrtr4MP41L8aapR4mqBhBk= +github.com/fluxcd/source-controller/api v1.1.2/go.mod h1:ZLkaUd1KQIjtLPCvO63Ni5zpnSTVBAkeRgFBzMItbDQ= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= diff --git a/manifests/bases/helm-controller/kustomization.yaml b/manifests/bases/helm-controller/kustomization.yaml index 2037bdfe..a55c9340 100644 --- a/manifests/bases/helm-controller/kustomization.yaml +++ b/manifests/bases/helm-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/helm-controller/releases/download/v0.36.1/helm-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.36.1/helm-controller.deployment.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.36.2/helm-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.36.2/helm-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/kustomize-controller/kustomization.yaml b/manifests/bases/kustomize-controller/kustomization.yaml index d831b6bd..cef82f1e 100644 --- a/manifests/bases/kustomize-controller/kustomization.yaml +++ b/manifests/bases/kustomize-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/kustomize-controller/releases/download/v1.1.0/kustomize-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v1.1.0/kustomize-controller.deployment.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v1.1.1/kustomize-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v1.1.1/kustomize-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index 67d4566a..7b3d3fec 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v1.1.1/source-controller.crds.yaml -- https://github.com/fluxcd/source-controller/releases/download/v1.1.1/source-controller.deployment.yaml +- https://github.com/fluxcd/source-controller/releases/download/v1.1.2/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v1.1.2/source-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index feaa2d60..920f6fec 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -1,9 +1,9 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v1.1.1/source-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v1.1.0/kustomize-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.36.1/helm-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v1.1.2/source-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v1.1.1/kustomize-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.36.2/helm-controller.crds.yaml - https://github.com/fluxcd/notification-controller/releases/download/v1.1.0/notification-controller.crds.yaml - https://github.com/fluxcd/image-reflector-controller/releases/download/v0.30.0/image-reflector-controller.crds.yaml - https://github.com/fluxcd/image-automation-controller/releases/download/v0.36.1/image-automation-controller.crds.yaml From 8f7ed74913a6690655431a45d48c07dd81cfc3d3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 11 Oct 2023 23:12:22 +0000 Subject: [PATCH 652/818] build(deps): bump golang.org/x/net from 0.15.0 to 0.17.0 Bumps [golang.org/x/net](https://github.com/golang/net) from 0.15.0 to 0.17.0. - [Commits](https://github.com/golang/net/compare/v0.15.0...v0.17.0) --- updated-dependencies: - dependency-name: golang.org/x/net dependency-type: indirect ... Signed-off-by: dependabot[bot] --- go.mod | 8 ++++---- go.sum | 16 ++++++++-------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/go.mod b/go.mod index 83c799c1..6464671d 100644 --- a/go.mod +++ b/go.mod @@ -46,8 +46,8 @@ require ( github.com/spf13/cobra v1.7.0 github.com/spf13/pflag v1.0.5 github.com/theckman/yacspin v0.13.12 - golang.org/x/crypto v0.13.0 - golang.org/x/term v0.12.0 + golang.org/x/crypto v0.14.0 + golang.org/x/term v0.13.0 k8s.io/api v0.27.4 k8s.io/apiextensions-apiserver v0.27.4 k8s.io/apimachinery v0.27.4 @@ -191,10 +191,10 @@ require ( github.com/xlab/treeprint v1.1.0 // indirect go.starlark.net v0.0.0-20221028183056-acb66ad56dd2 // indirect golang.org/x/mod v0.12.0 // indirect - golang.org/x/net v0.15.0 // indirect + golang.org/x/net v0.17.0 // indirect golang.org/x/oauth2 v0.8.0 // indirect golang.org/x/sync v0.3.0 // indirect - golang.org/x/sys v0.12.0 // indirect + golang.org/x/sys v0.13.0 // indirect golang.org/x/text v0.13.0 // indirect golang.org/x/time v0.3.0 // indirect golang.org/x/tools v0.13.0 // indirect diff --git a/go.sum b/go.sum index bc3db0bf..22ed4426 100644 --- a/go.sum +++ b/go.sum @@ -511,8 +511,8 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.13.0 h1:mvySKfSWJ+UKUii46M40LOvyWfN0s2U+46/jDd0e6Ck= -golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= +golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= +golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= @@ -544,8 +544,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.6.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.15.0 h1:ugBLEUaxABaB5AJqW9enI0ACdci2RUd4eP51NTBvuJ8= -golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= +golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= +golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.8.0 h1:6dkIjl3j3LtZ/O3sTgZTMsLKSftL/B8Zgq4huOIIUu8= @@ -591,16 +591,16 @@ golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= -golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= +golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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= golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/term v0.12.0 h1:/ZfYdc3zq+q02Rv9vGqTeSItdzZTSNDmfTi0mBAuidU= -golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= +golang.org/x/term v0.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek= +golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= From 42372d9ef6e09bf246c9133ccda25df892a700c2 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Thu, 12 Oct 2023 09:43:46 +0300 Subject: [PATCH 653/818] e2e: Update Go dependencies Signed-off-by: Stefan Prodan --- tests/azure/go.mod | 14 +++---- tests/azure/go.sum | 28 ++++++------- tests/integration/go.mod | 42 ++++++++++---------- tests/integration/go.sum | 85 ++++++++++++++++++++-------------------- 4 files changed, 84 insertions(+), 85 deletions(-) diff --git a/tests/azure/go.mod b/tests/azure/go.mod index 24320579..298cc7c3 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -7,16 +7,16 @@ replace gopkg.in/yaml.v3 => gopkg.in/yaml.v3 v3.0.1 require ( github.com/Azure/azure-event-hubs-go/v3 v3.6.1 - github.com/fluxcd/helm-controller/api v0.36.1 + github.com/fluxcd/helm-controller/api v0.36.2 github.com/fluxcd/image-automation-controller/api v0.36.1 github.com/fluxcd/image-reflector-controller/api v0.30.0 - github.com/fluxcd/kustomize-controller/api v1.1.0 + github.com/fluxcd/kustomize-controller/api v1.1.1 github.com/fluxcd/notification-controller/api v1.1.0 github.com/fluxcd/pkg/apis/event v0.5.2 github.com/fluxcd/pkg/apis/meta v1.1.2 github.com/fluxcd/pkg/git v0.14.0 github.com/fluxcd/pkg/git/gogit v0.14.0 - github.com/fluxcd/source-controller/api v1.1.1 + github.com/fluxcd/source-controller/api v1.1.2 github.com/go-git/go-git/v5 v5.9.0 github.com/hashicorp/hc-install v0.5.2 github.com/hashicorp/terraform-exec v0.18.1 @@ -97,12 +97,12 @@ require ( github.com/xanzy/ssh-agent v0.3.3 // indirect github.com/zclconf/go-cty v1.13.0 // indirect go.uber.org/atomic v1.10.0 // indirect - golang.org/x/crypto v0.13.0 // indirect + golang.org/x/crypto v0.14.0 // indirect golang.org/x/mod v0.12.0 // indirect - golang.org/x/net v0.15.0 // indirect + golang.org/x/net v0.17.0 // indirect golang.org/x/oauth2 v0.5.0 // indirect - golang.org/x/sys v0.12.0 // indirect - golang.org/x/term v0.12.0 // indirect + golang.org/x/sys v0.13.0 // indirect + golang.org/x/term v0.13.0 // indirect golang.org/x/text v0.13.0 // indirect golang.org/x/time v0.3.0 // indirect golang.org/x/tools v0.13.0 // indirect diff --git a/tests/azure/go.sum b/tests/azure/go.sum index 05cbdbe7..2aff25b1 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -87,14 +87,14 @@ github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJ github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0= github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= -github.com/fluxcd/helm-controller/api v0.36.1 h1:v1Y8x7fCyWg5n0hkGJabwOKcBN6yuFKLMCELe7LEgxs= -github.com/fluxcd/helm-controller/api v0.36.1/go.mod h1:zkcRy3PxG0NoxSY5SjiSA5tWOGa6spIbWsChQY8FXqM= +github.com/fluxcd/helm-controller/api v0.36.2 h1:9JaTc91yocG1oQkM/GMfpZ/nGPpliRjZBNwyAsW5584= +github.com/fluxcd/helm-controller/api v0.36.2/go.mod h1:zkcRy3PxG0NoxSY5SjiSA5tWOGa6spIbWsChQY8FXqM= github.com/fluxcd/image-automation-controller/api v0.36.1 h1:Knd4SSm/bJ0iqvYcQq87uDaT/mW9poM1jOvHpJ/4tzk= github.com/fluxcd/image-automation-controller/api v0.36.1/go.mod h1:IsjdBtgm71KHRGDTZZZiGYdWGoJ5VjenE9F4ueADM/o= github.com/fluxcd/image-reflector-controller/api v0.30.0 h1:DiWj+4tcbnaSqZs1Pfkyt3uSy47wg3dsNMgbFE50pYc= github.com/fluxcd/image-reflector-controller/api v0.30.0/go.mod h1:hv57KwIzoPyy7Vu4PFcIf21eu0N3p/HbijygcuNgf8c= -github.com/fluxcd/kustomize-controller/api v1.1.0 h1:FrFdRdlPczXTolOMt/HsY6rf1tWEYBoF2uJOISx8fpg= -github.com/fluxcd/kustomize-controller/api v1.1.0/go.mod h1:FHJTX6c0+CznUNGMol5+Uc4lQsYRxWgpmIRK/xDCghA= +github.com/fluxcd/kustomize-controller/api v1.1.1 h1:pQcAzvBC3cFGOCgk0zrcsO1Kjtal1tvd6rHXkyp2R78= +github.com/fluxcd/kustomize-controller/api v1.1.1/go.mod h1:FHJTX6c0+CznUNGMol5+Uc4lQsYRxWgpmIRK/xDCghA= github.com/fluxcd/notification-controller/api v1.1.0 h1:qx5t5DmArfPLxG2bsYZXIqDXLnijUddlHeRfciALwQw= github.com/fluxcd/notification-controller/api v1.1.0/go.mod h1:6MqWVQeI5yrYR7zp0GFqsfXitNPGJrnfOWxO2w3jylg= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= @@ -114,8 +114,8 @@ github.com/fluxcd/pkg/ssh v0.8.2 h1:WNfvTmnLnOUyXQDb8luSfmn1X0RIuhJBcKMFtKm6YsQ= github.com/fluxcd/pkg/ssh v0.8.2/go.mod h1:ewbU9vakYYdGSX92qXhx6Kqi5tVQ3ppmGQakCX1R6Gw= github.com/fluxcd/pkg/version v0.2.2 h1:ZpVXECeLA5hIQMft11iLp6gN3cKcz6UNuVTQPw/bRdI= github.com/fluxcd/pkg/version v0.2.2/go.mod h1:NGnh/no8S6PyfCDxRFrPY3T5BUnqP48MxfxNRU0z8C0= -github.com/fluxcd/source-controller/api v1.1.1 h1:0KQTEnLxBRrovISc5JeovTfyTjhh4vwodNnYyD6XD/Q= -github.com/fluxcd/source-controller/api v1.1.1/go.mod h1:ZLkaUd1KQIjtLPCvO63Ni5zpnSTVBAkeRgFBzMItbDQ= +github.com/fluxcd/source-controller/api v1.1.2 h1:FfKDKVWnopo+Q2pOAxgHEjrtr4MP41L8aapR4mqBhBk= +github.com/fluxcd/source-controller/api v1.1.2/go.mod h1:ZLkaUd1KQIjtLPCvO63Ni5zpnSTVBAkeRgFBzMItbDQ= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= @@ -313,8 +313,8 @@ golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.13.0 h1:mvySKfSWJ+UKUii46M40LOvyWfN0s2U+46/jDd0e6Ck= -golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= +golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= +golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= @@ -346,8 +346,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.6.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.15.0 h1:ugBLEUaxABaB5AJqW9enI0ACdci2RUd4eP51NTBvuJ8= -golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= +golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= +golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.5.0 h1:HuArIo48skDwlrvM3sEdHXElYslAMsf3KwRkkW4MC4s= @@ -380,15 +380,15 @@ golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= -golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= +golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/term v0.12.0 h1:/ZfYdc3zq+q02Rv9vGqTeSItdzZTSNDmfTi0mBAuidU= -golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= +golang.org/x/term v0.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek= +golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= diff --git a/tests/integration/go.mod b/tests/integration/go.mod index b3001b08..d6ee1e36 100644 --- a/tests/integration/go.mod +++ b/tests/integration/go.mod @@ -1,22 +1,22 @@ module github.com/fluxcd/flux2/tests/integration -go 1.18 +go 1.20 require ( cloud.google.com/go/pubsub v1.31.0 github.com/Azure/azure-event-hubs-go/v3 v3.6.0 - github.com/fluxcd/helm-controller/api v0.34.1 - github.com/fluxcd/image-automation-controller/api v0.34.1 - github.com/fluxcd/image-reflector-controller/api v0.28.0 - github.com/fluxcd/kustomize-controller/api v1.0.0-rc.4 - github.com/fluxcd/notification-controller/api v1.0.0-rc.4 - github.com/fluxcd/pkg/apis/event v0.5.1 - github.com/fluxcd/pkg/apis/meta v1.1.1 + github.com/fluxcd/helm-controller/api v0.36.2 + github.com/fluxcd/image-automation-controller/api v0.36.1 + github.com/fluxcd/image-reflector-controller/api v0.30.0 + github.com/fluxcd/kustomize-controller/api v1.1.1 + github.com/fluxcd/notification-controller/api v1.1.0 + github.com/fluxcd/pkg/apis/event v0.5.2 + github.com/fluxcd/pkg/apis/meta v1.1.2 github.com/fluxcd/pkg/git v0.14.0 github.com/fluxcd/pkg/git/gogit v0.14.0 - github.com/fluxcd/pkg/runtime v0.39.0 - github.com/fluxcd/source-controller/api v1.0.0-rc.5 - github.com/fluxcd/test-infra/tftestenv v0.0.0-20230531151340-931581bd0a3e + github.com/fluxcd/pkg/runtime v0.42.0 + github.com/fluxcd/source-controller/api v1.1.2 + github.com/fluxcd/test-infra/tftestenv v0.0.0-20230831142147-627bca8e7916 github.com/go-git/go-git/v5 v5.9.0 github.com/google/go-containerregistry v0.14.0 github.com/hashicorp/terraform-json v0.16.0 @@ -24,10 +24,10 @@ require ( github.com/onsi/gomega v1.27.10 github.com/whilp/git-urls v1.0.0 google.golang.org/grpc v1.55.0 - k8s.io/api v0.27.3 - k8s.io/apimachinery v0.27.3 - k8s.io/client-go v0.27.3 - sigs.k8s.io/controller-runtime v0.15.0 + k8s.io/api v0.27.4 + k8s.io/apimachinery v0.27.4 + k8s.io/client-go v0.27.4 + sigs.k8s.io/controller-runtime v0.15.1 ) require ( @@ -65,7 +65,7 @@ require ( github.com/emirpasic/gods v1.18.1 // indirect github.com/evanphx/json-patch/v5 v5.6.0 // indirect github.com/fluxcd/pkg/apis/acl v0.1.0 // indirect - github.com/fluxcd/pkg/apis/kustomize v1.1.0 // indirect + github.com/fluxcd/pkg/apis/kustomize v1.1.1 // indirect github.com/fluxcd/pkg/ssh v0.8.2 // indirect github.com/fluxcd/pkg/version v0.2.2 // indirect github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect @@ -116,13 +116,13 @@ require ( github.com/xanzy/ssh-agent v0.3.3 // indirect github.com/zclconf/go-cty v1.13.0 // indirect go.opencensus.io v0.24.0 // indirect - golang.org/x/crypto v0.13.0 // indirect + golang.org/x/crypto v0.14.0 // indirect golang.org/x/mod v0.12.0 // indirect - golang.org/x/net v0.15.0 // indirect + golang.org/x/net v0.17.0 // indirect golang.org/x/oauth2 v0.8.0 // indirect golang.org/x/sync v0.3.0 // indirect - golang.org/x/sys v0.12.0 // indirect - golang.org/x/term v0.12.0 // indirect + golang.org/x/sys v0.13.0 // indirect + golang.org/x/term v0.13.0 // indirect golang.org/x/text v0.13.0 // indirect golang.org/x/time v0.3.0 // indirect golang.org/x/tools v0.13.0 // indirect @@ -134,7 +134,7 @@ require ( gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/apiextensions-apiserver v0.27.3 // indirect + k8s.io/apiextensions-apiserver v0.27.4 // indirect k8s.io/klog/v2 v2.100.1 // indirect k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f // indirect k8s.io/utils v0.0.0-20230505201702-9f6742963106 // indirect diff --git a/tests/integration/go.sum b/tests/integration/go.sum index a41cda11..8fd1ce79 100644 --- a/tests/integration/go.sum +++ b/tests/integration/go.sum @@ -128,39 +128,39 @@ github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2Vvl github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0= github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= -github.com/fluxcd/helm-controller/api v0.34.1 h1:oL6GG7weRIqkTlTFRoTY3DJpxqKpAFEoDDsYoxQCa8g= -github.com/fluxcd/helm-controller/api v0.34.1/go.mod h1:1v1UqS5jOgWdMDzvJBgdcY40RminDUO6A0by4IkHd5s= -github.com/fluxcd/image-automation-controller/api v0.34.1 h1:Y2RFhmltELcSGm3lsGgmRcJCBf0SdGlH/PwCxewk4w0= -github.com/fluxcd/image-automation-controller/api v0.34.1/go.mod h1:vRJscxpWXuDMmBj8vlFM3pgpVHqh5hf65RVnCaOnSGo= -github.com/fluxcd/image-reflector-controller/api v0.28.0 h1:2a1UxPU1RHTxl+5YFFB0KuOCHrR3hL0B7fvAPJo2UXY= -github.com/fluxcd/image-reflector-controller/api v0.28.0/go.mod h1:bY28TT8Jv/pvdF/m+c64QCEiCY2BShMe22l1zRDYm4s= -github.com/fluxcd/kustomize-controller/api v1.0.0-rc.4 h1:e5dO5HaFISFNzhfi4zuPniE545vVnEi3VnSBcbxcZqU= -github.com/fluxcd/kustomize-controller/api v1.0.0-rc.4/go.mod h1:UTJu1JMr+rkabWkUWMNiOeFeDu+4ZKfJIK+oqEwOjzc= -github.com/fluxcd/notification-controller/api v1.0.0-rc.4 h1:bDqIirpscGUY0+1u+RKvTEmX43iiZ2xeQLz27FoJJD8= -github.com/fluxcd/notification-controller/api v1.0.0-rc.4/go.mod h1:XL5h5/x46e41rtNc8mwxTKX4kAtgTNuzJS0PV2c0iIQ= +github.com/fluxcd/helm-controller/api v0.36.2 h1:9JaTc91yocG1oQkM/GMfpZ/nGPpliRjZBNwyAsW5584= +github.com/fluxcd/helm-controller/api v0.36.2/go.mod h1:zkcRy3PxG0NoxSY5SjiSA5tWOGa6spIbWsChQY8FXqM= +github.com/fluxcd/image-automation-controller/api v0.36.1 h1:Knd4SSm/bJ0iqvYcQq87uDaT/mW9poM1jOvHpJ/4tzk= +github.com/fluxcd/image-automation-controller/api v0.36.1/go.mod h1:IsjdBtgm71KHRGDTZZZiGYdWGoJ5VjenE9F4ueADM/o= +github.com/fluxcd/image-reflector-controller/api v0.30.0 h1:DiWj+4tcbnaSqZs1Pfkyt3uSy47wg3dsNMgbFE50pYc= +github.com/fluxcd/image-reflector-controller/api v0.30.0/go.mod h1:hv57KwIzoPyy7Vu4PFcIf21eu0N3p/HbijygcuNgf8c= +github.com/fluxcd/kustomize-controller/api v1.1.1 h1:pQcAzvBC3cFGOCgk0zrcsO1Kjtal1tvd6rHXkyp2R78= +github.com/fluxcd/kustomize-controller/api v1.1.1/go.mod h1:FHJTX6c0+CznUNGMol5+Uc4lQsYRxWgpmIRK/xDCghA= +github.com/fluxcd/notification-controller/api v1.1.0 h1:qx5t5DmArfPLxG2bsYZXIqDXLnijUddlHeRfciALwQw= +github.com/fluxcd/notification-controller/api v1.1.0/go.mod h1:6MqWVQeI5yrYR7zp0GFqsfXitNPGJrnfOWxO2w3jylg= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= -github.com/fluxcd/pkg/apis/event v0.5.1 h1:UrEmKwTK/lt42gMZunl8BQBMzjf8PSqGbWDs/GB839c= -github.com/fluxcd/pkg/apis/event v0.5.1/go.mod h1:GzBAzS8bq7751wvNkaSnr3kuwFVuWTPL20D77UgSNJQ= -github.com/fluxcd/pkg/apis/kustomize v1.1.0 h1:Fbv4dCB57r2+fiusozN7at8r7upTz58Z4wWw1njHPyU= -github.com/fluxcd/pkg/apis/kustomize v1.1.0/go.mod h1:CAe9Mjf9KVoTm1V4wpvq/FGXFDSnpBwfww/IG7mw3gM= -github.com/fluxcd/pkg/apis/meta v1.1.1 h1:sLAKLbEu7rRzJ+Mytffu3NcpfdbOBTa6hcpOQzFWm+M= -github.com/fluxcd/pkg/apis/meta v1.1.1/go.mod h1:soCfzjFWbm1mqybDcOywWKTCEYlH3skpoNGTboVk234= +github.com/fluxcd/pkg/apis/event v0.5.2 h1:WtnCOeWglf7wR3dpyiWxb1JtYkw1G5OXcERb1QopFpA= +github.com/fluxcd/pkg/apis/event v0.5.2/go.mod h1:5l6SSxVTkqrXrYjgEqAajOOHkl4x0TPocAuSdu+3AEs= +github.com/fluxcd/pkg/apis/kustomize v1.1.1 h1:MSGn4z0R9PptmoPFHnx2nEZ8Jtl1sKfw0cuDQY2HYwM= +github.com/fluxcd/pkg/apis/kustomize v1.1.1/go.mod h1:0pCu0ecIY+ZM0iE/hOHYwCMZ3b0SpBrjJ1SH3FFyYdE= +github.com/fluxcd/pkg/apis/meta v1.1.2 h1:Unjo7hxadtB2dvGpeFqZZUdsjpRA08YYSBb7dF2WIAM= +github.com/fluxcd/pkg/apis/meta v1.1.2/go.mod h1:BHQyRHCskGMEDf6kDGbgQ+cyiNpUHbLsCOsaMYM2maI= github.com/fluxcd/pkg/git v0.14.0 h1:gefX0A1HkoFhT9mX+ybw2EBNTgebLje0TPyBlKpYrlk= github.com/fluxcd/pkg/git v0.14.0/go.mod h1:Oq1kLyTk8u2hlGk+7HC1uQ4xX5i0/umJSn+dSIsE6BY= github.com/fluxcd/pkg/git/gogit v0.14.0 h1:4apklSXh55panQzgFIUwHZUei6B/zqXm4ygtF3jb6uI= github.com/fluxcd/pkg/git/gogit v0.14.0/go.mod h1:EfTdPc1AaGS1NTF4h6HqXqyKEdOV0UyBeG7khQ7/ai0= github.com/fluxcd/pkg/gittestserver v0.8.6 h1:YM8prVKB3LC9LBBe+a2p7l1BlfV9erXCgC1em9sbqW4= -github.com/fluxcd/pkg/runtime v0.39.0 h1:vgmzYS+DT0w8ikX9MqGsOdmMagoiKys2RMGdl/EDbgc= -github.com/fluxcd/pkg/runtime v0.39.0/go.mod h1:0A/0kZv/MPciAj5AoSEDKVeqUFEF6371q7o+zk6l81g= +github.com/fluxcd/pkg/runtime v0.42.0 h1:a5DQ/f90YjoHBmiXZUpnp4bDSLORjInbmqP7K11L4uY= +github.com/fluxcd/pkg/runtime v0.42.0/go.mod h1:p6A3xWVV8cKLLQW0N90GehKgGMMmbNYv+OSJ/0qB0vg= github.com/fluxcd/pkg/ssh v0.8.2 h1:WNfvTmnLnOUyXQDb8luSfmn1X0RIuhJBcKMFtKm6YsQ= github.com/fluxcd/pkg/ssh v0.8.2/go.mod h1:ewbU9vakYYdGSX92qXhx6Kqi5tVQ3ppmGQakCX1R6Gw= github.com/fluxcd/pkg/version v0.2.2 h1:ZpVXECeLA5hIQMft11iLp6gN3cKcz6UNuVTQPw/bRdI= github.com/fluxcd/pkg/version v0.2.2/go.mod h1:NGnh/no8S6PyfCDxRFrPY3T5BUnqP48MxfxNRU0z8C0= -github.com/fluxcd/source-controller/api v1.0.0-rc.5 h1:muoGOb/VitVEIOh877Ledi9AvibbyevPqvuH5byWU6g= -github.com/fluxcd/source-controller/api v1.0.0-rc.5/go.mod h1:W6tNXr3mRPhdc5+Jke9OZnuk/3THNzGzRJVhAtLfzss= -github.com/fluxcd/test-infra/tftestenv v0.0.0-20230531151340-931581bd0a3e h1:71jXb0t9pQAGleqRklVtdW38nXVTZ/KqeLSENnBldNk= -github.com/fluxcd/test-infra/tftestenv v0.0.0-20230531151340-931581bd0a3e/go.mod h1:liFlLEXgambGVdWSJ4JzbIHf1Vjpp1HwUyPazPIVZug= +github.com/fluxcd/source-controller/api v1.1.2 h1:FfKDKVWnopo+Q2pOAxgHEjrtr4MP41L8aapR4mqBhBk= +github.com/fluxcd/source-controller/api v1.1.2/go.mod h1:ZLkaUd1KQIjtLPCvO63Ni5zpnSTVBAkeRgFBzMItbDQ= +github.com/fluxcd/test-infra/tftestenv v0.0.0-20230831142147-627bca8e7916 h1:w9UGknpfAGbiObQALZiuWYGeriAU1wKCFTmI2tj/96M= +github.com/fluxcd/test-infra/tftestenv v0.0.0-20230831142147-627bca8e7916/go.mod h1:liFlLEXgambGVdWSJ4JzbIHf1Vjpp1HwUyPazPIVZug= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= @@ -394,9 +394,8 @@ github.com/zclconf/go-cty v1.13.0/go.mod h1:YKQzy/7pZ7iq2jNFzy5go57xdxdWoLLpaEp4 go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= -go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= -go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= +go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ= +go.uber.org/zap v1.25.0 h1:4Hvk6GtkucQ790dqmj7l1eEnRdKm3k3ZUrUMS2d5+5c= golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -412,8 +411,8 @@ golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.13.0 h1:mvySKfSWJ+UKUii46M40LOvyWfN0s2U+46/jDd0e6Ck= -golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= +golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= +golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= @@ -447,8 +446,8 @@ golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= golang.org/x/net v0.6.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.15.0 h1:ugBLEUaxABaB5AJqW9enI0ACdci2RUd4eP51NTBvuJ8= -golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= +golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= +golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.8.0 h1:6dkIjl3j3LtZ/O3sTgZTMsLKSftL/B8Zgq4huOIIUu8= @@ -490,16 +489,16 @@ golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= -golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= +golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/term v0.12.0 h1:/ZfYdc3zq+q02Rv9vGqTeSItdzZTSNDmfTi0mBAuidU= -golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= +golang.org/x/term v0.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek= +golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -594,22 +593,22 @@ gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -k8s.io/api v0.27.3 h1:yR6oQXXnUEBWEWcvPWS0jQL575KoAboQPfJAuKNrw5Y= -k8s.io/api v0.27.3/go.mod h1:C4BNvZnQOF7JA/0Xed2S+aUyJSfTGkGFxLXz9MnpIpg= -k8s.io/apiextensions-apiserver v0.27.3 h1:xAwC1iYabi+TDfpRhxh4Eapl14Hs2OftM2DN5MpgKX4= -k8s.io/apiextensions-apiserver v0.27.3/go.mod h1:BH3wJ5NsB9XE1w+R6SSVpKmYNyIiyIz9xAmBl8Mb+84= -k8s.io/apimachinery v0.27.3 h1:Ubye8oBufD04l9QnNtW05idcOe9Z3GQN8+7PqmuVcUM= -k8s.io/apimachinery v0.27.3/go.mod h1:XNfZ6xklnMCOGGFNqXG7bUrQCoR04dh/E7FprV6pb+E= -k8s.io/client-go v0.27.3 h1:7dnEGHZEJld3lYwxvLl7WoehK6lAq7GvgjxpA3nv1E8= -k8s.io/client-go v0.27.3/go.mod h1:2MBEKuTo6V1lbKy3z1euEGnhPfGZLKTS9tiJ2xodM48= +k8s.io/api v0.27.4 h1:0pCo/AN9hONazBKlNUdhQymmnfLRbSZjd5H5H3f0bSs= +k8s.io/api v0.27.4/go.mod h1:O3smaaX15NfxjzILfiln1D8Z3+gEYpjEpiNA/1EVK1Y= +k8s.io/apiextensions-apiserver v0.27.4 h1:ie1yZG4nY/wvFMIR2hXBeSVq+HfNzib60FjnBYtPGSs= +k8s.io/apiextensions-apiserver v0.27.4/go.mod h1:KHZaDr5H9IbGEnSskEUp/DsdXe1hMQ7uzpQcYUFt2bM= +k8s.io/apimachinery v0.27.4 h1:CdxflD4AF61yewuid0fLl6bM4a3q04jWel0IlP+aYjs= +k8s.io/apimachinery v0.27.4/go.mod h1:XNfZ6xklnMCOGGFNqXG7bUrQCoR04dh/E7FprV6pb+E= +k8s.io/client-go v0.27.4 h1:vj2YTtSJ6J4KxaC88P4pMPEQECWMY8gqPqsTgUKzvjk= +k8s.io/client-go v0.27.4/go.mod h1:ragcly7lUlN0SRPk5/ZkGnDjPknzb37TICq07WhI6Xc= k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg= k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f h1:2kWPakN3i/k81b0gvD5C5FJ2kxm1WrQFanWchyKuqGg= k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f/go.mod h1:byini6yhqGC14c3ebc/QwanvYwhuMWF6yz2F8uwW8eg= k8s.io/utils v0.0.0-20230505201702-9f6742963106 h1:EObNQ3TW2D+WptiYXlApGNLVy0zm/JIBVY9i+M4wpAU= k8s.io/utils v0.0.0-20230505201702-9f6742963106/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= -sigs.k8s.io/controller-runtime v0.15.0 h1:ML+5Adt3qZnMSYxZ7gAverBLNPSMQEibtzAgp0UPojU= -sigs.k8s.io/controller-runtime v0.15.0/go.mod h1:7ngYvp1MLT+9GeZ+6lH3LOlcHkp/+tzA/fmHa4iq9kk= +sigs.k8s.io/controller-runtime v0.15.1 h1:9UvgKD4ZJGcj24vefUFgZFP3xej/3igL9BsOUTb/+4c= +sigs.k8s.io/controller-runtime v0.15.1/go.mod h1:7ngYvp1MLT+9GeZ+6lH3LOlcHkp/+tzA/fmHa4iq9kk= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= From 08cb3858ed23894169ccf192b6301d3e2249c035 Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Thu, 12 Oct 2023 10:26:30 +0100 Subject: [PATCH 654/818] Update go-git-providers to v0.19.1 Signed-off-by: Somtochi Onyekwere --- go.mod | 12 ++++++------ go.sum | 29 ++++++++++++++--------------- pkg/bootstrap/bootstrap_provider.go | 5 +++++ 3 files changed, 25 insertions(+), 21 deletions(-) diff --git a/go.mod b/go.mod index 6464671d..773679b3 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 github.com/cyphar/filepath-securejoin v0.2.4 github.com/distribution/distribution/v3 v3.0.0-20230823142118-4f7424c8eb41 - github.com/fluxcd/go-git-providers v0.18.0 + github.com/fluxcd/go-git-providers v0.19.1 github.com/fluxcd/helm-controller/api v0.36.2 github.com/fluxcd/image-automation-controller/api v0.36.1 github.com/fluxcd/image-reflector-controller/api v0.30.0 @@ -41,7 +41,7 @@ require ( github.com/manifoldco/promptui v0.9.0 github.com/mattn/go-shellwords v1.0.12 github.com/olekukonko/tablewriter v0.0.5 - github.com/onsi/gomega v1.27.10 + github.com/onsi/gomega v1.28.0 github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 github.com/spf13/cobra v1.7.0 github.com/spf13/pflag v1.0.5 @@ -129,7 +129,7 @@ require ( github.com/gonvenience/wrap v1.1.2 // indirect github.com/google/btree v1.1.2 // indirect github.com/google/gnostic v0.6.9 // indirect - github.com/google/go-github/v52 v52.0.0 // indirect + github.com/google/go-github/v55 v55.0.0 // indirect github.com/google/go-querystring v1.1.0 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect @@ -186,13 +186,13 @@ require ( github.com/texttheater/golang-levenshtein v1.0.1 // indirect github.com/vbatts/tar-split v0.11.3 // indirect github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74 // indirect - github.com/xanzy/go-gitlab v0.83.0 // indirect + github.com/xanzy/go-gitlab v0.93.1 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect github.com/xlab/treeprint v1.1.0 // indirect go.starlark.net v0.0.0-20221028183056-acb66ad56dd2 // indirect golang.org/x/mod v0.12.0 // indirect golang.org/x/net v0.17.0 // indirect - golang.org/x/oauth2 v0.8.0 // indirect + golang.org/x/oauth2 v0.13.0 // indirect golang.org/x/sync v0.3.0 // indirect golang.org/x/sys v0.13.0 // indirect golang.org/x/text v0.13.0 // indirect @@ -200,7 +200,7 @@ require ( golang.org/x/tools v0.13.0 // indirect gomodules.xyz/jsonpatch/v2 v2.3.0 // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/protobuf v1.30.0 // indirect + google.golang.org/protobuf v1.31.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/go.sum b/go.sum index 22ed4426..a837e7a1 100644 --- a/go.sum +++ b/go.sum @@ -60,7 +60,6 @@ github.com/aws/aws-sdk-go-v2/service/sts v1.21.5 h1:CQBFElb0LS8RojMJlxRSo/HXipvT github.com/aws/aws-sdk-go-v2/service/sts v1.21.5/go.mod h1:VC7JDqsqiwXukYEDjoHh9U0fOJtNWh04FPQz4ct4GGU= github.com/aws/smithy-go v1.14.2 h1:MJU9hqBGbvWZdApzpvoF2WAIJDbtjK2NDJSiJP7HblQ= github.com/aws/smithy-go v1.14.2/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= -github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -142,8 +141,8 @@ github.com/felixge/httpsnoop v1.0.3 h1:s/nj+GCswXYzN5v2DpNMuMQYe+0DDwt5WVCU6CWBd github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0= github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= -github.com/fluxcd/go-git-providers v0.18.0 h1:4Whs6GzQdx3d7UTeIahRmzUrTZKhucySC53pwdXFV7Y= -github.com/fluxcd/go-git-providers v0.18.0/go.mod h1:++kUR1LegtRWU30bdPb9FuRUH/6+DgoHSbwOkZ5NiKo= +github.com/fluxcd/go-git-providers v0.19.1 h1:LXRFpHdPCmO+Uegw2MvAU3KiEHn1PRV2c//ii/HhpeY= +github.com/fluxcd/go-git-providers v0.19.1/go.mod h1:eN0JpfkQqS/6yJ1I6DW3z1XLCC2JZK+55Ues+0Ur3Ds= github.com/fluxcd/helm-controller/api v0.36.2 h1:9JaTc91yocG1oQkM/GMfpZ/nGPpliRjZBNwyAsW5584= github.com/fluxcd/helm-controller/api v0.36.2/go.mod h1:zkcRy3PxG0NoxSY5SjiSA5tWOGa6spIbWsChQY8FXqM= github.com/fluxcd/image-automation-controller/api v0.36.1 h1:Knd4SSm/bJ0iqvYcQq87uDaT/mW9poM1jOvHpJ/4tzk= @@ -270,8 +269,8 @@ github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-containerregistry v0.16.1 h1:rUEt426sR6nyrL3gt+18ibRcvYpKYdpsa5ZW7MA08dQ= github.com/google/go-containerregistry v0.16.1/go.mod h1:u0qB2l7mvtWVR5kNcbFIhFY1hLbf8eeGapA+vbFDCtQ= -github.com/google/go-github/v52 v52.0.0 h1:uyGWOY+jMQ8GVGSX8dkSwCzlehU3WfdxQ7GweO/JP7M= -github.com/google/go-github/v52 v52.0.0/go.mod h1:WJV6VEEUPuMo5pXqqa2ZCZEdbQqua4zAk2MZTIo+m+4= +github.com/google/go-github/v55 v55.0.0 h1:4pp/1tNMB9X/LuAhs5i0KQAE40NmiR/y6prLNb9x9cg= +github.com/google/go-github/v55 v55.0.0/go.mod h1:JLahOTA1DnXzhxEymmFF5PP2tSS9JVNj68mSZNDwskA= github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= @@ -399,9 +398,9 @@ github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= -github.com/onsi/ginkgo/v2 v2.11.0 h1:WgqUCUt/lT6yXoQ8Wef0fsNn5cAuMK7+KT9UFRz2tcU= -github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI= -github.com/onsi/gomega v1.27.10/go.mod h1:RsS8tutOdbdgzbPtzzATp12yT7kM5I5aElG3evPbQ0M= +github.com/onsi/ginkgo/v2 v2.12.0 h1:UIVDowFPwpg6yMUpPjGkYvf06K3RAiJXUhCxEwQVHRI= +github.com/onsi/gomega v1.28.0 h1:i2rg/p9n/UqIDAMFUJ6qIUUMcsqOuUHgbpbu235Vr1c= +github.com/onsi/gomega v1.28.0/go.mod h1:A1H2JE76sI14WIP57LMKj7FVfCHx3g3BcZVjJG8bjX8= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.0-rc3 h1:fzg1mXZFj8YdPeNkRXMg+zb88BFV0Ys52cJydRwBkb8= @@ -485,8 +484,8 @@ github.com/vbatts/tar-split v0.11.3 h1:hLFqsOLQ1SsppQNTMpkpPXClLDfC2A3Zgy9OUU+RV github.com/vbatts/tar-split v0.11.3/go.mod h1:9QlHN18E+fEH7RdG+QAJJcuya3rqT7eXSTY7wGrAokY= github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74 h1:JwtAtbp7r/7QSyGz8mKUbYJBg2+6Cd7OjM8o/GNOcVo= github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74/go.mod h1:RmMWU37GKR2s6pgrIEB4ixgpVCt/cf7dnJv3fuH1J1c= -github.com/xanzy/go-gitlab v0.83.0 h1:37p0MpTPNbsTMKX/JnmJtY8Ch1sFiJzVF342+RvZEGw= -github.com/xanzy/go-gitlab v0.83.0/go.mod h1:5ryv+MnpZStBH8I/77HuQBsMbBGANtVpLWC15qOjWAw= +github.com/xanzy/go-gitlab v0.93.1 h1:f7J33cw/P9b/8paIOoH0F3H+TFrswvWHs6yUgoTp9LY= +github.com/xanzy/go-gitlab v0.93.1/go.mod h1:5ryv+MnpZStBH8I/77HuQBsMbBGANtVpLWC15qOjWAw= github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= @@ -502,7 +501,7 @@ go.starlark.net v0.0.0-20221028183056-acb66ad56dd2 h1:5/KzhcSqd4UgY51l17r7C5g/Ji go.starlark.net v0.0.0-20221028183056-acb66ad56dd2/go.mod h1:kIVgS18CjmEC3PqMd5kaJSGEifyV/CeB9x506ZJ1Vbk= go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A= go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ= -go.uber.org/zap v1.25.0 h1:4Hvk6GtkucQ790dqmj7l1eEnRdKm3k3ZUrUMS2d5+5c= +go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -548,8 +547,8 @@ golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.8.0 h1:6dkIjl3j3LtZ/O3sTgZTMsLKSftL/B8Zgq4huOIIUu8= -golang.org/x/oauth2 v0.8.0/go.mod h1:yr7u4HXZRm1R1kBWqr/xKNqewf0plRYoB7sla+BCIXE= +golang.org/x/oauth2 v0.13.0 h1:jDDenyj+WgFtmV3zYVoi8aE2BwtXFLWOA67ZfNWftiY= +golang.org/x/oauth2 v0.13.0/go.mod h1:/JMhi4ZRXAf4HG9LiNmxvk+45+96RUlVThiH8FzNBn0= 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= @@ -660,8 +659,8 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= -google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= +google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= 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= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/pkg/bootstrap/bootstrap_provider.go b/pkg/bootstrap/bootstrap_provider.go index d736f2f7..265ab0c1 100644 --- a/pkg/bootstrap/bootstrap_provider.go +++ b/pkg/bootstrap/bootstrap_provider.go @@ -423,6 +423,11 @@ func (b *GitProviderBootstrapper) reconcileUserRepository(ctx context.Context) ( // branch correctly. Resort to Create until this has been resolved. repo, err = b.provider.UserRepositories().Create(ctx, repoRef, repoInfo) if err != nil { + var userErr *gitprovider.ErrIncorrectUser + if errors.As(err, &userErr) { + // return a better error message when the wrong owner is set + err = fmt.Errorf("the specified owner '%s' doesn't match the identity associated with the given token", b.owner) + } return nil, fmt.Errorf("failed to create new Git repository %q: %w", repoRef.String(), err) } b.logger.Successf("repository %q created", repoRef.String()) From a51ede681f7f9e9d99249ff7cf0c021458f30d85 Mon Sep 17 00:00:00 2001 From: Gergely Brautigam <182850+Skarlso@users.noreply.github.com> Date: Wed, 4 Oct 2023 13:57:50 +0200 Subject: [PATCH 655/818] fix: only wait for changeset if the result is not empty Signed-off-by: Gergely Brautigam <182850+Skarlso@users.noreply.github.com> --- internal/utils/apply.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/internal/utils/apply.go b/internal/utils/apply.go index c910fce3..52bf67b8 100644 --- a/internal/utils/apply.go +++ b/internal/utils/apply.go @@ -76,8 +76,10 @@ func Apply(ctx context.Context, rcg genericclioptions.RESTClientGetter, opts *ru changeSet.Append(cs.Entries) } - if err := waitForSet(rcg, opts, changeSet); err != nil { - return "", err + if len(changeSet.Entries) > 0 { + if err := waitForSet(rcg, opts, changeSet); err != nil { + return "", err + } } if len(stageTwo) > 0 { From e9d4b42b12bfcd20fe0749e56dc6daeef56f7965 Mon Sep 17 00:00:00 2001 From: Ilya Dmitrichenko Date: Wed, 27 Sep 2023 11:10:26 +0100 Subject: [PATCH 656/818] Upgrade github.com/fluxcd/pkg/oci Signed-off-by: Ilya Dmitrichenko --- go.mod | 4 ++-- go.sum | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index 773679b3..6dd1e45d 100644 --- a/go.mod +++ b/go.mod @@ -21,12 +21,12 @@ require ( github.com/fluxcd/pkg/git v0.14.0 github.com/fluxcd/pkg/git/gogit v0.14.0 github.com/fluxcd/pkg/kustomize v1.3.4 - github.com/fluxcd/pkg/oci v0.31.0 + github.com/fluxcd/pkg/oci v0.32.0 github.com/fluxcd/pkg/runtime v0.42.0 github.com/fluxcd/pkg/sourceignore v0.3.5 github.com/fluxcd/pkg/ssa v0.32.0 github.com/fluxcd/pkg/ssh v0.8.2 - github.com/fluxcd/pkg/tar v0.2.0 + github.com/fluxcd/pkg/tar v0.3.0 github.com/fluxcd/pkg/version v0.2.2 github.com/fluxcd/source-controller/api v1.1.2 github.com/go-git/go-git/v5 v5.9.0 diff --git a/go.sum b/go.sum index a837e7a1..ee19e2d6 100644 --- a/go.sum +++ b/go.sum @@ -168,8 +168,8 @@ github.com/fluxcd/pkg/git/gogit v0.14.0/go.mod h1:EfTdPc1AaGS1NTF4h6HqXqyKEdOV0U github.com/fluxcd/pkg/gittestserver v0.8.6 h1:YM8prVKB3LC9LBBe+a2p7l1BlfV9erXCgC1em9sbqW4= github.com/fluxcd/pkg/kustomize v1.3.4 h1:+XA4umfhkFqrNYQp3ZmKSJy4i3LWjbgoi6H4PllkkkA= github.com/fluxcd/pkg/kustomize v1.3.4/go.mod h1:nsbsNGe6nQY6DGYYPowFGQlhxFRcaRFvbwqhCbwAQuE= -github.com/fluxcd/pkg/oci v0.31.0 h1:Zpp65vcFJKRfeltuswKztJh2OrB86X3VrA1LU/VjspQ= -github.com/fluxcd/pkg/oci v0.31.0/go.mod h1:UL7nzm7p3fk5X0ZTsHl3qBhRy/NtuGqFSangXvPKUNw= +github.com/fluxcd/pkg/oci v0.32.0 h1:bszRg0pzdfQ0iHLTvjMkDJysc+rlw2TS4c0uCl2MYDQ= +github.com/fluxcd/pkg/oci v0.32.0/go.mod h1:SqbTfdbxNDfrKkZuNtlBKQj9M7E5Hpw0UuxukS48ApA= github.com/fluxcd/pkg/runtime v0.42.0 h1:a5DQ/f90YjoHBmiXZUpnp4bDSLORjInbmqP7K11L4uY= github.com/fluxcd/pkg/runtime v0.42.0/go.mod h1:p6A3xWVV8cKLLQW0N90GehKgGMMmbNYv+OSJ/0qB0vg= github.com/fluxcd/pkg/sourceignore v0.3.5 h1:omcHTH5X5tlPr9w1b9T7WuJTOP+o/KdVdarYb4kgkCU= @@ -178,8 +178,8 @@ github.com/fluxcd/pkg/ssa v0.32.0 h1:RBqs9DNrbJkFHjpfsiKilyean7gwqWFspSBTLOaBIHs github.com/fluxcd/pkg/ssa v0.32.0/go.mod h1:+Kf5euYAbvgJX645bo+IL7V/NlH0X7kGgFTr1W++I3c= github.com/fluxcd/pkg/ssh v0.8.2 h1:WNfvTmnLnOUyXQDb8luSfmn1X0RIuhJBcKMFtKm6YsQ= github.com/fluxcd/pkg/ssh v0.8.2/go.mod h1:ewbU9vakYYdGSX92qXhx6Kqi5tVQ3ppmGQakCX1R6Gw= -github.com/fluxcd/pkg/tar v0.2.0 h1:HEUHgONQYsJGeZZ4x6h5nQU9Aox1I4T3bOp1faWTqf8= -github.com/fluxcd/pkg/tar v0.2.0/go.mod h1:w0/TOC7kwBJhnSJn7TCABkc/I7ib1f2Yz6vOsbLBnhw= +github.com/fluxcd/pkg/tar v0.3.0 h1:gIdCIIuvV5aH193c1qYZeC6gpJOmw1p2OzhAvaUHNFI= +github.com/fluxcd/pkg/tar v0.3.0/go.mod h1:SyJBaQvuv2VA/rv4d1OHhCV6R8+9QKc9np193EzNHBc= github.com/fluxcd/pkg/version v0.2.2 h1:ZpVXECeLA5hIQMft11iLp6gN3cKcz6UNuVTQPw/bRdI= github.com/fluxcd/pkg/version v0.2.2/go.mod h1:NGnh/no8S6PyfCDxRFrPY3T5BUnqP48MxfxNRU0z8C0= github.com/fluxcd/source-controller/api v1.1.2 h1:FfKDKVWnopo+Q2pOAxgHEjrtr4MP41L8aapR4mqBhBk= From b46e298b4d8d109bf606137c0c23fcb7750491b3 Mon Sep 17 00:00:00 2001 From: Ilya Dmitrichenko Date: Wed, 27 Sep 2023 11:12:45 +0100 Subject: [PATCH 657/818] Print artifact source and revision only when available Signed-off-by: Ilya Dmitrichenko --- cmd/flux/pull_artifact.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/cmd/flux/pull_artifact.go b/cmd/flux/pull_artifact.go index d61f6dcb..114368bd 100644 --- a/cmd/flux/pull_artifact.go +++ b/cmd/flux/pull_artifact.go @@ -111,8 +111,12 @@ func pullArtifactCmdRun(cmd *cobra.Command, args []string) error { return err } - logger.Successf("source %s", meta.Source) - logger.Successf("revision %s", meta.Revision) + if meta.Source != "" { + logger.Successf("source %s", meta.Source) + } + if meta.Revision != "" { + logger.Successf("revision %s", meta.Revision) + } logger.Successf("digest %s", meta.Digest) logger.Successf("artifact content extracted to %s", pullArtifactArgs.output) From 840e717b7249bca49a4cfc57feeb9ed7bb8563f8 Mon Sep 17 00:00:00 2001 From: Matheus Pimenta Date: Sun, 15 Oct 2023 01:25:34 +0100 Subject: [PATCH 658/818] Add CLI flag for OCIRepo verify secret Signed-off-by: Matheus Pimenta --- cmd/flux/create_source_oci.go | 37 ++++++++---- cmd/flux/create_source_oci_test.go | 10 ++++ .../oci/export_with_verify_secret.golden | 15 +++++ internal/flags/source_oci_verify_provider.go | 58 +++++++++++++++++++ .../flags/source_oci_verify_provider_test.go | 48 +++++++++++++++ 5 files changed, 158 insertions(+), 10 deletions(-) create mode 100644 cmd/flux/testdata/oci/export_with_verify_secret.golden create mode 100644 internal/flags/source_oci_verify_provider.go create mode 100644 internal/flags/source_oci_verify_provider_test.go diff --git a/cmd/flux/create_source_oci.go b/cmd/flux/create_source_oci.go index 5d6a5f95..388ab18c 100644 --- a/cmd/flux/create_source_oci.go +++ b/cmd/flux/create_source_oci.go @@ -51,16 +51,18 @@ var createSourceOCIRepositoryCmd = &cobra.Command{ } type sourceOCIRepositoryFlags struct { - url string - tag string - semver string - digest string - secretRef string - serviceAccount string - certSecretRef string - ignorePaths []string - provider flags.SourceOCIProvider - insecure bool + url string + tag string + semver string + digest string + secretRef string + serviceAccount string + certSecretRef string + verifyProvider flags.SourceOCIVerifyProvider + verifySecretRef string + ignorePaths []string + provider flags.SourceOCIProvider + insecure bool } var sourceOCIRepositoryArgs = newSourceOCIFlags() @@ -80,6 +82,8 @@ func init() { createSourceOCIRepositoryCmd.Flags().StringVar(&sourceOCIRepositoryArgs.secretRef, "secret-ref", "", "the name of the Kubernetes image pull secret (type 'kubernetes.io/dockerconfigjson')") createSourceOCIRepositoryCmd.Flags().StringVar(&sourceOCIRepositoryArgs.serviceAccount, "service-account", "", "the name of the Kubernetes service account that refers to an image pull secret") createSourceOCIRepositoryCmd.Flags().StringVar(&sourceOCIRepositoryArgs.certSecretRef, "cert-ref", "", "the name of a secret to use for TLS certificates") + createSourceOCIRepositoryCmd.Flags().Var(&sourceOCIRepositoryArgs.verifyProvider, "verify-provider", sourceOCIRepositoryArgs.verifyProvider.Description()) + createSourceOCIRepositoryCmd.Flags().StringVar(&sourceOCIRepositoryArgs.verifySecretRef, "verify-secret-ref", "", "the name of a secret to use for signature verification") createSourceOCIRepositoryCmd.Flags().StringSliceVar(&sourceOCIRepositoryArgs.ignorePaths, "ignore-paths", nil, "set paths to ignore resources (can specify multiple paths with commas: path1,path2)") createSourceOCIRepositoryCmd.Flags().BoolVar(&sourceOCIRepositoryArgs.insecure, "insecure", false, "for when connecting to a non-TLS registries over plain HTTP") @@ -156,6 +160,19 @@ func createSourceOCIRepositoryCmdRun(cmd *cobra.Command, args []string) error { } } + if provider := sourceOCIRepositoryArgs.verifyProvider.String(); provider != "" { + repository.Spec.Verify = &sourcev1.OCIRepositoryVerification{ + Provider: provider, + } + if secretName := sourceOCIRepositoryArgs.verifySecretRef; secretName != "" { + repository.Spec.Verify.SecretRef = &meta.LocalObjectReference{ + Name: secretName, + } + } + } else if sourceOCIRepositoryArgs.verifySecretRef != "" { + return fmt.Errorf("a verification provider must be specified when a secret is specified") + } + if createArgs.export { return printExport(exportOCIRepository(repository)) } diff --git a/cmd/flux/create_source_oci_test.go b/cmd/flux/create_source_oci_test.go index 8972b813..743632a6 100644 --- a/cmd/flux/create_source_oci_test.go +++ b/cmd/flux/create_source_oci_test.go @@ -36,6 +36,11 @@ func TestCreateSourceOCI(t *testing.T) { args: "create source oci podinfo", assertFunc: assertError("url is required"), }, + { + name: "verify provider not specified", + args: "create source oci podinfo --url=oci://ghcr.io/stefanprodan/manifests/podinfo --tag=6.3.5 --verify-secret-ref=cosign-pub", + assertFunc: assertError("a verification provider must be specified when a secret is specified"), + }, { name: "export manifest", args: "create source oci podinfo --url=oci://ghcr.io/stefanprodan/manifests/podinfo --tag=6.3.5 --interval 10m --export", @@ -46,6 +51,11 @@ func TestCreateSourceOCI(t *testing.T) { args: "create source oci podinfo --url=oci://ghcr.io/stefanprodan/manifests/podinfo --tag=6.3.5 --interval 10m --secret-ref=creds --export", assertFunc: assertGoldenFile("./testdata/oci/export_with_secret.golden"), }, + { + name: "export manifest with verify secret", + args: "create source oci podinfo --url=oci://ghcr.io/stefanprodan/manifests/podinfo --tag=6.3.5 --interval 10m --verify-provider=cosign --verify-secret-ref=cosign-pub --export", + assertFunc: assertGoldenFile("./testdata/oci/export_with_verify_secret.golden"), + }, } for _, tt := range tests { diff --git a/cmd/flux/testdata/oci/export_with_verify_secret.golden b/cmd/flux/testdata/oci/export_with_verify_secret.golden new file mode 100644 index 00000000..d7e94aad --- /dev/null +++ b/cmd/flux/testdata/oci/export_with_verify_secret.golden @@ -0,0 +1,15 @@ +--- +apiVersion: source.toolkit.fluxcd.io/v1beta2 +kind: OCIRepository +metadata: + name: podinfo + namespace: flux-system +spec: + interval: 10m0s + ref: + tag: 6.3.5 + url: oci://ghcr.io/stefanprodan/manifests/podinfo + verify: + provider: cosign + secretRef: + name: cosign-pub diff --git a/internal/flags/source_oci_verify_provider.go b/internal/flags/source_oci_verify_provider.go new file mode 100644 index 00000000..acd57a9d --- /dev/null +++ b/internal/flags/source_oci_verify_provider.go @@ -0,0 +1,58 @@ +/* +Copyright 2023 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package flags + +import ( + "fmt" + "strings" + + "github.com/fluxcd/flux2/v2/internal/utils" +) + +var supportedSourceOCIVerifyProviders = []string{ + "cosign", +} + +type SourceOCIVerifyProvider string + +func (p *SourceOCIVerifyProvider) String() string { + return string(*p) +} + +func (p *SourceOCIVerifyProvider) Set(str string) error { + if strings.TrimSpace(str) == "" { + return fmt.Errorf("no source OCI verify provider given, please specify %s", + p.Description()) + } + if !utils.ContainsItemString(supportedSourceOCIVerifyProviders, str) { + return fmt.Errorf("source OCI verify provider '%s' is not supported, must be one of: %v", + str, strings.Join(supportedSourceOCIVerifyProviders, ", ")) + } + *p = SourceOCIVerifyProvider(str) + return nil +} + +func (p *SourceOCIVerifyProvider) Type() string { + return "sourceOCIVerifyProvider" +} + +func (p *SourceOCIVerifyProvider) Description() string { + return fmt.Sprintf( + "the OCI verify provider name to use for signature verification, available options are: (%s)", + strings.Join(supportedSourceOCIVerifyProviders, ", "), + ) +} diff --git a/internal/flags/source_oci_verify_provider_test.go b/internal/flags/source_oci_verify_provider_test.go new file mode 100644 index 00000000..e8966521 --- /dev/null +++ b/internal/flags/source_oci_verify_provider_test.go @@ -0,0 +1,48 @@ +//go:build !e2e +// +build !e2e + +/* +Copyright 2023 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package flags + +import ( + "testing" +) + +func TestSourceOCIVerifyProvider_Set(t *testing.T) { + tests := []struct { + name string + str string + expect string + expectErr bool + }{ + {"supported", "cosign", "cosign", false}, + {"unsupported", "unsupported", "", true}, + {"empty", "", "", true}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + var s SourceOCIVerifyProvider + if err := s.Set(tt.str); (err != nil) != tt.expectErr { + t.Errorf("Set() error = %v, expectErr %v", err, tt.expectErr) + } + if str := s.String(); str != tt.expect { + t.Errorf("Set() = %v, expect %v", str, tt.expect) + } + }) + } +} From 16d352b15b2057bba0b470f4882b3452cd82241c Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Fri, 13 Oct 2023 10:01:35 +0200 Subject: [PATCH 659/818] misc: address `strings.Title` deprecation Signed-off-by: Hidde Beydals --- cmd/flux/get_alert.go | 6 ++++-- cmd/flux/get_helmrelease.go | 8 +++++--- cmd/flux/get_image_repository.go | 5 +++-- cmd/flux/get_image_update.go | 6 ++++-- cmd/flux/get_kustomization.go | 5 +++-- cmd/flux/get_receiver.go | 6 ++++-- cmd/flux/get_source_bucket.go | 5 +++-- cmd/flux/get_source_chart.go | 5 +++-- cmd/flux/get_source_git.go | 5 +++-- cmd/flux/get_source_helm.go | 5 +++-- cmd/flux/get_source_oci.go | 5 +++-- go.mod | 2 +- 12 files changed, 39 insertions(+), 24 deletions(-) diff --git a/cmd/flux/get_alert.go b/cmd/flux/get_alert.go index 9137e90e..9ea6c682 100644 --- a/cmd/flux/get_alert.go +++ b/cmd/flux/get_alert.go @@ -19,9 +19,10 @@ package main import ( "fmt" "strconv" - "strings" "github.com/spf13/cobra" + "golang.org/x/text/cases" + "golang.org/x/text/language" "k8s.io/apimachinery/pkg/runtime" notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" @@ -77,7 +78,8 @@ func init() { func (s alertListAdapter) summariseItem(i int, includeNamespace bool, includeKind bool) []string { item := s.Items[i] status, msg := statusAndMessage(item.Status.Conditions) - return append(nameColumns(&item, includeNamespace, includeKind), strings.Title(strconv.FormatBool(item.Spec.Suspend)), status, msg) + return append(nameColumns(&item, includeNamespace, includeKind), + cases.Title(language.English).String(strconv.FormatBool(item.Spec.Suspend)), status, msg) } func (s alertListAdapter) headers(includeNamespace bool) []string { diff --git a/cmd/flux/get_helmrelease.go b/cmd/flux/get_helmrelease.go index fd709d29..d6462ddd 100644 --- a/cmd/flux/get_helmrelease.go +++ b/cmd/flux/get_helmrelease.go @@ -19,11 +19,13 @@ package main import ( "fmt" "strconv" - "strings" - helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" "github.com/spf13/cobra" + "golang.org/x/text/cases" + "golang.org/x/text/language" "k8s.io/apimachinery/pkg/runtime" + + helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" ) var getHelmReleaseCmd = &cobra.Command{ @@ -75,7 +77,7 @@ func (a helmReleaseListAdapter) summariseItem(i int, includeNamespace bool, incl revision := item.Status.LastAppliedRevision status, msg := statusAndMessage(item.Status.Conditions) return append(nameColumns(&item, includeNamespace, includeKind), - revision, strings.Title(strconv.FormatBool(item.Spec.Suspend)), status, msg) + revision, cases.Title(language.English).String(strconv.FormatBool(item.Spec.Suspend)), status, msg) } func (a helmReleaseListAdapter) headers(includeNamespace bool) []string { diff --git a/cmd/flux/get_image_repository.go b/cmd/flux/get_image_repository.go index 0f6f95a6..e160de8d 100644 --- a/cmd/flux/get_image_repository.go +++ b/cmd/flux/get_image_repository.go @@ -19,10 +19,11 @@ package main import ( "fmt" "strconv" - "strings" "time" "github.com/spf13/cobra" + "golang.org/x/text/cases" + "golang.org/x/text/language" "k8s.io/apimachinery/pkg/runtime" imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta2" @@ -82,7 +83,7 @@ func (s imageRepositoryListAdapter) summariseItem(i int, includeNamespace bool, lastScan = item.Status.LastScanResult.ScanTime.Time.Format(time.RFC3339) } return append(nameColumns(&item, includeNamespace, includeKind), - lastScan, strings.Title(strconv.FormatBool(item.Spec.Suspend)), status, msg) + lastScan, cases.Title(language.English).String(strconv.FormatBool(item.Spec.Suspend)), status, msg) } func (s imageRepositoryListAdapter) headers(includeNamespace bool) []string { diff --git a/cmd/flux/get_image_update.go b/cmd/flux/get_image_update.go index 833be4ab..62399626 100644 --- a/cmd/flux/get_image_update.go +++ b/cmd/flux/get_image_update.go @@ -19,10 +19,11 @@ package main import ( "fmt" "strconv" - "strings" "time" "github.com/spf13/cobra" + "golang.org/x/text/cases" + "golang.org/x/text/language" "k8s.io/apimachinery/pkg/runtime" autov1 "github.com/fluxcd/image-automation-controller/api/v1beta1" @@ -81,7 +82,8 @@ func (s imageUpdateAutomationListAdapter) summariseItem(i int, includeNamespace if item.Status.LastAutomationRunTime != nil { lastRun = item.Status.LastAutomationRunTime.Time.Format(time.RFC3339) } - return append(nameColumns(&item, includeNamespace, includeKind), lastRun, strings.Title(strconv.FormatBool(item.Spec.Suspend)), status, msg) + return append(nameColumns(&item, includeNamespace, includeKind), lastRun, + cases.Title(language.English).String(strconv.FormatBool(item.Spec.Suspend)), status, msg) } func (s imageUpdateAutomationListAdapter) headers(includeNamespace bool) []string { diff --git a/cmd/flux/get_kustomization.go b/cmd/flux/get_kustomization.go index 517aa375..a95ec655 100644 --- a/cmd/flux/get_kustomization.go +++ b/cmd/flux/get_kustomization.go @@ -19,9 +19,10 @@ package main import ( "fmt" "strconv" - "strings" "github.com/spf13/cobra" + "golang.org/x/text/cases" + "golang.org/x/text/language" "k8s.io/apimachinery/pkg/runtime" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" @@ -83,7 +84,7 @@ func (a kustomizationListAdapter) summariseItem(i int, includeNamespace bool, in revision = utils.TruncateHex(revision) msg = utils.TruncateHex(msg) return append(nameColumns(&item, includeNamespace, includeKind), - revision, strings.Title(strconv.FormatBool(item.Spec.Suspend)), status, msg) + revision, cases.Title(language.English).String(strconv.FormatBool(item.Spec.Suspend)), status, msg) } func (a kustomizationListAdapter) headers(includeNamespace bool) []string { diff --git a/cmd/flux/get_receiver.go b/cmd/flux/get_receiver.go index a72d0765..43f8f5a4 100644 --- a/cmd/flux/get_receiver.go +++ b/cmd/flux/get_receiver.go @@ -19,9 +19,10 @@ package main import ( "fmt" "strconv" - "strings" "github.com/spf13/cobra" + "golang.org/x/text/cases" + "golang.org/x/text/language" "k8s.io/apimachinery/pkg/runtime" notificationv1 "github.com/fluxcd/notification-controller/api/v1" @@ -74,7 +75,8 @@ func init() { func (s receiverListAdapter) summariseItem(i int, includeNamespace bool, includeKind bool) []string { item := s.Items[i] status, msg := statusAndMessage(item.Status.Conditions) - return append(nameColumns(&item, includeNamespace, includeKind), strings.Title(strconv.FormatBool(item.Spec.Suspend)), status, msg) + return append(nameColumns(&item, includeNamespace, includeKind), + cases.Title(language.English).String(strconv.FormatBool(item.Spec.Suspend)), status, msg) } func (s receiverListAdapter) headers(includeNamespace bool) []string { diff --git a/cmd/flux/get_source_bucket.go b/cmd/flux/get_source_bucket.go index b21ee223..b7355fdb 100644 --- a/cmd/flux/get_source_bucket.go +++ b/cmd/flux/get_source_bucket.go @@ -19,9 +19,10 @@ package main import ( "fmt" "strconv" - "strings" "github.com/spf13/cobra" + "golang.org/x/text/cases" + "golang.org/x/text/language" "k8s.io/apimachinery/pkg/runtime" sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" @@ -85,7 +86,7 @@ func (a *bucketListAdapter) summariseItem(i int, includeNamespace bool, includeK revision = utils.TruncateHex(revision) msg = utils.TruncateHex(msg) return append(nameColumns(&item, includeNamespace, includeKind), - revision, strings.Title(strconv.FormatBool(item.Spec.Suspend)), status, msg) + revision, cases.Title(language.English).String(strconv.FormatBool(item.Spec.Suspend)), status, msg) } func (a bucketListAdapter) headers(includeNamespace bool) []string { diff --git a/cmd/flux/get_source_chart.go b/cmd/flux/get_source_chart.go index e83839cb..b82bdd78 100644 --- a/cmd/flux/get_source_chart.go +++ b/cmd/flux/get_source_chart.go @@ -19,9 +19,10 @@ package main import ( "fmt" "strconv" - "strings" "github.com/spf13/cobra" + "golang.org/x/text/cases" + "golang.org/x/text/language" "k8s.io/apimachinery/pkg/runtime" sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" @@ -86,7 +87,7 @@ func (a *helmChartListAdapter) summariseItem(i int, includeNamespace bool, inclu // Message may still contain reference of e.g. commit chart was build from msg = utils.TruncateHex(msg) return append(nameColumns(&item, includeNamespace, includeKind), - revision, strings.Title(strconv.FormatBool(item.Spec.Suspend)), status, msg) + revision, cases.Title(language.English).String(strconv.FormatBool(item.Spec.Suspend)), status, msg) } func (a helmChartListAdapter) headers(includeNamespace bool) []string { diff --git a/cmd/flux/get_source_git.go b/cmd/flux/get_source_git.go index 3c71da1c..78476de5 100644 --- a/cmd/flux/get_source_git.go +++ b/cmd/flux/get_source_git.go @@ -19,9 +19,10 @@ package main import ( "fmt" "strconv" - "strings" "github.com/spf13/cobra" + "golang.org/x/text/cases" + "golang.org/x/text/language" "k8s.io/apimachinery/pkg/runtime" sourcev1 "github.com/fluxcd/source-controller/api/v1" @@ -85,7 +86,7 @@ func (a *gitRepositoryListAdapter) summariseItem(i int, includeNamespace bool, i revision = utils.TruncateHex(revision) msg = utils.TruncateHex(msg) return append(nameColumns(&item, includeNamespace, includeKind), - revision, strings.Title(strconv.FormatBool(item.Spec.Suspend)), status, msg) + revision, cases.Title(language.English).String(strconv.FormatBool(item.Spec.Suspend)), status, msg) } func (a gitRepositoryListAdapter) headers(includeNamespace bool) []string { diff --git a/cmd/flux/get_source_helm.go b/cmd/flux/get_source_helm.go index 28315eb7..173a1880 100644 --- a/cmd/flux/get_source_helm.go +++ b/cmd/flux/get_source_helm.go @@ -19,9 +19,10 @@ package main import ( "fmt" "strconv" - "strings" "github.com/spf13/cobra" + "golang.org/x/text/cases" + "golang.org/x/text/language" "k8s.io/apimachinery/pkg/runtime" sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" @@ -85,7 +86,7 @@ func (a *helmRepositoryListAdapter) summariseItem(i int, includeNamespace bool, revision = utils.TruncateHex(revision) msg = utils.TruncateHex(msg) return append(nameColumns(&item, includeNamespace, includeKind), - revision, strings.Title(strconv.FormatBool(item.Spec.Suspend)), status, msg) + revision, cases.Title(language.English).String(strconv.FormatBool(item.Spec.Suspend)), status, msg) } func (a helmRepositoryListAdapter) headers(includeNamespace bool) []string { diff --git a/cmd/flux/get_source_oci.go b/cmd/flux/get_source_oci.go index 36f93fc9..e5bbe409 100644 --- a/cmd/flux/get_source_oci.go +++ b/cmd/flux/get_source_oci.go @@ -19,9 +19,10 @@ package main import ( "fmt" "strconv" - "strings" "github.com/spf13/cobra" + "golang.org/x/text/cases" + "golang.org/x/text/language" "k8s.io/apimachinery/pkg/runtime" sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" @@ -85,7 +86,7 @@ func (a *ociRepositoryListAdapter) summariseItem(i int, includeNamespace bool, i revision = utils.TruncateHex(revision) msg = utils.TruncateHex(msg) return append(nameColumns(&item, includeNamespace, includeKind), - revision, strings.Title(strconv.FormatBool(item.Spec.Suspend)), status, msg) + revision, cases.Title(language.English).String(strconv.FormatBool(item.Spec.Suspend)), status, msg) } func (a ociRepositoryListAdapter) headers(includeNamespace bool) []string { diff --git a/go.mod b/go.mod index 6dd1e45d..7875f9fe 100644 --- a/go.mod +++ b/go.mod @@ -48,6 +48,7 @@ require ( github.com/theckman/yacspin v0.13.12 golang.org/x/crypto v0.14.0 golang.org/x/term v0.13.0 + golang.org/x/text v0.13.0 k8s.io/api v0.27.4 k8s.io/apiextensions-apiserver v0.27.4 k8s.io/apimachinery v0.27.4 @@ -195,7 +196,6 @@ require ( golang.org/x/oauth2 v0.13.0 // indirect golang.org/x/sync v0.3.0 // indirect golang.org/x/sys v0.13.0 // indirect - golang.org/x/text v0.13.0 // indirect golang.org/x/time v0.3.0 // indirect golang.org/x/tools v0.13.0 // indirect gomodules.xyz/jsonpatch/v2 v2.3.0 // indirect From b67a46371b39cc1c6e8e714b405318660b5a7dbe Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Fri, 13 Oct 2023 10:03:20 +0200 Subject: [PATCH 660/818] misc: handle undhandled error Signed-off-by: Hidde Beydals --- cmd/flux/main_test.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cmd/flux/main_test.go b/cmd/flux/main_test.go index 37398309..cdddf054 100644 --- a/cmd/flux/main_test.go +++ b/cmd/flux/main_test.go @@ -203,6 +203,9 @@ func NewTestEnvKubeManager(testClusterMode TestClusterMode) (*testEnvKubeManager useExistingCluster := true config, err := clientcmd.BuildConfigFromFlags("", testKubeConfig) + if err != nil { + return nil, err + } testEnv := &envtest.Environment{ UseExistingCluster: &useExistingCluster, Config: config, From 3c495861a144880c230e5e87088ea22fdd8042d1 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Fri, 13 Oct 2023 10:04:18 +0200 Subject: [PATCH 661/818] misc: address unnecessary use of `fmt.Sprintf` Signed-off-by: Hidde Beydals --- internal/flags/safe_relative_path.go | 2 +- pkg/bootstrap/bootstrap_plain_git.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/flags/safe_relative_path.go b/internal/flags/safe_relative_path.go index dfd3b9ea..a58086e5 100644 --- a/internal/flags/safe_relative_path.go +++ b/internal/flags/safe_relative_path.go @@ -54,5 +54,5 @@ func (p *SafeRelativePath) Type() string { } func (p *SafeRelativePath) Description() string { - return fmt.Sprintf("secure relative path") + return "secure relative path" } diff --git a/pkg/bootstrap/bootstrap_plain_git.go b/pkg/bootstrap/bootstrap_plain_git.go index e3f7bcd9..cde38961 100644 --- a/pkg/bootstrap/bootstrap_plain_git.go +++ b/pkg/bootstrap/bootstrap_plain_git.go @@ -325,7 +325,7 @@ func (b *PlainGitBootstrapper) ReconcileSyncConfig(ctx context.Context, options return fmt.Errorf("failed to generate OpenPGP entity: %w", err) } } - commitMsg := fmt.Sprintf("Add Flux sync manifests") + commitMsg := "Add Flux sync manifests" if b.commitMessageAppendix != "" { commitMsg = commitMsg + "\n\n" + b.commitMessageAppendix } From a2a3b4f00fb0352d4eef91baef99eada390cf9b9 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Fri, 13 Oct 2023 10:09:37 +0200 Subject: [PATCH 662/818] misc: use raw string for regex to avoid double esc Signed-off-by: Hidde Beydals --- cmd/flux/create.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/flux/create.go b/cmd/flux/create.go index d5e4fbcb..2368b771 100644 --- a/cmd/flux/create.go +++ b/cmd/flux/create.go @@ -165,6 +165,6 @@ func parseLabels() (map[string]string, error) { } func validateObjectName(name string) bool { - r := regexp.MustCompile("^[a-z0-9]([a-z0-9\\-]){0,61}[a-z0-9]$") + r := regexp.MustCompile(`^[a-z0-9]([a-z0-9\-]){0,61}[a-z0-9]$`) return r.MatchString(name) } From 43c2359705a101d9cf8e438ed5189f17c70e3284 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Fri, 13 Oct 2023 10:10:43 +0200 Subject: [PATCH 663/818] misc: address double import Signed-off-by: Hidde Beydals --- cmd/flux/push_artifact.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/cmd/flux/push_artifact.go b/cmd/flux/push_artifact.go index 3ebd3fbe..605dfed7 100644 --- a/cmd/flux/push_artifact.go +++ b/cmd/flux/push_artifact.go @@ -28,7 +28,6 @@ import ( "github.com/google/go-containerregistry/pkg/crane" "github.com/google/go-containerregistry/pkg/logs" "github.com/google/go-containerregistry/pkg/name" - reg "github.com/google/go-containerregistry/pkg/name" "github.com/google/go-containerregistry/pkg/v1/remote" "github.com/google/go-containerregistry/pkg/v1/remote/transport" "github.com/spf13/cobra" @@ -266,12 +265,12 @@ func pushArtifactCmdRun(cmd *cobra.Command, args []string) error { return fmt.Errorf("pushing artifact failed: %w", err) } - digest, err := reg.NewDigest(digestURL) + digest, err := name.NewDigest(digestURL) if err != nil { return fmt.Errorf("artifact digest parsing failed: %w", err) } - tag, err := reg.NewTag(url) + tag, err := name.NewTag(url) if err != nil { return fmt.Errorf("artifact tag parsing failed: %w", err) } From 3278a0782f7dafaf229390a78888c7488a2caf90 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Fri, 13 Oct 2023 10:12:36 +0200 Subject: [PATCH 664/818] misc: simplify row append Signed-off-by: Hidde Beydals --- pkg/printers/table_printer.go | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/pkg/printers/table_printer.go b/pkg/printers/table_printer.go index 716166ab..7f4f331e 100644 --- a/pkg/printers/table_printer.go +++ b/pkg/printers/table_printer.go @@ -23,7 +23,7 @@ import ( "github.com/olekukonko/tablewriter" ) -// TablePrinter is a printer that prints Flux cmd outputs. +// TablePrinter is a printer that prints Flux cmd outputs. func TablePrinter(header []string) PrinterFunc { return func(w io.Writer, args ...interface{}) error { var rows [][]string @@ -35,9 +35,7 @@ func TablePrinter(header []string) PrinterFunc { if !ok { return fmt.Errorf("unsupported type %T", v) } - for i := range s { - rows = append(rows, s[i]) - } + rows = append(rows, s...) } default: return fmt.Errorf("unsupported type %T", arg) From 5b22207c98f9f21f86c959d9d0adaaa6db53d8ae Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Fri, 13 Oct 2023 10:14:45 +0200 Subject: [PATCH 665/818] misc: address `kustomize/api/filesys` deprecation Signed-off-by: Hidde Beydals --- pkg/manifestgen/kustomization/options.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/manifestgen/kustomization/options.go b/pkg/manifestgen/kustomization/options.go index c8cf0955..fbb7b981 100644 --- a/pkg/manifestgen/kustomization/options.go +++ b/pkg/manifestgen/kustomization/options.go @@ -16,7 +16,7 @@ limitations under the License. package kustomization -import "sigs.k8s.io/kustomize/api/filesys" +import "sigs.k8s.io/kustomize/kyaml/filesys" type Options struct { FileSystem filesys.FileSystem From ce3e264c7db5983cf602a040540a56ee9e62e312 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Fri, 13 Oct 2023 10:15:49 +0200 Subject: [PATCH 666/818] misc: unconditional `strings.TrimPrefix` Signed-off-by: Hidde Beydals --- pkg/bootstrap/bootstrap_plain_git.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/pkg/bootstrap/bootstrap_plain_git.go b/pkg/bootstrap/bootstrap_plain_git.go index cde38961..da341d6a 100644 --- a/pkg/bootstrap/bootstrap_plain_git.go +++ b/pkg/bootstrap/bootstrap_plain_git.go @@ -465,9 +465,7 @@ func getOpenPgpEntity(keyRing openpgp.EntityList, passphrase, keyID string) (*op var entity *openpgp.Entity if keyID != "" { - if strings.HasPrefix(keyID, "0x") { - keyID = strings.TrimPrefix(keyID, "0x") - } + keyID = strings.TrimPrefix(keyID, "0x") if len(keyID) != 16 { return nil, fmt.Errorf("invalid GPG key id length; expected %d, got %d", 16, len(keyID)) } From 22134b123362208cff06c0c19c1706a77d431289 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Fri, 13 Oct 2023 10:25:38 +0200 Subject: [PATCH 667/818] misc: use `errors.As` instead of type checking Signed-off-by: Hidde Beydals --- internal/build/build.go | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/internal/build/build.go b/internal/build/build.go index f05ce123..201cc83b 100644 --- a/internal/build/build.go +++ b/internal/build/build.go @@ -539,10 +539,8 @@ func maskDockerconfigjsonSopsData(dataMap map[string]string, encode bool) error func maskBase64EncryptedSopsData(dataMap map[string]string, mask string) error { for k, v := range dataMap { data, err := base64.StdEncoding.DecodeString(v) - if err != nil { - if _, ok := err.(base64.CorruptInputError); ok { - return err - } + if corruptErr := base64.CorruptInputError(0); errors.As(err, &corruptErr) { + return corruptErr } if bytes.Contains(data, []byte("sops")) && bytes.Contains(data, []byte("ENC[")) { From 3fdb292381f7dc1407d176374a1adc2ab8927a58 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Fri, 13 Oct 2023 10:44:54 +0200 Subject: [PATCH 668/818] misc: address `wait.PollImmediate` deprecation Signed-off-by: Hidde Beydals --- cmd/flux/create.go | 4 ++-- cmd/flux/create_alert.go | 9 ++++----- cmd/flux/create_alertprovider.go | 9 ++++----- cmd/flux/create_helmrelease.go | 9 ++++----- cmd/flux/create_kustomization.go | 9 ++++----- cmd/flux/create_receiver.go | 9 ++++----- cmd/flux/create_source_bucket.go | 9 ++++----- cmd/flux/create_source_git.go | 9 ++++----- cmd/flux/create_source_helm.go | 9 ++++----- cmd/flux/create_source_oci.go | 9 ++++----- cmd/flux/reconcile.go | 18 ++++++++---------- cmd/flux/reconcile_alertprovider.go | 4 ++-- cmd/flux/reconcile_receiver.go | 4 ++-- cmd/flux/reconcile_with_source.go | 4 ++-- cmd/flux/resume.go | 4 ++-- cmd/flux/status.go | 5 ++--- pkg/bootstrap/bootstrap.go | 7 +++---- pkg/bootstrap/bootstrap_plain_git.go | 5 ++--- 18 files changed, 61 insertions(+), 75 deletions(-) diff --git a/cmd/flux/create.go b/cmd/flux/create.go index 2368b771..795d9367 100644 --- a/cmd/flux/create.go +++ b/cmd/flux/create.go @@ -131,8 +131,8 @@ func (names apiType) upsertAndWait(object upsertWaitable, mutate func() error) e } logger.Waitingf("waiting for %s reconciliation", names.kind) - if err := wait.PollImmediate(rootArgs.pollInterval, rootArgs.timeout, - isReady(ctx, kubeClient, namespacedName, object)); err != nil { + if err := wait.PollUntilContextTimeout(ctx, rootArgs.pollInterval, rootArgs.timeout, true, + isReady(kubeClient, namespacedName, object)); err != nil { return err } logger.Successf("%s reconciliation completed", names.kind) diff --git a/cmd/flux/create_alert.go b/cmd/flux/create_alert.go index a980c1fa..0f50bf02 100644 --- a/cmd/flux/create_alert.go +++ b/cmd/flux/create_alert.go @@ -132,8 +132,8 @@ func createAlertCmdRun(cmd *cobra.Command, args []string) error { } logger.Waitingf("waiting for Alert reconciliation") - if err := wait.PollImmediate(rootArgs.pollInterval, rootArgs.timeout, - isAlertReady(ctx, kubeClient, namespacedName, &alert)); err != nil { + if err := wait.PollUntilContextTimeout(ctx, rootArgs.pollInterval, rootArgs.timeout, true, + isAlertReady(kubeClient, namespacedName, &alert)); err != nil { return err } logger.Successf("Alert %s is ready", name) @@ -171,9 +171,8 @@ func upsertAlert(ctx context.Context, kubeClient client.Client, return namespacedName, nil } -func isAlertReady(ctx context.Context, kubeClient client.Client, - namespacedName types.NamespacedName, alert *notificationv1b2.Alert) wait.ConditionFunc { - return func() (bool, error) { +func isAlertReady(kubeClient client.Client, namespacedName types.NamespacedName, alert *notificationv1b2.Alert) wait.ConditionWithContextFunc { + return func(ctx context.Context) (bool, error) { err := kubeClient.Get(ctx, namespacedName, alert) if err != nil { return false, err diff --git a/cmd/flux/create_alertprovider.go b/cmd/flux/create_alertprovider.go index cef69baf..8523d1c5 100644 --- a/cmd/flux/create_alertprovider.go +++ b/cmd/flux/create_alertprovider.go @@ -127,8 +127,8 @@ func createAlertProviderCmdRun(cmd *cobra.Command, args []string) error { } logger.Waitingf("waiting for Provider reconciliation") - if err := wait.PollImmediate(rootArgs.pollInterval, rootArgs.timeout, - isAlertProviderReady(ctx, kubeClient, namespacedName, &provider)); err != nil { + if err := wait.PollUntilContextTimeout(ctx, rootArgs.pollInterval, rootArgs.timeout, true, + isAlertProviderReady(kubeClient, namespacedName, &provider)); err != nil { return err } @@ -168,9 +168,8 @@ func upsertAlertProvider(ctx context.Context, kubeClient client.Client, return namespacedName, nil } -func isAlertProviderReady(ctx context.Context, kubeClient client.Client, - namespacedName types.NamespacedName, provider *notificationv1.Provider) wait.ConditionFunc { - return func() (bool, error) { +func isAlertProviderReady(kubeClient client.Client, namespacedName types.NamespacedName, provider *notificationv1.Provider) wait.ConditionWithContextFunc { + return func(ctx context.Context) (bool, error) { err := kubeClient.Get(ctx, namespacedName, provider) if err != nil { return false, err diff --git a/cmd/flux/create_helmrelease.go b/cmd/flux/create_helmrelease.go index 3721c1e7..b6ef92b3 100644 --- a/cmd/flux/create_helmrelease.go +++ b/cmd/flux/create_helmrelease.go @@ -303,8 +303,8 @@ func createHelmReleaseCmdRun(cmd *cobra.Command, args []string) error { } logger.Waitingf("waiting for HelmRelease reconciliation") - if err := wait.PollImmediate(rootArgs.pollInterval, rootArgs.timeout, - isHelmReleaseReady(ctx, kubeClient, namespacedName, &helmRelease)); err != nil { + if err := wait.PollUntilContextTimeout(ctx, rootArgs.pollInterval, rootArgs.timeout, true, + isHelmReleaseReady(kubeClient, namespacedName, &helmRelease)); err != nil { return err } logger.Successf("HelmRelease %s is ready", name) @@ -344,9 +344,8 @@ func upsertHelmRelease(ctx context.Context, kubeClient client.Client, return namespacedName, nil } -func isHelmReleaseReady(ctx context.Context, kubeClient client.Client, - namespacedName types.NamespacedName, helmRelease *helmv2.HelmRelease) wait.ConditionFunc { - return func() (bool, error) { +func isHelmReleaseReady(kubeClient client.Client, namespacedName types.NamespacedName, helmRelease *helmv2.HelmRelease) wait.ConditionWithContextFunc { + return func(ctx context.Context) (bool, error) { err := kubeClient.Get(ctx, namespacedName, helmRelease) if err != nil { return false, err diff --git a/cmd/flux/create_kustomization.go b/cmd/flux/create_kustomization.go index fea9d836..eb2f8fc1 100644 --- a/cmd/flux/create_kustomization.go +++ b/cmd/flux/create_kustomization.go @@ -263,8 +263,8 @@ func createKsCmdRun(cmd *cobra.Command, args []string) error { } logger.Waitingf("waiting for Kustomization reconciliation") - if err := wait.PollImmediate(rootArgs.pollInterval, rootArgs.timeout, - isKustomizationReady(ctx, kubeClient, namespacedName, &kustomization)); err != nil { + if err := wait.PollUntilContextTimeout(ctx, rootArgs.pollInterval, rootArgs.timeout, true, + isKustomizationReady(kubeClient, namespacedName, &kustomization)); err != nil { return err } logger.Successf("Kustomization %s is ready", name) @@ -304,9 +304,8 @@ func upsertKustomization(ctx context.Context, kubeClient client.Client, return namespacedName, nil } -func isKustomizationReady(ctx context.Context, kubeClient client.Client, - namespacedName types.NamespacedName, kustomization *kustomizev1.Kustomization) wait.ConditionFunc { - return func() (bool, error) { +func isKustomizationReady(kubeClient client.Client, namespacedName types.NamespacedName, kustomization *kustomizev1.Kustomization) wait.ConditionWithContextFunc { + return func(ctx context.Context) (bool, error) { err := kubeClient.Get(ctx, namespacedName, kustomization) if err != nil { return false, err diff --git a/cmd/flux/create_receiver.go b/cmd/flux/create_receiver.go index 5597dae2..045ff771 100644 --- a/cmd/flux/create_receiver.go +++ b/cmd/flux/create_receiver.go @@ -139,8 +139,8 @@ func createReceiverCmdRun(cmd *cobra.Command, args []string) error { } logger.Waitingf("waiting for Receiver reconciliation") - if err := wait.PollImmediate(rootArgs.pollInterval, rootArgs.timeout, - isReceiverReady(ctx, kubeClient, namespacedName, &receiver)); err != nil { + if err := wait.PollUntilContextTimeout(ctx, rootArgs.pollInterval, rootArgs.timeout, true, + isReceiverReady(kubeClient, namespacedName, &receiver)); err != nil { return err } logger.Successf("Receiver %s is ready", name) @@ -180,9 +180,8 @@ func upsertReceiver(ctx context.Context, kubeClient client.Client, return namespacedName, nil } -func isReceiverReady(ctx context.Context, kubeClient client.Client, - namespacedName types.NamespacedName, receiver *notificationv1.Receiver) wait.ConditionFunc { - return func() (bool, error) { +func isReceiverReady(kubeClient client.Client, namespacedName types.NamespacedName, receiver *notificationv1.Receiver) wait.ConditionWithContextFunc { + return func(ctx context.Context) (bool, error) { err := kubeClient.Get(ctx, namespacedName, receiver) if err != nil { return false, err diff --git a/cmd/flux/create_source_bucket.go b/cmd/flux/create_source_bucket.go index 68ef8f3e..ebb6a834 100644 --- a/cmd/flux/create_source_bucket.go +++ b/cmd/flux/create_source_bucket.go @@ -204,8 +204,8 @@ func createSourceBucketCmdRun(cmd *cobra.Command, args []string) error { } logger.Waitingf("waiting for Bucket source reconciliation") - if err := wait.PollImmediate(rootArgs.pollInterval, rootArgs.timeout, - isBucketReady(ctx, kubeClient, namespacedName, bucket)); err != nil { + if err := wait.PollUntilContextTimeout(ctx, rootArgs.pollInterval, rootArgs.timeout, true, + isBucketReady(kubeClient, namespacedName, bucket)); err != nil { return err } logger.Successf("Bucket source reconciliation completed") @@ -248,9 +248,8 @@ func upsertBucket(ctx context.Context, kubeClient client.Client, return namespacedName, nil } -func isBucketReady(ctx context.Context, kubeClient client.Client, - namespacedName types.NamespacedName, bucket *sourcev1.Bucket) wait.ConditionFunc { - return func() (bool, error) { +func isBucketReady(kubeClient client.Client, namespacedName types.NamespacedName, bucket *sourcev1.Bucket) wait.ConditionWithContextFunc { + return func(ctx context.Context) (bool, error) { err := kubeClient.Get(ctx, namespacedName, bucket) if err != nil { return false, err diff --git a/cmd/flux/create_source_git.go b/cmd/flux/create_source_git.go index 2c6cc59a..8c0d031d 100644 --- a/cmd/flux/create_source_git.go +++ b/cmd/flux/create_source_git.go @@ -325,8 +325,8 @@ func createSourceGitCmdRun(cmd *cobra.Command, args []string) error { } logger.Waitingf("waiting for GitRepository source reconciliation") - if err := wait.PollImmediate(rootArgs.pollInterval, rootArgs.timeout, - isGitRepositoryReady(ctx, kubeClient, namespacedName, &gitRepository)); err != nil { + if err := wait.PollUntilContextTimeout(ctx, rootArgs.pollInterval, rootArgs.timeout, true, + isGitRepositoryReady(kubeClient, namespacedName, &gitRepository)); err != nil { return err } logger.Successf("GitRepository source reconciliation completed") @@ -369,9 +369,8 @@ func upsertGitRepository(ctx context.Context, kubeClient client.Client, return namespacedName, nil } -func isGitRepositoryReady(ctx context.Context, kubeClient client.Client, - namespacedName types.NamespacedName, gitRepository *sourcev1.GitRepository) wait.ConditionFunc { - return func() (bool, error) { +func isGitRepositoryReady(kubeClient client.Client, namespacedName types.NamespacedName, gitRepository *sourcev1.GitRepository) wait.ConditionWithContextFunc { + return func(ctx context.Context) (bool, error) { err := kubeClient.Get(ctx, namespacedName, gitRepository) if err != nil { return false, err diff --git a/cmd/flux/create_source_helm.go b/cmd/flux/create_source_helm.go index e7fa876b..ea82fa8a 100644 --- a/cmd/flux/create_source_helm.go +++ b/cmd/flux/create_source_helm.go @@ -231,8 +231,8 @@ func createSourceHelmCmdRun(cmd *cobra.Command, args []string) error { } logger.Waitingf("waiting for HelmRepository source reconciliation") - if err := wait.PollImmediate(rootArgs.pollInterval, rootArgs.timeout, - isHelmRepositoryReady(ctx, kubeClient, namespacedName, helmRepository)); err != nil { + if err := wait.PollUntilContextTimeout(ctx, rootArgs.pollInterval, rootArgs.timeout, true, + isHelmRepositoryReady(kubeClient, namespacedName, helmRepository)); err != nil { return err } logger.Successf("HelmRepository source reconciliation completed") @@ -280,9 +280,8 @@ func upsertHelmRepository(ctx context.Context, kubeClient client.Client, return namespacedName, nil } -func isHelmRepositoryReady(ctx context.Context, kubeClient client.Client, - namespacedName types.NamespacedName, helmRepository *sourcev1.HelmRepository) wait.ConditionFunc { - return func() (bool, error) { +func isHelmRepositoryReady(kubeClient client.Client, namespacedName types.NamespacedName, helmRepository *sourcev1.HelmRepository) wait.ConditionWithContextFunc { + return func(ctx context.Context) (bool, error) { err := kubeClient.Get(ctx, namespacedName, helmRepository) if err != nil { return false, err diff --git a/cmd/flux/create_source_oci.go b/cmd/flux/create_source_oci.go index 388ab18c..30fc4d8d 100644 --- a/cmd/flux/create_source_oci.go +++ b/cmd/flux/create_source_oci.go @@ -192,8 +192,8 @@ func createSourceOCIRepositoryCmdRun(cmd *cobra.Command, args []string) error { } logger.Waitingf("waiting for OCIRepository reconciliation") - if err := wait.PollImmediate(rootArgs.pollInterval, rootArgs.timeout, - isOCIRepositoryReady(ctx, kubeClient, namespacedName, repository)); err != nil { + if err := wait.PollUntilContextTimeout(ctx, rootArgs.pollInterval, rootArgs.timeout, true, + isOCIRepositoryReady(kubeClient, namespacedName, repository)); err != nil { return err } logger.Successf("OCIRepository reconciliation completed") @@ -236,9 +236,8 @@ func upsertOCIRepository(ctx context.Context, kubeClient client.Client, return namespacedName, nil } -func isOCIRepositoryReady(ctx context.Context, kubeClient client.Client, - namespacedName types.NamespacedName, ociRepository *sourcev1.OCIRepository) wait.ConditionFunc { - return func() (bool, error) { +func isOCIRepositoryReady(kubeClient client.Client, namespacedName types.NamespacedName, ociRepository *sourcev1.OCIRepository) wait.ConditionWithContextFunc { + return func(ctx context.Context) (bool, error) { err := kubeClient.Get(ctx, namespacedName, ociRepository) if err != nil { return false, err diff --git a/cmd/flux/reconcile.go b/cmd/flux/reconcile.go index 56f5f271..08b47a2a 100644 --- a/cmd/flux/reconcile.go +++ b/cmd/flux/reconcile.go @@ -113,8 +113,8 @@ func (reconcile reconcileCommand) run(cmd *cobra.Command, args []string) error { logger.Successf("%s annotated", reconcile.kind) if reconcile.kind == notificationv1b2.AlertKind || reconcile.kind == notificationv1.ReceiverKind { - if err = wait.PollImmediate(rootArgs.pollInterval, rootArgs.timeout, - isReconcileReady(ctx, kubeClient, namespacedName, reconcile.object)); err != nil { + if err = wait.PollUntilContextTimeout(ctx, rootArgs.pollInterval, rootArgs.timeout, true, + isReconcileReady(kubeClient, namespacedName, reconcile.object)); err != nil { return err } @@ -124,8 +124,8 @@ func (reconcile reconcileCommand) run(cmd *cobra.Command, args []string) error { lastHandledReconcileAt := reconcile.object.lastHandledReconcileRequest() logger.Waitingf("waiting for %s reconciliation", reconcile.kind) - if err := wait.PollImmediate(rootArgs.pollInterval, rootArgs.timeout, - reconciliationHandled(ctx, kubeClient, namespacedName, reconcile.object, lastHandledReconcileAt)); err != nil { + if err := wait.PollUntilContextTimeout(ctx, rootArgs.pollInterval, rootArgs.timeout, true, + reconciliationHandled(kubeClient, namespacedName, reconcile.object, lastHandledReconcileAt)); err != nil { return err } readyCond := apimeta.FindStatusCondition(reconcilableConditions(reconcile.object), meta.ReadyCondition) @@ -140,9 +140,8 @@ func (reconcile reconcileCommand) run(cmd *cobra.Command, args []string) error { return nil } -func reconciliationHandled(ctx context.Context, kubeClient client.Client, - namespacedName types.NamespacedName, obj reconcilable, lastHandledReconcileAt string) wait.ConditionFunc { - return func() (bool, error) { +func reconciliationHandled(kubeClient client.Client, namespacedName types.NamespacedName, obj reconcilable, lastHandledReconcileAt string) wait.ConditionWithContextFunc { + return func(ctx context.Context) (bool, error) { err := kubeClient.Get(ctx, namespacedName, obj.asClientObject()) if err != nil { return false, err @@ -176,9 +175,8 @@ func requestReconciliation(ctx context.Context, kubeClient client.Client, }) } -func isReconcileReady(ctx context.Context, kubeClient client.Client, - namespacedName types.NamespacedName, obj reconcilable) wait.ConditionFunc { - return func() (bool, error) { +func isReconcileReady(kubeClient client.Client, namespacedName types.NamespacedName, obj reconcilable) wait.ConditionWithContextFunc { + return func(ctx context.Context) (bool, error) { err := kubeClient.Get(ctx, namespacedName, obj.asClientObject()) if err != nil { return false, err diff --git a/cmd/flux/reconcile_alertprovider.go b/cmd/flux/reconcile_alertprovider.go index becf980f..4f6ce136 100644 --- a/cmd/flux/reconcile_alertprovider.go +++ b/cmd/flux/reconcile_alertprovider.go @@ -84,8 +84,8 @@ func reconcileAlertProviderCmdRun(cmd *cobra.Command, args []string) error { logger.Successf("Provider annotated") logger.Waitingf("waiting for reconciliation") - if err := wait.PollImmediate(rootArgs.pollInterval, rootArgs.timeout, - isAlertProviderReady(ctx, kubeClient, namespacedName, &alertProvider)); err != nil { + if err := wait.PollUntilContextTimeout(ctx, rootArgs.pollInterval, rootArgs.timeout, true, + isAlertProviderReady(kubeClient, namespacedName, &alertProvider)); err != nil { return err } logger.Successf("Provider reconciliation completed") diff --git a/cmd/flux/reconcile_receiver.go b/cmd/flux/reconcile_receiver.go index 8a04ea7a..a16946a7 100644 --- a/cmd/flux/reconcile_receiver.go +++ b/cmd/flux/reconcile_receiver.go @@ -88,8 +88,8 @@ func reconcileReceiverCmdRun(cmd *cobra.Command, args []string) error { logger.Successf("Receiver annotated") logger.Waitingf("waiting for Receiver reconciliation") - if err := wait.PollImmediate(rootArgs.pollInterval, rootArgs.timeout, - isReceiverReady(ctx, kubeClient, namespacedName, &receiver)); err != nil { + if err := wait.PollUntilContextTimeout(ctx, rootArgs.pollInterval, rootArgs.timeout, true, + isReceiverReady(kubeClient, namespacedName, &receiver)); err != nil { return err } diff --git a/cmd/flux/reconcile_with_source.go b/cmd/flux/reconcile_with_source.go index d0c3ae78..ac0a6f15 100644 --- a/cmd/flux/reconcile_with_source.go +++ b/cmd/flux/reconcile_with_source.go @@ -82,8 +82,8 @@ func (reconcile reconcileWithSourceCommand) run(cmd *cobra.Command, args []strin logger.Successf("%s annotated", reconcile.kind) logger.Waitingf("waiting for %s reconciliation", reconcile.kind) - if err := wait.PollImmediate(rootArgs.pollInterval, rootArgs.timeout, - reconciliationHandled(ctx, kubeClient, namespacedName, reconcile.object, lastHandledReconcileAt)); err != nil { + if err := wait.PollUntilContextTimeout(ctx, rootArgs.pollInterval, rootArgs.timeout, true, + reconciliationHandled(kubeClient, namespacedName, reconcile.object, lastHandledReconcileAt)); err != nil { return err } diff --git a/cmd/flux/resume.go b/cmd/flux/resume.go index bc27c4eb..d62895ca 100644 --- a/cmd/flux/resume.go +++ b/cmd/flux/resume.go @@ -212,8 +212,8 @@ func (resume resumeCommand) reconcile(ctx context.Context, res resumable) reconc logger.Waitingf("waiting for %s reconciliation", resume.kind) - if err := wait.PollImmediate(rootArgs.pollInterval, rootArgs.timeout, - isReady(ctx, resume.client, namespacedName, res)); err != nil { + if err := wait.PollUntilContextTimeout(ctx, rootArgs.pollInterval, rootArgs.timeout, true, + isReady(resume.client, namespacedName, res)); err != nil { return reconcileResponse{ resumable: res, err: err, diff --git a/cmd/flux/status.go b/cmd/flux/status.go index e6c4b5fc..6fb41565 100644 --- a/cmd/flux/status.go +++ b/cmd/flux/status.go @@ -56,9 +56,8 @@ func statusableConditions(object statusable) []metav1.Condition { return []metav1.Condition{} } -func isReady(ctx context.Context, kubeClient client.Client, - namespacedName types.NamespacedName, object statusable) wait.ConditionFunc { - return func() (bool, error) { +func isReady(kubeClient client.Client, namespacedName types.NamespacedName, object statusable) wait.ConditionWithContextFunc { + return func(ctx context.Context) (bool, error) { err := kubeClient.Get(ctx, namespacedName, object.asClientObject()) if err != nil { return false, err diff --git a/pkg/bootstrap/bootstrap.go b/pkg/bootstrap/bootstrap.go index 5d10b724..1111f6e9 100644 --- a/pkg/bootstrap/bootstrap.go +++ b/pkg/bootstrap/bootstrap.go @@ -20,6 +20,7 @@ import ( "context" "errors" "fmt" + "k8s.io/apimachinery/pkg/util/wait" "strings" "time" @@ -172,10 +173,8 @@ func kustomizationPathDiffers(ctx context.Context, kube client.Client, objKey cl return k.Spec.Path, nil } -func kustomizationReconciled(ctx context.Context, kube client.Client, objKey client.ObjectKey, - kustomization *kustomizev1.Kustomization, expectRevision string) func() (bool, error) { - - return func() (bool, error) { +func kustomizationReconciled(kube client.Client, objKey client.ObjectKey, kustomization *kustomizev1.Kustomization, expectRevision string) wait.ConditionWithContextFunc { + return func(ctx context.Context) (bool, error) { if err := kube.Get(ctx, objKey, kustomization); err != nil { return false, err } diff --git a/pkg/bootstrap/bootstrap_plain_git.go b/pkg/bootstrap/bootstrap_plain_git.go index da341d6a..ba5a7f58 100644 --- a/pkg/bootstrap/bootstrap_plain_git.go +++ b/pkg/bootstrap/bootstrap_plain_git.go @@ -401,9 +401,8 @@ func (b *PlainGitBootstrapper) ReportKustomizationHealth(ctx context.Context, op expectRevision := fmt.Sprintf("%s@%s", options.Branch, git.Hash(head).Digest()) var k kustomizev1.Kustomization - if err := wait.PollImmediate(pollInterval, timeout, kustomizationReconciled( - ctx, b.kube, objKey, &k, expectRevision), - ); err != nil { + if err := wait.PollUntilContextTimeout(ctx, pollInterval, timeout, true, + kustomizationReconciled(b.kube, objKey, &k, expectRevision)); err != nil { b.logger.Failuref(err.Error()) return err } From f5d3283cff38e64ee1d71df37dda1daf188e6707 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Fri, 13 Oct 2023 10:48:08 +0200 Subject: [PATCH 669/818] misc: remove unused bits of code Signed-off-by: Hidde Beydals --- cmd/flux/create_image_policy.go | 14 ++++++-------- cmd/flux/export_secret.go | 1 - cmd/flux/main_test.go | 2 -- cmd/flux/reconcile_image_updateauto.go | 4 ---- 4 files changed, 6 insertions(+), 15 deletions(-) diff --git a/cmd/flux/create_image_policy.go b/cmd/flux/create_image_policy.go index 116a2152..db287ed2 100644 --- a/cmd/flux/create_image_policy.go +++ b/cmd/flux/create_image_policy.go @@ -54,13 +54,12 @@ the status of the object.`), RunE: createImagePolicyRun} type imagePolicyFlags struct { - imageRef string - semver string - alpha string - numeric string - filterRegex string - filterExtract string - filterNumerical string + imageRef string + semver string + alpha string + numeric string + filterRegex string + filterExtract string } var imagePolicyArgs = imagePolicyFlags{} @@ -183,7 +182,6 @@ func validateExtractStr(template string, capNames []string) error { name, num, rest, ok := extract(template) if !ok { // Malformed extract string, assume user didn't want this - template = template[1:] return fmt.Errorf("--filter-extract is malformed") } template = rest diff --git a/cmd/flux/export_secret.go b/cmd/flux/export_secret.go index 4a87e233..76d6ec56 100644 --- a/cmd/flux/export_secret.go +++ b/cmd/flux/export_secret.go @@ -46,7 +46,6 @@ type exportableWithSecretList interface { } type exportWithSecretCommand struct { - apiType object exportableWithSecret list exportableWithSecretList } diff --git a/cmd/flux/main_test.go b/cmd/flux/main_test.go index cdddf054..b97397ff 100644 --- a/cmd/flux/main_test.go +++ b/cmd/flux/main_test.go @@ -340,8 +340,6 @@ type cmdTestCase struct { // Tests use assertFunc to assert on an output, success or failure. This // can be a function defined by the test or existing function above. assert assertFunc - // Filename that contains yaml objects to load into Kubernetes - objectFile string } func (cmd *cmdTestCase) runTestCmd(t *testing.T) { diff --git a/cmd/flux/reconcile_image_updateauto.go b/cmd/flux/reconcile_image_updateauto.go index 8fba13cc..2db4a1c0 100644 --- a/cmd/flux/reconcile_image_updateauto.go +++ b/cmd/flux/reconcile_image_updateauto.go @@ -43,10 +43,6 @@ func init() { reconcileImageCmd.AddCommand(reconcileImageUpdateCmd) } -func (obj imageUpdateAutomationAdapter) suspended() bool { - return obj.ImageUpdateAutomation.Spec.Suspend -} - func (obj imageUpdateAutomationAdapter) lastHandledReconcileRequest() string { return obj.Status.GetLastHandledReconcileRequest() } From e3f6f0f8b3236bc6557be4d005e1fef84ad31721 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Fri, 13 Oct 2023 10:51:20 +0200 Subject: [PATCH 670/818] misc: `sinceSeconds` -> `sinceDuration` Signed-off-by: Hidde Beydals --- cmd/flux/logs.go | 12 ++++++------ cmd/flux/logs_e2e_test.go | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/cmd/flux/logs.go b/cmd/flux/logs.go index 84d68acb..0931b1c9 100644 --- a/cmd/flux/logs.go +++ b/cmd/flux/logs.go @@ -74,7 +74,7 @@ type logsFlags struct { fluxNamespace string allNamespaces bool sinceTime string - sinceSeconds time.Duration + sinceDuration time.Duration } var logsArgs = logsFlags{ @@ -91,7 +91,7 @@ func init() { logsCmd.Flags().Int64VarP(&logsArgs.tail, "tail", "", logsArgs.tail, "lines of recent log file to display") logsCmd.Flags().StringVarP(&logsArgs.fluxNamespace, "flux-namespace", "", rootArgs.defaults.Namespace, "the namespace where the Flux components are running") logsCmd.Flags().BoolVarP(&logsArgs.allNamespaces, "all-namespaces", "A", false, "displays logs for objects across all namespaces") - logsCmd.Flags().DurationVar(&logsArgs.sinceSeconds, "since", logsArgs.sinceSeconds, "Only return logs newer than a relative duration like 5s, 2m, or 3h. Defaults to all logs. Only one of since-time / since may be used.") + logsCmd.Flags().DurationVar(&logsArgs.sinceDuration, "since", logsArgs.sinceDuration, "Only return logs newer than a relative duration like 5s, 2m, or 3h. Defaults to all logs. Only one of since-time / since may be used.") logsCmd.Flags().StringVar(&logsArgs.sinceTime, "since-time", logsArgs.sinceTime, "Only return logs after a specific date (RFC3339). Defaults to all logs. Only one of since-time / since may be used.") rootCmd.AddCommand(logsCmd) } @@ -129,8 +129,8 @@ func logsCmdRun(cmd *cobra.Command, args []string) error { logOpts.TailLines = &logsArgs.tail } - if len(logsArgs.sinceTime) > 0 && logsArgs.sinceSeconds != 0 { - return fmt.Errorf("at most one of `sinceTime` or `sinceSeconds` may be specified") + if len(logsArgs.sinceTime) > 0 && logsArgs.sinceDuration != 0 { + return fmt.Errorf("at most one of `sinceTime` or `sinceDuration` may be specified") } if len(logsArgs.sinceTime) > 0 { @@ -141,9 +141,9 @@ func logsCmdRun(cmd *cobra.Command, args []string) error { logOpts.SinceTime = &t } - if logsArgs.sinceSeconds != 0 { + if logsArgs.sinceDuration != 0 { // round up to the nearest second - sec := int64(logsArgs.sinceSeconds.Round(time.Second).Seconds()) + sec := int64(logsArgs.sinceDuration.Round(time.Second).Seconds()) logOpts.SinceSeconds = &sec } diff --git a/cmd/flux/logs_e2e_test.go b/cmd/flux/logs_e2e_test.go index 65a2d76e..46c1c11e 100644 --- a/cmd/flux/logs_e2e_test.go +++ b/cmd/flux/logs_e2e_test.go @@ -82,7 +82,7 @@ func TestLogsSinceTimeInvalid(t *testing.T) { func TestLogsSinceOnlyOneAllowed(t *testing.T) { cmd := cmdTestCase{ args: "logs --since=2m --since-time=2021-08-06T14:26:25.546Z", - assert: assertError("at most one of `sinceTime` or `sinceSeconds` may be specified"), + assert: assertError("at most one of `sinceTime` or `sinceDuration` may be specified"), } cmd.runTestCmd(t) } From ba1180ad4d2dd52d112c81ce582a5761f125e18b Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Fri, 13 Oct 2023 10:56:45 +0200 Subject: [PATCH 671/818] misc: fix hypothetical implicit memory aliasing Signed-off-by: Hidde Beydals --- pkg/uninstall/uninstall.go | 60 +++++++++++++++++++++++++------------- 1 file changed, 40 insertions(+), 20 deletions(-) diff --git a/pkg/uninstall/uninstall.go b/pkg/uninstall/uninstall.go index 3293cc9c..744cb04e 100644 --- a/pkg/uninstall/uninstall.go +++ b/pkg/uninstall/uninstall.go @@ -48,7 +48,8 @@ func Components(ctx context.Context, logger log.Logger, kubeClient client.Client { var list appsv1.DeploymentList if err := kubeClient.List(ctx, &list, client.InNamespace(namespace), selector); err == nil { - for _, r := range list.Items { + for i := range list.Items { + r := list.Items[i] if err := kubeClient.Delete(ctx, &r, opts); err != nil { logger.Failuref("Deployment/%s/%s deletion failed: %s", r.Namespace, r.Name, err.Error()) aggregateErr = append(aggregateErr, err) @@ -61,7 +62,8 @@ func Components(ctx context.Context, logger log.Logger, kubeClient client.Client { var list corev1.ServiceList if err := kubeClient.List(ctx, &list, client.InNamespace(namespace), selector); err == nil { - for _, r := range list.Items { + for i := range list.Items { + r := list.Items[i] if err := kubeClient.Delete(ctx, &r, opts); err != nil { logger.Failuref("Service/%s/%s deletion failed: %s", r.Namespace, r.Name, err.Error()) aggregateErr = append(aggregateErr, err) @@ -74,7 +76,8 @@ func Components(ctx context.Context, logger log.Logger, kubeClient client.Client { var list networkingv1.NetworkPolicyList if err := kubeClient.List(ctx, &list, client.InNamespace(namespace), selector); err == nil { - for _, r := range list.Items { + for i := range list.Items { + r := list.Items[i] if err := kubeClient.Delete(ctx, &r, opts); err != nil { logger.Failuref("NetworkPolicy/%s/%s deletion failed: %s", r.Namespace, r.Name, err.Error()) aggregateErr = append(aggregateErr, err) @@ -87,7 +90,8 @@ func Components(ctx context.Context, logger log.Logger, kubeClient client.Client { var list corev1.ServiceAccountList if err := kubeClient.List(ctx, &list, client.InNamespace(namespace), selector); err == nil { - for _, r := range list.Items { + for i := range list.Items { + r := list.Items[i] if err := kubeClient.Delete(ctx, &r, opts); err != nil { logger.Failuref("ServiceAccount/%s/%s deletion failed: %s", r.Namespace, r.Name, err.Error()) aggregateErr = append(aggregateErr, err) @@ -100,7 +104,8 @@ func Components(ctx context.Context, logger log.Logger, kubeClient client.Client { var list rbacv1.ClusterRoleList if err := kubeClient.List(ctx, &list, selector); err == nil { - for _, r := range list.Items { + for i := range list.Items { + r := list.Items[i] if err := kubeClient.Delete(ctx, &r, opts); err != nil { logger.Failuref("ClusterRole/%s deletion failed: %s", r.Name, err.Error()) aggregateErr = append(aggregateErr, err) @@ -113,7 +118,8 @@ func Components(ctx context.Context, logger log.Logger, kubeClient client.Client { var list rbacv1.ClusterRoleBindingList if err := kubeClient.List(ctx, &list, selector); err == nil { - for _, r := range list.Items { + for i := range list.Items { + r := list.Items[i] if err := kubeClient.Delete(ctx, &r, opts); err != nil { logger.Failuref("ClusterRoleBinding/%s deletion failed: %s", r.Name, err.Error()) aggregateErr = append(aggregateErr, err) @@ -134,7 +140,8 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client { var list sourcev1.GitRepositoryList if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { - for _, r := range list.Items { + for i := range list.Items { + r := list.Items[i] r.Finalizers = []string{} if err := kubeClient.Update(ctx, &r, opts); err != nil { logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) @@ -148,7 +155,8 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client { var list sourcev1b2.OCIRepositoryList if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { - for _, r := range list.Items { + for i := range list.Items { + r := list.Items[i] r.Finalizers = []string{} if err := kubeClient.Update(ctx, &r, opts); err != nil { logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) @@ -162,7 +170,8 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client { var list sourcev1b2.HelmRepositoryList if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { - for _, r := range list.Items { + for i := range list.Items { + r := list.Items[i] r.Finalizers = []string{} if err := kubeClient.Update(ctx, &r, opts); err != nil { logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) @@ -176,7 +185,8 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client { var list sourcev1b2.HelmChartList if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { - for _, r := range list.Items { + for i := range list.Items { + r := list.Items[i] r.Finalizers = []string{} if err := kubeClient.Update(ctx, &r, opts); err != nil { logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) @@ -190,7 +200,8 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client { var list sourcev1b2.BucketList if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { - for _, r := range list.Items { + for i := range list.Items { + r := list.Items[i] r.Finalizers = []string{} if err := kubeClient.Update(ctx, &r, opts); err != nil { logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) @@ -204,7 +215,8 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client { var list kustomizev1.KustomizationList if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { - for _, r := range list.Items { + for i := range list.Items { + r := list.Items[i] r.Finalizers = []string{} if err := kubeClient.Update(ctx, &r, opts); err != nil { logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) @@ -218,7 +230,8 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client { var list helmv2.HelmReleaseList if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { - for _, r := range list.Items { + for i := range list.Items { + r := list.Items[i] r.Finalizers = []string{} if err := kubeClient.Update(ctx, &r, opts); err != nil { logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) @@ -232,7 +245,8 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client { var list notificationv1b2.AlertList if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { - for _, r := range list.Items { + for i := range list.Items { + r := list.Items[i] r.Finalizers = []string{} if err := kubeClient.Update(ctx, &r, opts); err != nil { logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) @@ -246,7 +260,8 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client { var list notificationv1b2.ProviderList if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { - for _, r := range list.Items { + for i := range list.Items { + r := list.Items[i] r.Finalizers = []string{} if err := kubeClient.Update(ctx, &r, opts); err != nil { logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) @@ -260,7 +275,8 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client { var list notificationv1.ReceiverList if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { - for _, r := range list.Items { + for i := range list.Items { + r := list.Items[i] r.Finalizers = []string{} if err := kubeClient.Update(ctx, &r, opts); err != nil { logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) @@ -274,7 +290,8 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client { var list imagev1.ImagePolicyList if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { - for _, r := range list.Items { + for i := range list.Items { + r := list.Items[i] r.Finalizers = []string{} if err := kubeClient.Update(ctx, &r, opts); err != nil { logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) @@ -288,7 +305,8 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client { var list imagev1.ImageRepositoryList if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { - for _, r := range list.Items { + for i := range list.Items { + r := list.Items[i] r.Finalizers = []string{} if err := kubeClient.Update(ctx, &r, opts); err != nil { logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) @@ -302,7 +320,8 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client { var list autov1.ImageUpdateAutomationList if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { - for _, r := range list.Items { + for i := range list.Items { + r := list.Items[i] r.Finalizers = []string{} if err := kubeClient.Update(ctx, &r, opts); err != nil { logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) @@ -324,7 +343,8 @@ func CustomResourceDefinitions(ctx context.Context, logger log.Logger, kubeClien { var list apiextensionsv1.CustomResourceDefinitionList if err := kubeClient.List(ctx, &list, selector); err == nil { - for _, r := range list.Items { + for i := range list.Items { + r := list.Items[i] if err := kubeClient.Delete(ctx, &r, opts); err != nil { logger.Failuref("CustomResourceDefinition/%s deletion failed: %s", r.Name, err.Error()) aggregateErr = append(aggregateErr, err) From f137263fe9353a911aa6558df196461944a8335d Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Fri, 13 Oct 2023 11:11:30 +0200 Subject: [PATCH 672/818] misc: clean up immediately and avoid delayed defer Signed-off-by: Hidde Beydals --- internal/build/diff.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/internal/build/diff.go b/internal/build/diff.go index c316df9f..0dd0d9a4 100644 --- a/internal/build/diff.go +++ b/internal/build/diff.go @@ -116,13 +116,14 @@ func (b *Builder) Diff() (string, bool, error) { if err != nil { return "", createdOrDrifted, err } - defer cleanupDir(tmpDir) err = diff(liveFile, mergedFile, &output) if err != nil { + cleanupDir(tmpDir) return "", createdOrDrifted, err } + cleanupDir(tmpDir) createdOrDrifted = true } From 025fe9ced1f2f38b410ab4b7a0555c20f7086f73 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Oct 2023 00:19:31 +0000 Subject: [PATCH 673/818] build(deps): bump the ci group with 1 update Bumps the ci group with 1 update: [actions/checkout](https://github.com/actions/checkout). - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/8ade135a41bc03ea155e62e844d188df1ea18608...b4ffde65f46336ab88eb53be808477a3936bae11) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-patch dependency-group: ci ... Signed-off-by: dependabot[bot] --- .github/workflows/action.yaml | 2 +- .github/workflows/backport.yaml | 2 +- .github/workflows/e2e-arm64.yaml | 2 +- .github/workflows/e2e-azure.yaml | 4 ++-- .github/workflows/e2e-bootstrap.yaml | 2 +- .github/workflows/e2e-gcp.yaml | 2 +- .github/workflows/e2e.yaml | 2 +- .github/workflows/ossf.yaml | 2 +- .github/workflows/release.yaml | 4 ++-- .github/workflows/scan.yaml | 6 +++--- .github/workflows/sync-labels.yaml | 2 +- .github/workflows/update.yaml | 2 +- 12 files changed, 16 insertions(+), 16 deletions(-) diff --git a/.github/workflows/action.yaml b/.github/workflows/action.yaml index b6a7c32c..e14dc34b 100644 --- a/.github/workflows/action.yaml +++ b/.github/workflows/action.yaml @@ -24,6 +24,6 @@ jobs: name: action on ${{ matrix.version }} steps: - name: Checkout - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: Setup flux uses: ./action diff --git a/.github/workflows/backport.yaml b/.github/workflows/backport.yaml index 8e990c9d..682f21b2 100644 --- a/.github/workflows/backport.yaml +++ b/.github/workflows/backport.yaml @@ -13,7 +13,7 @@ jobs: if: github.event.pull_request.state == 'closed' && github.event.pull_request.merged && (github.event_name != 'labeled' || startsWith('backport:', github.event.label.name)) steps: - name: Checkout - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 with: ref: ${{ github.event.pull_request.head.sha }} - name: Create backport PRs diff --git a/.github/workflows/e2e-arm64.yaml b/.github/workflows/e2e-arm64.yaml index ba4a871e..b9aa1aa4 100644 --- a/.github/workflows/e2e-arm64.yaml +++ b/.github/workflows/e2e-arm64.yaml @@ -21,7 +21,7 @@ jobs: fail-fast: false steps: - name: Checkout - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: Setup Go uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 with: diff --git a/.github/workflows/e2e-azure.yaml b/.github/workflows/e2e-azure.yaml index 4621eefe..05b03611 100644 --- a/.github/workflows/e2e-azure.yaml +++ b/.github/workflows/e2e-azure.yaml @@ -30,7 +30,7 @@ jobs: if: false && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) && github.actor != 'dependabot[bot]' steps: - name: Checkout - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: Setup Go uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 with: @@ -75,7 +75,7 @@ jobs: if: false && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) && github.actor != 'dependabot[bot]' steps: - name: CheckoutD - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: Setup Go uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 with: diff --git a/.github/workflows/e2e-bootstrap.yaml b/.github/workflows/e2e-bootstrap.yaml index 379be360..908741a2 100644 --- a/.github/workflows/e2e-bootstrap.yaml +++ b/.github/workflows/e2e-bootstrap.yaml @@ -17,7 +17,7 @@ jobs: if: (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) && github.actor != 'dependabot[bot]' steps: - name: Checkout - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: Setup Go uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 with: diff --git a/.github/workflows/e2e-gcp.yaml b/.github/workflows/e2e-gcp.yaml index d881677c..c9170e5e 100644 --- a/.github/workflows/e2e-gcp.yaml +++ b/.github/workflows/e2e-gcp.yaml @@ -29,7 +29,7 @@ jobs: if: (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) && github.actor != 'dependabot[bot]' steps: - name: Checkout - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: Setup Go uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 with: diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index 59094080..3fbbb70b 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -21,7 +21,7 @@ jobs: - 5000:5000 steps: - name: Checkout - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: Setup Go uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 with: diff --git a/.github/workflows/ossf.yaml b/.github/workflows/ossf.yaml index 02ae21bd..7915ce3f 100644 --- a/.github/workflows/ossf.yaml +++ b/.github/workflows/ossf.yaml @@ -19,7 +19,7 @@ jobs: actions: read contents: read steps: - - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: Run analysis uses: ossf/scorecard-action@483ef80eb98fb506c348f7d62e28055e49fe2398 # v2.3.0 with: diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 095cb5d6..6408e582 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -20,7 +20,7 @@ jobs: packages: write # needed for ghcr access steps: - name: Checkout - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: Unshallow run: git fetch --prune --unshallow - name: Setup Go @@ -110,7 +110,7 @@ jobs: id-token: write packages: write steps: - - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: Setup Kustomize uses: fluxcd/pkg/actions/kustomize@main - name: Setup Flux CLI diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index 8a84ad5c..3de3abc6 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -17,7 +17,7 @@ jobs: runs-on: ubuntu-latest if: github.actor != 'dependabot[bot]' steps: - - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: Run FOSSA scan and upload build data uses: fossa-contrib/fossa-action@6728dc6fe9a068c648d080c33829ffbe56565023 # v2.0.0 with: @@ -31,7 +31,7 @@ jobs: security-events: write if: (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) && github.actor != 'dependabot[bot]' steps: - - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: Setup Kustomize uses: fluxcd/pkg/actions/kustomize@main - name: Setup Go @@ -64,7 +64,7 @@ jobs: if: github.actor != 'dependabot[bot]' steps: - name: Checkout repository - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: Setup Go uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 with: diff --git a/.github/workflows/sync-labels.yaml b/.github/workflows/sync-labels.yaml index 63969548..e112ee5f 100644 --- a/.github/workflows/sync-labels.yaml +++ b/.github/workflows/sync-labels.yaml @@ -17,7 +17,7 @@ jobs: permissions: issues: write steps: - - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - uses: EndBug/label-sync@da00f2c11fdb78e4fae44adac2fdd713778ea3e8 # v2.3.2 with: # Configuration file diff --git a/.github/workflows/update.yaml b/.github/workflows/update.yaml index 3dcbcb6d..0618d372 100644 --- a/.github/workflows/update.yaml +++ b/.github/workflows/update.yaml @@ -18,7 +18,7 @@ jobs: pull-requests: write steps: - name: Check out code - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: Setup Go uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 with: From 0eba9662e61e9ed7130bb056ad6def921d883844 Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Thu, 19 Oct 2023 14:07:28 +0100 Subject: [PATCH 674/818] prevent flux install from overriding bootrapped cluster Signed-off-by: Somtochi Onyekwere --- cmd/flux/cluster_info.go | 87 ++++ cmd/flux/cluster_info_test.go | 132 ++++++ cmd/flux/install.go | 14 + .../cluster_info/gitrepositories.yaml | 424 ++++++++++++++++++ 4 files changed, 657 insertions(+) create mode 100644 cmd/flux/cluster_info.go create mode 100644 cmd/flux/cluster_info_test.go create mode 100644 cmd/flux/testdata/cluster_info/gitrepositories.yaml diff --git a/cmd/flux/cluster_info.go b/cmd/flux/cluster_info.go new file mode 100644 index 00000000..0a1f59bf --- /dev/null +++ b/cmd/flux/cluster_info.go @@ -0,0 +1,87 @@ +/* +Copyright 2023 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "context" + "fmt" + + apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "sigs.k8s.io/controller-runtime/pkg/client" + + kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" + sourcev1 "github.com/fluxcd/source-controller/api/v1" +) + +// bootstrapLabels are labels put on a resource by kustomize-controller. These labels on the CRD indicates +// that flux has been bootstrapped. +var bootstrapLabels = []string{ + fmt.Sprintf("%s/name", kustomizev1.GroupVersion.Group), + fmt.Sprintf("%s/namespace", kustomizev1.GroupVersion.Group), +} + +// fluxClusterInfo contains information about an existing flux installation on a cluster. +type fluxClusterInfo struct { + // bootstrapped indicates that Flux was installed using the `flux bootstrap` command. + bootstrapped bool + // managedBy is the name of the tool being used to manage the installation of Flux. + managedBy string + // version is the Flux version number in semver format. + version string +} + +// getFluxClusterInfo returns information on the Flux installation running on the cluster. +// If the information cannot be retrieved, the boolean return value will be false. +// If an error occurred, the returned error will be non-nil. +// +// This function retrieves the GitRepository CRD from the cluster and checks it +// for a set of labels used to determine the Flux version and how Flux was installed. +func getFluxClusterInfo(ctx context.Context, c client.Client) (fluxClusterInfo, bool, error) { + var info fluxClusterInfo + crdMetadata := &metav1.PartialObjectMetadata{ + TypeMeta: metav1.TypeMeta{ + APIVersion: apiextensionsv1.SchemeGroupVersion.String(), + Kind: "CustomResourceDefinition", + }, + ObjectMeta: metav1.ObjectMeta{ + Name: fmt.Sprintf("gitrepositories.%s", sourcev1.GroupVersion.Group), + }, + } + if err := c.Get(ctx, client.ObjectKeyFromObject(crdMetadata), crdMetadata); err != nil { + if errors.IsNotFound(err) { + return info, false, nil + } + return info, false, err + } + + info.version = crdMetadata.Labels["app.kubernetes.io/version"] + + var present bool + for _, l := range bootstrapLabels { + _, present = crdMetadata.Labels[l] + } + if present { + info.bootstrapped = true + } + + if manager, ok := crdMetadata.Labels["app.kubernetes.io/managed-by"]; ok { + info.managedBy = manager + } + return info, true, nil +} diff --git a/cmd/flux/cluster_info_test.go b/cmd/flux/cluster_info_test.go new file mode 100644 index 00000000..bce39be9 --- /dev/null +++ b/cmd/flux/cluster_info_test.go @@ -0,0 +1,132 @@ +/* +Copyright 2023 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "context" + "fmt" + "os" + "testing" + + . "github.com/onsi/gomega" + apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + "k8s.io/apimachinery/pkg/runtime" + "sigs.k8s.io/controller-runtime/pkg/client/fake" + + kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" + "github.com/fluxcd/pkg/ssa" +) + +func Test_getFluxClusterInfo(t *testing.T) { + g := NewWithT(t) + f, err := os.Open("./testdata/cluster_info/gitrepositories.yaml") + g.Expect(err).To(BeNil()) + + objs, err := ssa.ReadObjects(f) + g.Expect(err).To(Not(HaveOccurred())) + gitrepo := objs[0] + + tests := []struct { + name string + labels map[string]string + wantErr bool + wantBool bool + wantInfo fluxClusterInfo + }{ + { + name: "no git repository CRD present", + wantBool: false, + }, + { + name: "CRD with kustomize-controller labels", + labels: map[string]string{ + fmt.Sprintf("%s/name", kustomizev1.GroupVersion.Group): "flux-system", + fmt.Sprintf("%s/namespace", kustomizev1.GroupVersion.Group): "flux-system", + "app.kubernetes.io/version": "v2.1.0", + }, + wantBool: true, + wantInfo: fluxClusterInfo{ + version: "v2.1.0", + bootstrapped: true, + }, + }, + { + name: "CRD with kustomize-controller labels and managed-by label", + labels: map[string]string{ + fmt.Sprintf("%s/name", kustomizev1.GroupVersion.Group): "flux-system", + fmt.Sprintf("%s/namespace", kustomizev1.GroupVersion.Group): "flux-system", + "app.kubernetes.io/version": "v2.1.0", + "app.kubernetes.io/managed-by": "flux", + }, + wantBool: true, + wantInfo: fluxClusterInfo{ + version: "v2.1.0", + bootstrapped: true, + managedBy: "flux", + }, + }, + { + name: "CRD with only managed-by label", + labels: map[string]string{ + "app.kubernetes.io/version": "v2.1.0", + "app.kubernetes.io/managed-by": "helm", + }, + wantBool: true, + wantInfo: fluxClusterInfo{ + version: "v2.1.0", + managedBy: "helm", + }, + }, + { + name: "CRD with no labels", + labels: map[string]string{}, + wantBool: true, + }, + { + name: "CRD with only version label", + labels: map[string]string{ + "app.kubernetes.io/version": "v2.1.0", + }, + wantBool: true, + wantInfo: fluxClusterInfo{ + version: "v2.1.0", + }, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + g := NewWithT(t) + newscheme := runtime.NewScheme() + apiextensionsv1.AddToScheme(newscheme) + builder := fake.NewClientBuilder().WithScheme(newscheme) + if tt.labels != nil { + gitrepo.SetLabels(tt.labels) + builder = builder.WithRuntimeObjects(gitrepo) + } + + client := builder.Build() + info, present, err := getFluxClusterInfo(context.Background(), client) + if tt.wantErr { + g.Expect(err).To(HaveOccurred()) + } + + g.Expect(present).To(Equal(tt.wantBool)) + g.Expect(info).To(BeEquivalentTo(tt.wantInfo)) + }) + } +} diff --git a/cmd/flux/install.go b/cmd/flux/install.go index 53712021..6580c0e4 100644 --- a/cmd/flux/install.go +++ b/cmd/flux/install.go @@ -183,6 +183,20 @@ func installCmdRun(cmd *cobra.Command, args []string) error { logger.Successf("manifests build completed") logger.Actionf("installing components in %s namespace", *kubeconfigArgs.Namespace) + kubeClient, err := utils.KubeClient(kubeconfigArgs, kubeclientOptions) + if err != nil { + return err + } + + info, installed, err := getFluxClusterInfo(ctx, kubeClient) + if err != nil { + return fmt.Errorf("cluster info unavailable: %w", err) + } + + if installed && info.bootstrapped { + return fmt.Errorf("this cluster has already been bootstrapped with Flux %s! Please use 'flux bootstrap' to upgrade", info.version) + } + applyOutput, err := utils.Apply(ctx, kubeconfigArgs, kubeclientOptions, tmpDir, filepath.Join(tmpDir, manifest.Path)) if err != nil { return fmt.Errorf("install failed: %w", err) diff --git a/cmd/flux/testdata/cluster_info/gitrepositories.yaml b/cmd/flux/testdata/cluster_info/gitrepositories.yaml new file mode 100644 index 00000000..3e4ba5c7 --- /dev/null +++ b/cmd/flux/testdata/cluster_info/gitrepositories.yaml @@ -0,0 +1,424 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.12.0 + name: gitrepositories.source.toolkit.fluxcd.io +spec: + group: source.toolkit.fluxcd.io + names: + kind: GitRepository + listKind: GitRepositoryList + plural: gitrepositories + shortNames: + - gitrepo + singular: gitrepository + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .spec.url + name: URL + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + - jsonPath: .status.conditions[?(@.type=="Ready")].status + name: Ready + type: string + - jsonPath: .status.conditions[?(@.type=="Ready")].message + name: Status + type: string + name: v1 + schema: + openAPIV3Schema: + description: GitRepository is the Schema for the gitrepositories API. + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: GitRepositorySpec specifies the required configuration to + produce an Artifact for a Git repository. + properties: + ignore: + description: Ignore overrides the set of excluded patterns in the + .sourceignore format (which is the same as .gitignore). If not provided, + a default will be used, consult the documentation for your version + to find out what those are. + type: string + include: + description: Include specifies a list of GitRepository resources which + Artifacts should be included in the Artifact produced for this GitRepository. + items: + description: GitRepositoryInclude specifies a local reference to + a GitRepository which Artifact (sub-)contents must be included, + and where they should be placed. + properties: + fromPath: + description: FromPath specifies the path to copy contents from, + defaults to the root of the Artifact. + type: string + repository: + description: GitRepositoryRef specifies the GitRepository which + Artifact contents must be included. + properties: + name: + description: Name of the referent. + type: string + required: + - name + type: object + toPath: + description: ToPath specifies the path to copy contents to, + defaults to the name of the GitRepositoryRef. + type: string + required: + - repository + type: object + type: array + interval: + description: Interval at which the GitRepository URL is checked for + updates. This interval is approximate and may be subject to jitter + to ensure efficient use of resources. + pattern: ^([0-9]+(\.[0-9]+)?(ms|s|m|h))+$ + type: string + proxySecretRef: + description: ProxySecretRef specifies the Secret containing the proxy + configuration to use while communicating with the Git server. + properties: + name: + description: Name of the referent. + type: string + required: + - name + type: object + recurseSubmodules: + description: RecurseSubmodules enables the initialization of all submodules + within the GitRepository as cloned from the URL, using their default + settings. + type: boolean + ref: + description: Reference specifies the Git reference to resolve and + monitor for changes, defaults to the 'master' branch. + properties: + branch: + description: Branch to check out, defaults to 'master' if no other + field is defined. + type: string + commit: + description: "Commit SHA to check out, takes precedence over all + reference fields. \n This can be combined with Branch to shallow + clone the branch, in which the commit is expected to exist." + type: string + name: + description: "Name of the reference to check out; takes precedence + over Branch, Tag and SemVer. \n It must be a valid Git reference: + https://git-scm.com/docs/git-check-ref-format#_description Examples: + \"refs/heads/main\", \"refs/tags/v0.1.0\", \"refs/pull/420/head\", + \"refs/merge-requests/1/head\"" + type: string + semver: + description: SemVer tag expression to check out, takes precedence + over Tag. + type: string + tag: + description: Tag to check out, takes precedence over Branch. + type: string + type: object + secretRef: + description: SecretRef specifies the Secret containing authentication + credentials for the GitRepository. For HTTPS repositories the Secret + must contain 'username' and 'password' fields for basic auth or + 'bearerToken' field for token auth. For SSH repositories the Secret + must contain 'identity' and 'known_hosts' fields. + properties: + name: + description: Name of the referent. + type: string + required: + - name + type: object + suspend: + description: Suspend tells the controller to suspend the reconciliation + of this GitRepository. + type: boolean + timeout: + default: 60s + description: Timeout for Git operations like cloning, defaults to + 60s. + pattern: ^([0-9]+(\.[0-9]+)?(ms|s|m))+$ + type: string + url: + description: URL specifies the Git repository URL, it can be an HTTP/S + or SSH address. + pattern: ^(http|https|ssh)://.*$ + type: string + verify: + description: Verification specifies the configuration to verify the + Git commit signature(s). + properties: + mode: + default: HEAD + description: "Mode specifies which Git object(s) should be verified. + \n The variants \"head\" and \"HEAD\" both imply the same thing, + i.e. verify the commit that the HEAD of the Git repository points + to. The variant \"head\" solely exists to ensure backwards compatibility." + enum: + - head + - HEAD + - Tag + - TagAndHEAD + type: string + secretRef: + description: SecretRef specifies the Secret containing the public + keys of trusted Git authors. + properties: + name: + description: Name of the referent. + type: string + required: + - name + type: object + required: + - secretRef + type: object + required: + - interval + - url + type: object + status: + default: + observedGeneration: -1 + description: GitRepositoryStatus records the observed state of a Git repository. + properties: + artifact: + description: Artifact represents the last successful GitRepository + reconciliation. + properties: + digest: + description: Digest is the digest of the file in the form of ':'. + pattern: ^[a-z0-9]+(?:[.+_-][a-z0-9]+)*:[a-zA-Z0-9=_-]+$ + type: string + lastUpdateTime: + description: LastUpdateTime is the timestamp corresponding to + the last update of the Artifact. + format: date-time + type: string + metadata: + additionalProperties: + type: string + description: Metadata holds upstream information such as OCI annotations. + type: object + path: + description: Path is the relative file path of the Artifact. It + can be used to locate the file in the root of the Artifact storage + on the local file system of the controller managing the Source. + type: string + revision: + description: Revision is a human-readable identifier traceable + in the origin source system. It can be a Git commit SHA, Git + tag, a Helm chart version, etc. + type: string + size: + description: Size is the number of bytes in the file. + format: int64 + type: integer + url: + description: URL is the HTTP address of the Artifact as exposed + by the controller managing the Source. It can be used to retrieve + the Artifact for consumption, e.g. by another controller applying + the Artifact contents. + type: string + required: + - lastUpdateTime + - path + - revision + - url + type: object + conditions: + description: Conditions holds the conditions for the GitRepository. + items: + description: "Condition contains details for one aspect of the current + state of this API Resource. --- This struct is intended for direct + use as an array at the field path .status.conditions. For example, + \n type FooStatus struct{ // Represents the observations of a + foo's current state. // Known .status.conditions.type are: \"Available\", + \"Progressing\", and \"Degraded\" // +patchMergeKey=type // +patchStrategy=merge + // +listType=map // +listMapKey=type Conditions []metav1.Condition + `json:\"conditions,omitempty\" patchStrategy:\"merge\" patchMergeKey:\"type\" + protobuf:\"bytes,1,rep,name=conditions\"` \n // other fields }" + properties: + lastTransitionTime: + description: lastTransitionTime is the last time the condition + transitioned from one status to another. This should be when + the underlying condition changed. If that is not known, then + using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: message is a human readable message indicating + details about the transition. This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: observedGeneration represents the .metadata.generation + that the condition was set based upon. For instance, if .metadata.generation + is currently 12, but the .status.conditions[x].observedGeneration + is 9, the condition is out of date with respect to the current + state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: reason contains a programmatic identifier indicating + the reason for the condition's last transition. Producers + of specific condition types may define expected values and + meanings for this field, and whether the values are considered + a guaranteed API. The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + --- Many .condition.type values are consistent across resources + like Available, but because arbitrary conditions can be useful + (see .node.status.conditions), the ability to deconflict is + important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + includedArtifacts: + description: IncludedArtifacts contains a list of the last successfully + included Artifacts as instructed by GitRepositorySpec.Include. + items: + description: Artifact represents the output of a Source reconciliation. + properties: + digest: + description: Digest is the digest of the file in the form of + ':'. + pattern: ^[a-z0-9]+(?:[.+_-][a-z0-9]+)*:[a-zA-Z0-9=_-]+$ + type: string + lastUpdateTime: + description: LastUpdateTime is the timestamp corresponding to + the last update of the Artifact. + format: date-time + type: string + metadata: + additionalProperties: + type: string + description: Metadata holds upstream information such as OCI + annotations. + type: object + path: + description: Path is the relative file path of the Artifact. + It can be used to locate the file in the root of the Artifact + storage on the local file system of the controller managing + the Source. + type: string + revision: + description: Revision is a human-readable identifier traceable + in the origin source system. It can be a Git commit SHA, Git + tag, a Helm chart version, etc. + type: string + size: + description: Size is the number of bytes in the file. + format: int64 + type: integer + url: + description: URL is the HTTP address of the Artifact as exposed + by the controller managing the Source. It can be used to retrieve + the Artifact for consumption, e.g. by another controller applying + the Artifact contents. + type: string + required: + - lastUpdateTime + - path + - revision + - url + type: object + type: array + lastHandledReconcileAt: + description: LastHandledReconcileAt holds the value of the most recent + reconcile request value, so a change of the annotation value can + be detected. + type: string + observedGeneration: + description: ObservedGeneration is the last observed generation of + the GitRepository object. + format: int64 + type: integer + observedIgnore: + description: ObservedIgnore is the observed exclusion patterns used + for constructing the source artifact. + type: string + observedInclude: + description: ObservedInclude is the observed list of GitRepository + resources used to produce the current Artifact. + items: + description: GitRepositoryInclude specifies a local reference to + a GitRepository which Artifact (sub-)contents must be included, + and where they should be placed. + properties: + fromPath: + description: FromPath specifies the path to copy contents from, + defaults to the root of the Artifact. + type: string + repository: + description: GitRepositoryRef specifies the GitRepository which + Artifact contents must be included. + properties: + name: + description: Name of the referent. + type: string + required: + - name + type: object + toPath: + description: ToPath specifies the path to copy contents to, + defaults to the name of the GitRepositoryRef. + type: string + required: + - repository + type: object + type: array + observedRecurseSubmodules: + description: ObservedRecurseSubmodules is the observed resource submodules + configuration used to produce the current Artifact. + type: boolean + sourceVerificationMode: + description: SourceVerificationMode is the last used verification + mode indicating which Git object(s) have been verified. + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} From 920fea7d1b70862c8937cf56fbc130dfa9028f5e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 25 Oct 2023 22:41:32 +0000 Subject: [PATCH 675/818] build(deps): bump google.golang.org/grpc in /tests/integration Bumps [google.golang.org/grpc](https://github.com/grpc/grpc-go) from 1.55.0 to 1.56.3. - [Release notes](https://github.com/grpc/grpc-go/releases) - [Commits](https://github.com/grpc/grpc-go/compare/v1.55.0...v1.56.3) --- updated-dependencies: - dependency-name: google.golang.org/grpc dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- tests/integration/go.mod | 4 ++-- tests/integration/go.sum | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/integration/go.mod b/tests/integration/go.mod index d6ee1e36..a5a0223c 100644 --- a/tests/integration/go.mod +++ b/tests/integration/go.mod @@ -23,7 +23,7 @@ require ( github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 github.com/onsi/gomega v1.27.10 github.com/whilp/git-urls v1.0.0 - google.golang.org/grpc v1.55.0 + google.golang.org/grpc v1.56.3 k8s.io/api v0.27.4 k8s.io/apimachinery v0.27.4 k8s.io/client-go v0.27.4 @@ -32,7 +32,7 @@ require ( require ( cloud.google.com/go v0.110.2 // indirect - cloud.google.com/go/compute v1.19.0 // indirect + cloud.google.com/go/compute v1.19.1 // indirect cloud.google.com/go/compute/metadata v0.2.3 // indirect cloud.google.com/go/iam v1.0.1 // indirect dario.cat/mergo v1.0.0 // indirect diff --git a/tests/integration/go.sum b/tests/integration/go.sum index 8fd1ce79..48b25343 100644 --- a/tests/integration/go.sum +++ b/tests/integration/go.sum @@ -2,8 +2,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.110.2 h1:sdFPBr6xG9/wkBbfhmUz/JmZC7X6LavQgcrVINrKiVA= cloud.google.com/go v0.110.2/go.mod h1:k04UEeEtb6ZBRTv3dZz4CeJC3jKGxyhl0sAiVVquxiw= -cloud.google.com/go/compute v1.19.0 h1:+9zda3WGgW1ZSTlVppLCYFIr48Pa35q1uG2N1itbCEQ= -cloud.google.com/go/compute v1.19.0/go.mod h1:rikpw2y+UMidAe9tISo04EHNOIf42RLYF/q8Bs93scU= +cloud.google.com/go/compute v1.19.1 h1:am86mquDUgjGNWxiGn+5PGLbmgiWXlE/yNWpIpNvuXY= +cloud.google.com/go/compute v1.19.1/go.mod h1:6ylj3a05WF8leseCdIf77NK0g1ey+nj5IKd5/kvShxE= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= cloud.google.com/go/iam v1.0.1 h1:lyeCAU6jpnVNrE9zGQkTl3WgNgK/X+uWwaw0kynZJMU= @@ -553,8 +553,8 @@ google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= -google.golang.org/grpc v1.55.0 h1:3Oj82/tFSCeUrRTg/5E/7d/W5A1tj6Ky1ABAuZuv5ag= -google.golang.org/grpc v1.55.0/go.mod h1:iYEXKGkEBhg1PjZQvoYEVPTDkHo1/bjTnfwTeGONTY8= +google.golang.org/grpc v1.56.3 h1:8I4C0Yq1EjstUzUJzpcRVbuYA2mODtEmpWiQoN/b2nc= +google.golang.org/grpc v1.56.3/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= 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= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= From cbce9b5e26c609779d6b52b19f0d3a36737325bb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Oct 2023 00:09:02 +0000 Subject: [PATCH 676/818] build(deps): bump the ci group with 2 updates Bumps the ci group with 2 updates: [korthout/backport-action](https://github.com/korthout/backport-action) and [ossf/scorecard-action](https://github.com/ossf/scorecard-action). Updates `korthout/backport-action` from 1.4.0 to 2.0.0 - [Release notes](https://github.com/korthout/backport-action/releases) - [Commits](https://github.com/korthout/backport-action/compare/bd68141f079bd036e45ea8149bc9d174d5a04703...408fae11ed190c2f91bf15d15af01b8f8b45709b) Updates `ossf/scorecard-action` from 2.3.0 to 2.3.1 - [Release notes](https://github.com/ossf/scorecard-action/releases) - [Changelog](https://github.com/ossf/scorecard-action/blob/main/RELEASE.md) - [Commits](https://github.com/ossf/scorecard-action/compare/483ef80eb98fb506c348f7d62e28055e49fe2398...0864cf19026789058feabb7e87baa5f140aac736) --- updated-dependencies: - dependency-name: korthout/backport-action dependency-type: direct:production update-type: version-update:semver-major dependency-group: ci - dependency-name: ossf/scorecard-action dependency-type: direct:production update-type: version-update:semver-patch dependency-group: ci ... Signed-off-by: dependabot[bot] --- .github/workflows/backport.yaml | 2 +- .github/workflows/ossf.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/backport.yaml b/.github/workflows/backport.yaml index 682f21b2..02032cb1 100644 --- a/.github/workflows/backport.yaml +++ b/.github/workflows/backport.yaml @@ -17,7 +17,7 @@ jobs: with: ref: ${{ github.event.pull_request.head.sha }} - name: Create backport PRs - uses: korthout/backport-action@bd68141f079bd036e45ea8149bc9d174d5a04703 # v1.4.0 + uses: korthout/backport-action@408fae11ed190c2f91bf15d15af01b8f8b45709b # v2.0.0 # xref: https://github.com/korthout/backport-action#inputs with: # Use token to allow workflows to be triggered for the created PR diff --git a/.github/workflows/ossf.yaml b/.github/workflows/ossf.yaml index 7915ce3f..1b343b7a 100644 --- a/.github/workflows/ossf.yaml +++ b/.github/workflows/ossf.yaml @@ -21,7 +21,7 @@ jobs: steps: - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: Run analysis - uses: ossf/scorecard-action@483ef80eb98fb506c348f7d62e28055e49fe2398 # v2.3.0 + uses: ossf/scorecard-action@0864cf19026789058feabb7e87baa5f140aac736 # v2.3.1 with: results_file: results.sarif results_format: sarif From 80810bdc0fb058e5579b438b8e1589f99560b0ed Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Oct 2023 15:44:06 +0000 Subject: [PATCH 677/818] build(deps): bump github.com/docker/docker Bumps [github.com/docker/docker](https://github.com/docker/docker) from 24.0.0+incompatible to 24.0.7+incompatible. - [Release notes](https://github.com/docker/docker/releases) - [Commits](https://github.com/docker/docker/compare/v24.0.0...v24.0.7) --- updated-dependencies: - dependency-name: github.com/docker/docker dependency-type: indirect ... Signed-off-by: dependabot[bot] --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 7875f9fe..b7bd0017 100644 --- a/go.mod +++ b/go.mod @@ -97,7 +97,7 @@ require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/docker/cli v24.0.0+incompatible // indirect github.com/docker/distribution v2.8.2+incompatible // indirect - github.com/docker/docker v24.0.0+incompatible // indirect + github.com/docker/docker v24.0.7+incompatible // indirect github.com/docker/docker-credential-helpers v0.7.0 // indirect github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c // indirect github.com/docker/go-metrics v0.0.1 // indirect diff --git a/go.sum b/go.sum index ee19e2d6..8f7fcefc 100644 --- a/go.sum +++ b/go.sum @@ -104,8 +104,8 @@ github.com/docker/cli v24.0.0+incompatible h1:0+1VshNwBQzQAx9lOl+OYCTCEAD8fKs/qe github.com/docker/cli v24.0.0+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v24.0.0+incompatible h1:z4bf8HvONXX9Tde5lGBMQ7yCJgNahmJumdrStZAbeY4= -github.com/docker/docker v24.0.0+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v24.0.7+incompatible h1:Wo6l37AuwP3JaMnZa226lzVXGA3F9Ig1seQen0cKYlM= +github.com/docker/docker v24.0.7+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker-credential-helpers v0.7.0 h1:xtCHsjxogADNZcdv1pKUHXryefjlVRqWqIhk/uXJp0A= github.com/docker/docker-credential-helpers v0.7.0/go.mod h1:rETQfLdHNT3foU5kuNkFR1R1V12OJRRO5lzt2D1b5X0= github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c h1:+pKlWGMw7gf6bQ+oDZB4KHQFypsfjYlq/C4rfL7D3g8= From 7771107e4df287d8c2dc3a82083ba4e8e23b5b95 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Oct 2023 17:12:00 +0000 Subject: [PATCH 678/818] build(deps): bump github.com/docker/docker in /tests/integration Bumps [github.com/docker/docker](https://github.com/docker/docker) from 23.0.3+incompatible to 24.0.7+incompatible. - [Release notes](https://github.com/docker/docker/releases) - [Commits](https://github.com/docker/docker/compare/v23.0.3...v24.0.7) --- updated-dependencies: - dependency-name: github.com/docker/docker dependency-type: indirect ... Signed-off-by: dependabot[bot] --- tests/integration/go.mod | 2 +- tests/integration/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/integration/go.mod b/tests/integration/go.mod index a5a0223c..ee7a3dfe 100644 --- a/tests/integration/go.mod +++ b/tests/integration/go.mod @@ -59,7 +59,7 @@ require ( github.com/devigned/tab v0.1.1 // indirect github.com/docker/cli v23.0.1+incompatible // indirect github.com/docker/distribution v2.8.2+incompatible // indirect - github.com/docker/docker v23.0.3+incompatible // indirect + github.com/docker/docker v24.0.7+incompatible // indirect github.com/docker/docker-credential-helpers v0.7.0 // indirect github.com/emicklei/go-restful/v3 v3.10.0 // indirect github.com/emirpasic/gods v1.18.1 // indirect diff --git a/tests/integration/go.sum b/tests/integration/go.sum index 48b25343..d27f0bea 100644 --- a/tests/integration/go.sum +++ b/tests/integration/go.sum @@ -105,8 +105,8 @@ github.com/docker/cli v23.0.1+incompatible h1:LRyWITpGzl2C9e9uGxzisptnxAn1zfZKXy github.com/docker/cli v23.0.1+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v23.0.3+incompatible h1:9GhVsShNWz1hO//9BNg/dpMnZW25KydO4wtVxWAIbho= -github.com/docker/docker v23.0.3+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v24.0.7+incompatible h1:Wo6l37AuwP3JaMnZa226lzVXGA3F9Ig1seQen0cKYlM= +github.com/docker/docker v24.0.7+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker-credential-helpers v0.7.0 h1:xtCHsjxogADNZcdv1pKUHXryefjlVRqWqIhk/uXJp0A= github.com/docker/docker-credential-helpers v0.7.0/go.mod h1:rETQfLdHNT3foU5kuNkFR1R1V12OJRRO5lzt2D1b5X0= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= From 2f15ad972b2aadc850fe296ad4bd41def271aba1 Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Tue, 24 Oct 2023 11:42:12 +0100 Subject: [PATCH 679/818] confirm before overriding installation by another manager Signed-off-by: Somtochi Onyekwere --- cmd/flux/bootstrap.go | 31 +++++++++++++++++++++++ cmd/flux/bootstrap_bitbucket_server.go | 7 ++++++ cmd/flux/bootstrap_git.go | 7 ++++++ cmd/flux/bootstrap_github.go | 7 ++++++ cmd/flux/bootstrap_gitlab.go | 7 ++++++ cmd/flux/cluster_info.go | 35 ++++++++++++++++++++------ cmd/flux/cluster_info_test.go | 18 ++++++------- cmd/flux/install.go | 27 +++++++++++++++++--- 8 files changed, 117 insertions(+), 22 deletions(-) diff --git a/cmd/flux/bootstrap.go b/cmd/flux/bootstrap.go index 2441551d..de02154a 100644 --- a/cmd/flux/bootstrap.go +++ b/cmd/flux/bootstrap.go @@ -17,11 +17,15 @@ limitations under the License. package main import ( + "context" "crypto/elliptic" "fmt" "strings" + "github.com/manifoldco/promptui" "github.com/spf13/cobra" + "k8s.io/apimachinery/pkg/api/errors" + "sigs.k8s.io/controller-runtime/pkg/client" "github.com/fluxcd/flux2/v2/internal/flags" "github.com/fluxcd/flux2/v2/internal/utils" @@ -72,6 +76,8 @@ type bootstrapFlags struct { gpgPassphrase string gpgKeyID string + force bool + commitMessageAppendix string } @@ -129,6 +135,7 @@ func init() { bootstrapCmd.PersistentFlags().StringVar(&bootstrapArgs.commitMessageAppendix, "commit-message-appendix", "", "string to add to the commit messages, e.g. '[ci skip]'") + bootstrapCmd.PersistentFlags().BoolVar(&bootstrapArgs.force, "force", false, "override existing Flux installation if it's managed by a diffrent tool such as Helm") bootstrapCmd.PersistentFlags().MarkHidden("manifests") rootCmd.AddCommand(bootstrapCmd) @@ -188,3 +195,27 @@ func mapTeamSlice(s []string, defaultPermission string) map[string]string { return m } + +// confirmBootstrap gets a confirmation for running bootstrap over an existing Flux installation. +// It returns a nil error if Flux is not installed or the user confirms overriding an existing installation +func confirmBootstrap(ctx context.Context, kubeClient client.Client) error { + installed := true + info, err := getFluxClusterInfo(ctx, kubeClient) + if err != nil { + if !errors.IsNotFound(err) { + return fmt.Errorf("cluster info unavailable: %w", err) + } + installed = false + } + + if installed { + err = confirmFluxInstallOverride(info) + if err != nil { + if err == promptui.ErrAbort { + return fmt.Errorf("bootstrap cancelled") + } + return err + } + } + return nil +} diff --git a/cmd/flux/bootstrap_bitbucket_server.go b/cmd/flux/bootstrap_bitbucket_server.go index 40eccca8..3648f0d2 100644 --- a/cmd/flux/bootstrap_bitbucket_server.go +++ b/cmd/flux/bootstrap_bitbucket_server.go @@ -124,6 +124,13 @@ func bootstrapBServerCmdRun(cmd *cobra.Command, args []string) error { return err } + if !bootstrapArgs.force { + err = confirmBootstrap(ctx, kubeClient) + if err != nil { + return err + } + } + // Manifest base if ver, err := getVersion(bootstrapArgs.version); err != nil { return err diff --git a/cmd/flux/bootstrap_git.go b/cmd/flux/bootstrap_git.go index bd9dc80a..eb66b0ad 100644 --- a/cmd/flux/bootstrap_git.go +++ b/cmd/flux/bootstrap_git.go @@ -146,6 +146,13 @@ func bootstrapGitCmdRun(cmd *cobra.Command, args []string) error { return err } + if !bootstrapArgs.force { + err = confirmBootstrap(ctx, kubeClient) + if err != nil { + return err + } + } + // Manifest base if ver, err := getVersion(bootstrapArgs.version); err != nil { return err diff --git a/cmd/flux/bootstrap_github.go b/cmd/flux/bootstrap_github.go index 8c7c214e..c2860d05 100644 --- a/cmd/flux/bootstrap_github.go +++ b/cmd/flux/bootstrap_github.go @@ -128,6 +128,13 @@ func bootstrapGitHubCmdRun(cmd *cobra.Command, args []string) error { return err } + if !bootstrapArgs.force { + err = confirmBootstrap(ctx, kubeClient) + if err != nil { + return err + } + } + // Manifest base if ver, err := getVersion(bootstrapArgs.version); err != nil { return err diff --git a/cmd/flux/bootstrap_gitlab.go b/cmd/flux/bootstrap_gitlab.go index 6bb111c3..90e6e968 100644 --- a/cmd/flux/bootstrap_gitlab.go +++ b/cmd/flux/bootstrap_gitlab.go @@ -145,6 +145,13 @@ func bootstrapGitLabCmdRun(cmd *cobra.Command, args []string) error { return err } + if !bootstrapArgs.force { + err = confirmBootstrap(ctx, kubeClient) + if err != nil { + return err + } + } + // Manifest base if ver, err := getVersion(bootstrapArgs.version); err != nil { return err diff --git a/cmd/flux/cluster_info.go b/cmd/flux/cluster_info.go index 0a1f59bf..0640a025 100644 --- a/cmd/flux/cluster_info.go +++ b/cmd/flux/cluster_info.go @@ -20,8 +20,8 @@ import ( "context" "fmt" + "github.com/manifoldco/promptui" apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" - "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "sigs.k8s.io/controller-runtime/pkg/client" @@ -47,12 +47,13 @@ type fluxClusterInfo struct { } // getFluxClusterInfo returns information on the Flux installation running on the cluster. -// If the information cannot be retrieved, the boolean return value will be false. // If an error occurred, the returned error will be non-nil. // // This function retrieves the GitRepository CRD from the cluster and checks it // for a set of labels used to determine the Flux version and how Flux was installed. -func getFluxClusterInfo(ctx context.Context, c client.Client) (fluxClusterInfo, bool, error) { +// It returns the NotFound error from the underlying library if it was unable to find +// the GitRepository CRD and this can be used to check if Flux is installed. +func getFluxClusterInfo(ctx context.Context, c client.Client) (fluxClusterInfo, error) { var info fluxClusterInfo crdMetadata := &metav1.PartialObjectMetadata{ TypeMeta: metav1.TypeMeta{ @@ -64,10 +65,7 @@ func getFluxClusterInfo(ctx context.Context, c client.Client) (fluxClusterInfo, }, } if err := c.Get(ctx, client.ObjectKeyFromObject(crdMetadata), crdMetadata); err != nil { - if errors.IsNotFound(err) { - return info, false, nil - } - return info, false, err + return info, err } info.version = crdMetadata.Labels["app.kubernetes.io/version"] @@ -80,8 +78,29 @@ func getFluxClusterInfo(ctx context.Context, c client.Client) (fluxClusterInfo, info.bootstrapped = true } + // the `app.kubernetes.io` label is not set by flux but might be set by other + // tools used to install Flux e.g Helm. if manager, ok := crdMetadata.Labels["app.kubernetes.io/managed-by"]; ok { info.managedBy = manager } - return info, true, nil + return info, nil +} + +// confirmFluxInstallOverride displays a prompt to the user so that they can confirm before overriding +// a Flux installation. It returns nil if the installation should continue, +// promptui.ErrAbort if the user doesn't confirm, or an error encountered. +func confirmFluxInstallOverride(info fluxClusterInfo) error { + // no need to display prompt if installation is managed by Flux + if info.managedBy == "" || info.managedBy == "flux" { + return nil + } + + display := fmt.Sprintf("Flux %s has been installed on this cluster with %s!", info.version, info.managedBy) + fmt.Fprintln(rootCmd.ErrOrStderr(), display) + prompt := promptui.Prompt{ + Label: fmt.Sprintf("Are you sure you want to override the %s installation? Y/N", info.managedBy), + IsConfirm: true, + } + _, err := prompt.Run() + return err } diff --git a/cmd/flux/cluster_info_test.go b/cmd/flux/cluster_info_test.go index bce39be9..550ab165 100644 --- a/cmd/flux/cluster_info_test.go +++ b/cmd/flux/cluster_info_test.go @@ -24,6 +24,7 @@ import ( . "github.com/onsi/gomega" apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/runtime" "sigs.k8s.io/controller-runtime/pkg/client/fake" @@ -44,12 +45,11 @@ func Test_getFluxClusterInfo(t *testing.T) { name string labels map[string]string wantErr bool - wantBool bool wantInfo fluxClusterInfo }{ { - name: "no git repository CRD present", - wantBool: false, + name: "no git repository CRD present", + wantErr: true, }, { name: "CRD with kustomize-controller labels", @@ -58,7 +58,6 @@ func Test_getFluxClusterInfo(t *testing.T) { fmt.Sprintf("%s/namespace", kustomizev1.GroupVersion.Group): "flux-system", "app.kubernetes.io/version": "v2.1.0", }, - wantBool: true, wantInfo: fluxClusterInfo{ version: "v2.1.0", bootstrapped: true, @@ -72,7 +71,6 @@ func Test_getFluxClusterInfo(t *testing.T) { "app.kubernetes.io/version": "v2.1.0", "app.kubernetes.io/managed-by": "flux", }, - wantBool: true, wantInfo: fluxClusterInfo{ version: "v2.1.0", bootstrapped: true, @@ -85,7 +83,6 @@ func Test_getFluxClusterInfo(t *testing.T) { "app.kubernetes.io/version": "v2.1.0", "app.kubernetes.io/managed-by": "helm", }, - wantBool: true, wantInfo: fluxClusterInfo{ version: "v2.1.0", managedBy: "helm", @@ -94,14 +91,13 @@ func Test_getFluxClusterInfo(t *testing.T) { { name: "CRD with no labels", labels: map[string]string{}, - wantBool: true, + wantInfo: fluxClusterInfo{}, }, { name: "CRD with only version label", labels: map[string]string{ "app.kubernetes.io/version": "v2.1.0", }, - wantBool: true, wantInfo: fluxClusterInfo{ version: "v2.1.0", }, @@ -120,12 +116,14 @@ func Test_getFluxClusterInfo(t *testing.T) { } client := builder.Build() - info, present, err := getFluxClusterInfo(context.Background(), client) + info, err := getFluxClusterInfo(context.Background(), client) if tt.wantErr { g.Expect(err).To(HaveOccurred()) + g.Expect(errors.IsNotFound(err)).To(BeTrue()) + } else { + g.Expect(err).To(Not(HaveOccurred())) } - g.Expect(present).To(Equal(tt.wantBool)) g.Expect(info).To(BeEquivalentTo(tt.wantInfo)) }) } diff --git a/cmd/flux/install.go b/cmd/flux/install.go index 6580c0e4..795cc1aa 100644 --- a/cmd/flux/install.go +++ b/cmd/flux/install.go @@ -23,7 +23,9 @@ import ( "path/filepath" "time" + "github.com/manifoldco/promptui" "github.com/spf13/cobra" + "k8s.io/apimachinery/pkg/api/errors" "github.com/fluxcd/flux2/v2/internal/flags" "github.com/fluxcd/flux2/v2/internal/utils" @@ -72,6 +74,7 @@ type installFlags struct { tokenAuth bool clusterDomain string tolerationKeys []string + force bool } var installArgs = NewInstallFlags() @@ -98,6 +101,7 @@ func init() { installCmd.Flags().StringVar(&installArgs.clusterDomain, "cluster-domain", rootArgs.defaults.ClusterDomain, "internal cluster domain") installCmd.Flags().StringSliceVar(&installArgs.tolerationKeys, "toleration-keys", nil, "list of toleration keys used to schedule the components pods onto nodes with matching taints") + installCmd.Flags().BoolVar(&installArgs.force, "force", false, "override existing Flux installation if it's managed by a diffrent tool such as Helm") installCmd.Flags().MarkHidden("manifests") rootCmd.AddCommand(installCmd) @@ -188,13 +192,28 @@ func installCmdRun(cmd *cobra.Command, args []string) error { return err } - info, installed, err := getFluxClusterInfo(ctx, kubeClient) + installed := true + info, err := getFluxClusterInfo(ctx, kubeClient) if err != nil { - return fmt.Errorf("cluster info unavailable: %w", err) + if !errors.IsNotFound(err) { + return fmt.Errorf("cluster info unavailable: %w", err) + } + installed = false + } + + if info.bootstrapped { + return fmt.Errorf("this cluster has already been bootstrapped with Flux %s! Please use 'flux bootstrap' to upgrade", + info.version) } - if installed && info.bootstrapped { - return fmt.Errorf("this cluster has already been bootstrapped with Flux %s! Please use 'flux bootstrap' to upgrade", info.version) + if installed && !installArgs.force { + err := confirmFluxInstallOverride(info) + if err != nil { + if err == promptui.ErrAbort { + return fmt.Errorf("installation cancelled") + } + return err + } } applyOutput, err := utils.Apply(ctx, kubeconfigArgs, kubeclientOptions, tmpDir, filepath.Join(tmpDir, manifest.Path)) From 9cd4a7215fe4dd01c467d68e7a8f34030abf2f29 Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Tue, 31 Oct 2023 14:37:32 +0100 Subject: [PATCH 680/818] Display better uninstall prompt if flux is managed by a different tool Signed-off-by: Somtochi Onyekwere --- cmd/flux/cluster_info.go | 6 +++++- cmd/flux/uninstall.go | 30 +++++++++++++++++++++--------- 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/cmd/flux/cluster_info.go b/cmd/flux/cluster_info.go index 0640a025..daf122ee 100644 --- a/cmd/flux/cluster_info.go +++ b/cmd/flux/cluster_info.go @@ -91,7 +91,7 @@ func getFluxClusterInfo(ctx context.Context, c client.Client) (fluxClusterInfo, // promptui.ErrAbort if the user doesn't confirm, or an error encountered. func confirmFluxInstallOverride(info fluxClusterInfo) error { // no need to display prompt if installation is managed by Flux - if info.managedBy == "" || info.managedBy == "flux" { + if installManagedByFlux(info.managedBy) { return nil } @@ -104,3 +104,7 @@ func confirmFluxInstallOverride(info fluxClusterInfo) error { _, err := prompt.Run() return err } + +func installManagedByFlux(manager string) bool { + return manager == "" || manager == "flux" +} diff --git a/cmd/flux/uninstall.go b/cmd/flux/uninstall.go index bee7ad48..0128a833 100644 --- a/cmd/flux/uninstall.go +++ b/cmd/flux/uninstall.go @@ -22,6 +22,7 @@ import ( "github.com/manifoldco/promptui" "github.com/spf13/cobra" + "k8s.io/apimachinery/pkg/api/errors" "github.com/fluxcd/flux2/v2/internal/utils" "github.com/fluxcd/flux2/v2/pkg/uninstall" @@ -59,9 +60,28 @@ func init() { } func uninstallCmdRun(cmd *cobra.Command, args []string) error { + ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) + defer cancel() + + kubeClient, err := utils.KubeClient(kubeconfigArgs, kubeclientOptions) + if err != nil { + return err + } + if !uninstallArgs.dryRun && !uninstallArgs.silent { + info, err := getFluxClusterInfo(ctx, kubeClient) + if err != nil { + if !errors.IsNotFound(err) { + return fmt.Errorf("cluster info unavailable: %w", err) + } + } + + promptLabel := "Are you sure you want to delete Flux and its custom resource definitions" + if !installManagedByFlux(info.managedBy) { + promptLabel = fmt.Sprintf("Flux is managed by %s! Are you sure you want to delete Flux and its CRDs using Flux CLI", info.managedBy) + } prompt := promptui.Prompt{ - Label: "Are you sure you want to delete Flux and its custom resource definitions", + Label: promptLabel, IsConfirm: true, } if _, err := prompt.Run(); err != nil { @@ -69,14 +89,6 @@ func uninstallCmdRun(cmd *cobra.Command, args []string) error { } } - ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) - defer cancel() - - kubeClient, err := utils.KubeClient(kubeconfigArgs, kubeclientOptions) - if err != nil { - return err - } - logger.Actionf("deleting components in %s namespace", *kubeconfigArgs.Namespace) uninstall.Components(ctx, logger, kubeClient, *kubeconfigArgs.Namespace, uninstallArgs.dryRun) From dcbca6b1bf4f1a7f230ed315b0caadfa3960d99b Mon Sep 17 00:00:00 2001 From: Jabar Asadi Date: Wed, 1 Nov 2023 15:46:17 +0100 Subject: [PATCH 681/818] feat: add gitea bootstrapper Signed-off-by: Jabar Asadi --- cmd/flux/bootstrap_gitea.go | 275 +++++++++++++++++++++++++++++ go.mod | 4 + go.sum | 10 ++ pkg/bootstrap/provider/factory.go | 12 ++ pkg/bootstrap/provider/provider.go | 1 + 5 files changed, 302 insertions(+) create mode 100644 cmd/flux/bootstrap_gitea.go diff --git a/cmd/flux/bootstrap_gitea.go b/cmd/flux/bootstrap_gitea.go new file mode 100644 index 00000000..37d53c92 --- /dev/null +++ b/cmd/flux/bootstrap_gitea.go @@ -0,0 +1,275 @@ +/* +Copyright 2023 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "context" + "fmt" + "os" + "time" + + "github.com/fluxcd/pkg/git" + "github.com/fluxcd/pkg/git/gogit" + "github.com/spf13/cobra" + + "github.com/fluxcd/flux2/v2/internal/flags" + "github.com/fluxcd/flux2/v2/internal/utils" + "github.com/fluxcd/flux2/v2/pkg/bootstrap" + "github.com/fluxcd/flux2/v2/pkg/bootstrap/provider" + "github.com/fluxcd/flux2/v2/pkg/manifestgen" + "github.com/fluxcd/flux2/v2/pkg/manifestgen/install" + "github.com/fluxcd/flux2/v2/pkg/manifestgen/sourcesecret" + "github.com/fluxcd/flux2/v2/pkg/manifestgen/sync" +) + +var bootstrapGiteaCmd = &cobra.Command{ + Use: "gitea", + Short: "Deploy Flux on a cluster connected to a Gitea repository", + Long: `The bootstrap gitea command creates the Gitea repository if it doesn't exists and +commits the Flux manifests to the specified branch. +Then it configures the target cluster to synchronize with that repository. +If the Flux components are present on the cluster, +the bootstrap command will perform an upgrade if needed.`, + Example: ` # Create a Gitea personal access token and export it as an env var + export GITEA_TOKEN= + + # Run bootstrap for a private repository owned by a Gitea organization + flux bootstrap gitea --owner= --repository= --path=clusters/my-cluster + + # Run bootstrap for a private repository and assign organization teams to it + flux bootstrap gitea --owner= --repository= --team= --team= --path=clusters/my-cluster + + # Run bootstrap for a private repository and assign organization teams with their access level(e.g maintain, admin) to it + flux bootstrap gitea --owner= --repository= --team=: --path=clusters/my-cluster + + # Run bootstrap for a public repository on a personal account + flux bootstrap gitea --owner= --repository= --private=false --personal=true --path=clusters/my-cluster + + # Run bootstrap for a private repository hosted on Gitea Enterprise using SSH auth + flux bootstrap gitea --owner= --repository= --hostname= --ssh-hostname= --path=clusters/my-cluster + + # Run bootstrap for a private repository hosted on Gitea Enterprise using HTTPS auth + flux bootstrap gitea --owner= --repository= --hostname= --token-auth --path=clusters/my-cluster + + # Run bootstrap for an existing repository with a branch named main + flux bootstrap gitea --owner= --repository= --branch=main --path=clusters/my-cluster`, + RunE: bootstrapGiteaCmdRun, +} + +type giteaFlags struct { + owner string + repository string + interval time.Duration + personal bool + private bool + hostname string + path flags.SafeRelativePath + teams []string + readWriteKey bool + reconcile bool +} + +const ( + gtDefaultPermission = "maintain" + gtDefaultDomain = "gitea.com" + gtTokenEnvVar = "GITEA_TOKEN" +) + +var giteaArgs giteaFlags + +func init() { + bootstrapGiteaCmd.Flags().StringVar(&giteaArgs.owner, "owner", "", "Gitea user or organization name") + bootstrapGiteaCmd.Flags().StringVar(&giteaArgs.repository, "repository", "", "Gitea repository name") + bootstrapGiteaCmd.Flags().StringSliceVar(&giteaArgs.teams, "team", []string{}, "Gitea team and the access to be given to it(team:maintain). Defaults to maintainer access if no access level is specified (also accepts comma-separated values)") + bootstrapGiteaCmd.Flags().BoolVar(&giteaArgs.personal, "personal", false, "if true, the owner is assumed to be a Gitea user; otherwise an org") + bootstrapGiteaCmd.Flags().BoolVar(&giteaArgs.private, "private", true, "if true, the repository is setup or configured as private") + bootstrapGiteaCmd.Flags().DurationVar(&giteaArgs.interval, "interval", time.Minute, "sync interval") + bootstrapGiteaCmd.Flags().StringVar(&giteaArgs.hostname, "hostname", gtDefaultDomain, "Gitea hostname") + bootstrapGiteaCmd.Flags().Var(&giteaArgs.path, "path", "path relative to the repository root, when specified the cluster sync will be scoped to this path") + bootstrapGiteaCmd.Flags().BoolVar(&giteaArgs.readWriteKey, "read-write-key", false, "if true, the deploy key is configured with read/write permissions") + bootstrapGiteaCmd.Flags().BoolVar(&giteaArgs.reconcile, "reconcile", false, "if true, the configured options are also reconciled if the repository already exists") + + bootstrapCmd.AddCommand(bootstrapGiteaCmd) +} + +func bootstrapGiteaCmdRun(cmd *cobra.Command, args []string) error { + gtToken := os.Getenv(gtTokenEnvVar) + if gtToken == "" { + var err error + gtToken, err = readPasswordFromStdin("Please enter your Gitea personal access token (PAT): ") + if err != nil { + return fmt.Errorf("could not read token: %w", err) + } + } + + if err := bootstrapValidate(); err != nil { + return err + } + + ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) + defer cancel() + + kubeClient, err := utils.KubeClient(kubeconfigArgs, kubeclientOptions) + if err != nil { + return err + } + + // Manifest base + if ver, err := getVersion(bootstrapArgs.version); err != nil { + return err + } else { + bootstrapArgs.version = ver + } + manifestsBase, err := buildEmbeddedManifestBase() + if err != nil { + return err + } + defer os.RemoveAll(manifestsBase) + + var caBundle []byte + if bootstrapArgs.caFile != "" { + var err error + caBundle, err = os.ReadFile(bootstrapArgs.caFile) + if err != nil { + return fmt.Errorf("unable to read TLS CA file: %w", err) + } + } + // Build Gitea provider + providerCfg := provider.Config{ + Provider: provider.GitProviderGitea, + Hostname: giteaArgs.hostname, + Token: gtToken, + CaBundle: caBundle, + } + providerClient, err := provider.BuildGitProvider(providerCfg) + if err != nil { + return err + } + + tmpDir, err := manifestgen.MkdirTempAbs("", "flux-bootstrap-") + if err != nil { + return fmt.Errorf("failed to create temporary working dir: %w", err) + } + defer os.RemoveAll(tmpDir) + + clientOpts := []gogit.ClientOption{gogit.WithDiskStorage(), gogit.WithFallbackToDefaultKnownHosts()} + gitClient, err := gogit.NewClient(tmpDir, &git.AuthOptions{ + Transport: git.HTTPS, + Username: giteaArgs.owner, + Password: gtToken, + CAFile: caBundle, + }, clientOpts...) + if err != nil { + return fmt.Errorf("failed to create a Git client: %w", err) + } + + // Install manifest config + installOptions := install.Options{ + BaseURL: rootArgs.defaults.BaseURL, + Version: bootstrapArgs.version, + Namespace: *kubeconfigArgs.Namespace, + Components: bootstrapComponents(), + Registry: bootstrapArgs.registry, + ImagePullSecret: bootstrapArgs.imagePullSecret, + WatchAllNamespaces: bootstrapArgs.watchAllNamespaces, + NetworkPolicy: bootstrapArgs.networkPolicy, + LogLevel: bootstrapArgs.logLevel.String(), + NotificationController: rootArgs.defaults.NotificationController, + ManifestFile: rootArgs.defaults.ManifestFile, + Timeout: rootArgs.timeout, + TargetPath: giteaArgs.path.ToSlash(), + ClusterDomain: bootstrapArgs.clusterDomain, + TolerationKeys: bootstrapArgs.tolerationKeys, + } + if customBaseURL := bootstrapArgs.manifestsPath; customBaseURL != "" { + installOptions.BaseURL = customBaseURL + } + + // Source generation and secret config + secretOpts := sourcesecret.Options{ + Name: bootstrapArgs.secretName, + Namespace: *kubeconfigArgs.Namespace, + TargetPath: giteaArgs.path.ToSlash(), + ManifestFile: sourcesecret.MakeDefaultOptions().ManifestFile, + } + if bootstrapArgs.tokenAuth { + secretOpts.Username = "git" + secretOpts.Password = gtToken + secretOpts.CAFile = caBundle + } else { + secretOpts.PrivateKeyAlgorithm = sourcesecret.PrivateKeyAlgorithm(bootstrapArgs.keyAlgorithm) + secretOpts.RSAKeyBits = int(bootstrapArgs.keyRSABits) + secretOpts.ECDSACurve = bootstrapArgs.keyECDSACurve.Curve + + secretOpts.SSHHostname = giteaArgs.hostname + if bootstrapArgs.sshHostname != "" { + secretOpts.SSHHostname = bootstrapArgs.sshHostname + } + } + + // Sync manifest config + syncOpts := sync.Options{ + Interval: giteaArgs.interval, + Name: *kubeconfigArgs.Namespace, + Namespace: *kubeconfigArgs.Namespace, + Branch: bootstrapArgs.branch, + Secret: bootstrapArgs.secretName, + TargetPath: giteaArgs.path.ToSlash(), + ManifestFile: sync.MakeDefaultOptions().ManifestFile, + RecurseSubmodules: bootstrapArgs.recurseSubmodules, + } + + entityList, err := bootstrap.LoadEntityListFromPath(bootstrapArgs.gpgKeyRingPath) + if err != nil { + return err + } + + // Bootstrap config + bootstrapOpts := []bootstrap.GitProviderOption{ + bootstrap.WithProviderRepository(giteaArgs.owner, giteaArgs.repository, giteaArgs.personal), + bootstrap.WithBranch(bootstrapArgs.branch), + bootstrap.WithBootstrapTransportType("https"), + bootstrap.WithSignature(bootstrapArgs.authorName, bootstrapArgs.authorEmail), + bootstrap.WithCommitMessageAppendix(bootstrapArgs.commitMessageAppendix), + bootstrap.WithProviderTeamPermissions(mapTeamSlice(giteaArgs.teams, gtDefaultPermission)), + bootstrap.WithReadWriteKeyPermissions(giteaArgs.readWriteKey), + bootstrap.WithKubeconfig(kubeconfigArgs, kubeclientOptions), + bootstrap.WithLogger(logger), + bootstrap.WithGitCommitSigning(entityList, bootstrapArgs.gpgPassphrase, bootstrapArgs.gpgKeyID), + } + if bootstrapArgs.sshHostname != "" { + bootstrapOpts = append(bootstrapOpts, bootstrap.WithSSHHostname(bootstrapArgs.sshHostname)) + } + if bootstrapArgs.tokenAuth { + bootstrapOpts = append(bootstrapOpts, bootstrap.WithSyncTransportType("https")) + } + if !giteaArgs.private { + bootstrapOpts = append(bootstrapOpts, bootstrap.WithProviderRepositoryConfig("", "", "public")) + } + if giteaArgs.reconcile { + bootstrapOpts = append(bootstrapOpts, bootstrap.WithReconcile()) + } + + // Setup bootstrapper with constructed configs + b, err := bootstrap.NewGitProviderBootstrapper(gitClient, providerClient, kubeClient, bootstrapOpts...) + if err != nil { + return err + } + + // Run + return bootstrap.Run(ctx, b, manifestsBase, installOptions, secretOpts, syncOpts, rootArgs.pollInterval, rootArgs.timeout) +} diff --git a/go.mod b/go.mod index b7bd0017..9f6434b1 100644 --- a/go.mod +++ b/go.mod @@ -63,6 +63,7 @@ require ( ) require ( + code.gitea.io/sdk/gitea v0.16.0 // indirect dario.cat/mergo v1.0.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.1 // indirect github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.1 // indirect @@ -95,6 +96,7 @@ require ( github.com/containerd/stargz-snapshotter/estargz v0.14.3 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect + github.com/davidmz/go-pageant v1.0.2 // indirect github.com/docker/cli v24.0.0+incompatible // indirect github.com/docker/distribution v2.8.2+incompatible // indirect github.com/docker/docker v24.0.7+incompatible // indirect @@ -114,6 +116,7 @@ require ( github.com/fluxcd/pkg/apis/kustomize v1.1.1 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/go-errors/errors v1.4.2 // indirect + github.com/go-fed/httpsig v1.1.0 // indirect github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect github.com/go-git/go-billy/v5 v5.5.0 // indirect github.com/go-openapi/jsonpointer v0.19.6 // indirect @@ -141,6 +144,7 @@ require ( github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/go-retryablehttp v0.7.4 // indirect + github.com/hashicorp/go-version v1.5.0 // indirect github.com/hashicorp/golang-lru/arc/v2 v2.0.5 // indirect github.com/hashicorp/golang-lru/v2 v2.0.5 // indirect github.com/imdario/mergo v0.3.15 // indirect diff --git a/go.sum b/go.sum index 8f7fcefc..58202d13 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,7 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +code.gitea.io/sdk/gitea v0.16.0 h1:gAfssETO1Hv9QbE+/nhWu7EjoFQYKt6kPoyDytQgw00= +code.gitea.io/sdk/gitea v0.16.0/go.mod h1:ndkDk99BnfiUCCYEUhpNzi0lpmApXlwRFqClBlOlEBg= dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= github.com/AdaLogics/go-fuzz-headers v0.0.0-20230106234847-43070de90fa1 h1:EKPd1INOIyr5hWOWhvpmQpY6tKjeG0hT1s3AMC/9fic= @@ -97,6 +99,8 @@ github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxG github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davidmz/go-pageant v1.0.2 h1:bPblRCh5jGU+Uptpz6LgMZGD5hJoOt7otgT454WvHn0= +github.com/davidmz/go-pageant v1.0.2/go.mod h1:P2EDDnMqIwG5Rrp05dTRITj9z2zpGcD9efWSkTNKLIE= github.com/distribution/distribution/v3 v3.0.0-20230823142118-4f7424c8eb41 h1:vlGNYFw1NB27Gk5tIwJpiog1Ti6FKOUI+DoFZKoCDZo= github.com/distribution/distribution/v3 v3.0.0-20230823142118-4f7424c8eb41/go.mod h1:WREzLx07iIFUGvbm6tBoqGt40zOC3whiM1qkcWOMFrs= github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI= @@ -190,6 +194,8 @@ github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeME github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= +github.com/go-fed/httpsig v1.1.0 h1:9M+hb0jkEICD8/cAiNqEB66R87tTINszBRTjwjQzWcI= +github.com/go-fed/httpsig v1.1.0/go.mod h1:RCMrTZvN1bJYtofsG4rd5NaO5obxQ5xBkdiS7xsT7bM= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= github.com/go-git/go-billy/v5 v5.5.0 h1:yEY4yhzCDuMGSv83oGxiBotRzhwhNr8VZyphhiu+mTU= @@ -301,6 +307,8 @@ github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+l github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-retryablehttp v0.7.4 h1:ZQgVdpTdAL7WpMIwLzCfbalOcSUdkDZnpUv3/+BxzFA= github.com/hashicorp/go-retryablehttp v0.7.4/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8= +github.com/hashicorp/go-version v1.5.0 h1:O293SZ2Eg+AAYijkVK3jR786Am1bhDEh2GHT0tIVE5E= +github.com/hashicorp/go-version v1.5.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/golang-lru/arc/v2 v2.0.5 h1:l2zaLDubNhW4XO3LnliVj0GXO3+/CGNJAg1dcN2Fpfw= github.com/hashicorp/golang-lru/arc/v2 v2.0.5/go.mod h1:ny6zBSQZi2JxIeYcv7kt2sH2PXJtirBN7RDhRpxPkxU= github.com/hashicorp/golang-lru/v2 v2.0.5 h1:wW7h1TG88eUIJ2i69gaE3uNVtEPIagzhGvHgwfx2Vm4= @@ -506,7 +514,9 @@ golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= diff --git a/pkg/bootstrap/provider/factory.go b/pkg/bootstrap/provider/factory.go index 575cb551..bd490334 100644 --- a/pkg/bootstrap/provider/factory.go +++ b/pkg/bootstrap/provider/factory.go @@ -19,6 +19,7 @@ package provider import ( "fmt" + "github.com/fluxcd/go-git-providers/gitea" "github.com/fluxcd/go-git-providers/github" "github.com/fluxcd/go-git-providers/gitlab" "github.com/fluxcd/go-git-providers/gitprovider" @@ -45,6 +46,17 @@ func BuildGitProvider(config Config) (gitprovider.Client, error) { if client, err = github.NewClient(opts...); err != nil { return nil, err } + case GitProviderGitea: + opts := []gitprovider.ClientOption{} + if config.Hostname != "" { + opts = append(opts, gitprovider.WithDomain(config.Hostname)) + } + if config.CaBundle != nil { + opts = append(opts, gitprovider.WithCustomCAPostChainTransportHook(config.CaBundle)) + } + if client, err = gitea.NewClient(config.Token, opts...); err != nil { + return nil, err + } case GitProviderGitLab: opts := []gitprovider.ClientOption{ gitprovider.WithConditionalRequests(true), diff --git a/pkg/bootstrap/provider/provider.go b/pkg/bootstrap/provider/provider.go index 4d1f92ac..f458184b 100644 --- a/pkg/bootstrap/provider/provider.go +++ b/pkg/bootstrap/provider/provider.go @@ -21,6 +21,7 @@ type GitProvider string const ( GitProviderGitHub GitProvider = "github" + GitProviderGitea GitProvider = "gitea" GitProviderGitLab GitProvider = "gitlab" GitProviderStash GitProvider = "stash" ) From 6dd0cbfaddc8ac795fb084053dae798803f22ec9 Mon Sep 17 00:00:00 2001 From: Sunny Date: Fri, 3 Nov 2023 18:46:54 +0000 Subject: [PATCH 682/818] tests/int: Set exit code 1 on tf destroy fail Explicitly set the test program exit code to 1 when terraform destroy fails to delete the infrastructure. This was observed when GKE clusters failed to delete due to delete protection enabled by default in the latest version of terraform provider google. Signed-off-by: Sunny --- tests/integration/suite_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/integration/suite_test.go b/tests/integration/suite_test.go index b6ee3589..8044c46c 100644 --- a/tests/integration/suite_test.go +++ b/tests/integration/suite_test.go @@ -220,6 +220,7 @@ func TestMain(m *testing.M) { defer func() { if err := testEnv.Stop(ctx); err != nil { log.Printf("Failed to stop environment: %v", err) + exitCode = 1 } // Log the panic error before exit to surface the cause of panic. From 0ad4db9f82d1d9c5d0c6784f1cfb03c1a06fbc12 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Nov 2023 00:39:04 +0000 Subject: [PATCH 683/818] build(deps): bump the ci group with 2 updates Bumps the ci group with 2 updates: [korthout/backport-action](https://github.com/korthout/backport-action) and [hashicorp/setup-terraform](https://github.com/hashicorp/setup-terraform). Updates `korthout/backport-action` from 2.0.0 to 2.1.0 - [Release notes](https://github.com/korthout/backport-action/releases) - [Commits](https://github.com/korthout/backport-action/compare/408fae11ed190c2f91bf15d15af01b8f8b45709b...cb79e4e5f46c7d7d653dd3d5fa8a9b0a945dfe4b) Updates `hashicorp/setup-terraform` from 2.0.3 to 3.0.0 - [Release notes](https://github.com/hashicorp/setup-terraform/releases) - [Changelog](https://github.com/hashicorp/setup-terraform/blob/main/CHANGELOG.md) - [Commits](https://github.com/hashicorp/setup-terraform/compare/633666f66e0061ca3b725c73b2ec20cd13a8fdd1...a1502cd9e758c50496cc9ac5308c4843bcd56d36) --- updated-dependencies: - dependency-name: korthout/backport-action dependency-type: direct:production update-type: version-update:semver-minor dependency-group: ci - dependency-name: hashicorp/setup-terraform dependency-type: direct:production update-type: version-update:semver-major dependency-group: ci ... Signed-off-by: dependabot[bot] --- .github/workflows/backport.yaml | 2 +- .github/workflows/e2e-azure.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/backport.yaml b/.github/workflows/backport.yaml index 02032cb1..c9c112cc 100644 --- a/.github/workflows/backport.yaml +++ b/.github/workflows/backport.yaml @@ -17,7 +17,7 @@ jobs: with: ref: ${{ github.event.pull_request.head.sha }} - name: Create backport PRs - uses: korthout/backport-action@408fae11ed190c2f91bf15d15af01b8f8b45709b # v2.0.0 + uses: korthout/backport-action@cb79e4e5f46c7d7d653dd3d5fa8a9b0a945dfe4b # v2.1.0 # xref: https://github.com/korthout/backport-action#inputs with: # Use token to allow workflows to be triggered for the created PR diff --git a/.github/workflows/e2e-azure.yaml b/.github/workflows/e2e-azure.yaml index 05b03611..1c6330b5 100644 --- a/.github/workflows/e2e-azure.yaml +++ b/.github/workflows/e2e-azure.yaml @@ -48,7 +48,7 @@ jobs: wget https://github.com/mozilla/sops/releases/download/v3.7.1/sops-v3.7.1.linux -O $HOME/.local/bin/sops chmod +x $HOME/.local/bin/sops - name: Setup Terraform - uses: hashicorp/setup-terraform@633666f66e0061ca3b725c73b2ec20cd13a8fdd1 # v2 + uses: hashicorp/setup-terraform@a1502cd9e758c50496cc9ac5308c4843bcd56d36 # v2 with: terraform_version: 1.2.8 terraform_wrapper: false From e73d1acb209d1408cbc77c5fb8bd52bc7fbb8b2d Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Fri, 3 Nov 2023 11:15:00 +0100 Subject: [PATCH 684/818] Tweak permissions on created files Signed-off-by: Hidde Beydals --- cmd/flux/main_test.go | 4 ++-- internal/build/diff.go | 4 ++-- tests/integration/util_test.go | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/cmd/flux/main_test.go b/cmd/flux/main_test.go index b97397ff..2859d963 100644 --- a/cmd/flux/main_test.go +++ b/cmd/flux/main_test.go @@ -182,7 +182,7 @@ func NewTestEnvKubeManager(testClusterMode TestClusterMode) (*testEnvKubeManager } tmpFilename := filepath.Join("/tmp", "kubeconfig-"+time.Nanosecond.String()) - os.WriteFile(tmpFilename, kubeConfig, 0644) + os.WriteFile(tmpFilename, kubeConfig, 0o600) k8sClient, err := client.NewWithWatch(cfg, client.Options{ Scheme: utils.NewScheme(), }) @@ -313,7 +313,7 @@ func assertGoldenTemplateFile(goldenFile string, templateValues map[string]strin if len(templateValues) > 0 { fmt.Println("NOTE: -update flag passed but golden template files can't be updated, please update it manually") } else { - if err := os.WriteFile(goldenFile, []byte(output), 0644); err != nil { + if err := os.WriteFile(goldenFile, []byte(output), 0o600); err != nil { return fmt.Errorf("failed to update golden file '%s': %v", goldenFile, err) } return nil diff --git a/internal/build/diff.go b/internal/build/diff.go index 0dd0d9a4..7714c6bb 100644 --- a/internal/build/diff.go +++ b/internal/build/diff.go @@ -168,13 +168,13 @@ func writeYamls(liveObject, mergedObject *unstructured.Unstructured) (string, st liveYAML, _ := yaml.Marshal(liveObject) liveFile := filepath.Join(tmpDir, "live.yaml") - if err := os.WriteFile(liveFile, liveYAML, 0644); err != nil { + if err := os.WriteFile(liveFile, liveYAML, 0o600); err != nil { return "", "", "", err } mergedYAML, _ := yaml.Marshal(mergedObject) mergedFile := filepath.Join(tmpDir, "merged.yaml") - if err := os.WriteFile(mergedFile, mergedYAML, 0644); err != nil { + if err := os.WriteFile(mergedFile, mergedYAML, 0o600); err != nil { return "", "", "", err } diff --git a/tests/integration/util_test.go b/tests/integration/util_test.go index 674c3b68..2f6b6a66 100644 --- a/tests/integration/util_test.go +++ b/tests/integration/util_test.go @@ -83,7 +83,7 @@ func installFlux(ctx context.Context, tmpDir string, kubeconfigPath string) erro if err != nil { return err } - err = os.WriteFile(f.Name(), []byte(cfg.gitPrivateKey), 0o644) + err = os.WriteFile(f.Name(), []byte(cfg.gitPrivateKey), 0o600) if err != nil { return err } From cbccb8c46a42edbd771f34ca6ccfe7d5a8348d9a Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Fri, 3 Nov 2023 11:27:53 +0100 Subject: [PATCH 685/818] Update `fluxcd/pkg` dependencies Signed-off-by: Hidde Beydals --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 9f6434b1..54d3305b 100644 --- a/go.mod +++ b/go.mod @@ -26,7 +26,7 @@ require ( github.com/fluxcd/pkg/sourceignore v0.3.5 github.com/fluxcd/pkg/ssa v0.32.0 github.com/fluxcd/pkg/ssh v0.8.2 - github.com/fluxcd/pkg/tar v0.3.0 + github.com/fluxcd/pkg/tar v0.4.0 github.com/fluxcd/pkg/version v0.2.2 github.com/fluxcd/source-controller/api v1.1.2 github.com/go-git/go-git/v5 v5.9.0 diff --git a/go.sum b/go.sum index 58202d13..44fca985 100644 --- a/go.sum +++ b/go.sum @@ -182,8 +182,8 @@ github.com/fluxcd/pkg/ssa v0.32.0 h1:RBqs9DNrbJkFHjpfsiKilyean7gwqWFspSBTLOaBIHs github.com/fluxcd/pkg/ssa v0.32.0/go.mod h1:+Kf5euYAbvgJX645bo+IL7V/NlH0X7kGgFTr1W++I3c= github.com/fluxcd/pkg/ssh v0.8.2 h1:WNfvTmnLnOUyXQDb8luSfmn1X0RIuhJBcKMFtKm6YsQ= github.com/fluxcd/pkg/ssh v0.8.2/go.mod h1:ewbU9vakYYdGSX92qXhx6Kqi5tVQ3ppmGQakCX1R6Gw= -github.com/fluxcd/pkg/tar v0.3.0 h1:gIdCIIuvV5aH193c1qYZeC6gpJOmw1p2OzhAvaUHNFI= -github.com/fluxcd/pkg/tar v0.3.0/go.mod h1:SyJBaQvuv2VA/rv4d1OHhCV6R8+9QKc9np193EzNHBc= +github.com/fluxcd/pkg/tar v0.4.0 h1:SuXpfXBIcSJ5R/yqQi2CBxBmV/i/LH0agqNAh2PWBZg= +github.com/fluxcd/pkg/tar v0.4.0/go.mod h1:SyJBaQvuv2VA/rv4d1OHhCV6R8+9QKc9np193EzNHBc= github.com/fluxcd/pkg/version v0.2.2 h1:ZpVXECeLA5hIQMft11iLp6gN3cKcz6UNuVTQPw/bRdI= github.com/fluxcd/pkg/version v0.2.2/go.mod h1:NGnh/no8S6PyfCDxRFrPY3T5BUnqP48MxfxNRU0z8C0= github.com/fluxcd/source-controller/api v1.1.2 h1:FfKDKVWnopo+Q2pOAxgHEjrtr4MP41L8aapR4mqBhBk= From c5dd6a18fa59750637eef589597ed5fa620be457 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Nov 2023 01:09:39 +0000 Subject: [PATCH 686/818] build(deps): bump the ci group with 2 updates Bumps the ci group with 2 updates: [korthout/backport-action](https://github.com/korthout/backport-action) and [sigstore/cosign-installer](https://github.com/sigstore/cosign-installer). Updates `korthout/backport-action` from 2.1.0 to 2.1.1 - [Release notes](https://github.com/korthout/backport-action/releases) - [Commits](https://github.com/korthout/backport-action/compare/cb79e4e5f46c7d7d653dd3d5fa8a9b0a945dfe4b...08bafb375e6e9a9a2b53a744b987e5d81a133191) Updates `sigstore/cosign-installer` from 3.1.2 to 3.2.0 - [Release notes](https://github.com/sigstore/cosign-installer/releases) - [Commits](https://github.com/sigstore/cosign-installer/compare/11086d25041f77fe8fe7b9ea4e48e3b9192b8f19...1fc5bd396d372bee37d608f955b336615edf79c8) --- updated-dependencies: - dependency-name: korthout/backport-action dependency-type: direct:production update-type: version-update:semver-patch dependency-group: ci - dependency-name: sigstore/cosign-installer dependency-type: direct:production update-type: version-update:semver-minor dependency-group: ci ... Signed-off-by: dependabot[bot] --- .github/workflows/backport.yaml | 2 +- .github/workflows/release.yaml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/backport.yaml b/.github/workflows/backport.yaml index c9c112cc..e3fdd5d3 100644 --- a/.github/workflows/backport.yaml +++ b/.github/workflows/backport.yaml @@ -17,7 +17,7 @@ jobs: with: ref: ${{ github.event.pull_request.head.sha }} - name: Create backport PRs - uses: korthout/backport-action@cb79e4e5f46c7d7d653dd3d5fa8a9b0a945dfe4b # v2.1.0 + uses: korthout/backport-action@08bafb375e6e9a9a2b53a744b987e5d81a133191 # v2.1.1 # xref: https://github.com/korthout/backport-action#inputs with: # Use token to allow workflows to be triggered for the created PR diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 6408e582..62bd8f3c 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -36,7 +36,7 @@ jobs: - name: Setup Syft uses: anchore/sbom-action/download-syft@78fc58e266e87a38d4194b2137a3d4e9bcaf7ca1 # v0.14.3 - name: Setup Cosign - uses: sigstore/cosign-installer@11086d25041f77fe8fe7b9ea4e48e3b9192b8f19 # v3.1.2 + uses: sigstore/cosign-installer@1fc5bd396d372bee37d608f955b336615edf79c8 # v3.2.0 - name: Setup Kustomize uses: fluxcd/pkg/actions/kustomize@main - name: Login to GitHub Container Registry @@ -155,7 +155,7 @@ jobs: --path="./flux-system" \ --source=${{ github.repositoryUrl }} \ --revision="${{ github.ref_name }}@sha1:${{ github.sha }}" - - uses: sigstore/cosign-installer@11086d25041f77fe8fe7b9ea4e48e3b9192b8f19 # v3.1.2 + - uses: sigstore/cosign-installer@1fc5bd396d372bee37d608f955b336615edf79c8 # v3.2.0 - name: Sign manifests env: COSIGN_EXPERIMENTAL: 1 From e184ef261858020ec6124b905312aa207691239d Mon Sep 17 00:00:00 2001 From: Matthew Clarke Date: Tue, 14 Nov 2023 15:02:54 -0500 Subject: [PATCH 687/818] fix build_artifact.go typo Signed-off-by: Matthew Clarke --- cmd/flux/build_artifact.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/flux/build_artifact.go b/cmd/flux/build_artifact.go index 4f26d402..ce3caf09 100644 --- a/cmd/flux/build_artifact.go +++ b/cmd/flux/build_artifact.go @@ -89,7 +89,7 @@ func buildArtifactCmdRun(cmd *cobra.Command, args []string) error { ociClient := oci.NewClient(oci.DefaultOptions()) if err := ociClient.Build(buildArtifactArgs.output, path, buildArtifactArgs.ignorePaths); err != nil { - return fmt.Errorf("bulding artifact failed, error: %w", err) + return fmt.Errorf("building artifact failed, error: %w", err) } logger.Successf("artifact created at %s", buildArtifactArgs.output) From aca461912c5fdf2e5c22ff1b214efa07f9437f68 Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Fri, 3 Nov 2023 01:19:18 +0100 Subject: [PATCH 688/818] make flux events work with lowercased kinds Signed-off-by: Somtochi Onyekwere --- cmd/flux/events.go | 165 +++++++++++++++++++++++++--------------- cmd/flux/events_test.go | 77 +++++++++++++++---- 2 files changed, 165 insertions(+), 77 deletions(-) diff --git a/cmd/flux/events.go b/cmd/flux/events.go index 3a0e72cc..51c3bb7c 100644 --- a/cmd/flux/events.go +++ b/cmd/flux/events.go @@ -62,8 +62,14 @@ var eventsCmd = &cobra.Command{ # Display events for flux resources in all namespaces flux events -A - # Display events for flux resources + # Display events for a Kustomization named podinfo flux events --for Kustomization/podinfo + + # Display events for all Kustomizations in default namespace + flux events --for Kustomization -n default + + # Display warning events for alert resources + flux events --for Alert/podinfo --types warning `, RunE: eventsCmdRun, } @@ -84,7 +90,7 @@ func init() { "indicate if the events should be streamed") eventsCmd.Flags().StringVar(&eventArgs.forSelector, "for", "", "get events for a particular object") - eventsCmd.Flags().StringSliceVar(&eventArgs.filterTypes, "types", []string{}, "filter events for certain types") + eventsCmd.Flags().StringSliceVar(&eventArgs.filterTypes, "types", []string{}, "filter events for certain types (valid types are: Normal, Warning)") rootCmd.AddCommand(eventsCmd) } @@ -92,6 +98,10 @@ func eventsCmdRun(cmd *cobra.Command, args []string) error { ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) defer cancel() + if err := validateEventTypes(eventArgs.filterTypes); err != nil { + return err + } + kubeclient, err := utils.KubeClient(kubeconfigArgs, kubeclientOptions) if err != nil { return err @@ -103,21 +113,33 @@ func eventsCmdRun(cmd *cobra.Command, args []string) error { } var diffRefNs bool - clientListOpts := getListOpt(namespace, eventArgs.forSelector) + clientListOpts := []client.ListOption{client.InNamespace(*kubeconfigArgs.Namespace)} var refListOpts [][]client.ListOption if eventArgs.forSelector != "" { - refs, err := getObjectRef(ctx, kubeclient, eventArgs.forSelector, *kubeconfigArgs.Namespace) + kind, name := getKindNameFromSelector(eventArgs.forSelector) + if kind == "" { + return fmt.Errorf("--for selector must be of format [/]") + } + + refInfoKind, err := fluxKindMap.getRefInfo(kind) if err != nil { return err } + clientListOpts = append(clientListOpts, getListOpt(refInfoKind.gvk.Kind, name)) + if name != "" { + refs, err := getObjectRef(ctx, kubeclient, refInfoKind, name, *kubeconfigArgs.Namespace) + if err != nil { + return err + } - for _, ref := range refs { - kind, name, refNs := utils.ParseObjectKindNameNamespace(ref) - if refNs != namespace { - diffRefNs = true + for _, ref := range refs { + refKind, refName, refNs := utils.ParseObjectKindNameNamespace(ref) + if refNs != namespace { + diffRefNs = true + } + refOpt := []client.ListOption{getListOpt(refKind, refName), client.InNamespace(refNs)} + refListOpts = append(refListOpts, refOpt) } - refSelector := fmt.Sprintf("%s/%s", kind, name) - refListOpts = append(refListOpts, getListOpt(refNs, refSelector)) } } @@ -140,8 +162,7 @@ func eventsCmdRun(cmd *cobra.Command, args []string) error { return nil } headers := getHeaders(showNamespace) - err = printers.TablePrinter(headers).Print(cmd.OutOrStdout(), rows) - return err + return printers.TablePrinter(headers).Print(cmd.OutOrStdout(), rows) } func getRows(ctx context.Context, kubeclient client.Client, clientListOpts []client.ListOption, refListOpts [][]client.ListOption, showNs bool) ([][]string, error) { @@ -171,11 +192,11 @@ func getRows(ctx context.Context, kubeclient client.Client, clientListOpts []cli func addEventsToList(ctx context.Context, kubeclient client.Client, el *corev1.EventList, clientListOpts []client.ListOption) error { listOpts := &metav1.ListOptions{} + clientListOpts = append(clientListOpts, client.Limit(cmdutil.DefaultChunkSize)) err := runtimeresource.FollowContinue(listOpts, func(options metav1.ListOptions) (runtime.Object, error) { newEvents := &corev1.EventList{} - err := kubeclient.List(ctx, newEvents, clientListOpts...) - if err != nil { + if err := kubeclient.List(ctx, newEvents, clientListOpts...); err != nil { return nil, fmt.Errorf("error getting events: %w", err) } el.Items = append(el.Items, newEvents.Items...) @@ -185,21 +206,22 @@ func addEventsToList(ctx context.Context, kubeclient client.Client, el *corev1.E return err } -func getListOpt(namespace, selector string) []client.ListOption { - clientListOpts := []client.ListOption{client.Limit(cmdutil.DefaultChunkSize), client.InNamespace(namespace)} - if selector != "" { - kind, name := utils.ParseObjectKindName(selector) - sel := fields.AndSelectors( +func getListOpt(kind, name string) client.ListOption { + var sel fields.Selector + if name == "" { + sel = fields.OneTermEqualSelector("involvedObject.kind", kind) + } else { + sel = fields.AndSelectors( fields.OneTermEqualSelector("involvedObject.kind", kind), fields.OneTermEqualSelector("involvedObject.name", name)) - clientListOpts = append(clientListOpts, client.MatchingFieldsSelector{Selector: sel}) } - return clientListOpts + return client.MatchingFieldsSelector{Selector: sel} } func eventsCmdWatchRun(ctx context.Context, kubeclient client.WithWatch, listOpts []client.ListOption, refListOpts [][]client.ListOption, showNs bool) error { event := &corev1.EventList{} + listOpts = append(listOpts, client.Limit(cmdutil.DefaultChunkSize)) eventWatch, err := kubeclient.Watch(ctx, event, listOpts...) if err != nil { return err @@ -225,12 +247,7 @@ func eventsCmdWatchRun(ctx context.Context, kubeclient client.WithWatch, listOpt hdr = getHeaders(showNs) firstIteration = false } - err = printers.TablePrinter(hdr).Print(os.Stdout, [][]string{rows}) - if err != nil { - return err - } - - return nil + return printers.TablePrinter(hdr).Print(os.Stdout, [][]string{rows}) } for _, refOpts := range refListOpts { @@ -239,8 +256,7 @@ func eventsCmdWatchRun(ctx context.Context, kubeclient client.WithWatch, listOpt return err } go func() { - err := receiveEventChan(ctx, refEventWatch, handleEvent) - if err != nil { + if err := receiveEventChan(ctx, refEventWatch, handleEvent); err != nil { logger.Failuref("error watching events: %s", err.Error()) } }() @@ -289,13 +305,7 @@ func getEventRow(e corev1.Event, showNs bool) []string { // getObjectRef is used to get the metadata of a resource that the selector(in the format ) references. // It returns an empty string if the resource doesn't reference any resource // and a string with the format `/.` if it does. -func getObjectRef(ctx context.Context, kubeclient client.Client, selector string, ns string) ([]string, error) { - kind, name := utils.ParseObjectKindName(selector) - ref, err := fluxKindMap.getRefInfo(kind) - if err != nil { - return nil, fmt.Errorf("error getting groupversion: %w", err) - } - +func getObjectRef(ctx context.Context, kubeclient client.Client, ref refInfo, name, ns string) ([]string, error) { // the resource has no source ref if len(ref.field) == 0 { return nil, nil @@ -303,31 +313,30 @@ func getObjectRef(ctx context.Context, kubeclient client.Client, selector string obj := &unstructured.Unstructured{} obj.SetGroupVersionKind(schema.GroupVersionKind{ - Kind: kind, - Version: ref.gv.Version, - Group: ref.gv.Group, + Kind: ref.gvk.Kind, + Version: ref.gvk.Version, + Group: ref.gvk.Group, }) objName := types.NamespacedName{ Namespace: ns, Name: name, } - err = kubeclient.Get(ctx, objName, obj) - if err != nil { + if err := kubeclient.Get(ctx, objName, obj); err != nil { return nil, err } - var ok bool refKind := ref.kind if refKind == "" { kindField := append(ref.field, "kind") - refKind, ok, err = unstructured.NestedString(obj.Object, kindField...) + specKind, ok, err := unstructured.NestedString(obj.Object, kindField...) if err != nil { return nil, err } if !ok { return nil, fmt.Errorf("field '%s' for '%s' not found", strings.Join(kindField, "."), objName) } + refKind = specKind } nameField := append(ref.field, "name") @@ -377,22 +386,40 @@ func (r refMap) hasKind(kind string) bool { return err == nil } +// validateEventTypes checks that the event types passed into the function +// is either equal to `Normal` or `Warning` which are currently the two supported types. +// https://github.com/kubernetes/kubernetes/blob/a8a1abc25cad87333840cd7d54be2efaf31a3177/staging/src/k8s.io/api/core/v1/types.go#L6212 +func validateEventTypes(eventTypes []string) error { + for _, t := range eventTypes { + if !strings.EqualFold(corev1.EventTypeWarning, t) && !strings.EqualFold(corev1.EventTypeNormal, t) { + return fmt.Errorf("type '%s' not supported. Supported types are Normal, Warning", t) + } + } + + return nil +} + type refInfo struct { - gv schema.GroupVersion - kind string + // gvk is the group version kind of the resource + gvk schema.GroupVersionKind + // kind is the kind that the resource references if it's not static + kind string + // crossNamespaced indicates if this resource uses cross namespaced references crossNamespaced bool - otherRefs func(namespace, name string) []string - field []string + // otherRefs returns other reference that might not be directly accessible + // from the spec of the object + otherRefs func(namespace, name string) []string + field []string } var fluxKindMap = refMap{ kustomizev1.KustomizationKind: { - gv: kustomizev1.GroupVersion, + gvk: kustomizev1.GroupVersion.WithKind(kustomizev1.KustomizationKind), crossNamespaced: true, field: []string{"spec", "sourceRef"}, }, helmv2.HelmReleaseKind: { - gv: helmv2.GroupVersion, + gvk: helmv2.GroupVersion.WithKind(helmv2.HelmReleaseKind), crossNamespaced: true, otherRefs: func(namespace, name string) []string { return []string{fmt.Sprintf("%s/%s-%s", sourcev1b2.HelmChartKind, namespace, name)} @@ -400,26 +427,30 @@ var fluxKindMap = refMap{ field: []string{"spec", "chart", "spec", "sourceRef"}, }, notificationv1b2.AlertKind: { - gv: notificationv1b2.GroupVersion, + gvk: notificationv1b2.GroupVersion.WithKind(notificationv1b2.AlertKind), kind: notificationv1b2.ProviderKind, crossNamespaced: false, field: []string{"spec", "providerRef"}, }, - notificationv1.ReceiverKind: {gv: notificationv1.GroupVersion}, - notificationv1b2.ProviderKind: {gv: notificationv1b2.GroupVersion}, + notificationv1.ReceiverKind: {gvk: notificationv1.GroupVersion.WithKind(notificationv1.ReceiverKind)}, + notificationv1b2.ProviderKind: {gvk: notificationv1b2.GroupVersion.WithKind(notificationv1b2.ProviderKind)}, imagev1.ImagePolicyKind: { - gv: imagev1.GroupVersion, + gvk: imagev1.GroupVersion.WithKind(imagev1.ImagePolicyKind), kind: imagev1.ImageRepositoryKind, crossNamespaced: true, field: []string{"spec", "imageRepositoryRef"}, }, - sourcev1.GitRepositoryKind: {gv: sourcev1.GroupVersion}, - sourcev1b2.OCIRepositoryKind: {gv: sourcev1b2.GroupVersion}, - sourcev1b2.BucketKind: {gv: sourcev1b2.GroupVersion}, - sourcev1b2.HelmRepositoryKind: {gv: sourcev1b2.GroupVersion}, - sourcev1b2.HelmChartKind: {gv: sourcev1b2.GroupVersion}, - autov1.ImageUpdateAutomationKind: {gv: autov1.GroupVersion}, - imagev1.ImageRepositoryKind: {gv: imagev1.GroupVersion}, + sourcev1b2.HelmChartKind: { + gvk: sourcev1b2.GroupVersion.WithKind(sourcev1b2.HelmChartKind), + crossNamespaced: true, + field: []string{"spec", "sourceRef"}, + }, + sourcev1.GitRepositoryKind: {gvk: sourcev1.GroupVersion.WithKind(sourcev1.GitRepositoryKind)}, + sourcev1b2.OCIRepositoryKind: {gvk: sourcev1b2.GroupVersion.WithKind(sourcev1b2.OCIRepositoryKind)}, + sourcev1b2.BucketKind: {gvk: sourcev1b2.GroupVersion.WithKind(sourcev1b2.BucketKind)}, + sourcev1b2.HelmRepositoryKind: {gvk: sourcev1b2.GroupVersion.WithKind(sourcev1b2.HelmRepositoryKind)}, + autov1.ImageUpdateAutomationKind: {gvk: autov1.GroupVersion.WithKind(autov1.ImageUpdateAutomationKind)}, + imagev1.ImageRepositoryKind: {gvk: imagev1.GroupVersion.WithKind(imagev1.ImageRepositoryKind)}, } func ignoreEvent(e corev1.Event) bool { @@ -437,7 +468,19 @@ func ignoreEvent(e corev1.Event) bool { return false } -// The functions below are copied from: https://github.com/kubernetes/kubectl/blob/master/pkg/cmd/events/events.go#L347 +func getKindNameFromSelector(selector string) (string, string) { + kind, name := utils.ParseObjectKindName(selector) + // if there's no slash in the selector utils.ParseObjectKindName returns the + // input string as the name but here we want it as the kind instead + if kind == "" && name != "" { + kind = name + name = "" + } + + return kind, name +} + +// The functions below are copied from: https://github.com/kubernetes/kubectl/blob/4ecd7bd0f0799f191335a331ca3c6a397a888233/pkg/cmd/events/events.go#L294 // SortableEvents implements sort.Interface for []api.Event by time type SortableEvents []corev1.Event diff --git a/cmd/flux/events_test.go b/cmd/flux/events_test.go index a6977431..a6b5e11f 100644 --- a/cmd/flux/events_test.go +++ b/cmd/flux/events_test.go @@ -28,7 +28,6 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/fields" "k8s.io/apimachinery/pkg/runtime" - cmdutil "k8s.io/kubectl/pkg/cmd/util" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/client/fake" @@ -216,6 +215,12 @@ func Test_getObjectRef(t *testing.T) { namespace: "default", want: []string{"ImageRepository/acr-podinfo.flux-system"}, }, + { + name: "Source Ref for ImagePolicy (lowercased)", + selector: "imagepolicy/podinfo", + namespace: "default", + want: []string{"ImageRepository/acr-podinfo.flux-system"}, + }, { name: "Empty Ref for Provider", selector: "Provider/slack", @@ -232,11 +237,13 @@ func Test_getObjectRef(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { g := NewWithT(t) - got, err := getObjectRef(context.Background(), c, tt.selector, tt.namespace) + kind, name := getKindNameFromSelector(tt.selector) + infoRef, err := fluxKindMap.getRefInfo(kind) if tt.wantErr { g.Expect(err).To(HaveOccurred()) return } + got, err := getObjectRef(context.Background(), c, infoRef, name, tt.namespace) g.Expect(err).To(Not(HaveOccurred())) g.Expect(got).To(Equal(tt.want)) @@ -261,6 +268,7 @@ func Test_getRows(t *testing.T) { } builder = builder.WithLists(eventList) builder.WithIndex(&corev1.Event{}, "involvedObject.kind/name", kindNameIndexer) + builder.WithIndex(&corev1.Event{}, "involvedObject.kind", kindIndexer) c := builder.Build() tests := []struct { @@ -320,6 +328,16 @@ func Test_getRows(t *testing.T) { {"flux-system", "", "info", "Info Reason", "GitRepository/flux-system", "Info Message"}, }, }, + { + name: "All Kustomization (lowercased selector)", + selector: "kustomization", + expected: [][]string{ + {"default", "", "error", "Error Reason", "Kustomization/podinfo", "Error Message"}, + {"default", "", "info", "Info Reason", "Kustomization/podinfo", "Info Message"}, + {"flux-system", "", "error", "Error Reason", "Kustomization/flux-system", "Error Message"}, + {"flux-system", "", "info", "Info Reason", "Kustomization/flux-system", "Info Message"}, + }, + }, { name: "HelmRelease with crossnamespaced HelmRepository", selector: "HelmRelease/podinfo", @@ -333,6 +351,19 @@ func Test_getRows(t *testing.T) { {"flux-system", "", "info", "Info Reason", "HelmChart/default-podinfo", "Info Message"}, }, }, + { + name: "HelmRelease with crossnamespaced HelmRepository (lowercased)", + selector: "helmrelease/podinfo", + namespace: "default", + expected: [][]string{ + {"default", "", "error", "Error Reason", "HelmRelease/podinfo", "Error Message"}, + {"default", "", "info", "Info Reason", "HelmRelease/podinfo", "Info Message"}, + {"flux-system", "", "error", "Error Reason", "HelmRepository/podinfo", "Error Message"}, + {"flux-system", "", "info", "Info Reason", "HelmRepository/podinfo", "Info Message"}, + {"flux-system", "", "error", "Error Reason", "HelmChart/default-podinfo", "Error Message"}, + {"flux-system", "", "info", "Info Reason", "HelmChart/default-podinfo", "Info Message"}, + }, + }, } for _, tt := range tests { @@ -341,37 +372,42 @@ func Test_getRows(t *testing.T) { var refs []string var refNs, refKind, refName string + var clientOpts = []client.ListOption{client.InNamespace(tt.namespace)} if tt.selector != "" { - refs, err = getObjectRef(context.Background(), c, tt.selector, tt.namespace) - g.Expect(err).To(Not(HaveOccurred())) + kind, name := getKindNameFromSelector(tt.selector) + infoRef, err := fluxKindMap.getRefInfo(kind) + clientOpts = append(clientOpts, getTestListOpt(infoRef.gvk.Kind, name)) + if name != "" { + g.Expect(err).To(Not(HaveOccurred())) + refs, err = getObjectRef(context.Background(), c, infoRef, name, tt.namespace) + g.Expect(err).To(Not(HaveOccurred())) + } } g.Expect(err).To(Not(HaveOccurred())) - clientOpts := getTestListOpt(tt.namespace, tt.selector) var refOpts [][]client.ListOption for _, ref := range refs { refKind, refName, refNs = utils.ParseObjectKindNameNamespace(ref) - refSelector := fmt.Sprintf("%s/%s", refKind, refName) - refOpts = append(refOpts, getTestListOpt(refNs, refSelector)) + refOpts = append(refOpts, []client.ListOption{client.InNamespace(refNs), getTestListOpt(refKind, refName)}) } showNs := tt.namespace == "" || (refNs != "" && refNs != tt.namespace) rows, err := getRows(context.Background(), c, clientOpts, refOpts, showNs) g.Expect(err).To(Not(HaveOccurred())) - g.Expect(rows).To(Equal(tt.expected)) + g.Expect(rows).To(ConsistOf(tt.expected)) }) } } -func getTestListOpt(namespace, selector string) []client.ListOption { - clientListOpts := []client.ListOption{client.Limit(cmdutil.DefaultChunkSize), client.InNamespace(namespace)} - if selector != "" { - sel := fields.OneTermEqualSelector("involvedObject.kind/name", selector) - clientListOpts = append(clientListOpts, client.MatchingFieldsSelector{Selector: sel}) +func getTestListOpt(kind, name string) client.ListOption { + var sel fields.Selector + if name == "" { + sel = fields.OneTermEqualSelector("involvedObject.kind", kind) + } else { + sel = fields.OneTermEqualSelector("involvedObject.kind/name", fmt.Sprintf("%s/%s", kind, name)) } - - return clientListOpts + return client.MatchingFieldsSelector{Selector: sel} } func getScheme() *runtime.Scheme { @@ -393,7 +429,7 @@ func createEvent(obj client.Object, eventType, msg, reason string) corev1.Event return corev1.Event{ ObjectMeta: metav1.ObjectMeta{ Namespace: obj.GetNamespace(), - // name of event needs to be unique so fak + // name of event needs to be unique Name: obj.GetNamespace() + obj.GetNamespace() + obj.GetObjectKind().GroupVersionKind().Kind + eventType, }, Reason: reason, @@ -415,3 +451,12 @@ func kindNameIndexer(obj client.Object) []string { return []string{fmt.Sprintf("%s/%s", e.InvolvedObject.Kind, e.InvolvedObject.Name)} } + +func kindIndexer(obj client.Object) []string { + e, ok := obj.(*corev1.Event) + if !ok { + panic(fmt.Sprintf("Expected a Event, got %T", e)) + } + + return []string{e.InvolvedObject.Kind} +} From 80efd29ec0607573e35e8fcc849f8f4e25f2e1a9 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Mon, 20 Nov 2023 15:27:46 +0200 Subject: [PATCH 689/818] Update dependencies Signed-off-by: Stefan Prodan --- cmd/flux/push_artifact.go | 5 +- cmd/flux/stats.go | 7 +- cmd/flux/status.go | 5 +- .../diff-with-drifted-secret.golden | 4 +- cmd/flux/tree_kustomization.go | 2 +- go.mod | 124 +++---- go.sum | 313 ++++++++---------- internal/build/diff.go | 4 +- internal/tree/tree.go | 2 +- internal/utils/apply.go | 5 +- pkg/bootstrap/bootstrap_plain_git.go | 2 +- pkg/status/status.go | 12 +- tests/azure/go.mod | 76 ++--- tests/azure/go.sum | 285 ++++++---------- tests/integration/go.mod | 100 +++--- tests/integration/go.sum | 260 +++++++-------- 16 files changed, 532 insertions(+), 674 deletions(-) diff --git a/cmd/flux/push_artifact.go b/cmd/flux/push_artifact.go index 605dfed7..228a826e 100644 --- a/cmd/flux/push_artifact.go +++ b/cmd/flux/push_artifact.go @@ -260,7 +260,10 @@ func pushArtifactCmdRun(cmd *cobra.Command, args []string) error { } ociClient := client.NewClient(opts) - digestURL, err := ociClient.Push(ctx, url, path, meta, pushArtifactArgs.ignorePaths) + digestURL, err := ociClient.Push(ctx, url, path, + client.WithPushMetadata(meta), + client.WithPushIgnorePaths(pushArtifactArgs.ignorePaths...), + ) if err != nil { return fmt.Errorf("pushing artifact failed: %w", err) } diff --git a/cmd/flux/stats.go b/cmd/flux/stats.go index 25e35c55..4542d498 100644 --- a/cmd/flux/stats.go +++ b/cmd/flux/stats.go @@ -24,11 +24,9 @@ import ( corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" - "sigs.k8s.io/cli-utils/pkg/kstatus/status" "sigs.k8s.io/controller-runtime/pkg/client" - "github.com/fluxcd/flux2/v2/internal/utils" - "github.com/fluxcd/flux2/v2/pkg/printers" + "github.com/fluxcd/cli-utils/pkg/kstatus/status" helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" autov1 "github.com/fluxcd/image-automation-controller/api/v1beta1" imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta2" @@ -37,6 +35,9 @@ import ( notificationv1b2 "github.com/fluxcd/notification-controller/api/v1beta2" sourcev1 "github.com/fluxcd/source-controller/api/v1" sourcev1b2 "github.com/fluxcd/source-controller/api/v1beta2" + + "github.com/fluxcd/flux2/v2/internal/utils" + "github.com/fluxcd/flux2/v2/pkg/printers" ) var statsCmd = &cobra.Command{ diff --git a/cmd/flux/status.go b/cmd/flux/status.go index 6fb41565..6e4e18c5 100644 --- a/cmd/flux/status.go +++ b/cmd/flux/status.go @@ -20,14 +20,15 @@ import ( "context" "fmt" - "github.com/fluxcd/pkg/apis/meta" apimeta "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/wait" - "sigs.k8s.io/cli-utils/pkg/object" "sigs.k8s.io/controller-runtime/pkg/client" + + "github.com/fluxcd/cli-utils/pkg/object" + "github.com/fluxcd/pkg/apis/meta" ) // statusable is used to see if a resource is considered ready in the usual way diff --git a/cmd/flux/testdata/diff-kustomization/diff-with-drifted-secret.golden b/cmd/flux/testdata/diff-kustomization/diff-with-drifted-secret.golden index 41a65058..bfce21b5 100644 --- a/cmd/flux/testdata/diff-kustomization/diff-with-drifted-secret.golden +++ b/cmd/flux/testdata/diff-kustomization/diff-with-drifted-secret.golden @@ -8,6 +8,6 @@ data.password ± value change - - ****** - + ***** + - *** (before) + + *** (after) diff --git a/cmd/flux/tree_kustomization.go b/cmd/flux/tree_kustomization.go index 6ea63dcb..ec4efd67 100644 --- a/cmd/flux/tree_kustomization.go +++ b/cmd/flux/tree_kustomization.go @@ -31,10 +31,10 @@ import ( apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/runtime/schema" - "sigs.k8s.io/cli-utils/pkg/object" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/yaml" + "github.com/fluxcd/cli-utils/pkg/object" helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" "github.com/fluxcd/pkg/ssa" diff --git a/go.mod b/go.mod index 54d3305b..354c1459 100644 --- a/go.mod +++ b/go.mod @@ -7,59 +7,59 @@ replace gopkg.in/yaml.v3 => gopkg.in/yaml.v3 v3.0.1 require ( github.com/Masterminds/semver/v3 v3.2.1 - github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 + github.com/ProtonMail/go-crypto v0.0.0-20231012073058-a7379d079e0e github.com/cyphar/filepath-securejoin v0.2.4 github.com/distribution/distribution/v3 v3.0.0-20230823142118-4f7424c8eb41 + github.com/fluxcd/cli-utils v0.36.0-flux.1 github.com/fluxcd/go-git-providers v0.19.1 github.com/fluxcd/helm-controller/api v0.36.2 github.com/fluxcd/image-automation-controller/api v0.36.1 github.com/fluxcd/image-reflector-controller/api v0.30.0 github.com/fluxcd/kustomize-controller/api v1.1.1 github.com/fluxcd/notification-controller/api v1.1.0 - github.com/fluxcd/pkg/apis/event v0.5.2 - github.com/fluxcd/pkg/apis/meta v1.1.2 - github.com/fluxcd/pkg/git v0.14.0 - github.com/fluxcd/pkg/git/gogit v0.14.0 - github.com/fluxcd/pkg/kustomize v1.3.4 - github.com/fluxcd/pkg/oci v0.32.0 - github.com/fluxcd/pkg/runtime v0.42.0 + github.com/fluxcd/pkg/apis/event v0.6.0 + github.com/fluxcd/pkg/apis/meta v1.2.0 + github.com/fluxcd/pkg/git v0.15.0 + github.com/fluxcd/pkg/git/gogit v0.15.0 + github.com/fluxcd/pkg/kustomize v1.4.0 + github.com/fluxcd/pkg/oci v0.33.0 + github.com/fluxcd/pkg/runtime v0.43.0 github.com/fluxcd/pkg/sourceignore v0.3.5 - github.com/fluxcd/pkg/ssa v0.32.0 - github.com/fluxcd/pkg/ssh v0.8.2 + github.com/fluxcd/pkg/ssa v0.34.0 + github.com/fluxcd/pkg/ssh v0.9.0 github.com/fluxcd/pkg/tar v0.4.0 github.com/fluxcd/pkg/version v0.2.2 github.com/fluxcd/source-controller/api v1.1.2 - github.com/go-git/go-git/v5 v5.9.0 - github.com/go-logr/logr v1.2.4 + github.com/go-git/go-git/v5 v5.10.0 + github.com/go-logr/logr v1.3.0 github.com/gonvenience/bunt v1.3.5 github.com/gonvenience/ytbx v1.4.4 - github.com/google/go-cmp v0.5.9 + github.com/google/go-cmp v0.6.0 github.com/google/go-containerregistry v0.16.1 github.com/hashicorp/go-cleanhttp v0.5.2 - github.com/homeport/dyff v1.5.8 + github.com/homeport/dyff v1.6.0 github.com/lucasb-eyer/go-colorful v1.2.0 github.com/manifoldco/promptui v0.9.0 github.com/mattn/go-shellwords v1.0.12 github.com/olekukonko/tablewriter v0.0.5 - github.com/onsi/gomega v1.28.0 + github.com/onsi/gomega v1.30.0 github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 - github.com/spf13/cobra v1.7.0 + github.com/spf13/cobra v1.8.0 github.com/spf13/pflag v1.0.5 github.com/theckman/yacspin v0.13.12 - golang.org/x/crypto v0.14.0 - golang.org/x/term v0.13.0 - golang.org/x/text v0.13.0 - k8s.io/api v0.27.4 - k8s.io/apiextensions-apiserver v0.27.4 - k8s.io/apimachinery v0.27.4 - k8s.io/cli-runtime v0.27.4 - k8s.io/client-go v0.27.4 - k8s.io/kubectl v0.27.4 - sigs.k8s.io/cli-utils v0.35.0 - sigs.k8s.io/controller-runtime v0.15.1 - sigs.k8s.io/kustomize/api v0.13.4 - sigs.k8s.io/kustomize/kyaml v0.14.2 - sigs.k8s.io/yaml v1.3.0 + golang.org/x/crypto v0.15.0 + golang.org/x/term v0.14.0 + golang.org/x/text v0.14.0 + k8s.io/api v0.28.4 + k8s.io/apiextensions-apiserver v0.28.4 + k8s.io/apimachinery v0.28.4 + k8s.io/cli-runtime v0.28.4 + k8s.io/client-go v0.28.4 + k8s.io/kubectl v0.28.4 + sigs.k8s.io/controller-runtime v0.16.3 + sigs.k8s.io/kustomize/api v0.15.0 + sigs.k8s.io/kustomize/kyaml v0.15.0 + sigs.k8s.io/yaml v1.4.0 ) require ( @@ -92,9 +92,9 @@ require ( github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/chai2010/gettext-go v1.0.2 // indirect github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e // indirect - github.com/cloudflare/circl v1.3.3 // indirect + github.com/cloudflare/circl v1.3.6 // indirect github.com/containerd/stargz-snapshotter/estargz v0.14.3 // indirect - github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect + github.com/cpuguy83/go-md2man/v2 v2.0.3 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/davidmz/go-pageant v1.0.2 // indirect github.com/docker/cli v24.0.0+incompatible // indirect @@ -105,22 +105,22 @@ require ( github.com/docker/go-metrics v0.0.1 // indirect github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1 // indirect github.com/drone/envsubst v1.0.3 // indirect - github.com/emicklei/go-restful/v3 v3.10.0 // indirect + github.com/emicklei/go-restful/v3 v3.11.0 // indirect github.com/emirpasic/gods v1.18.1 // indirect - github.com/evanphx/json-patch v5.6.0+incompatible // indirect - github.com/evanphx/json-patch/v5 v5.6.0 // indirect + github.com/evanphx/json-patch v5.7.0+incompatible // indirect + github.com/evanphx/json-patch/v5 v5.7.0 // indirect github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f // indirect github.com/fatih/color v1.13.0 // indirect github.com/felixge/httpsnoop v1.0.3 // indirect github.com/fluxcd/pkg/apis/acl v0.1.0 // indirect - github.com/fluxcd/pkg/apis/kustomize v1.1.1 // indirect + github.com/fluxcd/pkg/apis/kustomize v1.2.0 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/go-errors/errors v1.4.2 // indirect github.com/go-fed/httpsig v1.1.0 // indirect github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect github.com/go-git/go-billy/v5 v5.5.0 // indirect github.com/go-openapi/jsonpointer v0.19.6 // indirect - github.com/go-openapi/jsonreference v0.20.1 // indirect + github.com/go-openapi/jsonreference v0.20.2 // indirect github.com/go-openapi/swag v0.22.3 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang-jwt/jwt/v5 v5.0.0 // indirect @@ -132,18 +132,18 @@ require ( github.com/gonvenience/text v1.0.7 // indirect github.com/gonvenience/wrap v1.1.2 // indirect github.com/google/btree v1.1.2 // indirect - github.com/google/gnostic v0.6.9 // indirect + github.com/google/gnostic-models v0.6.8 // indirect github.com/google/go-github/v55 v55.0.0 // indirect github.com/google/go-querystring v1.1.0 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect - github.com/google/uuid v1.3.0 // indirect + github.com/google/uuid v1.4.0 // indirect github.com/gorilla/handlers v1.5.1 // indirect github.com/gorilla/mux v1.8.0 // indirect github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect - github.com/hashicorp/go-retryablehttp v0.7.4 // indirect + github.com/hashicorp/go-retryablehttp v0.7.5 // indirect github.com/hashicorp/go-version v1.5.0 // indirect github.com/hashicorp/golang-lru/arc/v2 v2.0.5 // indirect github.com/hashicorp/golang-lru/v2 v2.0.5 // indirect @@ -162,13 +162,13 @@ require ( github.com/mattn/go-colorable v0.1.12 // indirect github.com/mattn/go-isatty v0.0.19 // indirect github.com/mattn/go-runewidth v0.0.13 // indirect - github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect + github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/go-ps v1.0.0 // indirect github.com/mitchellh/go-wordwrap v1.0.1 // indirect github.com/mitchellh/hashstructure v1.1.0 // indirect github.com/moby/spdystream v0.2.0 // indirect - github.com/moby/term v0.0.0-20221205130635-1aeaba878587 // indirect + github.com/moby/term v0.5.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 // indirect @@ -179,40 +179,42 @@ require ( github.com/pjbgf/sha1cd v0.3.0 // indirect github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 // indirect github.com/pkg/errors v0.9.1 // indirect - github.com/prometheus/client_golang v1.16.0 // indirect - github.com/prometheus/client_model v0.4.0 // indirect - github.com/prometheus/common v0.42.0 // indirect - github.com/prometheus/procfs v0.10.1 // indirect + github.com/prometheus/client_golang v1.17.0 // indirect + github.com/prometheus/client_model v0.5.0 // indirect + github.com/prometheus/common v0.45.0 // indirect + github.com/prometheus/procfs v0.12.0 // indirect github.com/rivo/uniseg v0.2.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/sergi/go-diff v1.3.1 // indirect github.com/sirupsen/logrus v1.9.3 // indirect - github.com/skeema/knownhosts v1.2.0 // indirect + github.com/skeema/knownhosts v1.2.1 // indirect github.com/texttheater/golang-levenshtein v1.0.1 // indirect github.com/vbatts/tar-split v0.11.3 // indirect github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74 // indirect github.com/xanzy/go-gitlab v0.93.1 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect - github.com/xlab/treeprint v1.1.0 // indirect - go.starlark.net v0.0.0-20221028183056-acb66ad56dd2 // indirect - golang.org/x/mod v0.12.0 // indirect - golang.org/x/net v0.17.0 // indirect - golang.org/x/oauth2 v0.13.0 // indirect - golang.org/x/sync v0.3.0 // indirect - golang.org/x/sys v0.13.0 // indirect - golang.org/x/time v0.3.0 // indirect - golang.org/x/tools v0.13.0 // indirect - gomodules.xyz/jsonpatch/v2 v2.3.0 // indirect + github.com/xlab/treeprint v1.2.0 // indirect + go.starlark.net v0.0.0-20230525235612-a134d8f9ddca // indirect + golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e // indirect + golang.org/x/mod v0.14.0 // indirect + golang.org/x/net v0.18.0 // indirect + golang.org/x/oauth2 v0.14.0 // indirect + golang.org/x/sync v0.5.0 // indirect + golang.org/x/sys v0.14.0 // indirect + golang.org/x/time v0.4.0 // indirect + golang.org/x/tools v0.15.0 // indirect + gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/protobuf v1.31.0 // indirect + gopkg.in/evanphx/json-patch.v5 v5.6.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/component-base v0.27.4 // indirect + k8s.io/component-base v0.28.4 // indirect k8s.io/klog/v2 v2.100.1 // indirect - k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f // indirect - k8s.io/utils v0.0.0-20230505201702-9f6742963106 // indirect + k8s.io/kube-openapi v0.0.0-20231113174909-778a5567bc1e // indirect + k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect - sigs.k8s.io/structured-merge-diff/v4 v4.3.0 // indirect + sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect ) diff --git a/go.sum b/go.sum index 44fca985..554510c9 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,4 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= code.gitea.io/sdk/gitea v0.16.0 h1:gAfssETO1Hv9QbE+/nhWu7EjoFQYKt6kPoyDytQgw00= code.gitea.io/sdk/gitea v0.16.0/go.mod h1:ndkDk99BnfiUCCYEUhpNzi0lpmApXlwRFqClBlOlEBg= dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= @@ -26,15 +25,13 @@ github.com/Masterminds/semver/v3 v3.2.1/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYr github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 h1:kkhsdkhsCvIsutKu5zLMgWtgh9YxGCNAw8Ad8hjwfYg= -github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= +github.com/ProtonMail/go-crypto v0.0.0-20231012073058-a7379d079e0e h1:NfjGPY2A8SSRJvXny111ZPoB57LT5lWgX4XiUjW10eY= +github.com/ProtonMail/go-crypto v0.0.0-20231012073058-a7379d079e0e/go.mod h1:K4vciqCJaZ1Ghw/SvtJbEAM4soEtwDCNVqkdQIIujwU= github.com/acomagu/bufpipe v1.0.4 h1:e3H4WUzM3npvo5uv95QuJM3cQspFNtFBzvJ2oNjKIDQ= github.com/acomagu/bufpipe v1.0.4/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/aws/aws-sdk-go-v2 v1.21.0 h1:gMT0IW+03wtYJhRqTVYn0wLzwdnK9sRMcxmtfGzRdJc= github.com/aws/aws-sdk-go-v2 v1.21.0/go.mod h1:/RfNgGmRxI+iFOB1OeJUyxiU+9s88k3pfHvDagGEp0M= @@ -68,10 +65,8 @@ github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bshuster-repo/logrus-logstash-hook v1.0.0 h1:e+C0SB5R1pu//O4MQ3f9cFuPGoOVeF2fE4Og9otCc70= github.com/bshuster-repo/logrus-logstash-hook v1.0.0/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk= -github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chai2010/gettext-go v1.0.2 h1:1Lwwip6Q2QGsAdl/ZKPCwTe9fe0CjlUbqj5bFNSjIRk= @@ -83,15 +78,14 @@ github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5P github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1 h1:q763qf9huN11kDQavWsoZXJNW3xEE4JJyHa5Q25/sd8= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cloudflare/circl v1.3.3 h1:fE/Qz0QdIGqeWfnwq0RE0R7MI51s0M2E4Ga9kq5AEMs= github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cloudflare/circl v1.3.6 h1:/xbKIqSHbZXHwkhbrhrt2YOHIwYJlXH94E3tI/gDlUg= +github.com/cloudflare/circl v1.3.6/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= github.com/containerd/stargz-snapshotter/estargz v0.14.3 h1:OqlDCK3ZVUO6C3B/5FSkDwbkEETK84kQgEeFwDC+62k= github.com/containerd/stargz-snapshotter/estargz v0.14.3/go.mod h1:KY//uOCIkSuNAHhJogcZtrNHdKrA99/FCCRjE3HD36o= -github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/cpuguy83/go-md2man/v2 v2.0.3 h1:qMCsGGgs+MAzDFyp9LpAe1Lqy/fY/qCovCm0qnXZOBM= +github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg= @@ -118,24 +112,19 @@ github.com/docker/go-metrics v0.0.1 h1:AgB/0SvBxihN0X8OR4SjsblXkbMvalQ8cjmtKQ2rQ github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw= github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1 h1:ZClxb8laGDf5arXfYcAtECDFgAgHklGI8CxgjHnXKJ4= github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE= -github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/drone/envsubst v1.0.3 h1:PCIBwNDYjs50AsLZPYdfhSATKaRg/FJmDc2D6+C2x8g= github.com/drone/envsubst v1.0.3/go.mod h1:N2jZmlMufstn1KEqvbHjw40h1KyTmnVzHcSc9bFiJ2g= -github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a h1:mATvB/9r/3gvcejNsXKSkQ6lcIaNec2nyfOdlTBR2lU= -github.com/emicklei/go-restful/v3 v3.10.0 h1:X4gma4HM7hFm6WMeAsTfqA0GOfdNoCzBIkHGoRLGXuM= -github.com/emicklei/go-restful/v3 v3.10.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= +github.com/elazarl/goproxy v0.0.0-20231117061959-7cc037d33fb5 h1:m62nsMU279qRD9PQSWD1l66kmkXzuYcnVJqL4XLeV2M= +github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g= +github.com/emicklei/go-restful/v3 v3.11.0/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= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/evanphx/json-patch v5.6.0+incompatible h1:jBYDEEiFBPxA0v50tFdvOzQQTCvpL6mnFh5mB2/l16U= -github.com/evanphx/json-patch v5.6.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJCLunww= -github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= +github.com/evanphx/json-patch v5.7.0+incompatible h1:vgGkfT/9f8zE6tvSCe74nfpAVDQ2tG6yudJd8LBksgI= +github.com/evanphx/json-patch v5.7.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch/v5 v5.7.0 h1:nJqP7uwL84RJInrohHfW0Fx3awjbm8qZeFv0nW9SYGc= +github.com/evanphx/json-patch/v5 v5.7.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ= github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f h1:Wl78ApPPB2Wvf/TIe2xdyJxTlb6obmF18d8QdkxNDu4= github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f/go.mod h1:OSYXu++VVOHnXeitef/D8n/6y4QV8uLHSFXX4NeXMGc= github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= @@ -143,7 +132,8 @@ github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYF github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/felixge/httpsnoop v1.0.3 h1:s/nj+GCswXYzN5v2DpNMuMQYe+0DDwt5WVCU6CWBdXk= github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0= +github.com/fluxcd/cli-utils v0.36.0-flux.1 h1:004HtB/p47xqkTCGZhc1vVuXNzef7+N3wT364eFk7WA= +github.com/fluxcd/cli-utils v0.36.0-flux.1/go.mod h1:c+uMMDqGg8WKwBNeWKDDFEuDDHICDWAHthzosAKF2PA= github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= github.com/fluxcd/go-git-providers v0.19.1 h1:LXRFpHdPCmO+Uegw2MvAU3KiEHn1PRV2c//ii/HhpeY= github.com/fluxcd/go-git-providers v0.19.1/go.mod h1:eN0JpfkQqS/6yJ1I6DW3z1XLCC2JZK+55Ues+0Ur3Ds= @@ -159,29 +149,29 @@ github.com/fluxcd/notification-controller/api v1.1.0 h1:qx5t5DmArfPLxG2bsYZXIqDX github.com/fluxcd/notification-controller/api v1.1.0/go.mod h1:6MqWVQeI5yrYR7zp0GFqsfXitNPGJrnfOWxO2w3jylg= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= -github.com/fluxcd/pkg/apis/event v0.5.2 h1:WtnCOeWglf7wR3dpyiWxb1JtYkw1G5OXcERb1QopFpA= -github.com/fluxcd/pkg/apis/event v0.5.2/go.mod h1:5l6SSxVTkqrXrYjgEqAajOOHkl4x0TPocAuSdu+3AEs= -github.com/fluxcd/pkg/apis/kustomize v1.1.1 h1:MSGn4z0R9PptmoPFHnx2nEZ8Jtl1sKfw0cuDQY2HYwM= -github.com/fluxcd/pkg/apis/kustomize v1.1.1/go.mod h1:0pCu0ecIY+ZM0iE/hOHYwCMZ3b0SpBrjJ1SH3FFyYdE= -github.com/fluxcd/pkg/apis/meta v1.1.2 h1:Unjo7hxadtB2dvGpeFqZZUdsjpRA08YYSBb7dF2WIAM= -github.com/fluxcd/pkg/apis/meta v1.1.2/go.mod h1:BHQyRHCskGMEDf6kDGbgQ+cyiNpUHbLsCOsaMYM2maI= -github.com/fluxcd/pkg/git v0.14.0 h1:gefX0A1HkoFhT9mX+ybw2EBNTgebLje0TPyBlKpYrlk= -github.com/fluxcd/pkg/git v0.14.0/go.mod h1:Oq1kLyTk8u2hlGk+7HC1uQ4xX5i0/umJSn+dSIsE6BY= -github.com/fluxcd/pkg/git/gogit v0.14.0 h1:4apklSXh55panQzgFIUwHZUei6B/zqXm4ygtF3jb6uI= -github.com/fluxcd/pkg/git/gogit v0.14.0/go.mod h1:EfTdPc1AaGS1NTF4h6HqXqyKEdOV0UyBeG7khQ7/ai0= +github.com/fluxcd/pkg/apis/event v0.6.0 h1:AUaeee1CGWb65BLqVximHXG8Gcu6vWuYONIq6tVpjgo= +github.com/fluxcd/pkg/apis/event v0.6.0/go.mod h1:OEzWcX/oPbMmkCvC9QGoK27JXFvUZgBhLD+zgxZe47A= +github.com/fluxcd/pkg/apis/kustomize v1.2.0 h1:vkVs+OumxaWso0jNCqdgFFfMHdh+qtZhykTkjl7OgmA= +github.com/fluxcd/pkg/apis/kustomize v1.2.0/go.mod h1:VF7tR/WuVFeum+HaMTHwp+eCtsHiiQlY6ihgqtAnW/M= +github.com/fluxcd/pkg/apis/meta v1.2.0 h1:O766PzGAdMdQKybSflGL8oV0+GgCNIkdsxfalRyzeO8= +github.com/fluxcd/pkg/apis/meta v1.2.0/go.mod h1:fU/Az9AoVyIxC0oI4ihG0NVMNnvrcCzdEym3wxjIQsc= +github.com/fluxcd/pkg/git v0.15.0 h1:QPqv+b4sQXXpWQhigf/sPE5qzK4BrQhkltnYuEy4AYw= +github.com/fluxcd/pkg/git v0.15.0/go.mod h1:zqmLfw4d+mS77bMRkeQ+8dmFSgxB/c2ZDkafIyY6bAQ= +github.com/fluxcd/pkg/git/gogit v0.15.0 h1:GV8XaRp7CtlRuDallrJgMR6s1YHIMZi5+zyXMOJsS0c= +github.com/fluxcd/pkg/git/gogit v0.15.0/go.mod h1:9KBhXE1czARGT6QqHYVMfr2RbvPpguKwCdm4LgkP3nY= github.com/fluxcd/pkg/gittestserver v0.8.6 h1:YM8prVKB3LC9LBBe+a2p7l1BlfV9erXCgC1em9sbqW4= -github.com/fluxcd/pkg/kustomize v1.3.4 h1:+XA4umfhkFqrNYQp3ZmKSJy4i3LWjbgoi6H4PllkkkA= -github.com/fluxcd/pkg/kustomize v1.3.4/go.mod h1:nsbsNGe6nQY6DGYYPowFGQlhxFRcaRFvbwqhCbwAQuE= -github.com/fluxcd/pkg/oci v0.32.0 h1:bszRg0pzdfQ0iHLTvjMkDJysc+rlw2TS4c0uCl2MYDQ= -github.com/fluxcd/pkg/oci v0.32.0/go.mod h1:SqbTfdbxNDfrKkZuNtlBKQj9M7E5Hpw0UuxukS48ApA= -github.com/fluxcd/pkg/runtime v0.42.0 h1:a5DQ/f90YjoHBmiXZUpnp4bDSLORjInbmqP7K11L4uY= -github.com/fluxcd/pkg/runtime v0.42.0/go.mod h1:p6A3xWVV8cKLLQW0N90GehKgGMMmbNYv+OSJ/0qB0vg= +github.com/fluxcd/pkg/kustomize v1.4.0 h1:1c9dwLkccFGEVkE+CvCYqybtBoInYq6OePTkkgTfLzQ= +github.com/fluxcd/pkg/kustomize v1.4.0/go.mod h1:o0UgMmAjyCwsUSdBIDJ9NgXfOEJ6Iojs5PQ2agIRapc= +github.com/fluxcd/pkg/oci v0.33.0 h1:OC9eJzazldcUAyWS5Ul1XvUISpfJBRzDZqLjYyyNG2g= +github.com/fluxcd/pkg/oci v0.33.0/go.mod h1:XNxj6Pr1ddmC5EVSo+R3Nlr5droAV0LxZ9HJ3V1GNwI= +github.com/fluxcd/pkg/runtime v0.43.0 h1:dU4cWct5VTpddGzJUU80zxNl80jbbVEN5Y5rbt4YUnw= +github.com/fluxcd/pkg/runtime v0.43.0/go.mod h1:RuqJ9VEXELjzgurK2+UXBBgVN1vS0hZ7CYVG2xBAEVM= github.com/fluxcd/pkg/sourceignore v0.3.5 h1:omcHTH5X5tlPr9w1b9T7WuJTOP+o/KdVdarYb4kgkCU= github.com/fluxcd/pkg/sourceignore v0.3.5/go.mod h1:6Xz3jErz8RsidsdrjUBBUGKes24rbdp/F38MnTGibEw= -github.com/fluxcd/pkg/ssa v0.32.0 h1:RBqs9DNrbJkFHjpfsiKilyean7gwqWFspSBTLOaBIHs= -github.com/fluxcd/pkg/ssa v0.32.0/go.mod h1:+Kf5euYAbvgJX645bo+IL7V/NlH0X7kGgFTr1W++I3c= -github.com/fluxcd/pkg/ssh v0.8.2 h1:WNfvTmnLnOUyXQDb8luSfmn1X0RIuhJBcKMFtKm6YsQ= -github.com/fluxcd/pkg/ssh v0.8.2/go.mod h1:ewbU9vakYYdGSX92qXhx6Kqi5tVQ3ppmGQakCX1R6Gw= +github.com/fluxcd/pkg/ssa v0.34.0 h1:hpMo0D7G3faieRYH39e9YD8Jl+aC2hTgUep8ojG5+LE= +github.com/fluxcd/pkg/ssa v0.34.0/go.mod h1:rhVh0EtYVUOznKXlz6E7JOSgdc8xWbIwA4L5HVtJRLA= +github.com/fluxcd/pkg/ssh v0.9.0 h1:egRvg4AKarObFKXsBDZ5oBZ5PCjmQ4Q6hX+6GmrdbH0= +github.com/fluxcd/pkg/ssh v0.9.0/go.mod h1:3KKbfcFn4l+HqYdHKqcu2LO8RvFv0Kh6tYRSUtONC/8= github.com/fluxcd/pkg/tar v0.4.0 h1:SuXpfXBIcSJ5R/yqQi2CBxBmV/i/LH0agqNAh2PWBZg= github.com/fluxcd/pkg/tar v0.4.0/go.mod h1:SyJBaQvuv2VA/rv4d1OHhCV6R8+9QKc9np193EzNHBc= github.com/fluxcd/pkg/version v0.2.2 h1:ZpVXECeLA5hIQMft11iLp6gN3cKcz6UNuVTQPw/bRdI= @@ -190,7 +180,6 @@ github.com/fluxcd/source-controller/api v1.1.2 h1:FfKDKVWnopo+Q2pOAxgHEjrtr4MP41 github.com/fluxcd/source-controller/api v1.1.2/go.mod h1:ZLkaUd1KQIjtLPCvO63Ni5zpnSTVBAkeRgFBzMItbDQ= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= @@ -200,20 +189,20 @@ github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66D github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= github.com/go-git/go-billy/v5 v5.5.0 h1:yEY4yhzCDuMGSv83oGxiBotRzhwhNr8VZyphhiu+mTU= github.com/go-git/go-billy/v5 v5.5.0/go.mod h1:hmexnoNsr2SJU1Ju67OaNz5ASJY3+sHgFRpCtpDCKow= -github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20230305113008-0c11038e723f h1:Pz0DHeFij3XFhoBRGUDPzSJ+w2UcK5/0JvF8DRI58r8= -github.com/go-git/go-git/v5 v5.9.0 h1:cD9SFA7sHVRdJ7AYck1ZaAa/yeuBvGPxwXDL8cxrObY= -github.com/go-git/go-git/v5 v5.9.0/go.mod h1:RKIqga24sWdMGZF+1Ekv9kylsDz6LzdTSI2s/OsZWE0= +github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 h1:eMje31YglSBqCdIqdhKBW8lokaMrL3uTkpGYlE2OOT4= +github.com/go-git/go-git/v5 v5.10.0 h1:F0x3xXrAWmhwtzoCokU4IMPcBdncG+HAAqi9FcOOjbQ= +github.com/go-git/go-git/v5 v5.10.0/go.mod h1:1FOZ/pQnqw24ghP2n7cunVl0ON55BsjPYvhWHvZGhoo= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= -github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY= +github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/zapr v1.2.4 h1:QHVo+6stLbfJmYGkQ7uGHUCu5hnAFAj6mDe6Ea0SeOo= github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE= github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= -github.com/go-openapi/jsonreference v0.20.1 h1:FBLnyygC4/IZZr893oiomc9XaghoveYTrLC1F86HID8= -github.com/go-openapi/jsonreference v0.20.1/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= +github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= +github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g= github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= @@ -231,17 +220,13 @@ github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfb github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/gomodule/redigo v1.8.2 h1:H5XSIre1MB5NbPYFp+i1NBbb5qN1W8Y8YAQoAYbkm8k= @@ -260,8 +245,8 @@ github.com/gonvenience/ytbx v1.4.4 h1:jQopwyaLsVGuwdxSiN4WkXjsEaFNPJ3V4lUj7eyEpz github.com/gonvenience/ytbx v1.4.4/go.mod h1:w37+MKCPcCMY/jpPNmEklD4xKqrOAVBO6kIWW2+uI6M= github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= -github.com/google/gnostic v0.6.9 h1:ZK/5VhkoX835RikCHpSUJV9a+S3e1zLh59YnyWeBW+0= -github.com/google/gnostic v0.6.9/go.mod h1:Nm8234We1lq6iB9OmlgNv3nH91XLLVZHCDayfA3xq+E= +github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= +github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -271,8 +256,9 @@ github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-containerregistry v0.16.1 h1:rUEt426sR6nyrL3gt+18ibRcvYpKYdpsa5ZW7MA08dQ= github.com/google/go-containerregistry v0.16.1/go.mod h1:u0qB2l7mvtWVR5kNcbFIhFY1hLbf8eeGapA+vbFDCtQ= github.com/google/go-github/v55 v55.0.0 h1:4pp/1tNMB9X/LuAhs5i0KQAE40NmiR/y6prLNb9x9cg= @@ -285,9 +271,8 @@ github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/ github.com/google/pprof v0.0.0-20230602150820-91b7bce49751 h1:hR7/MlvK23p6+lIw9SN1TigNLn9ZnF3W4SYRKq2gAHs= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= -github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4= +github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= @@ -295,7 +280,6 @@ github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB7 github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 h1:+ngKgrYPPJrOjhax5N+uePQ0Fh1Z7PheYoUI/0nzkPA= github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= -github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -305,23 +289,22 @@ github.com/hashicorp/go-hclog v0.9.2 h1:CG6TE5H9/JXsFWJCfoIVpKFIkFe6ysEuHirp4DxC github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= -github.com/hashicorp/go-retryablehttp v0.7.4 h1:ZQgVdpTdAL7WpMIwLzCfbalOcSUdkDZnpUv3/+BxzFA= -github.com/hashicorp/go-retryablehttp v0.7.4/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8= +github.com/hashicorp/go-retryablehttp v0.7.5 h1:bJj+Pj19UZMIweq/iie+1u5YCdGrnxCT9yvm0e+Nd5M= +github.com/hashicorp/go-retryablehttp v0.7.5/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8= github.com/hashicorp/go-version v1.5.0 h1:O293SZ2Eg+AAYijkVK3jR786Am1bhDEh2GHT0tIVE5E= github.com/hashicorp/go-version v1.5.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/golang-lru/arc/v2 v2.0.5 h1:l2zaLDubNhW4XO3LnliVj0GXO3+/CGNJAg1dcN2Fpfw= github.com/hashicorp/golang-lru/arc/v2 v2.0.5/go.mod h1:ny6zBSQZi2JxIeYcv7kt2sH2PXJtirBN7RDhRpxPkxU= github.com/hashicorp/golang-lru/v2 v2.0.5 h1:wW7h1TG88eUIJ2i69gaE3uNVtEPIagzhGvHgwfx2Vm4= github.com/hashicorp/golang-lru/v2 v2.0.5/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= -github.com/homeport/dyff v1.5.8 h1:CZvnYFh6Pr/c+d32EnWODAHRTctrDKkz0tFr6yTYCpU= -github.com/homeport/dyff v1.5.8/go.mod h1:S669ekLW2ttUp6lT1d0jIlmH+eAsP3psfl9K6oMIBeU= +github.com/homeport/dyff v1.6.0 h1:AN+ikld0Fy+qx34YE7655b/bpWuxS6cL9k852pE2GUc= +github.com/homeport/dyff v1.6.0/go.mod h1:FlAOFYzeKvxmU5nTrnG+qrlJVWpsFew7pt8L99p5q8k= github.com/imdario/mergo v0.3.15 h1:M8XP7IuFNsqUx6VPK2P9OSmsYsI/YFaGil0uD21V3dM= github.com/imdario/mergo v0.3.15/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= @@ -342,7 +325,6 @@ github.com/klauspost/compress v1.16.5/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQs github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= @@ -376,8 +358,8 @@ github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh github.com/mattn/go-shellwords v1.0.12 h1:M2zGm7EW6UQJvDeQxo4T51eKPurbeFbe8WtebGE2xrk= github.com/mattn/go-shellwords v1.0.12/go.mod h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lLtQsUlTZDWQ8Y= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= -github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg= +github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-ps v1.0.0 h1:i6ampVEEF4wQFF+bkYfwYgY+F/uYJDktmvLPf7qIgjc= @@ -388,8 +370,8 @@ github.com/mitchellh/hashstructure v1.1.0 h1:P6P1hdjqAAknpY/M1CGipelZgp+4y9ja9km github.com/mitchellh/hashstructure v1.1.0/go.mod h1:xUDAozZz0Wmdiufv0uyhnHkUTN6/6d8ulp4AwfLKrmA= github.com/moby/spdystream v0.2.0 h1:cjW1zVyyoiM0T7b6UoySUFqzXMoqRckQtXwGPiBhOM8= github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= -github.com/moby/term v0.0.0-20221205130635-1aeaba878587 h1:HfkjXDfhgVaN5rmueG8cL8KKeFNecRCXFhaJ2qZ5SKA= -github.com/moby/term v0.0.0-20221205130635-1aeaba878587/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= +github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0= +github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -406,14 +388,14 @@ github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= -github.com/onsi/ginkgo/v2 v2.12.0 h1:UIVDowFPwpg6yMUpPjGkYvf06K3RAiJXUhCxEwQVHRI= -github.com/onsi/gomega v1.28.0 h1:i2rg/p9n/UqIDAMFUJ6qIUUMcsqOuUHgbpbu235Vr1c= -github.com/onsi/gomega v1.28.0/go.mod h1:A1H2JE76sI14WIP57LMKj7FVfCHx3g3BcZVjJG8bjX8= +github.com/onsi/ginkgo/v2 v2.13.1 h1:LNGfMbR2OVGBfXjvRZIZ2YCTQdGKtPLvuI1rMCCj3OU= +github.com/onsi/gomega v1.30.0 h1:hvMK7xYz4D3HapigLTeGdId/NcfQx1VHMJc60ew99+8= +github.com/onsi/gomega v1.30.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.0-rc3 h1:fzg1mXZFj8YdPeNkRXMg+zb88BFV0Ys52cJydRwBkb8= github.com/opencontainers/image-spec v1.1.0-rc3/go.mod h1:X4pATf0uXsnn3g5aiGIsVnJBR4mxhKzfwmvK/B2NTm8= -github.com/otiai10/copy v1.12.0 h1:cLMgSQnXBs1eehF0Wy/FAGsgDTDmAqFR7rQylBb1nDY= +github.com/otiai10/copy v1.14.0 h1:dCI/t1iTdYGtkvCuBG2BgR6KZa83PTclw4U5n2wAllU= github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= @@ -423,7 +405,6 @@ github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFz github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU= github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= @@ -431,25 +412,24 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= -github.com/prometheus/client_golang v1.16.0 h1:yk/hx9hDbrGHovbci4BY+pRMfSuuat626eFsHb7tmT8= -github.com/prometheus/client_golang v1.16.0/go.mod h1:Zsulrv/L9oM40tJ7T815tM89lFEugiJ9HzIqaAx4LKc= +github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q= +github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUooCfx1yqY= -github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU= +github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw= +github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI= 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.42.0 h1:EKsfXEYo4JpWMHH5cg+KOUWeuJSov1Id8zGR8eeI1YM= -github.com/prometheus/common v0.42.0/go.mod h1:xBwqVerjNdUDjgODMpudtOMwlOwf2SaTr1yjz4b7Zbc= +github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM= +github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/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.10.1 h1:kYK1Va/YMlutzCGazswoHKo//tZVlFpKYh+PymziUAg= -github.com/prometheus/procfs v0.10.1/go.mod h1:nwNm2aOCAYw8uTR/9bWRREkZFxAUcWzPHWJq+XBB/FM= +github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= +github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= @@ -460,14 +440,12 @@ github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= -github.com/skeema/knownhosts v1.2.0 h1:h9r9cf0+u7wSE+M183ZtMGgOJKiL96brpaz5ekfJCpM= -github.com/skeema/knownhosts v1.2.0/go.mod h1:g4fPeYpque7P0xefxtGzV81ihjC8sX2IqpAoNkjxbMo= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= -github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= +github.com/skeema/knownhosts v1.2.1 h1:SHWdIUa82uGZz+F+47k8SY4QhhI291cXCpopT1lK2AQ= +github.com/skeema/knownhosts v1.2.1/go.mod h1:xYbVRSPxqBZFrdmDyMmsOs+uX1UZC3nTN3ThzgDxUwo= +github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= +github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= @@ -496,19 +474,15 @@ github.com/xanzy/go-gitlab v0.93.1 h1:f7J33cw/P9b/8paIOoH0F3H+TFrswvWHs6yUgoTp9L github.com/xanzy/go-gitlab v0.93.1/go.mod h1:5ryv+MnpZStBH8I/77HuQBsMbBGANtVpLWC15qOjWAw= github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= -github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= -github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= -github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= -github.com/xlab/treeprint v1.1.0 h1:G/1DjNkPpfZCFt9CSh6b5/nY4VimlbHF3Rh4obvtzDk= -github.com/xlab/treeprint v1.1.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd/WEJu0= +github.com/xlab/treeprint v1.2.0 h1:HzHnuAF1plUN2zGlAFHbSQP2qJ0ZAD3XF5XD7OesXRQ= +github.com/xlab/treeprint v1.2.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd/WEJu0= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -go.starlark.net v0.0.0-20221028183056-acb66ad56dd2 h1:5/KzhcSqd4UgY51l17r7C5g/JiE6DRw1Vq7VJfQHuMc= -go.starlark.net v0.0.0-20221028183056-acb66ad56dd2/go.mod h1:kIVgS18CjmEC3PqMd5kaJSGEifyV/CeB9x506ZJ1Vbk= +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/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A= -go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= @@ -519,10 +493,12 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= -golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= -golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= +golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= +golang.org/x/crypto v0.15.0 h1:frVn1TEaCEaZcn3Tmd7Y2b5KKPaZ+I32Q2OA3kYp5TA= +golang.org/x/crypto v0.15.0/go.mod h1:4ChreQoLWfG3xLDer1WdlH5NdlQ3+mwnQq1YTKY+72g= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e h1:+WEEuIdZHnUeJJmEUjyYC2gfUMj69yZXw17EnHg/otA= +golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -530,12 +506,11 @@ golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.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.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc= -golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= +golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -543,22 +518,18 @@ golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.6.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.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= -golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.18.0 h1:mIYleuAkSbHh0tCv7RvjL3F6ZVbLjq4+R7zbOn3Kokg= +golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.13.0 h1:jDDenyj+WgFtmV3zYVoi8aE2BwtXFLWOA67ZfNWftiY= -golang.org/x/oauth2 v0.13.0/go.mod h1:/JMhi4ZRXAf4HG9LiNmxvk+45+96RUlVThiH8FzNBn0= +golang.org/x/oauth2 v0.14.0 h1:P0Vrf/2538nmC0H+pEQ3MNFRRnVR7RlqyVw+bvm26z0= +golang.org/x/oauth2 v0.14.0/go.mod h1:lAtNWgaWfL4cm7j2OV8TxGi9Qb7ECORx8DktCY74OwM= 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= @@ -567,8 +538,8 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= -golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= +golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -579,13 +550,10 @@ golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -600,29 +568,29 @@ golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= -golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q= +golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 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= golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/term v0.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek= -golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.14.0 h1:LGK9IlZ8T9jvdy6cTdfKUCltatMFOehAQo9SRC46UQ8= +golang.org/x/term v0.14.0/go.mod h1:TySc+nGkYR6qt8km8wUhuFRTVSMIX3XPR58y2lC8vww= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= -golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= -golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= -golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/time v0.4.0 h1:Z81tqI5ddIoXDPvVQ7/7CC9TnLM7ubaFG2qXYd5BbYY= +golang.org/x/time v0.4.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= @@ -633,42 +601,34 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= 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.13.0 h1:Iey4qkscZuv0VvIt8E0neZjtPVQFSc870HQ448QgEmQ= -golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= +golang.org/x/tools v0.15.0 h1:zdAyfUGbYmuVokhzVmghFl2ZJh5QhcfebBgmVPFYA+8= +golang.org/x/tools v0.15.0/go.mod h1:hpksKq4dtpQWS1uQ61JkdqWM3LscIS6Slf+VVkm+wQk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gomodules.xyz/jsonpatch/v2 v2.3.0 h1:8NFhfS6gzxNqjLIYnZxg319wZ5Qjnx4m/CcX+Klzazc= -gomodules.xyz/jsonpatch/v2 v2.3.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY= +gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw= +gomodules.xyz/jsonpatch/v2 v2.4.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= -google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= 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= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= @@ -676,6 +636,8 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/evanphx/json-patch.v5 v5.6.0 h1:BMT6KIwBD9CaU91PJCZIe46bDmBWa9ynTQgJIOpfQBk= +gopkg.in/evanphx/json-patch.v5 v5.6.0/go.mod h1:/kvTRh1TVm5wuM6OkHxqXtE/1nUZZpihg29RtuIyfvk= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= @@ -683,7 +645,6 @@ gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= @@ -693,37 +654,35 @@ gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= gotest.tools/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -k8s.io/api v0.27.4 h1:0pCo/AN9hONazBKlNUdhQymmnfLRbSZjd5H5H3f0bSs= -k8s.io/api v0.27.4/go.mod h1:O3smaaX15NfxjzILfiln1D8Z3+gEYpjEpiNA/1EVK1Y= -k8s.io/apiextensions-apiserver v0.27.4 h1:ie1yZG4nY/wvFMIR2hXBeSVq+HfNzib60FjnBYtPGSs= -k8s.io/apiextensions-apiserver v0.27.4/go.mod h1:KHZaDr5H9IbGEnSskEUp/DsdXe1hMQ7uzpQcYUFt2bM= -k8s.io/apimachinery v0.27.4 h1:CdxflD4AF61yewuid0fLl6bM4a3q04jWel0IlP+aYjs= -k8s.io/apimachinery v0.27.4/go.mod h1:XNfZ6xklnMCOGGFNqXG7bUrQCoR04dh/E7FprV6pb+E= -k8s.io/cli-runtime v0.27.4 h1:Zb0eci+58eHZNnoHhjRFc7W88s8dlG12VtIl3Nv2Hto= -k8s.io/cli-runtime v0.27.4/go.mod h1:k9Z1xiZq2xNplQmehpDquLgc+rE+pubpO1cK4al4Mlw= -k8s.io/client-go v0.27.4 h1:vj2YTtSJ6J4KxaC88P4pMPEQECWMY8gqPqsTgUKzvjk= -k8s.io/client-go v0.27.4/go.mod h1:ragcly7lUlN0SRPk5/ZkGnDjPknzb37TICq07WhI6Xc= -k8s.io/component-base v0.27.4 h1:Wqc0jMKEDGjKXdae8hBXeskRP//vu1m6ypC+gwErj4c= -k8s.io/component-base v0.27.4/go.mod h1:hoiEETnLc0ioLv6WPeDt8vD34DDeB35MfQnxCARq3kY= +k8s.io/api v0.28.4 h1:8ZBrLjwosLl/NYgv1P7EQLqoO8MGQApnbgH8tu3BMzY= +k8s.io/api v0.28.4/go.mod h1:axWTGrY88s/5YE+JSt4uUi6NMM+gur1en2REMR7IRj0= +k8s.io/apiextensions-apiserver v0.28.4 h1:AZpKY/7wQ8n+ZYDtNHbAJBb+N4AXXJvyZx6ww6yAJvU= +k8s.io/apiextensions-apiserver v0.28.4/go.mod h1:pgQIZ1U8eJSMQcENew/0ShUTlePcSGFq6dxSxf2mwPM= +k8s.io/apimachinery v0.28.4 h1:zOSJe1mc+GxuMnFzD4Z/U1wst50X28ZNsn5bhgIIao8= +k8s.io/apimachinery v0.28.4/go.mod h1:wI37ncBvfAoswfq626yPTe6Bz1c22L7uaJ8dho83mgg= +k8s.io/cli-runtime v0.28.4 h1:IW3aqSNFXiGDllJF4KVYM90YX4cXPGxuCxCVqCD8X+Q= +k8s.io/cli-runtime v0.28.4/go.mod h1:MLGRB7LWTIYyYR3d/DOgtUC8ihsAPA3P8K8FDNIqJ0k= +k8s.io/client-go v0.28.4 h1:Np5ocjlZcTrkyRJ3+T3PkXDpe4UpatQxj85+xjaD2wY= +k8s.io/client-go v0.28.4/go.mod h1:0VDZFpgoZfelyP5Wqu0/r/TRYcLYuJ2U1KEeoaPa1N4= +k8s.io/component-base v0.28.4 h1:c/iQLWPdUgI90O+T9TeECg8o7N3YJTiuz2sKxILYcYo= +k8s.io/component-base v0.28.4/go.mod h1:m9hR0uvqXDybiGL2nf/3Lf0MerAfQXzkfWhUY58JUbU= k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg= k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= -k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f h1:2kWPakN3i/k81b0gvD5C5FJ2kxm1WrQFanWchyKuqGg= -k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f/go.mod h1:byini6yhqGC14c3ebc/QwanvYwhuMWF6yz2F8uwW8eg= -k8s.io/kubectl v0.27.4 h1:RV1TQLIbtL34+vIM+W7HaS3KfAbqvy9lWn6pWB9els4= -k8s.io/kubectl v0.27.4/go.mod h1:qtc1s3BouB9KixJkriZMQqTsXMc+OAni6FeKAhq7q14= -k8s.io/utils v0.0.0-20230505201702-9f6742963106 h1:EObNQ3TW2D+WptiYXlApGNLVy0zm/JIBVY9i+M4wpAU= -k8s.io/utils v0.0.0-20230505201702-9f6742963106/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= -sigs.k8s.io/cli-utils v0.35.0 h1:dfSJaF1W0frW74PtjwiyoB4cwdRygbHnC7qe7HF0g/Y= -sigs.k8s.io/cli-utils v0.35.0/go.mod h1:ITitykCJxP1vaj1Cew/FZEaVJ2YsTN9Q71m02jebkoE= -sigs.k8s.io/controller-runtime v0.15.1 h1:9UvgKD4ZJGcj24vefUFgZFP3xej/3igL9BsOUTb/+4c= -sigs.k8s.io/controller-runtime v0.15.1/go.mod h1:7ngYvp1MLT+9GeZ+6lH3LOlcHkp/+tzA/fmHa4iq9kk= +k8s.io/kube-openapi v0.0.0-20231113174909-778a5567bc1e h1:snPmy96t93RredGRjKfMFt+gvxuVAncqSAyBveJtr4Q= +k8s.io/kube-openapi v0.0.0-20231113174909-778a5567bc1e/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA= +k8s.io/kubectl v0.28.4 h1:gWpUXW/T7aFne+rchYeHkyB8eVDl5UZce8G4X//kjUQ= +k8s.io/kubectl v0.28.4/go.mod h1:CKOccVx3l+3MmDbkXtIUtibq93nN2hkDR99XDCn7c/c= +k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSnlTLKgpAAttJvpI= +k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +sigs.k8s.io/controller-runtime v0.16.3 h1:2TuvuokmfXvDUamSx1SuAOO3eTyye+47mJCigwG62c4= +sigs.k8s.io/controller-runtime v0.16.3/go.mod h1:j7bialYoSn142nv9sCOJmQgDXQXxnroFU4VnX/brVJ0= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= -sigs.k8s.io/kustomize/api v0.13.4 h1:E38Hfx0G9R9v7vRgKshviPotJQETG0S2gD3JdHLCAsI= -sigs.k8s.io/kustomize/api v0.13.4/go.mod h1:Bkaavz5RKK6ZzP0zgPrB7QbpbBJKiHuD3BB0KujY7Ls= -sigs.k8s.io/kustomize/kyaml v0.14.2 h1:9WSwztbzwGszG1bZTziQUmVMrJccnyrLb5ZMKpJGvXw= -sigs.k8s.io/kustomize/kyaml v0.14.2/go.mod h1:AN1/IpawKilWD7V+YvQwRGUvuUOOWpjsHu6uHwonSF4= -sigs.k8s.io/structured-merge-diff/v4 v4.3.0 h1:UZbZAZfX0wV2zr7YZorDz6GXROfDFj6LvqCRm4VUVKk= -sigs.k8s.io/structured-merge-diff/v4 v4.3.0/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= -sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= -sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= +sigs.k8s.io/kustomize/api v0.15.0 h1:6Ca88kEOBVotHDw+y2IsIMYtg9Pvv7MKpW9JMyF/OH4= +sigs.k8s.io/kustomize/api v0.15.0/go.mod h1:p19kb+E14gN7zcIBR/nhByJDAfUa7N8mp6ZdH/mMXbg= +sigs.k8s.io/kustomize/kyaml v0.15.0 h1:ynlLMAxDhrY9otSg5GYE2TcIz31XkGZ2Pkj7SdolD84= +sigs.k8s.io/kustomize/kyaml v0.15.0/go.mod h1:+uMkBahdU1KNOj78Uta4rrXH+iH7wvg+nW7+GULvREA= +sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4= +sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= +sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= +sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= diff --git a/internal/build/diff.go b/internal/build/diff.go index 7714c6bb..b84037c2 100644 --- a/internal/build/diff.go +++ b/internal/build/diff.go @@ -35,10 +35,10 @@ import ( "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/util/errors" - "sigs.k8s.io/cli-utils/pkg/kstatus/polling" - "sigs.k8s.io/cli-utils/pkg/object" "sigs.k8s.io/yaml" + "github.com/fluxcd/cli-utils/pkg/kstatus/polling" + "github.com/fluxcd/cli-utils/pkg/object" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" "github.com/fluxcd/pkg/ssa" diff --git a/internal/tree/tree.go b/internal/tree/tree.go index b651a19a..fad06426 100644 --- a/internal/tree/tree.go +++ b/internal/tree/tree.go @@ -22,8 +22,8 @@ package tree import ( "strings" + "github.com/fluxcd/cli-utils/pkg/object" "github.com/fluxcd/pkg/ssa" - "sigs.k8s.io/cli-utils/pkg/object" ) const ( diff --git a/internal/utils/apply.go b/internal/utils/apply.go index 52bf67b8..94767623 100644 --- a/internal/utils/apply.go +++ b/internal/utils/apply.go @@ -27,13 +27,14 @@ import ( "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/cli-runtime/pkg/genericclioptions" - "sigs.k8s.io/cli-utils/pkg/kstatus/polling" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/kustomize/api/konfig" - "github.com/fluxcd/flux2/v2/pkg/manifestgen/kustomization" + "github.com/fluxcd/cli-utils/pkg/kstatus/polling" runclient "github.com/fluxcd/pkg/runtime/client" "github.com/fluxcd/pkg/ssa" + + "github.com/fluxcd/flux2/v2/pkg/manifestgen/kustomization" ) // Apply is the equivalent of 'kubectl apply --server-side -f'. diff --git a/pkg/bootstrap/bootstrap_plain_git.go b/pkg/bootstrap/bootstrap_plain_git.go index ba5a7f58..1be3d265 100644 --- a/pkg/bootstrap/bootstrap_plain_git.go +++ b/pkg/bootstrap/bootstrap_plain_git.go @@ -32,11 +32,11 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/cli-runtime/pkg/genericclioptions" - "sigs.k8s.io/cli-utils/pkg/object" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/kustomize/api/konfig" "sigs.k8s.io/yaml" + "github.com/fluxcd/cli-utils/pkg/object" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" "github.com/fluxcd/pkg/git" "github.com/fluxcd/pkg/git/repository" diff --git a/pkg/status/status.go b/pkg/status/status.go index f28b290c..8b61881c 100644 --- a/pkg/status/status.go +++ b/pkg/status/status.go @@ -24,14 +24,14 @@ import ( "time" "k8s.io/client-go/rest" - "sigs.k8s.io/cli-utils/pkg/kstatus/polling" - "sigs.k8s.io/cli-utils/pkg/kstatus/polling/aggregator" - "sigs.k8s.io/cli-utils/pkg/kstatus/polling/collector" - "sigs.k8s.io/cli-utils/pkg/kstatus/polling/event" - "sigs.k8s.io/cli-utils/pkg/kstatus/status" - "sigs.k8s.io/cli-utils/pkg/object" "sigs.k8s.io/controller-runtime/pkg/client" + "github.com/fluxcd/cli-utils/pkg/kstatus/polling" + "github.com/fluxcd/cli-utils/pkg/kstatus/polling/aggregator" + "github.com/fluxcd/cli-utils/pkg/kstatus/polling/collector" + "github.com/fluxcd/cli-utils/pkg/kstatus/polling/event" + "github.com/fluxcd/cli-utils/pkg/kstatus/status" + "github.com/fluxcd/cli-utils/pkg/object" runtimeclient "github.com/fluxcd/pkg/runtime/client" "github.com/fluxcd/flux2/v2/pkg/log" diff --git a/tests/azure/go.mod b/tests/azure/go.mod index 298cc7c3..8502c2b4 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -12,23 +12,23 @@ require ( github.com/fluxcd/image-reflector-controller/api v0.30.0 github.com/fluxcd/kustomize-controller/api v1.1.1 github.com/fluxcd/notification-controller/api v1.1.0 - github.com/fluxcd/pkg/apis/event v0.5.2 - github.com/fluxcd/pkg/apis/meta v1.1.2 - github.com/fluxcd/pkg/git v0.14.0 - github.com/fluxcd/pkg/git/gogit v0.14.0 + github.com/fluxcd/pkg/apis/event v0.6.0 + github.com/fluxcd/pkg/apis/meta v1.2.0 + github.com/fluxcd/pkg/git v0.15.0 + github.com/fluxcd/pkg/git/gogit v0.15.0 github.com/fluxcd/source-controller/api v1.1.2 - github.com/go-git/go-git/v5 v5.9.0 + github.com/go-git/go-git/v5 v5.10.0 github.com/hashicorp/hc-install v0.5.2 github.com/hashicorp/terraform-exec v0.18.1 github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 github.com/stretchr/testify v1.8.4 github.com/whilp/git-urls v1.0.0 go.uber.org/multierr v1.11.0 - k8s.io/api v0.27.4 - k8s.io/apimachinery v0.27.4 - k8s.io/client-go v0.27.4 + k8s.io/api v0.28.4 + k8s.io/apimachinery v0.28.4 + k8s.io/client-go v0.28.4 k8s.io/klog/v2 v2.100.1 - sigs.k8s.io/controller-runtime v0.15.1 + sigs.k8s.io/controller-runtime v0.16.3 ) require ( @@ -46,34 +46,33 @@ require ( github.com/Azure/go-autorest/tracing v0.6.0 // indirect github.com/Masterminds/semver/v3 v3.2.1 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect - github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 // indirect + github.com/ProtonMail/go-crypto v0.0.0-20231012073058-a7379d079e0e // indirect github.com/acomagu/bufpipe v1.0.4 // indirect github.com/apparentlymart/go-textseg/v13 v13.0.0 // indirect - github.com/cloudflare/circl v1.3.3 // indirect + github.com/cloudflare/circl v1.3.6 // indirect github.com/cyphar/filepath-securejoin v0.2.4 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/devigned/tab v0.1.1 // indirect - github.com/emicklei/go-restful/v3 v3.10.0 // indirect + github.com/emicklei/go-restful/v3 v3.11.0 // indirect github.com/emirpasic/gods v1.18.1 // indirect - github.com/evanphx/json-patch/v5 v5.6.0 // indirect + github.com/evanphx/json-patch/v5 v5.7.0 // indirect github.com/fluxcd/pkg/apis/acl v0.1.0 // indirect github.com/fluxcd/pkg/apis/kustomize v1.1.1 // indirect - github.com/fluxcd/pkg/ssh v0.8.2 // indirect + github.com/fluxcd/pkg/ssh v0.9.0 // indirect github.com/fluxcd/pkg/version v0.2.2 // indirect github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect github.com/go-git/go-billy/v5 v5.5.0 // indirect - github.com/go-logr/logr v1.2.4 // indirect + github.com/go-logr/logr v1.3.0 // indirect github.com/go-openapi/jsonpointer v0.19.6 // indirect - github.com/go-openapi/jsonreference v0.20.1 // indirect + github.com/go-openapi/jsonreference v0.20.2 // indirect github.com/go-openapi/swag v0.22.3 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang-jwt/jwt/v4 v4.4.2 // indirect + github.com/golang-jwt/jwt/v4 v4.5.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.3 // indirect - github.com/google/gnostic v0.6.9 // indirect - github.com/google/go-cmp v0.5.9 // indirect + github.com/google/gnostic-models v0.6.8 // indirect github.com/google/gofuzz v1.2.0 // indirect - github.com/google/uuid v1.3.0 // indirect + github.com/google/uuid v1.4.0 // indirect github.com/hashicorp/errwrap v1.0.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/go-version v1.6.0 // indirect @@ -92,30 +91,33 @@ require ( github.com/pjbgf/sha1cd v0.3.0 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/prometheus/client_golang v1.17.0 // indirect + github.com/prometheus/client_model v0.5.0 // indirect + github.com/prometheus/common v0.45.0 // indirect + github.com/prometheus/procfs v0.12.0 // indirect github.com/sergi/go-diff v1.3.1 // indirect - github.com/skeema/knownhosts v1.2.0 // indirect + github.com/skeema/knownhosts v1.2.1 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect github.com/zclconf/go-cty v1.13.0 // indirect - go.uber.org/atomic v1.10.0 // indirect - golang.org/x/crypto v0.14.0 // indirect - golang.org/x/mod v0.12.0 // indirect - golang.org/x/net v0.17.0 // indirect - golang.org/x/oauth2 v0.5.0 // indirect - golang.org/x/sys v0.13.0 // indirect - golang.org/x/term v0.13.0 // indirect - golang.org/x/text v0.13.0 // indirect - golang.org/x/time v0.3.0 // indirect - golang.org/x/tools v0.13.0 // indirect + golang.org/x/crypto v0.15.0 // indirect + golang.org/x/mod v0.14.0 // indirect + golang.org/x/net v0.18.0 // indirect + golang.org/x/oauth2 v0.14.0 // indirect + golang.org/x/sys v0.14.0 // indirect + golang.org/x/term v0.14.0 // indirect + golang.org/x/text v0.14.0 // indirect + golang.org/x/time v0.4.0 // indirect + golang.org/x/tools v0.15.0 // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/protobuf v1.30.0 // indirect + google.golang.org/protobuf v1.31.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/apiextensions-apiserver v0.27.4 // indirect - k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f // indirect - k8s.io/utils v0.0.0-20230505201702-9f6742963106 // indirect + k8s.io/apiextensions-apiserver v0.28.4 // indirect + k8s.io/kube-openapi v0.0.0-20231113174909-778a5567bc1e // indirect + k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect - sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect - sigs.k8s.io/yaml v1.3.0 // indirect + sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect + sigs.k8s.io/yaml v1.4.0 // indirect ) diff --git a/tests/azure/go.sum b/tests/azure/go.sum index 2aff25b1..b53c5f9f 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -1,5 +1,3 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= github.com/Azure/azure-amqp-common-go/v4 v4.2.0 h1:q/jLx1KJ8xeI8XGfkOWMN9XrXzAfVTkyvCxPvHCjd2I= @@ -32,36 +30,26 @@ github.com/Azure/go-autorest/logger v0.2.1 h1:IG7i4p/mDa2Ce4TRyAO8IHnVhAVF3RFU+Z github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo= github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/Masterminds/semver/v3 v3.2.1 h1:RN9w6+7QoMeJVGyfmbcgs28Br8cvmnucEXnY0rYXWg0= github.com/Masterminds/semver/v3 v3.2.1/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 h1:kkhsdkhsCvIsutKu5zLMgWtgh9YxGCNAw8Ad8hjwfYg= -github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= +github.com/ProtonMail/go-crypto v0.0.0-20231012073058-a7379d079e0e h1:NfjGPY2A8SSRJvXny111ZPoB57LT5lWgX4XiUjW10eY= +github.com/ProtonMail/go-crypto v0.0.0-20231012073058-a7379d079e0e/go.mod h1:K4vciqCJaZ1Ghw/SvtJbEAM4soEtwDCNVqkdQIIujwU= github.com/acomagu/bufpipe v1.0.4 h1:e3H4WUzM3npvo5uv95QuJM3cQspFNtFBzvJ2oNjKIDQ= github.com/acomagu/bufpipe v1.0.4/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/apparentlymart/go-textseg v1.0.0/go.mod h1:z96Txxhf3xSFMPmb5X/1W05FF/Nj9VFpLOpjS5yuumk= github.com/apparentlymart/go-textseg/v13 v13.0.0 h1:Y+KvPE1NYz0xl601PVImeQfFyEy6iT90AvPUL1NNfNw= github.com/apparentlymart/go-textseg/v13 v13.0.0/go.mod h1:ZK2fH7c4NqDTLtiYLvIkEghdlcqw7yxLeM89kiTRPUo= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= -github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= -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= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cloudflare/circl v1.3.3 h1:fE/Qz0QdIGqeWfnwq0RE0R7MI51s0M2E4Ga9kq5AEMs= github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cloudflare/circl v1.3.6 h1:/xbKIqSHbZXHwkhbrhrt2YOHIwYJlXH94E3tI/gDlUg= +github.com/cloudflare/circl v1.3.6/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg= github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= @@ -71,21 +59,13 @@ github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/devigned/tab v0.1.1 h1:3mD6Kb1mUOYeLpJvTVSDwSg5ZsfSxfvxGRTxRsJsITA= github.com/devigned/tab v0.1.1/go.mod h1:XG9mPq0dFghrYvoBF3xdRrJzSTX1b7IQrvaL9mzjeJY= github.com/dimchansky/utfbom v1.1.0 h1:FcM3g+nofKgUteL8dm/UpdRXNC9KmADgTpLKsu0TRo4= -github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= -github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a h1:mATvB/9r/3gvcejNsXKSkQ6lcIaNec2nyfOdlTBR2lU= -github.com/emicklei/go-restful/v3 v3.10.0 h1:X4gma4HM7hFm6WMeAsTfqA0GOfdNoCzBIkHGoRLGXuM= -github.com/emicklei/go-restful/v3 v3.10.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= +github.com/elazarl/goproxy v0.0.0-20231117061959-7cc037d33fb5 h1:m62nsMU279qRD9PQSWD1l66kmkXzuYcnVJqL4XLeV2M= +github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g= +github.com/emicklei/go-restful/v3 v3.11.0/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= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJCLunww= -github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= -github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0= +github.com/evanphx/json-patch/v5 v5.7.0 h1:nJqP7uwL84RJInrohHfW0Fx3awjbm8qZeFv0nW9SYGc= +github.com/evanphx/json-patch/v5 v5.7.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ= github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= github.com/fluxcd/helm-controller/api v0.36.2 h1:9JaTc91yocG1oQkM/GMfpZ/nGPpliRjZBNwyAsW5584= github.com/fluxcd/helm-controller/api v0.36.2/go.mod h1:zkcRy3PxG0NoxSY5SjiSA5tWOGa6spIbWsChQY8FXqM= @@ -99,42 +79,41 @@ github.com/fluxcd/notification-controller/api v1.1.0 h1:qx5t5DmArfPLxG2bsYZXIqDX github.com/fluxcd/notification-controller/api v1.1.0/go.mod h1:6MqWVQeI5yrYR7zp0GFqsfXitNPGJrnfOWxO2w3jylg= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= -github.com/fluxcd/pkg/apis/event v0.5.2 h1:WtnCOeWglf7wR3dpyiWxb1JtYkw1G5OXcERb1QopFpA= -github.com/fluxcd/pkg/apis/event v0.5.2/go.mod h1:5l6SSxVTkqrXrYjgEqAajOOHkl4x0TPocAuSdu+3AEs= +github.com/fluxcd/pkg/apis/event v0.6.0 h1:AUaeee1CGWb65BLqVximHXG8Gcu6vWuYONIq6tVpjgo= +github.com/fluxcd/pkg/apis/event v0.6.0/go.mod h1:OEzWcX/oPbMmkCvC9QGoK27JXFvUZgBhLD+zgxZe47A= github.com/fluxcd/pkg/apis/kustomize v1.1.1 h1:MSGn4z0R9PptmoPFHnx2nEZ8Jtl1sKfw0cuDQY2HYwM= github.com/fluxcd/pkg/apis/kustomize v1.1.1/go.mod h1:0pCu0ecIY+ZM0iE/hOHYwCMZ3b0SpBrjJ1SH3FFyYdE= -github.com/fluxcd/pkg/apis/meta v1.1.2 h1:Unjo7hxadtB2dvGpeFqZZUdsjpRA08YYSBb7dF2WIAM= -github.com/fluxcd/pkg/apis/meta v1.1.2/go.mod h1:BHQyRHCskGMEDf6kDGbgQ+cyiNpUHbLsCOsaMYM2maI= -github.com/fluxcd/pkg/git v0.14.0 h1:gefX0A1HkoFhT9mX+ybw2EBNTgebLje0TPyBlKpYrlk= -github.com/fluxcd/pkg/git v0.14.0/go.mod h1:Oq1kLyTk8u2hlGk+7HC1uQ4xX5i0/umJSn+dSIsE6BY= -github.com/fluxcd/pkg/git/gogit v0.14.0 h1:4apklSXh55panQzgFIUwHZUei6B/zqXm4ygtF3jb6uI= -github.com/fluxcd/pkg/git/gogit v0.14.0/go.mod h1:EfTdPc1AaGS1NTF4h6HqXqyKEdOV0UyBeG7khQ7/ai0= +github.com/fluxcd/pkg/apis/meta v1.2.0 h1:O766PzGAdMdQKybSflGL8oV0+GgCNIkdsxfalRyzeO8= +github.com/fluxcd/pkg/apis/meta v1.2.0/go.mod h1:fU/Az9AoVyIxC0oI4ihG0NVMNnvrcCzdEym3wxjIQsc= +github.com/fluxcd/pkg/git v0.15.0 h1:QPqv+b4sQXXpWQhigf/sPE5qzK4BrQhkltnYuEy4AYw= +github.com/fluxcd/pkg/git v0.15.0/go.mod h1:zqmLfw4d+mS77bMRkeQ+8dmFSgxB/c2ZDkafIyY6bAQ= +github.com/fluxcd/pkg/git/gogit v0.15.0 h1:GV8XaRp7CtlRuDallrJgMR6s1YHIMZi5+zyXMOJsS0c= +github.com/fluxcd/pkg/git/gogit v0.15.0/go.mod h1:9KBhXE1czARGT6QqHYVMfr2RbvPpguKwCdm4LgkP3nY= github.com/fluxcd/pkg/gittestserver v0.8.6 h1:YM8prVKB3LC9LBBe+a2p7l1BlfV9erXCgC1em9sbqW4= -github.com/fluxcd/pkg/ssh v0.8.2 h1:WNfvTmnLnOUyXQDb8luSfmn1X0RIuhJBcKMFtKm6YsQ= -github.com/fluxcd/pkg/ssh v0.8.2/go.mod h1:ewbU9vakYYdGSX92qXhx6Kqi5tVQ3ppmGQakCX1R6Gw= +github.com/fluxcd/pkg/ssh v0.9.0 h1:egRvg4AKarObFKXsBDZ5oBZ5PCjmQ4Q6hX+6GmrdbH0= +github.com/fluxcd/pkg/ssh v0.9.0/go.mod h1:3KKbfcFn4l+HqYdHKqcu2LO8RvFv0Kh6tYRSUtONC/8= github.com/fluxcd/pkg/version v0.2.2 h1:ZpVXECeLA5hIQMft11iLp6gN3cKcz6UNuVTQPw/bRdI= github.com/fluxcd/pkg/version v0.2.2/go.mod h1:NGnh/no8S6PyfCDxRFrPY3T5BUnqP48MxfxNRU0z8C0= github.com/fluxcd/source-controller/api v1.1.2 h1:FfKDKVWnopo+Q2pOAxgHEjrtr4MP41L8aapR4mqBhBk= github.com/fluxcd/source-controller/api v1.1.2/go.mod h1:ZLkaUd1KQIjtLPCvO63Ni5zpnSTVBAkeRgFBzMItbDQ= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= github.com/go-git/go-billy/v5 v5.5.0 h1:yEY4yhzCDuMGSv83oGxiBotRzhwhNr8VZyphhiu+mTU= github.com/go-git/go-billy/v5 v5.5.0/go.mod h1:hmexnoNsr2SJU1Ju67OaNz5ASJY3+sHgFRpCtpDCKow= -github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20230305113008-0c11038e723f h1:Pz0DHeFij3XFhoBRGUDPzSJ+w2UcK5/0JvF8DRI58r8= -github.com/go-git/go-git/v5 v5.9.0 h1:cD9SFA7sHVRdJ7AYck1ZaAa/yeuBvGPxwXDL8cxrObY= -github.com/go-git/go-git/v5 v5.9.0/go.mod h1:RKIqga24sWdMGZF+1Ekv9kylsDz6LzdTSI2s/OsZWE0= +github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 h1:eMje31YglSBqCdIqdhKBW8lokaMrL3uTkpGYlE2OOT4= +github.com/go-git/go-git/v5 v5.10.0 h1:F0x3xXrAWmhwtzoCokU4IMPcBdncG+HAAqi9FcOOjbQ= +github.com/go-git/go-git/v5 v5.10.0/go.mod h1:1FOZ/pQnqw24ghP2n7cunVl0ON55BsjPYvhWHvZGhoo= github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= -github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY= +github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/zapr v1.2.4 h1:QHVo+6stLbfJmYGkQ7uGHUCu5hnAFAj6mDe6Ea0SeOo= github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE= github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= -github.com/go-openapi/jsonreference v0.20.1 h1:FBLnyygC4/IZZr893oiomc9XaghoveYTrLC1F86HID8= -github.com/go-openapi/jsonreference v0.20.1/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= +github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= +github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g= github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= @@ -143,49 +122,29 @@ github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= -github.com/golang-jwt/jwt/v4 v4.4.2 h1:rcc4lwaZgFMCZ5jxF9ABolDcIHdBytAFgqFPbSJQAYs= -github.com/golang-jwt/jwt/v4 v4.4.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= +github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/google/gnostic v0.6.9 h1:ZK/5VhkoX835RikCHpSUJV9a+S3e1zLh59YnyWeBW+0= -github.com/google/gnostic v0.6.9/go.mod h1:Nm8234We1lq6iB9OmlgNv3nH91XLLVZHCDayfA3xq+E= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= +github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= -github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4= +github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= @@ -203,7 +162,6 @@ github.com/imdario/mergo v0.3.15 h1:M8XP7IuFNsqUx6VPK2P9OSmsYsI/YFaGil0uD21V3dM= github.com/imdario/mergo v0.3.15/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= @@ -216,7 +174,6 @@ github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= @@ -229,6 +186,7 @@ github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJ github.com/matryer/is v1.2.0 h1:92UTHpy8CDwaJ08GqLDzhhuixiBUUD1p3AU6PHddz4A= github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= +github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg= github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 h1:YH424zrwLTlyHSH/GzLMJeu5zhYVZSx5RQxGKm1h96s= github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5/go.mod h1:PoGiBqKSQK1vIfQ+yVaFcGjDySHvym6FM1cNYnwzbrY= github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= @@ -243,39 +201,37 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/onsi/ginkgo/v2 v2.9.5 h1:+6Hr4uxzP4XIUyAkg61dWBw8lb/gc4/X5luuxN/EC+Q= -github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI= +github.com/onsi/ginkgo/v2 v2.11.0 h1:WgqUCUt/lT6yXoQ8Wef0fsNn5cAuMK7+KT9UFRz2tcU= +github.com/onsi/gomega v1.30.0 h1:hvMK7xYz4D3HapigLTeGdId/NcfQx1VHMJc60ew99+8= github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4= github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_golang v1.15.1 h1:8tXpTmJbyH5lydzFPoxSIJ0J46jdh3tylbvM1xCv0LI= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUooCfx1yqY= -github.com/prometheus/common v0.42.0 h1:EKsfXEYo4JpWMHH5cg+KOUWeuJSov1Id8zGR8eeI1YM= -github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= -github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= +github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q= +github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY= +github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw= +github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI= +github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM= +github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY= +github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= +github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= github.com/sebdah/goldie v1.0.0/go.mod h1:jXP4hmWywNEwZzhMuv2ccnqTSFpuq8iyQhtQdkkZBH4= github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= -github.com/skeema/knownhosts v1.2.0 h1:h9r9cf0+u7wSE+M183ZtMGgOJKiL96brpaz5ekfJCpM= -github.com/skeema/knownhosts v1.2.0/go.mod h1:g4fPeYpque7P0xefxtGzV81ihjC8sX2IqpAoNkjxbMo= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/skeema/knownhosts v1.2.1 h1:SHWdIUa82uGZz+F+47k8SY4QhhI291cXCpopT1lK2AQ= +github.com/skeema/knownhosts v1.2.1/go.mod h1:xYbVRSPxqBZFrdmDyMmsOs+uX1UZC3nTN3ThzgDxUwo= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= -github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= @@ -288,9 +244,6 @@ github.com/whilp/git-urls v1.0.0 h1:95f6UMWN5FKW71ECsXRUd3FVYiXdrE7aX4NZKcPmIjU= github.com/whilp/git-urls v1.0.0/go.mod h1:J16SAmobsqc3Qcy98brfl5f5+e0clUvg1krgwk/qCfE= github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= -github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= -github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= -github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= @@ -299,12 +252,9 @@ github.com/zclconf/go-cty v1.10.0/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uU github.com/zclconf/go-cty v1.13.0 h1:It5dfKTTZHe9aeppbNOda3mN7Ag7sg6QkBNm6TkyFa0= github.com/zclconf/go-cty v1.13.0/go.mod h1:YKQzy/7pZ7iq2jNFzy5go57xdxdWoLLpaEp4u238AE0= github.com/zclconf/go-cty-debug v0.0.0-20191215020915-b22d67c1ba0b/go.mod h1:ZRKQfBXbGkpdV6QMzT3rU1kSTAnfu1dO8dPKjYprgj8= -go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= -go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= -go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= +go.uber.org/zap v1.25.0 h1:4Hvk6GtkucQ790dqmj7l1eEnRdKm3k3ZUrUMS2d5+5c= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -312,66 +262,47 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= -golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= -golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= +golang.org/x/crypto v0.15.0 h1:frVn1TEaCEaZcn3Tmd7Y2b5KKPaZ+I32Q2OA3kYp5TA= +golang.org/x/crypto v0.15.0/go.mod h1:4ChreQoLWfG3xLDer1WdlH5NdlQ3+mwnQq1YTKY+72g= +golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e h1:+WEEuIdZHnUeJJmEUjyYC2gfUMj69yZXw17EnHg/otA= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.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.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc= -golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= +golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180811021610-c39426892332/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.6.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.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= -golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.5.0 h1:HuArIo48skDwlrvM3sEdHXElYslAMsf3KwRkkW4MC4s= -golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.18.0 h1:mIYleuAkSbHh0tCv7RvjL3F6ZVbLjq4+R7zbOn3Kokg= +golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ= +golang.org/x/oauth2 v0.14.0 h1:P0Vrf/2538nmC0H+pEQ3MNFRRnVR7RlqyVw+bvm26z0= +golang.org/x/oauth2 v0.14.0/go.mod h1:lAtNWgaWfL4cm7j2OV8TxGi9Qb7ECORx8DktCY74OwM= 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= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -379,16 +310,16 @@ golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= -golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q= +golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 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= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/term v0.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek= -golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.14.0 h1:LGK9IlZ8T9jvdy6cTdfKUCltatMFOehAQo9SRC46UQ8= +golang.org/x/term v0.14.0/go.mod h1:TySc+nGkYR6qt8km8wUhuFRTVSMIX3XPR58y2lC8vww= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -397,59 +328,32 @@ golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= -golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= -golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= -golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/time v0.4.0 h1:Z81tqI5ddIoXDPvVQ7/7CC9TnLM7ubaFG2qXYd5BbYY= +golang.org/x/time v0.4.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= 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.13.0 h1:Iey4qkscZuv0VvIt8E0neZjtPVQFSc870HQ448QgEmQ= -golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= +golang.org/x/tools v0.15.0 h1:zdAyfUGbYmuVokhzVmghFl2ZJh5QhcfebBgmVPFYA+8= +golang.org/x/tools v0.15.0/go.mod h1:hpksKq4dtpQWS1uQ61JkdqWM3LscIS6Slf+VVkm+wQk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gomodules.xyz/jsonpatch/v2 v2.3.0 h1:8NFhfS6gzxNqjLIYnZxg319wZ5Qjnx4m/CcX+Klzazc= +gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= -google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -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= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= -google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= +google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -460,33 +364,30 @@ gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -k8s.io/api v0.27.4 h1:0pCo/AN9hONazBKlNUdhQymmnfLRbSZjd5H5H3f0bSs= -k8s.io/api v0.27.4/go.mod h1:O3smaaX15NfxjzILfiln1D8Z3+gEYpjEpiNA/1EVK1Y= -k8s.io/apiextensions-apiserver v0.27.4 h1:ie1yZG4nY/wvFMIR2hXBeSVq+HfNzib60FjnBYtPGSs= -k8s.io/apiextensions-apiserver v0.27.4/go.mod h1:KHZaDr5H9IbGEnSskEUp/DsdXe1hMQ7uzpQcYUFt2bM= -k8s.io/apimachinery v0.27.4 h1:CdxflD4AF61yewuid0fLl6bM4a3q04jWel0IlP+aYjs= -k8s.io/apimachinery v0.27.4/go.mod h1:XNfZ6xklnMCOGGFNqXG7bUrQCoR04dh/E7FprV6pb+E= -k8s.io/client-go v0.27.4 h1:vj2YTtSJ6J4KxaC88P4pMPEQECWMY8gqPqsTgUKzvjk= -k8s.io/client-go v0.27.4/go.mod h1:ragcly7lUlN0SRPk5/ZkGnDjPknzb37TICq07WhI6Xc= +k8s.io/api v0.28.4 h1:8ZBrLjwosLl/NYgv1P7EQLqoO8MGQApnbgH8tu3BMzY= +k8s.io/api v0.28.4/go.mod h1:axWTGrY88s/5YE+JSt4uUi6NMM+gur1en2REMR7IRj0= +k8s.io/apiextensions-apiserver v0.28.4 h1:AZpKY/7wQ8n+ZYDtNHbAJBb+N4AXXJvyZx6ww6yAJvU= +k8s.io/apiextensions-apiserver v0.28.4/go.mod h1:pgQIZ1U8eJSMQcENew/0ShUTlePcSGFq6dxSxf2mwPM= +k8s.io/apimachinery v0.28.4 h1:zOSJe1mc+GxuMnFzD4Z/U1wst50X28ZNsn5bhgIIao8= +k8s.io/apimachinery v0.28.4/go.mod h1:wI37ncBvfAoswfq626yPTe6Bz1c22L7uaJ8dho83mgg= +k8s.io/client-go v0.28.4 h1:Np5ocjlZcTrkyRJ3+T3PkXDpe4UpatQxj85+xjaD2wY= +k8s.io/client-go v0.28.4/go.mod h1:0VDZFpgoZfelyP5Wqu0/r/TRYcLYuJ2U1KEeoaPa1N4= k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg= k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= -k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f h1:2kWPakN3i/k81b0gvD5C5FJ2kxm1WrQFanWchyKuqGg= -k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f/go.mod h1:byini6yhqGC14c3ebc/QwanvYwhuMWF6yz2F8uwW8eg= -k8s.io/utils v0.0.0-20230505201702-9f6742963106 h1:EObNQ3TW2D+WptiYXlApGNLVy0zm/JIBVY9i+M4wpAU= -k8s.io/utils v0.0.0-20230505201702-9f6742963106/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= -sigs.k8s.io/controller-runtime v0.15.1 h1:9UvgKD4ZJGcj24vefUFgZFP3xej/3igL9BsOUTb/+4c= -sigs.k8s.io/controller-runtime v0.15.1/go.mod h1:7ngYvp1MLT+9GeZ+6lH3LOlcHkp/+tzA/fmHa4iq9kk= +k8s.io/kube-openapi v0.0.0-20231113174909-778a5567bc1e h1:snPmy96t93RredGRjKfMFt+gvxuVAncqSAyBveJtr4Q= +k8s.io/kube-openapi v0.0.0-20231113174909-778a5567bc1e/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA= +k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSnlTLKgpAAttJvpI= +k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +sigs.k8s.io/controller-runtime v0.16.3 h1:2TuvuokmfXvDUamSx1SuAOO3eTyye+47mJCigwG62c4= +sigs.k8s.io/controller-runtime v0.16.3/go.mod h1:j7bialYoSn142nv9sCOJmQgDXQXxnroFU4VnX/brVJ0= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= -sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= -sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E= -sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= -sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= +sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4= +sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= +sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= +sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= diff --git a/tests/integration/go.mod b/tests/integration/go.mod index ee7a3dfe..1468f0e3 100644 --- a/tests/integration/go.mod +++ b/tests/integration/go.mod @@ -10,29 +10,29 @@ require ( github.com/fluxcd/image-reflector-controller/api v0.30.0 github.com/fluxcd/kustomize-controller/api v1.1.1 github.com/fluxcd/notification-controller/api v1.1.0 - github.com/fluxcd/pkg/apis/event v0.5.2 - github.com/fluxcd/pkg/apis/meta v1.1.2 - github.com/fluxcd/pkg/git v0.14.0 - github.com/fluxcd/pkg/git/gogit v0.14.0 - github.com/fluxcd/pkg/runtime v0.42.0 + github.com/fluxcd/pkg/apis/event v0.6.0 + github.com/fluxcd/pkg/apis/meta v1.2.0 + github.com/fluxcd/pkg/git v0.15.0 + github.com/fluxcd/pkg/git/gogit v0.15.0 + github.com/fluxcd/pkg/runtime v0.43.0 github.com/fluxcd/source-controller/api v1.1.2 github.com/fluxcd/test-infra/tftestenv v0.0.0-20230831142147-627bca8e7916 - github.com/go-git/go-git/v5 v5.9.0 - github.com/google/go-containerregistry v0.14.0 + github.com/go-git/go-git/v5 v5.10.0 + github.com/google/go-containerregistry v0.16.1 github.com/hashicorp/terraform-json v0.16.0 github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 - github.com/onsi/gomega v1.27.10 + github.com/onsi/gomega v1.30.0 github.com/whilp/git-urls v1.0.0 google.golang.org/grpc v1.56.3 - k8s.io/api v0.27.4 - k8s.io/apimachinery v0.27.4 - k8s.io/client-go v0.27.4 - sigs.k8s.io/controller-runtime v0.15.1 + k8s.io/api v0.28.4 + k8s.io/apimachinery v0.28.4 + k8s.io/client-go v0.28.4 + sigs.k8s.io/controller-runtime v0.16.3 ) require ( cloud.google.com/go v0.110.2 // indirect - cloud.google.com/go/compute v1.19.1 // indirect + cloud.google.com/go/compute v1.20.1 // indirect cloud.google.com/go/compute/metadata v0.2.3 // indirect cloud.google.com/go/iam v1.0.1 // indirect dario.cat/mergo v1.0.0 // indirect @@ -49,42 +49,42 @@ require ( github.com/Azure/go-autorest/tracing v0.6.0 // indirect github.com/Masterminds/semver/v3 v3.2.1 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect - github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 // indirect + github.com/ProtonMail/go-crypto v0.0.0-20231012073058-a7379d079e0e // indirect github.com/acomagu/bufpipe v1.0.4 // indirect github.com/apparentlymart/go-textseg/v13 v13.0.0 // indirect - github.com/cloudflare/circl v1.3.3 // indirect + github.com/cloudflare/circl v1.3.6 // indirect github.com/containerd/stargz-snapshotter/estargz v0.14.3 // indirect github.com/cyphar/filepath-securejoin v0.2.4 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/devigned/tab v0.1.1 // indirect - github.com/docker/cli v23.0.1+incompatible // indirect + github.com/docker/cli v24.0.0+incompatible // indirect github.com/docker/distribution v2.8.2+incompatible // indirect github.com/docker/docker v24.0.7+incompatible // indirect github.com/docker/docker-credential-helpers v0.7.0 // indirect - github.com/emicklei/go-restful/v3 v3.10.0 // indirect + github.com/emicklei/go-restful/v3 v3.11.0 // indirect github.com/emirpasic/gods v1.18.1 // indirect - github.com/evanphx/json-patch/v5 v5.6.0 // indirect + github.com/evanphx/json-patch/v5 v5.7.0 // indirect github.com/fluxcd/pkg/apis/acl v0.1.0 // indirect github.com/fluxcd/pkg/apis/kustomize v1.1.1 // indirect - github.com/fluxcd/pkg/ssh v0.8.2 // indirect + github.com/fluxcd/pkg/ssh v0.9.0 // indirect github.com/fluxcd/pkg/version v0.2.2 // indirect github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect github.com/go-git/go-billy/v5 v5.5.0 // indirect - github.com/go-logr/logr v1.2.4 // indirect + github.com/go-logr/logr v1.3.0 // indirect github.com/go-openapi/jsonpointer v0.19.6 // indirect - github.com/go-openapi/jsonreference v0.20.1 // indirect + github.com/go-openapi/jsonreference v0.20.2 // indirect github.com/go-openapi/swag v0.22.3 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang-jwt/jwt/v4 v4.4.2 // indirect + github.com/golang-jwt/jwt/v4 v4.5.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.3 // indirect - github.com/google/gnostic v0.6.9 // indirect - github.com/google/go-cmp v0.5.9 // indirect + github.com/google/gnostic-models v0.6.8 // indirect + github.com/google/go-cmp v0.6.0 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/s2a-go v0.1.4 // indirect - github.com/google/uuid v1.3.0 // indirect + github.com/google/uuid v1.4.0 // indirect github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect - github.com/googleapis/gax-go/v2 v2.9.1 // indirect + github.com/googleapis/gax-go/v2 v2.11.0 // indirect github.com/hashicorp/errwrap v1.0.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect @@ -97,7 +97,7 @@ require ( github.com/jpillora/backoff v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/kevinburke/ssh_config v1.2.0 // indirect - github.com/klauspost/compress v1.16.0 // indirect + github.com/klauspost/compress v1.16.5 // indirect github.com/mailru/easyjson v0.7.7 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect @@ -105,40 +105,42 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect - github.com/opencontainers/image-spec v1.1.0-rc2 // indirect + github.com/opencontainers/image-spec v1.1.0-rc3 // indirect github.com/pjbgf/sha1cd v0.3.0 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/sergi/go-diff v1.3.1 // indirect - github.com/sirupsen/logrus v1.9.0 // indirect - github.com/skeema/knownhosts v1.2.0 // indirect + github.com/sirupsen/logrus v1.9.1 // indirect + github.com/skeema/knownhosts v1.2.1 // indirect github.com/spf13/pflag v1.0.5 // indirect - github.com/vbatts/tar-split v0.11.2 // indirect + github.com/vbatts/tar-split v0.11.3 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect github.com/zclconf/go-cty v1.13.0 // indirect go.opencensus.io v0.24.0 // indirect - golang.org/x/crypto v0.14.0 // indirect - golang.org/x/mod v0.12.0 // indirect - golang.org/x/net v0.17.0 // indirect - golang.org/x/oauth2 v0.8.0 // indirect - golang.org/x/sync v0.3.0 // indirect - golang.org/x/sys v0.13.0 // indirect - golang.org/x/term v0.13.0 // indirect - golang.org/x/text v0.13.0 // indirect - golang.org/x/time v0.3.0 // indirect - golang.org/x/tools v0.13.0 // indirect - google.golang.org/api v0.124.0 // indirect + golang.org/x/crypto v0.15.0 // indirect + golang.org/x/mod v0.14.0 // indirect + golang.org/x/net v0.18.0 // indirect + golang.org/x/oauth2 v0.14.0 // indirect + golang.org/x/sync v0.5.0 // indirect + golang.org/x/sys v0.14.0 // indirect + golang.org/x/term v0.14.0 // indirect + golang.org/x/text v0.14.0 // indirect + golang.org/x/time v0.4.0 // indirect + golang.org/x/tools v0.15.0 // indirect + google.golang.org/api v0.126.0 // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect - google.golang.org/protobuf v1.30.0 // indirect + google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc // indirect + google.golang.org/protobuf v1.31.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/apiextensions-apiserver v0.27.4 // indirect + k8s.io/apiextensions-apiserver v0.28.4 // indirect k8s.io/klog/v2 v2.100.1 // indirect - k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f // indirect - k8s.io/utils v0.0.0-20230505201702-9f6742963106 // indirect + k8s.io/kube-openapi v0.0.0-20231113174909-778a5567bc1e // indirect + k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect - sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect - sigs.k8s.io/yaml v1.3.0 // indirect + sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect + sigs.k8s.io/yaml v1.4.0 // indirect ) diff --git a/tests/integration/go.sum b/tests/integration/go.sum index d27f0bea..e4b352c4 100644 --- a/tests/integration/go.sum +++ b/tests/integration/go.sum @@ -2,8 +2,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.110.2 h1:sdFPBr6xG9/wkBbfhmUz/JmZC7X6LavQgcrVINrKiVA= cloud.google.com/go v0.110.2/go.mod h1:k04UEeEtb6ZBRTv3dZz4CeJC3jKGxyhl0sAiVVquxiw= -cloud.google.com/go/compute v1.19.1 h1:am86mquDUgjGNWxiGn+5PGLbmgiWXlE/yNWpIpNvuXY= -cloud.google.com/go/compute v1.19.1/go.mod h1:6ylj3a05WF8leseCdIf77NK0g1ey+nj5IKd5/kvShxE= +cloud.google.com/go/compute v1.20.1 h1:6aKEtlUiwEpJzM001l0yFkpXmUVXaN8W+fbkb2AZNbg= +cloud.google.com/go/compute v1.20.1/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= cloud.google.com/go/iam v1.0.1 h1:lyeCAU6jpnVNrE9zGQkTl3WgNgK/X+uWwaw0kynZJMU= @@ -45,6 +45,7 @@ github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZ github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo= github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= github.com/Masterminds/semver/v3 v3.2.1 h1:RN9w6+7QoMeJVGyfmbcgs28Br8cvmnucEXnY0rYXWg0= @@ -55,10 +56,9 @@ github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugX github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= -github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 h1:kkhsdkhsCvIsutKu5zLMgWtgh9YxGCNAw8Ad8hjwfYg= -github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= +github.com/ProtonMail/go-crypto v0.0.0-20231012073058-a7379d079e0e h1:NfjGPY2A8SSRJvXny111ZPoB57LT5lWgX4XiUjW10eY= +github.com/ProtonMail/go-crypto v0.0.0-20231012073058-a7379d079e0e/go.mod h1:K4vciqCJaZ1Ghw/SvtJbEAM4soEtwDCNVqkdQIIujwU= github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= github.com/acomagu/bufpipe v1.0.4 h1:e3H4WUzM3npvo5uv95QuJM3cQspFNtFBzvJ2oNjKIDQ= github.com/acomagu/bufpipe v1.0.4/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= @@ -72,26 +72,23 @@ github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPd github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= 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= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cloudflare/circl v1.3.3 h1:fE/Qz0QdIGqeWfnwq0RE0R7MI51s0M2E4Ga9kq5AEMs= github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= +github.com/cloudflare/circl v1.3.6 h1:/xbKIqSHbZXHwkhbrhrt2YOHIwYJlXH94E3tI/gDlUg= +github.com/cloudflare/circl v1.3.6/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= -github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/containerd/stargz-snapshotter/estargz v0.14.3 h1:OqlDCK3ZVUO6C3B/5FSkDwbkEETK84kQgEeFwDC+62k= github.com/containerd/stargz-snapshotter/estargz v0.14.3/go.mod h1:KY//uOCIkSuNAHhJogcZtrNHdKrA99/FCCRjE3HD36o= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg= github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= @@ -101,18 +98,17 @@ github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/devigned/tab v0.1.1 h1:3mD6Kb1mUOYeLpJvTVSDwSg5ZsfSxfvxGRTxRsJsITA= github.com/devigned/tab v0.1.1/go.mod h1:XG9mPq0dFghrYvoBF3xdRrJzSTX1b7IQrvaL9mzjeJY= github.com/dimchansky/utfbom v1.1.0 h1:FcM3g+nofKgUteL8dm/UpdRXNC9KmADgTpLKsu0TRo4= -github.com/docker/cli v23.0.1+incompatible h1:LRyWITpGzl2C9e9uGxzisptnxAn1zfZKXy13Ul2Q5oM= -github.com/docker/cli v23.0.1+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/cli v24.0.0+incompatible h1:0+1VshNwBQzQAx9lOl+OYCTCEAD8fKs/qeXMx3O0wqM= +github.com/docker/cli v24.0.0+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/docker v24.0.7+incompatible h1:Wo6l37AuwP3JaMnZa226lzVXGA3F9Ig1seQen0cKYlM= github.com/docker/docker v24.0.7+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker-credential-helpers v0.7.0 h1:xtCHsjxogADNZcdv1pKUHXryefjlVRqWqIhk/uXJp0A= github.com/docker/docker-credential-helpers v0.7.0/go.mod h1:rETQfLdHNT3foU5kuNkFR1R1V12OJRRO5lzt2D1b5X0= -github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= -github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a h1:mATvB/9r/3gvcejNsXKSkQ6lcIaNec2nyfOdlTBR2lU= -github.com/emicklei/go-restful/v3 v3.10.0 h1:X4gma4HM7hFm6WMeAsTfqA0GOfdNoCzBIkHGoRLGXuM= -github.com/emicklei/go-restful/v3 v3.10.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= +github.com/elazarl/goproxy v0.0.0-20231117061959-7cc037d33fb5 h1:m62nsMU279qRD9PQSWD1l66kmkXzuYcnVJqL4XLeV2M= +github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g= +github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= @@ -120,13 +116,11 @@ github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymF github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJCLunww= -github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= +github.com/evanphx/json-patch/v5 v5.7.0 h1:nJqP7uwL84RJInrohHfW0Fx3awjbm8qZeFv0nW9SYGc= +github.com/evanphx/json-patch/v5 v5.7.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0= github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= github.com/fluxcd/helm-controller/api v0.36.2 h1:9JaTc91yocG1oQkM/GMfpZ/nGPpliRjZBNwyAsW5584= github.com/fluxcd/helm-controller/api v0.36.2/go.mod h1:zkcRy3PxG0NoxSY5SjiSA5tWOGa6spIbWsChQY8FXqM= @@ -140,21 +134,21 @@ github.com/fluxcd/notification-controller/api v1.1.0 h1:qx5t5DmArfPLxG2bsYZXIqDX github.com/fluxcd/notification-controller/api v1.1.0/go.mod h1:6MqWVQeI5yrYR7zp0GFqsfXitNPGJrnfOWxO2w3jylg= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= -github.com/fluxcd/pkg/apis/event v0.5.2 h1:WtnCOeWglf7wR3dpyiWxb1JtYkw1G5OXcERb1QopFpA= -github.com/fluxcd/pkg/apis/event v0.5.2/go.mod h1:5l6SSxVTkqrXrYjgEqAajOOHkl4x0TPocAuSdu+3AEs= +github.com/fluxcd/pkg/apis/event v0.6.0 h1:AUaeee1CGWb65BLqVximHXG8Gcu6vWuYONIq6tVpjgo= +github.com/fluxcd/pkg/apis/event v0.6.0/go.mod h1:OEzWcX/oPbMmkCvC9QGoK27JXFvUZgBhLD+zgxZe47A= github.com/fluxcd/pkg/apis/kustomize v1.1.1 h1:MSGn4z0R9PptmoPFHnx2nEZ8Jtl1sKfw0cuDQY2HYwM= github.com/fluxcd/pkg/apis/kustomize v1.1.1/go.mod h1:0pCu0ecIY+ZM0iE/hOHYwCMZ3b0SpBrjJ1SH3FFyYdE= -github.com/fluxcd/pkg/apis/meta v1.1.2 h1:Unjo7hxadtB2dvGpeFqZZUdsjpRA08YYSBb7dF2WIAM= -github.com/fluxcd/pkg/apis/meta v1.1.2/go.mod h1:BHQyRHCskGMEDf6kDGbgQ+cyiNpUHbLsCOsaMYM2maI= -github.com/fluxcd/pkg/git v0.14.0 h1:gefX0A1HkoFhT9mX+ybw2EBNTgebLje0TPyBlKpYrlk= -github.com/fluxcd/pkg/git v0.14.0/go.mod h1:Oq1kLyTk8u2hlGk+7HC1uQ4xX5i0/umJSn+dSIsE6BY= -github.com/fluxcd/pkg/git/gogit v0.14.0 h1:4apklSXh55panQzgFIUwHZUei6B/zqXm4ygtF3jb6uI= -github.com/fluxcd/pkg/git/gogit v0.14.0/go.mod h1:EfTdPc1AaGS1NTF4h6HqXqyKEdOV0UyBeG7khQ7/ai0= +github.com/fluxcd/pkg/apis/meta v1.2.0 h1:O766PzGAdMdQKybSflGL8oV0+GgCNIkdsxfalRyzeO8= +github.com/fluxcd/pkg/apis/meta v1.2.0/go.mod h1:fU/Az9AoVyIxC0oI4ihG0NVMNnvrcCzdEym3wxjIQsc= +github.com/fluxcd/pkg/git v0.15.0 h1:QPqv+b4sQXXpWQhigf/sPE5qzK4BrQhkltnYuEy4AYw= +github.com/fluxcd/pkg/git v0.15.0/go.mod h1:zqmLfw4d+mS77bMRkeQ+8dmFSgxB/c2ZDkafIyY6bAQ= +github.com/fluxcd/pkg/git/gogit v0.15.0 h1:GV8XaRp7CtlRuDallrJgMR6s1YHIMZi5+zyXMOJsS0c= +github.com/fluxcd/pkg/git/gogit v0.15.0/go.mod h1:9KBhXE1czARGT6QqHYVMfr2RbvPpguKwCdm4LgkP3nY= github.com/fluxcd/pkg/gittestserver v0.8.6 h1:YM8prVKB3LC9LBBe+a2p7l1BlfV9erXCgC1em9sbqW4= -github.com/fluxcd/pkg/runtime v0.42.0 h1:a5DQ/f90YjoHBmiXZUpnp4bDSLORjInbmqP7K11L4uY= -github.com/fluxcd/pkg/runtime v0.42.0/go.mod h1:p6A3xWVV8cKLLQW0N90GehKgGMMmbNYv+OSJ/0qB0vg= -github.com/fluxcd/pkg/ssh v0.8.2 h1:WNfvTmnLnOUyXQDb8luSfmn1X0RIuhJBcKMFtKm6YsQ= -github.com/fluxcd/pkg/ssh v0.8.2/go.mod h1:ewbU9vakYYdGSX92qXhx6Kqi5tVQ3ppmGQakCX1R6Gw= +github.com/fluxcd/pkg/runtime v0.43.0 h1:dU4cWct5VTpddGzJUU80zxNl80jbbVEN5Y5rbt4YUnw= +github.com/fluxcd/pkg/runtime v0.43.0/go.mod h1:RuqJ9VEXELjzgurK2+UXBBgVN1vS0hZ7CYVG2xBAEVM= +github.com/fluxcd/pkg/ssh v0.9.0 h1:egRvg4AKarObFKXsBDZ5oBZ5PCjmQ4Q6hX+6GmrdbH0= +github.com/fluxcd/pkg/ssh v0.9.0/go.mod h1:3KKbfcFn4l+HqYdHKqcu2LO8RvFv0Kh6tYRSUtONC/8= github.com/fluxcd/pkg/version v0.2.2 h1:ZpVXECeLA5hIQMft11iLp6gN3cKcz6UNuVTQPw/bRdI= github.com/fluxcd/pkg/version v0.2.2/go.mod h1:NGnh/no8S6PyfCDxRFrPY3T5BUnqP48MxfxNRU0z8C0= github.com/fluxcd/source-controller/api v1.1.2 h1:FfKDKVWnopo+Q2pOAxgHEjrtr4MP41L8aapR4mqBhBk= @@ -175,18 +169,18 @@ github.com/go-git/go-billy/v5 v5.3.1/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI github.com/go-git/go-billy/v5 v5.5.0 h1:yEY4yhzCDuMGSv83oGxiBotRzhwhNr8VZyphhiu+mTU= github.com/go-git/go-billy/v5 v5.5.0/go.mod h1:hmexnoNsr2SJU1Ju67OaNz5ASJY3+sHgFRpCtpDCKow= github.com/go-git/go-git-fixtures/v4 v4.2.1/go.mod h1:K8zd3kDUAykwTdDCr+I0per6Y6vMiRR/nnVTBtavnB0= -github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20230305113008-0c11038e723f h1:Pz0DHeFij3XFhoBRGUDPzSJ+w2UcK5/0JvF8DRI58r8= +github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 h1:eMje31YglSBqCdIqdhKBW8lokaMrL3uTkpGYlE2OOT4= github.com/go-git/go-git/v5 v5.4.2/go.mod h1:gQ1kArt6d+n+BGd+/B/I74HwRTLhth2+zti4ihgckDc= -github.com/go-git/go-git/v5 v5.9.0 h1:cD9SFA7sHVRdJ7AYck1ZaAa/yeuBvGPxwXDL8cxrObY= -github.com/go-git/go-git/v5 v5.9.0/go.mod h1:RKIqga24sWdMGZF+1Ekv9kylsDz6LzdTSI2s/OsZWE0= +github.com/go-git/go-git/v5 v5.10.0 h1:F0x3xXrAWmhwtzoCokU4IMPcBdncG+HAAqi9FcOOjbQ= +github.com/go-git/go-git/v5 v5.10.0/go.mod h1:1FOZ/pQnqw24ghP2n7cunVl0ON55BsjPYvhWHvZGhoo= github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= -github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY= +github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/zapr v1.2.4 h1:QHVo+6stLbfJmYGkQ7uGHUCu5hnAFAj6mDe6Ea0SeOo= github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE= github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= -github.com/go-openapi/jsonreference v0.20.1 h1:FBLnyygC4/IZZr893oiomc9XaghoveYTrLC1F86HID8= -github.com/go-openapi/jsonreference v0.20.1/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= +github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= +github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g= github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= @@ -195,8 +189,8 @@ github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= -github.com/golang-jwt/jwt/v4 v4.4.2 h1:rcc4lwaZgFMCZ5jxF9ABolDcIHdBytAFgqFPbSJQAYs= -github.com/golang-jwt/jwt/v4 v4.4.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= +github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= +github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= @@ -218,8 +212,8 @@ github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaS github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/google/gnostic v0.6.9 h1:ZK/5VhkoX835RikCHpSUJV9a+S3e1zLh59YnyWeBW+0= -github.com/google/gnostic v0.6.9/go.mod h1:Nm8234We1lq6iB9OmlgNv3nH91XLLVZHCDayfA3xq+E= +github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= +github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -227,10 +221,11 @@ github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-containerregistry v0.14.0 h1:z58vMqHxuwvAsVwvKEkmVBz2TlgBgH5k6koEXBtlYkw= -github.com/google/go-containerregistry v0.14.0/go.mod h1:aiJ2fp/SXvkWgmYHioXnbMdlgB8eXiiYOY55gfN91Wk= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-containerregistry v0.16.1 h1:rUEt426sR6nyrL3gt+18ibRcvYpKYdpsa5ZW7MA08dQ= +github.com/google/go-containerregistry v0.16.1/go.mod h1:u0qB2l7mvtWVR5kNcbFIhFY1hLbf8eeGapA+vbFDCtQ= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= @@ -239,12 +234,12 @@ github.com/google/s2a-go v0.1.4 h1:1kZ/sQM3srePvKs3tXAvQzo66XfcReoqFpIpIccE7Oc= github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= -github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4= +github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/enterprise-certificate-proxy v0.2.3 h1:yk9/cqRKtT9wXZSsRH9aurXEpJX+U6FLtpYTdC3R06k= github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= -github.com/googleapis/gax-go/v2 v2.9.1 h1:DpTpJqzZ3NvX9zqjhIuI1oVzYZMvboZe+3LoeEIJjHM= -github.com/googleapis/gax-go/v2 v2.9.1/go.mod h1:4FG3gMrVZlyMp5itSYKMU9z/lBE7+SbnUOvzH2HqbEY= +github.com/googleapis/gax-go/v2 v2.11.0 h1:9V9PWXEsWnPpQhu/PeQIkS4eGzMlTLGgt80cUUI8Ki4= +github.com/googleapis/gax-go/v2 v2.11.0/go.mod h1:DxmR61SGKkGLa2xigwuZIQpkCI2S5iydzRfb3peWZJI= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -273,7 +268,6 @@ github.com/imdario/mergo v0.3.15 h1:M8XP7IuFNsqUx6VPK2P9OSmsYsI/YFaGil0uD21V3dM= github.com/imdario/mergo v0.3.15/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= @@ -287,11 +281,10 @@ github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4 github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.16.0 h1:iULayQNOReoYUe+1qtKOqw9CwJv3aNQu8ivo7lw1HU4= -github.com/klauspost/compress v1.16.0/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/klauspost/compress v1.16.5 h1:IFV2oUNUzZaz+XyusxpLzpzS8Pt5rh0Z16For/djlyI= +github.com/klauspost/compress v1.16.5/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= @@ -305,6 +298,7 @@ github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlW github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= +github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg= github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 h1:YH424zrwLTlyHSH/GzLMJeu5zhYVZSx5RQxGKm1h96s= github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5/go.mod h1:PoGiBqKSQK1vIfQ+yVaFcGjDySHvym6FM1cNYnwzbrY= github.com/mitchellh/cli v1.1.5/go.mod h1:v8+iFts2sPIKUV1ltktPXMCC8fumSKFItNcD2cLtRR4= @@ -322,13 +316,13 @@ github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjY github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/onsi/ginkgo/v2 v2.11.0 h1:WgqUCUt/lT6yXoQ8Wef0fsNn5cAuMK7+KT9UFRz2tcU= -github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI= -github.com/onsi/gomega v1.27.10/go.mod h1:RsS8tutOdbdgzbPtzzATp12yT7kM5I5aElG3evPbQ0M= +github.com/onsi/ginkgo/v2 v2.13.0 h1:0jY9lJquiL8fcf3M4LAXN5aMlS/b2BV86HFFPCPMgE4= +github.com/onsi/gomega v1.30.0 h1:hvMK7xYz4D3HapigLTeGdId/NcfQx1VHMJc60ew99+8= +github.com/onsi/gomega v1.30.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= -github.com/opencontainers/image-spec v1.1.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= -github.com/opencontainers/image-spec v1.1.0-rc2/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= +github.com/opencontainers/image-spec v1.1.0-rc3 h1:fzg1mXZFj8YdPeNkRXMg+zb88BFV0Ys52cJydRwBkb8= +github.com/opencontainers/image-spec v1.1.0-rc3/go.mod h1:X4pATf0uXsnn3g5aiGIsVnJBR4mxhKzfwmvK/B2NTm8= github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4= github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -337,30 +331,28 @@ github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/prometheus/client_golang v1.16.0 h1:yk/hx9hDbrGHovbci4BY+pRMfSuuat626eFsHb7tmT8= +github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUooCfx1yqY= -github.com/prometheus/common v0.42.0 h1:EKsfXEYo4JpWMHH5cg+KOUWeuJSov1Id8zGR8eeI1YM= -github.com/prometheus/procfs v0.10.1 h1:kYK1Va/YMlutzCGazswoHKo//tZVlFpKYh+PymziUAg= +github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw= +github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM= +github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= -github.com/skeema/knownhosts v1.2.0 h1:h9r9cf0+u7wSE+M183ZtMGgOJKiL96brpaz5ekfJCpM= -github.com/skeema/knownhosts v1.2.0/go.mod h1:g4fPeYpque7P0xefxtGzV81ihjC8sX2IqpAoNkjxbMo= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/sirupsen/logrus v1.9.1 h1:Ou41VVR3nMWWmTiEUnj0OlsgOSCUFgsPAOl6jRIcVtQ= +github.com/sirupsen/logrus v1.9.1/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/skeema/knownhosts v1.2.1 h1:SHWdIUa82uGZz+F+47k8SY4QhhI291cXCpopT1lK2AQ= +github.com/skeema/knownhosts v1.2.1/go.mod h1:xYbVRSPxqBZFrdmDyMmsOs+uX1UZC3nTN3ThzgDxUwo= github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= @@ -375,17 +367,14 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= -github.com/urfave/cli v1.22.4/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/vbatts/tar-split v0.11.2 h1:Via6XqJr0hceW4wff3QRzD5gAk/tatMw/4ZA7cTlIME= -github.com/vbatts/tar-split v0.11.2/go.mod h1:vV3ZuO2yWSVsz+pfFzDG/upWH1JhjOiEaWq6kXyQ3VI= +github.com/urfave/cli v1.22.12/go.mod h1:sSBEIC79qR6OvcmsD4U3KABeOTxDqQtdDnaFuUN30b8= +github.com/vbatts/tar-split v0.11.3 h1:hLFqsOLQ1SsppQNTMpkpPXClLDfC2A3Zgy9OUU+RVck= +github.com/vbatts/tar-split v0.11.3/go.mod h1:9QlHN18E+fEH7RdG+QAJJcuya3rqT7eXSTY7wGrAokY= github.com/whilp/git-urls v1.0.0 h1:95f6UMWN5FKW71ECsXRUd3FVYiXdrE7aX4NZKcPmIjU= github.com/whilp/git-urls v1.0.0/go.mod h1:J16SAmobsqc3Qcy98brfl5f5+e0clUvg1krgwk/qCfE= github.com/xanzy/ssh-agent v0.3.0/go.mod h1:3s9xbODqPuuhK9JV1R321M/FlMZSBvE5aY6eAcqrDh0= github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= -github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= -github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= -github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= @@ -394,7 +383,7 @@ github.com/zclconf/go-cty v1.13.0/go.mod h1:YKQzy/7pZ7iq2jNFzy5go57xdxdWoLLpaEp4 go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/zap v1.25.0 h1:4Hvk6GtkucQ790dqmj7l1eEnRdKm3k3ZUrUMS2d5+5c= golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= @@ -410,10 +399,11 @@ golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= -golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= -golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= +golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= +golang.org/x/crypto v0.15.0 h1:frVn1TEaCEaZcn3Tmd7Y2b5KKPaZ+I32Q2OA3kYp5TA= +golang.org/x/crypto v0.15.0/go.mod h1:4ChreQoLWfG3xLDer1WdlH5NdlQ3+mwnQq1YTKY+72g= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e h1:+WEEuIdZHnUeJJmEUjyYC2gfUMj69yZXw17EnHg/otA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -422,8 +412,8 @@ golang.org/x/mod v0.3.0/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.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc= -golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= +golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -438,20 +428,18 @@ golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210326060303-6b1517762897/go.mod h1:uSPa2vr4CLtc/ILN5odXGNXS6mhrKVzTaCXzk9m6W3k= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= golang.org/x/net v0.6.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.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= -golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.18.0 h1:mIYleuAkSbHh0tCv7RvjL3F6ZVbLjq4+R7zbOn3Kokg= +golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.8.0 h1:6dkIjl3j3LtZ/O3sTgZTMsLKSftL/B8Zgq4huOIIUu8= -golang.org/x/oauth2 v0.8.0/go.mod h1:yr7u4HXZRm1R1kBWqr/xKNqewf0plRYoB7sla+BCIXE= +golang.org/x/oauth2 v0.14.0 h1:P0Vrf/2538nmC0H+pEQ3MNFRRnVR7RlqyVw+bvm26z0= +golang.org/x/oauth2 v0.14.0/go.mod h1:lAtNWgaWfL4cm7j2OV8TxGi9Qb7ECORx8DktCY74OwM= 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= @@ -460,8 +448,8 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= -golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= +golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -476,44 +464,42 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210502180810-71e4cd670f79/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220906165534-d0df966e6959/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= -golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q= +golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 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= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/term v0.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek= -golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.14.0 h1:LGK9IlZ8T9jvdy6cTdfKUCltatMFOehAQo9SRC46UQ8= +golang.org/x/term v0.14.0/go.mod h1:TySc+nGkYR6qt8km8wUhuFRTVSMIX3XPR58y2lC8vww= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= -golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= -golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= -golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/time v0.4.0 h1:Z81tqI5ddIoXDPvVQ7/7CC9TnLM7ubaFG2qXYd5BbYY= +golang.org/x/time v0.4.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= @@ -524,15 +510,15 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= 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.13.0 h1:Iey4qkscZuv0VvIt8E0neZjtPVQFSc870HQ448QgEmQ= -golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= +golang.org/x/tools v0.15.0 h1:zdAyfUGbYmuVokhzVmghFl2ZJh5QhcfebBgmVPFYA+8= +golang.org/x/tools v0.15.0/go.mod h1:hpksKq4dtpQWS1uQ61JkdqWM3LscIS6Slf+VVkm+wQk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gomodules.xyz/jsonpatch/v2 v2.3.0 h1:8NFhfS6gzxNqjLIYnZxg319wZ5Qjnx4m/CcX+Klzazc= -google.golang.org/api v0.124.0 h1:dP6Ef1VgOGqQ8eiv4GiY8RhmeyqzovcXBYPDUYG8Syo= -google.golang.org/api v0.124.0/go.mod h1:xu2HQurE5gi/3t1aFCvhPD781p0a3p11sdunTJ2BlP4= +gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw= +google.golang.org/api v0.126.0 h1:q4GJq+cAdMAC7XP7njvQ4tvohGLiSlytuL4BQxbIZ+o= +google.golang.org/api v0.126.0/go.mod h1:mBwVAtz+87bEN6CbA1GtZPDOqY2R5ONPqJeIlvyo4Aw= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= @@ -541,9 +527,12 @@ google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoA google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 h1:KpwkzHKEF7B9Zxg18WzOa7djJ+Ha5DzthMyZYQfEn2A= -google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU= +google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc h1:8DyZCyvI8mE1IdLy/60bS+52xfymkE72wv1asokgtao= +google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64= +google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc h1:kVKPf/IiYSBWEWtkIn6wZXwWGCnLKcC8oWfZvXjsGnM= +google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc h1:XSJ8Vk1SWuNr8S18z1NZSziL0CPIXLCCMDOEFtHBOFc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= @@ -551,7 +540,6 @@ google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8 google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= google.golang.org/grpc v1.56.3 h1:8I4C0Yq1EjstUzUJzpcRVbuYA2mODtEmpWiQoN/b2nc= google.golang.org/grpc v1.56.3/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= @@ -566,9 +554,8 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= -google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= +google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -586,32 +573,31 @@ gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= 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.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/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= gotest.tools/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -k8s.io/api v0.27.4 h1:0pCo/AN9hONazBKlNUdhQymmnfLRbSZjd5H5H3f0bSs= -k8s.io/api v0.27.4/go.mod h1:O3smaaX15NfxjzILfiln1D8Z3+gEYpjEpiNA/1EVK1Y= -k8s.io/apiextensions-apiserver v0.27.4 h1:ie1yZG4nY/wvFMIR2hXBeSVq+HfNzib60FjnBYtPGSs= -k8s.io/apiextensions-apiserver v0.27.4/go.mod h1:KHZaDr5H9IbGEnSskEUp/DsdXe1hMQ7uzpQcYUFt2bM= -k8s.io/apimachinery v0.27.4 h1:CdxflD4AF61yewuid0fLl6bM4a3q04jWel0IlP+aYjs= -k8s.io/apimachinery v0.27.4/go.mod h1:XNfZ6xklnMCOGGFNqXG7bUrQCoR04dh/E7FprV6pb+E= -k8s.io/client-go v0.27.4 h1:vj2YTtSJ6J4KxaC88P4pMPEQECWMY8gqPqsTgUKzvjk= -k8s.io/client-go v0.27.4/go.mod h1:ragcly7lUlN0SRPk5/ZkGnDjPknzb37TICq07WhI6Xc= +k8s.io/api v0.28.4 h1:8ZBrLjwosLl/NYgv1P7EQLqoO8MGQApnbgH8tu3BMzY= +k8s.io/api v0.28.4/go.mod h1:axWTGrY88s/5YE+JSt4uUi6NMM+gur1en2REMR7IRj0= +k8s.io/apiextensions-apiserver v0.28.4 h1:AZpKY/7wQ8n+ZYDtNHbAJBb+N4AXXJvyZx6ww6yAJvU= +k8s.io/apiextensions-apiserver v0.28.4/go.mod h1:pgQIZ1U8eJSMQcENew/0ShUTlePcSGFq6dxSxf2mwPM= +k8s.io/apimachinery v0.28.4 h1:zOSJe1mc+GxuMnFzD4Z/U1wst50X28ZNsn5bhgIIao8= +k8s.io/apimachinery v0.28.4/go.mod h1:wI37ncBvfAoswfq626yPTe6Bz1c22L7uaJ8dho83mgg= +k8s.io/client-go v0.28.4 h1:Np5ocjlZcTrkyRJ3+T3PkXDpe4UpatQxj85+xjaD2wY= +k8s.io/client-go v0.28.4/go.mod h1:0VDZFpgoZfelyP5Wqu0/r/TRYcLYuJ2U1KEeoaPa1N4= k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg= k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= -k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f h1:2kWPakN3i/k81b0gvD5C5FJ2kxm1WrQFanWchyKuqGg= -k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f/go.mod h1:byini6yhqGC14c3ebc/QwanvYwhuMWF6yz2F8uwW8eg= -k8s.io/utils v0.0.0-20230505201702-9f6742963106 h1:EObNQ3TW2D+WptiYXlApGNLVy0zm/JIBVY9i+M4wpAU= -k8s.io/utils v0.0.0-20230505201702-9f6742963106/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= -sigs.k8s.io/controller-runtime v0.15.1 h1:9UvgKD4ZJGcj24vefUFgZFP3xej/3igL9BsOUTb/+4c= -sigs.k8s.io/controller-runtime v0.15.1/go.mod h1:7ngYvp1MLT+9GeZ+6lH3LOlcHkp/+tzA/fmHa4iq9kk= +k8s.io/kube-openapi v0.0.0-20231113174909-778a5567bc1e h1:snPmy96t93RredGRjKfMFt+gvxuVAncqSAyBveJtr4Q= +k8s.io/kube-openapi v0.0.0-20231113174909-778a5567bc1e/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA= +k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSnlTLKgpAAttJvpI= +k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +sigs.k8s.io/controller-runtime v0.16.3 h1:2TuvuokmfXvDUamSx1SuAOO3eTyye+47mJCigwG62c4= +sigs.k8s.io/controller-runtime v0.16.3/go.mod h1:j7bialYoSn142nv9sCOJmQgDXQXxnroFU4VnX/brVJ0= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= -sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= -sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E= -sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= -sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= +sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4= +sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= +sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= +sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= From 765ebbacfe20fd3db965713db726490f9e6945ee Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Tue, 7 Nov 2023 09:10:27 +0200 Subject: [PATCH 690/818] OIDC identity matching for keyless verification Signed-off-by: Stefan Prodan --- rfcs/0003-kubernetes-oci/README.md | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/rfcs/0003-kubernetes-oci/README.md b/rfcs/0003-kubernetes-oci/README.md index 429b1880..be3e7e63 100644 --- a/rfcs/0003-kubernetes-oci/README.md +++ b/rfcs/0003-kubernetes-oci/README.md @@ -4,7 +4,7 @@ **Creation date:** 2022-03-31 -**Last update:** 2023-02-20 +**Last update:** 2023-11-07 ## Summary @@ -232,14 +232,26 @@ spec: ``` For verifying public artifacts which are signed using the keyless method, -the `spec.verify.secretRef` field must be omitted: +the `.spec.verify.matchOIDCIdentity` field must be used instead of + `spec.verify.secretRef`. ```yaml spec: verify: provider: cosign + matchOIDCIdentity: + - issuer: "^https://token.actions.githubusercontent.com$" + subject: "^https://github.com/org/app-repository.*$" ``` +The `matchOIDCIdentity` entries must contain the following fields: + +- `.issuer`, regexp that matches against the OIDC issuer. +- `.subject`, regexp that matches against the subject identity in the certificate. + +The entries are evaluated in an OR fashion, i.e. the identity is deemed to be +verified if any one entry successfully matches against the identity. + When using the keyless method, Flux will verify the signatures in the Rekor transparency log instance hosted at [rekor.sigstore.dev](https://rekor.sigstore.dev/). @@ -470,3 +482,5 @@ The feature is enabled by default. * **2022-08-29** Select layer by OCI media type released with [flux2 v0.33.0](https://github.com/fluxcd/flux2/releases/tag/v0.33.0) * **2022-09-29** Verifying OCI artifacts with Cosign released with [flux2 v0.35.0](https://github.com/fluxcd/flux2/releases/tag/v0.35.0) * **2023-02-20** Custom OCI media types released with [flux2 v0.40.0](https://github.com/fluxcd/flux2/releases/tag/v0.40.0) +* **2023-10-31** OIDC identity verification implemented in + [source-controller#1250](https://github.com/fluxcd/source-controller/pull/1250) From b596aefb91d1205ca31810f8b2d9fc6d073b5e20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vin=C3=ADcius=20Garcia?= Date: Fri, 17 Nov 2023 10:51:04 -0300 Subject: [PATCH 691/818] Fix flux install command so it returns an error when unexpected arguments are passed MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Max Jonas Werner Signed-off-by: Vinícius Garcia --- cmd/flux/install.go | 1 + cmd/flux/install_test.go | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/cmd/flux/install.go b/cmd/flux/install.go index 795cc1aa..bf0ee758 100644 --- a/cmd/flux/install.go +++ b/cmd/flux/install.go @@ -36,6 +36,7 @@ import ( var installCmd = &cobra.Command{ Use: "install", + Args: cobra.NoArgs, Short: "Install or upgrade Flux", Long: `The install command deploys Flux in the specified namespace. If a previous version is installed, then an in-place upgrade will be performed.`, diff --git a/cmd/flux/install_test.go b/cmd/flux/install_test.go index f10f7d62..5cb0fa66 100644 --- a/cmd/flux/install_test.go +++ b/cmd/flux/install_test.go @@ -37,6 +37,11 @@ func TestInstall(t *testing.T) { args: "install --namespace='@#[]'", assert: assertError("namespace must be a valid DNS label: \"@#[]\""), }, + { + name: "invalid sub-command", + args: "install unexpectedPosArg --namespace=example", + assert: assertError(`unknown command "unexpectedPosArg" for "flux install"`), + }, } for _, tt := range tests { From daa25a9a30e73f74455f6f7b810ddf59b9badc90 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Dec 2023 01:15:12 +0000 Subject: [PATCH 692/818] build(deps): bump the ci group with 4 updates Bumps the ci group with 4 updates: [Azure/login](https://github.com/azure/login), [google-github-actions/auth](https://github.com/google-github-actions/auth), [anchore/sbom-action](https://github.com/anchore/sbom-action) and [fossa-contrib/fossa-action](https://github.com/fossa-contrib/fossa-action). Updates `Azure/login` from 1.4.7 to 1.5.1 - [Release notes](https://github.com/azure/login/releases) - [Commits](https://github.com/azure/login/compare/92a5484dfaf04ca78a94597f4f19fea633851fa2...de95379fe4dadc2defb305917eaa7e5dde727294) Updates `google-github-actions/auth` from 1.1.1 to 2.0.0 - [Release notes](https://github.com/google-github-actions/auth/releases) - [Changelog](https://github.com/google-github-actions/auth/blob/main/CHANGELOG.md) - [Commits](https://github.com/google-github-actions/auth/compare/35b0e87d162680511bf346c299f71c9c5c379033...67e9c72af6e0492df856527b474995862b7b6591) Updates `anchore/sbom-action` from 0.14.3 to 0.15.0 - [Release notes](https://github.com/anchore/sbom-action/releases) - [Commits](https://github.com/anchore/sbom-action/compare/78fc58e266e87a38d4194b2137a3d4e9bcaf7ca1...fd74a6fb98a204a1ad35bbfae0122c1a302ff88b) Updates `fossa-contrib/fossa-action` from 2.0.0 to 3.0.0 - [Release notes](https://github.com/fossa-contrib/fossa-action/releases) - [Changelog](https://github.com/fossa-contrib/fossa-action/blob/master/CHANGELOG.md) - [Commits](https://github.com/fossa-contrib/fossa-action/compare/6728dc6fe9a068c648d080c33829ffbe56565023...cdc5065bcdee31a32e47d4585df72d66e8e941c2) --- updated-dependencies: - dependency-name: Azure/login dependency-type: direct:production update-type: version-update:semver-minor dependency-group: ci - dependency-name: google-github-actions/auth dependency-type: direct:production update-type: version-update:semver-major dependency-group: ci - dependency-name: anchore/sbom-action dependency-type: direct:production update-type: version-update:semver-minor dependency-group: ci - dependency-name: fossa-contrib/fossa-action dependency-type: direct:production update-type: version-update:semver-major dependency-group: ci ... Signed-off-by: dependabot[bot] --- .github/workflows/e2e-azure.yaml | 2 +- .github/workflows/e2e-gcp.yaml | 2 +- .github/workflows/release.yaml | 2 +- .github/workflows/scan.yaml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/e2e-azure.yaml b/.github/workflows/e2e-azure.yaml index 1c6330b5..3e974205 100644 --- a/.github/workflows/e2e-azure.yaml +++ b/.github/workflows/e2e-azure.yaml @@ -92,7 +92,7 @@ jobs: env: SOPS_VER: 3.7.1 - name: Authenticate to Azure - uses: Azure/login@92a5484dfaf04ca78a94597f4f19fea633851fa2 # v1.4.6 + uses: Azure/login@de95379fe4dadc2defb305917eaa7e5dde727294 # v1.4.6 with: creds: '{"clientId":"${{ secrets.AZ_ARM_CLIENT_ID }}","clientSecret":"${{ secrets.AZ_ARM_CLIENT_SECRET }}","subscriptionId":"${{ secrets.AZ_ARM_SUBSCRIPTION_ID }}","tenantId":"${{ secrets.AZ_ARM_TENANT_ID }}"}' - name: Set dynamic variables in .env diff --git a/.github/workflows/e2e-gcp.yaml b/.github/workflows/e2e-gcp.yaml index c9170e5e..bfc57ddf 100644 --- a/.github/workflows/e2e-gcp.yaml +++ b/.github/workflows/e2e-gcp.yaml @@ -46,7 +46,7 @@ jobs: env: SOPS_VER: 3.7.1 - name: Authenticate to Google Cloud - uses: google-github-actions/auth@35b0e87d162680511bf346c299f71c9c5c379033 # v1.1.1 + uses: google-github-actions/auth@67e9c72af6e0492df856527b474995862b7b6591 # v2.0.0 id: 'auth' with: credentials_json: '${{ secrets.FLUX2_E2E_GOOGLE_CREDENTIALS }}' diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 62bd8f3c..030e9957 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -34,7 +34,7 @@ jobs: id: buildx uses: docker/setup-buildx-action@f95db51fddba0c2d1ec667646a06c2ce06100226 # v3.0.0 - name: Setup Syft - uses: anchore/sbom-action/download-syft@78fc58e266e87a38d4194b2137a3d4e9bcaf7ca1 # v0.14.3 + uses: anchore/sbom-action/download-syft@fd74a6fb98a204a1ad35bbfae0122c1a302ff88b # v0.15.0 - name: Setup Cosign uses: sigstore/cosign-installer@1fc5bd396d372bee37d608f955b336615edf79c8 # v3.2.0 - name: Setup Kustomize diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index 3de3abc6..8ba3df35 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -19,7 +19,7 @@ jobs: steps: - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: Run FOSSA scan and upload build data - uses: fossa-contrib/fossa-action@6728dc6fe9a068c648d080c33829ffbe56565023 # v2.0.0 + uses: fossa-contrib/fossa-action@cdc5065bcdee31a32e47d4585df72d66e8e941c2 # v3.0.0 with: # FOSSA Push-Only API Token fossa-api-key: 5ee8bf422db1471e0bcf2bcb289185de From fd163ddcf231fc73464cea4abd6b816a12e2eab5 Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Wed, 22 Nov 2023 21:01:13 +0100 Subject: [PATCH 693/818] show cluster instance name and version in flux check and flux version Signed-off-by: Somtochi Onyekwere --- cmd/flux/check.go | 77 +++++++++++++++++++---------------- cmd/flux/cluster_info.go | 20 ++++++++- cmd/flux/cluster_info_test.go | 11 +++++ cmd/flux/version.go | 45 +++++++++++++++++--- pkg/status/status.go | 18 ++++---- 5 files changed, 122 insertions(+), 49 deletions(-) diff --git a/cmd/flux/check.go b/cmd/flux/check.go index df5fec61..244f60de 100644 --- a/cmd/flux/check.go +++ b/cmd/flux/check.go @@ -18,6 +18,7 @@ package main import ( "context" + "fmt" "os" "time" @@ -26,6 +27,7 @@ import ( v1 "k8s.io/api/apps/v1" apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" "k8s.io/client-go/kubernetes" + "k8s.io/client-go/rest" "sigs.k8s.io/controller-runtime/pkg/client" "github.com/fluxcd/pkg/version" @@ -80,7 +82,20 @@ func runCheckCmd(cmd *cobra.Command, args []string) error { fluxCheck() - if !kubernetesCheck(kubernetesConstraints) { + ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) + defer cancel() + + cfg, err := utils.KubeConfig(kubeconfigArgs, kubeclientOptions) + if err != nil { + return fmt.Errorf("Kubernetes client initialization failed: %s", err.Error()) + } + + kubeClient, err := client.New(cfg, client.Options{Scheme: utils.NewScheme()}) + if err != nil { + return err + } + + if !kubernetesCheck(cfg, kubernetesConstraints) { checkFailed = true } @@ -92,13 +107,18 @@ func runCheckCmd(cmd *cobra.Command, args []string) error { return nil } + logger.Actionf("checking version in cluster") + if !fluxClusterVersionCheck(ctx, kubeClient) { + checkFailed = true + } + logger.Actionf("checking controllers") - if !componentsCheck() { + if !componentsCheck(ctx, kubeClient) { checkFailed = true } logger.Actionf("checking crds") - if !crdsCheck() { + if !crdsCheck(ctx, kubeClient) { checkFailed = true } @@ -129,17 +149,11 @@ func fluxCheck() { return } if latestSv.GreaterThan(curSv) { - logger.Failuref("flux %s <%s (new version is available, please upgrade)", curSv, latestSv) + logger.Failuref("flux %s <%s (new CLI version is available, please upgrade)", curSv, latestSv) } } -func kubernetesCheck(constraints []string) bool { - cfg, err := utils.KubeConfig(kubeconfigArgs, kubeclientOptions) - if err != nil { - logger.Failuref("Kubernetes client initialization failed: %s", err.Error()) - return false - } - +func kubernetesCheck(cfg *rest.Config, constraints []string) bool { clientSet, err := kubernetes.NewForConfig(cfg) if err != nil { logger.Failuref("Kubernetes client initialization failed: %s", err.Error()) @@ -178,21 +192,8 @@ func kubernetesCheck(constraints []string) bool { return true } -func componentsCheck() bool { - ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) - defer cancel() - - kubeConfig, err := utils.KubeConfig(kubeconfigArgs, kubeclientOptions) - if err != nil { - return false - } - - statusChecker, err := status.NewStatusChecker(kubeConfig, checkArgs.pollInterval, rootArgs.timeout, logger) - if err != nil { - return false - } - - kubeClient, err := utils.KubeClient(kubeconfigArgs, kubeclientOptions) +func componentsCheck(ctx context.Context, kubeClient client.Client) bool { + statusChecker, err := status.NewStatusCheckerWithClient(kubeClient, checkArgs.pollInterval, rootArgs.timeout, logger) if err != nil { return false } @@ -222,15 +223,7 @@ func componentsCheck() bool { return ok } -func crdsCheck() bool { - ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) - defer cancel() - - kubeClient, err := utils.KubeClient(kubeconfigArgs, kubeclientOptions) - if err != nil { - return false - } - +func crdsCheck(ctx context.Context, kubeClient client.Client) bool { ok := true selector := client.MatchingLabels{manifestgen.PartOfLabelKey: manifestgen.PartOfLabelValue} var list apiextensionsv1.CustomResourceDefinitionList @@ -253,3 +246,17 @@ func crdsCheck() bool { } return ok } + +func fluxClusterVersionCheck(ctx context.Context, kubeClient client.Client) bool { + clusterInfo, err := getFluxClusterInfo(ctx, kubeClient) + if err != nil { + logger.Failuref("checking failed: %s", err.Error()) + return false + } + + if clusterInfo.distribution() != "" { + logger.Successf("distribution: %s", clusterInfo.distribution()) + } + logger.Successf("bootstrapped: %t", clusterInfo.bootstrapped) + return true +} diff --git a/cmd/flux/cluster_info.go b/cmd/flux/cluster_info.go index daf122ee..2f2f79a3 100644 --- a/cmd/flux/cluster_info.go +++ b/cmd/flux/cluster_info.go @@ -27,6 +27,8 @@ import ( kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" sourcev1 "github.com/fluxcd/source-controller/api/v1" + + "github.com/fluxcd/flux2/v2/pkg/manifestgen" ) // bootstrapLabels are labels put on a resource by kustomize-controller. These labels on the CRD indicates @@ -42,6 +44,8 @@ type fluxClusterInfo struct { bootstrapped bool // managedBy is the name of the tool being used to manage the installation of Flux. managedBy string + // partOf indicates which distribution the instance is a part of. + partOf string // version is the Flux version number in semver format. version string } @@ -68,7 +72,7 @@ func getFluxClusterInfo(ctx context.Context, c client.Client) (fluxClusterInfo, return info, err } - info.version = crdMetadata.Labels["app.kubernetes.io/version"] + info.version = crdMetadata.Labels[manifestgen.VersionLabelKey] var present bool for _, l := range bootstrapLabels { @@ -78,11 +82,15 @@ func getFluxClusterInfo(ctx context.Context, c client.Client) (fluxClusterInfo, info.bootstrapped = true } - // the `app.kubernetes.io` label is not set by flux but might be set by other + // the `app.kubernetes.io/managed-by` label is not set by flux but might be set by other // tools used to install Flux e.g Helm. if manager, ok := crdMetadata.Labels["app.kubernetes.io/managed-by"]; ok { info.managedBy = manager } + + if partOf, ok := crdMetadata.Labels[manifestgen.PartOfLabelKey]; ok { + info.partOf = partOf + } return info, nil } @@ -105,6 +113,14 @@ func confirmFluxInstallOverride(info fluxClusterInfo) error { return err } +func (info fluxClusterInfo) distribution() string { + distribution := info.version + if info.partOf != "" { + distribution = fmt.Sprintf("%s-%s", info.partOf, info.version) + } + return distribution +} + func installManagedByFlux(manager string) bool { return manager == "" || manager == "flux" } diff --git a/cmd/flux/cluster_info_test.go b/cmd/flux/cluster_info_test.go index 550ab165..560c881b 100644 --- a/cmd/flux/cluster_info_test.go +++ b/cmd/flux/cluster_info_test.go @@ -102,6 +102,17 @@ func Test_getFluxClusterInfo(t *testing.T) { version: "v2.1.0", }, }, + { + name: "CRD with version and part-of labels", + labels: map[string]string{ + "app.kubernetes.io/version": "v2.1.0", + "app.kubernetes.io/part-of": "flux", + }, + wantInfo: fluxClusterInfo{ + version: "v2.1.0", + partOf: "flux", + }, + }, } for _, tt := range tests { diff --git a/cmd/flux/version.go b/cmd/flux/version.go index f02a161f..bddbfd4d 100644 --- a/cmd/flux/version.go +++ b/cmd/flux/version.go @@ -25,8 +25,9 @@ import ( "github.com/google/go-containerregistry/pkg/name" "github.com/spf13/cobra" v1 "k8s.io/api/apps/v1" + "k8s.io/apimachinery/pkg/api/errors" "sigs.k8s.io/controller-runtime/pkg/client" - "sigs.k8s.io/yaml" + "sigs.k8s.io/yaml/goyaml.v2" "github.com/fluxcd/flux2/v2/internal/utils" "github.com/fluxcd/flux2/v2/pkg/manifestgen" @@ -55,6 +56,12 @@ type versionFlags struct { var versionArgs versionFlags +type versionInfo struct { + Flux string `yaml:"flux"` + Distribution string `yaml:"distribution,omitempty"` + Controller map[string]string `yaml:"controller,inline"` +} + func init() { versionCmd.Flags().BoolVar(&versionArgs.client, "client", false, "print only client version") @@ -71,8 +78,12 @@ func versionCmdRun(cmd *cobra.Command, args []string) error { ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) defer cancel() - info := map[string]string{} - info["flux"] = rootArgs.defaults.Version + // versionInfo struct and goyaml is used because we care about the order. + // Without this `distribution` is printed before `flux` when the struct is marshalled. + info := &versionInfo{ + Controller: map[string]string{}, + } + info.Flux = rootArgs.defaults.Version if !versionArgs.client { kubeClient, err := utils.KubeClient(kubeconfigArgs, kubeclientOptions) @@ -80,6 +91,16 @@ func versionCmdRun(cmd *cobra.Command, args []string) error { return err } + clusterInfo, err := getFluxClusterInfo(ctx, kubeClient) + // ignoring not found errors because it means that the GitRepository CRD isn't installed but a user might + // have other controllers(e.g notification-controller), and we want to still return information for them. + if err != nil && !errors.IsNotFound(err) { + return err + } + if clusterInfo.distribution() != "" { + info.Distribution = clusterInfo.distribution() + } + selector := client.MatchingLabels{manifestgen.PartOfLabelKey: manifestgen.PartOfLabelValue} var list v1.DeploymentList if err := kubeClient.List(ctx, &list, client.InNamespace(*kubeconfigArgs.Namespace), selector); err != nil { @@ -96,7 +117,7 @@ func versionCmdRun(cmd *cobra.Command, args []string) error { if err != nil { return err } - info[name] = tag + info.Controller[name] = tag } } } @@ -105,7 +126,7 @@ func versionCmdRun(cmd *cobra.Command, args []string) error { var err error if versionArgs.output == "json" { - marshalled, err = json.MarshalIndent(&info, "", " ") + marshalled, err = info.toJSON() marshalled = append(marshalled, "\n"...) } else { marshalled, err = yaml.Marshal(&info) @@ -119,6 +140,20 @@ func versionCmdRun(cmd *cobra.Command, args []string) error { return nil } +func (info versionInfo) toJSON() ([]byte, error) { + mapInfo := map[string]string{ + "flux": info.Flux, + } + + if info.Distribution != "" { + mapInfo["distribution"] = info.Distribution + } + for k, v := range info.Controller { + mapInfo[k] = v + } + return json.MarshalIndent(&mapInfo, "", " ") +} + func splitImageStr(image string) (string, string, error) { ref, err := name.ParseReference(image) if err != nil { diff --git a/pkg/status/status.go b/pkg/status/status.go index 8b61881c..859c4a1e 100644 --- a/pkg/status/status.go +++ b/pkg/status/status.go @@ -45,6 +45,16 @@ type StatusChecker struct { logger log.Logger } +func NewStatusCheckerWithClient(c client.Client, pollInterval time.Duration, timeout time.Duration, log log.Logger) (*StatusChecker, error) { + return &StatusChecker{ + pollInterval: pollInterval, + timeout: timeout, + client: c, + statusPoller: polling.NewStatusPoller(c, c.RESTMapper(), polling.Options{}), + logger: log, + }, nil +} + func NewStatusChecker(kubeConfig *rest.Config, pollInterval time.Duration, timeout time.Duration, log log.Logger) (*StatusChecker, error) { restMapper, err := runtimeclient.NewDynamicRESTMapper(kubeConfig) if err != nil { @@ -55,13 +65,7 @@ func NewStatusChecker(kubeConfig *rest.Config, pollInterval time.Duration, timeo return nil, err } - return &StatusChecker{ - pollInterval: pollInterval, - timeout: timeout, - client: c, - statusPoller: polling.NewStatusPoller(c, restMapper, polling.Options{}), - logger: log, - }, nil + return NewStatusCheckerWithClient(c, pollInterval, timeout, log) } func (sc *StatusChecker) Assess(identifiers ...object.ObjMetadata) error { From 5685afb9d5136c6b7353b9468ae590f334d7930e Mon Sep 17 00:00:00 2001 From: Ernest Wong Date: Tue, 5 Dec 2023 16:51:32 -0800 Subject: [PATCH 694/818] Fix typos in flux bootstrap documentation Signed-off-by: Ernest Wong --- cmd/flux/bootstrap_bitbucket_server.go | 2 +- cmd/flux/bootstrap_gitlab.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/flux/bootstrap_bitbucket_server.go b/cmd/flux/bootstrap_bitbucket_server.go index 3648f0d2..f4caf62d 100644 --- a/cmd/flux/bootstrap_bitbucket_server.go +++ b/cmd/flux/bootstrap_bitbucket_server.go @@ -56,7 +56,7 @@ the bootstrap command will perform an upgrade if needed.`, # Run bootstrap for a public repository on a personal account flux bootstrap bitbucket-server --owner= --repository= --private=false --personal --hostname= --token-auth --path=clusters/my-cluster - # Run bootstrap for a an existing repository with a branch named main + # Run bootstrap for an existing repository with a branch named main flux bootstrap bitbucket-server --owner= --username= --repository= --branch=main --hostname= --token-auth --path=clusters/my-cluster`, RunE: bootstrapBServerCmdRun, } diff --git a/cmd/flux/bootstrap_gitlab.go b/cmd/flux/bootstrap_gitlab.go index 90e6e968..f281a883 100644 --- a/cmd/flux/bootstrap_gitlab.go +++ b/cmd/flux/bootstrap_gitlab.go @@ -64,7 +64,7 @@ the bootstrap command will perform an upgrade if needed.`, # Run bootstrap for a private repository hosted on a GitLab server flux bootstrap gitlab --owner= --repository= --hostname= --token-auth - # Run bootstrap for a an existing repository with a branch named main + # Run bootstrap for an existing repository with a branch named main flux bootstrap gitlab --owner= --repository= --branch=main --token-auth # Run bootstrap for a private repository using Deploy Token authentication From e4747b55c7965b70f376b842274b2cd8aacc054b Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Fri, 8 Dec 2023 13:02:54 +0000 Subject: [PATCH 695/818] Update toolkit components - source-controller to v1.2.1 https://github.com/fluxcd/source-controller/blob/v1.2.1/CHANGELOG.md - notification-controller to v1.2.1 https://github.com/fluxcd/notification-controller/blob/v1.2.1/CHANGELOG.md - image-reflector-controller to v0.31.0 https://github.com/fluxcd/image-reflector-controller/blob/v0.31.0/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 6 +++--- go.sum | 12 ++++++------ .../image-reflector-controller/kustomization.yaml | 4 ++-- .../bases/notification-controller/kustomization.yaml | 4 ++-- manifests/bases/source-controller/kustomization.yaml | 4 ++-- manifests/crds/kustomization.yaml | 6 +++--- 6 files changed, 18 insertions(+), 18 deletions(-) diff --git a/go.mod b/go.mod index 354c1459..ef27cffa 100644 --- a/go.mod +++ b/go.mod @@ -14,9 +14,9 @@ require ( github.com/fluxcd/go-git-providers v0.19.1 github.com/fluxcd/helm-controller/api v0.36.2 github.com/fluxcd/image-automation-controller/api v0.36.1 - github.com/fluxcd/image-reflector-controller/api v0.30.0 + github.com/fluxcd/image-reflector-controller/api v0.31.0 github.com/fluxcd/kustomize-controller/api v1.1.1 - github.com/fluxcd/notification-controller/api v1.1.0 + github.com/fluxcd/notification-controller/api v1.2.1 github.com/fluxcd/pkg/apis/event v0.6.0 github.com/fluxcd/pkg/apis/meta v1.2.0 github.com/fluxcd/pkg/git v0.15.0 @@ -29,7 +29,7 @@ require ( github.com/fluxcd/pkg/ssh v0.9.0 github.com/fluxcd/pkg/tar v0.4.0 github.com/fluxcd/pkg/version v0.2.2 - github.com/fluxcd/source-controller/api v1.1.2 + github.com/fluxcd/source-controller/api v1.2.1 github.com/go-git/go-git/v5 v5.10.0 github.com/go-logr/logr v1.3.0 github.com/gonvenience/bunt v1.3.5 diff --git a/go.sum b/go.sum index 554510c9..823bc0d9 100644 --- a/go.sum +++ b/go.sum @@ -141,12 +141,12 @@ github.com/fluxcd/helm-controller/api v0.36.2 h1:9JaTc91yocG1oQkM/GMfpZ/nGPpliRj github.com/fluxcd/helm-controller/api v0.36.2/go.mod h1:zkcRy3PxG0NoxSY5SjiSA5tWOGa6spIbWsChQY8FXqM= github.com/fluxcd/image-automation-controller/api v0.36.1 h1:Knd4SSm/bJ0iqvYcQq87uDaT/mW9poM1jOvHpJ/4tzk= github.com/fluxcd/image-automation-controller/api v0.36.1/go.mod h1:IsjdBtgm71KHRGDTZZZiGYdWGoJ5VjenE9F4ueADM/o= -github.com/fluxcd/image-reflector-controller/api v0.30.0 h1:DiWj+4tcbnaSqZs1Pfkyt3uSy47wg3dsNMgbFE50pYc= -github.com/fluxcd/image-reflector-controller/api v0.30.0/go.mod h1:hv57KwIzoPyy7Vu4PFcIf21eu0N3p/HbijygcuNgf8c= +github.com/fluxcd/image-reflector-controller/api v0.31.0 h1:9t5zj7ufo9/d57gpcZsD6YAIxFz0vtLH4jXCj379srE= +github.com/fluxcd/image-reflector-controller/api v0.31.0/go.mod h1:/EcjOa/EYi8sSBHcGrBkLjMjNNfC7xXMxqG9phBORCo= github.com/fluxcd/kustomize-controller/api v1.1.1 h1:pQcAzvBC3cFGOCgk0zrcsO1Kjtal1tvd6rHXkyp2R78= github.com/fluxcd/kustomize-controller/api v1.1.1/go.mod h1:FHJTX6c0+CznUNGMol5+Uc4lQsYRxWgpmIRK/xDCghA= -github.com/fluxcd/notification-controller/api v1.1.0 h1:qx5t5DmArfPLxG2bsYZXIqDXLnijUddlHeRfciALwQw= -github.com/fluxcd/notification-controller/api v1.1.0/go.mod h1:6MqWVQeI5yrYR7zp0GFqsfXitNPGJrnfOWxO2w3jylg= +github.com/fluxcd/notification-controller/api v1.2.1 h1:yPQZ7ppYvazxl/Vsespbx9VlVyopH7p8pKGzZTNxI0c= +github.com/fluxcd/notification-controller/api v1.2.1/go.mod h1:1sWTpAXkga5zkXOgFoR+NIJgHNclBcfAHUJ/rMAjnYY= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= github.com/fluxcd/pkg/apis/event v0.6.0 h1:AUaeee1CGWb65BLqVximHXG8Gcu6vWuYONIq6tVpjgo= @@ -176,8 +176,8 @@ github.com/fluxcd/pkg/tar v0.4.0 h1:SuXpfXBIcSJ5R/yqQi2CBxBmV/i/LH0agqNAh2PWBZg= github.com/fluxcd/pkg/tar v0.4.0/go.mod h1:SyJBaQvuv2VA/rv4d1OHhCV6R8+9QKc9np193EzNHBc= github.com/fluxcd/pkg/version v0.2.2 h1:ZpVXECeLA5hIQMft11iLp6gN3cKcz6UNuVTQPw/bRdI= github.com/fluxcd/pkg/version v0.2.2/go.mod h1:NGnh/no8S6PyfCDxRFrPY3T5BUnqP48MxfxNRU0z8C0= -github.com/fluxcd/source-controller/api v1.1.2 h1:FfKDKVWnopo+Q2pOAxgHEjrtr4MP41L8aapR4mqBhBk= -github.com/fluxcd/source-controller/api v1.1.2/go.mod h1:ZLkaUd1KQIjtLPCvO63Ni5zpnSTVBAkeRgFBzMItbDQ= +github.com/fluxcd/source-controller/api v1.2.1 h1:zWRfwMB/BkV0A/duZQwHEcrE/abWJQt7DUgYTzn4IzM= +github.com/fluxcd/source-controller/api v1.2.1/go.mod h1:n+PMCJXl/AYCjWHn5N/MUuoIFKfDg4kCDviFIa7fDvI= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY= diff --git a/manifests/bases/image-reflector-controller/kustomization.yaml b/manifests/bases/image-reflector-controller/kustomization.yaml index e1a30b53..5a2a007f 100644 --- a/manifests/bases/image-reflector-controller/kustomization.yaml +++ b/manifests/bases/image-reflector-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.30.0/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.30.0/image-reflector-controller.deployment.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.31.0/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.31.0/image-reflector-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/notification-controller/kustomization.yaml b/manifests/bases/notification-controller/kustomization.yaml index 262acc6b..c5a34987 100644 --- a/manifests/bases/notification-controller/kustomization.yaml +++ b/manifests/bases/notification-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/notification-controller/releases/download/v1.1.0/notification-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v1.1.0/notification-controller.deployment.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v1.2.1/notification-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v1.2.1/notification-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index 7b3d3fec..71b0e930 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v1.1.2/source-controller.crds.yaml -- https://github.com/fluxcd/source-controller/releases/download/v1.1.2/source-controller.deployment.yaml +- https://github.com/fluxcd/source-controller/releases/download/v1.2.1/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v1.2.1/source-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index 920f6fec..75c6f34c 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -1,9 +1,9 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v1.1.2/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v1.2.1/source-controller.crds.yaml - https://github.com/fluxcd/kustomize-controller/releases/download/v1.1.1/kustomize-controller.crds.yaml - https://github.com/fluxcd/helm-controller/releases/download/v0.36.2/helm-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v1.1.0/notification-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.30.0/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v1.2.1/notification-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.31.0/image-reflector-controller.crds.yaml - https://github.com/fluxcd/image-automation-controller/releases/download/v0.36.1/image-automation-controller.crds.yaml From 2289c6cc6008e24dcc912c715d78ddfbdb39ac5e Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Fri, 8 Dec 2023 13:17:28 +0000 Subject: [PATCH 696/818] bootstrap: provide better error message on timeout Check GitRepository and return Ready condition message as part of error on timeout. Signed-off-by: Somtochi Onyekwere --- cmd/flux/events_test.go | 28 +- pkg/bootstrap/bootstrap.go | 95 ++++-- pkg/bootstrap/bootstrap_plain_git.go | 58 +++- pkg/bootstrap/bootstrap_test.go | 469 +++++++++++++++++++++++++++ pkg/status/status.go | 2 +- 5 files changed, 597 insertions(+), 55 deletions(-) create mode 100644 pkg/bootstrap/bootstrap_test.go diff --git a/cmd/flux/events_test.go b/cmd/flux/events_test.go index a6b5e11f..7737f7c4 100644 --- a/cmd/flux/events_test.go +++ b/cmd/flux/events_test.go @@ -27,20 +27,11 @@ import ( corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/fields" - "k8s.io/apimachinery/pkg/runtime" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/client/fake" - helmv2beta1 "github.com/fluxcd/helm-controller/api/v2beta1" - autov1 "github.com/fluxcd/image-automation-controller/api/v1beta1" - imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta2" - kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" - notificationv1 "github.com/fluxcd/notification-controller/api/v1" - notificationv1b2 "github.com/fluxcd/notification-controller/api/v1beta2" eventv1 "github.com/fluxcd/pkg/apis/event/v1beta1" "github.com/fluxcd/pkg/ssa" - sourcev1 "github.com/fluxcd/source-controller/api/v1" - sourcev1b2 "github.com/fluxcd/source-controller/api/v1beta2" "github.com/fluxcd/flux2/v2/internal/utils" ) @@ -172,7 +163,7 @@ func Test_getObjectRef(t *testing.T) { objs, err := ssa.ReadObjects(strings.NewReader(objects)) g.Expect(err).To(Not(HaveOccurred())) - builder := fake.NewClientBuilder().WithScheme(getScheme()) + builder := fake.NewClientBuilder().WithScheme(utils.NewScheme()) for _, obj := range objs { builder = builder.WithObjects(obj) } @@ -256,7 +247,7 @@ func Test_getRows(t *testing.T) { objs, err := ssa.ReadObjects(strings.NewReader(objects)) g.Expect(err).To(Not(HaveOccurred())) - builder := fake.NewClientBuilder().WithScheme(getScheme()) + builder := fake.NewClientBuilder().WithScheme(utils.NewScheme()) for _, obj := range objs { builder = builder.WithObjects(obj) } @@ -410,21 +401,6 @@ func getTestListOpt(kind, name string) client.ListOption { return client.MatchingFieldsSelector{Selector: sel} } -func getScheme() *runtime.Scheme { - newscheme := runtime.NewScheme() - corev1.AddToScheme(newscheme) - kustomizev1.AddToScheme(newscheme) - helmv2beta1.AddToScheme(newscheme) - notificationv1.AddToScheme(newscheme) - notificationv1b2.AddToScheme(newscheme) - imagev1.AddToScheme(newscheme) - autov1.AddToScheme(newscheme) - sourcev1.AddToScheme(newscheme) - sourcev1b2.AddToScheme(newscheme) - - return newscheme -} - func createEvent(obj client.Object, eventType, msg, reason string) corev1.Event { return corev1.Event{ ObjectMeta: metav1.ObjectMeta{ diff --git a/pkg/bootstrap/bootstrap.go b/pkg/bootstrap/bootstrap.go index 1111f6e9..10fda941 100644 --- a/pkg/bootstrap/bootstrap.go +++ b/pkg/bootstrap/bootstrap.go @@ -20,7 +20,6 @@ import ( "context" "errors" "fmt" - "k8s.io/apimachinery/pkg/util/wait" "strings" "time" @@ -28,12 +27,17 @@ import ( apierr "k8s.io/apimachinery/pkg/api/errors" apimeta "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" + apierrors "k8s.io/apimachinery/pkg/util/errors" + "k8s.io/apimachinery/pkg/util/wait" "sigs.k8s.io/controller-runtime/pkg/client" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" "github.com/fluxcd/pkg/apis/meta" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + sourcev1 "github.com/fluxcd/source-controller/api/v1" + sourcev1b2 "github.com/fluxcd/source-controller/api/v1beta2" "github.com/fluxcd/flux2/v2/pkg/manifestgen/install" "github.com/fluxcd/flux2/v2/pkg/manifestgen/sourcesecret" @@ -44,6 +48,11 @@ var ( ErrReconciledWithWarning = errors.New("reconciled with warning") ) +// Reconciler reconciles and reports the health of different +// components and kubernetes resources involved in the installation of Flux. +// +// It is recommended use the `ReconcilerWithSyncCheck` interface that also +// reports the health of the GitRepository. type Reconciler interface { // ReconcileComponents reconciles the components by generating the // manifests with the provided values, committing them to Git and @@ -76,6 +85,14 @@ type RepositoryReconciler interface { ReconcileRepository(ctx context.Context) error } +// ReconcilerWithSyncCheck extends the Reconciler interface to also report the health of the GitReposiotry +// that syncs Flux on the cluster +type ReconcilerWithSyncCheck interface { + Reconciler + // ReportGitRepoHealth reports about the health of the GitRepository synchronizing the components. + ReportGitRepoHealth(ctx context.Context, options sync.Options, pollInterval, timeout time.Duration) error +} + type PostGenerateSecretFunc func(ctx context.Context, secret corev1.Secret, options sourcesecret.Options) error func Run(ctx context.Context, reconciler Reconciler, manifestsBase string, @@ -99,18 +116,22 @@ func Run(ctx context.Context, reconciler Reconciler, manifestsBase string, return err } - var healthErrCount int + var errs []error + if r, ok := reconciler.(ReconcilerWithSyncCheck); ok { + if err := r.ReportGitRepoHealth(ctx, syncOpts, pollInterval, timeout); err != nil { + errs = append(errs, err) + } + } + if err := reconciler.ReportKustomizationHealth(ctx, syncOpts, pollInterval, timeout); err != nil { - healthErrCount++ + errs = append(errs, err) } + if err := reconciler.ReportComponentsHealth(ctx, installOpts, timeout); err != nil { - healthErrCount++ + errs = append(errs, err) } - if healthErrCount > 0 { - // Composing a "smart" error message here from the returned - // errors does not result in any useful information for the - // user, as both methods log the failures they run into. - err = fmt.Errorf("bootstrap failed with %d health check failure(s)", healthErrCount) + if len(errs) > 0 { + err = fmt.Errorf("bootstrap failed with %d health check failure(s): %w", len(errs), apierrors.NewAggregate(errs)) } return err @@ -173,32 +194,47 @@ func kustomizationPathDiffers(ctx context.Context, kube client.Client, objKey cl return k.Spec.Path, nil } -func kustomizationReconciled(kube client.Client, objKey client.ObjectKey, kustomization *kustomizev1.Kustomization, expectRevision string) wait.ConditionWithContextFunc { +type objectWithConditions interface { + client.Object + GetConditions() []metav1.Condition +} + +func objectReconciled(kube client.Client, objKey client.ObjectKey, clientObject objectWithConditions, expectRevision string) wait.ConditionWithContextFunc { return func(ctx context.Context) (bool, error) { - if err := kube.Get(ctx, objKey, kustomization); err != nil { + // for some reason, TypeMeta gets unset after kube.Get so we want to store the GVK and set it after + // ref https://github.com/kubernetes-sigs/controller-runtime/issues/1517#issuecomment-844703142 + gvk := clientObject.GetObjectKind().GroupVersionKind() + if err := kube.Get(ctx, objKey, clientObject); err != nil { return false, err } + clientObject.GetObjectKind().SetGroupVersionKind(gvk) - // Detect suspended Kustomization, as this would result in an endless wait - if kustomization.Spec.Suspend { - return false, fmt.Errorf("Kustomization is suspended") + kind := gvk.Kind + obj, err := runtime.DefaultUnstructuredConverter.ToUnstructured(clientObject) + if err != nil { + return false, err } - // Confirm the state we are observing is for the current generation - if kustomization.Generation != kustomization.Status.ObservedGeneration { - return false, nil + // Detect suspended object, as this would result in an endless wait + if suspended, ok, _ := unstructured.NestedBool(obj, "spec", "suspend"); ok && suspended { + return false, fmt.Errorf("%s '%s' is suspended", kind, objKey.String()) } - // Confirm the given revision has been attempted by the controller - if sourcev1.TransformLegacyRevision(kustomization.Status.LastAttemptedRevision) != expectRevision { + // Confirm the state we are observing is for the current generation + if generation, ok, _ := unstructured.NestedInt64(obj, "status", "observedGeneration"); ok && generation != clientObject.GetGeneration() { return false, nil } // Confirm the resource is healthy - if c := apimeta.FindStatusCondition(kustomization.Status.Conditions, meta.ReadyCondition); c != nil { + if c := apimeta.FindStatusCondition(clientObject.GetConditions(), meta.ReadyCondition); c != nil { switch c.Status { case metav1.ConditionTrue: - return true, nil + // Confirm the given revision has been attempted by the controller + hasRev, err := hasRevision(kind, obj, expectRevision) + if err != nil { + return false, err + } + return hasRev, nil case metav1.ConditionFalse: return false, fmt.Errorf(c.Message) } @@ -207,6 +243,21 @@ func kustomizationReconciled(kube client.Client, objKey client.ObjectKey, kustom } } +// hasRevision checks that the reconciled revision (for Kustomization this is `.status.lastAttemptedRevision` +// and for Source APIs, it is stored in `.status.artifact.revision`) is the same as the expectedRev +func hasRevision(kind string, obj map[string]interface{}, expectedRev string) (bool, error) { + var rev string + switch kind { + case sourcev1.GitRepositoryKind, sourcev1b2.OCIRepositoryKind, sourcev1b2.BucketKind, sourcev1b2.HelmChartKind: + rev, _, _ = unstructured.NestedString(obj, "status", "artifact", "revision") + case kustomizev1.KustomizationKind: + rev, _, _ = unstructured.NestedString(obj, "status", "lastAttemptedRevision") + default: + return false, fmt.Errorf("cannot get status revision for kind: '%s'", kind) + } + return sourcev1b2.TransformLegacyRevision(rev) == expectedRev, nil +} + func retry(retries int, wait time.Duration, fn func() error) (err error) { for i := 0; ; i++ { err = fn() diff --git a/pkg/bootstrap/bootstrap_plain_git.go b/pkg/bootstrap/bootstrap_plain_git.go index 1be3d265..fbba4e69 100644 --- a/pkg/bootstrap/bootstrap_plain_git.go +++ b/pkg/bootstrap/bootstrap_plain_git.go @@ -29,6 +29,8 @@ import ( "github.com/ProtonMail/go-crypto/openpgp" gogit "github.com/go-git/go-git/v5" corev1 "k8s.io/api/core/v1" + apimeta "k8s.io/apimachinery/pkg/api/meta" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/cli-runtime/pkg/genericclioptions" @@ -38,10 +40,12 @@ import ( "github.com/fluxcd/cli-utils/pkg/object" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" + "github.com/fluxcd/pkg/apis/meta" "github.com/fluxcd/pkg/git" "github.com/fluxcd/pkg/git/repository" "github.com/fluxcd/pkg/kustomize/filesys" runclient "github.com/fluxcd/pkg/runtime/client" + sourcev1 "github.com/fluxcd/source-controller/api/v1" "github.com/fluxcd/flux2/v2/internal/utils" "github.com/fluxcd/flux2/v2/pkg/log" @@ -397,20 +401,62 @@ func (b *PlainGitBootstrapper) ReportKustomizationHealth(ctx context.Context, op objKey := client.ObjectKey{Name: options.Name, Namespace: options.Namespace} - b.logger.Waitingf("waiting for Kustomization %q to be reconciled", objKey.String()) - expectRevision := fmt.Sprintf("%s@%s", options.Branch, git.Hash(head).Digest()) - var k kustomizev1.Kustomization + b.logger.Waitingf("waiting for Kustomization %q to be reconciled", objKey.String()) + k := &kustomizev1.Kustomization{ + TypeMeta: metav1.TypeMeta{ + Kind: kustomizev1.KustomizationKind, + }, + } if err := wait.PollUntilContextTimeout(ctx, pollInterval, timeout, true, - kustomizationReconciled(b.kube, objKey, &k, expectRevision)); err != nil { + objectReconciled(b.kube, objKey, k, expectRevision)); err != nil { + // If the poll timed out, we want to log the ready condition message as + // that likely contains the reason + if errors.Is(err, context.DeadlineExceeded) { + readyCondition := apimeta.FindStatusCondition(k.Status.Conditions, meta.ReadyCondition) + if readyCondition != nil && readyCondition.Status != metav1.ConditionTrue { + err = fmt.Errorf("kustomization '%s' not ready: '%s'", objKey, readyCondition.Message) + } + } b.logger.Failuref(err.Error()) - return err + return fmt.Errorf("error while waiting for Kustomization to be ready: '%s'", err) } - b.logger.Successf("Kustomization reconciled successfully") return nil } +func (b *PlainGitBootstrapper) ReportGitRepoHealth(ctx context.Context, options sync.Options, pollInterval, timeout time.Duration) error { + head, err := b.gitClient.Head() + if err != nil { + return err + } + + objKey := client.ObjectKey{Name: options.Name, Namespace: options.Namespace} + + b.logger.Waitingf("waiting for GitRepository %q to be reconciled", objKey.String()) + expectRevision := fmt.Sprintf("%s@%s", options.Branch, git.Hash(head).Digest()) + g := &sourcev1.GitRepository{ + TypeMeta: metav1.TypeMeta{ + Kind: sourcev1.GitRepositoryKind, + APIVersion: sourcev1.GroupVersion.String(), + }, + } + if err := wait.PollUntilContextTimeout(ctx, pollInterval, timeout, true, + objectReconciled(b.kube, objKey, g, expectRevision)); err != nil { + // If the poll timed out, we want to log the ready condition message as + // that likely contains the reason + if errors.Is(err, context.DeadlineExceeded) { + readyCondition := apimeta.FindStatusCondition(g.Status.Conditions, meta.ReadyCondition) + if readyCondition != nil && readyCondition.Status != metav1.ConditionTrue { + err = fmt.Errorf("gitrepository '%s' not ready: '%s'", objKey, readyCondition.Message) + } + } + b.logger.Failuref(err.Error()) + return fmt.Errorf("error while waiting for GitRepository to be ready: '%s'", err) + } + b.logger.Successf("GitRepsoitory reconciled successfully") + return nil +} func (b *PlainGitBootstrapper) ReportComponentsHealth(ctx context.Context, install install.Options, timeout time.Duration) error { cfg, err := utils.KubeConfig(b.restClientGetter, b.restClientOptions) if err != nil { diff --git a/pkg/bootstrap/bootstrap_test.go b/pkg/bootstrap/bootstrap_test.go new file mode 100644 index 00000000..47bf07f9 --- /dev/null +++ b/pkg/bootstrap/bootstrap_test.go @@ -0,0 +1,469 @@ +/* +Copyright 2023 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package bootstrap + +import ( + "context" + "testing" + + "github.com/fluxcd/pkg/apis/meta" + . "github.com/onsi/gomega" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/client/fake" + + "github.com/fluxcd/flux2/v2/internal/utils" + kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" + notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" + sourcev1 "github.com/fluxcd/source-controller/api/v1" + sourcev1b2 "github.com/fluxcd/source-controller/api/v1beta2" +) + +func Test_hasRevision(t *testing.T) { + var revision = "main@sha1:5bf3a8f9bb0aa5ae8afd6208f43757ab73fc033a" + + tests := []struct { + name string + obj objectWithConditions + rev string + expectErr bool + expectedBool bool + }{ + { + name: "Kustomization revision", + obj: &kustomizev1.Kustomization{ + TypeMeta: metav1.TypeMeta{ + Kind: kustomizev1.KustomizationKind, + }, + Status: kustomizev1.KustomizationStatus{ + LastAttemptedRevision: "main@sha1:5bf3a8f9bb0aa5ae8afd6208f43757ab73fc033a", + }, + }, + expectedBool: true, + }, + { + name: "GitRepository revision", + obj: &sourcev1.GitRepository{ + TypeMeta: metav1.TypeMeta{ + Kind: sourcev1.GitRepositoryKind, + APIVersion: sourcev1.GroupVersion.String(), + }, + Status: sourcev1.GitRepositoryStatus{ + Artifact: &sourcev1.Artifact{ + Revision: "main@sha1:5bf3a8f9bb0aa5ae8afd6208f43757ab73fc033a", + }, + }, + }, + expectedBool: true, + }, + { + name: "GitRepository revision (wrong revision)", + obj: &sourcev1.GitRepository{ + TypeMeta: metav1.TypeMeta{ + Kind: sourcev1.GitRepositoryKind, + APIVersion: sourcev1.GroupVersion.String(), + }, + Status: sourcev1.GitRepositoryStatus{ + Artifact: &sourcev1.Artifact{ + Revision: "main@sha1:e7f3a8f9bb0aa5ae8afd6208f43757ab73fc043a", + }, + }, + }, + }, + { + name: "Kustomization revision (empty revision)", + obj: &kustomizev1.Kustomization{ + TypeMeta: metav1.TypeMeta{ + Kind: kustomizev1.KustomizationKind, + }, + Status: kustomizev1.KustomizationStatus{ + LastAttemptedRevision: "", + }, + }, + }, + { + name: "OCIRepository revision", + obj: &sourcev1b2.OCIRepository{ + TypeMeta: metav1.TypeMeta{ + Kind: sourcev1b2.OCIRepositoryKind, + }, + Status: sourcev1b2.OCIRepositoryStatus{ + Artifact: &sourcev1.Artifact{ + Revision: "main@sha1:5bf3a8f9bb0aa5ae8afd6208f43757ab73fc033a", + }, + }, + }, + expectedBool: true, + }, + { + name: "Alert revision(Not supported)", + obj: ¬ificationv1.Alert{ + TypeMeta: metav1.TypeMeta{ + Kind: notificationv1.AlertKind, + }, + Status: notificationv1.AlertStatus{ + ObservedGeneration: 1, + }, + }, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + g := NewWithT(t) + obj, err := runtime.DefaultUnstructuredConverter.ToUnstructured(tt.obj) + g.Expect(err).To(BeNil()) + got, err := hasRevision(tt.obj.GetObjectKind().GroupVersionKind().Kind, obj, revision) + if tt.expectErr { + g.Expect(err).To(HaveOccurred()) + return + } + g.Expect(got).To(Equal(tt.expectedBool)) + }) + } +} + +func Test_objectReconciled(t *testing.T) { + expectedRev := "main@sha1:5bf3a8f9bb0aa5ae8afd6208f43757ab73fc033a" + + type updateStatus struct { + statusFn func(o client.Object) + expectedErr bool + expectedBool bool + } + tests := []struct { + name string + obj objectWithConditions + statuses []updateStatus + }{ + { + name: "GitRepository with no status", + obj: &sourcev1.GitRepository{ + TypeMeta: metav1.TypeMeta{ + Kind: sourcev1.GitRepositoryKind, + APIVersion: sourcev1.GroupVersion.String(), + }, + ObjectMeta: metav1.ObjectMeta{ + Name: "flux-system", + Namespace: "flux-system", + }, + }, + statuses: []updateStatus{ + { + expectedErr: false, + expectedBool: false, + }, + }, + }, + { + name: "suspended Kustomization", + obj: &kustomizev1.Kustomization{ + TypeMeta: metav1.TypeMeta{ + Kind: kustomizev1.KustomizationKind, + APIVersion: kustomizev1.GroupVersion.String(), + }, + ObjectMeta: metav1.ObjectMeta{ + Name: "flux-system", + Namespace: "flux-system", + }, + Spec: kustomizev1.KustomizationSpec{ + Suspend: true, + }, + }, + statuses: []updateStatus{ + { + expectedErr: true, + }, + }, + }, + { + name: "Kustomization - status with old generation", + obj: &kustomizev1.Kustomization{ + TypeMeta: metav1.TypeMeta{ + Kind: kustomizev1.KustomizationKind, + APIVersion: kustomizev1.GroupVersion.String(), + }, + ObjectMeta: metav1.ObjectMeta{ + Name: "flux-system", + Namespace: "flux-system", + Generation: 1, + }, + Status: kustomizev1.KustomizationStatus{ + ObservedGeneration: -1, + }, + }, + statuses: []updateStatus{ + { + expectedErr: false, + expectedBool: false, + }, + }, + }, + { + name: "GitRepository - status with same generation but no conditions", + obj: &sourcev1.GitRepository{ + TypeMeta: metav1.TypeMeta{ + Kind: sourcev1.GitRepositoryKind, + APIVersion: sourcev1.GroupVersion.String(), + }, + ObjectMeta: metav1.ObjectMeta{ + Name: "flux-system", + Namespace: "flux-system", + Generation: 1, + }, + Status: sourcev1.GitRepositoryStatus{ + ObservedGeneration: 1, + }, + }, + statuses: []updateStatus{ + { + expectedErr: false, + expectedBool: false, + }, + }, + }, + { + name: "GitRepository - status with conditions but no ready condition", + obj: &sourcev1.GitRepository{ + TypeMeta: metav1.TypeMeta{ + Kind: sourcev1.GitRepositoryKind, + APIVersion: sourcev1.GroupVersion.String(), + }, + ObjectMeta: metav1.ObjectMeta{ + Name: "flux-system", + Namespace: "flux-system", + Generation: 1, + }, + Status: sourcev1.GitRepositoryStatus{ + ObservedGeneration: 1, + Conditions: []metav1.Condition{ + {Type: meta.ReconcilingCondition, Status: metav1.ConditionTrue, ObservedGeneration: 1, Reason: "Progressing", Message: "Progressing"}, + }, + }, + }, + statuses: []updateStatus{ + { + expectedErr: false, + expectedBool: false, + }, + }, + }, + { + name: "Kustomization - status with false ready condition", + obj: &kustomizev1.Kustomization{ + TypeMeta: metav1.TypeMeta{ + Kind: kustomizev1.KustomizationKind, + APIVersion: kustomizev1.GroupVersion.String(), + }, + ObjectMeta: metav1.ObjectMeta{ + Name: "flux-system", + Namespace: "flux-system", + Generation: 1, + }, + Status: kustomizev1.KustomizationStatus{ + ObservedGeneration: 1, + Conditions: []metav1.Condition{ + {Type: meta.ReadyCondition, Status: metav1.ConditionFalse, ObservedGeneration: 1, Reason: "Failing", Message: "Failed to clone"}, + }, + }, + }, + statuses: []updateStatus{ + { + expectedErr: true, + expectedBool: false, + }, + }, + }, + { + name: "Kustomization - status with true ready condition but different revision", + obj: &kustomizev1.Kustomization{ + TypeMeta: metav1.TypeMeta{ + Kind: kustomizev1.KustomizationKind, + APIVersion: kustomizev1.GroupVersion.String(), + }, + ObjectMeta: metav1.ObjectMeta{ + Name: "flux-system", + Namespace: "flux-system", + Generation: 1, + }, + Status: kustomizev1.KustomizationStatus{ + ObservedGeneration: 1, + Conditions: []metav1.Condition{ + {Type: meta.ReadyCondition, Status: metav1.ConditionTrue, ObservedGeneration: 1, Reason: "Passing", Message: "Applied revision"}, + }, + LastAttemptedRevision: "main@sha1:e7f3a8f9bb0aa5ae8afd6208f43757ab73fc043a", + }, + }, + statuses: []updateStatus{ + { + expectedErr: false, + expectedBool: false, + }, + }, + }, + { + name: "GitRepository - status with true ready condition but different revision", + obj: &sourcev1.GitRepository{ + TypeMeta: metav1.TypeMeta{ + Kind: sourcev1.GitRepositoryKind, + APIVersion: sourcev1.GroupVersion.String(), + }, + ObjectMeta: metav1.ObjectMeta{ + Name: "flux-system", + Namespace: "flux-system", + Generation: 1, + }, + Status: sourcev1.GitRepositoryStatus{ + ObservedGeneration: 1, + Conditions: []metav1.Condition{ + {Type: meta.ReadyCondition, Status: metav1.ConditionTrue, ObservedGeneration: 1, Reason: "Readyyy", Message: "Cloned successfully"}, + }, + Artifact: &sourcev1.Artifact{ + Revision: "main@sha1:e7f3a8f9bb0aa5ae8afd6208f43757ab73fc043a", + }, + }, + }, + statuses: []updateStatus{ + { + expectedErr: false, + expectedBool: false, + }, + }, + }, + { + name: "GitRepository - ready with right revision", + obj: &sourcev1.GitRepository{ + TypeMeta: metav1.TypeMeta{ + Kind: sourcev1.GitRepositoryKind, + APIVersion: sourcev1.GroupVersion.String(), + }, + ObjectMeta: metav1.ObjectMeta{ + Name: "flux-system", + Namespace: "flux-system", + Generation: 1, + }, + Status: sourcev1.GitRepositoryStatus{ + ObservedGeneration: 1, + Conditions: []metav1.Condition{ + {Type: meta.ReadyCondition, Status: metav1.ConditionTrue, ObservedGeneration: 1, Reason: "Readyyy", Message: "Cloned successfully"}, + }, + Artifact: &sourcev1.Artifact{ + Revision: expectedRev, + }, + }, + }, + statuses: []updateStatus{ + { + expectedErr: false, + expectedBool: true, + }, + }, + }, + { + name: "GitRepository - sequence of status updates before ready", + obj: &sourcev1.GitRepository{ + TypeMeta: metav1.TypeMeta{ + Kind: sourcev1.GitRepositoryKind, + APIVersion: sourcev1.GroupVersion.String(), + }, + ObjectMeta: metav1.ObjectMeta{ + Name: "flux-system", + Namespace: "flux-system", + Generation: 1, + }, + }, + statuses: []updateStatus{ + { + // observed gen different + statusFn: func(o client.Object) { + gitRepo := o.(*sourcev1.GitRepository) + gitRepo.Status = sourcev1.GitRepositoryStatus{ + ObservedGeneration: -1, + } + }, + }, + { + // ready failing + statusFn: func(o client.Object) { + gitRepo := o.(*sourcev1.GitRepository) + gitRepo.Status = sourcev1.GitRepositoryStatus{ + ObservedGeneration: 1, + Conditions: []metav1.Condition{ + {Type: meta.ReadyCondition, Status: metav1.ConditionFalse, ObservedGeneration: 1, Reason: "Not Ready", Message: "Transient connection issue"}, + }, + } + }, + expectedErr: true, + }, + { + // updated to a different revision + statusFn: func(o client.Object) { + gitRepo := o.(*sourcev1.GitRepository) + gitRepo.Status = sourcev1.GitRepositoryStatus{ + ObservedGeneration: 1, + Conditions: []metav1.Condition{ + {Type: meta.ReadyCondition, Status: metav1.ConditionTrue, ObservedGeneration: 1, Reason: "Readyyy", Message: "Cloned successfully"}, + }, + Artifact: &sourcev1.Artifact{ + Revision: "wrong rev", + }, + } + }, + }, + { + // updated to the expected revision + statusFn: func(o client.Object) { + gitRepo := o.(*sourcev1.GitRepository) + gitRepo.Status = sourcev1.GitRepositoryStatus{ + ObservedGeneration: 1, + Conditions: []metav1.Condition{ + {Type: meta.ReadyCondition, Status: metav1.ConditionTrue, ObservedGeneration: 1, Reason: "Readyyy", Message: "Cloned successfully"}, + }, + Artifact: &sourcev1.Artifact{ + Revision: expectedRev, + }, + } + }, + expectedBool: true, + }, + }, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + g := NewWithT(t) + builder := fake.NewClientBuilder().WithScheme(utils.NewScheme()) + builder.WithObjects(tt.obj) + + kubeClient := builder.Build() + + for _, updates := range tt.statuses { + if updates.statusFn != nil { + updates.statusFn(tt.obj) + g.Expect(kubeClient.Update(context.TODO(), tt.obj)).To(Succeed()) + } + + waitFunc := objectReconciled(kubeClient, client.ObjectKeyFromObject(tt.obj), tt.obj, expectedRev) + got, err := waitFunc(context.TODO()) + g.Expect(err != nil).To(Equal(updates.expectedErr)) + g.Expect(got).To(Equal(updates.expectedBool)) + } + }) + } +} diff --git a/pkg/status/status.go b/pkg/status/status.go index 859c4a1e..5f20e90f 100644 --- a/pkg/status/status.go +++ b/pkg/status/status.go @@ -98,7 +98,7 @@ func (sc *StatusChecker) Assess(identifiers ...object.ObjMetadata) error { } if coll.Error != nil || ctx.Err() == context.DeadlineExceeded { - return fmt.Errorf("timed out waiting for condition") + return fmt.Errorf("timed out waiting for all resources to be ready") } return nil } From 05c13fe35a62b2e434b7ea6d46ffd3bd03aa7f1c Mon Sep 17 00:00:00 2001 From: Sunny Date: Fri, 8 Dec 2023 13:38:08 +0000 Subject: [PATCH 697/818] check readiness using kstatus This change replaces all the many functions and ways of calculating readiness of objects into one unified way that uses kstatus.Compute() to check if the object is in progress or current. Only the objects that are current are considered to be ready. This takes advantage of the kstatus compatibility of Flux's APIs and also makes sure that they remain kstatus compatible. The new isObjectReady() function is also aware of static/statusless objects and knows how to check their readiness using kstatus. This prepares the CLI for the upcoming static API objects. All the is*Ready() functions for specific objects have been removed. This change doesn't affect any of the existing tests results. Introduce suspend and resume subcommands for alert-provider. Signed-off-by: Sunny --- cmd/flux/create.go | 2 +- cmd/flux/create_alert.go | 22 +--- cmd/flux/create_alertprovider.go | 22 +--- cmd/flux/create_helmrelease.go | 19 +--- cmd/flux/create_kustomization.go | 27 +---- cmd/flux/create_receiver.go | 22 +--- cmd/flux/create_source_bucket.go | 29 +----- cmd/flux/create_source_git.go | 29 +----- cmd/flux/create_source_git_test.go | 11 ++ cmd/flux/create_source_helm.go | 29 +----- cmd/flux/create_source_oci.go | 29 +----- cmd/flux/main_e2e_test.go | 5 + cmd/flux/main_unit_test.go | 9 +- cmd/flux/readiness.go | 149 ++++++++++++++++++++++++++++ cmd/flux/readiness_test.go | 139 ++++++++++++++++++++++++++ cmd/flux/reconcile.go | 46 +++------ cmd/flux/reconcile_alert.go | 2 +- cmd/flux/reconcile_alertprovider.go | 61 ++---------- cmd/flux/reconcile_receiver.go | 67 ++----------- cmd/flux/resume.go | 2 +- cmd/flux/resume_alertprovider.go | 60 +++++++++++ cmd/flux/status.go | 47 +-------- cmd/flux/suspend_alertprovider.go | 56 +++++++++++ 23 files changed, 464 insertions(+), 420 deletions(-) create mode 100644 cmd/flux/readiness.go create mode 100644 cmd/flux/readiness_test.go create mode 100644 cmd/flux/resume_alertprovider.go create mode 100644 cmd/flux/suspend_alertprovider.go diff --git a/cmd/flux/create.go b/cmd/flux/create.go index 795d9367..209c8f0a 100644 --- a/cmd/flux/create.go +++ b/cmd/flux/create.go @@ -132,7 +132,7 @@ func (names apiType) upsertAndWait(object upsertWaitable, mutate func() error) e logger.Waitingf("waiting for %s reconciliation", names.kind) if err := wait.PollUntilContextTimeout(ctx, rootArgs.pollInterval, rootArgs.timeout, true, - isReady(kubeClient, namespacedName, object)); err != nil { + isObjectReadyConditionFunc(kubeClient, namespacedName, object.asClientObject())); err != nil { return err } logger.Successf("%s reconciliation completed", names.kind) diff --git a/cmd/flux/create_alert.go b/cmd/flux/create_alert.go index 0f50bf02..22a5d289 100644 --- a/cmd/flux/create_alert.go +++ b/cmd/flux/create_alert.go @@ -22,7 +22,6 @@ import ( "github.com/spf13/cobra" "k8s.io/apimachinery/pkg/api/errors" - apimeta "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/wait" @@ -133,7 +132,7 @@ func createAlertCmdRun(cmd *cobra.Command, args []string) error { logger.Waitingf("waiting for Alert reconciliation") if err := wait.PollUntilContextTimeout(ctx, rootArgs.pollInterval, rootArgs.timeout, true, - isAlertReady(kubeClient, namespacedName, &alert)); err != nil { + isObjectReadyConditionFunc(kubeClient, namespacedName, &alert)); err != nil { return err } logger.Successf("Alert %s is ready", name) @@ -170,22 +169,3 @@ func upsertAlert(ctx context.Context, kubeClient client.Client, logger.Successf("Alert updated") return namespacedName, nil } - -func isAlertReady(kubeClient client.Client, namespacedName types.NamespacedName, alert *notificationv1b2.Alert) wait.ConditionWithContextFunc { - return func(ctx context.Context) (bool, error) { - err := kubeClient.Get(ctx, namespacedName, alert) - if err != nil { - return false, err - } - - if c := apimeta.FindStatusCondition(alert.Status.Conditions, meta.ReadyCondition); c != nil { - switch c.Status { - case metav1.ConditionTrue: - return true, nil - case metav1.ConditionFalse: - return false, fmt.Errorf(c.Message) - } - } - return false, nil - } -} diff --git a/cmd/flux/create_alertprovider.go b/cmd/flux/create_alertprovider.go index 8523d1c5..468ec5d8 100644 --- a/cmd/flux/create_alertprovider.go +++ b/cmd/flux/create_alertprovider.go @@ -22,7 +22,6 @@ import ( "github.com/spf13/cobra" "k8s.io/apimachinery/pkg/api/errors" - apimeta "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/wait" @@ -128,7 +127,7 @@ func createAlertProviderCmdRun(cmd *cobra.Command, args []string) error { logger.Waitingf("waiting for Provider reconciliation") if err := wait.PollUntilContextTimeout(ctx, rootArgs.pollInterval, rootArgs.timeout, true, - isAlertProviderReady(kubeClient, namespacedName, &provider)); err != nil { + isObjectReadyConditionFunc(kubeClient, namespacedName, &provider)); err != nil { return err } @@ -167,22 +166,3 @@ func upsertAlertProvider(ctx context.Context, kubeClient client.Client, logger.Successf("Provider updated") return namespacedName, nil } - -func isAlertProviderReady(kubeClient client.Client, namespacedName types.NamespacedName, provider *notificationv1.Provider) wait.ConditionWithContextFunc { - return func(ctx context.Context) (bool, error) { - err := kubeClient.Get(ctx, namespacedName, provider) - if err != nil { - return false, err - } - - if c := apimeta.FindStatusCondition(provider.Status.Conditions, meta.ReadyCondition); c != nil { - switch c.Status { - case metav1.ConditionTrue: - return true, nil - case metav1.ConditionFalse: - return false, fmt.Errorf(c.Message) - } - } - return false, nil - } -} diff --git a/cmd/flux/create_helmrelease.go b/cmd/flux/create_helmrelease.go index b6ef92b3..64bfcfe3 100644 --- a/cmd/flux/create_helmrelease.go +++ b/cmd/flux/create_helmrelease.go @@ -32,7 +32,6 @@ import ( "github.com/spf13/cobra" apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" "k8s.io/apimachinery/pkg/api/errors" - apimeta "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/wait" @@ -304,7 +303,7 @@ func createHelmReleaseCmdRun(cmd *cobra.Command, args []string) error { logger.Waitingf("waiting for HelmRelease reconciliation") if err := wait.PollUntilContextTimeout(ctx, rootArgs.pollInterval, rootArgs.timeout, true, - isHelmReleaseReady(kubeClient, namespacedName, &helmRelease)); err != nil { + isObjectReadyConditionFunc(kubeClient, namespacedName, &helmRelease)); err != nil { return err } logger.Successf("HelmRelease %s is ready", name) @@ -344,22 +343,6 @@ func upsertHelmRelease(ctx context.Context, kubeClient client.Client, return namespacedName, nil } -func isHelmReleaseReady(kubeClient client.Client, namespacedName types.NamespacedName, helmRelease *helmv2.HelmRelease) wait.ConditionWithContextFunc { - return func(ctx context.Context) (bool, error) { - err := kubeClient.Get(ctx, namespacedName, helmRelease) - if err != nil { - return false, err - } - - // Confirm the state we are observing is for the current generation - if helmRelease.Generation != helmRelease.Status.ObservedGeneration { - return false, nil - } - - return apimeta.IsStatusConditionTrue(helmRelease.Status.Conditions, meta.ReadyCondition), nil - } -} - func validateStrategy(input string) bool { allowedStrategy := []string{"Revision", "ChartVersion"} diff --git a/cmd/flux/create_kustomization.go b/cmd/flux/create_kustomization.go index eb2f8fc1..ec9a5293 100644 --- a/cmd/flux/create_kustomization.go +++ b/cmd/flux/create_kustomization.go @@ -24,7 +24,6 @@ import ( "github.com/spf13/cobra" "k8s.io/apimachinery/pkg/api/errors" - apimeta "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/wait" @@ -264,7 +263,7 @@ func createKsCmdRun(cmd *cobra.Command, args []string) error { logger.Waitingf("waiting for Kustomization reconciliation") if err := wait.PollUntilContextTimeout(ctx, rootArgs.pollInterval, rootArgs.timeout, true, - isKustomizationReady(kubeClient, namespacedName, &kustomization)); err != nil { + isObjectReadyConditionFunc(kubeClient, namespacedName, &kustomization)); err != nil { return err } logger.Successf("Kustomization %s is ready", name) @@ -303,27 +302,3 @@ func upsertKustomization(ctx context.Context, kubeClient client.Client, logger.Successf("Kustomization updated") return namespacedName, nil } - -func isKustomizationReady(kubeClient client.Client, namespacedName types.NamespacedName, kustomization *kustomizev1.Kustomization) wait.ConditionWithContextFunc { - return func(ctx context.Context) (bool, error) { - err := kubeClient.Get(ctx, namespacedName, kustomization) - if err != nil { - return false, err - } - - // Confirm the state we are observing is for the current generation - if kustomization.Generation != kustomization.Status.ObservedGeneration { - return false, nil - } - - if c := apimeta.FindStatusCondition(kustomization.Status.Conditions, meta.ReadyCondition); c != nil { - switch c.Status { - case metav1.ConditionTrue: - return true, nil - case metav1.ConditionFalse: - return false, fmt.Errorf(c.Message) - } - } - return false, nil - } -} diff --git a/cmd/flux/create_receiver.go b/cmd/flux/create_receiver.go index 045ff771..ad6436cf 100644 --- a/cmd/flux/create_receiver.go +++ b/cmd/flux/create_receiver.go @@ -22,7 +22,6 @@ import ( "github.com/spf13/cobra" "k8s.io/apimachinery/pkg/api/errors" - apimeta "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/wait" @@ -140,7 +139,7 @@ func createReceiverCmdRun(cmd *cobra.Command, args []string) error { logger.Waitingf("waiting for Receiver reconciliation") if err := wait.PollUntilContextTimeout(ctx, rootArgs.pollInterval, rootArgs.timeout, true, - isReceiverReady(kubeClient, namespacedName, &receiver)); err != nil { + isObjectReadyConditionFunc(kubeClient, namespacedName, &receiver)); err != nil { return err } logger.Successf("Receiver %s is ready", name) @@ -179,22 +178,3 @@ func upsertReceiver(ctx context.Context, kubeClient client.Client, logger.Successf("Receiver updated") return namespacedName, nil } - -func isReceiverReady(kubeClient client.Client, namespacedName types.NamespacedName, receiver *notificationv1.Receiver) wait.ConditionWithContextFunc { - return func(ctx context.Context) (bool, error) { - err := kubeClient.Get(ctx, namespacedName, receiver) - if err != nil { - return false, err - } - - if c := apimeta.FindStatusCondition(receiver.Status.Conditions, meta.ReadyCondition); c != nil { - switch c.Status { - case metav1.ConditionTrue: - return true, nil - case metav1.ConditionFalse: - return false, fmt.Errorf(c.Message) - } - } - return false, nil - } -} diff --git a/cmd/flux/create_source_bucket.go b/cmd/flux/create_source_bucket.go index ebb6a834..32c88730 100644 --- a/cmd/flux/create_source_bucket.go +++ b/cmd/flux/create_source_bucket.go @@ -31,7 +31,6 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" "github.com/fluxcd/pkg/apis/meta" - "github.com/fluxcd/pkg/runtime/conditions" sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" @@ -205,7 +204,7 @@ func createSourceBucketCmdRun(cmd *cobra.Command, args []string) error { logger.Waitingf("waiting for Bucket source reconciliation") if err := wait.PollUntilContextTimeout(ctx, rootArgs.pollInterval, rootArgs.timeout, true, - isBucketReady(kubeClient, namespacedName, bucket)); err != nil { + isObjectReadyConditionFunc(kubeClient, namespacedName, bucket)); err != nil { return err } logger.Successf("Bucket source reconciliation completed") @@ -247,29 +246,3 @@ func upsertBucket(ctx context.Context, kubeClient client.Client, logger.Successf("Bucket source updated") return namespacedName, nil } - -func isBucketReady(kubeClient client.Client, namespacedName types.NamespacedName, bucket *sourcev1.Bucket) wait.ConditionWithContextFunc { - return func(ctx context.Context) (bool, error) { - err := kubeClient.Get(ctx, namespacedName, bucket) - if err != nil { - return false, err - } - - if c := conditions.Get(bucket, meta.ReadyCondition); c != nil { - // Confirm the Ready condition we are observing is for the - // current generation - if c.ObservedGeneration != bucket.GetGeneration() { - return false, nil - } - - // Further check the Status - switch c.Status { - case metav1.ConditionTrue: - return true, nil - case metav1.ConditionFalse: - return false, fmt.Errorf(c.Message) - } - } - return false, nil - } -} diff --git a/cmd/flux/create_source_git.go b/cmd/flux/create_source_git.go index 8c0d031d..67b03dab 100644 --- a/cmd/flux/create_source_git.go +++ b/cmd/flux/create_source_git.go @@ -35,7 +35,6 @@ import ( "sigs.k8s.io/yaml" "github.com/fluxcd/pkg/apis/meta" - "github.com/fluxcd/pkg/runtime/conditions" sourcev1 "github.com/fluxcd/source-controller/api/v1" @@ -326,7 +325,7 @@ func createSourceGitCmdRun(cmd *cobra.Command, args []string) error { logger.Waitingf("waiting for GitRepository source reconciliation") if err := wait.PollUntilContextTimeout(ctx, rootArgs.pollInterval, rootArgs.timeout, true, - isGitRepositoryReady(kubeClient, namespacedName, &gitRepository)); err != nil { + isObjectReadyConditionFunc(kubeClient, namespacedName, &gitRepository)); err != nil { return err } logger.Successf("GitRepository source reconciliation completed") @@ -368,29 +367,3 @@ func upsertGitRepository(ctx context.Context, kubeClient client.Client, logger.Successf("GitRepository source updated") return namespacedName, nil } - -func isGitRepositoryReady(kubeClient client.Client, namespacedName types.NamespacedName, gitRepository *sourcev1.GitRepository) wait.ConditionWithContextFunc { - return func(ctx context.Context) (bool, error) { - err := kubeClient.Get(ctx, namespacedName, gitRepository) - if err != nil { - return false, err - } - - if c := conditions.Get(gitRepository, meta.ReadyCondition); c != nil { - // Confirm the Ready condition we are observing is for the - // current generation - if c.ObservedGeneration != gitRepository.GetGeneration() { - return false, nil - } - - // Further check the Status - switch c.Status { - case metav1.ConditionTrue: - return true, nil - case metav1.ConditionFalse: - return false, fmt.Errorf(c.Message) - } - } - return false, nil - } -} diff --git a/cmd/flux/create_source_git_test.go b/cmd/flux/create_source_git_test.go index 27365990..b34e4208 100644 --- a/cmd/flux/create_source_git_test.go +++ b/cmd/flux/create_source_git_test.go @@ -181,12 +181,21 @@ func TestCreateSourceGit(t *testing.T) { Time: time.Now(), }, } + repo.Status.ObservedGeneration = repo.GetGeneration() }, }, { "Failed", command, assertError("failed message"), func(repo *sourcev1.GitRepository) { + stalledCondition := metav1.Condition{ + Type: meta.StalledCondition, + Status: metav1.ConditionTrue, + Reason: sourcev1.URLInvalidReason, + Message: "failed message", + ObservedGeneration: repo.GetGeneration(), + } + apimeta.SetStatusCondition(&repo.Status.Conditions, stalledCondition) newCondition := metav1.Condition{ Type: meta.ReadyCondition, Status: metav1.ConditionFalse, @@ -195,6 +204,7 @@ func TestCreateSourceGit(t *testing.T) { ObservedGeneration: repo.GetGeneration(), } apimeta.SetStatusCondition(&repo.Status.Conditions, newCondition) + repo.Status.ObservedGeneration = repo.GetGeneration() }, }, { "NoArtifact", @@ -210,6 +220,7 @@ func TestCreateSourceGit(t *testing.T) { ObservedGeneration: repo.GetGeneration(), } apimeta.SetStatusCondition(&repo.Status.Conditions, newCondition) + repo.Status.ObservedGeneration = repo.GetGeneration() }, }, } diff --git a/cmd/flux/create_source_helm.go b/cmd/flux/create_source_helm.go index ea82fa8a..5b46f45e 100644 --- a/cmd/flux/create_source_helm.go +++ b/cmd/flux/create_source_helm.go @@ -23,7 +23,6 @@ import ( "os" "github.com/fluxcd/pkg/apis/meta" - "github.com/fluxcd/pkg/runtime/conditions" "github.com/spf13/cobra" corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/errors" @@ -232,7 +231,7 @@ func createSourceHelmCmdRun(cmd *cobra.Command, args []string) error { logger.Waitingf("waiting for HelmRepository source reconciliation") if err := wait.PollUntilContextTimeout(ctx, rootArgs.pollInterval, rootArgs.timeout, true, - isHelmRepositoryReady(kubeClient, namespacedName, helmRepository)); err != nil { + isObjectReadyConditionFunc(kubeClient, namespacedName, helmRepository)); err != nil { return err } logger.Successf("HelmRepository source reconciliation completed") @@ -279,29 +278,3 @@ func upsertHelmRepository(ctx context.Context, kubeClient client.Client, logger.Successf("source updated") return namespacedName, nil } - -func isHelmRepositoryReady(kubeClient client.Client, namespacedName types.NamespacedName, helmRepository *sourcev1.HelmRepository) wait.ConditionWithContextFunc { - return func(ctx context.Context) (bool, error) { - err := kubeClient.Get(ctx, namespacedName, helmRepository) - if err != nil { - return false, err - } - - if c := conditions.Get(helmRepository, meta.ReadyCondition); c != nil { - // Confirm the Ready condition we are observing is for the - // current generation - if c.ObservedGeneration != helmRepository.GetGeneration() { - return false, nil - } - - // Further check the Status - switch c.Status { - case metav1.ConditionTrue: - return true, nil - case metav1.ConditionFalse: - return false, fmt.Errorf(c.Message) - } - } - return false, nil - } -} diff --git a/cmd/flux/create_source_oci.go b/cmd/flux/create_source_oci.go index 30fc4d8d..6393380c 100644 --- a/cmd/flux/create_source_oci.go +++ b/cmd/flux/create_source_oci.go @@ -29,7 +29,6 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" "github.com/fluxcd/pkg/apis/meta" - "github.com/fluxcd/pkg/runtime/conditions" sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" @@ -193,7 +192,7 @@ func createSourceOCIRepositoryCmdRun(cmd *cobra.Command, args []string) error { logger.Waitingf("waiting for OCIRepository reconciliation") if err := wait.PollUntilContextTimeout(ctx, rootArgs.pollInterval, rootArgs.timeout, true, - isOCIRepositoryReady(kubeClient, namespacedName, repository)); err != nil { + isObjectReadyConditionFunc(kubeClient, namespacedName, repository)); err != nil { return err } logger.Successf("OCIRepository reconciliation completed") @@ -235,29 +234,3 @@ func upsertOCIRepository(ctx context.Context, kubeClient client.Client, logger.Successf("OCIRepository updated") return namespacedName, nil } - -func isOCIRepositoryReady(kubeClient client.Client, namespacedName types.NamespacedName, ociRepository *sourcev1.OCIRepository) wait.ConditionWithContextFunc { - return func(ctx context.Context) (bool, error) { - err := kubeClient.Get(ctx, namespacedName, ociRepository) - if err != nil { - return false, err - } - - if c := conditions.Get(ociRepository, meta.ReadyCondition); c != nil { - // Confirm the Ready condition we are observing is for the - // current generation - if c.ObservedGeneration != ociRepository.GetGeneration() { - return false, nil - } - - // Further check the Status - switch c.Status { - case metav1.ConditionTrue: - return true, nil - case metav1.ConditionFalse: - return false, fmt.Errorf(c.Message) - } - } - return false, nil - } -} diff --git a/cmd/flux/main_e2e_test.go b/cmd/flux/main_e2e_test.go index 008b810f..f2b01cc6 100644 --- a/cmd/flux/main_e2e_test.go +++ b/cmd/flux/main_e2e_test.go @@ -25,10 +25,15 @@ import ( "os" "testing" + "github.com/go-logr/logr" + "sigs.k8s.io/controller-runtime/pkg/log" + "github.com/fluxcd/flux2/v2/internal/utils" ) func TestMain(m *testing.M) { + log.SetLogger(logr.New(log.NullLogSink{})) + // Ensure tests print consistent timestamps regardless of timezone os.Setenv("TZ", "UTC") diff --git a/cmd/flux/main_unit_test.go b/cmd/flux/main_unit_test.go index 8d3e6398..8e0af1aa 100644 --- a/cmd/flux/main_unit_test.go +++ b/cmd/flux/main_unit_test.go @@ -22,10 +22,13 @@ package main import ( "context" "fmt" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "os" "testing" + + "github.com/go-logr/logr" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "sigs.k8s.io/controller-runtime/pkg/log" ) // The test environment is long running process shared between tests, initialized @@ -34,6 +37,8 @@ import ( var testEnv *testEnvKubeManager func TestMain(m *testing.M) { + log.SetLogger(logr.New(log.NullLogSink{})) + // Ensure tests print consistent timestamps regardless of timezone os.Setenv("TZ", "UTC") diff --git a/cmd/flux/readiness.go b/cmd/flux/readiness.go new file mode 100644 index 00000000..f201625f --- /dev/null +++ b/cmd/flux/readiness.go @@ -0,0 +1,149 @@ +/* +Copyright 2023 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "context" + "fmt" + + kstatus "github.com/fluxcd/cli-utils/pkg/kstatus/status" + apimeta "k8s.io/apimachinery/pkg/api/meta" + "k8s.io/apimachinery/pkg/types" + "k8s.io/apimachinery/pkg/util/wait" + "sigs.k8s.io/controller-runtime/pkg/client" + + "github.com/fluxcd/pkg/apis/meta" + "github.com/fluxcd/pkg/runtime/object" + "github.com/fluxcd/pkg/runtime/patch" +) + +// objectStatusType is the type of object in terms of status when computing the +// readiness of an object. Readiness check method depends on the type of object. +// For a dynamic object, Ready status condition is considered only for the +// latest generation of the object. For a static object that don't have any +// condition, the object generation is not considered. +type objectStatusType int + +const ( + objectStatusDynamic objectStatusType = iota + objectStatusStatic +) + +// isObjectReady determines if an object is ready using the kstatus.Compute() +// result. statusType helps differenciate between static and dynamic objects to +// accurately check the object's readiness. A dynamic object may have some extra +// considerations depending on the object. +func isObjectReady(obj client.Object, statusType objectStatusType) (bool, error) { + observedGen, err := object.GetStatusObservedGeneration(obj) + if err != nil && err != object.ErrObservedGenerationNotFound { + return false, err + } + + if statusType == objectStatusDynamic { + // Object not reconciled yet. + if observedGen < 1 { + return false, nil + } + + cobj, ok := obj.(meta.ObjectWithConditions) + if !ok { + return false, fmt.Errorf("unable to get conditions from object") + } + + if c := apimeta.FindStatusCondition(cobj.GetConditions(), meta.ReadyCondition); c != nil { + // Ensure that the ready condition is for the latest generation of + // the object. + // NOTE: Some APIs like ImageUpdateAutomation and HelmRelease don't + // support per condition observed generation yet. Per condition + // observed generation for them are always zero. + // There are two strategies used across different object kinds to + // check the latest ready condition: + // - check that the ready condition's generation matches the + // object's generation. + // - check that the observed generation of the object in the + // status matches the object's generation. + // + // TODO: Once ImageUpdateAutomation and HelmRelease APIs have per + // condition observed generation, remove the object's observed + // generation and object's generation check (the second condition + // below). Also, try replacing this readiness check function with + // fluxcd/pkg/ssa's ResourceManager.Wait(), which uses kstatus + // internally to check readiness of the objects. + if c.ObservedGeneration != 0 && c.ObservedGeneration != obj.GetGeneration() { + return false, nil + } + if c.ObservedGeneration == 0 && observedGen != obj.GetGeneration() { + return false, nil + } + } else { + return false, nil + } + } + + u, err := patch.ToUnstructured(obj) + if err != nil { + return false, err + } + result, err := kstatus.Compute(u) + if err != nil { + return false, err + } + switch result.Status { + case kstatus.CurrentStatus: + return true, nil + case kstatus.InProgressStatus: + return false, nil + default: + return false, fmt.Errorf(result.Message) + } +} + +// isObjectReadyConditionFunc returns a wait.ConditionFunc to be used with +// wait.Poll* while polling for an object with dynamic status to be ready. +func isObjectReadyConditionFunc(kubeClient client.Client, namespaceName types.NamespacedName, obj client.Object) wait.ConditionWithContextFunc { + return func(ctx context.Context) (bool, error) { + err := kubeClient.Get(ctx, namespaceName, obj) + if err != nil { + return false, err + } + + return isObjectReady(obj, objectStatusDynamic) + } +} + +// isStaticObjectReadyConditionFunc returns a wait.ConditionFunc to be used with +// wait.Poll* while polling for an object with static or no status to be +// ready. +func isStaticObjectReadyConditionFunc(kubeClient client.Client, namespaceName types.NamespacedName, obj client.Object) wait.ConditionWithContextFunc { + return func(ctx context.Context) (bool, error) { + err := kubeClient.Get(ctx, namespaceName, obj) + if err != nil { + return false, err + } + + return isObjectReady(obj, objectStatusStatic) + } +} + +// kstatusCompute returns the kstatus computed result of a given object. +func kstatusCompute(obj client.Object) (result *kstatus.Result, err error) { + u, err := patch.ToUnstructured(obj) + if err != nil { + return result, err + } + return kstatus.Compute(u) +} diff --git a/cmd/flux/readiness_test.go b/cmd/flux/readiness_test.go new file mode 100644 index 00000000..4d987042 --- /dev/null +++ b/cmd/flux/readiness_test.go @@ -0,0 +1,139 @@ +/* +Copyright 2023 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "testing" + + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "sigs.k8s.io/controller-runtime/pkg/client" + + notificationv1 "github.com/fluxcd/notification-controller/api/v1beta3" + "github.com/fluxcd/pkg/apis/meta" + "github.com/fluxcd/pkg/runtime/conditions" + sourcev1 "github.com/fluxcd/source-controller/api/v1" +) + +func Test_isObjectReady(t *testing.T) { + // Ready object. + readyObj := &sourcev1.GitRepository{} + readyObj.Generation = 1 + readyObj.Status.ObservedGeneration = 1 + conditions.MarkTrue(readyObj, meta.ReadyCondition, "foo1", "bar1") + + // Not ready object. + notReadyObj := readyObj.DeepCopy() + conditions.MarkFalse(notReadyObj, meta.ReadyCondition, "foo2", "bar2") + + // Not reconciled object. + notReconciledObj := readyObj.DeepCopy() + notReconciledObj.Status = sourcev1.GitRepositoryStatus{ObservedGeneration: -1} + + // No condition. + noConditionObj := readyObj.DeepCopy() + noConditionObj.Status = sourcev1.GitRepositoryStatus{ObservedGeneration: 1} + + // Outdated condition. + readyObjOutdated := readyObj.DeepCopy() + readyObjOutdated.Generation = 2 + + // Object without per condition observed generation. + oldObj := readyObj.DeepCopy() + readyTrueCondn := conditions.TrueCondition(meta.ReadyCondition, "foo3", "bar3") + oldObj.Status.Conditions = []metav1.Condition{*readyTrueCondn} + + // Outdated object without per condition observed generation. + oldObjOutdated := oldObj.DeepCopy() + oldObjOutdated.Generation = 2 + + // Empty status object. + staticObj := readyObj.DeepCopy() + staticObj.Status = sourcev1.GitRepositoryStatus{} + + // No status object. + noStatusObj := ¬ificationv1.Provider{} + noStatusObj.Generation = 1 + + type args struct { + obj client.Object + statusType objectStatusType + } + tests := []struct { + name string + args args + want bool + wantErr bool + }{ + { + name: "dynamic ready", + args: args{obj: readyObj, statusType: objectStatusDynamic}, + want: true, + }, + { + name: "dynamic not ready", + args: args{obj: notReadyObj, statusType: objectStatusDynamic}, + want: false, + }, + { + name: "dynamic not reconciled", + args: args{obj: notReconciledObj, statusType: objectStatusDynamic}, + want: false, + }, + { + name: "dynamic not condition", + args: args{obj: noConditionObj, statusType: objectStatusDynamic}, + want: false, + }, + { + name: "dynamic ready outdated", + args: args{obj: readyObjOutdated, statusType: objectStatusDynamic}, + want: false, + }, + { + name: "dynamic ready without per condition gen", + args: args{obj: oldObj, statusType: objectStatusDynamic}, + want: true, + }, + { + name: "dynamic outdated ready status without per condition gen", + args: args{obj: oldObjOutdated, statusType: objectStatusDynamic}, + want: false, + }, + { + name: "static empty status", + args: args{obj: staticObj, statusType: objectStatusStatic}, + want: true, + }, + { + name: "static no status", + args: args{obj: noStatusObj, statusType: objectStatusStatic}, + want: true, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, err := isObjectReady(tt.args.obj, tt.args.statusType) + if (err != nil) != tt.wantErr { + t.Errorf("isObjectReady() error = %v, wantErr %v", err, tt.wantErr) + return + } + if got != tt.want { + t.Errorf("isObjectReady() = %v, want %v", got, tt.want) + } + }) + } +} diff --git a/cmd/flux/reconcile.go b/cmd/flux/reconcile.go index 08b47a2a..7589dcb9 100644 --- a/cmd/flux/reconcile.go +++ b/cmd/flux/reconcile.go @@ -21,6 +21,7 @@ import ( "fmt" "time" + kstatus "github.com/fluxcd/cli-utils/pkg/kstatus/status" "github.com/spf13/cobra" apimeta "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -30,8 +31,6 @@ import ( "k8s.io/client-go/util/retry" "sigs.k8s.io/controller-runtime/pkg/client" - notificationv1 "github.com/fluxcd/notification-controller/api/v1" - notificationv1b2 "github.com/fluxcd/notification-controller/api/v1beta2" "github.com/fluxcd/pkg/apis/meta" "github.com/fluxcd/flux2/v2/internal/utils" @@ -112,16 +111,6 @@ func (reconcile reconcileCommand) run(cmd *cobra.Command, args []string) error { } logger.Successf("%s annotated", reconcile.kind) - if reconcile.kind == notificationv1b2.AlertKind || reconcile.kind == notificationv1.ReceiverKind { - if err = wait.PollUntilContextTimeout(ctx, rootArgs.pollInterval, rootArgs.timeout, true, - isReconcileReady(kubeClient, namespacedName, reconcile.object)); err != nil { - return err - } - - logger.Successf(reconcile.object.successMessage()) - return nil - } - lastHandledReconcileAt := reconcile.object.lastHandledReconcileRequest() logger.Waitingf("waiting for %s reconciliation", reconcile.kind) if err := wait.PollUntilContextTimeout(ctx, rootArgs.pollInterval, rootArgs.timeout, true, @@ -146,9 +135,17 @@ func reconciliationHandled(kubeClient client.Client, namespacedName types.Namesp if err != nil { return false, err } - isProgressing := apimeta.IsStatusConditionPresentAndEqual(reconcilableConditions(obj), - meta.ReadyCondition, metav1.ConditionUnknown) - return obj.lastHandledReconcileRequest() != lastHandledReconcileAt && !isProgressing, nil + + if obj.lastHandledReconcileRequest() == lastHandledReconcileAt { + return false, nil + } + + result, err := kstatusCompute(obj.asClientObject()) + if err != nil { + return false, err + } + + return result.Status == kstatus.CurrentStatus, nil } } @@ -174,22 +171,3 @@ func requestReconciliation(ctx context.Context, kubeClient client.Client, return kubeClient.Patch(ctx, object, patch) }) } - -func isReconcileReady(kubeClient client.Client, namespacedName types.NamespacedName, obj reconcilable) wait.ConditionWithContextFunc { - return func(ctx context.Context) (bool, error) { - err := kubeClient.Get(ctx, namespacedName, obj.asClientObject()) - if err != nil { - return false, err - } - - if c := apimeta.FindStatusCondition(reconcilableConditions(obj), meta.ReadyCondition); c != nil { - switch c.Status { - case metav1.ConditionTrue: - return true, nil - case metav1.ConditionFalse: - return false, fmt.Errorf(c.Message) - } - } - return false, nil - } -} diff --git a/cmd/flux/reconcile_alert.go b/cmd/flux/reconcile_alert.go index 655b366f..8dd8be61 100644 --- a/cmd/flux/reconcile_alert.go +++ b/cmd/flux/reconcile_alert.go @@ -40,5 +40,5 @@ func init() { } func (obj alertAdapter) lastHandledReconcileRequest() string { - return "" + return obj.Status.GetLastHandledReconcileRequest() } diff --git a/cmd/flux/reconcile_alertprovider.go b/cmd/flux/reconcile_alertprovider.go index 4f6ce136..5c3001af 100644 --- a/cmd/flux/reconcile_alertprovider.go +++ b/cmd/flux/reconcile_alertprovider.go @@ -17,18 +17,9 @@ limitations under the License. package main import ( - "context" - "fmt" - "time" - "github.com/spf13/cobra" - "k8s.io/apimachinery/pkg/types" - "k8s.io/apimachinery/pkg/util/wait" notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" - "github.com/fluxcd/pkg/apis/meta" - - "github.com/fluxcd/flux2/v2/internal/utils" ) var reconcileAlertProviderCmd = &cobra.Command{ @@ -38,56 +29,16 @@ var reconcileAlertProviderCmd = &cobra.Command{ Example: ` # Trigger a reconciliation for an existing provider flux reconcile alert-provider slack`, ValidArgsFunction: resourceNamesCompletionFunc(notificationv1.GroupVersion.WithKind(notificationv1.ProviderKind)), - RunE: reconcileAlertProviderCmdRun, + RunE: reconcileCommand{ + apiType: alertProviderType, + object: alertProviderAdapter{¬ificationv1.Provider{}}, + }.run, } func init() { reconcileCmd.AddCommand(reconcileAlertProviderCmd) } -func reconcileAlertProviderCmdRun(cmd *cobra.Command, args []string) error { - if len(args) < 1 { - return fmt.Errorf("Provider name is required") - } - name := args[0] - - ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) - defer cancel() - - kubeClient, err := utils.KubeClient(kubeconfigArgs, kubeclientOptions) - if err != nil { - return err - } - - namespacedName := types.NamespacedName{ - Namespace: *kubeconfigArgs.Namespace, - Name: name, - } - - logger.Actionf("annotating Provider %s in %s namespace", name, *kubeconfigArgs.Namespace) - var alertProvider notificationv1.Provider - err = kubeClient.Get(ctx, namespacedName, &alertProvider) - if err != nil { - return err - } - - if alertProvider.Annotations == nil { - alertProvider.Annotations = map[string]string{ - meta.ReconcileRequestAnnotation: time.Now().Format(time.RFC3339Nano), - } - } else { - alertProvider.Annotations[meta.ReconcileRequestAnnotation] = time.Now().Format(time.RFC3339Nano) - } - if err := kubeClient.Update(ctx, &alertProvider); err != nil { - return err - } - logger.Successf("Provider annotated") - - logger.Waitingf("waiting for reconciliation") - if err := wait.PollUntilContextTimeout(ctx, rootArgs.pollInterval, rootArgs.timeout, true, - isAlertProviderReady(kubeClient, namespacedName, &alertProvider)); err != nil { - return err - } - logger.Successf("Provider reconciliation completed") - return nil +func (obj alertProviderAdapter) lastHandledReconcileRequest() string { + return obj.Status.GetLastHandledReconcileRequest() } diff --git a/cmd/flux/reconcile_receiver.go b/cmd/flux/reconcile_receiver.go index a16946a7..42a2dd24 100644 --- a/cmd/flux/reconcile_receiver.go +++ b/cmd/flux/reconcile_receiver.go @@ -17,18 +17,9 @@ limitations under the License. package main import ( - "context" - "fmt" - "time" - "github.com/spf13/cobra" - "k8s.io/apimachinery/pkg/types" - "k8s.io/apimachinery/pkg/util/wait" notificationv1 "github.com/fluxcd/notification-controller/api/v1" - "github.com/fluxcd/pkg/apis/meta" - - "github.com/fluxcd/flux2/v2/internal/utils" ) var reconcileReceiverCmd = &cobra.Command{ @@ -38,62 +29,16 @@ var reconcileReceiverCmd = &cobra.Command{ Example: ` # Trigger a reconciliation for an existing receiver flux reconcile receiver main`, ValidArgsFunction: resourceNamesCompletionFunc(notificationv1.GroupVersion.WithKind(notificationv1.ReceiverKind)), - RunE: reconcileReceiverCmdRun, + RunE: reconcileCommand{ + apiType: receiverType, + object: receiverAdapter{¬ificationv1.Receiver{}}, + }.run, } func init() { reconcileCmd.AddCommand(reconcileReceiverCmd) } -func reconcileReceiverCmdRun(cmd *cobra.Command, args []string) error { - if len(args) < 1 { - return fmt.Errorf("receiver name is required") - } - name := args[0] - - ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) - defer cancel() - - kubeClient, err := utils.KubeClient(kubeconfigArgs, kubeclientOptions) - if err != nil { - return err - } - - namespacedName := types.NamespacedName{ - Namespace: *kubeconfigArgs.Namespace, - Name: name, - } - - var receiver notificationv1.Receiver - err = kubeClient.Get(ctx, namespacedName, &receiver) - if err != nil { - return err - } - - if receiver.Spec.Suspend { - return fmt.Errorf("resource is suspended") - } - - logger.Actionf("annotating Receiver %s in %s namespace", name, *kubeconfigArgs.Namespace) - if receiver.Annotations == nil { - receiver.Annotations = map[string]string{ - meta.ReconcileRequestAnnotation: time.Now().Format(time.RFC3339Nano), - } - } else { - receiver.Annotations[meta.ReconcileRequestAnnotation] = time.Now().Format(time.RFC3339Nano) - } - if err := kubeClient.Update(ctx, &receiver); err != nil { - return err - } - logger.Successf("Receiver annotated") - - logger.Waitingf("waiting for Receiver reconciliation") - if err := wait.PollUntilContextTimeout(ctx, rootArgs.pollInterval, rootArgs.timeout, true, - isReceiverReady(kubeClient, namespacedName, &receiver)); err != nil { - return err - } - - logger.Successf("Receiver reconciliation completed") - - return nil +func (obj receiverAdapter) lastHandledReconcileRequest() string { + return obj.Status.GetLastHandledReconcileRequest() } diff --git a/cmd/flux/resume.go b/cmd/flux/resume.go index d62895ca..4cb700a2 100644 --- a/cmd/flux/resume.go +++ b/cmd/flux/resume.go @@ -213,7 +213,7 @@ func (resume resumeCommand) reconcile(ctx context.Context, res resumable) reconc logger.Waitingf("waiting for %s reconciliation", resume.kind) if err := wait.PollUntilContextTimeout(ctx, rootArgs.pollInterval, rootArgs.timeout, true, - isReady(resume.client, namespacedName, res)); err != nil { + isObjectReadyConditionFunc(resume.client, namespacedName, res.asClientObject())); err != nil { return reconcileResponse{ resumable: res, err: err, diff --git a/cmd/flux/resume_alertprovider.go b/cmd/flux/resume_alertprovider.go new file mode 100644 index 00000000..e0ba49b9 --- /dev/null +++ b/cmd/flux/resume_alertprovider.go @@ -0,0 +1,60 @@ +/* +Copyright 2023 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "github.com/spf13/cobra" + + notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" +) + +var resumeAlertProviderCmd = &cobra.Command{ + Use: "alert-provider [name]", + Short: "Resume a suspended Provider", + Long: `The resume command marks a previously suspended Provider resource for reconciliation and waits for it to +finish the apply.`, + Example: ` # Resume reconciliation for an existing Provider + flux resume alert-provider main + + # Resume reconciliation for multiple Providers + flux resume alert-provider main-1 main-2`, + ValidArgsFunction: resourceNamesCompletionFunc(notificationv1.GroupVersion.WithKind(notificationv1.ProviderKind)), + RunE: resumeCommand{ + apiType: alertProviderType, + list: &alertProviderListAdapter{¬ificationv1.ProviderList{}}, + }.run, +} + +func init() { + resumeCmd.AddCommand(resumeAlertProviderCmd) +} + +func (obj alertProviderAdapter) getObservedGeneration() int64 { + return obj.Provider.Status.ObservedGeneration +} + +func (obj alertProviderAdapter) setUnsuspended() { + obj.Provider.Spec.Suspend = false +} + +func (obj alertProviderAdapter) successMessage() string { + return "Provider reconciliation completed" +} + +func (a alertProviderListAdapter) resumeItem(i int) resumable { + return &alertProviderAdapter{&a.ProviderList.Items[i]} +} diff --git a/cmd/flux/status.go b/cmd/flux/status.go index 6e4e18c5..95c6e9f3 100644 --- a/cmd/flux/status.go +++ b/cmd/flux/status.go @@ -17,18 +17,9 @@ limitations under the License. package main import ( - "context" - "fmt" - - apimeta "k8s.io/apimachinery/pkg/api/meta" + "github.com/fluxcd/cli-utils/pkg/object" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/apimachinery/pkg/types" - "k8s.io/apimachinery/pkg/util/wait" - "sigs.k8s.io/controller-runtime/pkg/client" - - "github.com/fluxcd/cli-utils/pkg/object" - "github.com/fluxcd/pkg/apis/meta" ) // statusable is used to see if a resource is considered ready in the usual way @@ -45,42 +36,6 @@ type oldConditions interface { GetStatusConditions() *[]metav1.Condition } -func statusableConditions(object statusable) []metav1.Condition { - if s, ok := object.(meta.ObjectWithConditions); ok { - return s.GetConditions() - } - - if s, ok := object.(oldConditions); ok { - return *s.GetStatusConditions() - } - - return []metav1.Condition{} -} - -func isReady(kubeClient client.Client, namespacedName types.NamespacedName, object statusable) wait.ConditionWithContextFunc { - return func(ctx context.Context) (bool, error) { - err := kubeClient.Get(ctx, namespacedName, object.asClientObject()) - if err != nil { - return false, err - } - - // Confirm the state we are observing is for the current generation - if object.GetGeneration() != object.getObservedGeneration() { - return false, nil - } - - if c := apimeta.FindStatusCondition(statusableConditions(object), meta.ReadyCondition); c != nil { - switch c.Status { - case metav1.ConditionTrue: - return true, nil - case metav1.ConditionFalse: - return false, fmt.Errorf(c.Message) - } - } - return false, nil - } -} - func buildComponentObjectRefs(components ...string) ([]object.ObjMetadata, error) { var objRefs []object.ObjMetadata for _, deployment := range components { diff --git a/cmd/flux/suspend_alertprovider.go b/cmd/flux/suspend_alertprovider.go new file mode 100644 index 00000000..5a69513c --- /dev/null +++ b/cmd/flux/suspend_alertprovider.go @@ -0,0 +1,56 @@ +/* +Copyright 2023 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "github.com/spf13/cobra" + + notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" +) + +var suspendAlertProviderCmd = &cobra.Command{ + Use: "alert-provider [name]", + Short: "Suspend reconciliation of Provider", + Long: `The suspend command disables the reconciliation of a Provider resource.`, + Example: ` # Suspend reconciliation for an existing Provider + flux suspend alert-provider main + + # Suspend reconciliation for multiple Providers + flux suspend alert-providers main-1 main-2`, + ValidArgsFunction: resourceNamesCompletionFunc(notificationv1.GroupVersion.WithKind(notificationv1.ProviderKind)), + RunE: suspendCommand{ + apiType: alertProviderType, + object: &alertProviderAdapter{¬ificationv1.Provider{}}, + list: &alertProviderListAdapter{¬ificationv1.ProviderList{}}, + }.run, +} + +func init() { + suspendCmd.AddCommand(suspendAlertProviderCmd) +} + +func (obj alertProviderAdapter) isSuspended() bool { + return obj.Provider.Spec.Suspend +} + +func (obj alertProviderAdapter) setSuspended() { + obj.Provider.Spec.Suspend = true +} + +func (a alertProviderListAdapter) item(i int) suspendable { + return &alertProviderAdapter{&a.ProviderList.Items[i]} +} From b28b5dd9b9cbbcfb4c771c84a58de78ceda8a9e9 Mon Sep 17 00:00:00 2001 From: Sunny Date: Fri, 13 Oct 2023 20:40:34 +0000 Subject: [PATCH 698/818] non-reconciliable & readiness of static objects Remove reconcile subcommand for static object APIs Alerts and Providers. Add a isStatic() method on all the object adapters to determine if they are static and don't have reconciler. The objects that don't have reconcilers are skipped from reconciliation and readiness checks like HelmRepository of type OCI. Add default ready message for `get` subcommand output for static objects, Alerts, Providers and HelmRepositories of type OCI, as ready message can't be derived for them from their status. Signed-off-by: Sunny --- cmd/flux/create_alert.go | 2 +- cmd/flux/create_alertprovider.go | 2 +- cmd/flux/create_source_helm.go | 8 +++-- cmd/flux/get_alert.go | 3 +- cmd/flux/get_alertprovider.go | 3 +- cmd/flux/get_source_helm.go | 8 ++++- cmd/flux/reconcile.go | 6 ++++ cmd/flux/reconcile_alert.go | 44 -------------------------- cmd/flux/reconcile_alertprovider.go | 44 -------------------------- cmd/flux/reconcile_helmrelease.go | 4 +++ cmd/flux/reconcile_image_repository.go | 4 +++ cmd/flux/reconcile_image_updateauto.go | 4 +++ cmd/flux/reconcile_kustomization.go | 4 +++ cmd/flux/reconcile_receiver.go | 4 +++ cmd/flux/reconcile_source_bucket.go | 4 +++ cmd/flux/reconcile_source_chart.go | 4 +++ cmd/flux/reconcile_source_git.go | 4 +++ cmd/flux/reconcile_source_helm.go | 4 +++ cmd/flux/reconcile_source_oci.go | 4 +++ cmd/flux/resume.go | 9 ++++-- cmd/flux/resume_alert.go | 4 +++ cmd/flux/resume_alertprovider.go | 4 +++ 22 files changed, 80 insertions(+), 97 deletions(-) delete mode 100644 cmd/flux/reconcile_alert.go delete mode 100644 cmd/flux/reconcile_alertprovider.go diff --git a/cmd/flux/create_alert.go b/cmd/flux/create_alert.go index 22a5d289..e750d44f 100644 --- a/cmd/flux/create_alert.go +++ b/cmd/flux/create_alert.go @@ -132,7 +132,7 @@ func createAlertCmdRun(cmd *cobra.Command, args []string) error { logger.Waitingf("waiting for Alert reconciliation") if err := wait.PollUntilContextTimeout(ctx, rootArgs.pollInterval, rootArgs.timeout, true, - isObjectReadyConditionFunc(kubeClient, namespacedName, &alert)); err != nil { + isStaticObjectReadyConditionFunc(kubeClient, namespacedName, &alert)); err != nil { return err } logger.Successf("Alert %s is ready", name) diff --git a/cmd/flux/create_alertprovider.go b/cmd/flux/create_alertprovider.go index 468ec5d8..402ff0c4 100644 --- a/cmd/flux/create_alertprovider.go +++ b/cmd/flux/create_alertprovider.go @@ -127,7 +127,7 @@ func createAlertProviderCmdRun(cmd *cobra.Command, args []string) error { logger.Waitingf("waiting for Provider reconciliation") if err := wait.PollUntilContextTimeout(ctx, rootArgs.pollInterval, rootArgs.timeout, true, - isObjectReadyConditionFunc(kubeClient, namespacedName, &provider)); err != nil { + isStaticObjectReadyConditionFunc(kubeClient, namespacedName, &provider)); err != nil { return err } diff --git a/cmd/flux/create_source_helm.go b/cmd/flux/create_source_helm.go index 5b46f45e..522e980f 100644 --- a/cmd/flux/create_source_helm.go +++ b/cmd/flux/create_source_helm.go @@ -230,8 +230,12 @@ func createSourceHelmCmdRun(cmd *cobra.Command, args []string) error { } logger.Waitingf("waiting for HelmRepository source reconciliation") - if err := wait.PollUntilContextTimeout(ctx, rootArgs.pollInterval, rootArgs.timeout, true, - isObjectReadyConditionFunc(kubeClient, namespacedName, helmRepository)); err != nil { + readyConditionFunc := isObjectReadyConditionFunc(kubeClient, namespacedName, helmRepository) + if helmRepository.Spec.Type == sourcev1.HelmRepositoryTypeOCI { + // HelmRepository type OCI is a static object. + readyConditionFunc = isStaticObjectReadyConditionFunc(kubeClient, namespacedName, helmRepository) + } + if err := wait.PollUntilContextTimeout(ctx, rootArgs.pollInterval, rootArgs.timeout, true, readyConditionFunc); err != nil { return err } logger.Successf("HelmRepository source reconciliation completed") diff --git a/cmd/flux/get_alert.go b/cmd/flux/get_alert.go index 9ea6c682..760423c3 100644 --- a/cmd/flux/get_alert.go +++ b/cmd/flux/get_alert.go @@ -23,6 +23,7 @@ import ( "github.com/spf13/cobra" "golang.org/x/text/cases" "golang.org/x/text/language" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" @@ -77,7 +78,7 @@ func init() { func (s alertListAdapter) summariseItem(i int, includeNamespace bool, includeKind bool) []string { item := s.Items[i] - status, msg := statusAndMessage(item.Status.Conditions) + status, msg := string(metav1.ConditionTrue), "Alert is Ready" return append(nameColumns(&item, includeNamespace, includeKind), cases.Title(language.English).String(strconv.FormatBool(item.Spec.Suspend)), status, msg) } diff --git a/cmd/flux/get_alertprovider.go b/cmd/flux/get_alertprovider.go index 983cbf33..a4c3bca6 100644 --- a/cmd/flux/get_alertprovider.go +++ b/cmd/flux/get_alertprovider.go @@ -20,6 +20,7 @@ import ( "fmt" "github.com/spf13/cobra" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" @@ -74,7 +75,7 @@ func init() { func (s alertProviderListAdapter) summariseItem(i int, includeNamespace bool, includeKind bool) []string { item := s.Items[i] - status, msg := statusAndMessage(item.Status.Conditions) + status, msg := string(metav1.ConditionTrue), "Provider is Ready" return append(nameColumns(&item, includeNamespace, includeKind), status, msg) } diff --git a/cmd/flux/get_source_helm.go b/cmd/flux/get_source_helm.go index 173a1880..ec131714 100644 --- a/cmd/flux/get_source_helm.go +++ b/cmd/flux/get_source_helm.go @@ -23,6 +23,7 @@ import ( "github.com/spf13/cobra" "golang.org/x/text/cases" "golang.org/x/text/language" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" @@ -82,7 +83,12 @@ func (a *helmRepositoryListAdapter) summariseItem(i int, includeNamespace bool, if item.GetArtifact() != nil { revision = item.GetArtifact().Revision } - status, msg := statusAndMessage(item.Status.Conditions) + var status, msg string + if item.Spec.Type == sourcev1.HelmRepositoryTypeOCI { + status, msg = string(metav1.ConditionTrue), "Helm repository is Ready" + } else { + status, msg = statusAndMessage(item.Status.Conditions) + } revision = utils.TruncateHex(revision) msg = utils.TruncateHex(msg) return append(nameColumns(&item, includeNamespace, includeKind), diff --git a/cmd/flux/reconcile.go b/cmd/flux/reconcile.go index 7589dcb9..c6c7a472 100644 --- a/cmd/flux/reconcile.go +++ b/cmd/flux/reconcile.go @@ -60,6 +60,7 @@ type reconcilable interface { GetAnnotations() map[string]string SetAnnotations(map[string]string) + isStatic() bool // is it a static object that does not have a reconciler? lastHandledReconcileRequest() string // what was the last handled reconcile request? successMessage() string // what do you want to tell people when successfully reconciled? } @@ -100,6 +101,11 @@ func (reconcile reconcileCommand) run(cmd *cobra.Command, args []string) error { return err } + if reconcile.object.isStatic() { + logger.Successf("reconciliation not supported by the object") + return nil + } + if reconcile.object.isSuspended() { return fmt.Errorf("resource is suspended") } diff --git a/cmd/flux/reconcile_alert.go b/cmd/flux/reconcile_alert.go deleted file mode 100644 index 8dd8be61..00000000 --- a/cmd/flux/reconcile_alert.go +++ /dev/null @@ -1,44 +0,0 @@ -/* -Copyright 2020 The Flux authors - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package main - -import ( - "github.com/spf13/cobra" - - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" -) - -var reconcileAlertCmd = &cobra.Command{ - Use: "alert [name]", - Short: "Reconcile an Alert", - Long: `The reconcile alert command triggers a reconciliation of an Alert resource and waits for it to finish.`, - Example: ` # Trigger a reconciliation for an existing alert - flux reconcile alert main`, - ValidArgsFunction: resourceNamesCompletionFunc(notificationv1.GroupVersion.WithKind(notificationv1.AlertKind)), - RunE: reconcileCommand{ - apiType: alertType, - object: alertAdapter{¬ificationv1.Alert{}}, - }.run, -} - -func init() { - reconcileCmd.AddCommand(reconcileAlertCmd) -} - -func (obj alertAdapter) lastHandledReconcileRequest() string { - return obj.Status.GetLastHandledReconcileRequest() -} diff --git a/cmd/flux/reconcile_alertprovider.go b/cmd/flux/reconcile_alertprovider.go deleted file mode 100644 index 5c3001af..00000000 --- a/cmd/flux/reconcile_alertprovider.go +++ /dev/null @@ -1,44 +0,0 @@ -/* -Copyright 2020 The Flux authors - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package main - -import ( - "github.com/spf13/cobra" - - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" -) - -var reconcileAlertProviderCmd = &cobra.Command{ - Use: "alert-provider [name]", - Short: "Reconcile a Provider", - Long: `The reconcile alert-provider command triggers a reconciliation of a Provider resource and waits for it to finish.`, - Example: ` # Trigger a reconciliation for an existing provider - flux reconcile alert-provider slack`, - ValidArgsFunction: resourceNamesCompletionFunc(notificationv1.GroupVersion.WithKind(notificationv1.ProviderKind)), - RunE: reconcileCommand{ - apiType: alertProviderType, - object: alertProviderAdapter{¬ificationv1.Provider{}}, - }.run, -} - -func init() { - reconcileCmd.AddCommand(reconcileAlertProviderCmd) -} - -func (obj alertProviderAdapter) lastHandledReconcileRequest() string { - return obj.Status.GetLastHandledReconcileRequest() -} diff --git a/cmd/flux/reconcile_helmrelease.go b/cmd/flux/reconcile_helmrelease.go index b015aa8b..b55a1295 100644 --- a/cmd/flux/reconcile_helmrelease.go +++ b/cmd/flux/reconcile_helmrelease.go @@ -81,3 +81,7 @@ func (obj helmReleaseAdapter) getSource() (reconcileSource, types.NamespacedName Namespace: ns, } } + +func (obj helmReleaseAdapter) isStatic() bool { + return false +} diff --git a/cmd/flux/reconcile_image_repository.go b/cmd/flux/reconcile_image_repository.go index c7304eb7..6a386c8b 100644 --- a/cmd/flux/reconcile_image_repository.go +++ b/cmd/flux/reconcile_image_repository.go @@ -48,3 +48,7 @@ func (obj imageRepositoryAdapter) lastHandledReconcileRequest() string { func (obj imageRepositoryAdapter) successMessage() string { return fmt.Sprintf("scan fetched %d tags", obj.Status.LastScanResult.TagCount) } + +func (obj imageRepositoryAdapter) isStatic() bool { + return false +} diff --git a/cmd/flux/reconcile_image_updateauto.go b/cmd/flux/reconcile_image_updateauto.go index 2db4a1c0..95bb42df 100644 --- a/cmd/flux/reconcile_image_updateauto.go +++ b/cmd/flux/reconcile_image_updateauto.go @@ -56,3 +56,7 @@ func (obj imageUpdateAutomationAdapter) successMessage() string { } return "automation not yet run" } + +func (obj imageUpdateAutomationAdapter) isStatic() bool { + return false +} diff --git a/cmd/flux/reconcile_kustomization.go b/cmd/flux/reconcile_kustomization.go index 99d12545..7a18ec02 100644 --- a/cmd/flux/reconcile_kustomization.go +++ b/cmd/flux/reconcile_kustomization.go @@ -88,3 +88,7 @@ func (obj kustomizationAdapter) getSource() (reconcileSource, types.NamespacedNa Namespace: obj.Spec.SourceRef.Namespace, } } + +func (obj kustomizationAdapter) isStatic() bool { + return false +} diff --git a/cmd/flux/reconcile_receiver.go b/cmd/flux/reconcile_receiver.go index 42a2dd24..1691a95d 100644 --- a/cmd/flux/reconcile_receiver.go +++ b/cmd/flux/reconcile_receiver.go @@ -42,3 +42,7 @@ func init() { func (obj receiverAdapter) lastHandledReconcileRequest() string { return obj.Status.GetLastHandledReconcileRequest() } + +func (obj receiverAdapter) isStatic() bool { + return false +} diff --git a/cmd/flux/reconcile_source_bucket.go b/cmd/flux/reconcile_source_bucket.go index 2a2bbdbc..68079a66 100644 --- a/cmd/flux/reconcile_source_bucket.go +++ b/cmd/flux/reconcile_source_bucket.go @@ -48,3 +48,7 @@ func (obj bucketAdapter) lastHandledReconcileRequest() string { func (obj bucketAdapter) successMessage() string { return fmt.Sprintf("fetched revision %s", obj.Status.Artifact.Revision) } + +func (obj bucketAdapter) isStatic() bool { + return false +} diff --git a/cmd/flux/reconcile_source_chart.go b/cmd/flux/reconcile_source_chart.go index 41540617..ead4fa76 100644 --- a/cmd/flux/reconcile_source_chart.go +++ b/cmd/flux/reconcile_source_chart.go @@ -84,3 +84,7 @@ func (obj helmChartAdapter) getSource() (reconcileSource, types.NamespacedName) Namespace: obj.Namespace, } } + +func (obj helmChartAdapter) isStatic() bool { + return false +} diff --git a/cmd/flux/reconcile_source_git.go b/cmd/flux/reconcile_source_git.go index a42cd7b9..28256496 100644 --- a/cmd/flux/reconcile_source_git.go +++ b/cmd/flux/reconcile_source_git.go @@ -48,3 +48,7 @@ func (obj gitRepositoryAdapter) lastHandledReconcileRequest() string { func (obj gitRepositoryAdapter) successMessage() string { return fmt.Sprintf("fetched revision %s", obj.Status.Artifact.Revision) } + +func (obj gitRepositoryAdapter) isStatic() bool { + return false +} diff --git a/cmd/flux/reconcile_source_helm.go b/cmd/flux/reconcile_source_helm.go index f559a5e4..a081fd0e 100644 --- a/cmd/flux/reconcile_source_helm.go +++ b/cmd/flux/reconcile_source_helm.go @@ -60,3 +60,7 @@ func (obj helmRepositoryAdapter) successMessage() string { } return fmt.Sprintf("fetched revision %s", obj.Status.Artifact.Revision) } + +func (obj helmRepositoryAdapter) isStatic() bool { + return obj.Spec.Type == sourcev1.HelmRepositoryTypeOCI +} diff --git a/cmd/flux/reconcile_source_oci.go b/cmd/flux/reconcile_source_oci.go index ffc649f9..52237f2f 100644 --- a/cmd/flux/reconcile_source_oci.go +++ b/cmd/flux/reconcile_source_oci.go @@ -48,3 +48,7 @@ func (obj ociRepositoryAdapter) lastHandledReconcileRequest() string { func (obj ociRepositoryAdapter) successMessage() string { return fmt.Sprintf("fetched revision %s", obj.Status.Artifact.Revision) } + +func (obj ociRepositoryAdapter) isStatic() bool { + return false +} diff --git a/cmd/flux/resume.go b/cmd/flux/resume.go index 4cb700a2..5f3c8b81 100644 --- a/cmd/flux/resume.go +++ b/cmd/flux/resume.go @@ -56,6 +56,7 @@ type resumable interface { copyable statusable setUnsuspended() + isStatic() bool successMessage() string } @@ -212,8 +213,12 @@ func (resume resumeCommand) reconcile(ctx context.Context, res resumable) reconc logger.Waitingf("waiting for %s reconciliation", resume.kind) - if err := wait.PollUntilContextTimeout(ctx, rootArgs.pollInterval, rootArgs.timeout, true, - isObjectReadyConditionFunc(resume.client, namespacedName, res.asClientObject())); err != nil { + readyConditionFunc := isObjectReadyConditionFunc(resume.client, namespacedName, res.asClientObject()) + if res.isStatic() { + readyConditionFunc = isStaticObjectReadyConditionFunc(resume.client, namespacedName, res.asClientObject()) + } + + if err := wait.PollUntilContextTimeout(ctx, rootArgs.pollInterval, rootArgs.timeout, true, readyConditionFunc); err != nil { return reconcileResponse{ resumable: res, err: err, diff --git a/cmd/flux/resume_alert.go b/cmd/flux/resume_alert.go index 713aebb3..0b72b059 100644 --- a/cmd/flux/resume_alert.go +++ b/cmd/flux/resume_alert.go @@ -55,6 +55,10 @@ func (obj alertAdapter) successMessage() string { return "Alert reconciliation completed" } +func (a alertAdapter) isStatic() bool { + return true +} + func (a alertListAdapter) resumeItem(i int) resumable { return &alertAdapter{&a.AlertList.Items[i]} } diff --git a/cmd/flux/resume_alertprovider.go b/cmd/flux/resume_alertprovider.go index e0ba49b9..40427c50 100644 --- a/cmd/flux/resume_alertprovider.go +++ b/cmd/flux/resume_alertprovider.go @@ -55,6 +55,10 @@ func (obj alertProviderAdapter) successMessage() string { return "Provider reconciliation completed" } +func (a alertProviderAdapter) isStatic() bool { + return true +} + func (a alertProviderListAdapter) resumeItem(i int) resumable { return &alertProviderAdapter{&a.ProviderList.Items[i]} } From e901e8b6f8f740233fac01fd00b972d0a58a4df6 Mon Sep 17 00:00:00 2001 From: Sunny Date: Fri, 8 Dec 2023 14:14:25 +0000 Subject: [PATCH 699/818] Update all the references of NC v1beta2 to v1beta3 Signed-off-by: Sunny --- cmd/flux/alert.go | 2 +- cmd/flux/alert_provider.go | 2 +- cmd/flux/create_alert.go | 10 ++-- cmd/flux/create_alertprovider.go | 2 +- cmd/flux/delete_alert.go | 2 +- cmd/flux/delete_alertprovider.go | 2 +- cmd/flux/events.go | 10 ++-- cmd/flux/events_test.go | 4 +- cmd/flux/export_alert.go | 2 +- cmd/flux/export_alertprovider.go | 2 +- cmd/flux/get_alert.go | 5 +- cmd/flux/get_alertprovider.go | 5 +- cmd/flux/get_all.go | 6 +-- cmd/flux/main_test.go | 4 +- cmd/flux/resume_alert.go | 4 +- cmd/flux/resume_alertprovider.go | 4 +- cmd/flux/stats.go | 14 +++--- cmd/flux/suspend_alert.go | 2 +- cmd/flux/suspend_alertprovider.go | 2 +- cmd/flux/testdata/export/alert.yaml | 2 +- cmd/flux/testdata/export/objects.yaml | 4 +- cmd/flux/testdata/export/provider.yaml | 2 +- go.mod | 28 ++++++------ go.sum | 58 ++++++++++++------------ internal/utils/utils.go | 4 +- pkg/uninstall/uninstall.go | 6 +-- tests/azure/azure_test.go | 18 ++++---- tests/azure/go.mod | 6 +-- tests/azure/go.sum | 12 ++--- tests/azure/util_test.go | 4 +- tests/integration/azure_specific_test.go | 10 ++-- tests/integration/go.mod | 6 +-- tests/integration/go.sum | 12 ++--- tests/integration/notification_test.go | 14 +++--- tests/integration/suite_test.go | 4 +- 35 files changed, 138 insertions(+), 136 deletions(-) diff --git a/cmd/flux/alert.go b/cmd/flux/alert.go index 366a9a4a..16310e3a 100644 --- a/cmd/flux/alert.go +++ b/cmd/flux/alert.go @@ -19,7 +19,7 @@ package main import ( "sigs.k8s.io/controller-runtime/pkg/client" - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" + notificationv1 "github.com/fluxcd/notification-controller/api/v1beta3" ) // notificationv1.Alert diff --git a/cmd/flux/alert_provider.go b/cmd/flux/alert_provider.go index 3ee071ce..c370a5c0 100644 --- a/cmd/flux/alert_provider.go +++ b/cmd/flux/alert_provider.go @@ -19,7 +19,7 @@ package main import ( "sigs.k8s.io/controller-runtime/pkg/client" - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" + notificationv1 "github.com/fluxcd/notification-controller/api/v1beta3" ) // notificationv1.Provider diff --git a/cmd/flux/create_alert.go b/cmd/flux/create_alert.go index e750d44f..80c8beee 100644 --- a/cmd/flux/create_alert.go +++ b/cmd/flux/create_alert.go @@ -28,7 +28,7 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" notificationv1 "github.com/fluxcd/notification-controller/api/v1" - notificationv1b2 "github.com/fluxcd/notification-controller/api/v1beta2" + notificationv1b3 "github.com/fluxcd/notification-controller/api/v1beta3" "github.com/fluxcd/pkg/apis/meta" "github.com/fluxcd/flux2/v2/internal/utils" @@ -96,13 +96,13 @@ func createAlertCmdRun(cmd *cobra.Command, args []string) error { logger.Generatef("generating Alert") } - alert := notificationv1b2.Alert{ + alert := notificationv1b3.Alert{ ObjectMeta: metav1.ObjectMeta{ Name: name, Namespace: *kubeconfigArgs.Namespace, Labels: sourceLabels, }, - Spec: notificationv1b2.AlertSpec{ + Spec: notificationv1b3.AlertSpec{ ProviderRef: meta.LocalObjectReference{ Name: alertArgs.providerRef, }, @@ -140,13 +140,13 @@ func createAlertCmdRun(cmd *cobra.Command, args []string) error { } func upsertAlert(ctx context.Context, kubeClient client.Client, - alert *notificationv1b2.Alert) (types.NamespacedName, error) { + alert *notificationv1b3.Alert) (types.NamespacedName, error) { namespacedName := types.NamespacedName{ Namespace: alert.GetNamespace(), Name: alert.GetName(), } - var existing notificationv1b2.Alert + var existing notificationv1b3.Alert err := kubeClient.Get(ctx, namespacedName, &existing) if err != nil { if errors.IsNotFound(err) { diff --git a/cmd/flux/create_alertprovider.go b/cmd/flux/create_alertprovider.go index 402ff0c4..89a8e289 100644 --- a/cmd/flux/create_alertprovider.go +++ b/cmd/flux/create_alertprovider.go @@ -27,7 +27,7 @@ import ( "k8s.io/apimachinery/pkg/util/wait" "sigs.k8s.io/controller-runtime/pkg/client" - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" + notificationv1 "github.com/fluxcd/notification-controller/api/v1beta3" "github.com/fluxcd/pkg/apis/meta" "github.com/fluxcd/flux2/v2/internal/utils" diff --git a/cmd/flux/delete_alert.go b/cmd/flux/delete_alert.go index f0c8ee58..cda9f04d 100644 --- a/cmd/flux/delete_alert.go +++ b/cmd/flux/delete_alert.go @@ -19,7 +19,7 @@ package main import ( "github.com/spf13/cobra" - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" + notificationv1 "github.com/fluxcd/notification-controller/api/v1beta3" ) var deleteAlertCmd = &cobra.Command{ diff --git a/cmd/flux/delete_alertprovider.go b/cmd/flux/delete_alertprovider.go index 871f42a6..73a54b2a 100644 --- a/cmd/flux/delete_alertprovider.go +++ b/cmd/flux/delete_alertprovider.go @@ -19,7 +19,7 @@ package main import ( "github.com/spf13/cobra" - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" + notificationv1 "github.com/fluxcd/notification-controller/api/v1beta3" ) var deleteAlertProviderCmd = &cobra.Command{ diff --git a/cmd/flux/events.go b/cmd/flux/events.go index 51c3bb7c..cf85c3f5 100644 --- a/cmd/flux/events.go +++ b/cmd/flux/events.go @@ -44,7 +44,7 @@ import ( imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta2" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" notificationv1 "github.com/fluxcd/notification-controller/api/v1" - notificationv1b2 "github.com/fluxcd/notification-controller/api/v1beta2" + notificationv1b3 "github.com/fluxcd/notification-controller/api/v1beta3" sourcev1 "github.com/fluxcd/source-controller/api/v1" sourcev1b2 "github.com/fluxcd/source-controller/api/v1beta2" @@ -426,14 +426,14 @@ var fluxKindMap = refMap{ }, field: []string{"spec", "chart", "spec", "sourceRef"}, }, - notificationv1b2.AlertKind: { - gvk: notificationv1b2.GroupVersion.WithKind(notificationv1b2.AlertKind), - kind: notificationv1b2.ProviderKind, + notificationv1b3.AlertKind: { + gvk: notificationv1b3.GroupVersion.WithKind(notificationv1b3.AlertKind), + kind: notificationv1b3.ProviderKind, crossNamespaced: false, field: []string{"spec", "providerRef"}, }, notificationv1.ReceiverKind: {gvk: notificationv1.GroupVersion.WithKind(notificationv1.ReceiverKind)}, - notificationv1b2.ProviderKind: {gvk: notificationv1b2.GroupVersion.WithKind(notificationv1b2.ProviderKind)}, + notificationv1b3.ProviderKind: {gvk: notificationv1b3.GroupVersion.WithKind(notificationv1b3.ProviderKind)}, imagev1.ImagePolicyKind: { gvk: imagev1.GroupVersion.WithKind(imagev1.ImagePolicyKind), kind: imagev1.ImageRepositoryKind, diff --git a/cmd/flux/events_test.go b/cmd/flux/events_test.go index 7737f7c4..0c208d1e 100644 --- a/cmd/flux/events_test.go +++ b/cmd/flux/events_test.go @@ -118,7 +118,7 @@ spec: name: podinfo-chart version: '*' --- -apiVersion: notification.toolkit.fluxcd.io/v1beta2 +apiVersion: notification.toolkit.fluxcd.io/v1beta3 kind: Alert metadata: name: webapp @@ -131,7 +131,7 @@ spec: providerRef: name: slack --- -apiVersion: notification.toolkit.fluxcd.io/v1beta2 +apiVersion: notification.toolkit.fluxcd.io/v1beta3 kind: Provider metadata: name: slack diff --git a/cmd/flux/export_alert.go b/cmd/flux/export_alert.go index 63f9f59f..2f158711 100644 --- a/cmd/flux/export_alert.go +++ b/cmd/flux/export_alert.go @@ -20,7 +20,7 @@ import ( "github.com/spf13/cobra" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" + notificationv1 "github.com/fluxcd/notification-controller/api/v1beta3" ) var exportAlertCmd = &cobra.Command{ diff --git a/cmd/flux/export_alertprovider.go b/cmd/flux/export_alertprovider.go index 782648ca..e4c3ab9a 100644 --- a/cmd/flux/export_alertprovider.go +++ b/cmd/flux/export_alertprovider.go @@ -20,7 +20,7 @@ import ( "github.com/spf13/cobra" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" + notificationv1 "github.com/fluxcd/notification-controller/api/v1beta3" ) var exportAlertProviderCmd = &cobra.Command{ diff --git a/cmd/flux/get_alert.go b/cmd/flux/get_alert.go index 760423c3..54b2afe6 100644 --- a/cmd/flux/get_alert.go +++ b/cmd/flux/get_alert.go @@ -26,7 +26,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" + notificationv1 "github.com/fluxcd/notification-controller/api/v1beta3" ) var getAlertCmd = &cobra.Command{ @@ -92,6 +92,5 @@ func (s alertListAdapter) headers(includeNamespace bool) []string { } func (s alertListAdapter) statusSelectorMatches(i int, conditionType, conditionStatus string) bool { - item := s.Items[i] - return statusMatches(conditionType, conditionStatus, item.Status.Conditions) + return false } diff --git a/cmd/flux/get_alertprovider.go b/cmd/flux/get_alertprovider.go index a4c3bca6..11d50cb3 100644 --- a/cmd/flux/get_alertprovider.go +++ b/cmd/flux/get_alertprovider.go @@ -23,7 +23,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" + notificationv1 "github.com/fluxcd/notification-controller/api/v1beta3" ) var getAlertProviderCmd = &cobra.Command{ @@ -88,6 +88,5 @@ func (s alertProviderListAdapter) headers(includeNamespace bool) []string { } func (s alertProviderListAdapter) statusSelectorMatches(i int, conditionType, conditionStatus string) bool { - item := s.Items[i] - return statusMatches(conditionType, conditionStatus, item.Status.Conditions) + return false } diff --git a/cmd/flux/get_all.go b/cmd/flux/get_all.go index f868b833..27bbcfe4 100644 --- a/cmd/flux/get_all.go +++ b/cmd/flux/get_all.go @@ -24,7 +24,7 @@ import ( helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" notificationv1 "github.com/fluxcd/notification-controller/api/v1" - notificationv1b2 "github.com/fluxcd/notification-controller/api/v1beta2" + notificationv1b3 "github.com/fluxcd/notification-controller/api/v1beta3" ) var getAllCmd = &cobra.Command{ @@ -63,11 +63,11 @@ var getAllCmd = &cobra.Command{ }, { apiType: alertProviderType, - list: alertProviderListAdapter{¬ificationv1b2.ProviderList{}}, + list: alertProviderListAdapter{¬ificationv1b3.ProviderList{}}, }, { apiType: alertType, - list: &alertListAdapter{¬ificationv1b2.AlertList{}}, + list: &alertListAdapter{¬ificationv1b3.AlertList{}}, }, } diff --git a/cmd/flux/main_test.go b/cmd/flux/main_test.go index 2859d963..d2f9622e 100644 --- a/cmd/flux/main_test.go +++ b/cmd/flux/main_test.go @@ -34,6 +34,7 @@ import ( "github.com/fluxcd/flux2/v2/internal/utils" "github.com/google/go-cmp/cmp" "github.com/mattn/go-shellwords" + "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" k8syaml "k8s.io/apimachinery/pkg/util/yaml" "k8s.io/client-go/tools/clientcmd" @@ -112,7 +113,8 @@ func (m *testEnvKubeManager) CreateObjects(clientObjects []*unstructured.Unstruc } obj.SetResourceVersion(createObj.GetResourceVersion()) err = m.client.Status().Update(context.Background(), obj) - if err != nil { + // Updating status of static objects results in not found error. + if err != nil && !errors.IsNotFound(err) { return err } } diff --git a/cmd/flux/resume_alert.go b/cmd/flux/resume_alert.go index 0b72b059..a33d4f5b 100644 --- a/cmd/flux/resume_alert.go +++ b/cmd/flux/resume_alert.go @@ -19,7 +19,7 @@ package main import ( "github.com/spf13/cobra" - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" + notificationv1 "github.com/fluxcd/notification-controller/api/v1beta3" ) var resumeAlertCmd = &cobra.Command{ @@ -44,7 +44,7 @@ func init() { } func (obj alertAdapter) getObservedGeneration() int64 { - return obj.Alert.Status.ObservedGeneration + return 0 } func (obj alertAdapter) setUnsuspended() { diff --git a/cmd/flux/resume_alertprovider.go b/cmd/flux/resume_alertprovider.go index 40427c50..de95d48d 100644 --- a/cmd/flux/resume_alertprovider.go +++ b/cmd/flux/resume_alertprovider.go @@ -19,7 +19,7 @@ package main import ( "github.com/spf13/cobra" - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" + notificationv1 "github.com/fluxcd/notification-controller/api/v1beta3" ) var resumeAlertProviderCmd = &cobra.Command{ @@ -44,7 +44,7 @@ func init() { } func (obj alertProviderAdapter) getObservedGeneration() int64 { - return obj.Provider.Status.ObservedGeneration + return 0 } func (obj alertProviderAdapter) setUnsuspended() { diff --git a/cmd/flux/stats.go b/cmd/flux/stats.go index 4542d498..196d68d6 100644 --- a/cmd/flux/stats.go +++ b/cmd/flux/stats.go @@ -32,7 +32,7 @@ import ( imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta2" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" notificationv1 "github.com/fluxcd/notification-controller/api/v1" - notificationv1b2 "github.com/fluxcd/notification-controller/api/v1beta2" + notificationv1b3 "github.com/fluxcd/notification-controller/api/v1beta3" sourcev1 "github.com/fluxcd/source-controller/api/v1" sourcev1b2 "github.com/fluxcd/source-controller/api/v1beta2" @@ -111,14 +111,14 @@ func runStatsCmd(cmd *cobra.Command, args []string) error { Group: helmv2.GroupVersion.Group, }, { - Kind: notificationv1b2.AlertKind, - Version: notificationv1b2.GroupVersion.Version, - Group: notificationv1b2.GroupVersion.Group, + Kind: notificationv1b3.AlertKind, + Version: notificationv1b3.GroupVersion.Version, + Group: notificationv1b3.GroupVersion.Group, }, { - Kind: notificationv1b2.ProviderKind, - Version: notificationv1b2.GroupVersion.Version, - Group: notificationv1b2.GroupVersion.Group, + Kind: notificationv1b3.ProviderKind, + Version: notificationv1b3.GroupVersion.Version, + Group: notificationv1b3.GroupVersion.Group, }, { Kind: notificationv1.ReceiverKind, diff --git a/cmd/flux/suspend_alert.go b/cmd/flux/suspend_alert.go index 17cdd801..67fa201a 100644 --- a/cmd/flux/suspend_alert.go +++ b/cmd/flux/suspend_alert.go @@ -19,7 +19,7 @@ package main import ( "github.com/spf13/cobra" - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" + notificationv1 "github.com/fluxcd/notification-controller/api/v1beta3" ) var suspendAlertCmd = &cobra.Command{ diff --git a/cmd/flux/suspend_alertprovider.go b/cmd/flux/suspend_alertprovider.go index 5a69513c..fa58c80e 100644 --- a/cmd/flux/suspend_alertprovider.go +++ b/cmd/flux/suspend_alertprovider.go @@ -19,7 +19,7 @@ package main import ( "github.com/spf13/cobra" - notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" + notificationv1 "github.com/fluxcd/notification-controller/api/v1beta3" ) var suspendAlertProviderCmd = &cobra.Command{ diff --git a/cmd/flux/testdata/export/alert.yaml b/cmd/flux/testdata/export/alert.yaml index 4619affb..e5ffba02 100644 --- a/cmd/flux/testdata/export/alert.yaml +++ b/cmd/flux/testdata/export/alert.yaml @@ -1,5 +1,5 @@ --- -apiVersion: notification.toolkit.fluxcd.io/v1beta2 +apiVersion: notification.toolkit.fluxcd.io/v1beta3 kind: Alert metadata: name: flux-system diff --git a/cmd/flux/testdata/export/objects.yaml b/cmd/flux/testdata/export/objects.yaml index aa1b6f19..8ba59969 100644 --- a/cmd/flux/testdata/export/objects.yaml +++ b/cmd/flux/testdata/export/objects.yaml @@ -4,7 +4,7 @@ kind: Namespace metadata: name: {{ .fluxns }} --- -apiVersion: notification.toolkit.fluxcd.io/v1beta2 +apiVersion: notification.toolkit.fluxcd.io/v1beta3 kind: Provider metadata: name: slack @@ -14,7 +14,7 @@ spec: channel: 'A channel with spacess' address: https://hooks.slack.com/services/mock --- -apiVersion: notification.toolkit.fluxcd.io/v1beta2 +apiVersion: notification.toolkit.fluxcd.io/v1beta3 kind: Alert metadata: name: flux-system diff --git a/cmd/flux/testdata/export/provider.yaml b/cmd/flux/testdata/export/provider.yaml index 67104453..c3ca08e3 100644 --- a/cmd/flux/testdata/export/provider.yaml +++ b/cmd/flux/testdata/export/provider.yaml @@ -1,5 +1,5 @@ --- -apiVersion: notification.toolkit.fluxcd.io/v1beta2 +apiVersion: notification.toolkit.fluxcd.io/v1beta3 kind: Provider metadata: name: slack diff --git a/go.mod b/go.mod index ef27cffa..393a9482 100644 --- a/go.mod +++ b/go.mod @@ -26,7 +26,7 @@ require ( github.com/fluxcd/pkg/runtime v0.43.0 github.com/fluxcd/pkg/sourceignore v0.3.5 github.com/fluxcd/pkg/ssa v0.34.0 - github.com/fluxcd/pkg/ssh v0.9.0 + github.com/fluxcd/pkg/ssh v0.10.0 github.com/fluxcd/pkg/tar v0.4.0 github.com/fluxcd/pkg/version v0.2.2 github.com/fluxcd/source-controller/api v1.2.1 @@ -47,8 +47,8 @@ require ( github.com/spf13/cobra v1.8.0 github.com/spf13/pflag v1.0.5 github.com/theckman/yacspin v0.13.12 - golang.org/x/crypto v0.15.0 - golang.org/x/term v0.14.0 + golang.org/x/crypto v0.16.0 + golang.org/x/term v0.15.0 golang.org/x/text v0.14.0 k8s.io/api v0.28.4 k8s.io/apiextensions-apiserver v0.28.4 @@ -119,9 +119,9 @@ require ( github.com/go-fed/httpsig v1.1.0 // indirect github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect github.com/go-git/go-billy/v5 v5.5.0 // indirect - github.com/go-openapi/jsonpointer v0.19.6 // indirect + github.com/go-openapi/jsonpointer v0.20.0 // indirect github.com/go-openapi/jsonreference v0.20.2 // indirect - github.com/go-openapi/swag v0.22.3 // indirect + github.com/go-openapi/swag v0.22.4 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang-jwt/jwt/v5 v5.0.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect @@ -144,7 +144,7 @@ require ( github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/go-retryablehttp v0.7.5 // indirect - github.com/hashicorp/go-version v1.5.0 // indirect + github.com/hashicorp/go-version v1.6.0 // indirect github.com/hashicorp/golang-lru/arc/v2 v2.0.5 // indirect github.com/hashicorp/golang-lru/v2 v2.0.5 // indirect github.com/imdario/mergo v0.3.15 // indirect @@ -197,14 +197,14 @@ require ( go.starlark.net v0.0.0-20230525235612-a134d8f9ddca // indirect golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e // indirect golang.org/x/mod v0.14.0 // indirect - golang.org/x/net v0.18.0 // indirect - golang.org/x/oauth2 v0.14.0 // indirect + golang.org/x/net v0.19.0 // indirect + golang.org/x/oauth2 v0.15.0 // indirect golang.org/x/sync v0.5.0 // indirect - golang.org/x/sys v0.14.0 // indirect - golang.org/x/time v0.4.0 // indirect - golang.org/x/tools v0.15.0 // indirect + golang.org/x/sys v0.15.0 // indirect + golang.org/x/time v0.5.0 // indirect + golang.org/x/tools v0.16.0 // indirect gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect - google.golang.org/appengine v1.6.7 // indirect + google.golang.org/appengine v1.6.8 // indirect google.golang.org/protobuf v1.31.0 // indirect gopkg.in/evanphx/json-patch.v5 v5.6.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect @@ -212,9 +212,9 @@ require ( gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect k8s.io/component-base v0.28.4 // indirect - k8s.io/klog/v2 v2.100.1 // indirect + k8s.io/klog/v2 v2.110.1 // indirect k8s.io/kube-openapi v0.0.0-20231113174909-778a5567bc1e // indirect - k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect + k8s.io/utils v0.0.0-20231127182322-b307cd553661 // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect ) diff --git a/go.sum b/go.sum index 823bc0d9..fdb411cc 100644 --- a/go.sum +++ b/go.sum @@ -170,8 +170,8 @@ github.com/fluxcd/pkg/sourceignore v0.3.5 h1:omcHTH5X5tlPr9w1b9T7WuJTOP+o/KdVdar github.com/fluxcd/pkg/sourceignore v0.3.5/go.mod h1:6Xz3jErz8RsidsdrjUBBUGKes24rbdp/F38MnTGibEw= github.com/fluxcd/pkg/ssa v0.34.0 h1:hpMo0D7G3faieRYH39e9YD8Jl+aC2hTgUep8ojG5+LE= github.com/fluxcd/pkg/ssa v0.34.0/go.mod h1:rhVh0EtYVUOznKXlz6E7JOSgdc8xWbIwA4L5HVtJRLA= -github.com/fluxcd/pkg/ssh v0.9.0 h1:egRvg4AKarObFKXsBDZ5oBZ5PCjmQ4Q6hX+6GmrdbH0= -github.com/fluxcd/pkg/ssh v0.9.0/go.mod h1:3KKbfcFn4l+HqYdHKqcu2LO8RvFv0Kh6tYRSUtONC/8= +github.com/fluxcd/pkg/ssh v0.10.0 h1:JFz0u/CPEf3hXvmrEvUvXsc70eKh8xphqjXxZuSby9g= +github.com/fluxcd/pkg/ssh v0.10.0/go.mod h1:1lFTj3MhU9xQuaJ5PJJoh/FyRYzK54ll9NY/s2KqOZM= github.com/fluxcd/pkg/tar v0.4.0 h1:SuXpfXBIcSJ5R/yqQi2CBxBmV/i/LH0agqNAh2PWBZg= github.com/fluxcd/pkg/tar v0.4.0/go.mod h1:SyJBaQvuv2VA/rv4d1OHhCV6R8+9QKc9np193EzNHBc= github.com/fluxcd/pkg/version v0.2.2 h1:ZpVXECeLA5hIQMft11iLp6gN3cKcz6UNuVTQPw/bRdI= @@ -195,16 +195,17 @@ github.com/go-git/go-git/v5 v5.10.0/go.mod h1:1FOZ/pQnqw24ghP2n7cunVl0ON55BsjPYv github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY= github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/zapr v1.2.4 h1:QHVo+6stLbfJmYGkQ7uGHUCu5hnAFAj6mDe6Ea0SeOo= -github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE= github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= +github.com/go-openapi/jsonpointer v0.20.0 h1:ESKJdU9ASRfaPNOPRx12IUyA1vn3R9GiE3KYD14BXdQ= +github.com/go-openapi/jsonpointer v0.20.0/go.mod h1:6PGzBjjIIumbLYysB73Klnms1mwnU4G3YHOECG3CedA= github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= -github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g= github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= +github.com/go-openapi/swag v0.22.4 h1:QLMzNJnMGPRNDCbySlcj1x01tzU8/9LTTL9hZZZogBU= +github.com/go-openapi/swag v0.22.4/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= github.com/gofrs/uuid v4.4.0+incompatible h1:3qXRTX8/NbyulANqlc0lchS1gqAVxRgsuW1YrTJupqA= @@ -227,6 +228,7 @@ github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:W github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/gomodule/redigo v1.8.2 h1:H5XSIre1MB5NbPYFp+i1NBbb5qN1W8Y8YAQoAYbkm8k= @@ -291,8 +293,9 @@ github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+l github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-retryablehttp v0.7.5 h1:bJj+Pj19UZMIweq/iie+1u5YCdGrnxCT9yvm0e+Nd5M= github.com/hashicorp/go-retryablehttp v0.7.5/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8= -github.com/hashicorp/go-version v1.5.0 h1:O293SZ2Eg+AAYijkVK3jR786Am1bhDEh2GHT0tIVE5E= github.com/hashicorp/go-version v1.5.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= +github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/golang-lru/arc/v2 v2.0.5 h1:l2zaLDubNhW4XO3LnliVj0GXO3+/CGNJAg1dcN2Fpfw= github.com/hashicorp/golang-lru/arc/v2 v2.0.5/go.mod h1:ny6zBSQZi2JxIeYcv7kt2sH2PXJtirBN7RDhRpxPkxU= github.com/hashicorp/golang-lru/v2 v2.0.5 h1:wW7h1TG88eUIJ2i69gaE3uNVtEPIagzhGvHgwfx2Vm4= @@ -494,8 +497,8 @@ golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= -golang.org/x/crypto v0.15.0 h1:frVn1TEaCEaZcn3Tmd7Y2b5KKPaZ+I32Q2OA3kYp5TA= -golang.org/x/crypto v0.15.0/go.mod h1:4ChreQoLWfG3xLDer1WdlH5NdlQ3+mwnQq1YTKY+72g= +golang.org/x/crypto v0.16.0 h1:mMMrFzRSCF0GvB7Ne27XVtVAaXLrPmgPC7/v0tkwHaY= +golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e h1:+WEEuIdZHnUeJJmEUjyYC2gfUMj69yZXw17EnHg/otA= golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA= @@ -514,7 +517,6 @@ golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -525,11 +527,11 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.18.0 h1:mIYleuAkSbHh0tCv7RvjL3F6ZVbLjq4+R7zbOn3Kokg= -golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ= +golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c= +golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.14.0 h1:P0Vrf/2538nmC0H+pEQ3MNFRRnVR7RlqyVw+bvm26z0= -golang.org/x/oauth2 v0.14.0/go.mod h1:lAtNWgaWfL4cm7j2OV8TxGi9Qb7ECORx8DktCY74OwM= +golang.org/x/oauth2 v0.15.0 h1:s8pnnxNVzjWyrvYdFUQq5llS1PX2zhPXmccZv99h7uQ= +golang.org/x/oauth2 v0.15.0/go.mod h1:q48ptWNTY5XWf+JNten23lcvHpLJ0ZSxF5ttTHKVCAM= 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= @@ -569,28 +571,28 @@ golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q= -golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= +golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 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= golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= -golang.org/x/term v0.14.0 h1:LGK9IlZ8T9jvdy6cTdfKUCltatMFOehAQo9SRC46UQ8= -golang.org/x/term v0.14.0/go.mod h1:TySc+nGkYR6qt8km8wUhuFRTVSMIX3XPR58y2lC8vww= +golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4= +golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/time v0.4.0 h1:Z81tqI5ddIoXDPvVQ7/7CC9TnLM7ubaFG2qXYd5BbYY= -golang.org/x/time v0.4.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= +golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= @@ -601,8 +603,8 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= 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.15.0 h1:zdAyfUGbYmuVokhzVmghFl2ZJh5QhcfebBgmVPFYA+8= -golang.org/x/tools v0.15.0/go.mod h1:hpksKq4dtpQWS1uQ61JkdqWM3LscIS6Slf+VVkm+wQk= +golang.org/x/tools v0.16.0 h1:GO788SKMRunPIBCXiQyo2AaexLstOrVhuAL5YwsckQM= +golang.org/x/tools v0.16.0/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -611,8 +613,8 @@ gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw gomodules.xyz/jsonpatch/v2 v2.4.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= -google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= +google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= @@ -666,14 +668,14 @@ k8s.io/client-go v0.28.4 h1:Np5ocjlZcTrkyRJ3+T3PkXDpe4UpatQxj85+xjaD2wY= k8s.io/client-go v0.28.4/go.mod h1:0VDZFpgoZfelyP5Wqu0/r/TRYcLYuJ2U1KEeoaPa1N4= k8s.io/component-base v0.28.4 h1:c/iQLWPdUgI90O+T9TeECg8o7N3YJTiuz2sKxILYcYo= k8s.io/component-base v0.28.4/go.mod h1:m9hR0uvqXDybiGL2nf/3Lf0MerAfQXzkfWhUY58JUbU= -k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg= -k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/klog/v2 v2.110.1 h1:U/Af64HJf7FcwMcXyKm2RPM22WZzyR7OSpYj5tg3cL0= +k8s.io/klog/v2 v2.110.1/go.mod h1:YGtd1984u+GgbuZ7e08/yBuAfKLSO0+uR1Fhi6ExXjo= k8s.io/kube-openapi v0.0.0-20231113174909-778a5567bc1e h1:snPmy96t93RredGRjKfMFt+gvxuVAncqSAyBveJtr4Q= k8s.io/kube-openapi v0.0.0-20231113174909-778a5567bc1e/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA= k8s.io/kubectl v0.28.4 h1:gWpUXW/T7aFne+rchYeHkyB8eVDl5UZce8G4X//kjUQ= k8s.io/kubectl v0.28.4/go.mod h1:CKOccVx3l+3MmDbkXtIUtibq93nN2hkDR99XDCn7c/c= -k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSnlTLKgpAAttJvpI= -k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +k8s.io/utils v0.0.0-20231127182322-b307cd553661 h1:FepOBzJ0GXm8t0su67ln2wAZjbQ6RxQGZDnzuLcrUTI= +k8s.io/utils v0.0.0-20231127182322-b307cd553661/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= sigs.k8s.io/controller-runtime v0.16.3 h1:2TuvuokmfXvDUamSx1SuAOO3eTyye+47mJCigwG62c4= sigs.k8s.io/controller-runtime v0.16.3/go.mod h1:j7bialYoSn142nv9sCOJmQgDXQXxnroFU4VnX/brVJ0= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= diff --git a/internal/utils/utils.go b/internal/utils/utils.go index c5d8ec88..e820372a 100644 --- a/internal/utils/utils.go +++ b/internal/utils/utils.go @@ -46,7 +46,7 @@ import ( imagereflectv1 "github.com/fluxcd/image-reflector-controller/api/v1beta2" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" notificationv1 "github.com/fluxcd/notification-controller/api/v1" - notificationv1b2 "github.com/fluxcd/notification-controller/api/v1beta2" + notificationv1b3 "github.com/fluxcd/notification-controller/api/v1beta3" "github.com/fluxcd/pkg/apis/meta" runclient "github.com/fluxcd/pkg/runtime/client" "github.com/fluxcd/pkg/version" @@ -133,7 +133,7 @@ func NewScheme() *apiruntime.Scheme { _ = kustomizev1.AddToScheme(scheme) _ = helmv2.AddToScheme(scheme) _ = notificationv1.AddToScheme(scheme) - _ = notificationv1b2.AddToScheme(scheme) + _ = notificationv1b3.AddToScheme(scheme) _ = imagereflectv1.AddToScheme(scheme) _ = imageautov1.AddToScheme(scheme) return scheme diff --git a/pkg/uninstall/uninstall.go b/pkg/uninstall/uninstall.go index 744cb04e..92d7ffc2 100644 --- a/pkg/uninstall/uninstall.go +++ b/pkg/uninstall/uninstall.go @@ -35,7 +35,7 @@ import ( imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta2" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" notificationv1 "github.com/fluxcd/notification-controller/api/v1" - notificationv1b2 "github.com/fluxcd/notification-controller/api/v1beta2" + notificationv1b3 "github.com/fluxcd/notification-controller/api/v1beta3" sourcev1 "github.com/fluxcd/source-controller/api/v1" sourcev1b2 "github.com/fluxcd/source-controller/api/v1beta2" ) @@ -243,7 +243,7 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client } } { - var list notificationv1b2.AlertList + var list notificationv1b3.AlertList if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { for i := range list.Items { r := list.Items[i] @@ -258,7 +258,7 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client } } { - var list notificationv1b2.ProviderList + var list notificationv1b3.ProviderList if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { for i := range list.Items { r := list.Items[i] diff --git a/tests/azure/azure_test.go b/tests/azure/azure_test.go index 6209ec9b..57384156 100644 --- a/tests/azure/azure_test.go +++ b/tests/azure/azure_test.go @@ -53,7 +53,7 @@ import ( reflectorv1beta2 "github.com/fluxcd/image-reflector-controller/api/v1beta2" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" notiv1 "github.com/fluxcd/notification-controller/api/v1" - notiv1beta2 "github.com/fluxcd/notification-controller/api/v1beta2" + notiv1beta3 "github.com/fluxcd/notification-controller/api/v1beta3" eventv1 "github.com/fluxcd/pkg/apis/event/v1beta1" "github.com/fluxcd/pkg/apis/meta" sourcev1 "github.com/fluxcd/source-controller/api/v1" @@ -681,14 +681,14 @@ func TestAzureDevOpsCommitStatus(t *testing.T) { } return nil }) - provider := notiv1beta2.Provider{ + provider := notiv1beta3.Provider{ ObjectMeta: metav1.ObjectMeta{ Name: "azuredevops", Namespace: name, }, } _, err = controllerutil.CreateOrUpdate(ctx, cfg.kubeClient, &provider, func() error { - provider.Spec = notiv1beta2.ProviderSpec{ + provider.Spec = notiv1beta3.ProviderSpec{ Type: "azuredevops", Address: repoUrl, SecretRef: &meta.LocalObjectReference{ @@ -698,14 +698,14 @@ func TestAzureDevOpsCommitStatus(t *testing.T) { return nil }) require.NoError(t, err) - alert := notiv1beta2.Alert{ + alert := notiv1beta3.Alert{ ObjectMeta: metav1.ObjectMeta{ Name: "azuredevops", Namespace: name, }, } _, err = controllerutil.CreateOrUpdate(ctx, cfg.kubeClient, &alert, func() error { - alert.Spec = notiv1beta2.AlertSpec{ + alert.Spec = notiv1beta3.AlertSpec{ ProviderRef: meta.LocalObjectReference{ Name: provider.Name, }, @@ -809,14 +809,14 @@ func TestEventHubNotification(t *testing.T) { } return nil }) - provider := notiv1beta2.Provider{ + provider := notiv1beta3.Provider{ ObjectMeta: metav1.ObjectMeta{ Name: name, Namespace: name, }, } _, err = controllerutil.CreateOrUpdate(ctx, cfg.kubeClient, &provider, func() error { - provider.Spec = notiv1beta2.ProviderSpec{ + provider.Spec = notiv1beta3.ProviderSpec{ Type: "azureeventhub", Address: repoUrl, SecretRef: &meta.LocalObjectReference{ @@ -826,14 +826,14 @@ func TestEventHubNotification(t *testing.T) { return nil }) require.NoError(t, err) - alert := notiv1beta2.Alert{ + alert := notiv1beta3.Alert{ ObjectMeta: metav1.ObjectMeta{ Name: name, Namespace: name, }, } _, err = controllerutil.CreateOrUpdate(ctx, cfg.kubeClient, &alert, func() error { - alert.Spec = notiv1beta2.AlertSpec{ + alert.Spec = notiv1beta3.AlertSpec{ ProviderRef: meta.LocalObjectReference{ Name: provider.Name, }, diff --git a/tests/azure/go.mod b/tests/azure/go.mod index 8502c2b4..10b790b8 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -9,14 +9,14 @@ require ( github.com/Azure/azure-event-hubs-go/v3 v3.6.1 github.com/fluxcd/helm-controller/api v0.36.2 github.com/fluxcd/image-automation-controller/api v0.36.1 - github.com/fluxcd/image-reflector-controller/api v0.30.0 + github.com/fluxcd/image-reflector-controller/api v0.31.0 github.com/fluxcd/kustomize-controller/api v1.1.1 - github.com/fluxcd/notification-controller/api v1.1.0 + github.com/fluxcd/notification-controller/api v1.2.1 github.com/fluxcd/pkg/apis/event v0.6.0 github.com/fluxcd/pkg/apis/meta v1.2.0 github.com/fluxcd/pkg/git v0.15.0 github.com/fluxcd/pkg/git/gogit v0.15.0 - github.com/fluxcd/source-controller/api v1.1.2 + github.com/fluxcd/source-controller/api v1.2.1 github.com/go-git/go-git/v5 v5.10.0 github.com/hashicorp/hc-install v0.5.2 github.com/hashicorp/terraform-exec v0.18.1 diff --git a/tests/azure/go.sum b/tests/azure/go.sum index b53c5f9f..1beaaa1a 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -71,12 +71,12 @@ github.com/fluxcd/helm-controller/api v0.36.2 h1:9JaTc91yocG1oQkM/GMfpZ/nGPpliRj github.com/fluxcd/helm-controller/api v0.36.2/go.mod h1:zkcRy3PxG0NoxSY5SjiSA5tWOGa6spIbWsChQY8FXqM= github.com/fluxcd/image-automation-controller/api v0.36.1 h1:Knd4SSm/bJ0iqvYcQq87uDaT/mW9poM1jOvHpJ/4tzk= github.com/fluxcd/image-automation-controller/api v0.36.1/go.mod h1:IsjdBtgm71KHRGDTZZZiGYdWGoJ5VjenE9F4ueADM/o= -github.com/fluxcd/image-reflector-controller/api v0.30.0 h1:DiWj+4tcbnaSqZs1Pfkyt3uSy47wg3dsNMgbFE50pYc= -github.com/fluxcd/image-reflector-controller/api v0.30.0/go.mod h1:hv57KwIzoPyy7Vu4PFcIf21eu0N3p/HbijygcuNgf8c= +github.com/fluxcd/image-reflector-controller/api v0.31.0 h1:9t5zj7ufo9/d57gpcZsD6YAIxFz0vtLH4jXCj379srE= +github.com/fluxcd/image-reflector-controller/api v0.31.0/go.mod h1:/EcjOa/EYi8sSBHcGrBkLjMjNNfC7xXMxqG9phBORCo= github.com/fluxcd/kustomize-controller/api v1.1.1 h1:pQcAzvBC3cFGOCgk0zrcsO1Kjtal1tvd6rHXkyp2R78= github.com/fluxcd/kustomize-controller/api v1.1.1/go.mod h1:FHJTX6c0+CznUNGMol5+Uc4lQsYRxWgpmIRK/xDCghA= -github.com/fluxcd/notification-controller/api v1.1.0 h1:qx5t5DmArfPLxG2bsYZXIqDXLnijUddlHeRfciALwQw= -github.com/fluxcd/notification-controller/api v1.1.0/go.mod h1:6MqWVQeI5yrYR7zp0GFqsfXitNPGJrnfOWxO2w3jylg= +github.com/fluxcd/notification-controller/api v1.2.1 h1:yPQZ7ppYvazxl/Vsespbx9VlVyopH7p8pKGzZTNxI0c= +github.com/fluxcd/notification-controller/api v1.2.1/go.mod h1:1sWTpAXkga5zkXOgFoR+NIJgHNclBcfAHUJ/rMAjnYY= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= github.com/fluxcd/pkg/apis/event v0.6.0 h1:AUaeee1CGWb65BLqVximHXG8Gcu6vWuYONIq6tVpjgo= @@ -94,8 +94,8 @@ github.com/fluxcd/pkg/ssh v0.9.0 h1:egRvg4AKarObFKXsBDZ5oBZ5PCjmQ4Q6hX+6GmrdbH0= github.com/fluxcd/pkg/ssh v0.9.0/go.mod h1:3KKbfcFn4l+HqYdHKqcu2LO8RvFv0Kh6tYRSUtONC/8= github.com/fluxcd/pkg/version v0.2.2 h1:ZpVXECeLA5hIQMft11iLp6gN3cKcz6UNuVTQPw/bRdI= github.com/fluxcd/pkg/version v0.2.2/go.mod h1:NGnh/no8S6PyfCDxRFrPY3T5BUnqP48MxfxNRU0z8C0= -github.com/fluxcd/source-controller/api v1.1.2 h1:FfKDKVWnopo+Q2pOAxgHEjrtr4MP41L8aapR4mqBhBk= -github.com/fluxcd/source-controller/api v1.1.2/go.mod h1:ZLkaUd1KQIjtLPCvO63Ni5zpnSTVBAkeRgFBzMItbDQ= +github.com/fluxcd/source-controller/api v1.2.1 h1:zWRfwMB/BkV0A/duZQwHEcrE/abWJQt7DUgYTzn4IzM= +github.com/fluxcd/source-controller/api v1.2.1/go.mod h1:n+PMCJXl/AYCjWHn5N/MUuoIFKfDg4kCDviFIa7fDvI= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY= diff --git a/tests/azure/util_test.go b/tests/azure/util_test.go index 7c4f4083..836ea3a2 100644 --- a/tests/azure/util_test.go +++ b/tests/azure/util_test.go @@ -40,7 +40,7 @@ import ( reflectorv1beta2 "github.com/fluxcd/image-reflector-controller/api/v1beta2" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" notiv1 "github.com/fluxcd/notification-controller/api/v1" - notiv1beta2 "github.com/fluxcd/notification-controller/api/v1beta2" + notiv1beta3 "github.com/fluxcd/notification-controller/api/v1beta3" "github.com/fluxcd/pkg/apis/meta" "github.com/fluxcd/pkg/git" "github.com/fluxcd/pkg/git/gogit" @@ -96,7 +96,7 @@ func getKubernetesCredentials(kubeconfig, aksHost, aksCert, aksKey, aksCa string if err != nil { return "", nil, err } - err = notiv1beta2.AddToScheme(scheme.Scheme) + err = notiv1beta3.AddToScheme(scheme.Scheme) if err != nil { return "", nil, err } diff --git a/tests/integration/azure_specific_test.go b/tests/integration/azure_specific_test.go index 536de394..2f9d6fc7 100644 --- a/tests/integration/azure_specific_test.go +++ b/tests/integration/azure_specific_test.go @@ -38,7 +38,7 @@ import ( kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" notiv1 "github.com/fluxcd/notification-controller/api/v1" - notiv1beta2 "github.com/fluxcd/notification-controller/api/v1beta2" + notiv1beta3 "github.com/fluxcd/notification-controller/api/v1beta3" "github.com/fluxcd/pkg/apis/meta" sourcev1 "github.com/fluxcd/source-controller/api/v1" ) @@ -109,12 +109,12 @@ metadata: g.Expect(testEnv.Create(ctx, &secret)).To(Succeed()) defer testEnv.Delete(ctx, &secret) - provider := notiv1beta2.Provider{ + provider := notiv1beta3.Provider{ ObjectMeta: metav1.ObjectMeta{ Name: "azuredevops", Namespace: testID, }, - Spec: notiv1beta2.ProviderSpec{ + Spec: notiv1beta3.ProviderSpec{ Type: "azuredevops", Address: repoUrl, SecretRef: &meta.LocalObjectReference{ @@ -125,12 +125,12 @@ metadata: g.Expect(testEnv.Create(ctx, &provider)).To(Succeed()) defer testEnv.Delete(ctx, &provider) - alert := notiv1beta2.Alert{ + alert := notiv1beta3.Alert{ ObjectMeta: metav1.ObjectMeta{ Name: "azuredevops", Namespace: testID, }, - Spec: notiv1beta2.AlertSpec{ + Spec: notiv1beta3.AlertSpec{ ProviderRef: meta.LocalObjectReference{ Name: provider.Name, }, diff --git a/tests/integration/go.mod b/tests/integration/go.mod index 1468f0e3..091b691a 100644 --- a/tests/integration/go.mod +++ b/tests/integration/go.mod @@ -7,15 +7,15 @@ require ( github.com/Azure/azure-event-hubs-go/v3 v3.6.0 github.com/fluxcd/helm-controller/api v0.36.2 github.com/fluxcd/image-automation-controller/api v0.36.1 - github.com/fluxcd/image-reflector-controller/api v0.30.0 + github.com/fluxcd/image-reflector-controller/api v0.31.0 github.com/fluxcd/kustomize-controller/api v1.1.1 - github.com/fluxcd/notification-controller/api v1.1.0 + github.com/fluxcd/notification-controller/api v1.2.1 github.com/fluxcd/pkg/apis/event v0.6.0 github.com/fluxcd/pkg/apis/meta v1.2.0 github.com/fluxcd/pkg/git v0.15.0 github.com/fluxcd/pkg/git/gogit v0.15.0 github.com/fluxcd/pkg/runtime v0.43.0 - github.com/fluxcd/source-controller/api v1.1.2 + github.com/fluxcd/source-controller/api v1.2.1 github.com/fluxcd/test-infra/tftestenv v0.0.0-20230831142147-627bca8e7916 github.com/go-git/go-git/v5 v5.10.0 github.com/google/go-containerregistry v0.16.1 diff --git a/tests/integration/go.sum b/tests/integration/go.sum index e4b352c4..b28d6010 100644 --- a/tests/integration/go.sum +++ b/tests/integration/go.sum @@ -126,12 +126,12 @@ github.com/fluxcd/helm-controller/api v0.36.2 h1:9JaTc91yocG1oQkM/GMfpZ/nGPpliRj github.com/fluxcd/helm-controller/api v0.36.2/go.mod h1:zkcRy3PxG0NoxSY5SjiSA5tWOGa6spIbWsChQY8FXqM= github.com/fluxcd/image-automation-controller/api v0.36.1 h1:Knd4SSm/bJ0iqvYcQq87uDaT/mW9poM1jOvHpJ/4tzk= github.com/fluxcd/image-automation-controller/api v0.36.1/go.mod h1:IsjdBtgm71KHRGDTZZZiGYdWGoJ5VjenE9F4ueADM/o= -github.com/fluxcd/image-reflector-controller/api v0.30.0 h1:DiWj+4tcbnaSqZs1Pfkyt3uSy47wg3dsNMgbFE50pYc= -github.com/fluxcd/image-reflector-controller/api v0.30.0/go.mod h1:hv57KwIzoPyy7Vu4PFcIf21eu0N3p/HbijygcuNgf8c= +github.com/fluxcd/image-reflector-controller/api v0.31.0 h1:9t5zj7ufo9/d57gpcZsD6YAIxFz0vtLH4jXCj379srE= +github.com/fluxcd/image-reflector-controller/api v0.31.0/go.mod h1:/EcjOa/EYi8sSBHcGrBkLjMjNNfC7xXMxqG9phBORCo= github.com/fluxcd/kustomize-controller/api v1.1.1 h1:pQcAzvBC3cFGOCgk0zrcsO1Kjtal1tvd6rHXkyp2R78= github.com/fluxcd/kustomize-controller/api v1.1.1/go.mod h1:FHJTX6c0+CznUNGMol5+Uc4lQsYRxWgpmIRK/xDCghA= -github.com/fluxcd/notification-controller/api v1.1.0 h1:qx5t5DmArfPLxG2bsYZXIqDXLnijUddlHeRfciALwQw= -github.com/fluxcd/notification-controller/api v1.1.0/go.mod h1:6MqWVQeI5yrYR7zp0GFqsfXitNPGJrnfOWxO2w3jylg= +github.com/fluxcd/notification-controller/api v1.2.1 h1:yPQZ7ppYvazxl/Vsespbx9VlVyopH7p8pKGzZTNxI0c= +github.com/fluxcd/notification-controller/api v1.2.1/go.mod h1:1sWTpAXkga5zkXOgFoR+NIJgHNclBcfAHUJ/rMAjnYY= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= github.com/fluxcd/pkg/apis/event v0.6.0 h1:AUaeee1CGWb65BLqVximHXG8Gcu6vWuYONIq6tVpjgo= @@ -151,8 +151,8 @@ github.com/fluxcd/pkg/ssh v0.9.0 h1:egRvg4AKarObFKXsBDZ5oBZ5PCjmQ4Q6hX+6GmrdbH0= github.com/fluxcd/pkg/ssh v0.9.0/go.mod h1:3KKbfcFn4l+HqYdHKqcu2LO8RvFv0Kh6tYRSUtONC/8= github.com/fluxcd/pkg/version v0.2.2 h1:ZpVXECeLA5hIQMft11iLp6gN3cKcz6UNuVTQPw/bRdI= github.com/fluxcd/pkg/version v0.2.2/go.mod h1:NGnh/no8S6PyfCDxRFrPY3T5BUnqP48MxfxNRU0z8C0= -github.com/fluxcd/source-controller/api v1.1.2 h1:FfKDKVWnopo+Q2pOAxgHEjrtr4MP41L8aapR4mqBhBk= -github.com/fluxcd/source-controller/api v1.1.2/go.mod h1:ZLkaUd1KQIjtLPCvO63Ni5zpnSTVBAkeRgFBzMItbDQ= +github.com/fluxcd/source-controller/api v1.2.1 h1:zWRfwMB/BkV0A/duZQwHEcrE/abWJQt7DUgYTzn4IzM= +github.com/fluxcd/source-controller/api v1.2.1/go.mod h1:n+PMCJXl/AYCjWHn5N/MUuoIFKfDg4kCDviFIa7fDvI= github.com/fluxcd/test-infra/tftestenv v0.0.0-20230831142147-627bca8e7916 h1:w9UGknpfAGbiObQALZiuWYGeriAU1wKCFTmI2tj/96M= github.com/fluxcd/test-infra/tftestenv v0.0.0-20230831142147-627bca8e7916/go.mod h1:liFlLEXgambGVdWSJ4JzbIHf1Vjpp1HwUyPazPIVZug= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= diff --git a/tests/integration/notification_test.go b/tests/integration/notification_test.go index 4ea01692..6df2d145 100644 --- a/tests/integration/notification_test.go +++ b/tests/integration/notification_test.go @@ -31,7 +31,7 @@ import ( kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" notiv1 "github.com/fluxcd/notification-controller/api/v1" - notiv1beta2 "github.com/fluxcd/notification-controller/api/v1beta2" + notiv1beta3 "github.com/fluxcd/notification-controller/api/v1beta3" events "github.com/fluxcd/pkg/apis/event/v1beta1" "github.com/fluxcd/pkg/apis/meta" sourcev1 "github.com/fluxcd/source-controller/api/v1" @@ -66,12 +66,12 @@ metadata: g.Expect(testEnv.Create(ctx, &namespace)).To(Succeed()) defer testEnv.Delete(ctx, &namespace) - provider := notiv1beta2.Provider{ + provider := notiv1beta3.Provider{ ObjectMeta: metav1.ObjectMeta{ Name: testID, Namespace: testID, }, - Spec: notiv1beta2.ProviderSpec{ + Spec: notiv1beta3.ProviderSpec{ Type: cfg.notificationCfg.providerType, Address: cfg.notificationCfg.providerAddress, Channel: cfg.notificationCfg.providerChannel, @@ -98,12 +98,12 @@ metadata: g.Expect(testEnv.Create(ctx, &provider)).To(Succeed()) defer testEnv.Delete(ctx, &provider) - alert := notiv1beta2.Alert{ + alert := notiv1beta3.Alert{ ObjectMeta: metav1.ObjectMeta{ Name: testID, Namespace: testID, }, - Spec: notiv1beta2.AlertSpec{ + Spec: notiv1beta3.AlertSpec{ ProviderRef: meta.LocalObjectReference{ Name: provider.Name, }, @@ -121,7 +121,7 @@ metadata: g.Eventually(func() bool { nn := types.NamespacedName{Name: provider.Name, Namespace: provider.Namespace} - obj := ¬iv1beta2.Provider{} + obj := ¬iv1beta3.Provider{} err := testEnv.Get(ctx, nn, obj) if err != nil { return false @@ -132,7 +132,7 @@ metadata: } nn = types.NamespacedName{Name: alert.Name, Namespace: alert.Namespace} - alertObj := ¬iv1beta2.Alert{} + alertObj := ¬iv1beta3.Alert{} err = testEnv.Get(ctx, nn, alertObj) if err != nil { return false diff --git a/tests/integration/suite_test.go b/tests/integration/suite_test.go index 8044c46c..87c0fdb0 100644 --- a/tests/integration/suite_test.go +++ b/tests/integration/suite_test.go @@ -34,7 +34,7 @@ import ( automationv1beta1 "github.com/fluxcd/image-automation-controller/api/v1beta1" reflectorv1beta2 "github.com/fluxcd/image-reflector-controller/api/v1beta2" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" - notiv1beta2 "github.com/fluxcd/notification-controller/api/v1beta2" + notiv1beta3 "github.com/fluxcd/notification-controller/api/v1beta3" "github.com/fluxcd/pkg/git" sourcev1 "github.com/fluxcd/source-controller/api/v1" sourcev1beta2 "github.com/fluxcd/source-controller/api/v1beta2" @@ -166,7 +166,7 @@ func init() { utilruntime.Must(helmv2beta1.AddToScheme(scheme.Scheme)) utilruntime.Must(reflectorv1beta2.AddToScheme(scheme.Scheme)) utilruntime.Must(automationv1beta1.AddToScheme(scheme.Scheme)) - utilruntime.Must(notiv1beta2.AddToScheme(scheme.Scheme)) + utilruntime.Must(notiv1beta3.AddToScheme(scheme.Scheme)) random = rand.New(rand.NewSource(time.Now().UnixNano())) } From 2649bfb3a301d23318308095ad91a4d2ccc7c9d6 Mon Sep 17 00:00:00 2001 From: Sunny Date: Fri, 8 Dec 2023 14:39:53 +0000 Subject: [PATCH 700/818] tests/int: do not wait for static objects HelmRepo OCI, Alerts and Providers are static objects and don't need to be checked for readiness. Signed-off-by: Sunny --- tests/integration/notification_test.go | 27 -------------------------- tests/integration/oci_test.go | 17 +--------------- 2 files changed, 1 insertion(+), 43 deletions(-) diff --git a/tests/integration/notification_test.go b/tests/integration/notification_test.go index 6df2d145..ef154147 100644 --- a/tests/integration/notification_test.go +++ b/tests/integration/notification_test.go @@ -27,7 +27,6 @@ import ( . "github.com/onsi/gomega" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/types" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" notiv1 "github.com/fluxcd/notification-controller/api/v1" @@ -119,32 +118,6 @@ metadata: g.Expect(testEnv.Create(ctx, &alert)).ToNot(HaveOccurred()) defer testEnv.Delete(ctx, &alert) - g.Eventually(func() bool { - nn := types.NamespacedName{Name: provider.Name, Namespace: provider.Namespace} - obj := ¬iv1beta3.Provider{} - err := testEnv.Get(ctx, nn, obj) - if err != nil { - return false - } - if err := checkReadyCondition(obj); err != nil { - t.Log(err) - return false - } - - nn = types.NamespacedName{Name: alert.Name, Namespace: alert.Namespace} - alertObj := ¬iv1beta3.Alert{} - err = testEnv.Get(ctx, nn, alertObj) - if err != nil { - return false - } - if err := checkReadyCondition(alertObj); err != nil { - t.Log(err) - return false - } - - return true - }, testTimeout, testInterval).Should(BeTrue()) - modifyKsSpec := func(spec *kustomizev1.KustomizationSpec) { spec.Interval = metav1.Duration{Duration: 30 * time.Second} spec.HealthChecks = []meta.NamespacedObjectKindReference{ diff --git a/tests/integration/oci_test.go b/tests/integration/oci_test.go index c95e07d6..49788364 100644 --- a/tests/integration/oci_test.go +++ b/tests/integration/oci_test.go @@ -49,7 +49,7 @@ func TestOCIHelmRelease(t *testing.T) { err := pushImagesFromURL(repoURL, "ghcr.io/stefanprodan/charts/podinfo:6.2.0", []string{"6.2.0"}) g.Expect(err).ToNot(HaveOccurred()) - // Create HelmRepository and wait for it to sync + // Create HelmRepository. helmRepository := sourcev1.HelmRepository{ ObjectMeta: metav1.ObjectMeta{Name: testID, Namespace: testID}, Spec: sourcev1.HelmRepositorySpec{ @@ -66,21 +66,6 @@ func TestOCIHelmRelease(t *testing.T) { g.Expect(testEnv.Create(ctx, &helmRepository)).To(Succeed()) defer testEnv.Delete(ctx, &helmRepository) - g.Eventually(func() bool { - obj := &sourcev1.HelmRepository{} - nn := types.NamespacedName{Name: helmRepository.Name, Namespace: helmRepository.Namespace} - err := testEnv.Get(ctx, nn, obj) - if err != nil { - t.Logf("error getting helm repository %s", err.Error()) - return false - } - if err := checkReadyCondition(obj); err != nil { - t.Logf("%v", err) - return false - } - return true - }, testTimeout, testInterval).Should(BeTrue()) - // create helm release helmRelease := helmv2.HelmRelease{ ObjectMeta: metav1.ObjectMeta{Name: testID, Namespace: testID}, From 1e37cbeae7f2c8bc509ee36d11fcdf24042323b8 Mon Sep 17 00:00:00 2001 From: Sunny Date: Fri, 8 Dec 2023 16:16:05 +0000 Subject: [PATCH 701/818] Update Helm OCI RFC - static HelmRepository design Update the design details to reflect the design change to make the HelmRepository of type OCI static. Signed-off-by: Sunny --- rfcs/0002-helm-oci/README.md | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/rfcs/0002-helm-oci/README.md b/rfcs/0002-helm-oci/README.md index 518eaae5..d0636a32 100644 --- a/rfcs/0002-helm-oci/README.md +++ b/rfcs/0002-helm-oci/README.md @@ -4,7 +4,7 @@ **Creation date:** 2022-03-30 -**Last update:** 2022-10-20 +**Last update:** 2023-11-28 ## Summary @@ -252,17 +252,15 @@ Bucket API design, where the same Kind servers different implementations: AWS S3 ## Design Details -In source-controller we'll add a new predicate for filtering `HelmRepositories` based on the `spec.type` field. +Unlike the default `HelmRepository`, the OCI `HelmRepository` does not need to +download any repository index file. The associated HelmChart can pull the chart +directly from the OCI registry based on the registry information in the +`HelmRepository` object. This makes the `HelmRepository` of type `oci` static, +not backed by a reconciler to move to a desired state. It becomes a data +container with information about the OCI registry. -The current `HelmRepositoryReconciler` will handle only objects with `type: default`, -it's scope remains unchanged. - -We'll introduce a new reconciler named `HelmRepositoryOCIReconciler`, that will handle -objects with `type: oci`. This reconciler will set the `HelmRepository` Ready status to -`False` if: -- the URL is not prefixed with `oci://` -- the URL is malformed and can't be parsed -- the specified credentials result in an authentication error +In source-controller, the `HelmRepositoryReconciler` will be updated to check +the `.spec.type` field of `HelmRepository` and do nothing if it is `oci`. The current `HelmChartReconciler` will be adapted to handle both types. @@ -277,6 +275,7 @@ The feature is enabled by default. * **2022-08-11** Resolve chart dependencies from OCI released with [flux2 v0.32.0](https://github.com/fluxcd/flux2/releases/tag/v0.32.0) * **2022-08-29** Contextual login for AWS, Azure and GCP released with [flux2 v0.33.0](https://github.com/fluxcd/flux2/releases/tag/v0.33.0) * **2022-10-21** Verifying Helm charts with Cosign released with [flux2 v0.36.0](https://github.com/fluxcd/flux2/releases/tag/v0.36.0) +* **2023-11-28** Update the design of HelmRepository of type OCI to be static object [flux2 v2.2.0](https://github.com/fluxcd/flux2/releases/tag/v2.2.0) ### TODOs From 3abc8292504ecdd5d774b3f6a132e5a052b4bb30 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Dec 2023 01:03:57 +0000 Subject: [PATCH 702/818] build(deps): bump the ci group with 4 updates Bumps the ci group with 4 updates: [korthout/backport-action](https://github.com/korthout/backport-action), [actions/setup-go](https://github.com/actions/setup-go), [google-github-actions/setup-gcloud](https://github.com/google-github-actions/setup-gcloud) and [anchore/sbom-action](https://github.com/anchore/sbom-action). Updates `korthout/backport-action` from 2.1.1 to 2.2.0 - [Release notes](https://github.com/korthout/backport-action/releases) - [Commits](https://github.com/korthout/backport-action/compare/08bafb375e6e9a9a2b53a744b987e5d81a133191...b982d297e31f500652b2246cf26714796312bd23) Updates `actions/setup-go` from 4.1.0 to 5.0.0 - [Release notes](https://github.com/actions/setup-go/releases) - [Commits](https://github.com/actions/setup-go/compare/93397bea11091df50f3d7e59dc26a7711a8bcfbe...0c52d547c9bc32b1aa3301fd7a9cb496313a4491) Updates `google-github-actions/setup-gcloud` from 1.1.1 to 2.0.0 - [Release notes](https://github.com/google-github-actions/setup-gcloud/releases) - [Changelog](https://github.com/google-github-actions/setup-gcloud/blob/main/CHANGELOG.md) - [Commits](https://github.com/google-github-actions/setup-gcloud/compare/e30db14379863a8c79331b04a9969f4c1e225e0b...825196879a077b7efa50db2e88409f44de4635c2) Updates `anchore/sbom-action` from 0.15.0 to 0.15.1 - [Release notes](https://github.com/anchore/sbom-action/releases) - [Commits](https://github.com/anchore/sbom-action/compare/fd74a6fb98a204a1ad35bbfae0122c1a302ff88b...5ecf649a417b8ae17dc8383dc32d46c03f2312df) --- updated-dependencies: - dependency-name: korthout/backport-action dependency-type: direct:production update-type: version-update:semver-minor dependency-group: ci - dependency-name: actions/setup-go dependency-type: direct:production update-type: version-update:semver-major dependency-group: ci - dependency-name: google-github-actions/setup-gcloud dependency-type: direct:production update-type: version-update:semver-major dependency-group: ci - dependency-name: anchore/sbom-action dependency-type: direct:production update-type: version-update:semver-patch dependency-group: ci ... Signed-off-by: dependabot[bot] --- .github/workflows/backport.yaml | 2 +- .github/workflows/e2e-arm64.yaml | 2 +- .github/workflows/e2e-azure.yaml | 4 ++-- .github/workflows/e2e-bootstrap.yaml | 2 +- .github/workflows/e2e-gcp.yaml | 4 ++-- .github/workflows/e2e.yaml | 2 +- .github/workflows/release.yaml | 4 ++-- .github/workflows/scan.yaml | 4 ++-- .github/workflows/update.yaml | 2 +- 9 files changed, 13 insertions(+), 13 deletions(-) diff --git a/.github/workflows/backport.yaml b/.github/workflows/backport.yaml index e3fdd5d3..d584e25f 100644 --- a/.github/workflows/backport.yaml +++ b/.github/workflows/backport.yaml @@ -17,7 +17,7 @@ jobs: with: ref: ${{ github.event.pull_request.head.sha }} - name: Create backport PRs - uses: korthout/backport-action@08bafb375e6e9a9a2b53a744b987e5d81a133191 # v2.1.1 + uses: korthout/backport-action@b982d297e31f500652b2246cf26714796312bd23 # v2.2.0 # xref: https://github.com/korthout/backport-action#inputs with: # Use token to allow workflows to be triggered for the created PR diff --git a/.github/workflows/e2e-arm64.yaml b/.github/workflows/e2e-arm64.yaml index b9aa1aa4..93b81b12 100644 --- a/.github/workflows/e2e-arm64.yaml +++ b/.github/workflows/e2e-arm64.yaml @@ -23,7 +23,7 @@ jobs: - name: Checkout uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: Setup Go - uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 + uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # v5.0.0 with: go-version: 1.20.x cache-dependency-path: | diff --git a/.github/workflows/e2e-azure.yaml b/.github/workflows/e2e-azure.yaml index 3e974205..67743f3f 100644 --- a/.github/workflows/e2e-azure.yaml +++ b/.github/workflows/e2e-azure.yaml @@ -32,7 +32,7 @@ jobs: - name: Checkout uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: Setup Go - uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 + uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # v5.0.0 with: go-version: 1.20.x cache-dependency-path: tests/azure/go.sum @@ -77,7 +77,7 @@ jobs: - name: CheckoutD uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: Setup Go - uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 + uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # v5.0.0 with: go-version: 1.20.x cache-dependency-path: tests/integration/go.sum diff --git a/.github/workflows/e2e-bootstrap.yaml b/.github/workflows/e2e-bootstrap.yaml index 908741a2..0d010405 100644 --- a/.github/workflows/e2e-bootstrap.yaml +++ b/.github/workflows/e2e-bootstrap.yaml @@ -19,7 +19,7 @@ jobs: - name: Checkout uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: Setup Go - uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 + uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # v5.0.0 with: go-version: 1.20.x cache-dependency-path: | diff --git a/.github/workflows/e2e-gcp.yaml b/.github/workflows/e2e-gcp.yaml index bfc57ddf..ae9d5295 100644 --- a/.github/workflows/e2e-gcp.yaml +++ b/.github/workflows/e2e-gcp.yaml @@ -31,7 +31,7 @@ jobs: - name: Checkout uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: Setup Go - uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 + uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # v5.0.0 with: go-version: 1.20.x cache-dependency-path: tests/integration/go.sum @@ -52,7 +52,7 @@ jobs: credentials_json: '${{ secrets.FLUX2_E2E_GOOGLE_CREDENTIALS }}' token_format: 'access_token' - name: Setup gcloud - uses: google-github-actions/setup-gcloud@e30db14379863a8c79331b04a9969f4c1e225e0b # v1.1.1 + uses: google-github-actions/setup-gcloud@825196879a077b7efa50db2e88409f44de4635c2 # v2.0.0 - name: Setup QEMU uses: docker/setup-qemu-action@68827325e0b33c7199eb31dd4e31fbe9023e06e3 # v3.0.0 - name: Setup Docker Buildx diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index 3fbbb70b..de08bc7f 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -23,7 +23,7 @@ jobs: - name: Checkout uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: Setup Go - uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 + uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # v5.0.0 with: go-version: 1.20.x cache-dependency-path: | diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 030e9957..e936fc03 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -24,7 +24,7 @@ jobs: - name: Unshallow run: git fetch --prune --unshallow - name: Setup Go - uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 + uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # v5.0.0 with: go-version: 1.20.x cache: false @@ -34,7 +34,7 @@ jobs: id: buildx uses: docker/setup-buildx-action@f95db51fddba0c2d1ec667646a06c2ce06100226 # v3.0.0 - name: Setup Syft - uses: anchore/sbom-action/download-syft@fd74a6fb98a204a1ad35bbfae0122c1a302ff88b # v0.15.0 + uses: anchore/sbom-action/download-syft@5ecf649a417b8ae17dc8383dc32d46c03f2312df # v0.15.1 - name: Setup Cosign uses: sigstore/cosign-installer@1fc5bd396d372bee37d608f955b336615edf79c8 # v3.2.0 - name: Setup Kustomize diff --git a/.github/workflows/scan.yaml b/.github/workflows/scan.yaml index 8ba3df35..28b1b840 100644 --- a/.github/workflows/scan.yaml +++ b/.github/workflows/scan.yaml @@ -35,7 +35,7 @@ jobs: - name: Setup Kustomize uses: fluxcd/pkg/actions/kustomize@main - name: Setup Go - uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 + uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # v5.0.0 with: go-version: 1.20.x cache-dependency-path: | @@ -66,7 +66,7 @@ jobs: - name: Checkout repository uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: Setup Go - uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 + uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # v5.0.0 with: go-version: 1.20.x cache-dependency-path: | diff --git a/.github/workflows/update.yaml b/.github/workflows/update.yaml index 0618d372..ec619fcd 100644 --- a/.github/workflows/update.yaml +++ b/.github/workflows/update.yaml @@ -20,7 +20,7 @@ jobs: - name: Check out code uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: Setup Go - uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 + uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # v5.0.0 with: go-version: 1.20.x cache-dependency-path: | From 8ce8b1b690ca29cde691071482d1da19aa0dc1b5 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Tue, 12 Dec 2023 09:26:11 +0200 Subject: [PATCH 703/818] Update Git dependencies Signed-off-by: Stefan Prodan --- go.mod | 74 ++++---- go.sum | 214 +++++++++-------------- tests/azure/azure_test.go | 2 +- tests/azure/go.mod | 23 ++- tests/azure/go.sum | 51 +++--- tests/integration/azure_specific_test.go | 2 +- tests/integration/go.mod | 41 +++-- tests/integration/go.sum | 95 +++++----- 8 files changed, 216 insertions(+), 286 deletions(-) diff --git a/go.mod b/go.mod index 393a9482..bef83405 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/ProtonMail/go-crypto v0.0.0-20231012073058-a7379d079e0e github.com/cyphar/filepath-securejoin v0.2.4 github.com/distribution/distribution/v3 v3.0.0-20230823142118-4f7424c8eb41 - github.com/fluxcd/cli-utils v0.36.0-flux.1 + github.com/fluxcd/cli-utils v0.36.0-flux.2 github.com/fluxcd/go-git-providers v0.19.1 github.com/fluxcd/helm-controller/api v0.36.2 github.com/fluxcd/image-automation-controller/api v0.36.1 @@ -19,23 +19,23 @@ require ( github.com/fluxcd/notification-controller/api v1.2.1 github.com/fluxcd/pkg/apis/event v0.6.0 github.com/fluxcd/pkg/apis/meta v1.2.0 - github.com/fluxcd/pkg/git v0.15.0 - github.com/fluxcd/pkg/git/gogit v0.15.0 - github.com/fluxcd/pkg/kustomize v1.4.0 - github.com/fluxcd/pkg/oci v0.33.0 - github.com/fluxcd/pkg/runtime v0.43.0 - github.com/fluxcd/pkg/sourceignore v0.3.5 - github.com/fluxcd/pkg/ssa v0.34.0 + github.com/fluxcd/pkg/git v0.16.0 + github.com/fluxcd/pkg/git/gogit v0.16.1 + github.com/fluxcd/pkg/kustomize v1.5.0 + github.com/fluxcd/pkg/oci v0.33.3 + github.com/fluxcd/pkg/runtime v0.43.2 + github.com/fluxcd/pkg/sourceignore v0.4.0 + github.com/fluxcd/pkg/ssa v0.35.0 github.com/fluxcd/pkg/ssh v0.10.0 github.com/fluxcd/pkg/tar v0.4.0 github.com/fluxcd/pkg/version v0.2.2 github.com/fluxcd/source-controller/api v1.2.1 - github.com/go-git/go-git/v5 v5.10.0 + github.com/go-git/go-git/v5 v5.11.0 github.com/go-logr/logr v1.3.0 github.com/gonvenience/bunt v1.3.5 github.com/gonvenience/ytbx v1.4.4 github.com/google/go-cmp v0.6.0 - github.com/google/go-containerregistry v0.16.1 + github.com/google/go-containerregistry v0.17.0 github.com/hashicorp/go-cleanhttp v0.5.2 github.com/homeport/dyff v1.6.0 github.com/lucasb-eyer/go-colorful v1.2.0 @@ -57,36 +57,36 @@ require ( k8s.io/client-go v0.28.4 k8s.io/kubectl v0.28.4 sigs.k8s.io/controller-runtime v0.16.3 - sigs.k8s.io/kustomize/api v0.15.0 - sigs.k8s.io/kustomize/kyaml v0.15.0 + sigs.k8s.io/kustomize/api v0.16.0 + sigs.k8s.io/kustomize/kyaml v0.16.0 sigs.k8s.io/yaml v1.4.0 ) require ( code.gitea.io/sdk/gitea v0.16.0 // indirect dario.cat/mergo v1.0.0 // indirect - github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.1 // indirect - github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.1 // indirect - github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0 // indirect - github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.4.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.0 // indirect + github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect github.com/AzureAD/microsoft-authentication-library-for-go v1.1.1 // indirect github.com/BurntSushi/toml v1.3.2 // indirect github.com/MakeNowJust/heredoc v1.0.0 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect - github.com/acomagu/bufpipe v1.0.4 // indirect - github.com/aws/aws-sdk-go-v2 v1.21.0 // indirect - github.com/aws/aws-sdk-go-v2/config v1.18.36 // indirect - github.com/aws/aws-sdk-go-v2/credentials v1.13.35 // indirect - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.11 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.41 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.35 // indirect - github.com/aws/aws-sdk-go-v2/internal/ini v1.3.42 // indirect - github.com/aws/aws-sdk-go-v2/service/ecr v1.19.5 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.35 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.13.5 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.15.5 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.21.5 // indirect - github.com/aws/smithy-go v1.14.2 // indirect + github.com/aws/aws-sdk-go-v2 v1.24.0 // indirect + github.com/aws/aws-sdk-go-v2/config v1.26.1 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.16.12 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.10 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.9 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.9 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.7.2 // indirect + github.com/aws/aws-sdk-go-v2/service/ecr v1.24.5 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.4 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.9 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.18.5 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.21.5 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.26.5 // indirect + github.com/aws/smithy-go v1.19.0 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bshuster-repo/logrus-logstash-hook v1.0.0 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect @@ -114,8 +114,8 @@ require ( github.com/felixge/httpsnoop v1.0.3 // indirect github.com/fluxcd/pkg/apis/acl v0.1.0 // indirect github.com/fluxcd/pkg/apis/kustomize v1.2.0 // indirect - github.com/fsnotify/fsnotify v1.6.0 // indirect - github.com/go-errors/errors v1.4.2 // indirect + github.com/fsnotify/fsnotify v1.7.0 // indirect + github.com/go-errors/errors v1.5.1 // indirect github.com/go-fed/httpsig v1.1.0 // indirect github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect github.com/go-git/go-billy/v5 v5.5.0 // indirect @@ -147,7 +147,7 @@ require ( github.com/hashicorp/go-version v1.6.0 // indirect github.com/hashicorp/golang-lru/arc/v2 v2.0.5 // indirect github.com/hashicorp/golang-lru/v2 v2.0.5 // indirect - github.com/imdario/mergo v0.3.15 // indirect + github.com/imdario/mergo v0.3.16 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect @@ -194,8 +194,8 @@ require ( github.com/xanzy/go-gitlab v0.93.1 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect github.com/xlab/treeprint v1.2.0 // indirect - go.starlark.net v0.0.0-20230525235612-a134d8f9ddca // indirect - golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e // indirect + go.starlark.net v0.0.0-20231121155337-90ade8b19d09 // indirect + golang.org/x/exp v0.0.0-20231206192017-f3f8817b8deb // indirect golang.org/x/mod v0.14.0 // indirect golang.org/x/net v0.19.0 // indirect golang.org/x/oauth2 v0.15.0 // indirect @@ -206,14 +206,14 @@ require ( gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect google.golang.org/appengine v1.6.8 // indirect google.golang.org/protobuf v1.31.0 // indirect - gopkg.in/evanphx/json-patch.v5 v5.6.0 // indirect + gopkg.in/evanphx/json-patch.v5 v5.7.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect k8s.io/component-base v0.28.4 // indirect k8s.io/klog/v2 v2.110.1 // indirect - k8s.io/kube-openapi v0.0.0-20231113174909-778a5567bc1e // indirect + k8s.io/kube-openapi v0.0.0-20231206194836-bf4651e18aa8 // indirect k8s.io/utils v0.0.0-20231127182322-b307cd553661 // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect diff --git a/go.sum b/go.sum index fdb411cc..2470a0fe 100644 --- a/go.sum +++ b/go.sum @@ -1,20 +1,18 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= code.gitea.io/sdk/gitea v0.16.0 h1:gAfssETO1Hv9QbE+/nhWu7EjoFQYKt6kPoyDytQgw00= code.gitea.io/sdk/gitea v0.16.0/go.mod h1:ndkDk99BnfiUCCYEUhpNzi0lpmApXlwRFqClBlOlEBg= dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= github.com/AdaLogics/go-fuzz-headers v0.0.0-20230106234847-43070de90fa1 h1:EKPd1INOIyr5hWOWhvpmQpY6tKjeG0hT1s3AMC/9fic= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.1 h1:/iHxaJhsFr0+xVFfbMr5vxz848jyiWuIEDhYq3y5odY= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.1/go.mod h1:bjGvMhVMb+EEm3VRNQawDMUyMMjo+S5ewNjflkep/0Q= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.1 h1:LNHhpdK7hzUcx/k1LIcuh5k7k1LGIWLQfCjaneSj7Fc= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.1/go.mod h1:uE9zaUfEQT/nbQjVi2IblCG9iaLtZsuYZ8ne+PuQ02M= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0 h1:sXr+ck84g/ZlZUOZiNELInmMgOsuGwdjjVkEIde0OtY= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0/go.mod h1:okt5dMMTOFjX/aovMlrjvvXoPMBVSPzk9185BT0+eZM= -github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= -github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.0 h1:fb8kj/Dh4CSwgsOzHeZY4Xh68cFVbzXx+ONXGMY//4w= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.0/go.mod h1:uReU2sSxZExRPBAg3qKzmAucSi51+SP1OhohieR821Q= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.4.0 h1:BMAjVKJM0U/CYF27gA0ZMmXGkOcvfFtD0oHVZ1TIPRI= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.4.0/go.mod h1:1fXstnBMas5kzG+S3q8UoJcmyU6nUeunJcMDHcRYHhs= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.0 h1:d81/ng9rET2YqdVkVwkb6EXeRrLJIwyGnJcAlAWKwhs= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.0/go.mod h1:s4kgfzA0covAXNicZHDMN58jExvcng2mC/DepXiF1EI= +github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= +github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/AzureAD/microsoft-authentication-library-for-go v1.1.1 h1:WpB/QDNLpMw72xHJc34BNNykqSOeEJDAWkhf0u12/Jk= github.com/AzureAD/microsoft-authentication-library-for-go v1.1.1/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8= github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= @@ -27,38 +25,38 @@ github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migc github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/ProtonMail/go-crypto v0.0.0-20231012073058-a7379d079e0e h1:NfjGPY2A8SSRJvXny111ZPoB57LT5lWgX4XiUjW10eY= github.com/ProtonMail/go-crypto v0.0.0-20231012073058-a7379d079e0e/go.mod h1:K4vciqCJaZ1Ghw/SvtJbEAM4soEtwDCNVqkdQIIujwU= -github.com/acomagu/bufpipe v1.0.4 h1:e3H4WUzM3npvo5uv95QuJM3cQspFNtFBzvJ2oNjKIDQ= -github.com/acomagu/bufpipe v1.0.4/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= -github.com/aws/aws-sdk-go-v2 v1.21.0 h1:gMT0IW+03wtYJhRqTVYn0wLzwdnK9sRMcxmtfGzRdJc= -github.com/aws/aws-sdk-go-v2 v1.21.0/go.mod h1:/RfNgGmRxI+iFOB1OeJUyxiU+9s88k3pfHvDagGEp0M= -github.com/aws/aws-sdk-go-v2/config v1.18.36 h1:mLNA12PWU1Y+ueOO79QgQfKIPhc1MYKl44RmvASkJ7Q= -github.com/aws/aws-sdk-go-v2/config v1.18.36/go.mod h1:8AnEFxW9/XGKCbjYDCJy7iltVNyEI9Iu9qC21UzhhgQ= -github.com/aws/aws-sdk-go-v2/credentials v1.13.35 h1:QpsNitYJu0GgvMBLUIYu9H4yryA5kMksjeIVQfgXrt8= -github.com/aws/aws-sdk-go-v2/credentials v1.13.35/go.mod h1:o7rCaLtvK0hUggAGclf76mNGGkaG5a9KWlp+d9IpcV8= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.11 h1:uDZJF1hu0EVT/4bogChk8DyjSF6fof6uL/0Y26Ma7Fg= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.11/go.mod h1:TEPP4tENqBGO99KwVpV9MlOX4NSrSLP8u3KRy2CDwA8= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.41 h1:22dGT7PneFMx4+b3pz7lMTRyN8ZKH7M2cW4GP9yUS2g= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.41/go.mod h1:CrObHAuPneJBlfEJ5T3szXOUkLEThaGfvnhTf33buas= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.35 h1:SijA0mgjV8E+8G45ltVHs0fvKpTj8xmZJ3VwhGKtUSI= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.35/go.mod h1:SJC1nEVVva1g3pHAIdCp7QsRIkMmLAgoDquQ9Rr8kYw= -github.com/aws/aws-sdk-go-v2/internal/ini v1.3.42 h1:GPUcE/Yq7Ur8YSUk6lVkoIMWnJNO0HT18GUzCWCgCI0= -github.com/aws/aws-sdk-go-v2/internal/ini v1.3.42/go.mod h1:rzfdUlfA+jdgLDmPKjd3Chq9V7LVLYo1Nz++Wb91aRo= -github.com/aws/aws-sdk-go-v2/service/ecr v1.19.5 h1:hg2/a7rE9dwYr+/DPNzHQ+IsHXLNt1NsQVUecBtA8os= -github.com/aws/aws-sdk-go-v2/service/ecr v1.19.5/go.mod h1:pGwmNL8hN0jpBfKfTbmu+Rl0bJkDhaGl+9PQLrZ4KLo= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.35 h1:CdzPW9kKitgIiLV1+MHobfR5Xg25iYnyzWZhyQuSlDI= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.35/go.mod h1:QGF2Rs33W5MaN9gYdEQOBBFPLwTZkEhRwI33f7KIG0o= -github.com/aws/aws-sdk-go-v2/service/sso v1.13.5 h1:oCvTFSDi67AX0pOX3PuPdGFewvLRU2zzFSrTsgURNo0= -github.com/aws/aws-sdk-go-v2/service/sso v1.13.5/go.mod h1:fIAwKQKBFu90pBxx07BFOMJLpRUGu8VOzLJakeY+0K4= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.15.5 h1:dnInJb4S0oy8aQuri1mV6ipLlnZPfnsDNB9BGO9PDNY= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.15.5/go.mod h1:yygr8ACQRY2PrEcy3xsUI357stq2AxnFM6DIsR9lij4= -github.com/aws/aws-sdk-go-v2/service/sts v1.21.5 h1:CQBFElb0LS8RojMJlxRSo/HXipvTZW2S44Lt9Mk2aYQ= -github.com/aws/aws-sdk-go-v2/service/sts v1.21.5/go.mod h1:VC7JDqsqiwXukYEDjoHh9U0fOJtNWh04FPQz4ct4GGU= -github.com/aws/smithy-go v1.14.2 h1:MJU9hqBGbvWZdApzpvoF2WAIJDbtjK2NDJSiJP7HblQ= -github.com/aws/smithy-go v1.14.2/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= +github.com/aws/aws-sdk-go-v2 v1.24.0 h1:890+mqQ+hTpNuw0gGP6/4akolQkSToDJgHfQE7AwGuk= +github.com/aws/aws-sdk-go-v2 v1.24.0/go.mod h1:LNh45Br1YAkEKaAqvmE1m8FUx6a5b/V0oAKV7of29b4= +github.com/aws/aws-sdk-go-v2/config v1.26.1 h1:z6DqMxclFGL3Zfo+4Q0rLnAZ6yVkzCRxhRMsiRQnD1o= +github.com/aws/aws-sdk-go-v2/config v1.26.1/go.mod h1:ZB+CuKHRbb5v5F0oJtGdhFTelmrxd4iWO1lf0rQwSAg= +github.com/aws/aws-sdk-go-v2/credentials v1.16.12 h1:v/WgB8NxprNvr5inKIiVVrXPuuTegM+K8nncFkr1usU= +github.com/aws/aws-sdk-go-v2/credentials v1.16.12/go.mod h1:X21k0FjEJe+/pauud82HYiQbEr9jRKY3kXEIQ4hXeTQ= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.10 h1:w98BT5w+ao1/r5sUuiH6JkVzjowOKeOJRHERyy1vh58= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.10/go.mod h1:K2WGI7vUvkIv1HoNbfBA1bvIZ+9kL3YVmWxeKuLQsiw= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.9 h1:v+HbZaCGmOwnTTVS86Fleq0vPzOd7tnJGbFhP0stNLs= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.9/go.mod h1:Xjqy+Nyj7VDLBtCMkQYOw1QYfAEZCVLrfI0ezve8wd4= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.9 h1:N94sVhRACtXyVcjXxrwK1SKFIJrA9pOJ5yu2eSHnmls= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.9/go.mod h1:hqamLz7g1/4EJP+GH5NBhcUMLjW+gKLQabgyz6/7WAU= +github.com/aws/aws-sdk-go-v2/internal/ini v1.7.2 h1:GrSw8s0Gs/5zZ0SX+gX4zQjRnRsMJDJ2sLur1gRBhEM= +github.com/aws/aws-sdk-go-v2/internal/ini v1.7.2/go.mod h1:6fQQgfuGmw8Al/3M2IgIllycxV7ZW7WCdVSqfBeUiCY= +github.com/aws/aws-sdk-go-v2/service/ecr v1.24.5 h1:wLPDAUFT50NEXGXpywRU3AA74pg35RJjWol/68ruvQQ= +github.com/aws/aws-sdk-go-v2/service/ecr v1.24.5/go.mod h1:AOHmGMoPtSY9Zm2zBuwUJQBisIvYAZeA1n7b6f4e880= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.4 h1:/b31bi3YVNlkzkBrm9LfpaKoaYZUxIAj4sHfOTmLfqw= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.4/go.mod h1:2aGXHFmbInwgP9ZfpmdIfOELL79zhdNYNmReK8qDfdQ= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.9 h1:Nf2sHxjMJR8CSImIVCONRi4g0Su3J+TSTbS7G0pUeMU= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.9/go.mod h1:idky4TER38YIjr2cADF1/ugFMKvZV7p//pVeV5LZbF0= +github.com/aws/aws-sdk-go-v2/service/sso v1.18.5 h1:ldSFWz9tEHAwHNmjx2Cvy1MjP5/L9kNoR0skc6wyOOM= +github.com/aws/aws-sdk-go-v2/service/sso v1.18.5/go.mod h1:CaFfXLYL376jgbP7VKC96uFcU8Rlavak0UlAwk1Dlhc= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.21.5 h1:2k9KmFawS63euAkY4/ixVNsYYwrwnd5fIvgEKkfZFNM= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.21.5/go.mod h1:W+nd4wWDVkSUIox9bacmkBP5NMFQeTJ/xqNabpzSR38= +github.com/aws/aws-sdk-go-v2/service/sts v1.26.5 h1:5UYvv8JUvllZsRnfrcMQ+hJ9jNICmcgKPAO1CER25Wg= +github.com/aws/aws-sdk-go-v2/service/sts v1.26.5/go.mod h1:XX5gh4CB7wAs4KhcF46G6C8a2i7eupU19dcAAE+EydU= +github.com/aws/smithy-go v1.19.0 h1:KWFKQV80DpP3vJrrA9sVAHQ5gc2z8i4EzrLhLlWXcBM= +github.com/aws/smithy-go v1.19.0/go.mod h1:NukqUGpCZIILqqiV0NIjeFh24kd/FAa4beRb6nbIUPE= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -66,7 +64,6 @@ github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6r github.com/bshuster-repo/logrus-logstash-hook v1.0.0 h1:e+C0SB5R1pu//O4MQ3f9cFuPGoOVeF2fE4Og9otCc70= github.com/bshuster-repo/logrus-logstash-hook v1.0.0/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk= github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chai2010/gettext-go v1.0.2 h1:1Lwwip6Q2QGsAdl/ZKPCwTe9fe0CjlUbqj5bFNSjIRk= @@ -77,7 +74,6 @@ github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e h1:fY5BOSpyZCqRo5O github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1 h1:q763qf9huN11kDQavWsoZXJNW3xEE4JJyHa5Q25/sd8= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= github.com/cloudflare/circl v1.3.6 h1:/xbKIqSHbZXHwkhbrhrt2YOHIwYJlXH94E3tI/gDlUg= github.com/cloudflare/circl v1.3.6/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= @@ -119,8 +115,6 @@ github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxER github.com/emicklei/go-restful/v3 v3.11.0/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.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/evanphx/json-patch v5.7.0+incompatible h1:vgGkfT/9f8zE6tvSCe74nfpAVDQ2tG6yudJd8LBksgI= github.com/evanphx/json-patch v5.7.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch/v5 v5.7.0 h1:nJqP7uwL84RJInrohHfW0Fx3awjbm8qZeFv0nW9SYGc= @@ -132,8 +126,8 @@ github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYF github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/felixge/httpsnoop v1.0.3 h1:s/nj+GCswXYzN5v2DpNMuMQYe+0DDwt5WVCU6CWBdXk= github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/fluxcd/cli-utils v0.36.0-flux.1 h1:004HtB/p47xqkTCGZhc1vVuXNzef7+N3wT364eFk7WA= -github.com/fluxcd/cli-utils v0.36.0-flux.1/go.mod h1:c+uMMDqGg8WKwBNeWKDDFEuDDHICDWAHthzosAKF2PA= +github.com/fluxcd/cli-utils v0.36.0-flux.2 h1:7nlXfAJ7iaDF34IdbyId+wBf7beL2qvzDBLmVBJSDVo= +github.com/fluxcd/cli-utils v0.36.0-flux.2/go.mod h1:TQtgRf9OjQBzE5FJ9UDV6WNz9Po3pzAtk3NQmQEN5l8= github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= github.com/fluxcd/go-git-providers v0.19.1 h1:LXRFpHdPCmO+Uegw2MvAU3KiEHn1PRV2c//ii/HhpeY= github.com/fluxcd/go-git-providers v0.19.1/go.mod h1:eN0JpfkQqS/6yJ1I6DW3z1XLCC2JZK+55Ues+0Ur3Ds= @@ -155,21 +149,21 @@ github.com/fluxcd/pkg/apis/kustomize v1.2.0 h1:vkVs+OumxaWso0jNCqdgFFfMHdh+qtZhy github.com/fluxcd/pkg/apis/kustomize v1.2.0/go.mod h1:VF7tR/WuVFeum+HaMTHwp+eCtsHiiQlY6ihgqtAnW/M= github.com/fluxcd/pkg/apis/meta v1.2.0 h1:O766PzGAdMdQKybSflGL8oV0+GgCNIkdsxfalRyzeO8= github.com/fluxcd/pkg/apis/meta v1.2.0/go.mod h1:fU/Az9AoVyIxC0oI4ihG0NVMNnvrcCzdEym3wxjIQsc= -github.com/fluxcd/pkg/git v0.15.0 h1:QPqv+b4sQXXpWQhigf/sPE5qzK4BrQhkltnYuEy4AYw= -github.com/fluxcd/pkg/git v0.15.0/go.mod h1:zqmLfw4d+mS77bMRkeQ+8dmFSgxB/c2ZDkafIyY6bAQ= -github.com/fluxcd/pkg/git/gogit v0.15.0 h1:GV8XaRp7CtlRuDallrJgMR6s1YHIMZi5+zyXMOJsS0c= -github.com/fluxcd/pkg/git/gogit v0.15.0/go.mod h1:9KBhXE1czARGT6QqHYVMfr2RbvPpguKwCdm4LgkP3nY= -github.com/fluxcd/pkg/gittestserver v0.8.6 h1:YM8prVKB3LC9LBBe+a2p7l1BlfV9erXCgC1em9sbqW4= -github.com/fluxcd/pkg/kustomize v1.4.0 h1:1c9dwLkccFGEVkE+CvCYqybtBoInYq6OePTkkgTfLzQ= -github.com/fluxcd/pkg/kustomize v1.4.0/go.mod h1:o0UgMmAjyCwsUSdBIDJ9NgXfOEJ6Iojs5PQ2agIRapc= -github.com/fluxcd/pkg/oci v0.33.0 h1:OC9eJzazldcUAyWS5Ul1XvUISpfJBRzDZqLjYyyNG2g= -github.com/fluxcd/pkg/oci v0.33.0/go.mod h1:XNxj6Pr1ddmC5EVSo+R3Nlr5droAV0LxZ9HJ3V1GNwI= -github.com/fluxcd/pkg/runtime v0.43.0 h1:dU4cWct5VTpddGzJUU80zxNl80jbbVEN5Y5rbt4YUnw= -github.com/fluxcd/pkg/runtime v0.43.0/go.mod h1:RuqJ9VEXELjzgurK2+UXBBgVN1vS0hZ7CYVG2xBAEVM= -github.com/fluxcd/pkg/sourceignore v0.3.5 h1:omcHTH5X5tlPr9w1b9T7WuJTOP+o/KdVdarYb4kgkCU= -github.com/fluxcd/pkg/sourceignore v0.3.5/go.mod h1:6Xz3jErz8RsidsdrjUBBUGKes24rbdp/F38MnTGibEw= -github.com/fluxcd/pkg/ssa v0.34.0 h1:hpMo0D7G3faieRYH39e9YD8Jl+aC2hTgUep8ojG5+LE= -github.com/fluxcd/pkg/ssa v0.34.0/go.mod h1:rhVh0EtYVUOznKXlz6E7JOSgdc8xWbIwA4L5HVtJRLA= +github.com/fluxcd/pkg/git v0.16.0 h1:xgfMpgsVaxGLechKNaSUif9jnt2Ji/HkwIwxXeDoADk= +github.com/fluxcd/pkg/git v0.16.0/go.mod h1:ZsaxXDBHIUjNeRf+3qDGyHD22KpqbjuNPCbHy2Xid5U= +github.com/fluxcd/pkg/git/gogit v0.16.1 h1:byimVk7VLbERRxJDkVktithN03GC0y7fyc8Ur9Uka8U= +github.com/fluxcd/pkg/git/gogit v0.16.1/go.mod h1:nx3PumOFe5e3fMsh2HPLSlAeOk2wC+jVg7H9BTRKEmg= +github.com/fluxcd/pkg/gittestserver v0.9.0 h1:OthMahtKmmpwCRw8LmSGrceqVhHywGg/QiytxHGSgeY= +github.com/fluxcd/pkg/kustomize v1.5.0 h1:Q2kynQzF4coKlOJq/XaLM+gVmVloaInkoa+vsor6Hho= +github.com/fluxcd/pkg/kustomize v1.5.0/go.mod h1:QgFwpteTedb7oio5+yN+h+rhSgm253OIjmtoTow+a5c= +github.com/fluxcd/pkg/oci v0.33.3 h1:dj5IuF2O9/0r37tOWoOoKX/0emytjEiJ6sXy9FUkHww= +github.com/fluxcd/pkg/oci v0.33.3/go.mod h1:6+vIgdqP6AkFitvlyGx2W9f4s8q5Oguw9SNeN494MCY= +github.com/fluxcd/pkg/runtime v0.43.2 h1:xH2BvttUqJ7wS0zjuBETr2pLXG62QY6f0mdxg5UQKio= +github.com/fluxcd/pkg/runtime v0.43.2/go.mod h1:dhhNV45B3tekg7qPzATFTuWOulvUzMoO1bV+vc2pSts= +github.com/fluxcd/pkg/sourceignore v0.4.0 h1:99Ikoi8qMirlBK4yjnoKa5vx9YFQ/BSSK3Axi+yDg9s= +github.com/fluxcd/pkg/sourceignore v0.4.0/go.mod h1:j1BRQE+R0TJmPYPUnEd/0gm8KcpajlX6mDv3z7s8YFQ= +github.com/fluxcd/pkg/ssa v0.35.0 h1:8T3WY4P9SQWApa2hq1rU1u2WE8oqP3MMTsAiEWwhmfo= +github.com/fluxcd/pkg/ssa v0.35.0/go.mod h1:rhVh0EtYVUOznKXlz6E7JOSgdc8xWbIwA4L5HVtJRLA= github.com/fluxcd/pkg/ssh v0.10.0 h1:JFz0u/CPEf3hXvmrEvUvXsc70eKh8xphqjXxZuSby9g= github.com/fluxcd/pkg/ssh v0.10.0/go.mod h1:1lFTj3MhU9xQuaJ5PJJoh/FyRYzK54ll9NY/s2KqOZM= github.com/fluxcd/pkg/tar v0.4.0 h1:SuXpfXBIcSJ5R/yqQi2CBxBmV/i/LH0agqNAh2PWBZg= @@ -178,11 +172,11 @@ github.com/fluxcd/pkg/version v0.2.2 h1:ZpVXECeLA5hIQMft11iLp6gN3cKcz6UNuVTQPw/b github.com/fluxcd/pkg/version v0.2.2/go.mod h1:NGnh/no8S6PyfCDxRFrPY3T5BUnqP48MxfxNRU0z8C0= github.com/fluxcd/source-controller/api v1.2.1 h1:zWRfwMB/BkV0A/duZQwHEcrE/abWJQt7DUgYTzn4IzM= github.com/fluxcd/source-controller/api v1.2.1/go.mod h1:n+PMCJXl/AYCjWHn5N/MUuoIFKfDg4kCDviFIa7fDvI= -github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= -github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= +github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= +github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY= -github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= -github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= +github.com/go-errors/errors v1.5.1 h1:ZwEMSLRCapFLflTpT7NKaAc7ukJ8ZPEjzlxt8rPN8bk= +github.com/go-errors/errors v1.5.1/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= github.com/go-fed/httpsig v1.1.0 h1:9M+hb0jkEICD8/cAiNqEB66R87tTINszBRTjwjQzWcI= github.com/go-fed/httpsig v1.1.0/go.mod h1:RCMrTZvN1bJYtofsG4rd5NaO5obxQ5xBkdiS7xsT7bM= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= @@ -190,14 +184,14 @@ github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmS github.com/go-git/go-billy/v5 v5.5.0 h1:yEY4yhzCDuMGSv83oGxiBotRzhwhNr8VZyphhiu+mTU= github.com/go-git/go-billy/v5 v5.5.0/go.mod h1:hmexnoNsr2SJU1Ju67OaNz5ASJY3+sHgFRpCtpDCKow= github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 h1:eMje31YglSBqCdIqdhKBW8lokaMrL3uTkpGYlE2OOT4= -github.com/go-git/go-git/v5 v5.10.0 h1:F0x3xXrAWmhwtzoCokU4IMPcBdncG+HAAqi9FcOOjbQ= -github.com/go-git/go-git/v5 v5.10.0/go.mod h1:1FOZ/pQnqw24ghP2n7cunVl0ON55BsjPYvhWHvZGhoo= +github.com/go-git/go-git/v5 v5.11.0 h1:XIZc1p+8YzypNr34itUfSvYJcv+eYdTnTvOZ2vD3cA4= +github.com/go-git/go-git/v5 v5.11.0/go.mod h1:6GFcX2P3NM7FPBfpePbpLd21XxsgdAt+lKqXmCUiUCY= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY= github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= -github.com/go-logr/zapr v1.2.4 h1:QHVo+6stLbfJmYGkQ7uGHUCu5hnAFAj6mDe6Ea0SeOo= +github.com/go-logr/zapr v1.3.0 h1:XGdV8XW8zdwFiwOA2Dryh1gj2KRQyOOoNmBy4EplIcQ= github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= github.com/go-openapi/jsonpointer v0.20.0 h1:ESKJdU9ASRfaPNOPRx12IUyA1vn3R9GiE3KYD14BXdQ= github.com/go-openapi/jsonpointer v0.20.0/go.mod h1:6PGzBjjIIumbLYysB73Klnms1mwnU4G3YHOECG3CedA= @@ -214,19 +208,11 @@ github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang-jwt/jwt/v5 v5.0.0 h1:1n1XNM9hk7O9mnQoNBGolZvzebBQ7p93ULHRc28XJUE= github.com/golang-jwt/jwt/v5 v5.0.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= @@ -251,18 +237,13 @@ github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvR github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-containerregistry v0.16.1 h1:rUEt426sR6nyrL3gt+18ibRcvYpKYdpsa5ZW7MA08dQ= -github.com/google/go-containerregistry v0.16.1/go.mod h1:u0qB2l7mvtWVR5kNcbFIhFY1hLbf8eeGapA+vbFDCtQ= +github.com/google/go-containerregistry v0.17.0 h1:5p+zYs/R4VGHkhyvgWurWrpJ2hW4Vv9fQI+GzdcwXLk= +github.com/google/go-containerregistry v0.17.0/go.mod h1:u0qB2l7mvtWVR5kNcbFIhFY1hLbf8eeGapA+vbFDCtQ= github.com/google/go-github/v55 v55.0.0 h1:4pp/1tNMB9X/LuAhs5i0KQAE40NmiR/y6prLNb9x9cg= github.com/google/go-github/v55 v55.0.0/go.mod h1:JLahOTA1DnXzhxEymmFF5PP2tSS9JVNj68mSZNDwskA= github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= @@ -302,8 +283,8 @@ github.com/hashicorp/golang-lru/v2 v2.0.5 h1:wW7h1TG88eUIJ2i69gaE3uNVtEPIagzhGvH github.com/hashicorp/golang-lru/v2 v2.0.5/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= github.com/homeport/dyff v1.6.0 h1:AN+ikld0Fy+qx34YE7655b/bpWuxS6cL9k852pE2GUc= github.com/homeport/dyff v1.6.0/go.mod h1:FlAOFYzeKvxmU5nTrnG+qrlJVWpsFew7pt8L99p5q8k= -github.com/imdario/mergo v0.3.15 h1:M8XP7IuFNsqUx6VPK2P9OSmsYsI/YFaGil0uD21V3dM= -github.com/imdario/mergo v0.3.15/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= +github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4= +github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= @@ -344,8 +325,6 @@ github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0 github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/manifoldco/promptui v0.9.0 h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA= github.com/manifoldco/promptui v0.9.0/go.mod h1:ka04sppxSGFAtxX0qhlYQjISsg9mR4GWtQEhdbn6Pgg= -github.com/matryer/is v1.2.0 h1:92UTHpy8CDwaJ08GqLDzhhuixiBUUD1p3AU6PHddz4A= -github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= github.com/mattn/go-ciede2000 v0.0.0-20170301095244-782e8c62fec3 h1:BXxTozrOU8zgC5dkpn3J6NTRdoP+hjok/e+ACr4Hibk= github.com/mattn/go-ciede2000 v0.0.0-20170301095244-782e8c62fec3/go.mod h1:x1uk6vxTiVuNt6S5R2UYgdhpj3oKojXvOXauHZ7dEnI= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= @@ -391,7 +370,7 @@ github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= -github.com/onsi/ginkgo/v2 v2.13.1 h1:LNGfMbR2OVGBfXjvRZIZ2YCTQdGKtPLvuI1rMCCj3OU= +github.com/onsi/ginkgo/v2 v2.13.2 h1:Bi2gGVkfn6gQcjNjZJVO8Gf0FHzMPf2phUei9tejVMs= github.com/onsi/gomega v1.30.0 h1:hvMK7xYz4D3HapigLTeGdId/NcfQx1VHMJc60ew99+8= github.com/onsi/gomega v1.30.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= @@ -419,7 +398,6 @@ github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1 github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw= github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= @@ -482,9 +460,9 @@ github.com/xlab/treeprint v1.2.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -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/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A= +go.starlark.net v0.0.0-20231121155337-90ade8b19d09 h1:hzy3LFnSN8kuQK8h9tHl4ndF6UruMj47OqwqsS+/Ai4= +go.starlark.net v0.0.0-20231121155337-90ade8b19d09/go.mod h1:LcLNIzVOMp4oV+uusnpk+VU+SzXaJakUuBjoCSWH5dM= +go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -499,23 +477,15 @@ golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2Uz golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= golang.org/x/crypto v0.16.0 h1:mMMrFzRSCF0GvB7Ne27XVtVAaXLrPmgPC7/v0tkwHaY= golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e h1:+WEEuIdZHnUeJJmEUjyYC2gfUMj69yZXw17EnHg/otA= -golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/exp v0.0.0-20231206192017-f3f8817b8deb h1:c0vyKkb6yr3KR7jEfJaOSv4lG7xPkbN6r52aJz1d8a8= +golang.org/x/exp v0.0.0-20231206192017-f3f8817b8deb/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.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.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -529,10 +499,8 @@ golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c= golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.15.0 h1:s8pnnxNVzjWyrvYdFUQq5llS1PX2zhPXmccZv99h7uQ= golang.org/x/oauth2 v0.15.0/go.mod h1:q48ptWNTY5XWf+JNten23lcvHpLJ0ZSxF5ttTHKVCAM= -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= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -542,7 +510,6 @@ golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -565,7 +532,6 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220906165534-d0df966e6959/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -575,7 +541,6 @@ golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 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= -golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= @@ -594,10 +559,6 @@ golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= @@ -611,24 +572,8 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw= gomodules.xyz/jsonpatch/v2 v2.4.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -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= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= @@ -638,8 +583,8 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/evanphx/json-patch.v5 v5.6.0 h1:BMT6KIwBD9CaU91PJCZIe46bDmBWa9ynTQgJIOpfQBk= -gopkg.in/evanphx/json-patch.v5 v5.6.0/go.mod h1:/kvTRh1TVm5wuM6OkHxqXtE/1nUZZpihg29RtuIyfvk= +gopkg.in/evanphx/json-patch.v5 v5.7.0 h1:dGKGylPlZ/jus2g1YqhhyzfH0gPy2R8/MYUpW/OslTY= +gopkg.in/evanphx/json-patch.v5 v5.7.0/go.mod h1:/kvTRh1TVm5wuM6OkHxqXtE/1nUZZpihg29RtuIyfvk= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= @@ -652,10 +597,7 @@ gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= gotest.tools/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= k8s.io/api v0.28.4 h1:8ZBrLjwosLl/NYgv1P7EQLqoO8MGQApnbgH8tu3BMzY= k8s.io/api v0.28.4/go.mod h1:axWTGrY88s/5YE+JSt4uUi6NMM+gur1en2REMR7IRj0= k8s.io/apiextensions-apiserver v0.28.4 h1:AZpKY/7wQ8n+ZYDtNHbAJBb+N4AXXJvyZx6ww6yAJvU= @@ -670,8 +612,8 @@ k8s.io/component-base v0.28.4 h1:c/iQLWPdUgI90O+T9TeECg8o7N3YJTiuz2sKxILYcYo= k8s.io/component-base v0.28.4/go.mod h1:m9hR0uvqXDybiGL2nf/3Lf0MerAfQXzkfWhUY58JUbU= k8s.io/klog/v2 v2.110.1 h1:U/Af64HJf7FcwMcXyKm2RPM22WZzyR7OSpYj5tg3cL0= k8s.io/klog/v2 v2.110.1/go.mod h1:YGtd1984u+GgbuZ7e08/yBuAfKLSO0+uR1Fhi6ExXjo= -k8s.io/kube-openapi v0.0.0-20231113174909-778a5567bc1e h1:snPmy96t93RredGRjKfMFt+gvxuVAncqSAyBveJtr4Q= -k8s.io/kube-openapi v0.0.0-20231113174909-778a5567bc1e/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA= +k8s.io/kube-openapi v0.0.0-20231206194836-bf4651e18aa8 h1:vzKzxN5uyJZLY8HL1/OovW7BJefnsBIWt8T7Gjh2boQ= +k8s.io/kube-openapi v0.0.0-20231206194836-bf4651e18aa8/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA= k8s.io/kubectl v0.28.4 h1:gWpUXW/T7aFne+rchYeHkyB8eVDl5UZce8G4X//kjUQ= k8s.io/kubectl v0.28.4/go.mod h1:CKOccVx3l+3MmDbkXtIUtibq93nN2hkDR99XDCn7c/c= k8s.io/utils v0.0.0-20231127182322-b307cd553661 h1:FepOBzJ0GXm8t0su67ln2wAZjbQ6RxQGZDnzuLcrUTI= @@ -680,10 +622,10 @@ sigs.k8s.io/controller-runtime v0.16.3 h1:2TuvuokmfXvDUamSx1SuAOO3eTyye+47mJCigw sigs.k8s.io/controller-runtime v0.16.3/go.mod h1:j7bialYoSn142nv9sCOJmQgDXQXxnroFU4VnX/brVJ0= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= -sigs.k8s.io/kustomize/api v0.15.0 h1:6Ca88kEOBVotHDw+y2IsIMYtg9Pvv7MKpW9JMyF/OH4= -sigs.k8s.io/kustomize/api v0.15.0/go.mod h1:p19kb+E14gN7zcIBR/nhByJDAfUa7N8mp6ZdH/mMXbg= -sigs.k8s.io/kustomize/kyaml v0.15.0 h1:ynlLMAxDhrY9otSg5GYE2TcIz31XkGZ2Pkj7SdolD84= -sigs.k8s.io/kustomize/kyaml v0.15.0/go.mod h1:+uMkBahdU1KNOj78Uta4rrXH+iH7wvg+nW7+GULvREA= +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.16.0 h1:6J33uKSoATlKZH16unr2XOhDI+otoe2sR3M8PDzW3K0= +sigs.k8s.io/kustomize/kyaml v0.16.0/go.mod h1:xOK/7i+vmE14N2FdFyugIshB8eF6ALpy7jI87Q2nRh4= sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4= sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= diff --git a/tests/azure/azure_test.go b/tests/azure/azure_test.go index 57384156..889af1ad 100644 --- a/tests/azure/azure_test.go +++ b/tests/azure/azure_test.go @@ -31,6 +31,7 @@ import ( "time" eventhub "github.com/Azure/azure-event-hubs-go/v3" + giturls "github.com/chainguard-dev/git-urls" install "github.com/hashicorp/hc-install" "github.com/hashicorp/hc-install/fs" "github.com/hashicorp/hc-install/product" @@ -39,7 +40,6 @@ import ( "github.com/microsoft/azure-devops-go-api/azuredevops" "github.com/microsoft/azure-devops-go-api/azuredevops/git" "github.com/stretchr/testify/require" - giturls "github.com/whilp/git-urls" "go.uber.org/multierr" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" diff --git a/tests/azure/go.mod b/tests/azure/go.mod index 10b790b8..d61a0fbd 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -7,6 +7,7 @@ replace gopkg.in/yaml.v3 => gopkg.in/yaml.v3 v3.0.1 require ( github.com/Azure/azure-event-hubs-go/v3 v3.6.1 + github.com/chainguard-dev/git-urls v1.0.2 github.com/fluxcd/helm-controller/api v0.36.2 github.com/fluxcd/image-automation-controller/api v0.36.1 github.com/fluxcd/image-reflector-controller/api v0.31.0 @@ -14,20 +15,19 @@ require ( github.com/fluxcd/notification-controller/api v1.2.1 github.com/fluxcd/pkg/apis/event v0.6.0 github.com/fluxcd/pkg/apis/meta v1.2.0 - github.com/fluxcd/pkg/git v0.15.0 - github.com/fluxcd/pkg/git/gogit v0.15.0 + github.com/fluxcd/pkg/git v0.16.0 + github.com/fluxcd/pkg/git/gogit v0.16.1 github.com/fluxcd/source-controller/api v1.2.1 - github.com/go-git/go-git/v5 v5.10.0 + github.com/go-git/go-git/v5 v5.11.0 github.com/hashicorp/hc-install v0.5.2 github.com/hashicorp/terraform-exec v0.18.1 github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 github.com/stretchr/testify v1.8.4 - github.com/whilp/git-urls v1.0.0 go.uber.org/multierr v1.11.0 k8s.io/api v0.28.4 k8s.io/apimachinery v0.28.4 k8s.io/client-go v0.28.4 - k8s.io/klog/v2 v2.100.1 + k8s.io/klog/v2 v2.110.1 sigs.k8s.io/controller-runtime v0.16.3 ) @@ -47,7 +47,6 @@ require ( github.com/Masterminds/semver/v3 v3.2.1 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect github.com/ProtonMail/go-crypto v0.0.0-20231012073058-a7379d079e0e // indirect - github.com/acomagu/bufpipe v1.0.4 // indirect github.com/apparentlymart/go-textseg/v13 v13.0.0 // indirect github.com/cloudflare/circl v1.3.6 // indirect github.com/cyphar/filepath-securejoin v0.2.4 // indirect @@ -58,7 +57,7 @@ require ( github.com/evanphx/json-patch/v5 v5.7.0 // indirect github.com/fluxcd/pkg/apis/acl v0.1.0 // indirect github.com/fluxcd/pkg/apis/kustomize v1.1.1 // indirect - github.com/fluxcd/pkg/ssh v0.9.0 // indirect + github.com/fluxcd/pkg/ssh v0.10.0 // indirect github.com/fluxcd/pkg/version v0.2.2 // indirect github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect github.com/go-git/go-billy/v5 v5.5.0 // indirect @@ -99,15 +98,15 @@ require ( github.com/skeema/knownhosts v1.2.1 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect github.com/zclconf/go-cty v1.13.0 // indirect - golang.org/x/crypto v0.15.0 // indirect + golang.org/x/crypto v0.16.0 // indirect golang.org/x/mod v0.14.0 // indirect - golang.org/x/net v0.18.0 // indirect + golang.org/x/net v0.19.0 // indirect golang.org/x/oauth2 v0.14.0 // indirect - golang.org/x/sys v0.14.0 // indirect - golang.org/x/term v0.14.0 // indirect + golang.org/x/sys v0.15.0 // indirect + golang.org/x/term v0.15.0 // indirect golang.org/x/text v0.14.0 // indirect golang.org/x/time v0.4.0 // indirect - golang.org/x/tools v0.15.0 // indirect + golang.org/x/tools v0.16.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/protobuf v1.31.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect diff --git a/tests/azure/go.sum b/tests/azure/go.sum index 1beaaa1a..316215fe 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -37,8 +37,6 @@ github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migc github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/ProtonMail/go-crypto v0.0.0-20231012073058-a7379d079e0e h1:NfjGPY2A8SSRJvXny111ZPoB57LT5lWgX4XiUjW10eY= github.com/ProtonMail/go-crypto v0.0.0-20231012073058-a7379d079e0e/go.mod h1:K4vciqCJaZ1Ghw/SvtJbEAM4soEtwDCNVqkdQIIujwU= -github.com/acomagu/bufpipe v1.0.4 h1:e3H4WUzM3npvo5uv95QuJM3cQspFNtFBzvJ2oNjKIDQ= -github.com/acomagu/bufpipe v1.0.4/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= github.com/apparentlymart/go-textseg v1.0.0/go.mod h1:z96Txxhf3xSFMPmb5X/1W05FF/Nj9VFpLOpjS5yuumk= github.com/apparentlymart/go-textseg/v13 v13.0.0 h1:Y+KvPE1NYz0xl601PVImeQfFyEy6iT90AvPUL1NNfNw= @@ -47,6 +45,8 @@ github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPd github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= +github.com/chainguard-dev/git-urls v1.0.2 h1:pSpT7ifrpc5X55n4aTTm7FFUE+ZQHKiqpiwNkJrVcKQ= +github.com/chainguard-dev/git-urls v1.0.2/go.mod h1:rbGgj10OS7UgZlbzdUQIQpT0k/D4+An04HJY7Ol+Y/o= github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= github.com/cloudflare/circl v1.3.6 h1:/xbKIqSHbZXHwkhbrhrt2YOHIwYJlXH94E3tI/gDlUg= github.com/cloudflare/circl v1.3.6/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= @@ -85,13 +85,13 @@ github.com/fluxcd/pkg/apis/kustomize v1.1.1 h1:MSGn4z0R9PptmoPFHnx2nEZ8Jtl1sKfw0 github.com/fluxcd/pkg/apis/kustomize v1.1.1/go.mod h1:0pCu0ecIY+ZM0iE/hOHYwCMZ3b0SpBrjJ1SH3FFyYdE= github.com/fluxcd/pkg/apis/meta v1.2.0 h1:O766PzGAdMdQKybSflGL8oV0+GgCNIkdsxfalRyzeO8= github.com/fluxcd/pkg/apis/meta v1.2.0/go.mod h1:fU/Az9AoVyIxC0oI4ihG0NVMNnvrcCzdEym3wxjIQsc= -github.com/fluxcd/pkg/git v0.15.0 h1:QPqv+b4sQXXpWQhigf/sPE5qzK4BrQhkltnYuEy4AYw= -github.com/fluxcd/pkg/git v0.15.0/go.mod h1:zqmLfw4d+mS77bMRkeQ+8dmFSgxB/c2ZDkafIyY6bAQ= -github.com/fluxcd/pkg/git/gogit v0.15.0 h1:GV8XaRp7CtlRuDallrJgMR6s1YHIMZi5+zyXMOJsS0c= -github.com/fluxcd/pkg/git/gogit v0.15.0/go.mod h1:9KBhXE1czARGT6QqHYVMfr2RbvPpguKwCdm4LgkP3nY= -github.com/fluxcd/pkg/gittestserver v0.8.6 h1:YM8prVKB3LC9LBBe+a2p7l1BlfV9erXCgC1em9sbqW4= -github.com/fluxcd/pkg/ssh v0.9.0 h1:egRvg4AKarObFKXsBDZ5oBZ5PCjmQ4Q6hX+6GmrdbH0= -github.com/fluxcd/pkg/ssh v0.9.0/go.mod h1:3KKbfcFn4l+HqYdHKqcu2LO8RvFv0Kh6tYRSUtONC/8= +github.com/fluxcd/pkg/git v0.16.0 h1:xgfMpgsVaxGLechKNaSUif9jnt2Ji/HkwIwxXeDoADk= +github.com/fluxcd/pkg/git v0.16.0/go.mod h1:ZsaxXDBHIUjNeRf+3qDGyHD22KpqbjuNPCbHy2Xid5U= +github.com/fluxcd/pkg/git/gogit v0.16.1 h1:byimVk7VLbERRxJDkVktithN03GC0y7fyc8Ur9Uka8U= +github.com/fluxcd/pkg/git/gogit v0.16.1/go.mod h1:nx3PumOFe5e3fMsh2HPLSlAeOk2wC+jVg7H9BTRKEmg= +github.com/fluxcd/pkg/gittestserver v0.9.0 h1:OthMahtKmmpwCRw8LmSGrceqVhHywGg/QiytxHGSgeY= +github.com/fluxcd/pkg/ssh v0.10.0 h1:JFz0u/CPEf3hXvmrEvUvXsc70eKh8xphqjXxZuSby9g= +github.com/fluxcd/pkg/ssh v0.10.0/go.mod h1:1lFTj3MhU9xQuaJ5PJJoh/FyRYzK54ll9NY/s2KqOZM= github.com/fluxcd/pkg/version v0.2.2 h1:ZpVXECeLA5hIQMft11iLp6gN3cKcz6UNuVTQPw/bRdI= github.com/fluxcd/pkg/version v0.2.2/go.mod h1:NGnh/no8S6PyfCDxRFrPY3T5BUnqP48MxfxNRU0z8C0= github.com/fluxcd/source-controller/api v1.2.1 h1:zWRfwMB/BkV0A/duZQwHEcrE/abWJQt7DUgYTzn4IzM= @@ -104,9 +104,8 @@ github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmS github.com/go-git/go-billy/v5 v5.5.0 h1:yEY4yhzCDuMGSv83oGxiBotRzhwhNr8VZyphhiu+mTU= github.com/go-git/go-billy/v5 v5.5.0/go.mod h1:hmexnoNsr2SJU1Ju67OaNz5ASJY3+sHgFRpCtpDCKow= github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 h1:eMje31YglSBqCdIqdhKBW8lokaMrL3uTkpGYlE2OOT4= -github.com/go-git/go-git/v5 v5.10.0 h1:F0x3xXrAWmhwtzoCokU4IMPcBdncG+HAAqi9FcOOjbQ= -github.com/go-git/go-git/v5 v5.10.0/go.mod h1:1FOZ/pQnqw24ghP2n7cunVl0ON55BsjPYvhWHvZGhoo= -github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-git/go-git/v5 v5.11.0 h1:XIZc1p+8YzypNr34itUfSvYJcv+eYdTnTvOZ2vD3cA4= +github.com/go-git/go-git/v5 v5.11.0/go.mod h1:6GFcX2P3NM7FPBfpePbpLd21XxsgdAt+lKqXmCUiUCY= github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY= github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/zapr v1.2.4 h1:QHVo+6stLbfJmYGkQ7uGHUCu5hnAFAj6mDe6Ea0SeOo= @@ -183,8 +182,6 @@ github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= -github.com/matryer/is v1.2.0 h1:92UTHpy8CDwaJ08GqLDzhhuixiBUUD1p3AU6PHddz4A= -github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg= github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 h1:YH424zrwLTlyHSH/GzLMJeu5zhYVZSx5RQxGKm1h96s= @@ -240,8 +237,6 @@ github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXl github.com/vmihailenco/msgpack v3.3.3+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk= github.com/vmihailenco/msgpack/v4 v4.3.12/go.mod h1:gborTTJjAo/GWTqqRjrLCn9pgNN+NXzzngzBKDPIqw4= github.com/vmihailenco/tagparser v0.1.1/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= -github.com/whilp/git-urls v1.0.0 h1:95f6UMWN5FKW71ECsXRUd3FVYiXdrE7aX4NZKcPmIjU= -github.com/whilp/git-urls v1.0.0/go.mod h1:J16SAmobsqc3Qcy98brfl5f5+e0clUvg1krgwk/qCfE= github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -263,8 +258,8 @@ golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= -golang.org/x/crypto v0.15.0 h1:frVn1TEaCEaZcn3Tmd7Y2b5KKPaZ+I32Q2OA3kYp5TA= -golang.org/x/crypto v0.15.0/go.mod h1:4ChreQoLWfG3xLDer1WdlH5NdlQ3+mwnQq1YTKY+72g= +golang.org/x/crypto v0.16.0 h1:mMMrFzRSCF0GvB7Ne27XVtVAaXLrPmgPC7/v0tkwHaY= +golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e h1:+WEEuIdZHnUeJJmEUjyYC2gfUMj69yZXw17EnHg/otA= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= @@ -285,8 +280,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.18.0 h1:mIYleuAkSbHh0tCv7RvjL3F6ZVbLjq4+R7zbOn3Kokg= -golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ= +golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c= +golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= golang.org/x/oauth2 v0.14.0 h1:P0Vrf/2538nmC0H+pEQ3MNFRRnVR7RlqyVw+bvm26z0= golang.org/x/oauth2 v0.14.0/go.mod h1:lAtNWgaWfL4cm7j2OV8TxGi9Qb7ECORx8DktCY74OwM= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -311,15 +306,15 @@ golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q= -golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= +golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 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= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= -golang.org/x/term v0.14.0 h1:LGK9IlZ8T9jvdy6cTdfKUCltatMFOehAQo9SRC46UQ8= -golang.org/x/term v0.14.0/go.mod h1:TySc+nGkYR6qt8km8wUhuFRTVSMIX3XPR58y2lC8vww= +golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4= +golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -339,8 +334,8 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= 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.15.0 h1:zdAyfUGbYmuVokhzVmghFl2ZJh5QhcfebBgmVPFYA+8= -golang.org/x/tools v0.15.0/go.mod h1:hpksKq4dtpQWS1uQ61JkdqWM3LscIS6Slf+VVkm+wQk= +golang.org/x/tools v0.16.0 h1:GO788SKMRunPIBCXiQyo2AaexLstOrVhuAL5YwsckQM= +golang.org/x/tools v0.16.0/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -377,8 +372,8 @@ k8s.io/apimachinery v0.28.4 h1:zOSJe1mc+GxuMnFzD4Z/U1wst50X28ZNsn5bhgIIao8= k8s.io/apimachinery v0.28.4/go.mod h1:wI37ncBvfAoswfq626yPTe6Bz1c22L7uaJ8dho83mgg= k8s.io/client-go v0.28.4 h1:Np5ocjlZcTrkyRJ3+T3PkXDpe4UpatQxj85+xjaD2wY= k8s.io/client-go v0.28.4/go.mod h1:0VDZFpgoZfelyP5Wqu0/r/TRYcLYuJ2U1KEeoaPa1N4= -k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg= -k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/klog/v2 v2.110.1 h1:U/Af64HJf7FcwMcXyKm2RPM22WZzyR7OSpYj5tg3cL0= +k8s.io/klog/v2 v2.110.1/go.mod h1:YGtd1984u+GgbuZ7e08/yBuAfKLSO0+uR1Fhi6ExXjo= k8s.io/kube-openapi v0.0.0-20231113174909-778a5567bc1e h1:snPmy96t93RredGRjKfMFt+gvxuVAncqSAyBveJtr4Q= k8s.io/kube-openapi v0.0.0-20231113174909-778a5567bc1e/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA= k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSnlTLKgpAAttJvpI= diff --git a/tests/integration/azure_specific_test.go b/tests/integration/azure_specific_test.go index 2f9d6fc7..7f84c76b 100644 --- a/tests/integration/azure_specific_test.go +++ b/tests/integration/azure_specific_test.go @@ -28,10 +28,10 @@ import ( "testing" "time" + giturls "github.com/chainguard-dev/git-urls" "github.com/microsoft/azure-devops-go-api/azuredevops" "github.com/microsoft/azure-devops-go-api/azuredevops/git" . "github.com/onsi/gomega" - giturls "github.com/whilp/git-urls" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" diff --git a/tests/integration/go.mod b/tests/integration/go.mod index 091b691a..711e213b 100644 --- a/tests/integration/go.mod +++ b/tests/integration/go.mod @@ -5,6 +5,7 @@ go 1.20 require ( cloud.google.com/go/pubsub v1.31.0 github.com/Azure/azure-event-hubs-go/v3 v3.6.0 + github.com/chainguard-dev/git-urls v1.0.2 github.com/fluxcd/helm-controller/api v0.36.2 github.com/fluxcd/image-automation-controller/api v0.36.1 github.com/fluxcd/image-reflector-controller/api v0.31.0 @@ -12,17 +13,16 @@ require ( github.com/fluxcd/notification-controller/api v1.2.1 github.com/fluxcd/pkg/apis/event v0.6.0 github.com/fluxcd/pkg/apis/meta v1.2.0 - github.com/fluxcd/pkg/git v0.15.0 - github.com/fluxcd/pkg/git/gogit v0.15.0 - github.com/fluxcd/pkg/runtime v0.43.0 + github.com/fluxcd/pkg/git v0.16.0 + github.com/fluxcd/pkg/git/gogit v0.16.1 + github.com/fluxcd/pkg/runtime v0.43.2 github.com/fluxcd/source-controller/api v1.2.1 github.com/fluxcd/test-infra/tftestenv v0.0.0-20230831142147-627bca8e7916 - github.com/go-git/go-git/v5 v5.10.0 + github.com/go-git/go-git/v5 v5.11.0 github.com/google/go-containerregistry v0.16.1 github.com/hashicorp/terraform-json v0.16.0 github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 github.com/onsi/gomega v1.30.0 - github.com/whilp/git-urls v1.0.0 google.golang.org/grpc v1.56.3 k8s.io/api v0.28.4 k8s.io/apimachinery v0.28.4 @@ -50,7 +50,6 @@ require ( github.com/Masterminds/semver/v3 v3.2.1 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect github.com/ProtonMail/go-crypto v0.0.0-20231012073058-a7379d079e0e // indirect - github.com/acomagu/bufpipe v1.0.4 // indirect github.com/apparentlymart/go-textseg/v13 v13.0.0 // indirect github.com/cloudflare/circl v1.3.6 // indirect github.com/containerd/stargz-snapshotter/estargz v0.14.3 // indirect @@ -66,14 +65,14 @@ require ( github.com/evanphx/json-patch/v5 v5.7.0 // indirect github.com/fluxcd/pkg/apis/acl v0.1.0 // indirect github.com/fluxcd/pkg/apis/kustomize v1.1.1 // indirect - github.com/fluxcd/pkg/ssh v0.9.0 // indirect + github.com/fluxcd/pkg/ssh v0.10.0 // indirect github.com/fluxcd/pkg/version v0.2.2 // indirect github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect github.com/go-git/go-billy/v5 v5.5.0 // indirect github.com/go-logr/logr v1.3.0 // indirect - github.com/go-openapi/jsonpointer v0.19.6 // indirect + github.com/go-openapi/jsonpointer v0.20.0 // indirect github.com/go-openapi/jsonreference v0.20.2 // indirect - github.com/go-openapi/swag v0.22.3 // indirect + github.com/go-openapi/swag v0.22.4 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang-jwt/jwt/v4 v4.5.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect @@ -91,7 +90,7 @@ require ( github.com/hashicorp/go-version v1.6.0 // indirect github.com/hashicorp/hc-install v0.5.0 // indirect github.com/hashicorp/terraform-exec v0.18.1 // indirect - github.com/imdario/mergo v0.3.15 // indirect + github.com/imdario/mergo v0.3.16 // indirect github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/jpillora/backoff v1.0.0 // indirect @@ -116,18 +115,18 @@ require ( github.com/xanzy/ssh-agent v0.3.3 // indirect github.com/zclconf/go-cty v1.13.0 // indirect go.opencensus.io v0.24.0 // indirect - golang.org/x/crypto v0.15.0 // indirect + golang.org/x/crypto v0.16.0 // indirect golang.org/x/mod v0.14.0 // indirect - golang.org/x/net v0.18.0 // indirect - golang.org/x/oauth2 v0.14.0 // indirect + golang.org/x/net v0.19.0 // indirect + golang.org/x/oauth2 v0.15.0 // indirect golang.org/x/sync v0.5.0 // indirect - golang.org/x/sys v0.14.0 // indirect - golang.org/x/term v0.14.0 // indirect + golang.org/x/sys v0.15.0 // indirect + golang.org/x/term v0.15.0 // indirect golang.org/x/text v0.14.0 // indirect - golang.org/x/time v0.4.0 // indirect - golang.org/x/tools v0.15.0 // indirect + golang.org/x/time v0.5.0 // indirect + golang.org/x/tools v0.16.0 // indirect google.golang.org/api v0.126.0 // indirect - google.golang.org/appengine v1.6.7 // indirect + google.golang.org/appengine v1.6.8 // indirect google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc // indirect google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc // indirect @@ -137,9 +136,9 @@ require ( gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect k8s.io/apiextensions-apiserver v0.28.4 // indirect - k8s.io/klog/v2 v2.100.1 // indirect - k8s.io/kube-openapi v0.0.0-20231113174909-778a5567bc1e // indirect - k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect + k8s.io/klog/v2 v2.110.1 // indirect + k8s.io/kube-openapi v0.0.0-20231206194836-bf4651e18aa8 // indirect + k8s.io/utils v0.0.0-20231127182322-b307cd553661 // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect sigs.k8s.io/yaml v1.4.0 // indirect diff --git a/tests/integration/go.sum b/tests/integration/go.sum index b28d6010..d83c779d 100644 --- a/tests/integration/go.sum +++ b/tests/integration/go.sum @@ -60,8 +60,6 @@ github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7/go.mod h1:z4/ github.com/ProtonMail/go-crypto v0.0.0-20231012073058-a7379d079e0e h1:NfjGPY2A8SSRJvXny111ZPoB57LT5lWgX4XiUjW10eY= github.com/ProtonMail/go-crypto v0.0.0-20231012073058-a7379d079e0e/go.mod h1:K4vciqCJaZ1Ghw/SvtJbEAM4soEtwDCNVqkdQIIujwU= github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= -github.com/acomagu/bufpipe v1.0.4 h1:e3H4WUzM3npvo5uv95QuJM3cQspFNtFBzvJ2oNjKIDQ= -github.com/acomagu/bufpipe v1.0.4/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= @@ -76,6 +74,8 @@ github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7N github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= +github.com/chainguard-dev/git-urls v1.0.2 h1:pSpT7ifrpc5X55n4aTTm7FFUE+ZQHKiqpiwNkJrVcKQ= +github.com/chainguard-dev/git-urls v1.0.2/go.mod h1:rbGgj10OS7UgZlbzdUQIQpT0k/D4+An04HJY7Ol+Y/o= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= github.com/cloudflare/circl v1.3.6 h1:/xbKIqSHbZXHwkhbrhrt2YOHIwYJlXH94E3tI/gDlUg= @@ -140,15 +140,15 @@ github.com/fluxcd/pkg/apis/kustomize v1.1.1 h1:MSGn4z0R9PptmoPFHnx2nEZ8Jtl1sKfw0 github.com/fluxcd/pkg/apis/kustomize v1.1.1/go.mod h1:0pCu0ecIY+ZM0iE/hOHYwCMZ3b0SpBrjJ1SH3FFyYdE= github.com/fluxcd/pkg/apis/meta v1.2.0 h1:O766PzGAdMdQKybSflGL8oV0+GgCNIkdsxfalRyzeO8= github.com/fluxcd/pkg/apis/meta v1.2.0/go.mod h1:fU/Az9AoVyIxC0oI4ihG0NVMNnvrcCzdEym3wxjIQsc= -github.com/fluxcd/pkg/git v0.15.0 h1:QPqv+b4sQXXpWQhigf/sPE5qzK4BrQhkltnYuEy4AYw= -github.com/fluxcd/pkg/git v0.15.0/go.mod h1:zqmLfw4d+mS77bMRkeQ+8dmFSgxB/c2ZDkafIyY6bAQ= -github.com/fluxcd/pkg/git/gogit v0.15.0 h1:GV8XaRp7CtlRuDallrJgMR6s1YHIMZi5+zyXMOJsS0c= -github.com/fluxcd/pkg/git/gogit v0.15.0/go.mod h1:9KBhXE1czARGT6QqHYVMfr2RbvPpguKwCdm4LgkP3nY= -github.com/fluxcd/pkg/gittestserver v0.8.6 h1:YM8prVKB3LC9LBBe+a2p7l1BlfV9erXCgC1em9sbqW4= -github.com/fluxcd/pkg/runtime v0.43.0 h1:dU4cWct5VTpddGzJUU80zxNl80jbbVEN5Y5rbt4YUnw= -github.com/fluxcd/pkg/runtime v0.43.0/go.mod h1:RuqJ9VEXELjzgurK2+UXBBgVN1vS0hZ7CYVG2xBAEVM= -github.com/fluxcd/pkg/ssh v0.9.0 h1:egRvg4AKarObFKXsBDZ5oBZ5PCjmQ4Q6hX+6GmrdbH0= -github.com/fluxcd/pkg/ssh v0.9.0/go.mod h1:3KKbfcFn4l+HqYdHKqcu2LO8RvFv0Kh6tYRSUtONC/8= +github.com/fluxcd/pkg/git v0.16.0 h1:xgfMpgsVaxGLechKNaSUif9jnt2Ji/HkwIwxXeDoADk= +github.com/fluxcd/pkg/git v0.16.0/go.mod h1:ZsaxXDBHIUjNeRf+3qDGyHD22KpqbjuNPCbHy2Xid5U= +github.com/fluxcd/pkg/git/gogit v0.16.1 h1:byimVk7VLbERRxJDkVktithN03GC0y7fyc8Ur9Uka8U= +github.com/fluxcd/pkg/git/gogit v0.16.1/go.mod h1:nx3PumOFe5e3fMsh2HPLSlAeOk2wC+jVg7H9BTRKEmg= +github.com/fluxcd/pkg/gittestserver v0.9.0 h1:OthMahtKmmpwCRw8LmSGrceqVhHywGg/QiytxHGSgeY= +github.com/fluxcd/pkg/runtime v0.43.2 h1:xH2BvttUqJ7wS0zjuBETr2pLXG62QY6f0mdxg5UQKio= +github.com/fluxcd/pkg/runtime v0.43.2/go.mod h1:dhhNV45B3tekg7qPzATFTuWOulvUzMoO1bV+vc2pSts= +github.com/fluxcd/pkg/ssh v0.10.0 h1:JFz0u/CPEf3hXvmrEvUvXsc70eKh8xphqjXxZuSby9g= +github.com/fluxcd/pkg/ssh v0.10.0/go.mod h1:1lFTj3MhU9xQuaJ5PJJoh/FyRYzK54ll9NY/s2KqOZM= github.com/fluxcd/pkg/version v0.2.2 h1:ZpVXECeLA5hIQMft11iLp6gN3cKcz6UNuVTQPw/bRdI= github.com/fluxcd/pkg/version v0.2.2/go.mod h1:NGnh/no8S6PyfCDxRFrPY3T5BUnqP48MxfxNRU0z8C0= github.com/fluxcd/source-controller/api v1.2.1 h1:zWRfwMB/BkV0A/duZQwHEcrE/abWJQt7DUgYTzn4IzM= @@ -157,7 +157,7 @@ github.com/fluxcd/test-infra/tftestenv v0.0.0-20230831142147-627bca8e7916 h1:w9U github.com/fluxcd/test-infra/tftestenv v0.0.0-20230831142147-627bca8e7916/go.mod h1:liFlLEXgambGVdWSJ4JzbIHf1Vjpp1HwUyPazPIVZug= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= -github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= +github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY= @@ -171,18 +171,19 @@ github.com/go-git/go-billy/v5 v5.5.0/go.mod h1:hmexnoNsr2SJU1Ju67OaNz5ASJY3+sHgF github.com/go-git/go-git-fixtures/v4 v4.2.1/go.mod h1:K8zd3kDUAykwTdDCr+I0per6Y6vMiRR/nnVTBtavnB0= github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 h1:eMje31YglSBqCdIqdhKBW8lokaMrL3uTkpGYlE2OOT4= github.com/go-git/go-git/v5 v5.4.2/go.mod h1:gQ1kArt6d+n+BGd+/B/I74HwRTLhth2+zti4ihgckDc= -github.com/go-git/go-git/v5 v5.10.0 h1:F0x3xXrAWmhwtzoCokU4IMPcBdncG+HAAqi9FcOOjbQ= -github.com/go-git/go-git/v5 v5.10.0/go.mod h1:1FOZ/pQnqw24ghP2n7cunVl0ON55BsjPYvhWHvZGhoo= -github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-git/go-git/v5 v5.11.0 h1:XIZc1p+8YzypNr34itUfSvYJcv+eYdTnTvOZ2vD3cA4= +github.com/go-git/go-git/v5 v5.11.0/go.mod h1:6GFcX2P3NM7FPBfpePbpLd21XxsgdAt+lKqXmCUiUCY= github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY= github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= -github.com/go-logr/zapr v1.2.4 h1:QHVo+6stLbfJmYGkQ7uGHUCu5hnAFAj6mDe6Ea0SeOo= -github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE= +github.com/go-logr/zapr v1.3.0 h1:XGdV8XW8zdwFiwOA2Dryh1gj2KRQyOOoNmBy4EplIcQ= github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= +github.com/go-openapi/jsonpointer v0.20.0 h1:ESKJdU9ASRfaPNOPRx12IUyA1vn3R9GiE3KYD14BXdQ= +github.com/go-openapi/jsonpointer v0.20.0/go.mod h1:6PGzBjjIIumbLYysB73Klnms1mwnU4G3YHOECG3CedA= github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= -github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g= github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= +github.com/go-openapi/swag v0.22.4 h1:QLMzNJnMGPRNDCbySlcj1x01tzU8/9LTTL9hZZZogBU= +github.com/go-openapi/swag v0.22.4/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= github.com/gofrs/uuid v4.4.0+incompatible h1:3qXRTX8/NbyulANqlc0lchS1gqAVxRgsuW1YrTJupqA= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= @@ -197,7 +198,6 @@ github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= @@ -264,8 +264,8 @@ github.com/huandu/xstrings v1.3.1/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq github.com/huandu/xstrings v1.3.2/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= -github.com/imdario/mergo v0.3.15 h1:M8XP7IuFNsqUx6VPK2P9OSmsYsI/YFaGil0uD21V3dM= -github.com/imdario/mergo v0.3.15/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= +github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4= +github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= @@ -293,7 +293,6 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= -github.com/matryer/is v1.2.0 h1:92UTHpy8CDwaJ08GqLDzhhuixiBUUD1p3AU6PHddz4A= github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= @@ -370,8 +369,6 @@ github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcU github.com/urfave/cli v1.22.12/go.mod h1:sSBEIC79qR6OvcmsD4U3KABeOTxDqQtdDnaFuUN30b8= github.com/vbatts/tar-split v0.11.3 h1:hLFqsOLQ1SsppQNTMpkpPXClLDfC2A3Zgy9OUU+RVck= github.com/vbatts/tar-split v0.11.3/go.mod h1:9QlHN18E+fEH7RdG+QAJJcuya3rqT7eXSTY7wGrAokY= -github.com/whilp/git-urls v1.0.0 h1:95f6UMWN5FKW71ECsXRUd3FVYiXdrE7aX4NZKcPmIjU= -github.com/whilp/git-urls v1.0.0/go.mod h1:J16SAmobsqc3Qcy98brfl5f5+e0clUvg1krgwk/qCfE= github.com/xanzy/ssh-agent v0.3.0/go.mod h1:3s9xbODqPuuhK9JV1R321M/FlMZSBvE5aY6eAcqrDh0= github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= @@ -384,7 +381,7 @@ go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= -go.uber.org/zap v1.25.0 h1:4Hvk6GtkucQ790dqmj7l1eEnRdKm3k3ZUrUMS2d5+5c= +go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo= golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -400,10 +397,10 @@ golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= -golang.org/x/crypto v0.15.0 h1:frVn1TEaCEaZcn3Tmd7Y2b5KKPaZ+I32Q2OA3kYp5TA= -golang.org/x/crypto v0.15.0/go.mod h1:4ChreQoLWfG3xLDer1WdlH5NdlQ3+mwnQq1YTKY+72g= +golang.org/x/crypto v0.16.0 h1:mMMrFzRSCF0GvB7Ne27XVtVAaXLrPmgPC7/v0tkwHaY= +golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e h1:+WEEuIdZHnUeJJmEUjyYC2gfUMj69yZXw17EnHg/otA= +golang.org/x/exp v0.0.0-20231206192017-f3f8817b8deb h1:c0vyKkb6yr3KR7jEfJaOSv4lG7xPkbN6r52aJz1d8a8= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -420,7 +417,6 @@ golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= @@ -434,12 +430,12 @@ golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.18.0 h1:mIYleuAkSbHh0tCv7RvjL3F6ZVbLjq4+R7zbOn3Kokg= -golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ= +golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c= +golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.14.0 h1:P0Vrf/2538nmC0H+pEQ3MNFRRnVR7RlqyVw+bvm26z0= -golang.org/x/oauth2 v0.14.0/go.mod h1:lAtNWgaWfL4cm7j2OV8TxGi9Qb7ECORx8DktCY74OwM= +golang.org/x/oauth2 v0.15.0 h1:s8pnnxNVzjWyrvYdFUQq5llS1PX2zhPXmccZv99h7uQ= +golang.org/x/oauth2 v0.15.0/go.mod h1:q48ptWNTY5XWf+JNten23lcvHpLJ0ZSxF5ttTHKVCAM= 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= @@ -476,18 +472,17 @@ golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q= -golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= +golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 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= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= -golang.org/x/term v0.14.0 h1:LGK9IlZ8T9jvdy6cTdfKUCltatMFOehAQo9SRC46UQ8= -golang.org/x/term v0.14.0/go.mod h1:TySc+nGkYR6qt8km8wUhuFRTVSMIX3XPR58y2lC8vww= +golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4= +golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= @@ -498,8 +493,8 @@ golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/time v0.4.0 h1:Z81tqI5ddIoXDPvVQ7/7CC9TnLM7ubaFG2qXYd5BbYY= -golang.org/x/time v0.4.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= +golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= @@ -510,8 +505,8 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= 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.15.0 h1:zdAyfUGbYmuVokhzVmghFl2ZJh5QhcfebBgmVPFYA+8= -golang.org/x/tools v0.15.0/go.mod h1:hpksKq4dtpQWS1uQ61JkdqWM3LscIS6Slf+VVkm+wQk= +golang.org/x/tools v0.16.0 h1:GO788SKMRunPIBCXiQyo2AaexLstOrVhuAL5YwsckQM= +golang.org/x/tools v0.16.0/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -521,8 +516,8 @@ google.golang.org/api v0.126.0 h1:q4GJq+cAdMAC7XP7njvQ4tvohGLiSlytuL4BQxbIZ+o= google.golang.org/api v0.126.0/go.mod h1:mBwVAtz+87bEN6CbA1GtZPDOqY2R5ONPqJeIlvyo4Aw= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= -google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= +google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= @@ -587,12 +582,12 @@ k8s.io/apimachinery v0.28.4 h1:zOSJe1mc+GxuMnFzD4Z/U1wst50X28ZNsn5bhgIIao8= k8s.io/apimachinery v0.28.4/go.mod h1:wI37ncBvfAoswfq626yPTe6Bz1c22L7uaJ8dho83mgg= k8s.io/client-go v0.28.4 h1:Np5ocjlZcTrkyRJ3+T3PkXDpe4UpatQxj85+xjaD2wY= k8s.io/client-go v0.28.4/go.mod h1:0VDZFpgoZfelyP5Wqu0/r/TRYcLYuJ2U1KEeoaPa1N4= -k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg= -k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= -k8s.io/kube-openapi v0.0.0-20231113174909-778a5567bc1e h1:snPmy96t93RredGRjKfMFt+gvxuVAncqSAyBveJtr4Q= -k8s.io/kube-openapi v0.0.0-20231113174909-778a5567bc1e/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA= -k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSnlTLKgpAAttJvpI= -k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +k8s.io/klog/v2 v2.110.1 h1:U/Af64HJf7FcwMcXyKm2RPM22WZzyR7OSpYj5tg3cL0= +k8s.io/klog/v2 v2.110.1/go.mod h1:YGtd1984u+GgbuZ7e08/yBuAfKLSO0+uR1Fhi6ExXjo= +k8s.io/kube-openapi v0.0.0-20231206194836-bf4651e18aa8 h1:vzKzxN5uyJZLY8HL1/OovW7BJefnsBIWt8T7Gjh2boQ= +k8s.io/kube-openapi v0.0.0-20231206194836-bf4651e18aa8/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA= +k8s.io/utils v0.0.0-20231127182322-b307cd553661 h1:FepOBzJ0GXm8t0su67ln2wAZjbQ6RxQGZDnzuLcrUTI= +k8s.io/utils v0.0.0-20231127182322-b307cd553661/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= sigs.k8s.io/controller-runtime v0.16.3 h1:2TuvuokmfXvDUamSx1SuAOO3eTyye+47mJCigwG62c4= sigs.k8s.io/controller-runtime v0.16.3/go.mod h1:j7bialYoSn142nv9sCOJmQgDXQXxnroFU4VnX/brVJ0= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= From 43c9cfc52f8408f17ab30d6e59d6207d8289baca Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Tue, 12 Dec 2023 08:12:44 +0000 Subject: [PATCH 704/818] Update toolkit components - helm-controller to v0.37.0 https://github.com/fluxcd/helm-controller/blob/v0.37.0/CHANGELOG.md - kustomize-controller to v1.2.0 https://github.com/fluxcd/kustomize-controller/blob/v1.2.0/CHANGELOG.md - source-controller to v1.2.2 https://github.com/fluxcd/source-controller/blob/v1.2.2/CHANGELOG.md - notification-controller to v1.2.2 https://github.com/fluxcd/notification-controller/blob/v1.2.2/CHANGELOG.md - image-reflector-controller to v0.31.1 https://github.com/fluxcd/image-reflector-controller/blob/v0.31.1/CHANGELOG.md - image-automation-controller to v0.37.0 https://github.com/fluxcd/image-automation-controller/blob/v0.37.0/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 12 +++++----- go.sum | 24 +++++++++---------- .../bases/helm-controller/kustomization.yaml | 4 ++-- .../kustomization.yaml | 4 ++-- .../kustomization.yaml | 4 ++-- .../kustomize-controller/kustomization.yaml | 4 ++-- .../kustomization.yaml | 4 ++-- .../source-controller/kustomization.yaml | 4 ++-- manifests/crds/kustomization.yaml | 12 +++++----- 9 files changed, 36 insertions(+), 36 deletions(-) diff --git a/go.mod b/go.mod index bef83405..83ab4988 100644 --- a/go.mod +++ b/go.mod @@ -12,11 +12,11 @@ require ( github.com/distribution/distribution/v3 v3.0.0-20230823142118-4f7424c8eb41 github.com/fluxcd/cli-utils v0.36.0-flux.2 github.com/fluxcd/go-git-providers v0.19.1 - github.com/fluxcd/helm-controller/api v0.36.2 - github.com/fluxcd/image-automation-controller/api v0.36.1 - github.com/fluxcd/image-reflector-controller/api v0.31.0 - github.com/fluxcd/kustomize-controller/api v1.1.1 - github.com/fluxcd/notification-controller/api v1.2.1 + github.com/fluxcd/helm-controller/api v0.37.0 + github.com/fluxcd/image-automation-controller/api v0.37.0 + github.com/fluxcd/image-reflector-controller/api v0.31.1 + github.com/fluxcd/kustomize-controller/api v1.2.0 + github.com/fluxcd/notification-controller/api v1.2.2 github.com/fluxcd/pkg/apis/event v0.6.0 github.com/fluxcd/pkg/apis/meta v1.2.0 github.com/fluxcd/pkg/git v0.16.0 @@ -29,7 +29,7 @@ require ( github.com/fluxcd/pkg/ssh v0.10.0 github.com/fluxcd/pkg/tar v0.4.0 github.com/fluxcd/pkg/version v0.2.2 - github.com/fluxcd/source-controller/api v1.2.1 + github.com/fluxcd/source-controller/api v1.2.2 github.com/go-git/go-git/v5 v5.11.0 github.com/go-logr/logr v1.3.0 github.com/gonvenience/bunt v1.3.5 diff --git a/go.sum b/go.sum index 2470a0fe..a3671495 100644 --- a/go.sum +++ b/go.sum @@ -131,16 +131,16 @@ github.com/fluxcd/cli-utils v0.36.0-flux.2/go.mod h1:TQtgRf9OjQBzE5FJ9UDV6WNz9Po github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= github.com/fluxcd/go-git-providers v0.19.1 h1:LXRFpHdPCmO+Uegw2MvAU3KiEHn1PRV2c//ii/HhpeY= github.com/fluxcd/go-git-providers v0.19.1/go.mod h1:eN0JpfkQqS/6yJ1I6DW3z1XLCC2JZK+55Ues+0Ur3Ds= -github.com/fluxcd/helm-controller/api v0.36.2 h1:9JaTc91yocG1oQkM/GMfpZ/nGPpliRjZBNwyAsW5584= -github.com/fluxcd/helm-controller/api v0.36.2/go.mod h1:zkcRy3PxG0NoxSY5SjiSA5tWOGa6spIbWsChQY8FXqM= -github.com/fluxcd/image-automation-controller/api v0.36.1 h1:Knd4SSm/bJ0iqvYcQq87uDaT/mW9poM1jOvHpJ/4tzk= -github.com/fluxcd/image-automation-controller/api v0.36.1/go.mod h1:IsjdBtgm71KHRGDTZZZiGYdWGoJ5VjenE9F4ueADM/o= -github.com/fluxcd/image-reflector-controller/api v0.31.0 h1:9t5zj7ufo9/d57gpcZsD6YAIxFz0vtLH4jXCj379srE= -github.com/fluxcd/image-reflector-controller/api v0.31.0/go.mod h1:/EcjOa/EYi8sSBHcGrBkLjMjNNfC7xXMxqG9phBORCo= -github.com/fluxcd/kustomize-controller/api v1.1.1 h1:pQcAzvBC3cFGOCgk0zrcsO1Kjtal1tvd6rHXkyp2R78= -github.com/fluxcd/kustomize-controller/api v1.1.1/go.mod h1:FHJTX6c0+CznUNGMol5+Uc4lQsYRxWgpmIRK/xDCghA= -github.com/fluxcd/notification-controller/api v1.2.1 h1:yPQZ7ppYvazxl/Vsespbx9VlVyopH7p8pKGzZTNxI0c= -github.com/fluxcd/notification-controller/api v1.2.1/go.mod h1:1sWTpAXkga5zkXOgFoR+NIJgHNclBcfAHUJ/rMAjnYY= +github.com/fluxcd/helm-controller/api v0.37.0 h1:B14z4nJXmLhtEwQn681bIDy3V1o7USI3X22BuIIsrOw= +github.com/fluxcd/helm-controller/api v0.37.0/go.mod h1:BuXZhAX9blQviil6yUN5zNM4RB753yhyBTJXxXff7Mo= +github.com/fluxcd/image-automation-controller/api v0.37.0 h1:0L8kzX3zaYfg4wQ2Mx3G56atLMNeDGjy5qMGP4tDKRs= +github.com/fluxcd/image-automation-controller/api v0.37.0/go.mod h1:B2EbmiY69mE2bGOENPNUXr6klwrVe7FwVoB2iE1q08E= +github.com/fluxcd/image-reflector-controller/api v0.31.1 h1:nc44G0JjLgSvqglJSiXQJZcrRw+eY01j7fHRUDB3FMw= +github.com/fluxcd/image-reflector-controller/api v0.31.1/go.mod h1:KopMbC92Cw2ypZZeMytzTLr3EfOj2hoL6MizrdpBDhc= +github.com/fluxcd/kustomize-controller/api v1.2.0 h1:kXlZUl5QztIIrqceZLBYF+f3am41B47uXgVw8WlnuMY= +github.com/fluxcd/kustomize-controller/api v1.2.0/go.mod h1:0Kgc4uYnr5jCm4H8JwArkR0v4WTmXeX/9KgoDbxluVc= +github.com/fluxcd/notification-controller/api v1.2.2 h1:BUuVkYxrXzpsdCGh76Tiu//6dffLFo10KmX7MaVeZ64= +github.com/fluxcd/notification-controller/api v1.2.2/go.mod h1:A0VkH3mswQAeGKsmzq81jAUN+zNJt9SPXjwe8mvnnaw= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= github.com/fluxcd/pkg/apis/event v0.6.0 h1:AUaeee1CGWb65BLqVximHXG8Gcu6vWuYONIq6tVpjgo= @@ -170,8 +170,8 @@ github.com/fluxcd/pkg/tar v0.4.0 h1:SuXpfXBIcSJ5R/yqQi2CBxBmV/i/LH0agqNAh2PWBZg= github.com/fluxcd/pkg/tar v0.4.0/go.mod h1:SyJBaQvuv2VA/rv4d1OHhCV6R8+9QKc9np193EzNHBc= github.com/fluxcd/pkg/version v0.2.2 h1:ZpVXECeLA5hIQMft11iLp6gN3cKcz6UNuVTQPw/bRdI= github.com/fluxcd/pkg/version v0.2.2/go.mod h1:NGnh/no8S6PyfCDxRFrPY3T5BUnqP48MxfxNRU0z8C0= -github.com/fluxcd/source-controller/api v1.2.1 h1:zWRfwMB/BkV0A/duZQwHEcrE/abWJQt7DUgYTzn4IzM= -github.com/fluxcd/source-controller/api v1.2.1/go.mod h1:n+PMCJXl/AYCjWHn5N/MUuoIFKfDg4kCDviFIa7fDvI= +github.com/fluxcd/source-controller/api v1.2.2 h1:OUivb1UHDmY8+hlxjRx3k8i1w3jMSytdOYRMfmeeZhY= +github.com/fluxcd/source-controller/api v1.2.2/go.mod h1:5gaIVVH7hgb8p3HKFp8P6hGmZEC8fKSt4EcrG3g5vZI= github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY= diff --git a/manifests/bases/helm-controller/kustomization.yaml b/manifests/bases/helm-controller/kustomization.yaml index a55c9340..ec49cbbe 100644 --- a/manifests/bases/helm-controller/kustomization.yaml +++ b/manifests/bases/helm-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/helm-controller/releases/download/v0.36.2/helm-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.36.2/helm-controller.deployment.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.37.0/helm-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.37.0/helm-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/image-automation-controller/kustomization.yaml b/manifests/bases/image-automation-controller/kustomization.yaml index f6beff59..a89e9847 100644 --- a/manifests/bases/image-automation-controller/kustomization.yaml +++ b/manifests/bases/image-automation-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.36.1/image-automation-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.36.1/image-automation-controller.deployment.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.37.0/image-automation-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.37.0/image-automation-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/image-reflector-controller/kustomization.yaml b/manifests/bases/image-reflector-controller/kustomization.yaml index 5a2a007f..f8aef1e6 100644 --- a/manifests/bases/image-reflector-controller/kustomization.yaml +++ b/manifests/bases/image-reflector-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.31.0/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.31.0/image-reflector-controller.deployment.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.31.1/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.31.1/image-reflector-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/kustomize-controller/kustomization.yaml b/manifests/bases/kustomize-controller/kustomization.yaml index cef82f1e..a509f9ad 100644 --- a/manifests/bases/kustomize-controller/kustomization.yaml +++ b/manifests/bases/kustomize-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/kustomize-controller/releases/download/v1.1.1/kustomize-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v1.1.1/kustomize-controller.deployment.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v1.2.0/kustomize-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v1.2.0/kustomize-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/notification-controller/kustomization.yaml b/manifests/bases/notification-controller/kustomization.yaml index c5a34987..914c2953 100644 --- a/manifests/bases/notification-controller/kustomization.yaml +++ b/manifests/bases/notification-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/notification-controller/releases/download/v1.2.1/notification-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v1.2.1/notification-controller.deployment.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v1.2.2/notification-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v1.2.2/notification-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index 71b0e930..a01c739b 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v1.2.1/source-controller.crds.yaml -- https://github.com/fluxcd/source-controller/releases/download/v1.2.1/source-controller.deployment.yaml +- https://github.com/fluxcd/source-controller/releases/download/v1.2.2/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v1.2.2/source-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index 75c6f34c..483ee668 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -1,9 +1,9 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v1.2.1/source-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v1.1.1/kustomize-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.36.2/helm-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v1.2.1/notification-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.31.0/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.36.1/image-automation-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v1.2.2/source-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v1.2.0/kustomize-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.37.0/helm-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v1.2.2/notification-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.31.1/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.37.0/image-automation-controller.crds.yaml From eeaffd5c0e7f5a9ae87bc86f91071240f1fe1c7a Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Tue, 12 Dec 2023 09:24:49 +0100 Subject: [PATCH 705/818] Update HelmRelease golden file with new message Signed-off-by: Hidde Beydals --- cmd/flux/testdata/helmrelease/get_helmrelease_from_git.golden | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/flux/testdata/helmrelease/get_helmrelease_from_git.golden b/cmd/flux/testdata/helmrelease/get_helmrelease_from_git.golden index b384ecb8..8bd236dd 100644 --- a/cmd/flux/testdata/helmrelease/get_helmrelease_from_git.golden +++ b/cmd/flux/testdata/helmrelease/get_helmrelease_from_git.golden @@ -1,2 +1,2 @@ -NAME REVISION SUSPENDED READY MESSAGE -thrfg 6.3.5 False True Release reconciliation succeeded +NAME REVISION SUSPENDED READY MESSAGE +thrfg 6.3.5 False True Helm install succeeded for release thrfg-1/thrfg.v1 with chart podinfo@6.3.5 From bed6efa6712a86146f16eca540882e6922ffea30 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Thu, 30 Nov 2023 10:33:36 +0200 Subject: [PATCH 706/818] Add force and reset flags to `flux reconcile hr` Signed-off-by: Stefan Prodan --- cmd/flux/reconcile.go | 27 ++++++++++++++++++++------- cmd/flux/reconcile_helmrelease.go | 5 ++++- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/cmd/flux/reconcile.go b/cmd/flux/reconcile.go index c6c7a472..fc6334b6 100644 --- a/cmd/flux/reconcile.go +++ b/cmd/flux/reconcile.go @@ -31,6 +31,7 @@ import ( "k8s.io/client-go/util/retry" "sigs.k8s.io/controller-runtime/pkg/client" + helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" "github.com/fluxcd/pkg/apis/meta" "github.com/fluxcd/flux2/v2/internal/utils" @@ -166,14 +167,26 @@ func requestReconciliation(ctx context.Context, kubeClient client.Client, return err } patch := client.MergeFrom(object.DeepCopy()) - if ann := object.GetAnnotations(); ann == nil { - object.SetAnnotations(map[string]string{ - meta.ReconcileRequestAnnotation: time.Now().Format(time.RFC3339Nano), - }) - } else { - ann[meta.ReconcileRequestAnnotation] = time.Now().Format(time.RFC3339Nano) - object.SetAnnotations(ann) + + // Add a timestamp annotation to trigger a reconciliation. + ts := time.Now().Format(time.RFC3339Nano) + annotations := object.GetAnnotations() + if annotations == nil { + annotations = make(map[string]string, 1) + } + annotations[meta.ReconcileRequestAnnotation] = ts + + // HelmRelease specific annotations to force or reset a release. + if gvk.Kind == helmv2.HelmReleaseKind { + if rhrArgs.syncForce { + annotations["reconcile.fluxcd.io/forceAt"] = ts + } + if rhrArgs.syncReset { + annotations["reconcile.fluxcd.io/resetAt"] = ts + } } + + object.SetAnnotations(annotations) return kubeClient.Patch(ctx, object, patch) }) } diff --git a/cmd/flux/reconcile_helmrelease.go b/cmd/flux/reconcile_helmrelease.go index b55a1295..145b6dc9 100644 --- a/cmd/flux/reconcile_helmrelease.go +++ b/cmd/flux/reconcile_helmrelease.go @@ -46,13 +46,16 @@ The reconcile kustomization command triggers a reconciliation of a HelmRelease r type reconcileHelmReleaseFlags struct { syncHrWithSource bool + syncForce bool + syncReset bool } var rhrArgs reconcileHelmReleaseFlags func init() { reconcileHrCmd.Flags().BoolVar(&rhrArgs.syncHrWithSource, "with-source", false, "reconcile HelmRelease source") - + reconcileHrCmd.Flags().BoolVar(&rhrArgs.syncForce, "force", false, "force a one-off install or upgrade of the HelmRelease resource") + reconcileHrCmd.Flags().BoolVar(&rhrArgs.syncReset, "reset", false, "reset the reset the failure count for this HelmRelease resource") reconcileCmd.AddCommand(reconcileHrCmd) } From 437a94367784541695fa68deba7a52b188d97ea8 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Tue, 12 Dec 2023 11:07:01 +0200 Subject: [PATCH 707/818] Update `HelmRelease` to v2beta2 Signed-off-by: Stefan Prodan --- cmd/flux/create_helmrelease.go | 7 ++++--- cmd/flux/create_kustomization.go | 2 +- cmd/flux/delete_helmrelease.go | 2 +- cmd/flux/events.go | 2 +- cmd/flux/export_helmrelease.go | 2 +- cmd/flux/get_all.go | 2 +- cmd/flux/get_helmrelease.go | 2 +- cmd/flux/helmrelease.go | 2 +- cmd/flux/reconcile.go | 6 +++--- cmd/flux/reconcile_helmrelease.go | 2 +- cmd/flux/resume_helmrelease.go | 2 +- cmd/flux/stats.go | 2 +- cmd/flux/suspend_helmrelease.go | 2 +- cmd/flux/trace.go | 5 +++-- cmd/flux/tree_kustomization.go | 2 +- internal/flags/crds.go | 2 +- internal/utils/utils.go | 2 +- pkg/uninstall/uninstall.go | 7 ++++--- tests/azure/go.mod | 16 ++++++++-------- tests/azure/go.sum | 32 +++++++++++++++---------------- tests/azure/util_test.go | 2 +- tests/integration/go.mod | 12 ++++++------ tests/integration/go.sum | 24 +++++++++++------------ tests/integration/oci_test.go | 2 +- tests/integration/suite_test.go | 2 +- 25 files changed, 73 insertions(+), 70 deletions(-) diff --git a/cmd/flux/create_helmrelease.go b/cmd/flux/create_helmrelease.go index 64bfcfe3..d06e2ab3 100644 --- a/cmd/flux/create_helmrelease.go +++ b/cmd/flux/create_helmrelease.go @@ -24,11 +24,12 @@ import ( "strings" "time" - "github.com/fluxcd/flux2/v2/internal/flags" - "github.com/fluxcd/flux2/v2/internal/utils" "github.com/fluxcd/pkg/apis/meta" "github.com/fluxcd/pkg/runtime/transform" + "github.com/fluxcd/flux2/v2/internal/flags" + "github.com/fluxcd/flux2/v2/internal/utils" + "github.com/spf13/cobra" apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" "k8s.io/apimachinery/pkg/api/errors" @@ -38,7 +39,7 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/yaml" - helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" + helmv2 "github.com/fluxcd/helm-controller/api/v2beta2" ) var createHelmReleaseCmd = &cobra.Command{ diff --git a/cmd/flux/create_kustomization.go b/cmd/flux/create_kustomization.go index ec9a5293..aa3a73a7 100644 --- a/cmd/flux/create_kustomization.go +++ b/cmd/flux/create_kustomization.go @@ -29,7 +29,7 @@ import ( "k8s.io/apimachinery/pkg/util/wait" "sigs.k8s.io/controller-runtime/pkg/client" - helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" + helmv2 "github.com/fluxcd/helm-controller/api/v2beta2" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" "github.com/fluxcd/pkg/apis/meta" diff --git a/cmd/flux/delete_helmrelease.go b/cmd/flux/delete_helmrelease.go index 6f2300c5..a182c0a6 100644 --- a/cmd/flux/delete_helmrelease.go +++ b/cmd/flux/delete_helmrelease.go @@ -19,7 +19,7 @@ package main import ( "github.com/spf13/cobra" - helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" + helmv2 "github.com/fluxcd/helm-controller/api/v2beta2" ) var deleteHelmReleaseCmd = &cobra.Command{ diff --git a/cmd/flux/events.go b/cmd/flux/events.go index cf85c3f5..481f9e79 100644 --- a/cmd/flux/events.go +++ b/cmd/flux/events.go @@ -39,7 +39,7 @@ import ( cmdutil "k8s.io/kubectl/pkg/cmd/util" "sigs.k8s.io/controller-runtime/pkg/client" - helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" + helmv2 "github.com/fluxcd/helm-controller/api/v2beta2" autov1 "github.com/fluxcd/image-automation-controller/api/v1beta1" imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta2" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" diff --git a/cmd/flux/export_helmrelease.go b/cmd/flux/export_helmrelease.go index e00b3494..b55df13b 100644 --- a/cmd/flux/export_helmrelease.go +++ b/cmd/flux/export_helmrelease.go @@ -20,7 +20,7 @@ import ( "github.com/spf13/cobra" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" + helmv2 "github.com/fluxcd/helm-controller/api/v2beta2" ) var exportHelmReleaseCmd = &cobra.Command{ diff --git a/cmd/flux/get_all.go b/cmd/flux/get_all.go index 27bbcfe4..79b8cd04 100644 --- a/cmd/flux/get_all.go +++ b/cmd/flux/get_all.go @@ -21,7 +21,7 @@ import ( "github.com/spf13/cobra" - helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" + helmv2 "github.com/fluxcd/helm-controller/api/v2beta2" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" notificationv1 "github.com/fluxcd/notification-controller/api/v1" notificationv1b3 "github.com/fluxcd/notification-controller/api/v1beta3" diff --git a/cmd/flux/get_helmrelease.go b/cmd/flux/get_helmrelease.go index d6462ddd..92dc7215 100644 --- a/cmd/flux/get_helmrelease.go +++ b/cmd/flux/get_helmrelease.go @@ -25,7 +25,7 @@ import ( "golang.org/x/text/language" "k8s.io/apimachinery/pkg/runtime" - helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" + helmv2 "github.com/fluxcd/helm-controller/api/v2beta2" ) var getHelmReleaseCmd = &cobra.Command{ diff --git a/cmd/flux/helmrelease.go b/cmd/flux/helmrelease.go index 81deb149..d01d04c3 100644 --- a/cmd/flux/helmrelease.go +++ b/cmd/flux/helmrelease.go @@ -19,7 +19,7 @@ package main import ( "sigs.k8s.io/controller-runtime/pkg/client" - helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" + helmv2 "github.com/fluxcd/helm-controller/api/v2beta2" ) // helmv2.HelmRelease diff --git a/cmd/flux/reconcile.go b/cmd/flux/reconcile.go index fc6334b6..b2e74105 100644 --- a/cmd/flux/reconcile.go +++ b/cmd/flux/reconcile.go @@ -31,7 +31,7 @@ import ( "k8s.io/client-go/util/retry" "sigs.k8s.io/controller-runtime/pkg/client" - helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" + helmv2 "github.com/fluxcd/helm-controller/api/v2beta2" "github.com/fluxcd/pkg/apis/meta" "github.com/fluxcd/flux2/v2/internal/utils" @@ -179,10 +179,10 @@ func requestReconciliation(ctx context.Context, kubeClient client.Client, // HelmRelease specific annotations to force or reset a release. if gvk.Kind == helmv2.HelmReleaseKind { if rhrArgs.syncForce { - annotations["reconcile.fluxcd.io/forceAt"] = ts + annotations[helmv2.ForceRequestAnnotation] = ts } if rhrArgs.syncReset { - annotations["reconcile.fluxcd.io/resetAt"] = ts + annotations[helmv2.ResetRequestAnnotation] = ts } } diff --git a/cmd/flux/reconcile_helmrelease.go b/cmd/flux/reconcile_helmrelease.go index 145b6dc9..14414acd 100644 --- a/cmd/flux/reconcile_helmrelease.go +++ b/cmd/flux/reconcile_helmrelease.go @@ -22,7 +22,7 @@ import ( "github.com/spf13/cobra" "k8s.io/apimachinery/pkg/types" - helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" + helmv2 "github.com/fluxcd/helm-controller/api/v2beta2" sourcev1b2 "github.com/fluxcd/source-controller/api/v1beta2" ) diff --git a/cmd/flux/resume_helmrelease.go b/cmd/flux/resume_helmrelease.go index b058d273..5c1bc15d 100644 --- a/cmd/flux/resume_helmrelease.go +++ b/cmd/flux/resume_helmrelease.go @@ -21,7 +21,7 @@ import ( "github.com/spf13/cobra" - helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" + helmv2 "github.com/fluxcd/helm-controller/api/v2beta2" ) var resumeHrCmd = &cobra.Command{ diff --git a/cmd/flux/stats.go b/cmd/flux/stats.go index 196d68d6..0181ffab 100644 --- a/cmd/flux/stats.go +++ b/cmd/flux/stats.go @@ -27,7 +27,7 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" "github.com/fluxcd/cli-utils/pkg/kstatus/status" - helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" + helmv2 "github.com/fluxcd/helm-controller/api/v2beta2" autov1 "github.com/fluxcd/image-automation-controller/api/v1beta1" imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta2" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" diff --git a/cmd/flux/suspend_helmrelease.go b/cmd/flux/suspend_helmrelease.go index 5872c8b4..b4c3eb8f 100644 --- a/cmd/flux/suspend_helmrelease.go +++ b/cmd/flux/suspend_helmrelease.go @@ -19,7 +19,7 @@ package main import ( "github.com/spf13/cobra" - helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" + helmv2 "github.com/fluxcd/helm-controller/api/v2beta2" ) var suspendHrCmd = &cobra.Command{ diff --git a/cmd/flux/trace.go b/cmd/flux/trace.go index d85f10ea..6a3f7fc3 100644 --- a/cmd/flux/trace.go +++ b/cmd/flux/trace.go @@ -33,13 +33,14 @@ import ( "k8s.io/cli-runtime/pkg/resource" "sigs.k8s.io/controller-runtime/pkg/client" - "github.com/fluxcd/flux2/v2/internal/utils" - helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" + helmv2 "github.com/fluxcd/helm-controller/api/v2beta2" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" fluxmeta "github.com/fluxcd/pkg/apis/meta" "github.com/fluxcd/pkg/oci" sourcev1 "github.com/fluxcd/source-controller/api/v1" sourcev1b2 "github.com/fluxcd/source-controller/api/v1beta2" + + "github.com/fluxcd/flux2/v2/internal/utils" ) var traceCmd = &cobra.Command{ diff --git a/cmd/flux/tree_kustomization.go b/cmd/flux/tree_kustomization.go index ec4efd67..57d2ff25 100644 --- a/cmd/flux/tree_kustomization.go +++ b/cmd/flux/tree_kustomization.go @@ -35,7 +35,7 @@ import ( "sigs.k8s.io/yaml" "github.com/fluxcd/cli-utils/pkg/object" - helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" + helmv2 "github.com/fluxcd/helm-controller/api/v2beta2" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" "github.com/fluxcd/pkg/ssa" diff --git a/internal/flags/crds.go b/internal/flags/crds.go index aa7eee61..0c1e4fa6 100644 --- a/internal/flags/crds.go +++ b/internal/flags/crds.go @@ -20,7 +20,7 @@ import ( "fmt" "strings" - helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" + helmv2 "github.com/fluxcd/helm-controller/api/v2beta2" "github.com/fluxcd/flux2/v2/internal/utils" ) diff --git a/internal/utils/utils.go b/internal/utils/utils.go index e820372a..26d77ef8 100644 --- a/internal/utils/utils.go +++ b/internal/utils/utils.go @@ -41,7 +41,7 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/yaml" - helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" + helmv2 "github.com/fluxcd/helm-controller/api/v2beta2" imageautov1 "github.com/fluxcd/image-automation-controller/api/v1beta1" imagereflectv1 "github.com/fluxcd/image-reflector-controller/api/v1beta2" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" diff --git a/pkg/uninstall/uninstall.go b/pkg/uninstall/uninstall.go index 92d7ffc2..220666ff 100644 --- a/pkg/uninstall/uninstall.go +++ b/pkg/uninstall/uninstall.go @@ -28,9 +28,7 @@ import ( "k8s.io/apimachinery/pkg/util/errors" "sigs.k8s.io/controller-runtime/pkg/client" - "github.com/fluxcd/flux2/v2/pkg/log" - "github.com/fluxcd/flux2/v2/pkg/manifestgen" - helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" + helmv2 "github.com/fluxcd/helm-controller/api/v2beta2" autov1 "github.com/fluxcd/image-automation-controller/api/v1beta1" imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta2" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" @@ -38,6 +36,9 @@ import ( notificationv1b3 "github.com/fluxcd/notification-controller/api/v1beta3" sourcev1 "github.com/fluxcd/source-controller/api/v1" sourcev1b2 "github.com/fluxcd/source-controller/api/v1beta2" + + "github.com/fluxcd/flux2/v2/pkg/log" + "github.com/fluxcd/flux2/v2/pkg/manifestgen" ) // Components removes all Kubernetes components that are part of Flux excluding the CRDs and namespace. diff --git a/tests/azure/go.mod b/tests/azure/go.mod index d61a0fbd..bbf5e59f 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -8,16 +8,16 @@ replace gopkg.in/yaml.v3 => gopkg.in/yaml.v3 v3.0.1 require ( github.com/Azure/azure-event-hubs-go/v3 v3.6.1 github.com/chainguard-dev/git-urls v1.0.2 - github.com/fluxcd/helm-controller/api v0.36.2 - github.com/fluxcd/image-automation-controller/api v0.36.1 - github.com/fluxcd/image-reflector-controller/api v0.31.0 - github.com/fluxcd/kustomize-controller/api v1.1.1 - github.com/fluxcd/notification-controller/api v1.2.1 + github.com/fluxcd/helm-controller/api v0.37.0 + github.com/fluxcd/image-automation-controller/api v0.37.0 + github.com/fluxcd/image-reflector-controller/api v0.31.1 + github.com/fluxcd/kustomize-controller/api v1.2.0 + github.com/fluxcd/notification-controller/api v1.2.2 github.com/fluxcd/pkg/apis/event v0.6.0 github.com/fluxcd/pkg/apis/meta v1.2.0 github.com/fluxcd/pkg/git v0.16.0 github.com/fluxcd/pkg/git/gogit v0.16.1 - github.com/fluxcd/source-controller/api v1.2.1 + github.com/fluxcd/source-controller/api v1.2.2 github.com/go-git/go-git/v5 v5.11.0 github.com/hashicorp/hc-install v0.5.2 github.com/hashicorp/terraform-exec v0.18.1 @@ -56,7 +56,7 @@ require ( github.com/emirpasic/gods v1.18.1 // indirect github.com/evanphx/json-patch/v5 v5.7.0 // indirect github.com/fluxcd/pkg/apis/acl v0.1.0 // indirect - github.com/fluxcd/pkg/apis/kustomize v1.1.1 // indirect + github.com/fluxcd/pkg/apis/kustomize v1.2.0 // indirect github.com/fluxcd/pkg/ssh v0.10.0 // indirect github.com/fluxcd/pkg/version v0.2.2 // indirect github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect @@ -115,7 +115,7 @@ require ( gopkg.in/yaml.v3 v3.0.1 // indirect k8s.io/apiextensions-apiserver v0.28.4 // indirect k8s.io/kube-openapi v0.0.0-20231113174909-778a5567bc1e // indirect - k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect + k8s.io/utils v0.0.0-20231127182322-b307cd553661 // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect sigs.k8s.io/yaml v1.4.0 // indirect diff --git a/tests/azure/go.sum b/tests/azure/go.sum index 316215fe..c0d9b588 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -67,22 +67,22 @@ github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FM github.com/evanphx/json-patch/v5 v5.7.0 h1:nJqP7uwL84RJInrohHfW0Fx3awjbm8qZeFv0nW9SYGc= github.com/evanphx/json-patch/v5 v5.7.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ= github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= -github.com/fluxcd/helm-controller/api v0.36.2 h1:9JaTc91yocG1oQkM/GMfpZ/nGPpliRjZBNwyAsW5584= -github.com/fluxcd/helm-controller/api v0.36.2/go.mod h1:zkcRy3PxG0NoxSY5SjiSA5tWOGa6spIbWsChQY8FXqM= -github.com/fluxcd/image-automation-controller/api v0.36.1 h1:Knd4SSm/bJ0iqvYcQq87uDaT/mW9poM1jOvHpJ/4tzk= -github.com/fluxcd/image-automation-controller/api v0.36.1/go.mod h1:IsjdBtgm71KHRGDTZZZiGYdWGoJ5VjenE9F4ueADM/o= -github.com/fluxcd/image-reflector-controller/api v0.31.0 h1:9t5zj7ufo9/d57gpcZsD6YAIxFz0vtLH4jXCj379srE= -github.com/fluxcd/image-reflector-controller/api v0.31.0/go.mod h1:/EcjOa/EYi8sSBHcGrBkLjMjNNfC7xXMxqG9phBORCo= -github.com/fluxcd/kustomize-controller/api v1.1.1 h1:pQcAzvBC3cFGOCgk0zrcsO1Kjtal1tvd6rHXkyp2R78= -github.com/fluxcd/kustomize-controller/api v1.1.1/go.mod h1:FHJTX6c0+CznUNGMol5+Uc4lQsYRxWgpmIRK/xDCghA= -github.com/fluxcd/notification-controller/api v1.2.1 h1:yPQZ7ppYvazxl/Vsespbx9VlVyopH7p8pKGzZTNxI0c= -github.com/fluxcd/notification-controller/api v1.2.1/go.mod h1:1sWTpAXkga5zkXOgFoR+NIJgHNclBcfAHUJ/rMAjnYY= +github.com/fluxcd/helm-controller/api v0.37.0 h1:B14z4nJXmLhtEwQn681bIDy3V1o7USI3X22BuIIsrOw= +github.com/fluxcd/helm-controller/api v0.37.0/go.mod h1:BuXZhAX9blQviil6yUN5zNM4RB753yhyBTJXxXff7Mo= +github.com/fluxcd/image-automation-controller/api v0.37.0 h1:0L8kzX3zaYfg4wQ2Mx3G56atLMNeDGjy5qMGP4tDKRs= +github.com/fluxcd/image-automation-controller/api v0.37.0/go.mod h1:B2EbmiY69mE2bGOENPNUXr6klwrVe7FwVoB2iE1q08E= +github.com/fluxcd/image-reflector-controller/api v0.31.1 h1:nc44G0JjLgSvqglJSiXQJZcrRw+eY01j7fHRUDB3FMw= +github.com/fluxcd/image-reflector-controller/api v0.31.1/go.mod h1:KopMbC92Cw2ypZZeMytzTLr3EfOj2hoL6MizrdpBDhc= +github.com/fluxcd/kustomize-controller/api v1.2.0 h1:kXlZUl5QztIIrqceZLBYF+f3am41B47uXgVw8WlnuMY= +github.com/fluxcd/kustomize-controller/api v1.2.0/go.mod h1:0Kgc4uYnr5jCm4H8JwArkR0v4WTmXeX/9KgoDbxluVc= +github.com/fluxcd/notification-controller/api v1.2.2 h1:BUuVkYxrXzpsdCGh76Tiu//6dffLFo10KmX7MaVeZ64= +github.com/fluxcd/notification-controller/api v1.2.2/go.mod h1:A0VkH3mswQAeGKsmzq81jAUN+zNJt9SPXjwe8mvnnaw= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= github.com/fluxcd/pkg/apis/event v0.6.0 h1:AUaeee1CGWb65BLqVximHXG8Gcu6vWuYONIq6tVpjgo= github.com/fluxcd/pkg/apis/event v0.6.0/go.mod h1:OEzWcX/oPbMmkCvC9QGoK27JXFvUZgBhLD+zgxZe47A= -github.com/fluxcd/pkg/apis/kustomize v1.1.1 h1:MSGn4z0R9PptmoPFHnx2nEZ8Jtl1sKfw0cuDQY2HYwM= -github.com/fluxcd/pkg/apis/kustomize v1.1.1/go.mod h1:0pCu0ecIY+ZM0iE/hOHYwCMZ3b0SpBrjJ1SH3FFyYdE= +github.com/fluxcd/pkg/apis/kustomize v1.2.0 h1:vkVs+OumxaWso0jNCqdgFFfMHdh+qtZhykTkjl7OgmA= +github.com/fluxcd/pkg/apis/kustomize v1.2.0/go.mod h1:VF7tR/WuVFeum+HaMTHwp+eCtsHiiQlY6ihgqtAnW/M= github.com/fluxcd/pkg/apis/meta v1.2.0 h1:O766PzGAdMdQKybSflGL8oV0+GgCNIkdsxfalRyzeO8= github.com/fluxcd/pkg/apis/meta v1.2.0/go.mod h1:fU/Az9AoVyIxC0oI4ihG0NVMNnvrcCzdEym3wxjIQsc= github.com/fluxcd/pkg/git v0.16.0 h1:xgfMpgsVaxGLechKNaSUif9jnt2Ji/HkwIwxXeDoADk= @@ -94,8 +94,8 @@ github.com/fluxcd/pkg/ssh v0.10.0 h1:JFz0u/CPEf3hXvmrEvUvXsc70eKh8xphqjXxZuSby9g github.com/fluxcd/pkg/ssh v0.10.0/go.mod h1:1lFTj3MhU9xQuaJ5PJJoh/FyRYzK54ll9NY/s2KqOZM= github.com/fluxcd/pkg/version v0.2.2 h1:ZpVXECeLA5hIQMft11iLp6gN3cKcz6UNuVTQPw/bRdI= github.com/fluxcd/pkg/version v0.2.2/go.mod h1:NGnh/no8S6PyfCDxRFrPY3T5BUnqP48MxfxNRU0z8C0= -github.com/fluxcd/source-controller/api v1.2.1 h1:zWRfwMB/BkV0A/duZQwHEcrE/abWJQt7DUgYTzn4IzM= -github.com/fluxcd/source-controller/api v1.2.1/go.mod h1:n+PMCJXl/AYCjWHn5N/MUuoIFKfDg4kCDviFIa7fDvI= +github.com/fluxcd/source-controller/api v1.2.2 h1:OUivb1UHDmY8+hlxjRx3k8i1w3jMSytdOYRMfmeeZhY= +github.com/fluxcd/source-controller/api v1.2.2/go.mod h1:5gaIVVH7hgb8p3HKFp8P6hGmZEC8fKSt4EcrG3g5vZI= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY= @@ -376,8 +376,8 @@ k8s.io/klog/v2 v2.110.1 h1:U/Af64HJf7FcwMcXyKm2RPM22WZzyR7OSpYj5tg3cL0= k8s.io/klog/v2 v2.110.1/go.mod h1:YGtd1984u+GgbuZ7e08/yBuAfKLSO0+uR1Fhi6ExXjo= k8s.io/kube-openapi v0.0.0-20231113174909-778a5567bc1e h1:snPmy96t93RredGRjKfMFt+gvxuVAncqSAyBveJtr4Q= k8s.io/kube-openapi v0.0.0-20231113174909-778a5567bc1e/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA= -k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSnlTLKgpAAttJvpI= -k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +k8s.io/utils v0.0.0-20231127182322-b307cd553661 h1:FepOBzJ0GXm8t0su67ln2wAZjbQ6RxQGZDnzuLcrUTI= +k8s.io/utils v0.0.0-20231127182322-b307cd553661/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= sigs.k8s.io/controller-runtime v0.16.3 h1:2TuvuokmfXvDUamSx1SuAOO3eTyye+47mJCigwG62c4= sigs.k8s.io/controller-runtime v0.16.3/go.mod h1:j7bialYoSn142nv9sCOJmQgDXQXxnroFU4VnX/brVJ0= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= diff --git a/tests/azure/util_test.go b/tests/azure/util_test.go index 836ea3a2..ededf2d9 100644 --- a/tests/azure/util_test.go +++ b/tests/azure/util_test.go @@ -35,7 +35,7 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" - helmv2beta1 "github.com/fluxcd/helm-controller/api/v2beta1" + helmv2beta1 "github.com/fluxcd/helm-controller/api/v2beta2" automationv1beta1 "github.com/fluxcd/image-automation-controller/api/v1beta1" reflectorv1beta2 "github.com/fluxcd/image-reflector-controller/api/v1beta2" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" diff --git a/tests/integration/go.mod b/tests/integration/go.mod index 711e213b..c7d1600f 100644 --- a/tests/integration/go.mod +++ b/tests/integration/go.mod @@ -6,11 +6,11 @@ require ( cloud.google.com/go/pubsub v1.31.0 github.com/Azure/azure-event-hubs-go/v3 v3.6.0 github.com/chainguard-dev/git-urls v1.0.2 - github.com/fluxcd/helm-controller/api v0.36.2 - github.com/fluxcd/image-automation-controller/api v0.36.1 - github.com/fluxcd/image-reflector-controller/api v0.31.0 - github.com/fluxcd/kustomize-controller/api v1.1.1 - github.com/fluxcd/notification-controller/api v1.2.1 + github.com/fluxcd/helm-controller/api v0.37.0 + github.com/fluxcd/image-automation-controller/api v0.37.0 + github.com/fluxcd/image-reflector-controller/api v0.31.1 + github.com/fluxcd/kustomize-controller/api v1.2.0 + github.com/fluxcd/notification-controller/api v1.2.2 github.com/fluxcd/pkg/apis/event v0.6.0 github.com/fluxcd/pkg/apis/meta v1.2.0 github.com/fluxcd/pkg/git v0.16.0 @@ -64,7 +64,7 @@ require ( github.com/emirpasic/gods v1.18.1 // indirect github.com/evanphx/json-patch/v5 v5.7.0 // indirect github.com/fluxcd/pkg/apis/acl v0.1.0 // indirect - github.com/fluxcd/pkg/apis/kustomize v1.1.1 // indirect + github.com/fluxcd/pkg/apis/kustomize v1.2.0 // indirect github.com/fluxcd/pkg/ssh v0.10.0 // indirect github.com/fluxcd/pkg/version v0.2.2 // indirect github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect diff --git a/tests/integration/go.sum b/tests/integration/go.sum index d83c779d..f353c203 100644 --- a/tests/integration/go.sum +++ b/tests/integration/go.sum @@ -122,22 +122,22 @@ github.com/evanphx/json-patch/v5 v5.7.0 h1:nJqP7uwL84RJInrohHfW0Fx3awjbm8qZeFv0n github.com/evanphx/json-patch/v5 v5.7.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= -github.com/fluxcd/helm-controller/api v0.36.2 h1:9JaTc91yocG1oQkM/GMfpZ/nGPpliRjZBNwyAsW5584= -github.com/fluxcd/helm-controller/api v0.36.2/go.mod h1:zkcRy3PxG0NoxSY5SjiSA5tWOGa6spIbWsChQY8FXqM= -github.com/fluxcd/image-automation-controller/api v0.36.1 h1:Knd4SSm/bJ0iqvYcQq87uDaT/mW9poM1jOvHpJ/4tzk= -github.com/fluxcd/image-automation-controller/api v0.36.1/go.mod h1:IsjdBtgm71KHRGDTZZZiGYdWGoJ5VjenE9F4ueADM/o= -github.com/fluxcd/image-reflector-controller/api v0.31.0 h1:9t5zj7ufo9/d57gpcZsD6YAIxFz0vtLH4jXCj379srE= -github.com/fluxcd/image-reflector-controller/api v0.31.0/go.mod h1:/EcjOa/EYi8sSBHcGrBkLjMjNNfC7xXMxqG9phBORCo= -github.com/fluxcd/kustomize-controller/api v1.1.1 h1:pQcAzvBC3cFGOCgk0zrcsO1Kjtal1tvd6rHXkyp2R78= -github.com/fluxcd/kustomize-controller/api v1.1.1/go.mod h1:FHJTX6c0+CznUNGMol5+Uc4lQsYRxWgpmIRK/xDCghA= -github.com/fluxcd/notification-controller/api v1.2.1 h1:yPQZ7ppYvazxl/Vsespbx9VlVyopH7p8pKGzZTNxI0c= -github.com/fluxcd/notification-controller/api v1.2.1/go.mod h1:1sWTpAXkga5zkXOgFoR+NIJgHNclBcfAHUJ/rMAjnYY= +github.com/fluxcd/helm-controller/api v0.37.0 h1:B14z4nJXmLhtEwQn681bIDy3V1o7USI3X22BuIIsrOw= +github.com/fluxcd/helm-controller/api v0.37.0/go.mod h1:BuXZhAX9blQviil6yUN5zNM4RB753yhyBTJXxXff7Mo= +github.com/fluxcd/image-automation-controller/api v0.37.0 h1:0L8kzX3zaYfg4wQ2Mx3G56atLMNeDGjy5qMGP4tDKRs= +github.com/fluxcd/image-automation-controller/api v0.37.0/go.mod h1:B2EbmiY69mE2bGOENPNUXr6klwrVe7FwVoB2iE1q08E= +github.com/fluxcd/image-reflector-controller/api v0.31.1 h1:nc44G0JjLgSvqglJSiXQJZcrRw+eY01j7fHRUDB3FMw= +github.com/fluxcd/image-reflector-controller/api v0.31.1/go.mod h1:KopMbC92Cw2ypZZeMytzTLr3EfOj2hoL6MizrdpBDhc= +github.com/fluxcd/kustomize-controller/api v1.2.0 h1:kXlZUl5QztIIrqceZLBYF+f3am41B47uXgVw8WlnuMY= +github.com/fluxcd/kustomize-controller/api v1.2.0/go.mod h1:0Kgc4uYnr5jCm4H8JwArkR0v4WTmXeX/9KgoDbxluVc= +github.com/fluxcd/notification-controller/api v1.2.2 h1:BUuVkYxrXzpsdCGh76Tiu//6dffLFo10KmX7MaVeZ64= +github.com/fluxcd/notification-controller/api v1.2.2/go.mod h1:A0VkH3mswQAeGKsmzq81jAUN+zNJt9SPXjwe8mvnnaw= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= github.com/fluxcd/pkg/apis/event v0.6.0 h1:AUaeee1CGWb65BLqVximHXG8Gcu6vWuYONIq6tVpjgo= github.com/fluxcd/pkg/apis/event v0.6.0/go.mod h1:OEzWcX/oPbMmkCvC9QGoK27JXFvUZgBhLD+zgxZe47A= -github.com/fluxcd/pkg/apis/kustomize v1.1.1 h1:MSGn4z0R9PptmoPFHnx2nEZ8Jtl1sKfw0cuDQY2HYwM= -github.com/fluxcd/pkg/apis/kustomize v1.1.1/go.mod h1:0pCu0ecIY+ZM0iE/hOHYwCMZ3b0SpBrjJ1SH3FFyYdE= +github.com/fluxcd/pkg/apis/kustomize v1.2.0 h1:vkVs+OumxaWso0jNCqdgFFfMHdh+qtZhykTkjl7OgmA= +github.com/fluxcd/pkg/apis/kustomize v1.2.0/go.mod h1:VF7tR/WuVFeum+HaMTHwp+eCtsHiiQlY6ihgqtAnW/M= github.com/fluxcd/pkg/apis/meta v1.2.0 h1:O766PzGAdMdQKybSflGL8oV0+GgCNIkdsxfalRyzeO8= github.com/fluxcd/pkg/apis/meta v1.2.0/go.mod h1:fU/Az9AoVyIxC0oI4ihG0NVMNnvrcCzdEym3wxjIQsc= github.com/fluxcd/pkg/git v0.16.0 h1:xgfMpgsVaxGLechKNaSUif9jnt2Ji/HkwIwxXeDoADk= diff --git a/tests/integration/oci_test.go b/tests/integration/oci_test.go index 49788364..80d89af2 100644 --- a/tests/integration/oci_test.go +++ b/tests/integration/oci_test.go @@ -27,7 +27,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" - helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" + helmv2 "github.com/fluxcd/helm-controller/api/v2beta2" sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" ) diff --git a/tests/integration/suite_test.go b/tests/integration/suite_test.go index 87c0fdb0..0e2b2186 100644 --- a/tests/integration/suite_test.go +++ b/tests/integration/suite_test.go @@ -30,7 +30,7 @@ import ( utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/client-go/kubernetes/scheme" - helmv2beta1 "github.com/fluxcd/helm-controller/api/v2beta1" + helmv2beta1 "github.com/fluxcd/helm-controller/api/v2beta2" automationv1beta1 "github.com/fluxcd/image-automation-controller/api/v1beta1" reflectorv1beta2 "github.com/fluxcd/image-reflector-controller/api/v1beta2" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" From afcf12194d786d2c3705ec80a4614cfd7acbfaea Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Tue, 12 Dec 2023 11:25:12 +0200 Subject: [PATCH 708/818] Adapt tree command to `HelmRelease` v2beta2 Signed-off-by: Stefan Prodan --- cmd/flux/tree_kustomization.go | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/cmd/flux/tree_kustomization.go b/cmd/flux/tree_kustomization.go index 57d2ff25..6f1ee560 100644 --- a/cmd/flux/tree_kustomization.go +++ b/cmd/flux/tree_kustomization.go @@ -208,27 +208,16 @@ func getHelmReleaseInventory(ctx context.Context, objectKey client.ObjectKey, ku return nil, nil } - storageNamespace := hr.GetNamespace() - if hr.Spec.StorageNamespace != "" { - storageNamespace = hr.Spec.StorageNamespace - } - - storageName := hr.GetName() - if hr.Spec.ReleaseName != "" { - storageName = hr.Spec.ReleaseName - } else if hr.Spec.TargetNamespace != "" { - storageName = strings.Join([]string{hr.Spec.TargetNamespace, hr.Name}, "-") - } - - storageVersion := hr.Status.LastReleaseRevision - // skip release if it failed to install - if storageVersion < 1 { + storageNamespace := hr.Status.StorageNamespace + latest := hr.Status.History.Latest() + if len(storageNamespace) == 0 || latest == nil { + // Skip release if it has no current return nil, nil } storageKey := client.ObjectKey{ Namespace: storageNamespace, - Name: fmt.Sprintf("sh.helm.release.v1.%s.v%v", storageName, storageVersion), + Name: fmt.Sprintf("sh.helm.release.v1.%s.v%v", latest.Name, latest.Version), } storageSecret := &corev1.Secret{} From b4f5d121c81719984f9b1619ffcf441e40e87f7d Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Tue, 12 Dec 2023 11:40:16 +0200 Subject: [PATCH 709/818] Update tests to `HelmRelease` v2beta2 Signed-off-by: Stefan Prodan --- cmd/flux/events_test.go | 2 +- cmd/flux/testdata/export/helm-release.yaml | 2 +- cmd/flux/testdata/export/objects.yaml | 2 +- cmd/flux/testdata/trace/deployment.yaml | 2 +- cmd/flux/testdata/trace/helmrelease-oci.yaml | 2 +- cmd/flux/testdata/trace/helmrelease.yaml | 2 +- cmd/flux/trace.go | 2 +- cmd/flux/trace_test.go | 4 ++-- 8 files changed, 9 insertions(+), 9 deletions(-) diff --git a/cmd/flux/events_test.go b/cmd/flux/events_test.go index 0c208d1e..53fab161 100644 --- a/cmd/flux/events_test.go +++ b/cmd/flux/events_test.go @@ -78,7 +78,7 @@ spec: timeout: 1m0s url: ssh://git@github.com/example/repo --- -apiVersion: helm.toolkit.fluxcd.io/v2beta1 +apiVersion: helm.toolkit.fluxcd.io/v2beta2 kind: HelmRelease metadata: name: podinfo diff --git a/cmd/flux/testdata/export/helm-release.yaml b/cmd/flux/testdata/export/helm-release.yaml index b6c3b126..c7aceaf1 100644 --- a/cmd/flux/testdata/export/helm-release.yaml +++ b/cmd/flux/testdata/export/helm-release.yaml @@ -1,5 +1,5 @@ --- -apiVersion: helm.toolkit.fluxcd.io/v2beta1 +apiVersion: helm.toolkit.fluxcd.io/v2beta2 kind: HelmRelease metadata: name: flux-system diff --git a/cmd/flux/testdata/export/objects.yaml b/cmd/flux/testdata/export/objects.yaml index 8ba59969..ee5c228c 100644 --- a/cmd/flux/testdata/export/objects.yaml +++ b/cmd/flux/testdata/export/objects.yaml @@ -124,7 +124,7 @@ spec: timeout: 1m0s url: https://stefanprodan.github.io/podinfo --- -apiVersion: helm.toolkit.fluxcd.io/v2beta1 +apiVersion: helm.toolkit.fluxcd.io/v2beta2 kind: HelmRelease metadata: name: flux-system diff --git a/cmd/flux/testdata/trace/deployment.yaml b/cmd/flux/testdata/trace/deployment.yaml index 01580dfe..0d0f8f79 100644 --- a/cmd/flux/testdata/trace/deployment.yaml +++ b/cmd/flux/testdata/trace/deployment.yaml @@ -34,7 +34,7 @@ spec: command: [ "echo hello world" ] image: busybox --- -apiVersion: helm.toolkit.fluxcd.io/v2beta1 +apiVersion: helm.toolkit.fluxcd.io/v2beta2 kind: HelmRelease metadata: labels: diff --git a/cmd/flux/testdata/trace/helmrelease-oci.yaml b/cmd/flux/testdata/trace/helmrelease-oci.yaml index da9d1d47..0fc7b6c4 100644 --- a/cmd/flux/testdata/trace/helmrelease-oci.yaml +++ b/cmd/flux/testdata/trace/helmrelease-oci.yaml @@ -9,7 +9,7 @@ kind: Namespace metadata: name: {{ .ns }} --- -apiVersion: helm.toolkit.fluxcd.io/v2beta1 +apiVersion: helm.toolkit.fluxcd.io/v2beta2 kind: HelmRelease metadata: labels: diff --git a/cmd/flux/testdata/trace/helmrelease.yaml b/cmd/flux/testdata/trace/helmrelease.yaml index 9c626f4a..8c029cde 100644 --- a/cmd/flux/testdata/trace/helmrelease.yaml +++ b/cmd/flux/testdata/trace/helmrelease.yaml @@ -9,7 +9,7 @@ kind: Namespace metadata: name: {{ .ns }} --- -apiVersion: helm.toolkit.fluxcd.io/v2beta1 +apiVersion: helm.toolkit.fluxcd.io/v2beta2 kind: HelmRelease metadata: labels: diff --git a/cmd/flux/trace.go b/cmd/flux/trace.go index 6a3f7fc3..bab5a457 100644 --- a/cmd/flux/trace.go +++ b/cmd/flux/trace.go @@ -64,7 +64,7 @@ You can also trace multiple objects with different resource kinds using Date: Tue, 12 Dec 2023 11:55:35 +0200 Subject: [PATCH 710/818] Use `IsObjectNamespaced` from controller-runtime Signed-off-by: Stefan Prodan --- cmd/flux/tree_kustomization.go | 9 ++--- internal/utils/objectutil.go | 63 ---------------------------------- 2 files changed, 3 insertions(+), 69 deletions(-) delete mode 100644 internal/utils/objectutil.go diff --git a/cmd/flux/tree_kustomization.go b/cmd/flux/tree_kustomization.go index 6f1ee560..e345f0f2 100644 --- a/cmd/flux/tree_kustomization.go +++ b/cmd/flux/tree_kustomization.go @@ -32,6 +32,7 @@ import ( apierrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/runtime/schema" "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/client/apiutil" "sigs.k8s.io/yaml" "github.com/fluxcd/cli-utils/pkg/object" @@ -268,12 +269,8 @@ func getHelmReleaseInventory(ctx context.Context, objectKey client.ObjectKey, ku // set the namespace on namespaced objects for _, obj := range objects { if obj.GetNamespace() == "" { - if isNamespaced, _ := utils.IsAPINamespaced(obj, kubeClient.Scheme(), kubeClient.RESTMapper()); isNamespaced { - if hr.Spec.TargetNamespace != "" { - obj.SetNamespace(hr.Spec.TargetNamespace) - } else { - obj.SetNamespace(hr.GetNamespace()) - } + if isNamespaced, _ := apiutil.IsObjectNamespaced(obj, kubeClient.Scheme(), kubeClient.RESTMapper()); isNamespaced { + obj.SetNamespace(latest.Namespace) } } } diff --git a/internal/utils/objectutil.go b/internal/utils/objectutil.go deleted file mode 100644 index 35b381bc..00000000 --- a/internal/utils/objectutil.go +++ /dev/null @@ -1,63 +0,0 @@ -/* -Copyright 2023 The Flux authors -Copyright 2018 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// TODO: Remove this when -// https://github.com/kubernetes-sigs/controller-runtime/blob/c783d2527a7da76332a2d8d563a6ca0b80c12122/pkg/client/apiutil/apimachinery.go#L76-L104 -// is included in a semver release. - -package utils - -import ( - "errors" - "fmt" - - apimeta "k8s.io/apimachinery/pkg/api/meta" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" - "sigs.k8s.io/controller-runtime/pkg/client/apiutil" -) - -// IsAPINamespaced returns true if the object is namespace scoped. -// For unstructured objects the gvk is found from the object itself. -func IsAPINamespaced(obj runtime.Object, scheme *runtime.Scheme, restmapper apimeta.RESTMapper) (bool, error) { - gvk, err := apiutil.GVKForObject(obj, scheme) - if err != nil { - return false, err - } - - return IsAPINamespacedWithGVK(gvk, scheme, restmapper) -} - -// IsAPINamespacedWithGVK returns true if the object having the provided -// GVK is namespace scoped. -func IsAPINamespacedWithGVK(gk schema.GroupVersionKind, scheme *runtime.Scheme, restmapper apimeta.RESTMapper) (bool, error) { - restmapping, err := restmapper.RESTMapping(schema.GroupKind{Group: gk.Group, Kind: gk.Kind}) - if err != nil { - return false, fmt.Errorf("failed to get restmapping: %w", err) - } - - scope := restmapping.Scope.Name() - - if scope == "" { - return false, errors.New("scope cannot be identified, empty scope returned") - } - - if scope != apimeta.RESTScopeNameRoot { - return true, nil - } - return false, nil -} From 04cc1278fbfe4bbaa53f2d44eb267f9104c39651 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Tue, 12 Dec 2023 12:27:32 +0200 Subject: [PATCH 711/818] Update alpine and kubectl in flux-cli image Signed-off-by: Stefan Prodan --- Dockerfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 0a4bcbf2..65feaa66 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,15 +1,15 @@ -FROM alpine:3.18 as builder +FROM alpine:3.19 as builder RUN apk add --no-cache ca-certificates curl ARG ARCH=linux/amd64 -ARG KUBECTL_VER=1.27.3 +ARG KUBECTL_VER=1.28.4 RUN curl -sL https://storage.googleapis.com/kubernetes-release/release/v${KUBECTL_VER}/bin/${ARCH}/kubectl \ -o /usr/local/bin/kubectl && chmod +x /usr/local/bin/kubectl && \ kubectl version --client=true -FROM alpine:3.18 as flux-cli +FROM alpine:3.19 as flux-cli RUN apk add --no-cache ca-certificates From cdcf332491b2453439d68f7089ccbb8fed40c174 Mon Sep 17 00:00:00 2001 From: Joel Bennett Date: Wed, 11 Oct 2023 17:27:49 -0400 Subject: [PATCH 712/818] Correct "sync" to "component" in log lines Signed-off-by: Joel Bennett --- pkg/bootstrap/bootstrap_plain_git.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/bootstrap/bootstrap_plain_git.go b/pkg/bootstrap/bootstrap_plain_git.go index fbba4e69..51a9d2dd 100644 --- a/pkg/bootstrap/bootstrap_plain_git.go +++ b/pkg/bootstrap/bootstrap_plain_git.go @@ -174,11 +174,11 @@ func (b *PlainGitBootstrapper) ReconcileComponents(ctx context.Context, manifest manifests.Path: strings.NewReader(manifests.Content), }), repository.WithSigner(signer)) if err != nil && err != git.ErrNoStagedFiles { - return fmt.Errorf("failed to commit sync manifests: %w", err) + return fmt.Errorf("failed to commit component manifests: %w", err) } if err == nil { - b.logger.Successf("committed sync manifests to %q (%q)", b.branch, commit) + b.logger.Successf("committed component manifests to %q (%q)", b.branch, commit) b.logger.Actionf("pushing component manifests to %q", b.url) if err = b.gitClient.Push(ctx, repository.PushConfig{}); err != nil { return fmt.Errorf("failed to push manifests: %w", err) From 4cb756bfb035e621aaa79921a59a142b3348941c Mon Sep 17 00:00:00 2001 From: Soule BA Date: Tue, 12 Dec 2023 10:13:31 +0100 Subject: [PATCH 713/818] updating go-git-providers to v0.19.2 Signed-off-by: Soule BA --- go.mod | 8 ++++---- go.sum | 16 ++++++++-------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/go.mod b/go.mod index 83ab4988..10cac246 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/cyphar/filepath-securejoin v0.2.4 github.com/distribution/distribution/v3 v3.0.0-20230823142118-4f7424c8eb41 github.com/fluxcd/cli-utils v0.36.0-flux.2 - github.com/fluxcd/go-git-providers v0.19.1 + github.com/fluxcd/go-git-providers v0.19.2 github.com/fluxcd/helm-controller/api v0.37.0 github.com/fluxcd/image-automation-controller/api v0.37.0 github.com/fluxcd/image-reflector-controller/api v0.31.1 @@ -63,7 +63,7 @@ require ( ) require ( - code.gitea.io/sdk/gitea v0.16.0 // indirect + code.gitea.io/sdk/gitea v0.17.0 // indirect dario.cat/mergo v1.0.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.4.0 // indirect @@ -133,7 +133,7 @@ require ( github.com/gonvenience/wrap v1.1.2 // indirect github.com/google/btree v1.1.2 // indirect github.com/google/gnostic-models v0.6.8 // indirect - github.com/google/go-github/v55 v55.0.0 // indirect + github.com/google/go-github/v57 v57.0.0 // indirect github.com/google/go-querystring v1.1.0 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect @@ -191,7 +191,7 @@ require ( github.com/texttheater/golang-levenshtein v1.0.1 // indirect github.com/vbatts/tar-split v0.11.3 // indirect github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74 // indirect - github.com/xanzy/go-gitlab v0.93.1 // indirect + github.com/xanzy/go-gitlab v0.95.1 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect github.com/xlab/treeprint v1.2.0 // indirect go.starlark.net v0.0.0-20231121155337-90ade8b19d09 // indirect diff --git a/go.sum b/go.sum index a3671495..8d05b47c 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,5 @@ -code.gitea.io/sdk/gitea v0.16.0 h1:gAfssETO1Hv9QbE+/nhWu7EjoFQYKt6kPoyDytQgw00= -code.gitea.io/sdk/gitea v0.16.0/go.mod h1:ndkDk99BnfiUCCYEUhpNzi0lpmApXlwRFqClBlOlEBg= +code.gitea.io/sdk/gitea v0.17.0 h1:8JPBss4+Jf7AE1YcfyiGrngTXE8dFSG3si/bypsTH34= +code.gitea.io/sdk/gitea v0.17.0/go.mod h1:ndkDk99BnfiUCCYEUhpNzi0lpmApXlwRFqClBlOlEBg= dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= github.com/AdaLogics/go-fuzz-headers v0.0.0-20230106234847-43070de90fa1 h1:EKPd1INOIyr5hWOWhvpmQpY6tKjeG0hT1s3AMC/9fic= @@ -129,8 +129,8 @@ github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSw github.com/fluxcd/cli-utils v0.36.0-flux.2 h1:7nlXfAJ7iaDF34IdbyId+wBf7beL2qvzDBLmVBJSDVo= github.com/fluxcd/cli-utils v0.36.0-flux.2/go.mod h1:TQtgRf9OjQBzE5FJ9UDV6WNz9Po3pzAtk3NQmQEN5l8= github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= -github.com/fluxcd/go-git-providers v0.19.1 h1:LXRFpHdPCmO+Uegw2MvAU3KiEHn1PRV2c//ii/HhpeY= -github.com/fluxcd/go-git-providers v0.19.1/go.mod h1:eN0JpfkQqS/6yJ1I6DW3z1XLCC2JZK+55Ues+0Ur3Ds= +github.com/fluxcd/go-git-providers v0.19.2 h1:G/O0z4WUlgChV6o3YrZ1GP1ZgZSd8ZJWACIW0ICqxMo= +github.com/fluxcd/go-git-providers v0.19.2/go.mod h1:V44pmhFqoZ8heFJEBU1PS+OHTwLWOfoj0nKpFAqik6Y= github.com/fluxcd/helm-controller/api v0.37.0 h1:B14z4nJXmLhtEwQn681bIDy3V1o7USI3X22BuIIsrOw= github.com/fluxcd/helm-controller/api v0.37.0/go.mod h1:BuXZhAX9blQviil6yUN5zNM4RB753yhyBTJXxXff7Mo= github.com/fluxcd/image-automation-controller/api v0.37.0 h1:0L8kzX3zaYfg4wQ2Mx3G56atLMNeDGjy5qMGP4tDKRs= @@ -244,8 +244,8 @@ github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-containerregistry v0.17.0 h1:5p+zYs/R4VGHkhyvgWurWrpJ2hW4Vv9fQI+GzdcwXLk= github.com/google/go-containerregistry v0.17.0/go.mod h1:u0qB2l7mvtWVR5kNcbFIhFY1hLbf8eeGapA+vbFDCtQ= -github.com/google/go-github/v55 v55.0.0 h1:4pp/1tNMB9X/LuAhs5i0KQAE40NmiR/y6prLNb9x9cg= -github.com/google/go-github/v55 v55.0.0/go.mod h1:JLahOTA1DnXzhxEymmFF5PP2tSS9JVNj68mSZNDwskA= +github.com/google/go-github/v57 v57.0.0 h1:L+Y3UPTY8ALM8x+TV0lg+IEBI+upibemtBD8Q9u7zHs= +github.com/google/go-github/v57 v57.0.0/go.mod h1:s0omdnye0hvK/ecLvpsGfJMiRt85PimQh4oygmLIxHw= github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= @@ -451,8 +451,8 @@ github.com/vbatts/tar-split v0.11.3 h1:hLFqsOLQ1SsppQNTMpkpPXClLDfC2A3Zgy9OUU+RV github.com/vbatts/tar-split v0.11.3/go.mod h1:9QlHN18E+fEH7RdG+QAJJcuya3rqT7eXSTY7wGrAokY= github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74 h1:JwtAtbp7r/7QSyGz8mKUbYJBg2+6Cd7OjM8o/GNOcVo= github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74/go.mod h1:RmMWU37GKR2s6pgrIEB4ixgpVCt/cf7dnJv3fuH1J1c= -github.com/xanzy/go-gitlab v0.93.1 h1:f7J33cw/P9b/8paIOoH0F3H+TFrswvWHs6yUgoTp9LY= -github.com/xanzy/go-gitlab v0.93.1/go.mod h1:5ryv+MnpZStBH8I/77HuQBsMbBGANtVpLWC15qOjWAw= +github.com/xanzy/go-gitlab v0.95.1 h1:rQjcmX5Au2Lz9bc3QLTdtSK5ZHdTXLnmhz3CAB/G5So= +github.com/xanzy/go-gitlab v0.95.1/go.mod h1:ETg8tcj4OhrB84UEgeE8dSuV/0h4BBL1uOV/qK0vlyI= github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= github.com/xlab/treeprint v1.2.0 h1:HzHnuAF1plUN2zGlAFHbSQP2qJ0ZAD3XF5XD7OesXRQ= From c22d8f28f984583111292e044d6e521492b865b4 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Tue, 12 Dec 2023 16:09:54 +0200 Subject: [PATCH 714/818] Drop support for Kubernetes EOL versions Signed-off-by: Stefan Prodan --- .github/workflows/e2e-arm64.yaml | 2 +- cmd/flux/check.go | 2 +- cmd/flux/testdata/check/check_pre.golden | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/e2e-arm64.yaml b/.github/workflows/e2e-arm64.yaml index 93b81b12..17ea084e 100644 --- a/.github/workflows/e2e-arm64.yaml +++ b/.github/workflows/e2e-arm64.yaml @@ -17,7 +17,7 @@ jobs: matrix: # Keep this list up-to-date with https://endoflife.date/kubernetes # Check which versions are available on DockerHub with 'crane ls kindest/node' - KUBERNETES_VERSION: [ 1.25.11, 1.26.6, 1.27.3, 1.28.0 ] + KUBERNETES_VERSION: [ 1.26.6, 1.27.3, 1.28.0 ] fail-fast: false steps: - name: Checkout diff --git a/cmd/flux/check.go b/cmd/flux/check.go index 244f60de..99ecfd8c 100644 --- a/cmd/flux/check.go +++ b/cmd/flux/check.go @@ -59,7 +59,7 @@ type checkFlags struct { } var kubernetesConstraints = []string{ - ">=1.25.0-0", + ">=1.26.0-0", } var checkArgs checkFlags diff --git a/cmd/flux/testdata/check/check_pre.golden b/cmd/flux/testdata/check/check_pre.golden index 646909e1..9b097d1e 100644 --- a/cmd/flux/testdata/check/check_pre.golden +++ b/cmd/flux/testdata/check/check_pre.golden @@ -1,3 +1,3 @@ ► checking prerequisites -✔ Kubernetes {{ .serverVersion }} >=1.25.0-0 +✔ Kubernetes {{ .serverVersion }} >=1.26.0-0 ✔ prerequisites checks passed From 5ede32b3277e347a5a59e090f40673c8e57f84fb Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Tue, 12 Dec 2023 17:11:22 +0100 Subject: [PATCH 715/818] Add 2.2.x backport label Signed-off-by: Hidde Beydals --- .github/labels.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/labels.yaml b/.github/labels.yaml index ddaf3632..c3b4b2ac 100644 --- a/.github/labels.yaml +++ b/.github/labels.yaml @@ -50,3 +50,6 @@ - name: backport:release/v2.1.x description: To be backported to release/v2.1.x color: '#ffd700' +- name: backport:release/v2.2.x + description: To be backported to release/v2.2.x + color: '#ffd700' From bf6754e20c4b4fe178e8131cc4d59868ce534a8a Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Wed, 13 Dec 2023 13:10:37 +0100 Subject: [PATCH 716/818] Properly detect unsupported API errors This can happen when Custom Resource Definitions do not exist on the cluster. For example, because only a subset of the Flux controllers are installed on the cluster. Previously, the detection was based on a combination of error type and string matching. However, a more reliable (and maintained) `apimeta.IsNoMatchError` checker is available upstream. Making it less likely this suddenly stops to matching properly when Kubernetes changes things. Signed-off-by: Hidde Beydals --- cmd/flux/get.go | 5 +---- cmd/flux/get_all.go | 5 ++--- cmd/flux/get_source_all.go | 5 ++--- 3 files changed, 5 insertions(+), 10 deletions(-) diff --git a/cmd/flux/get.go b/cmd/flux/get.go index fe70006a..17766f38 100644 --- a/cmd/flux/get.go +++ b/cmd/flux/get.go @@ -18,7 +18,6 @@ package main import ( "context" - "errors" "fmt" "os" "strings" @@ -28,7 +27,6 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/watch" - "k8s.io/client-go/discovery" watchtools "k8s.io/client-go/tools/watch" "sigs.k8s.io/controller-runtime/pkg/client" @@ -178,8 +176,7 @@ func (get getCommand) run(cmd *cobra.Command, args []string) error { err = kubeClient.List(ctx, get.list.asClientList(), listOpts...) if err != nil { - var discErr *discovery.ErrGroupDiscoveryFailed - if getAll && (strings.Contains(err.Error(), "no matches for kind") || errors.As(err, &discErr)) { + if getAll && apimeta.IsNoMatchError(err) { return nil } return err diff --git a/cmd/flux/get_all.go b/cmd/flux/get_all.go index 79b8cd04..7a40466b 100644 --- a/cmd/flux/get_all.go +++ b/cmd/flux/get_all.go @@ -17,9 +17,8 @@ limitations under the License. package main import ( - "strings" - "github.com/spf13/cobra" + apimeta "k8s.io/apimachinery/pkg/api/meta" helmv2 "github.com/fluxcd/helm-controller/api/v2beta2" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" @@ -87,7 +86,7 @@ var getAllCmd = &cobra.Command{ } func logError(err error) { - if !strings.Contains(err.Error(), "no matches for kind") { + if !apimeta.IsNoMatchError(err) { logger.Failuref(err.Error()) } } diff --git a/cmd/flux/get_source_all.go b/cmd/flux/get_source_all.go index a7c52e85..c6736c74 100644 --- a/cmd/flux/get_source_all.go +++ b/cmd/flux/get_source_all.go @@ -17,9 +17,8 @@ limitations under the License. package main import ( - "strings" - "github.com/spf13/cobra" + apimeta "k8s.io/apimachinery/pkg/api/meta" sourcev1 "github.com/fluxcd/source-controller/api/v1" sourcev1b2 "github.com/fluxcd/source-controller/api/v1beta2" @@ -65,7 +64,7 @@ var getSourceAllCmd = &cobra.Command{ for _, c := range allSourceCmd { if err := c.run(cmd, args); err != nil { - if !strings.Contains(err.Error(), "no matches for kind") { + if !apimeta.IsNoMatchError(err) { logger.Failuref(err.Error()) } } From 36adfff99e177ca4acca3a03ac9b3e04510deba4 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 13 Dec 2023 17:03:18 +0200 Subject: [PATCH 717/818] Remove deprecated monitoring configs Signed-off-by: Stefan Prodan --- manifests/monitoring/README.md | 12 +- .../kube-prometheus-stack/kustomization.yaml | 7 - .../kube-prometheus-stack/namespace.yaml | 6 - .../kube-prometheus-stack/release.yaml | 51 - .../kube-prometheus-stack/repository.yaml | 9 - .../monitoring/loki-stack/kustomization.yaml | 6 - manifests/monitoring/loki-stack/release.yaml | 40 - .../monitoring/loki-stack/repository.yaml | 7 - .../monitoring-config/dashboards/cluster.json | 1006 ---------- .../dashboards/control-plane.json | 1637 ----------------- .../monitoring-config/dashboards/logs.json | 332 ---- .../monitoring-config/kustomization.yaml | 16 - .../monitoring-config/podmonitor.yaml | 30 - 13 files changed, 7 insertions(+), 3152 deletions(-) delete mode 100644 manifests/monitoring/kube-prometheus-stack/kustomization.yaml delete mode 100644 manifests/monitoring/kube-prometheus-stack/namespace.yaml delete mode 100644 manifests/monitoring/kube-prometheus-stack/release.yaml delete mode 100644 manifests/monitoring/kube-prometheus-stack/repository.yaml delete mode 100644 manifests/monitoring/loki-stack/kustomization.yaml delete mode 100644 manifests/monitoring/loki-stack/release.yaml delete mode 100644 manifests/monitoring/loki-stack/repository.yaml delete mode 100644 manifests/monitoring/monitoring-config/dashboards/cluster.json delete mode 100644 manifests/monitoring/monitoring-config/dashboards/control-plane.json delete mode 100644 manifests/monitoring/monitoring-config/dashboards/logs.json delete mode 100644 manifests/monitoring/monitoring-config/kustomization.yaml delete mode 100644 manifests/monitoring/monitoring-config/podmonitor.yaml diff --git a/manifests/monitoring/README.md b/manifests/monitoring/README.md index 07f03864..af5d720b 100644 --- a/manifests/monitoring/README.md +++ b/manifests/monitoring/README.md @@ -1,13 +1,15 @@ -# :warning: Deprecation Notice +# :warning: Removal Notice Starting Flux v2.1.0, released August 24, 2023, the Flux monitoring -configurations in this repository will be marked as deprecated. New monitoring +configurations in this repository were marked as deprecated. The new monitoring docs are available at [Flux monitoring](https://fluxcd.io/flux/monitoring/) docs with new example configurations in [fluxcd/flux2-monitoring-example](https://github.com/fluxcd/flux2-monitoring-example/). -The deprecated configurations will be removed in a future release of Flux. All -users of these configurations are recommended to use the new monitoring setup, -following the docs and the new examples. + +The deprecated configurations were removed in Flux v2.2 on December 13, 2023. All +users of these configurations are advised to use the new monitoring setup, +following the [docs](https://fluxcd.io/flux/monitoring/) and the +[examples](https://github.com/fluxcd/flux2-monitoring-example/). After collecting a lot of user feedback about our monitoring recommendation, in order to serve most of the needs of the users, we decided to create a new diff --git a/manifests/monitoring/kube-prometheus-stack/kustomization.yaml b/manifests/monitoring/kube-prometheus-stack/kustomization.yaml deleted file mode 100644 index 920eff14..00000000 --- a/manifests/monitoring/kube-prometheus-stack/kustomization.yaml +++ /dev/null @@ -1,7 +0,0 @@ -apiVersion: kustomize.config.k8s.io/v1beta1 -kind: Kustomization -namespace: monitoring -resources: - - namespace.yaml - - repository.yaml - - release.yaml diff --git a/manifests/monitoring/kube-prometheus-stack/namespace.yaml b/manifests/monitoring/kube-prometheus-stack/namespace.yaml deleted file mode 100644 index 78abcfce..00000000 --- a/manifests/monitoring/kube-prometheus-stack/namespace.yaml +++ /dev/null @@ -1,6 +0,0 @@ -apiVersion: v1 -kind: Namespace -metadata: - name: monitoring - labels: - app.kubernetes.io/component: monitoring diff --git a/manifests/monitoring/kube-prometheus-stack/release.yaml b/manifests/monitoring/kube-prometheus-stack/release.yaml deleted file mode 100644 index f2c60c5c..00000000 --- a/manifests/monitoring/kube-prometheus-stack/release.yaml +++ /dev/null @@ -1,51 +0,0 @@ -apiVersion: helm.toolkit.fluxcd.io/v2beta1 -kind: HelmRelease -metadata: - name: kube-prometheus-stack -spec: - interval: 5m - chart: - spec: - version: "45.x" - chart: kube-prometheus-stack - sourceRef: - kind: HelmRepository - name: prometheus-community - interval: 60m - install: - crds: Create - upgrade: - crds: CreateReplace - # https://github.com/prometheus-community/helm-charts/blob/main/charts/kube-prometheus-stack/values.yaml - values: - alertmanager: - enabled: false - prometheus: - prometheusSpec: - retention: 24h - resources: - requests: - cpu: 200m - memory: 200Mi - podMonitorNamespaceSelector: {} - podMonitorSelector: - matchLabels: - app.kubernetes.io/component: monitoring - postRenderers: - - kustomize: - patches: - - target: - # Ignore these objects from Flux diff as they are mutated from chart hooks - kind: (ValidatingWebhookConfiguration|MutatingWebhookConfiguration) - name: kube-prometheus-stack-admission - patch: | - - op: add - path: /metadata/annotations/helm.toolkit.fluxcd.io~1driftDetection - value: disabled - - target: - # Ignore these objects from Flux diff as they are mutated at apply time but not at dry-run time - kind: PrometheusRule - patch: | - - op: add - path: /metadata/annotations/helm.toolkit.fluxcd.io~1driftDetection - value: disabled diff --git a/manifests/monitoring/kube-prometheus-stack/repository.yaml b/manifests/monitoring/kube-prometheus-stack/repository.yaml deleted file mode 100644 index 82d36073..00000000 --- a/manifests/monitoring/kube-prometheus-stack/repository.yaml +++ /dev/null @@ -1,9 +0,0 @@ -apiVersion: source.toolkit.fluxcd.io/v1beta2 -kind: HelmRepository -metadata: - name: prometheus-community -spec: - interval: 120m - # OCI builds for kube-prometheus-stack have been temporarily disabled (see https://github.com/prometheus-community/helm-charts/issues/2940). - type: default - url: https://prometheus-community.github.io/helm-charts diff --git a/manifests/monitoring/loki-stack/kustomization.yaml b/manifests/monitoring/loki-stack/kustomization.yaml deleted file mode 100644 index d6d43382..00000000 --- a/manifests/monitoring/loki-stack/kustomization.yaml +++ /dev/null @@ -1,6 +0,0 @@ -apiVersion: kustomize.config.k8s.io/v1beta1 -kind: Kustomization -namespace: monitoring -resources: - - repository.yaml - - release.yaml diff --git a/manifests/monitoring/loki-stack/release.yaml b/manifests/monitoring/loki-stack/release.yaml deleted file mode 100644 index 5389e808..00000000 --- a/manifests/monitoring/loki-stack/release.yaml +++ /dev/null @@ -1,40 +0,0 @@ -apiVersion: helm.toolkit.fluxcd.io/v2beta1 -kind: HelmRelease -metadata: - name: loki-stack -spec: - interval: 5m - dependsOn: - - name: kube-prometheus-stack - chart: - spec: - version: "2.x" - chart: loki-stack - sourceRef: - kind: HelmRepository - name: grafana-charts - interval: 60m - # https://github.com/grafana/helm-charts/blob/main/charts/loki-stack/values.yaml - # https://github.com/grafana/loki/blob/main/production/helm/loki/values.yaml - values: - grafana: - enabled: false - sidecar: - datasources: - enabled: true - maxLines: 1000 - promtail: - enabled: true - loki: - enabled: true - isDefault: false - serviceMonitor: - enabled: true - additionalLabels: - app.kubernetes.io/part-of: kube-prometheus-stack - config: - chunk_store_config: - max_look_back_period: 0s - table_manager: - retention_deletes_enabled: true - retention_period: 12h diff --git a/manifests/monitoring/loki-stack/repository.yaml b/manifests/monitoring/loki-stack/repository.yaml deleted file mode 100644 index 49f58cdd..00000000 --- a/manifests/monitoring/loki-stack/repository.yaml +++ /dev/null @@ -1,7 +0,0 @@ -apiVersion: source.toolkit.fluxcd.io/v1beta2 -kind: HelmRepository -metadata: - name: grafana-charts -spec: - interval: 120m0s - url: https://grafana.github.io/helm-charts diff --git a/manifests/monitoring/monitoring-config/dashboards/cluster.json b/manifests/monitoring/monitoring-config/dashboards/cluster.json deleted file mode 100644 index 1ef0fed5..00000000 --- a/manifests/monitoring/monitoring-config/dashboards/cluster.json +++ /dev/null @@ -1,1006 +0,0 @@ -{ - "annotations": { - "list": [ - { - "builtIn": 1, - "datasource": "-- Grafana --", - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations & Alerts", - "type": "dashboard" - }, - { - "datasource": { - "type": "datasource", - "uid": "grafana" - }, - "enable": true, - "iconColor": "red", - "name": "flux events", - "target": { - "limit": 100, - "matchAny": false, - "tags": [ - "flux" - ], - "type": "tags" - } - } - ] - }, - "editable": true, - "gnetId": null, - "graphTooltip": 0, - "iteration": 1652337714814, - "links": [], - "panels": [ - { - "datasource": "${DS_PROMETHEUS}", - "description": "", - "fieldConfig": { - "defaults": { - "decimals": 0, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "blue", - "value": null - }, - { - "color": "red", - "value": 100 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 5, - "w": 6, - "x": 0, - "y": 0 - }, - "id": 24, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "last" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "value" - }, - "pluginVersion": "7.5.5", - "targets": [ - { - "exemplar": true, - "expr": "count(gotk_reconcile_condition{namespace=~\"$operator_namespace\",exported_namespace=~\"$namespace\",type=\"Ready\",status=\"True\",kind=~\"Kustomization|HelmRelease\"})\n-\nsum(gotk_reconcile_condition{namespace=~\"$operator_namespace\",exported_namespace=~\"$namespace\",type=\"Ready\",status=\"Deleted\",kind=~\"Kustomization|HelmRelease\"})", - "interval": "", - "legendFormat": "", - "refId": "A" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Cluster Reconcilers", - "type": "stat" - }, - { - "datasource": "${DS_PROMETHEUS}", - "description": "", - "fieldConfig": { - "defaults": { - "decimals": 0, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "red", - "value": null - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 5, - "w": 6, - "x": 6, - "y": 0 - }, - "id": 28, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "last" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "value" - }, - "pluginVersion": "7.5.5", - "targets": [ - { - "exemplar": true, - "expr": "sum(gotk_reconcile_condition{namespace=~\"$operator_namespace\",exported_namespace=~\"$namespace\",type=\"Ready\",status=\"False\",kind=~\"Kustomization|HelmRelease\"})", - "interval": "", - "legendFormat": "", - "refId": "A" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Failing Reconcilers", - "type": "stat" - }, - { - "datasource": "${DS_PROMETHEUS}", - "description": "", - "fieldConfig": { - "defaults": { - "decimals": 0, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "blue", - "value": null - }, - { - "color": "red", - "value": 100 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 5, - "w": 6, - "x": 12, - "y": 0 - }, - "id": 29, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "last" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "value" - }, - "pluginVersion": "7.5.5", - "targets": [ - { - "exemplar": true, - "expr": "count(gotk_reconcile_condition{namespace=~\"$operator_namespace\",exported_namespace=~\"$namespace\",type=\"Ready\",status=\"True\",kind=~\"GitRepository|OCIRepository|HelmRepository|Bucket\"})\n-\nsum(gotk_reconcile_condition{namespace=~\"$operator_namespace\",exported_namespace=~\"$namespace\",type=\"Ready\",status=\"Deleted\",kind=~\"GitRepository|OCIRepository|HelmRepository|Bucket\"})", - "interval": "", - "legendFormat": "", - "refId": "A" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Kubernetes Manifests Sources", - "type": "stat" - }, - { - "datasource": "${DS_PROMETHEUS}", - "description": "", - "fieldConfig": { - "defaults": { - "decimals": 0, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "red", - "value": null - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 5, - "w": 6, - "x": 18, - "y": 0 - }, - "id": 30, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "last" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "value" - }, - "pluginVersion": "7.5.5", - "targets": [ - { - "exemplar": true, - "expr": "sum(gotk_reconcile_condition{namespace=~\"$operator_namespace\",exported_namespace=~\"$namespace\",type=\"Ready\",status=\"False\",kind=~\"GitRepository|OCIRepository|HelmRepository|Bucket\"})", - "interval": "", - "legendFormat": "", - "refId": "A" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Failing Sources", - "type": "stat" - }, - { - "datasource": "${DS_PROMETHEUS}", - "description": "", - "fieldConfig": { - "defaults": { - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "#EAB839", - "value": 1 - }, - { - "color": "red", - "value": 61 - } - ] - }, - "unit": "s" - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 12, - "x": 0, - "y": 5 - }, - "id": 8, - "options": { - "displayMode": "gradient", - "minVizHeight": 10, - "minVizWidth": 0, - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "mean" - ], - "fields": "", - "values": false - }, - "showUnfilled": true, - "text": {} - }, - "pluginVersion": "7.5.5", - "targets": [ - { - "exemplar": true, - "expr": "sum(rate(gotk_reconcile_duration_seconds_sum{namespace=~\"$operator_namespace\",exported_namespace=~\"$namespace\",kind=~\"Kustomization|HelmRelease\"}[5m])) by (kind)\n/\n sum(rate(gotk_reconcile_duration_seconds_count{namespace=~\"$operator_namespace\",exported_namespace=~\"$namespace\",kind=~\"Kustomization|HelmRelease\"}[5m])) by (kind)", - "interval": "", - "legendFormat": "{{kind}}", - "refId": "A" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Reconciler ops avg. duration", - "type": "bargauge" - }, - { - "datasource": "${DS_PROMETHEUS}", - "description": "", - "fieldConfig": { - "defaults": { - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "#EAB839", - "value": 1 - }, - { - "color": "red", - "value": 61 - } - ] - }, - "unit": "s" - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 12, - "x": 12, - "y": 5 - }, - "id": 31, - "options": { - "displayMode": "gradient", - "minVizHeight": 10, - "minVizWidth": 0, - "orientation": "horizontal", - "reduceOptions": { - "calcs": [ - "mean" - ], - "fields": "", - "values": false - }, - "showUnfilled": true, - "text": {} - }, - "pluginVersion": "7.5.5", - "targets": [ - { - "exemplar": true, - "expr": "sum(rate(gotk_reconcile_duration_seconds_sum{namespace=~\"$operator_namespace\",exported_namespace=~\"$namespace\",kind=~\"GitRepository|OCIRepository|HelmRepository|Bucket\"}[5m])) by (kind)\n/\n sum(rate(gotk_reconcile_duration_seconds_count{namespace=~\"$operator_namespace\",exported_namespace=~\"$namespace\",kind=~\"GitRepository|OCIRepository|HelmRepository|Bucket\"}[5m])) by (kind)", - "interval": "", - "legendFormat": "{{kind}}", - "refId": "A" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Source ops avg. duration", - "type": "bargauge" - }, - { - "collapsed": false, - "datasource": "${DS_PROMETHEUS}", - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 9 - }, - "id": 15, - "panels": [], - "title": "Status", - "type": "row" - }, - { - "datasource": "${DS_PROMETHEUS}", - "description": "", - "fieldConfig": { - "defaults": { - "custom": { - "displayMode": "auto", - "filterable": true, - "inspect": false - }, - "mappings": [ - { - "options": { - "0": { - "text": "Ready" - }, - "1": { - "text": "Not Ready" - } - }, - "type": "value" - } - ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "blue", - "value": null - }, - { - "color": "blue", - "value": 0 - }, - { - "color": "red", - "value": 1 - } - ] - } - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "Status" - }, - "properties": [ - { - "id": "custom.displayMode", - "value": "color-background" - } - ] - } - ] - }, - "gridPos": { - "h": 11, - "w": 12, - "x": 0, - "y": 10 - }, - "id": 33, - "options": { - "footer": { - "fields": "", - "reducer": [ - "sum" - ], - "show": false - }, - "showHeader": true, - "sortBy": [ - { - "desc": true, - "displayName": "Status" - } - ] - }, - "pluginVersion": "7.5.5", - "targets": [ - { - "exemplar": true, - "expr": "gotk_reconcile_condition{namespace=~\"$operator_namespace\",exported_namespace=~\"$namespace\",type=\"Ready\",status=\"False\",kind=~\"Kustomization|HelmRelease\"}", - "format": "table", - "instant": true, - "interval": "", - "legendFormat": "", - "refId": "A" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Cluster reconciliation readiness ", - "transformations": [ - { - "id": "organize", - "options": { - "excludeByName": { - "Time": true, - "__name__": true, - "app": true, - "container": true, - "endpoint": true, - "exported_namespace": false, - "instance": true, - "job": true, - "kubernetes_namespace": true, - "kubernetes_pod_name": true, - "namespace": true, - "pod": true, - "pod_template_hash": true, - "status": true, - "type": true - }, - "indexByName": {}, - "renameByName": { - "Value": "Status", - "exported_namespace": "Namespace", - "kind": "Kind", - "name": "Name", - "namespace": "Operator Namespace" - } - } - } - ], - "type": "table" - }, - { - "datasource": "${DS_PROMETHEUS}", - "description": "", - "fieldConfig": { - "defaults": { - "custom": { - "displayMode": "auto", - "filterable": true, - "inspect": false - }, - "mappings": [ - { - "options": { - "0": { - "text": "Ready" - }, - "1": { - "text": "Not Ready" - } - }, - "type": "value" - } - ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "blue", - "value": null - }, - { - "color": "blue", - "value": 0 - }, - { - "color": "red", - "value": 1 - } - ] - } - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "Status" - }, - "properties": [ - { - "id": "custom.displayMode", - "value": "color-background" - } - ] - } - ] - }, - "gridPos": { - "h": 11, - "w": 12, - "x": 12, - "y": 10 - }, - "id": 34, - "options": { - "footer": { - "fields": "", - "reducer": [ - "sum" - ], - "show": false - }, - "showHeader": true, - "sortBy": [ - { - "desc": true, - "displayName": "Status" - } - ] - }, - "pluginVersion": "7.5.5", - "targets": [ - { - "exemplar": true, - "expr": "gotk_reconcile_condition{namespace=~\"$operator_namespace\",exported_namespace=~\"$namespace\",type=\"Ready\",status=\"False\",kind=~\"GitRepository|OCIRepository|HelmRepository|Bucket\"}", - "format": "table", - "instant": true, - "interval": "", - "legendFormat": "", - "refId": "A" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Source acquisition readiness ", - "transformations": [ - { - "id": "organize", - "options": { - "excludeByName": { - "Time": true, - "__name__": true, - "app": true, - "container": true, - "endpoint": true, - "exported_namespace": false, - "instance": true, - "job": true, - "kubernetes_namespace": true, - "kubernetes_pod_name": true, - "namespace": true, - "pod": true, - "pod_template_hash": true, - "status": true, - "type": true - }, - "indexByName": {}, - "renameByName": { - "Value": "Status", - "exported_namespace": "Namespace", - "kind": "Kind", - "name": "Name", - "namespace": "Operator Namespace" - } - } - } - ], - "type": "table" - }, - { - "collapsed": false, - "datasource": "${DS_PROMETHEUS}", - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 21 - }, - "id": 17, - "panels": [], - "title": "Timing", - "type": "row" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "${DS_PROMETHEUS}", - "description": "", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 24, - "x": 0, - "y": 22 - }, - "hiddenSeries": false, - "id": 27, - "legend": { - "alignAsTable": true, - "avg": true, - "current": false, - "hideEmpty": true, - "hideZero": true, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.5", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": true, - "expr": "sum(rate(gotk_reconcile_duration_seconds_sum{namespace=~\"$operator_namespace\",exported_namespace=~\"$namespace\",kind=~\"Kustomization|HelmRelease\"}[5m])) by (kind, name)\n/\n sum(rate(gotk_reconcile_duration_seconds_count{namespace=~\"$operator_namespace\",exported_namespace=~\"$namespace\",kind=~\"Kustomization|HelmRelease\"}[5m])) by (kind, name)", - "hide": false, - "interval": "", - "legendFormat": "{{kind}}/{{name}}", - "refId": "B" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Cluster reconciliation duration", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "s", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "${DS_PROMETHEUS}", - "description": "", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 24, - "x": 0, - "y": 30 - }, - "hiddenSeries": false, - "id": 35, - "legend": { - "alignAsTable": true, - "avg": true, - "current": false, - "hideEmpty": true, - "hideZero": true, - "max": false, - "min": false, - "rightSide": true, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "7.5.5", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "exemplar": true, - "expr": "sum(rate(gotk_reconcile_duration_seconds_sum{namespace=~\"$operator_namespace\",exported_namespace=~\"$namespace\",kind=~\"GitRepository|OCIRepository|HelmRepository|Bucket\"}[5m])) by (kind, name)\n/\n sum(rate(gotk_reconcile_duration_seconds_count{namespace=~\"$operator_namespace\",exported_namespace=~\"$namespace\",kind=~\"GitRepository|OCIRepository|HelmRepository|Bucket\"}[5m])) by (kind, name)", - "hide": false, - "interval": "", - "legendFormat": "{{kind}}/{{name}}", - "refId": "B" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Source acquisition duration", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "s", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - } - ], - "refresh": "30s", - "schemaVersion": 36, - "style": "light", - "tags": [ - "flux" - ], - "templating": { - "list": [ - { - "allValue": "", - "current": { - "selected": true, - "text": [ - "All" - ], - "value": [ - "$__all" - ] - }, - "datasource": "$DS_PROMETHEUS", - "definition": "label_values(gotk_reconcile_condition, namespace)", - "description": null, - "error": null, - "hide": 0, - "includeAll": true, - "label": null, - "multi": true, - "name": "operator_namespace", - "options": [], - "query": { - "query": "label_values(gotk_reconcile_condition, namespace)", - "refId": "StandardVariableQuery" - }, - "refresh": 2, - "regex": "", - "skipUrlSync": false, - "sort": 5, - "tagValuesQuery": "", - "tags": [], - "tagsQuery": "", - "type": "query", - "useTags": false - }, - { - "allValue": null, - "current": { - "selected": true, - "tags": [], - "text": [ - "All" - ], - "value": [ - "$__all" - ] - }, - "datasource": "$DS_PROMETHEUS", - "definition": "label_values(gotk_reconcile_condition, exported_namespace)", - "description": null, - "error": null, - "hide": 0, - "includeAll": true, - "label": null, - "multi": true, - "name": "namespace", - "options": [], - "query": { - "query": "label_values(gotk_reconcile_condition, exported_namespace)", - "refId": "StandardVariableQuery" - }, - "refresh": 2, - "regex": "", - "skipUrlSync": false, - "sort": 0, - "tagValuesQuery": "", - "tags": [], - "tagsQuery": "", - "type": "query", - "useTags": false - }, - { - "current": { - "selected": false, - "text": "Prometheus", - "value": "Prometheus" - }, - "hide": 0, - "includeAll": false, - "label": "Datasource", - "multi": false, - "name": "DS_PROMETHEUS", - "options": [], - "query": "prometheus", - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "type": "datasource" - } - ] - }, - "time": { - "from": "now-15m", - "to": "now" - }, - "timepicker": { - "refresh_intervals": [ - "10s", - "30s", - "1m", - "5m", - "15m", - "30m", - "1h", - "2h", - "1d" - ] - }, - "title": "Flux Cluster Stats", - "uid": "flux-cluster", - "version": 3 -} diff --git a/manifests/monitoring/monitoring-config/dashboards/control-plane.json b/manifests/monitoring/monitoring-config/dashboards/control-plane.json deleted file mode 100644 index a4ad008d..00000000 --- a/manifests/monitoring/monitoring-config/dashboards/control-plane.json +++ /dev/null @@ -1,1637 +0,0 @@ -{ - "annotations": { - "list": [ - { - "builtIn": 1, - "datasource": "-- Grafana --", - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations & Alerts", - "target": { - "limit": 100, - "matchAny": false, - "tags": [], - "type": "dashboard" - }, - "type": "dashboard" - }, - { - "datasource": { - "type": "datasource", - "uid": "grafana" - }, - "enable": true, - "iconColor": "red", - "name": "flux events", - "target": { - "limit": 100, - "matchAny": false, - "tags": [ - "flux" - ], - "type": "tags" - } - } - ] - }, - "editable": true, - "fiscalYearStartMonth": 0, - "gnetId": null, - "graphTooltip": 0, - "id": 29, - "iteration": 1639041352219, - "links": [], - "liveNow": false, - "panels": [ - { - "datasource": "${DS_PROMETHEUS}", - "description": "", - "fieldConfig": { - "defaults": { - "decimals": 0, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "blue", - "value": null - }, - { - "color": "red", - "value": 100 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 5, - "w": 6, - "x": 0, - "y": 0 - }, - "id": 24, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "last" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "value" - }, - "pluginVersion": "8.2.3", - "targets": [ - { - "expr": "sum(go_info{namespace=\"$namespace\",pod=~\".*-controller-.*\"})", - "interval": "", - "legendFormat": "pods", - "refId": "A" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Controllers", - "type": "stat" - }, - { - "datasource": "${DS_PROMETHEUS}", - "description": "", - "fieldConfig": { - "defaults": { - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "blue", - "value": null - }, - { - "color": "#EAB839", - "value": 50 - }, - { - "color": "red", - "value": 100 - } - ] - }, - "unit": "s" - }, - "overrides": [] - }, - "gridPos": { - "h": 5, - "w": 6, - "x": 6, - "y": 0 - }, - "id": 23, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "auto" - }, - "pluginVersion": "8.2.3", - "targets": [ - { - "expr": "max(workqueue_longest_running_processor_seconds{namespace=\"$namespace\",pod=~\".*-controller-.*\"})", - "hide": false, - "interval": "", - "legendFormat": "seconds", - "refId": "B" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Max Work Queue", - "type": "stat" - }, - { - "datasource": "${DS_PROMETHEUS}", - "description": "", - "fieldConfig": { - "defaults": { - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "blue", - "value": null - }, - { - "color": "#EAB839", - "value": 500000000 - }, - { - "color": "red", - "value": 900000000 - } - ] - }, - "unit": "decbits" - }, - "overrides": [] - }, - "gridPos": { - "h": 5, - "w": 6, - "x": 12, - "y": 0 - }, - "id": 25, - "options": { - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "showThresholdLabels": false, - "showThresholdMarkers": true, - "text": {} - }, - "pluginVersion": "8.2.3", - "targets": [ - { - "expr": "sum(go_memstats_alloc_bytes{namespace=\"$namespace\",pod=~\".*-controller-.*\"})", - "interval": "", - "legendFormat": "", - "refId": "A" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "Memory", - "type": "gauge" - }, - { - "datasource": "${DS_PROMETHEUS}", - "description": "", - "fieldConfig": { - "defaults": { - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "blue", - "value": null - }, - { - "color": "#EAB839", - "value": 50 - }, - { - "color": "red", - "value": 100 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 5, - "w": 6, - "x": 18, - "y": 0 - }, - "id": 26, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "mean" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "auto" - }, - "pluginVersion": "8.2.3", - "targets": [ - { - "expr": "sum(rate(rest_client_requests_total{namespace=\"$namespace\",pod=~\".*-controller-.*\"}[1m]))", - "interval": "", - "legendFormat": "requests", - "refId": "A" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "API Requests", - "type": "stat" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "${DS_PROMETHEUS}", - "decimals": null, - "description": "", - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 24, - "x": 0, - "y": 5 - }, - "hiddenSeries": false, - "id": 21, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "max": false, - "min": false, - "rightSide": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "8.2.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "sum(rate(rest_client_requests_total{namespace=\"$namespace\"}[1m]))", - "hide": false, - "interval": "", - "legendFormat": "total", - "refId": "A" - }, - { - "expr": "sum(rate(rest_client_requests_total{namespace=\"$namespace\",code!~\"2..\"}[1m]))", - "hide": false, - "interval": "", - "legendFormat": "errors", - "refId": "B" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Kubernetes API Requests", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:912", - "decimals": null, - "format": "short", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:913", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "collapsed": false, - "datasource": "${DS_PROMETHEUS}", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 13 - }, - "id": 15, - "panels": [], - "title": "Resource Usage", - "type": "row" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "${DS_PROMETHEUS}", - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 11, - "w": 12, - "x": 0, - "y": 14 - }, - "hiddenSeries": false, - "id": 11, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "max": false, - "min": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "8.2.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": true, - "steppedLine": false, - "targets": [ - { - "expr": "rate(process_cpu_seconds_total{namespace=\"$namespace\",pod=~\".*-controller-.*\"}[1m])", - "interval": "", - "legendFormat": "{{pod}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "CPU Usage", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:93", - "format": "s", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:94", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "${DS_PROMETHEUS}", - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 11, - "w": 12, - "x": 12, - "y": 14 - }, - "hiddenSeries": false, - "id": 13, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "max": false, - "min": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "8.2.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": true, - "steppedLine": false, - "targets": [ - { - "expr": "sum(container_memory_working_set_bytes{namespace=\"$namespace\",container!=\"POD\",container!=\"\",pod=~\".*-controller-.*\"}) by (pod)", - "hide": false, - "interval": "", - "legendFormat": "{{pod}}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Memory Usage", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:93", - "decimals": 0, - "format": "bytes", - "label": "", - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:94", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "collapsed": false, - "datasource": "${DS_PROMETHEUS}", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 25 - }, - "id": 17, - "panels": [], - "title": "Reconciliation Stats", - "type": "row" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "${DS_PROMETHEUS}", - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 24, - "x": 0, - "y": 26 - }, - "hiddenSeries": false, - "id": 27, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "max": false, - "min": false, - "rightSide": false, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "8.2.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "workqueue_longest_running_processor_seconds{name=\"kustomization\"}", - "hide": false, - "interval": "", - "legendFormat": "kustomizations", - "refId": "B" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Cluster Reconciliation Duration", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:912", - "format": "s", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:913", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": true, - "dashLength": 10, - "dashes": false, - "datasource": "${DS_PROMETHEUS}", - "decimals": 2, - "description": "", - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 24, - "x": 0, - "y": 34 - }, - "hiddenSeries": false, - "id": 2, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "max": false, - "min": false, - "rightSide": false, - "show": true, - "total": false, - "values": true - }, - "lines": false, - "linewidth": 1, - "nullPointMode": "null", - "percentage": false, - "pluginVersion": "8.2.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": true, - "targets": [ - { - "expr": "sum(increase(controller_runtime_reconcile_total{controller=\"kustomization\",result!=\"error\"}[1m])) by (controller)", - "format": "time_series", - "interval": "", - "legendFormat": "successful reconciliations ", - "refId": "A" - }, - { - "expr": "sum(increase(controller_runtime_reconcile_total{controller=\"kustomization\",result=\"error\"}[1m])) by (controller)", - "format": "time_series", - "interval": "", - "legendFormat": "failed reconciliations ", - "refId": "B" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Cluster Reconciliations ops/min", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:1171", - "format": "opm", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:1172", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "collapsed": false, - "datasource": "${DS_PROMETHEUS}", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 42 - }, - "id": 29, - "panels": [], - "title": "Sources Stats", - "type": "row" - }, - { - "aliasColors": {}, - "bars": true, - "dashLength": 10, - "dashes": false, - "datasource": "${DS_PROMETHEUS}", - "decimals": 2, - "description": "", - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 9, - "w": 12, - "x": 0, - "y": 43 - }, - "hiddenSeries": false, - "id": 4, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "max": false, - "min": false, - "rightSide": false, - "show": true, - "total": false, - "values": true - }, - "lines": false, - "linewidth": 1, - "nullPointMode": "null", - "percentage": false, - "pluginVersion": "8.2.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": true, - "targets": [ - { - "expr": "sum(increase(controller_runtime_reconcile_total{controller=\"gitrepository\",result!=\"error\"}[1m]))", - "format": "time_series", - "interval": "", - "legendFormat": "successful git pulls", - "refId": "A" - }, - { - "expr": "sum(increase(controller_runtime_reconcile_total{controller=\"gitrepository\",result=\"error\"}[1m]))", - "format": "time_series", - "interval": "", - "legendFormat": "failed git pulls", - "refId": "B" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Git Repos ops/min", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:285", - "format": "opm", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:286", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": true, - "dashLength": 10, - "dashes": false, - "datasource": "${DS_PROMETHEUS}", - "decimals": 2, - "description": "", - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 9, - "w": 12, - "x": 12, - "y": 43 - }, - "hiddenSeries": false, - "id": 4, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "max": false, - "min": false, - "rightSide": false, - "show": true, - "total": false, - "values": true - }, - "lines": false, - "linewidth": 1, - "nullPointMode": "null", - "percentage": false, - "pluginVersion": "8.2.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": true, - "targets": [ - { - "expr": "sum(increase(controller_runtime_reconcile_total{controller=\"ocirepository\",result!=\"error\"}[1m]))", - "format": "time_series", - "interval": "", - "legendFormat": "successful oci pulls", - "refId": "A" - }, - { - "expr": "sum(increase(controller_runtime_reconcile_total{controller=\"ocirepository\",result=\"error\"}[1m]))", - "format": "time_series", - "interval": "", - "legendFormat": "failed oci pulls", - "refId": "B" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "OCI Repos ops/min", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:285", - "format": "opm", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:286", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": true, - "dashLength": 10, - "dashes": false, - "datasource": "${DS_PROMETHEUS}", - "decimals": 2, - "description": "", - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 9, - "w": 12, - "x": 0, - "y": 52 - }, - "hiddenSeries": false, - "id": 4, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "max": false, - "min": false, - "rightSide": false, - "show": true, - "total": false, - "values": true - }, - "lines": false, - "linewidth": 1, - "nullPointMode": "null", - "percentage": false, - "pluginVersion": "8.2.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": true, - "targets": [ - { - "expr": "sum(increase(controller_runtime_reconcile_total{controller=\"helmrepository\",result!=\"error\"}[1m]))", - "format": "time_series", - "interval": "", - "legendFormat": "successful helm pulls", - "refId": "A" - }, - { - "expr": "sum(increase(controller_runtime_reconcile_total{controller=\"helmrepository\",result=\"error\"}[1m]))", - "format": "time_series", - "interval": "", - "legendFormat": "failed helm pulls", - "refId": "B" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Helm Repos ops/min", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:285", - "format": "opm", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:286", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": true, - "dashLength": 10, - "dashes": false, - "datasource": "${DS_PROMETHEUS}", - "decimals": 2, - "description": "", - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 9, - "w": 12, - "x": 12, - "y": 52 - }, - "hiddenSeries": false, - "id": 4, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "max": false, - "min": false, - "rightSide": false, - "show": true, - "total": false, - "values": true - }, - "lines": false, - "linewidth": 1, - "nullPointMode": "null", - "percentage": false, - "pluginVersion": "8.2.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": true, - "targets": [ - { - "expr": "sum(increase(controller_runtime_reconcile_total{controller=\"bucket\",result!=\"error\"}[1m]))", - "format": "time_series", - "interval": "", - "legendFormat": "successful bucket pulls", - "refId": "A" - }, - { - "expr": "sum(increase(controller_runtime_reconcile_total{controller=\"bucket\",result=\"error\"}[1m]))", - "format": "time_series", - "interval": "", - "legendFormat": "failed bucket pulls", - "refId": "B" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Buckets ops/min", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:285", - "format": "opm", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:286", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "collapsed": false, - "datasource": "${DS_PROMETHEUS}", - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 61 - }, - "id": 19, - "panels": [], - "title": "Helm Stats", - "type": "row" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "${DS_PROMETHEUS}", - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 24, - "x": 0, - "y": 62 - }, - "hiddenSeries": false, - "id": 9, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "max": false, - "min": false, - "rightSide": true, - "show": false, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null as zero", - "percentage": false, - "pluginVersion": "8.2.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "histogram_quantile(0.50, sum(rate(controller_runtime_reconcile_time_seconds_bucket{controller=\"helmrelease\"}[5m])) by (le))", - "hide": true, - "interval": "", - "legendFormat": "P50", - "refId": "A" - }, - { - "expr": "histogram_quantile(0.90, sum(rate(controller_runtime_reconcile_time_seconds_bucket{controller=\"helmrelease\"}[5m])) by (le))", - "hide": true, - "interval": "", - "legendFormat": "P90", - "refId": "B" - }, - { - "expr": "histogram_quantile(0.99, sum(rate(controller_runtime_reconcile_time_seconds_bucket{controller=\"helmrelease\"}[5m])) by (le))", - "hide": false, - "interval": "", - "legendFormat": "P99", - "refId": "C" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Helm Release Duration", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:1612", - "format": "s", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:1613", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": true, - "dashLength": 10, - "dashes": false, - "datasource": "${DS_PROMETHEUS}", - "decimals": 2, - "description": "", - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 9, - "w": 12, - "x": 0, - "y": 70 - }, - "hiddenSeries": false, - "id": 5, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "max": false, - "min": false, - "rightSide": false, - "show": true, - "total": false, - "values": true - }, - "lines": false, - "linewidth": 1, - "nullPointMode": "null", - "percentage": false, - "pluginVersion": "8.2.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": true, - "targets": [ - { - "expr": "sum(increase(controller_runtime_reconcile_total{controller=\"helmrelease\",result!=\"error\"}[1m])) by (controller)", - "format": "time_series", - "interval": "", - "legendFormat": "successful reconciliations ", - "refId": "A" - }, - { - "expr": "sum(increase(controller_runtime_reconcile_total{controller=\"helmrelease\",result=\"error\"}[1m])) by (controller)", - "format": "time_series", - "interval": "", - "legendFormat": "failed reconciliations ", - "refId": "B" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Helm Releases ops/min", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:1102", - "format": "opm", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:1103", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": true, - "dashLength": 10, - "dashes": false, - "datasource": "${DS_PROMETHEUS}", - "decimals": 2, - "description": "", - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 9, - "w": 12, - "x": 12, - "y": 70 - }, - "hiddenSeries": false, - "id": 6, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "max": false, - "min": false, - "rightSide": false, - "show": true, - "total": false, - "values": true - }, - "lines": false, - "linewidth": 1, - "nullPointMode": "null", - "percentage": false, - "pluginVersion": "8.2.3", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": true, - "targets": [ - { - "expr": "sum(increase(controller_runtime_reconcile_total{controller=\"helmchart\",result!=\"error\"}[1m])) by (controller)", - "format": "time_series", - "interval": "", - "legendFormat": "successful chart pulls", - "refId": "A" - }, - { - "expr": "sum(increase(controller_runtime_reconcile_total{controller=\"helmchart\",result=\"error\"}[1m])) by (controller)", - "format": "time_series", - "interval": "", - "legendFormat": "failed chart pulls", - "refId": "B" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "Helm Charts ops/min", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:1892", - "format": "opm", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "$$hashKey": "object:1893", - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - } - ], - "refresh": "10s", - "schemaVersion": 31, - "style": "light", - "tags": [ - "flux" - ], - "templating": { - "list": [ - { - "current": { - "selected": false, - "text": "Prometheus", - "value": "Prometheus" - }, - "description": null, - "error": null, - "hide": 2, - "includeAll": false, - "label": null, - "multi": false, - "name": "DS_PROMETHEUS", - "options": [], - "query": "prometheus", - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "type": "datasource" - }, - { - "allValue": null, - "current": { - "selected": false, - "text": "flux-system", - "value": "flux-system" - }, - "datasource": "${DS_PROMETHEUS}", - "definition": "workqueue_work_duration_seconds_count", - "description": null, - "error": null, - "hide": 0, - "includeAll": false, - "label": null, - "multi": false, - "name": "namespace", - "options": [], - "query": { - "query": "workqueue_work_duration_seconds_count", - "refId": "Prometheus-namespace-Variable-Query" - }, - "refresh": 2, - "regex": "/.*namespace=\"([^\"]*).*/", - "skipUrlSync": false, - "sort": 0, - "tagValuesQuery": "", - "tagsQuery": "", - "type": "query", - "useTags": false - } - ] - }, - "time": { - "from": "now-15m", - "to": "now" - }, - "timepicker": { - "refresh_intervals": [ - "10s", - "30s", - "1m", - "5m", - "15m", - "30m", - "1h", - "2h", - "1d" - ] - }, - "timezone": "", - "title": "Flux Control Plane", - "uid": "flux-control-plane", - "version": 2 -} \ No newline at end of file diff --git a/manifests/monitoring/monitoring-config/dashboards/logs.json b/manifests/monitoring/monitoring-config/dashboards/logs.json deleted file mode 100644 index 4d9f58da..00000000 --- a/manifests/monitoring/monitoring-config/dashboards/logs.json +++ /dev/null @@ -1,332 +0,0 @@ -{ - "__inputs": [ - { - "name": "DS_LOKI", - "label": "Loki", - "description": "", - "type": "datasource", - "pluginId": "loki", - "pluginName": "Loki" - } - ], - "annotations": { - "list": [ - { - "builtIn": 1, - "datasource": "-- Grafana --", - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations & Alerts", - "target": { - "limit": 100, - "matchAny": false, - "tags": [], - "type": "dashboard" - }, - "type": "dashboard" - }, - { - "datasource": { - "type": "datasource", - "uid": "grafana" - }, - "enable": true, - "iconColor": "red", - "name": "flux events", - "target": { - "limit": 100, - "matchAny": false, - "tags": [ - "flux" - ], - "type": "tags" - } - } - ] - }, - "description": "Flux logs collected from Kubernetes, stored in Loki", - "editable": true, - "gnetId": null, - "graphTooltip": 0, - "id": 29, - "iteration": 1653748775696, - "links": [], - "liveNow": false, - "panels": [ - { - "datasource": "${DS_LOKI}", - "description": "", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "bars", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 24, - "x": 0, - "y": 0 - }, - "id": 4, - "options": { - "legend": { - "calcs": [], - "displayMode": "hidden", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "datasource": "${DS_LOKI}", - "expr": "sum(count_over_time({namespace=~\"$namespace\", stream=~\"$stream\", app =~\"$controller\"} | json | __error__!=\"JSONParserErr\" | level=~\"$level\" |= \"$query\" [$__interval]))", - "instant": false, - "legendFormat": "Log count", - "range": true, - "refId": "A" - } - ], - "type": "timeseries" - }, - { - "datasource": "${DS_LOKI}", - "description": "Logs from services running in Kubernetes", - "gridPos": { - "h": 25, - "w": 24, - "x": 0, - "y": 4 - }, - "id": 2, - "options": { - "dedupStrategy": "numbers", - "enableLogDetails": false, - "prettifyLogMessage": true, - "showCommonLabels": false, - "showLabels": false, - "showTime": false, - "sortOrder": "Descending", - "wrapLogMessage": false - }, - "targets": [ - { - "datasource": "${DS_LOKI}", - "expr": "{namespace=~\"$namespace\", stream=~\"$stream\", app =~\"$controller\"} | json | __error__!=\"JSONParserErr\" | level=~\"$level\" |= \"$query\"", - "refId": "A" - } - ], - "type": "logs" - } - ], - "refresh": "10s", - "schemaVersion": 36, - "style": "light", - "tags": [ - "flux" - ], - "templating": { - "list": [ - { - "current": { - "selected": false, - "text": "", - "value": "" - }, - "description": "String to search for", - "hide": 0, - "label": "Search Query", - "name": "query", - "options": [ - { - "selected": true, - "text": "", - "value": "" - } - ], - "query": "", - "skipUrlSync": false, - "type": "textbox" - }, - { - "allValue": "info|error", - "current": { - "selected": false, - "text": "All", - "value": "$__all" - }, - "hide": 0, - "includeAll": true, - "multi": false, - "name": "level", - "options": [ - { - "selected": true, - "text": "All", - "value": "$__all" - }, - { - "selected": false, - "text": "info", - "value": "info" - }, - { - "selected": false, - "text": "error", - "value": "error" - } - ], - "query": "info,error", - "queryValue": "", - "skipUrlSync": false, - "type": "custom" - }, - { - "allValue": ".+", - "current": { - "selected": true, - "text": [ - "All" - ], - "value": [ - "$__all" - ] - }, - "datasource": "${DS_LOKI}", - "definition": "label_values(app)", - "hide": 0, - "includeAll": true, - "multi": true, - "name": "controller", - "options": [], - "query": "label_values(app)", - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "sort": 0, - "type": "query" - }, - { - "allValue": ".+", - "current": { - "selected": true, - "text": [ - "flux-system" - ], - "value": [ - "flux-system" - ] - }, - "datasource": "${DS_LOKI}", - "definition": "label_values(namespace)", - "hide": 0, - "includeAll": true, - "multi": true, - "name": "namespace", - "options": [], - "query": "label_values(namespace)", - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "sort": 0, - "type": "query" - }, - { - "allValue": ".+", - "current": { - "selected": false, - "text": "All", - "value": "$__all" - }, - "datasource": "${DS_LOKI}", - "definition": "label_values(stream)", - "hide": 0, - "includeAll": true, - "multi": true, - "name": "stream", - "options": [], - "query": "label_values(stream)", - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "sort": 0, - "type": "query" - }, - { - "current": { - "selected": false, - "text": "Loki", - "value": "Loki" - }, - "hide": 0, - "includeAll": false, - "label": "Datasource", - "multi": false, - "name": "DS_LOKI", - "options": [], - "query": "loki", - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "type": "datasource" - } - ] - }, - "time": { - "from": "now-6h", - "to": "now" - }, - "timepicker": {}, - "timezone": "", - "title": "Flux Logs", - "uid": "flux-logs", - "version": 2 -} diff --git a/manifests/monitoring/monitoring-config/kustomization.yaml b/manifests/monitoring/monitoring-config/kustomization.yaml deleted file mode 100644 index 29dcad85..00000000 --- a/manifests/monitoring/monitoring-config/kustomization.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: kustomize.config.k8s.io/v1beta1 -kind: Kustomization -namespace: monitoring -resources: - - podmonitor.yaml -configMapGenerator: - - name: flux-grafana-dashboards - files: - - dashboards/control-plane.json - - dashboards/cluster.json - - dashboards/logs.json - options: - labels: - grafana_dashboard: "1" - app.kubernetes.io/part-of: flux - app.kubernetes.io/component: monitoring diff --git a/manifests/monitoring/monitoring-config/podmonitor.yaml b/manifests/monitoring/monitoring-config/podmonitor.yaml deleted file mode 100644 index 5e4b3a8c..00000000 --- a/manifests/monitoring/monitoring-config/podmonitor.yaml +++ /dev/null @@ -1,30 +0,0 @@ -apiVersion: monitoring.coreos.com/v1 -kind: PodMonitor -metadata: - name: flux-system - namespace: flux-system - labels: - app.kubernetes.io/part-of: flux - app.kubernetes.io/component: monitoring -spec: - namespaceSelector: - matchNames: - - flux-system - selector: - matchExpressions: - - key: app - operator: In - values: - - helm-controller - - source-controller - - kustomize-controller - - notification-controller - - image-automation-controller - - image-reflector-controller - podMetricsEndpoints: - - port: http-prom - relabelings: - # https://github.com/prometheus-operator/prometheus-operator/issues/4816 - - sourceLabels: [__meta_kubernetes_pod_phase] - action: keep - regex: Running From 056189265b268ace778b1c906dd1c003b53cdb2d Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 13 Dec 2023 17:22:03 +0200 Subject: [PATCH 718/818] Remove deprecated monitoring from e2e Signed-off-by: Stefan Prodan --- .github/workflows/e2e-arm64.yaml | 27 --------------------------- 1 file changed, 27 deletions(-) diff --git a/.github/workflows/e2e-arm64.yaml b/.github/workflows/e2e-arm64.yaml index 17ea084e..b22e64da 100644 --- a/.github/workflows/e2e-arm64.yaml +++ b/.github/workflows/e2e-arm64.yaml @@ -63,33 +63,6 @@ jobs: kubectl -n flux-system wait kustomization/tenants --for=condition=ready --timeout=5m kubectl -n apps wait kustomization/dev-team --for=condition=ready --timeout=1m kubectl -n apps wait helmrelease/podinfo --for=condition=ready --timeout=1m - - name: Run monitoring tests - # Keep this test in sync with https://fluxcd.io/flux/guides/monitoring/ - env: - KUBECONFIG: /tmp/${{ steps.prep.outputs.CLUSTER }} - run: | - ./bin/flux create source git flux-monitoring \ - --interval=30m \ - --url=https://github.com/fluxcd/flux2 \ - --branch=${GITHUB_REF#refs/heads/} - ./bin/flux create kustomization kube-prometheus-stack \ - --interval=1h \ - --prune \ - --source=flux-monitoring \ - --path="./manifests/monitoring/kube-prometheus-stack" \ - --health-check-timeout=5m \ - --wait - ./bin/flux create kustomization monitoring-config \ - --depends-on=kube-prometheus-stack \ - --interval=1h \ - --prune=true \ - --source=flux-monitoring \ - --path="./manifests/monitoring/monitoring-config" \ - --health-check-timeout=1m \ - --wait - kubectl -n flux-system wait kustomization/kube-prometheus-stack --for=condition=ready --timeout=5m - kubectl -n flux-system wait kustomization/monitoring-config --for=condition=ready --timeout=5m - kubectl -n monitoring wait helmrelease/kube-prometheus-stack --for=condition=ready --timeout=1m - name: Debug failure if: failure() env: From 59e5f4c8876b17fd1ce8784dc0c43147de0420c4 Mon Sep 17 00:00:00 2001 From: Sven Hoexter Date: Thu, 14 Dec 2023 11:14:22 +0100 Subject: [PATCH 719/818] Remove duplicate part of the reconcile hr --reset help message Signed-off-by: Sven Hoexter --- cmd/flux/reconcile_helmrelease.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/flux/reconcile_helmrelease.go b/cmd/flux/reconcile_helmrelease.go index 14414acd..1a1a5769 100644 --- a/cmd/flux/reconcile_helmrelease.go +++ b/cmd/flux/reconcile_helmrelease.go @@ -55,7 +55,7 @@ var rhrArgs reconcileHelmReleaseFlags func init() { reconcileHrCmd.Flags().BoolVar(&rhrArgs.syncHrWithSource, "with-source", false, "reconcile HelmRelease source") reconcileHrCmd.Flags().BoolVar(&rhrArgs.syncForce, "force", false, "force a one-off install or upgrade of the HelmRelease resource") - reconcileHrCmd.Flags().BoolVar(&rhrArgs.syncReset, "reset", false, "reset the reset the failure count for this HelmRelease resource") + reconcileHrCmd.Flags().BoolVar(&rhrArgs.syncReset, "reset", false, "reset the failure count for this HelmRelease resource") reconcileCmd.AddCommand(reconcileHrCmd) } From 0cf855f16f1724d8c6764ec05ad0f0ba50f9ea15 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Thu, 14 Dec 2023 21:39:23 +0200 Subject: [PATCH 720/818] Run conformance tests for Kubernetes v1.29.0 Signed-off-by: Stefan Prodan --- .github/workflows/e2e-arm64.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/e2e-arm64.yaml b/.github/workflows/e2e-arm64.yaml index b22e64da..34a18134 100644 --- a/.github/workflows/e2e-arm64.yaml +++ b/.github/workflows/e2e-arm64.yaml @@ -17,7 +17,7 @@ jobs: matrix: # Keep this list up-to-date with https://endoflife.date/kubernetes # Check which versions are available on DockerHub with 'crane ls kindest/node' - KUBERNETES_VERSION: [ 1.26.6, 1.27.3, 1.28.0 ] + KUBERNETES_VERSION: [ 1.26.6, 1.27.3, 1.28.0, 1.29.0 ] fail-fast: false steps: - name: Checkout From 9ec8e717ae02eeca62541a09b841c23cf1072353 Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Fri, 15 Dec 2023 09:07:50 +0000 Subject: [PATCH 721/818] Update toolkit components - helm-controller to v0.37.1 https://github.com/fluxcd/helm-controller/blob/v0.37.1/CHANGELOG.md - kustomize-controller to v1.2.1 https://github.com/fluxcd/kustomize-controller/blob/v1.2.1/CHANGELOG.md - source-controller to v1.2.3 https://github.com/fluxcd/source-controller/blob/v1.2.3/CHANGELOG.md - notification-controller to v1.2.3 https://github.com/fluxcd/notification-controller/blob/v1.2.3/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 8 ++++---- go.sum | 16 ++++++++-------- .../bases/helm-controller/kustomization.yaml | 4 ++-- .../kustomize-controller/kustomization.yaml | 4 ++-- .../notification-controller/kustomization.yaml | 4 ++-- .../bases/source-controller/kustomization.yaml | 4 ++-- manifests/crds/kustomization.yaml | 8 ++++---- 7 files changed, 24 insertions(+), 24 deletions(-) diff --git a/go.mod b/go.mod index 10cac246..5795605c 100644 --- a/go.mod +++ b/go.mod @@ -12,11 +12,11 @@ require ( github.com/distribution/distribution/v3 v3.0.0-20230823142118-4f7424c8eb41 github.com/fluxcd/cli-utils v0.36.0-flux.2 github.com/fluxcd/go-git-providers v0.19.2 - github.com/fluxcd/helm-controller/api v0.37.0 + github.com/fluxcd/helm-controller/api v0.37.1 github.com/fluxcd/image-automation-controller/api v0.37.0 github.com/fluxcd/image-reflector-controller/api v0.31.1 - github.com/fluxcd/kustomize-controller/api v1.2.0 - github.com/fluxcd/notification-controller/api v1.2.2 + github.com/fluxcd/kustomize-controller/api v1.2.1 + github.com/fluxcd/notification-controller/api v1.2.3 github.com/fluxcd/pkg/apis/event v0.6.0 github.com/fluxcd/pkg/apis/meta v1.2.0 github.com/fluxcd/pkg/git v0.16.0 @@ -29,7 +29,7 @@ require ( github.com/fluxcd/pkg/ssh v0.10.0 github.com/fluxcd/pkg/tar v0.4.0 github.com/fluxcd/pkg/version v0.2.2 - github.com/fluxcd/source-controller/api v1.2.2 + github.com/fluxcd/source-controller/api v1.2.3 github.com/go-git/go-git/v5 v5.11.0 github.com/go-logr/logr v1.3.0 github.com/gonvenience/bunt v1.3.5 diff --git a/go.sum b/go.sum index 8d05b47c..8d9d9403 100644 --- a/go.sum +++ b/go.sum @@ -131,16 +131,16 @@ github.com/fluxcd/cli-utils v0.36.0-flux.2/go.mod h1:TQtgRf9OjQBzE5FJ9UDV6WNz9Po github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= github.com/fluxcd/go-git-providers v0.19.2 h1:G/O0z4WUlgChV6o3YrZ1GP1ZgZSd8ZJWACIW0ICqxMo= github.com/fluxcd/go-git-providers v0.19.2/go.mod h1:V44pmhFqoZ8heFJEBU1PS+OHTwLWOfoj0nKpFAqik6Y= -github.com/fluxcd/helm-controller/api v0.37.0 h1:B14z4nJXmLhtEwQn681bIDy3V1o7USI3X22BuIIsrOw= -github.com/fluxcd/helm-controller/api v0.37.0/go.mod h1:BuXZhAX9blQviil6yUN5zNM4RB753yhyBTJXxXff7Mo= +github.com/fluxcd/helm-controller/api v0.37.1 h1:cDUX79wGpNoSrDgirQswdN8X6gKmWVrpMMBn1BKdXAc= +github.com/fluxcd/helm-controller/api v0.37.1/go.mod h1:BuXZhAX9blQviil6yUN5zNM4RB753yhyBTJXxXff7Mo= github.com/fluxcd/image-automation-controller/api v0.37.0 h1:0L8kzX3zaYfg4wQ2Mx3G56atLMNeDGjy5qMGP4tDKRs= github.com/fluxcd/image-automation-controller/api v0.37.0/go.mod h1:B2EbmiY69mE2bGOENPNUXr6klwrVe7FwVoB2iE1q08E= github.com/fluxcd/image-reflector-controller/api v0.31.1 h1:nc44G0JjLgSvqglJSiXQJZcrRw+eY01j7fHRUDB3FMw= github.com/fluxcd/image-reflector-controller/api v0.31.1/go.mod h1:KopMbC92Cw2ypZZeMytzTLr3EfOj2hoL6MizrdpBDhc= -github.com/fluxcd/kustomize-controller/api v1.2.0 h1:kXlZUl5QztIIrqceZLBYF+f3am41B47uXgVw8WlnuMY= -github.com/fluxcd/kustomize-controller/api v1.2.0/go.mod h1:0Kgc4uYnr5jCm4H8JwArkR0v4WTmXeX/9KgoDbxluVc= -github.com/fluxcd/notification-controller/api v1.2.2 h1:BUuVkYxrXzpsdCGh76Tiu//6dffLFo10KmX7MaVeZ64= -github.com/fluxcd/notification-controller/api v1.2.2/go.mod h1:A0VkH3mswQAeGKsmzq81jAUN+zNJt9SPXjwe8mvnnaw= +github.com/fluxcd/kustomize-controller/api v1.2.1 h1:+WgQOU7jpqz9bA4djPWmaeYAp9cG7c/TdcIYku3Jrzk= +github.com/fluxcd/kustomize-controller/api v1.2.1/go.mod h1:0Kgc4uYnr5jCm4H8JwArkR0v4WTmXeX/9KgoDbxluVc= +github.com/fluxcd/notification-controller/api v1.2.3 h1:vXVMg2PmTjmRC5+ULZfbmBEm/CsJaM9yjNJzRdI0JMs= +github.com/fluxcd/notification-controller/api v1.2.3/go.mod h1:A0VkH3mswQAeGKsmzq81jAUN+zNJt9SPXjwe8mvnnaw= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= github.com/fluxcd/pkg/apis/event v0.6.0 h1:AUaeee1CGWb65BLqVximHXG8Gcu6vWuYONIq6tVpjgo= @@ -170,8 +170,8 @@ github.com/fluxcd/pkg/tar v0.4.0 h1:SuXpfXBIcSJ5R/yqQi2CBxBmV/i/LH0agqNAh2PWBZg= github.com/fluxcd/pkg/tar v0.4.0/go.mod h1:SyJBaQvuv2VA/rv4d1OHhCV6R8+9QKc9np193EzNHBc= github.com/fluxcd/pkg/version v0.2.2 h1:ZpVXECeLA5hIQMft11iLp6gN3cKcz6UNuVTQPw/bRdI= github.com/fluxcd/pkg/version v0.2.2/go.mod h1:NGnh/no8S6PyfCDxRFrPY3T5BUnqP48MxfxNRU0z8C0= -github.com/fluxcd/source-controller/api v1.2.2 h1:OUivb1UHDmY8+hlxjRx3k8i1w3jMSytdOYRMfmeeZhY= -github.com/fluxcd/source-controller/api v1.2.2/go.mod h1:5gaIVVH7hgb8p3HKFp8P6hGmZEC8fKSt4EcrG3g5vZI= +github.com/fluxcd/source-controller/api v1.2.3 h1:71mXv3Qg9HEhcpqOq1ObmoE+P/HuZNaAvxfI7dqZMo8= +github.com/fluxcd/source-controller/api v1.2.3/go.mod h1:5gaIVVH7hgb8p3HKFp8P6hGmZEC8fKSt4EcrG3g5vZI= github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY= diff --git a/manifests/bases/helm-controller/kustomization.yaml b/manifests/bases/helm-controller/kustomization.yaml index ec49cbbe..66a1c74d 100644 --- a/manifests/bases/helm-controller/kustomization.yaml +++ b/manifests/bases/helm-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/helm-controller/releases/download/v0.37.0/helm-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.37.0/helm-controller.deployment.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.37.1/helm-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.37.1/helm-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/kustomize-controller/kustomization.yaml b/manifests/bases/kustomize-controller/kustomization.yaml index a509f9ad..c25d9209 100644 --- a/manifests/bases/kustomize-controller/kustomization.yaml +++ b/manifests/bases/kustomize-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/kustomize-controller/releases/download/v1.2.0/kustomize-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v1.2.0/kustomize-controller.deployment.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v1.2.1/kustomize-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v1.2.1/kustomize-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/notification-controller/kustomization.yaml b/manifests/bases/notification-controller/kustomization.yaml index 914c2953..af3abbc1 100644 --- a/manifests/bases/notification-controller/kustomization.yaml +++ b/manifests/bases/notification-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/notification-controller/releases/download/v1.2.2/notification-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v1.2.2/notification-controller.deployment.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v1.2.3/notification-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v1.2.3/notification-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index a01c739b..538fc18b 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v1.2.2/source-controller.crds.yaml -- https://github.com/fluxcd/source-controller/releases/download/v1.2.2/source-controller.deployment.yaml +- https://github.com/fluxcd/source-controller/releases/download/v1.2.3/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v1.2.3/source-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index 483ee668..a51adb3e 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -1,9 +1,9 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v1.2.2/source-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v1.2.0/kustomize-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.37.0/helm-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v1.2.2/notification-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v1.2.3/source-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v1.2.1/kustomize-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.37.1/helm-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v1.2.3/notification-controller.crds.yaml - https://github.com/fluxcd/image-reflector-controller/releases/download/v0.31.1/image-reflector-controller.crds.yaml - https://github.com/fluxcd/image-automation-controller/releases/download/v0.37.0/image-automation-controller.crds.yaml From 0e75d96911c1b64d58862d50f99860ac1d092e7c Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Fri, 15 Dec 2023 10:47:02 +0100 Subject: [PATCH 722/818] tests: update API dependencies - github.com/fluxcd/helm-controller/api to v0.37.1 - github.com/fluxcd/kustomize-controller/api to v1.2.1 - github.com/fluxcd/notification-controller/api to v1.2.3 - github.com/fluxcd/source-controller/api to v1.2.3 Signed-off-by: Hidde Beydals --- tests/azure/go.mod | 8 ++++---- tests/azure/go.sum | 16 ++++++++-------- tests/integration/go.mod | 8 ++++---- tests/integration/go.sum | 16 ++++++++-------- 4 files changed, 24 insertions(+), 24 deletions(-) diff --git a/tests/azure/go.mod b/tests/azure/go.mod index bbf5e59f..d5d48110 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -8,16 +8,16 @@ replace gopkg.in/yaml.v3 => gopkg.in/yaml.v3 v3.0.1 require ( github.com/Azure/azure-event-hubs-go/v3 v3.6.1 github.com/chainguard-dev/git-urls v1.0.2 - github.com/fluxcd/helm-controller/api v0.37.0 + github.com/fluxcd/helm-controller/api v0.37.1 github.com/fluxcd/image-automation-controller/api v0.37.0 github.com/fluxcd/image-reflector-controller/api v0.31.1 - github.com/fluxcd/kustomize-controller/api v1.2.0 - github.com/fluxcd/notification-controller/api v1.2.2 + github.com/fluxcd/kustomize-controller/api v1.2.1 + github.com/fluxcd/notification-controller/api v1.2.3 github.com/fluxcd/pkg/apis/event v0.6.0 github.com/fluxcd/pkg/apis/meta v1.2.0 github.com/fluxcd/pkg/git v0.16.0 github.com/fluxcd/pkg/git/gogit v0.16.1 - github.com/fluxcd/source-controller/api v1.2.2 + github.com/fluxcd/source-controller/api v1.2.3 github.com/go-git/go-git/v5 v5.11.0 github.com/hashicorp/hc-install v0.5.2 github.com/hashicorp/terraform-exec v0.18.1 diff --git a/tests/azure/go.sum b/tests/azure/go.sum index c0d9b588..a6ab1d16 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -67,16 +67,16 @@ github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FM github.com/evanphx/json-patch/v5 v5.7.0 h1:nJqP7uwL84RJInrohHfW0Fx3awjbm8qZeFv0nW9SYGc= github.com/evanphx/json-patch/v5 v5.7.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ= github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= -github.com/fluxcd/helm-controller/api v0.37.0 h1:B14z4nJXmLhtEwQn681bIDy3V1o7USI3X22BuIIsrOw= -github.com/fluxcd/helm-controller/api v0.37.0/go.mod h1:BuXZhAX9blQviil6yUN5zNM4RB753yhyBTJXxXff7Mo= +github.com/fluxcd/helm-controller/api v0.37.1 h1:cDUX79wGpNoSrDgirQswdN8X6gKmWVrpMMBn1BKdXAc= +github.com/fluxcd/helm-controller/api v0.37.1/go.mod h1:BuXZhAX9blQviil6yUN5zNM4RB753yhyBTJXxXff7Mo= github.com/fluxcd/image-automation-controller/api v0.37.0 h1:0L8kzX3zaYfg4wQ2Mx3G56atLMNeDGjy5qMGP4tDKRs= github.com/fluxcd/image-automation-controller/api v0.37.0/go.mod h1:B2EbmiY69mE2bGOENPNUXr6klwrVe7FwVoB2iE1q08E= github.com/fluxcd/image-reflector-controller/api v0.31.1 h1:nc44G0JjLgSvqglJSiXQJZcrRw+eY01j7fHRUDB3FMw= github.com/fluxcd/image-reflector-controller/api v0.31.1/go.mod h1:KopMbC92Cw2ypZZeMytzTLr3EfOj2hoL6MizrdpBDhc= -github.com/fluxcd/kustomize-controller/api v1.2.0 h1:kXlZUl5QztIIrqceZLBYF+f3am41B47uXgVw8WlnuMY= -github.com/fluxcd/kustomize-controller/api v1.2.0/go.mod h1:0Kgc4uYnr5jCm4H8JwArkR0v4WTmXeX/9KgoDbxluVc= -github.com/fluxcd/notification-controller/api v1.2.2 h1:BUuVkYxrXzpsdCGh76Tiu//6dffLFo10KmX7MaVeZ64= -github.com/fluxcd/notification-controller/api v1.2.2/go.mod h1:A0VkH3mswQAeGKsmzq81jAUN+zNJt9SPXjwe8mvnnaw= +github.com/fluxcd/kustomize-controller/api v1.2.1 h1:+WgQOU7jpqz9bA4djPWmaeYAp9cG7c/TdcIYku3Jrzk= +github.com/fluxcd/kustomize-controller/api v1.2.1/go.mod h1:0Kgc4uYnr5jCm4H8JwArkR0v4WTmXeX/9KgoDbxluVc= +github.com/fluxcd/notification-controller/api v1.2.3 h1:vXVMg2PmTjmRC5+ULZfbmBEm/CsJaM9yjNJzRdI0JMs= +github.com/fluxcd/notification-controller/api v1.2.3/go.mod h1:A0VkH3mswQAeGKsmzq81jAUN+zNJt9SPXjwe8mvnnaw= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= github.com/fluxcd/pkg/apis/event v0.6.0 h1:AUaeee1CGWb65BLqVximHXG8Gcu6vWuYONIq6tVpjgo= @@ -94,8 +94,8 @@ github.com/fluxcd/pkg/ssh v0.10.0 h1:JFz0u/CPEf3hXvmrEvUvXsc70eKh8xphqjXxZuSby9g github.com/fluxcd/pkg/ssh v0.10.0/go.mod h1:1lFTj3MhU9xQuaJ5PJJoh/FyRYzK54ll9NY/s2KqOZM= github.com/fluxcd/pkg/version v0.2.2 h1:ZpVXECeLA5hIQMft11iLp6gN3cKcz6UNuVTQPw/bRdI= github.com/fluxcd/pkg/version v0.2.2/go.mod h1:NGnh/no8S6PyfCDxRFrPY3T5BUnqP48MxfxNRU0z8C0= -github.com/fluxcd/source-controller/api v1.2.2 h1:OUivb1UHDmY8+hlxjRx3k8i1w3jMSytdOYRMfmeeZhY= -github.com/fluxcd/source-controller/api v1.2.2/go.mod h1:5gaIVVH7hgb8p3HKFp8P6hGmZEC8fKSt4EcrG3g5vZI= +github.com/fluxcd/source-controller/api v1.2.3 h1:71mXv3Qg9HEhcpqOq1ObmoE+P/HuZNaAvxfI7dqZMo8= +github.com/fluxcd/source-controller/api v1.2.3/go.mod h1:5gaIVVH7hgb8p3HKFp8P6hGmZEC8fKSt4EcrG3g5vZI= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY= diff --git a/tests/integration/go.mod b/tests/integration/go.mod index c7d1600f..d3fd0528 100644 --- a/tests/integration/go.mod +++ b/tests/integration/go.mod @@ -6,17 +6,17 @@ require ( cloud.google.com/go/pubsub v1.31.0 github.com/Azure/azure-event-hubs-go/v3 v3.6.0 github.com/chainguard-dev/git-urls v1.0.2 - github.com/fluxcd/helm-controller/api v0.37.0 + github.com/fluxcd/helm-controller/api v0.37.1 github.com/fluxcd/image-automation-controller/api v0.37.0 github.com/fluxcd/image-reflector-controller/api v0.31.1 - github.com/fluxcd/kustomize-controller/api v1.2.0 - github.com/fluxcd/notification-controller/api v1.2.2 + github.com/fluxcd/kustomize-controller/api v1.2.1 + github.com/fluxcd/notification-controller/api v1.2.3 github.com/fluxcd/pkg/apis/event v0.6.0 github.com/fluxcd/pkg/apis/meta v1.2.0 github.com/fluxcd/pkg/git v0.16.0 github.com/fluxcd/pkg/git/gogit v0.16.1 github.com/fluxcd/pkg/runtime v0.43.2 - github.com/fluxcd/source-controller/api v1.2.1 + github.com/fluxcd/source-controller/api v1.2.3 github.com/fluxcd/test-infra/tftestenv v0.0.0-20230831142147-627bca8e7916 github.com/go-git/go-git/v5 v5.11.0 github.com/google/go-containerregistry v0.16.1 diff --git a/tests/integration/go.sum b/tests/integration/go.sum index f353c203..64d2bc37 100644 --- a/tests/integration/go.sum +++ b/tests/integration/go.sum @@ -122,16 +122,16 @@ github.com/evanphx/json-patch/v5 v5.7.0 h1:nJqP7uwL84RJInrohHfW0Fx3awjbm8qZeFv0n github.com/evanphx/json-patch/v5 v5.7.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= -github.com/fluxcd/helm-controller/api v0.37.0 h1:B14z4nJXmLhtEwQn681bIDy3V1o7USI3X22BuIIsrOw= -github.com/fluxcd/helm-controller/api v0.37.0/go.mod h1:BuXZhAX9blQviil6yUN5zNM4RB753yhyBTJXxXff7Mo= +github.com/fluxcd/helm-controller/api v0.37.1 h1:cDUX79wGpNoSrDgirQswdN8X6gKmWVrpMMBn1BKdXAc= +github.com/fluxcd/helm-controller/api v0.37.1/go.mod h1:BuXZhAX9blQviil6yUN5zNM4RB753yhyBTJXxXff7Mo= github.com/fluxcd/image-automation-controller/api v0.37.0 h1:0L8kzX3zaYfg4wQ2Mx3G56atLMNeDGjy5qMGP4tDKRs= github.com/fluxcd/image-automation-controller/api v0.37.0/go.mod h1:B2EbmiY69mE2bGOENPNUXr6klwrVe7FwVoB2iE1q08E= github.com/fluxcd/image-reflector-controller/api v0.31.1 h1:nc44G0JjLgSvqglJSiXQJZcrRw+eY01j7fHRUDB3FMw= github.com/fluxcd/image-reflector-controller/api v0.31.1/go.mod h1:KopMbC92Cw2ypZZeMytzTLr3EfOj2hoL6MizrdpBDhc= -github.com/fluxcd/kustomize-controller/api v1.2.0 h1:kXlZUl5QztIIrqceZLBYF+f3am41B47uXgVw8WlnuMY= -github.com/fluxcd/kustomize-controller/api v1.2.0/go.mod h1:0Kgc4uYnr5jCm4H8JwArkR0v4WTmXeX/9KgoDbxluVc= -github.com/fluxcd/notification-controller/api v1.2.2 h1:BUuVkYxrXzpsdCGh76Tiu//6dffLFo10KmX7MaVeZ64= -github.com/fluxcd/notification-controller/api v1.2.2/go.mod h1:A0VkH3mswQAeGKsmzq81jAUN+zNJt9SPXjwe8mvnnaw= +github.com/fluxcd/kustomize-controller/api v1.2.1 h1:+WgQOU7jpqz9bA4djPWmaeYAp9cG7c/TdcIYku3Jrzk= +github.com/fluxcd/kustomize-controller/api v1.2.1/go.mod h1:0Kgc4uYnr5jCm4H8JwArkR0v4WTmXeX/9KgoDbxluVc= +github.com/fluxcd/notification-controller/api v1.2.3 h1:vXVMg2PmTjmRC5+ULZfbmBEm/CsJaM9yjNJzRdI0JMs= +github.com/fluxcd/notification-controller/api v1.2.3/go.mod h1:A0VkH3mswQAeGKsmzq81jAUN+zNJt9SPXjwe8mvnnaw= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= github.com/fluxcd/pkg/apis/event v0.6.0 h1:AUaeee1CGWb65BLqVximHXG8Gcu6vWuYONIq6tVpjgo= @@ -151,8 +151,8 @@ github.com/fluxcd/pkg/ssh v0.10.0 h1:JFz0u/CPEf3hXvmrEvUvXsc70eKh8xphqjXxZuSby9g github.com/fluxcd/pkg/ssh v0.10.0/go.mod h1:1lFTj3MhU9xQuaJ5PJJoh/FyRYzK54ll9NY/s2KqOZM= github.com/fluxcd/pkg/version v0.2.2 h1:ZpVXECeLA5hIQMft11iLp6gN3cKcz6UNuVTQPw/bRdI= github.com/fluxcd/pkg/version v0.2.2/go.mod h1:NGnh/no8S6PyfCDxRFrPY3T5BUnqP48MxfxNRU0z8C0= -github.com/fluxcd/source-controller/api v1.2.1 h1:zWRfwMB/BkV0A/duZQwHEcrE/abWJQt7DUgYTzn4IzM= -github.com/fluxcd/source-controller/api v1.2.1/go.mod h1:n+PMCJXl/AYCjWHn5N/MUuoIFKfDg4kCDviFIa7fDvI= +github.com/fluxcd/source-controller/api v1.2.3 h1:71mXv3Qg9HEhcpqOq1ObmoE+P/HuZNaAvxfI7dqZMo8= +github.com/fluxcd/source-controller/api v1.2.3/go.mod h1:5gaIVVH7hgb8p3HKFp8P6hGmZEC8fKSt4EcrG3g5vZI= github.com/fluxcd/test-infra/tftestenv v0.0.0-20230831142147-627bca8e7916 h1:w9UGknpfAGbiObQALZiuWYGeriAU1wKCFTmI2tj/96M= github.com/fluxcd/test-infra/tftestenv v0.0.0-20230831142147-627bca8e7916/go.mod h1:liFlLEXgambGVdWSJ4JzbIHf1Vjpp1HwUyPazPIVZug= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= From 9db8c4a990cccad32afba5ad8eef57a0f4e6bbbf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Dec 2023 00:08:30 +0000 Subject: [PATCH 723/818] build(deps): bump golang.org/x/crypto in /tests/azure Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.16.0 to 0.17.0. - [Commits](https://github.com/golang/crypto/compare/v0.16.0...v0.17.0) --- updated-dependencies: - dependency-name: golang.org/x/crypto dependency-type: indirect ... Signed-off-by: dependabot[bot] --- tests/azure/go.mod | 2 +- tests/azure/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/azure/go.mod b/tests/azure/go.mod index d5d48110..785f0760 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -98,7 +98,7 @@ require ( github.com/skeema/knownhosts v1.2.1 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect github.com/zclconf/go-cty v1.13.0 // indirect - golang.org/x/crypto v0.16.0 // indirect + golang.org/x/crypto v0.17.0 // indirect golang.org/x/mod v0.14.0 // indirect golang.org/x/net v0.19.0 // indirect golang.org/x/oauth2 v0.14.0 // indirect diff --git a/tests/azure/go.sum b/tests/azure/go.sum index a6ab1d16..e124edf4 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -258,8 +258,8 @@ golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= -golang.org/x/crypto v0.16.0 h1:mMMrFzRSCF0GvB7Ne27XVtVAaXLrPmgPC7/v0tkwHaY= -golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= +golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k= +golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e h1:+WEEuIdZHnUeJJmEUjyYC2gfUMj69yZXw17EnHg/otA= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= From 284dfc05c60f7fe4faf7d160778b3c0bf6ab6d6e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Dec 2023 08:40:35 +0000 Subject: [PATCH 724/818] build(deps): bump golang.org/x/crypto in /tests/integration Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.16.0 to 0.17.0. - [Commits](https://github.com/golang/crypto/compare/v0.16.0...v0.17.0) --- updated-dependencies: - dependency-name: golang.org/x/crypto dependency-type: indirect ... Signed-off-by: dependabot[bot] --- tests/integration/go.mod | 2 +- tests/integration/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/integration/go.mod b/tests/integration/go.mod index d3fd0528..892e5d39 100644 --- a/tests/integration/go.mod +++ b/tests/integration/go.mod @@ -115,7 +115,7 @@ require ( github.com/xanzy/ssh-agent v0.3.3 // indirect github.com/zclconf/go-cty v1.13.0 // indirect go.opencensus.io v0.24.0 // indirect - golang.org/x/crypto v0.16.0 // indirect + golang.org/x/crypto v0.17.0 // indirect golang.org/x/mod v0.14.0 // indirect golang.org/x/net v0.19.0 // indirect golang.org/x/oauth2 v0.15.0 // indirect diff --git a/tests/integration/go.sum b/tests/integration/go.sum index 64d2bc37..7268cdd3 100644 --- a/tests/integration/go.sum +++ b/tests/integration/go.sum @@ -397,8 +397,8 @@ golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= -golang.org/x/crypto v0.16.0 h1:mMMrFzRSCF0GvB7Ne27XVtVAaXLrPmgPC7/v0tkwHaY= -golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= +golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k= +golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20231206192017-f3f8817b8deb h1:c0vyKkb6yr3KR7jEfJaOSv4lG7xPkbN6r52aJz1d8a8= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= From 2935bea6a230ca88ee454b367274da0242bf9290 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Dec 2023 08:43:01 +0000 Subject: [PATCH 725/818] build(deps): bump golang.org/x/crypto from 0.16.0 to 0.17.0 Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.16.0 to 0.17.0. - [Commits](https://github.com/golang/crypto/compare/v0.16.0...v0.17.0) --- updated-dependencies: - dependency-name: golang.org/x/crypto dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 5795605c..4e8695f2 100644 --- a/go.mod +++ b/go.mod @@ -47,7 +47,7 @@ require ( github.com/spf13/cobra v1.8.0 github.com/spf13/pflag v1.0.5 github.com/theckman/yacspin v0.13.12 - golang.org/x/crypto v0.16.0 + golang.org/x/crypto v0.17.0 golang.org/x/term v0.15.0 golang.org/x/text v0.14.0 k8s.io/api v0.28.4 diff --git a/go.sum b/go.sum index 8d9d9403..36b06375 100644 --- a/go.sum +++ b/go.sum @@ -475,8 +475,8 @@ golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= -golang.org/x/crypto v0.16.0 h1:mMMrFzRSCF0GvB7Ne27XVtVAaXLrPmgPC7/v0tkwHaY= -golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= +golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k= +golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= golang.org/x/exp v0.0.0-20231206192017-f3f8817b8deb h1:c0vyKkb6yr3KR7jEfJaOSv4lG7xPkbN6r52aJz1d8a8= golang.org/x/exp v0.0.0-20231206192017-f3f8817b8deb/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= From 4f20be427e5bb394f59c68aa8cf0d8a0812aac57 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Dec 2023 08:52:20 +0000 Subject: [PATCH 726/818] build(deps): bump the ci group with 3 updates Bumps the ci group with 3 updates: [korthout/backport-action](https://github.com/korthout/backport-action), [actions/upload-artifact](https://github.com/actions/upload-artifact) and [sigstore/cosign-installer](https://github.com/sigstore/cosign-installer). Updates `korthout/backport-action` from 2.2.0 to 2.3.0 - [Release notes](https://github.com/korthout/backport-action/releases) - [Commits](https://github.com/korthout/backport-action/compare/b982d297e31f500652b2246cf26714796312bd23...addffea45a2f0b5682f1d5ba0506f45bc18bf174) Updates `actions/upload-artifact` from 3.1.3 to 4.0.0 - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/a8a3f3ad30e3422c9c7b888a15615d19a852ae32...c7d193f32edcb7bfad88892161225aeda64e9392) Updates `sigstore/cosign-installer` from 3.2.0 to 3.3.0 - [Release notes](https://github.com/sigstore/cosign-installer/releases) - [Commits](https://github.com/sigstore/cosign-installer/compare/1fc5bd396d372bee37d608f955b336615edf79c8...9614fae9e5c5eddabb09f90a270fcb487c9f7149) --- updated-dependencies: - dependency-name: korthout/backport-action dependency-type: direct:production update-type: version-update:semver-minor dependency-group: ci - dependency-name: actions/upload-artifact dependency-type: direct:production update-type: version-update:semver-major dependency-group: ci - dependency-name: sigstore/cosign-installer dependency-type: direct:production update-type: version-update:semver-minor dependency-group: ci ... Signed-off-by: dependabot[bot] --- .github/workflows/backport.yaml | 2 +- .github/workflows/ossf.yaml | 2 +- .github/workflows/release.yaml | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/backport.yaml b/.github/workflows/backport.yaml index d584e25f..54bd0682 100644 --- a/.github/workflows/backport.yaml +++ b/.github/workflows/backport.yaml @@ -17,7 +17,7 @@ jobs: with: ref: ${{ github.event.pull_request.head.sha }} - name: Create backport PRs - uses: korthout/backport-action@b982d297e31f500652b2246cf26714796312bd23 # v2.2.0 + uses: korthout/backport-action@addffea45a2f0b5682f1d5ba0506f45bc18bf174 # v2.3.0 # xref: https://github.com/korthout/backport-action#inputs with: # Use token to allow workflows to be triggered for the created PR diff --git a/.github/workflows/ossf.yaml b/.github/workflows/ossf.yaml index 1b343b7a..d1b80c1a 100644 --- a/.github/workflows/ossf.yaml +++ b/.github/workflows/ossf.yaml @@ -28,7 +28,7 @@ jobs: repo_token: ${{ secrets.GITHUB_TOKEN }} publish_results: true - name: Upload artifact - uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3.1.3 + uses: actions/upload-artifact@c7d193f32edcb7bfad88892161225aeda64e9392 # v4.0.0 with: name: SARIF file path: results.sarif diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index e936fc03..987ecb81 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -36,7 +36,7 @@ jobs: - name: Setup Syft uses: anchore/sbom-action/download-syft@5ecf649a417b8ae17dc8383dc32d46c03f2312df # v0.15.1 - name: Setup Cosign - uses: sigstore/cosign-installer@1fc5bd396d372bee37d608f955b336615edf79c8 # v3.2.0 + uses: sigstore/cosign-installer@9614fae9e5c5eddabb09f90a270fcb487c9f7149 # v3.3.0 - name: Setup Kustomize uses: fluxcd/pkg/actions/kustomize@main - name: Login to GitHub Container Registry @@ -155,7 +155,7 @@ jobs: --path="./flux-system" \ --source=${{ github.repositoryUrl }} \ --revision="${{ github.ref_name }}@sha1:${{ github.sha }}" - - uses: sigstore/cosign-installer@1fc5bd396d372bee37d608f955b336615edf79c8 # v3.2.0 + - uses: sigstore/cosign-installer@9614fae9e5c5eddabb09f90a270fcb487c9f7149 # v3.3.0 - name: Sign manifests env: COSIGN_EXPERIMENTAL: 1 From b93d4a4a17ae21e59d00604a18d6b0afb3aa7846 Mon Sep 17 00:00:00 2001 From: "Stuebinger, Bernd" <41049452+stuebingerb@users.noreply.github.com> Date: Tue, 19 Dec 2023 11:31:47 +0100 Subject: [PATCH 727/818] Fix typo in bootstrap_plain_git.go MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Bernd Stübinger <41049452+stuebingerb@users.noreply.github.com> --- pkg/bootstrap/bootstrap_plain_git.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/bootstrap/bootstrap_plain_git.go b/pkg/bootstrap/bootstrap_plain_git.go index 51a9d2dd..ceb503bc 100644 --- a/pkg/bootstrap/bootstrap_plain_git.go +++ b/pkg/bootstrap/bootstrap_plain_git.go @@ -454,7 +454,7 @@ func (b *PlainGitBootstrapper) ReportGitRepoHealth(ctx context.Context, options b.logger.Failuref(err.Error()) return fmt.Errorf("error while waiting for GitRepository to be ready: '%s'", err) } - b.logger.Successf("GitRepsoitory reconciled successfully") + b.logger.Successf("GitRepository reconciled successfully") return nil } func (b *PlainGitBootstrapper) ReportComponentsHealth(ctx context.Context, install install.Options, timeout time.Duration) error { From 954e682da89d5c8ffdcc376ffb4f34c41342e2a5 Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Tue, 19 Dec 2023 16:47:53 +0000 Subject: [PATCH 728/818] Update toolkit components - helm-controller to v0.37.2 https://github.com/fluxcd/helm-controller/blob/v0.37.2/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 2 +- go.sum | 4 ++-- manifests/bases/helm-controller/kustomization.yaml | 4 ++-- manifests/crds/kustomization.yaml | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index 4e8695f2..50eb3408 100644 --- a/go.mod +++ b/go.mod @@ -12,7 +12,7 @@ require ( github.com/distribution/distribution/v3 v3.0.0-20230823142118-4f7424c8eb41 github.com/fluxcd/cli-utils v0.36.0-flux.2 github.com/fluxcd/go-git-providers v0.19.2 - github.com/fluxcd/helm-controller/api v0.37.1 + github.com/fluxcd/helm-controller/api v0.37.2 github.com/fluxcd/image-automation-controller/api v0.37.0 github.com/fluxcd/image-reflector-controller/api v0.31.1 github.com/fluxcd/kustomize-controller/api v1.2.1 diff --git a/go.sum b/go.sum index 36b06375..0f005e51 100644 --- a/go.sum +++ b/go.sum @@ -131,8 +131,8 @@ github.com/fluxcd/cli-utils v0.36.0-flux.2/go.mod h1:TQtgRf9OjQBzE5FJ9UDV6WNz9Po github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= github.com/fluxcd/go-git-providers v0.19.2 h1:G/O0z4WUlgChV6o3YrZ1GP1ZgZSd8ZJWACIW0ICqxMo= github.com/fluxcd/go-git-providers v0.19.2/go.mod h1:V44pmhFqoZ8heFJEBU1PS+OHTwLWOfoj0nKpFAqik6Y= -github.com/fluxcd/helm-controller/api v0.37.1 h1:cDUX79wGpNoSrDgirQswdN8X6gKmWVrpMMBn1BKdXAc= -github.com/fluxcd/helm-controller/api v0.37.1/go.mod h1:BuXZhAX9blQviil6yUN5zNM4RB753yhyBTJXxXff7Mo= +github.com/fluxcd/helm-controller/api v0.37.2 h1:tkLezpRdqPDz7HoKHFu92sV+ppOCVDxkjFTh8/lpff8= +github.com/fluxcd/helm-controller/api v0.37.2/go.mod h1:BuXZhAX9blQviil6yUN5zNM4RB753yhyBTJXxXff7Mo= github.com/fluxcd/image-automation-controller/api v0.37.0 h1:0L8kzX3zaYfg4wQ2Mx3G56atLMNeDGjy5qMGP4tDKRs= github.com/fluxcd/image-automation-controller/api v0.37.0/go.mod h1:B2EbmiY69mE2bGOENPNUXr6klwrVe7FwVoB2iE1q08E= github.com/fluxcd/image-reflector-controller/api v0.31.1 h1:nc44G0JjLgSvqglJSiXQJZcrRw+eY01j7fHRUDB3FMw= diff --git a/manifests/bases/helm-controller/kustomization.yaml b/manifests/bases/helm-controller/kustomization.yaml index 66a1c74d..099cd240 100644 --- a/manifests/bases/helm-controller/kustomization.yaml +++ b/manifests/bases/helm-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/helm-controller/releases/download/v0.37.1/helm-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.37.1/helm-controller.deployment.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.37.2/helm-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.37.2/helm-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index a51adb3e..97e8cbcc 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -3,7 +3,7 @@ kind: Kustomization resources: - https://github.com/fluxcd/source-controller/releases/download/v1.2.3/source-controller.crds.yaml - https://github.com/fluxcd/kustomize-controller/releases/download/v1.2.1/kustomize-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.37.1/helm-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.37.2/helm-controller.crds.yaml - https://github.com/fluxcd/notification-controller/releases/download/v1.2.3/notification-controller.crds.yaml - https://github.com/fluxcd/image-reflector-controller/releases/download/v0.31.1/image-reflector-controller.crds.yaml - https://github.com/fluxcd/image-automation-controller/releases/download/v0.37.0/image-automation-controller.crds.yaml From 4b0cda68b1f3359c255b1f753522194ce6e596b9 Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Tue, 19 Dec 2023 18:10:05 +0100 Subject: [PATCH 729/818] Update helm-controller to v0.37.2 in tests Signed-off-by: Hidde Beydals --- tests/azure/go.mod | 2 +- tests/azure/go.sum | 4 ++-- tests/integration/go.mod | 2 +- tests/integration/go.sum | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/azure/go.mod b/tests/azure/go.mod index 785f0760..ac800f0a 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -8,7 +8,7 @@ replace gopkg.in/yaml.v3 => gopkg.in/yaml.v3 v3.0.1 require ( github.com/Azure/azure-event-hubs-go/v3 v3.6.1 github.com/chainguard-dev/git-urls v1.0.2 - github.com/fluxcd/helm-controller/api v0.37.1 + github.com/fluxcd/helm-controller/api v0.37.2 github.com/fluxcd/image-automation-controller/api v0.37.0 github.com/fluxcd/image-reflector-controller/api v0.31.1 github.com/fluxcd/kustomize-controller/api v1.2.1 diff --git a/tests/azure/go.sum b/tests/azure/go.sum index e124edf4..5e184b93 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -67,8 +67,8 @@ github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FM github.com/evanphx/json-patch/v5 v5.7.0 h1:nJqP7uwL84RJInrohHfW0Fx3awjbm8qZeFv0nW9SYGc= github.com/evanphx/json-patch/v5 v5.7.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ= github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= -github.com/fluxcd/helm-controller/api v0.37.1 h1:cDUX79wGpNoSrDgirQswdN8X6gKmWVrpMMBn1BKdXAc= -github.com/fluxcd/helm-controller/api v0.37.1/go.mod h1:BuXZhAX9blQviil6yUN5zNM4RB753yhyBTJXxXff7Mo= +github.com/fluxcd/helm-controller/api v0.37.2 h1:tkLezpRdqPDz7HoKHFu92sV+ppOCVDxkjFTh8/lpff8= +github.com/fluxcd/helm-controller/api v0.37.2/go.mod h1:BuXZhAX9blQviil6yUN5zNM4RB753yhyBTJXxXff7Mo= github.com/fluxcd/image-automation-controller/api v0.37.0 h1:0L8kzX3zaYfg4wQ2Mx3G56atLMNeDGjy5qMGP4tDKRs= github.com/fluxcd/image-automation-controller/api v0.37.0/go.mod h1:B2EbmiY69mE2bGOENPNUXr6klwrVe7FwVoB2iE1q08E= github.com/fluxcd/image-reflector-controller/api v0.31.1 h1:nc44G0JjLgSvqglJSiXQJZcrRw+eY01j7fHRUDB3FMw= diff --git a/tests/integration/go.mod b/tests/integration/go.mod index 892e5d39..4b361f81 100644 --- a/tests/integration/go.mod +++ b/tests/integration/go.mod @@ -6,7 +6,7 @@ require ( cloud.google.com/go/pubsub v1.31.0 github.com/Azure/azure-event-hubs-go/v3 v3.6.0 github.com/chainguard-dev/git-urls v1.0.2 - github.com/fluxcd/helm-controller/api v0.37.1 + github.com/fluxcd/helm-controller/api v0.37.2 github.com/fluxcd/image-automation-controller/api v0.37.0 github.com/fluxcd/image-reflector-controller/api v0.31.1 github.com/fluxcd/kustomize-controller/api v1.2.1 diff --git a/tests/integration/go.sum b/tests/integration/go.sum index 7268cdd3..c5c1509a 100644 --- a/tests/integration/go.sum +++ b/tests/integration/go.sum @@ -122,8 +122,8 @@ github.com/evanphx/json-patch/v5 v5.7.0 h1:nJqP7uwL84RJInrohHfW0Fx3awjbm8qZeFv0n github.com/evanphx/json-patch/v5 v5.7.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= -github.com/fluxcd/helm-controller/api v0.37.1 h1:cDUX79wGpNoSrDgirQswdN8X6gKmWVrpMMBn1BKdXAc= -github.com/fluxcd/helm-controller/api v0.37.1/go.mod h1:BuXZhAX9blQviil6yUN5zNM4RB753yhyBTJXxXff7Mo= +github.com/fluxcd/helm-controller/api v0.37.2 h1:tkLezpRdqPDz7HoKHFu92sV+ppOCVDxkjFTh8/lpff8= +github.com/fluxcd/helm-controller/api v0.37.2/go.mod h1:BuXZhAX9blQviil6yUN5zNM4RB753yhyBTJXxXff7Mo= github.com/fluxcd/image-automation-controller/api v0.37.0 h1:0L8kzX3zaYfg4wQ2Mx3G56atLMNeDGjy5qMGP4tDKRs= github.com/fluxcd/image-automation-controller/api v0.37.0/go.mod h1:B2EbmiY69mE2bGOENPNUXr6klwrVe7FwVoB2iE1q08E= github.com/fluxcd/image-reflector-controller/api v0.31.1 h1:nc44G0JjLgSvqglJSiXQJZcrRw+eY01j7fHRUDB3FMw= From 3294c7c008ac51ff5defda5fcaed3c6d17d831b3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Jan 2024 00:57:55 +0000 Subject: [PATCH 730/818] build(deps): bump the ci group with 2 updates Bumps the ci group with 2 updates: [google-github-actions/setup-gcloud](https://github.com/google-github-actions/setup-gcloud) and [anchore/sbom-action](https://github.com/anchore/sbom-action). Updates `google-github-actions/setup-gcloud` from 2.0.0 to 2.0.1 - [Release notes](https://github.com/google-github-actions/setup-gcloud/releases) - [Changelog](https://github.com/google-github-actions/setup-gcloud/blob/main/CHANGELOG.md) - [Commits](https://github.com/google-github-actions/setup-gcloud/compare/825196879a077b7efa50db2e88409f44de4635c2...5a5f7b85fca43e76e53463acaa9d408a03c98d3a) Updates `anchore/sbom-action` from 0.15.1 to 0.15.2 - [Release notes](https://github.com/anchore/sbom-action/releases) - [Commits](https://github.com/anchore/sbom-action/compare/5ecf649a417b8ae17dc8383dc32d46c03f2312df...719133684c7d294116626d1344fe64f0d2ff3e9e) --- updated-dependencies: - dependency-name: google-github-actions/setup-gcloud dependency-type: direct:production update-type: version-update:semver-patch dependency-group: ci - dependency-name: anchore/sbom-action dependency-type: direct:production update-type: version-update:semver-patch dependency-group: ci ... Signed-off-by: dependabot[bot] --- .github/workflows/e2e-gcp.yaml | 2 +- .github/workflows/release.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/e2e-gcp.yaml b/.github/workflows/e2e-gcp.yaml index ae9d5295..1e85a4cc 100644 --- a/.github/workflows/e2e-gcp.yaml +++ b/.github/workflows/e2e-gcp.yaml @@ -52,7 +52,7 @@ jobs: credentials_json: '${{ secrets.FLUX2_E2E_GOOGLE_CREDENTIALS }}' token_format: 'access_token' - name: Setup gcloud - uses: google-github-actions/setup-gcloud@825196879a077b7efa50db2e88409f44de4635c2 # v2.0.0 + uses: google-github-actions/setup-gcloud@5a5f7b85fca43e76e53463acaa9d408a03c98d3a # v2.0.1 - name: Setup QEMU uses: docker/setup-qemu-action@68827325e0b33c7199eb31dd4e31fbe9023e06e3 # v3.0.0 - name: Setup Docker Buildx diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 987ecb81..6dc904d7 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -34,7 +34,7 @@ jobs: id: buildx uses: docker/setup-buildx-action@f95db51fddba0c2d1ec667646a06c2ce06100226 # v3.0.0 - name: Setup Syft - uses: anchore/sbom-action/download-syft@5ecf649a417b8ae17dc8383dc32d46c03f2312df # v0.15.1 + uses: anchore/sbom-action/download-syft@719133684c7d294116626d1344fe64f0d2ff3e9e # v0.15.2 - name: Setup Cosign uses: sigstore/cosign-installer@9614fae9e5c5eddabb09f90a270fcb487c9f7149 # v3.3.0 - name: Setup Kustomize From 128301199d8c37cc1c27ccc2b5296b3503fa825d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Jan 2024 16:54:04 +0000 Subject: [PATCH 731/818] build(deps): bump github.com/cloudflare/circl from 1.3.6 to 1.3.7 Bumps [github.com/cloudflare/circl](https://github.com/cloudflare/circl) from 1.3.6 to 1.3.7. - [Release notes](https://github.com/cloudflare/circl/releases) - [Commits](https://github.com/cloudflare/circl/compare/v1.3.6...v1.3.7) --- updated-dependencies: - dependency-name: github.com/cloudflare/circl dependency-type: indirect ... Signed-off-by: dependabot[bot] --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 50eb3408..a43c6315 100644 --- a/go.mod +++ b/go.mod @@ -92,7 +92,7 @@ require ( github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/chai2010/gettext-go v1.0.2 // indirect github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e // indirect - github.com/cloudflare/circl v1.3.6 // indirect + github.com/cloudflare/circl v1.3.7 // indirect github.com/containerd/stargz-snapshotter/estargz v0.14.3 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.3 // indirect github.com/davecgh/go-spew v1.1.1 // indirect diff --git a/go.sum b/go.sum index 0f005e51..8ca1859b 100644 --- a/go.sum +++ b/go.sum @@ -75,8 +75,8 @@ github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5P github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1 h1:q763qf9huN11kDQavWsoZXJNW3xEE4JJyHa5Q25/sd8= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= -github.com/cloudflare/circl v1.3.6 h1:/xbKIqSHbZXHwkhbrhrt2YOHIwYJlXH94E3tI/gDlUg= -github.com/cloudflare/circl v1.3.6/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= +github.com/cloudflare/circl v1.3.7 h1:qlCDlTPz2n9fu58M0Nh1J/JzcFpfgkFHHX3O35r5vcU= +github.com/cloudflare/circl v1.3.7/go.mod h1:sRTcRWXGLrKw6yIGJ+l7amYJFfAXbZG0kBSc8r4zxgA= github.com/containerd/stargz-snapshotter/estargz v0.14.3 h1:OqlDCK3ZVUO6C3B/5FSkDwbkEETK84kQgEeFwDC+62k= github.com/containerd/stargz-snapshotter/estargz v0.14.3/go.mod h1:KY//uOCIkSuNAHhJogcZtrNHdKrA99/FCCRjE3HD36o= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= From 94c9b13fbd9dc8d5d42207187e1855d11779bc61 Mon Sep 17 00:00:00 2001 From: Sunny Date: Mon, 8 Jan 2024 14:35:20 +0000 Subject: [PATCH 732/818] tests/int: Add separate resource cleanup step Introduce a destroy-only mode in the test runner to run terraform destroy for the respective cloud provider configurations. This can be used to destroy cloud resources without going through the whole provision-test process. Add a new step in github actions workflow to run the test binary in destoy-only mode at the very end irrespective of the result of the previous steps. This ensures that the infrastructure is always destroyed, even if the CI job is cancelled. Signed-off-by: Sunny --- .github/workflows/e2e-azure.yaml | 11 +++++++++++ .github/workflows/e2e-gcp.yaml | 10 ++++++++++ tests/integration/Makefile | 8 ++++++++ tests/integration/README.md | 15 ++++++++++++--- tests/integration/go.mod | 4 ++-- tests/integration/go.sum | 4 ++-- tests/integration/suite_test.go | 15 +++++++++++++++ 7 files changed, 60 insertions(+), 7 deletions(-) diff --git a/.github/workflows/e2e-azure.yaml b/.github/workflows/e2e-azure.yaml index 67743f3f..87d7dfe1 100644 --- a/.github/workflows/e2e-azure.yaml +++ b/.github/workflows/e2e-azure.yaml @@ -123,3 +123,14 @@ jobs: echo $GITREPO_SSH_PUB_CONTENTS | base64 -d > ./build/ssh/key.pub export GITREPO_SSH_PUB_PATH=build/ssh/key.pub make test-azure + - name: Ensure resource cleanup + if: ${{ always() }} + env: + ARM_CLIENT_ID: ${{ secrets.AZ_ARM_CLIENT_ID }} + ARM_CLIENT_SECRET: ${{ secrets.AZ_ARM_CLIENT_SECRET }} + ARM_SUBSCRIPTION_ID: ${{ secrets.AZ_ARM_SUBSCRIPTION_ID }} + ARM_TENANT_ID: ${{ secrets.AZ_ARM_TENANT_ID }} + TF_VAR_azuredevops_org: ${{ secrets.TF_VAR_azuredevops_org }} + TF_VAR_azuredevops_pat: ${{ secrets.TF_VAR_azuredevops_pat }} + TF_VAR_location: ${{ vars.TF_VAR_azure_location }} + run: source .env && make destroy-azure diff --git a/.github/workflows/e2e-gcp.yaml b/.github/workflows/e2e-gcp.yaml index 1e85a4cc..068968f2 100644 --- a/.github/workflows/e2e-gcp.yaml +++ b/.github/workflows/e2e-gcp.yaml @@ -90,3 +90,13 @@ jobs: echo $GITREPO_SSH_PUB_CONTENTS | base64 -d > ./build/ssh/key.pub export GITREPO_SSH_PUB_PATH=build/ssh/key.pub make test-gcp + - name: Ensure resource cleanup + if: ${{ always() }} + env: + TF_VAR_gcp_project_id: ${{ vars.TF_VAR_gcp_project_id }} + TF_VAR_gcp_region: ${{ vars.TF_VAR_gcp_region }} + TF_VAR_gcp_zone: ${{ vars.TF_VAR_gcp_zone }} + TF_VAR_gcp_email: ${{ secrets.TF_VAR_gcp_email }} + TF_VAR_gcp_keyring: ${{ secrets.TF_VAR_gcp_keyring }} + TF_VAR_gcp_crypto_key: ${{ secrets.TF_VAR_gcp_crypto_key }} + run: source .env && make destroy-gcp diff --git a/tests/integration/Makefile b/tests/integration/Makefile index a924232f..ddae646a 100644 --- a/tests/integration/Makefile +++ b/tests/integration/Makefile @@ -17,6 +17,14 @@ test-azure: test-gcp: $(MAKE) test PROVIDER_ARG="-provider gcp" +destroy: + go test -timeout $(TEST_TIMEOUT) -v ./ $(GO_TEST_ARGS) $(PROVIDER_ARG) -destroy-only + +destroy-azure: + $(MAKE) destroy PROVIDER_ARG="-provider azure" + +destroy-gcp: + $(MAKE) destroy PROVIDER_ARG="-provider gcp" sops-check: ifeq ($(shell which sops),) diff --git a/tests/integration/README.md b/tests/integration/README.md index db6f8d14..0fa1f3e3 100644 --- a/tests/integration/README.md +++ b/tests/integration/README.md @@ -74,6 +74,10 @@ variables using use the terraform configuration below. Please make sure all the requirements of azure-gh-actions are followed before running it. +**NOTE:** When running the following for a repo under an organization, set the +environment variable `GITHUB_ORGANIZATION` if setting the `owner` in the +`github` provider doesn't work. + ```hcl provider "github" { owner = "fluxcd" @@ -218,7 +222,7 @@ variables using use the terraform configuration below. Please make sure all the requirements of gcp-gh-actions are followed before running it. -**NOTE:** When running the following for a repo under and organization, set the +**NOTE:** When running the following for a repo under an organization, set the environment variable `GITHUB_ORGANIZATION` if setting the `owner` in the `github` provider doesn't work. @@ -345,8 +349,13 @@ We also pull two version of `ghcr.io/stefanprodan/podinfo` image. These images a Container Registry and used to test `ImageRepository` and `ImageUpdateAutomation`. The terraform resources get created and the tests are run. -**IMPORTANT:** In case the terraform infrastructure results in a bad state, maybe due to a crash during the apply, -the whole infrastructure can be destroyed by running terraform destroy in terraform/ directory. +If not configured explicitly to retain the infrastructure, at the end of the +test, the test infrastructure is deleted. In case of any failure due to which +the resources don't get deleted, the `make destroy-*` commands can be run for +the respective provider. This will run terraform destroy in the respective +provider's terraform configuration directory. This can be used to quickly +destroy the infrastructure without going through the provision-test-destroy +steps. ### Debugging the tests diff --git a/tests/integration/go.mod b/tests/integration/go.mod index 4b361f81..3f9a6d70 100644 --- a/tests/integration/go.mod +++ b/tests/integration/go.mod @@ -17,9 +17,10 @@ require ( github.com/fluxcd/pkg/git/gogit v0.16.1 github.com/fluxcd/pkg/runtime v0.43.2 github.com/fluxcd/source-controller/api v1.2.3 - github.com/fluxcd/test-infra/tftestenv v0.0.0-20230831142147-627bca8e7916 + github.com/fluxcd/test-infra/tftestenv v0.0.0-20240108135005-b58e0c4e0cfa github.com/go-git/go-git/v5 v5.11.0 github.com/google/go-containerregistry v0.16.1 + github.com/hashicorp/terraform-exec v0.18.1 github.com/hashicorp/terraform-json v0.16.0 github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 github.com/onsi/gomega v1.30.0 @@ -89,7 +90,6 @@ require ( github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/go-version v1.6.0 // indirect github.com/hashicorp/hc-install v0.5.0 // indirect - github.com/hashicorp/terraform-exec v0.18.1 // indirect github.com/imdario/mergo v0.3.16 // indirect github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect github.com/josharian/intern v1.0.0 // indirect diff --git a/tests/integration/go.sum b/tests/integration/go.sum index c5c1509a..06fd3947 100644 --- a/tests/integration/go.sum +++ b/tests/integration/go.sum @@ -153,8 +153,8 @@ github.com/fluxcd/pkg/version v0.2.2 h1:ZpVXECeLA5hIQMft11iLp6gN3cKcz6UNuVTQPw/b github.com/fluxcd/pkg/version v0.2.2/go.mod h1:NGnh/no8S6PyfCDxRFrPY3T5BUnqP48MxfxNRU0z8C0= github.com/fluxcd/source-controller/api v1.2.3 h1:71mXv3Qg9HEhcpqOq1ObmoE+P/HuZNaAvxfI7dqZMo8= github.com/fluxcd/source-controller/api v1.2.3/go.mod h1:5gaIVVH7hgb8p3HKFp8P6hGmZEC8fKSt4EcrG3g5vZI= -github.com/fluxcd/test-infra/tftestenv v0.0.0-20230831142147-627bca8e7916 h1:w9UGknpfAGbiObQALZiuWYGeriAU1wKCFTmI2tj/96M= -github.com/fluxcd/test-infra/tftestenv v0.0.0-20230831142147-627bca8e7916/go.mod h1:liFlLEXgambGVdWSJ4JzbIHf1Vjpp1HwUyPazPIVZug= +github.com/fluxcd/test-infra/tftestenv v0.0.0-20240108135005-b58e0c4e0cfa h1:JdI+rVwGF5gBYt+UBijOVzXtq7aAU80vgksMNXSCCfU= +github.com/fluxcd/test-infra/tftestenv v0.0.0-20240108135005-b58e0c4e0cfa/go.mod h1:liFlLEXgambGVdWSJ4JzbIHf1Vjpp1HwUyPazPIVZug= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= diff --git a/tests/integration/suite_test.go b/tests/integration/suite_test.go index 0e2b2186..c2052699 100644 --- a/tests/integration/suite_test.go +++ b/tests/integration/suite_test.go @@ -26,6 +26,7 @@ import ( "testing" "time" + "github.com/hashicorp/terraform-exec/tfexec" tfjson "github.com/hashicorp/terraform-json" utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/client-go/kubernetes/scheme" @@ -197,6 +198,20 @@ func TestMain(m *testing.M) { log.Fatalf("Failed to get provider config for %q", infraOpts.Provider) } + // Run destroy-only mode if enabled. + if infraOpts.DestroyOnly { + log.Println("Running in destroy-only mode...") + envOpts := []tftestenv.EnvironmentOption{ + tftestenv.WithVerbose(infraOpts.Verbose), + // Ignore any state lock in destroy-only mode. + tftestenv.WithTfDestroyOptions(tfexec.Lock(false)), + } + if err := tftestenv.Destroy(ctx, providerCfg.terraformPath, envOpts...); err != nil { + panic(err) + } + os.Exit(0) + } + // Initialize with non-zero exit code to indicate failure by default unless // set by a successful test run. exitCode := 1 From 2924af5074078652ff5b5c28dedfe4e581b10c68 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Jan 2024 01:25:22 +0000 Subject: [PATCH 733/818] build(deps): bump the ci group with 4 updates Bumps the ci group with 4 updates: [Azure/login](https://github.com/azure/login), [google-github-actions/auth](https://github.com/google-github-actions/auth), [actions/upload-artifact](https://github.com/actions/upload-artifact) and [anchore/sbom-action](https://github.com/anchore/sbom-action). Updates `Azure/login` from 1.5.1 to 1.6.0 - [Release notes](https://github.com/azure/login/releases) - [Commits](https://github.com/azure/login/compare/de95379fe4dadc2defb305917eaa7e5dde727294...e15b166166a8746d1a47596803bd8c1b595455cf) Updates `google-github-actions/auth` from 2.0.0 to 2.0.1 - [Release notes](https://github.com/google-github-actions/auth/releases) - [Changelog](https://github.com/google-github-actions/auth/blob/main/CHANGELOG.md) - [Commits](https://github.com/google-github-actions/auth/compare/67e9c72af6e0492df856527b474995862b7b6591...f6de81663f7788d05bd15bcce18f0e57f23f0846) Updates `actions/upload-artifact` from 4.0.0 to 4.1.0 - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/c7d193f32edcb7bfad88892161225aeda64e9392...1eb3cb2b3e0f29609092a73eb033bb759a334595) Updates `anchore/sbom-action` from 0.15.2 to 0.15.3 - [Release notes](https://github.com/anchore/sbom-action/releases) - [Commits](https://github.com/anchore/sbom-action/compare/719133684c7d294116626d1344fe64f0d2ff3e9e...c7f031d9249a826a082ea14c79d3b686a51d485a) --- updated-dependencies: - dependency-name: Azure/login dependency-type: direct:production update-type: version-update:semver-minor dependency-group: ci - dependency-name: google-github-actions/auth dependency-type: direct:production update-type: version-update:semver-patch dependency-group: ci - dependency-name: actions/upload-artifact dependency-type: direct:production update-type: version-update:semver-minor dependency-group: ci - dependency-name: anchore/sbom-action dependency-type: direct:production update-type: version-update:semver-patch dependency-group: ci ... Signed-off-by: dependabot[bot] --- .github/workflows/e2e-azure.yaml | 2 +- .github/workflows/e2e-gcp.yaml | 2 +- .github/workflows/ossf.yaml | 2 +- .github/workflows/release.yaml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/e2e-azure.yaml b/.github/workflows/e2e-azure.yaml index 87d7dfe1..14306dd4 100644 --- a/.github/workflows/e2e-azure.yaml +++ b/.github/workflows/e2e-azure.yaml @@ -92,7 +92,7 @@ jobs: env: SOPS_VER: 3.7.1 - name: Authenticate to Azure - uses: Azure/login@de95379fe4dadc2defb305917eaa7e5dde727294 # v1.4.6 + uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.4.6 with: creds: '{"clientId":"${{ secrets.AZ_ARM_CLIENT_ID }}","clientSecret":"${{ secrets.AZ_ARM_CLIENT_SECRET }}","subscriptionId":"${{ secrets.AZ_ARM_SUBSCRIPTION_ID }}","tenantId":"${{ secrets.AZ_ARM_TENANT_ID }}"}' - name: Set dynamic variables in .env diff --git a/.github/workflows/e2e-gcp.yaml b/.github/workflows/e2e-gcp.yaml index 068968f2..256c10c0 100644 --- a/.github/workflows/e2e-gcp.yaml +++ b/.github/workflows/e2e-gcp.yaml @@ -46,7 +46,7 @@ jobs: env: SOPS_VER: 3.7.1 - name: Authenticate to Google Cloud - uses: google-github-actions/auth@67e9c72af6e0492df856527b474995862b7b6591 # v2.0.0 + uses: google-github-actions/auth@f6de81663f7788d05bd15bcce18f0e57f23f0846 # v2.0.1 id: 'auth' with: credentials_json: '${{ secrets.FLUX2_E2E_GOOGLE_CREDENTIALS }}' diff --git a/.github/workflows/ossf.yaml b/.github/workflows/ossf.yaml index d1b80c1a..fc15b787 100644 --- a/.github/workflows/ossf.yaml +++ b/.github/workflows/ossf.yaml @@ -28,7 +28,7 @@ jobs: repo_token: ${{ secrets.GITHUB_TOKEN }} publish_results: true - name: Upload artifact - uses: actions/upload-artifact@c7d193f32edcb7bfad88892161225aeda64e9392 # v4.0.0 + uses: actions/upload-artifact@1eb3cb2b3e0f29609092a73eb033bb759a334595 # v4.1.0 with: name: SARIF file path: results.sarif diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 6dc904d7..9f7c8579 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -34,7 +34,7 @@ jobs: id: buildx uses: docker/setup-buildx-action@f95db51fddba0c2d1ec667646a06c2ce06100226 # v3.0.0 - name: Setup Syft - uses: anchore/sbom-action/download-syft@719133684c7d294116626d1344fe64f0d2ff3e9e # v0.15.2 + uses: anchore/sbom-action/download-syft@c7f031d9249a826a082ea14c79d3b686a51d485a # v0.15.3 - name: Setup Cosign uses: sigstore/cosign-installer@9614fae9e5c5eddabb09f90a270fcb487c9f7149 # v3.3.0 - name: Setup Kustomize From 83450ab1d2516157e1041ae514bd6150dfe5f39c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 17 Jan 2024 09:56:13 +0000 Subject: [PATCH 734/818] build(deps): bump github.com/cloudflare/circl in /tests/azure Bumps [github.com/cloudflare/circl](https://github.com/cloudflare/circl) from 1.3.6 to 1.3.7. - [Release notes](https://github.com/cloudflare/circl/releases) - [Commits](https://github.com/cloudflare/circl/compare/v1.3.6...v1.3.7) --- updated-dependencies: - dependency-name: github.com/cloudflare/circl dependency-type: indirect ... Signed-off-by: dependabot[bot] --- tests/azure/go.mod | 2 +- tests/azure/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/azure/go.mod b/tests/azure/go.mod index ac800f0a..98ee8663 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -48,7 +48,7 @@ require ( github.com/Microsoft/go-winio v0.6.1 // indirect github.com/ProtonMail/go-crypto v0.0.0-20231012073058-a7379d079e0e // indirect github.com/apparentlymart/go-textseg/v13 v13.0.0 // indirect - github.com/cloudflare/circl v1.3.6 // indirect + github.com/cloudflare/circl v1.3.7 // indirect github.com/cyphar/filepath-securejoin v0.2.4 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/devigned/tab v0.1.1 // indirect diff --git a/tests/azure/go.sum b/tests/azure/go.sum index 5e184b93..095b8937 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -48,8 +48,8 @@ github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj github.com/chainguard-dev/git-urls v1.0.2 h1:pSpT7ifrpc5X55n4aTTm7FFUE+ZQHKiqpiwNkJrVcKQ= github.com/chainguard-dev/git-urls v1.0.2/go.mod h1:rbGgj10OS7UgZlbzdUQIQpT0k/D4+An04HJY7Ol+Y/o= github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= -github.com/cloudflare/circl v1.3.6 h1:/xbKIqSHbZXHwkhbrhrt2YOHIwYJlXH94E3tI/gDlUg= -github.com/cloudflare/circl v1.3.6/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= +github.com/cloudflare/circl v1.3.7 h1:qlCDlTPz2n9fu58M0Nh1J/JzcFpfgkFHHX3O35r5vcU= +github.com/cloudflare/circl v1.3.7/go.mod h1:sRTcRWXGLrKw6yIGJ+l7amYJFfAXbZG0kBSc8r4zxgA= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg= github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= From 417e3d02d18a1a1f881d3cbc5ced9850e6398ec4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 17 Jan 2024 11:08:38 +0000 Subject: [PATCH 735/818] build(deps): bump github.com/cloudflare/circl in /tests/integration Bumps [github.com/cloudflare/circl](https://github.com/cloudflare/circl) from 1.3.6 to 1.3.7. - [Release notes](https://github.com/cloudflare/circl/releases) - [Commits](https://github.com/cloudflare/circl/compare/v1.3.6...v1.3.7) --- updated-dependencies: - dependency-name: github.com/cloudflare/circl dependency-type: indirect ... Signed-off-by: dependabot[bot] --- tests/integration/go.mod | 2 +- tests/integration/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/integration/go.mod b/tests/integration/go.mod index 3f9a6d70..7b69149f 100644 --- a/tests/integration/go.mod +++ b/tests/integration/go.mod @@ -52,7 +52,7 @@ require ( github.com/Microsoft/go-winio v0.6.1 // indirect github.com/ProtonMail/go-crypto v0.0.0-20231012073058-a7379d079e0e // indirect github.com/apparentlymart/go-textseg/v13 v13.0.0 // indirect - github.com/cloudflare/circl v1.3.6 // indirect + github.com/cloudflare/circl v1.3.7 // indirect github.com/containerd/stargz-snapshotter/estargz v0.14.3 // indirect github.com/cyphar/filepath-securejoin v0.2.4 // indirect github.com/davecgh/go-spew v1.1.1 // indirect diff --git a/tests/integration/go.sum b/tests/integration/go.sum index 06fd3947..e3af981d 100644 --- a/tests/integration/go.sum +++ b/tests/integration/go.sum @@ -78,8 +78,8 @@ github.com/chainguard-dev/git-urls v1.0.2 h1:pSpT7ifrpc5X55n4aTTm7FFUE+ZQHKiqpiw github.com/chainguard-dev/git-urls v1.0.2/go.mod h1:rbGgj10OS7UgZlbzdUQIQpT0k/D4+An04HJY7Ol+Y/o= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= -github.com/cloudflare/circl v1.3.6 h1:/xbKIqSHbZXHwkhbrhrt2YOHIwYJlXH94E3tI/gDlUg= -github.com/cloudflare/circl v1.3.6/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= +github.com/cloudflare/circl v1.3.7 h1:qlCDlTPz2n9fu58M0Nh1J/JzcFpfgkFHHX3O35r5vcU= +github.com/cloudflare/circl v1.3.7/go.mod h1:sRTcRWXGLrKw6yIGJ+l7amYJFfAXbZG0kBSc8r4zxgA= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= From 145fd1c2f2f41fbba5cba2d248d383d77efd3e65 Mon Sep 17 00:00:00 2001 From: Kenny Meador Date: Sun, 21 Jan 2024 11:41:06 -0600 Subject: [PATCH 736/818] Properly detect unexpected arguments Signed-off-by: Kenny Meador --- cmd/flux/uninstall.go | 1 + 1 file changed, 1 insertion(+) diff --git a/cmd/flux/uninstall.go b/cmd/flux/uninstall.go index 0128a833..d82077ea 100644 --- a/cmd/flux/uninstall.go +++ b/cmd/flux/uninstall.go @@ -30,6 +30,7 @@ import ( var uninstallCmd = &cobra.Command{ Use: "uninstall", + Args: cobra.NoArgs, Short: "Uninstall Flux and its custom resource definitions", Long: `The uninstall command removes the Flux components and the toolkit.fluxcd.io resources from the cluster.`, Example: ` # Uninstall Flux components, its custom resources and namespace From 2726da5b856adebfc83925986c462670eaadf66f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Jan 2024 08:01:30 +0000 Subject: [PATCH 737/818] build(deps): bump the ci group with 3 updates Bumps the ci group with 3 updates: [Azure/login](https://github.com/azure/login), [actions/upload-artifact](https://github.com/actions/upload-artifact) and [anchore/sbom-action](https://github.com/anchore/sbom-action). Updates `Azure/login` from 1.6.0 to 1.6.1 - [Release notes](https://github.com/azure/login/releases) - [Commits](https://github.com/azure/login/compare/e15b166166a8746d1a47596803bd8c1b595455cf...cb79c773a3cfa27f31f25eb3f677781210c9ce3d) Updates `actions/upload-artifact` from 4.1.0 to 4.2.0 - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/1eb3cb2b3e0f29609092a73eb033bb759a334595...694cdabd8bdb0f10b2cea11669e1bf5453eed0a6) Updates `anchore/sbom-action` from 0.15.3 to 0.15.4 - [Release notes](https://github.com/anchore/sbom-action/releases) - [Commits](https://github.com/anchore/sbom-action/compare/c7f031d9249a826a082ea14c79d3b686a51d485a...41f7a6c033dbcdf78917f23b652c8b8146298c85) --- updated-dependencies: - dependency-name: Azure/login dependency-type: direct:production update-type: version-update:semver-patch dependency-group: ci - dependency-name: actions/upload-artifact dependency-type: direct:production update-type: version-update:semver-minor dependency-group: ci - dependency-name: anchore/sbom-action dependency-type: direct:production update-type: version-update:semver-patch dependency-group: ci ... Signed-off-by: dependabot[bot] --- .github/workflows/e2e-azure.yaml | 2 +- .github/workflows/ossf.yaml | 2 +- .github/workflows/release.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/e2e-azure.yaml b/.github/workflows/e2e-azure.yaml index 14306dd4..3f45f046 100644 --- a/.github/workflows/e2e-azure.yaml +++ b/.github/workflows/e2e-azure.yaml @@ -92,7 +92,7 @@ jobs: env: SOPS_VER: 3.7.1 - name: Authenticate to Azure - uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.4.6 + uses: Azure/login@cb79c773a3cfa27f31f25eb3f677781210c9ce3d # v1.4.6 with: creds: '{"clientId":"${{ secrets.AZ_ARM_CLIENT_ID }}","clientSecret":"${{ secrets.AZ_ARM_CLIENT_SECRET }}","subscriptionId":"${{ secrets.AZ_ARM_SUBSCRIPTION_ID }}","tenantId":"${{ secrets.AZ_ARM_TENANT_ID }}"}' - name: Set dynamic variables in .env diff --git a/.github/workflows/ossf.yaml b/.github/workflows/ossf.yaml index fc15b787..9c136342 100644 --- a/.github/workflows/ossf.yaml +++ b/.github/workflows/ossf.yaml @@ -28,7 +28,7 @@ jobs: repo_token: ${{ secrets.GITHUB_TOKEN }} publish_results: true - name: Upload artifact - uses: actions/upload-artifact@1eb3cb2b3e0f29609092a73eb033bb759a334595 # v4.1.0 + uses: actions/upload-artifact@694cdabd8bdb0f10b2cea11669e1bf5453eed0a6 # v4.2.0 with: name: SARIF file path: results.sarif diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 9f7c8579..3945198c 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -34,7 +34,7 @@ jobs: id: buildx uses: docker/setup-buildx-action@f95db51fddba0c2d1ec667646a06c2ce06100226 # v3.0.0 - name: Setup Syft - uses: anchore/sbom-action/download-syft@c7f031d9249a826a082ea14c79d3b686a51d485a # v0.15.3 + uses: anchore/sbom-action/download-syft@41f7a6c033dbcdf78917f23b652c8b8146298c85 # v0.15.4 - name: Setup Cosign uses: sigstore/cosign-installer@9614fae9e5c5eddabb09f90a270fcb487c9f7149 # v3.3.0 - name: Setup Kustomize From 1a0d931ab56aceb57dc5e02e165c855f5351a71b Mon Sep 17 00:00:00 2001 From: Kenny Meador Date: Mon, 22 Jan 2024 19:50:51 -0600 Subject: [PATCH 738/818] detect unexpected args in flux stats command Signed-off-by: Kenny Meador --- cmd/flux/stats.go | 1 + 1 file changed, 1 insertion(+) diff --git a/cmd/flux/stats.go b/cmd/flux/stats.go index 0181ffab..fbb9a66f 100644 --- a/cmd/flux/stats.go +++ b/cmd/flux/stats.go @@ -42,6 +42,7 @@ import ( var statsCmd = &cobra.Command{ Use: "stats", + Args: cobra.NoArgs, Short: "Stats of Flux reconciles", Long: withPreviewNote(`The stats command prints a report of Flux custom resources present on a cluster, including their reconcile status and the amount of cumulative storage used for each source type`), From 933cf9db02b29566aee15b5efa036428bcba0494 Mon Sep 17 00:00:00 2001 From: Kenny Meador Date: Mon, 22 Jan 2024 20:22:48 -0600 Subject: [PATCH 739/818] detect unexpected args on flux check command Signed-off-by: Kenny Meador --- cmd/flux/check.go | 1 + 1 file changed, 1 insertion(+) diff --git a/cmd/flux/check.go b/cmd/flux/check.go index 99ecfd8c..6159e3ef 100644 --- a/cmd/flux/check.go +++ b/cmd/flux/check.go @@ -40,6 +40,7 @@ import ( var checkCmd = &cobra.Command{ Use: "check", + Args: cobra.NoArgs, Short: "Check requirements and installation", Long: withPreviewNote(`The check command will perform a series of checks to validate that the local environment is configured correctly and if the installed components are healthy.`), From cccb044dd170f976f88637347ff1d4bb64fc98ed Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 Jan 2024 00:32:12 +0000 Subject: [PATCH 740/818] build(deps): bump the ci group with 5 updates Bumps the ci group with 5 updates: | Package | From | To | | --- | --- | --- | | [korthout/backport-action](https://github.com/korthout/backport-action) | `2.3.0` | `2.4.1` | | [google-github-actions/auth](https://github.com/google-github-actions/auth) | `2.0.1` | `2.1.0` | | [google-github-actions/setup-gcloud](https://github.com/google-github-actions/setup-gcloud) | `2.0.1` | `2.1.0` | | [actions/upload-artifact](https://github.com/actions/upload-artifact) | `4.2.0` | `4.3.0` | | [anchore/sbom-action](https://github.com/anchore/sbom-action) | `0.15.4` | `0.15.5` | Updates `korthout/backport-action` from 2.3.0 to 2.4.1 - [Release notes](https://github.com/korthout/backport-action/releases) - [Commits](https://github.com/korthout/backport-action/compare/addffea45a2f0b5682f1d5ba0506f45bc18bf174...e8161d6a0dbfa2651b7daa76cbb75bc7c925bbf3) Updates `google-github-actions/auth` from 2.0.1 to 2.1.0 - [Release notes](https://github.com/google-github-actions/auth/releases) - [Changelog](https://github.com/google-github-actions/auth/blob/main/CHANGELOG.md) - [Commits](https://github.com/google-github-actions/auth/compare/f6de81663f7788d05bd15bcce18f0e57f23f0846...5a50e581162a13f4baa8916d01180d2acbc04363) Updates `google-github-actions/setup-gcloud` from 2.0.1 to 2.1.0 - [Release notes](https://github.com/google-github-actions/setup-gcloud/releases) - [Changelog](https://github.com/google-github-actions/setup-gcloud/blob/main/CHANGELOG.md) - [Commits](https://github.com/google-github-actions/setup-gcloud/compare/5a5f7b85fca43e76e53463acaa9d408a03c98d3a...98ddc00a17442e89a24bbf282954a3b65ce6d200) Updates `actions/upload-artifact` from 4.2.0 to 4.3.0 - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/694cdabd8bdb0f10b2cea11669e1bf5453eed0a6...26f96dfa697d77e81fd5907df203aa23a56210a8) Updates `anchore/sbom-action` from 0.15.4 to 0.15.5 - [Release notes](https://github.com/anchore/sbom-action/releases) - [Commits](https://github.com/anchore/sbom-action/compare/41f7a6c033dbcdf78917f23b652c8b8146298c85...24b0d5238516480139aa8bc6f92eeb7b54a9eb0a) --- updated-dependencies: - dependency-name: korthout/backport-action dependency-type: direct:production update-type: version-update:semver-minor dependency-group: ci - dependency-name: google-github-actions/auth dependency-type: direct:production update-type: version-update:semver-minor dependency-group: ci - dependency-name: google-github-actions/setup-gcloud dependency-type: direct:production update-type: version-update:semver-minor dependency-group: ci - dependency-name: actions/upload-artifact dependency-type: direct:production update-type: version-update:semver-minor dependency-group: ci - dependency-name: anchore/sbom-action dependency-type: direct:production update-type: version-update:semver-patch dependency-group: ci ... Signed-off-by: dependabot[bot] --- .github/workflows/backport.yaml | 2 +- .github/workflows/e2e-gcp.yaml | 4 ++-- .github/workflows/ossf.yaml | 2 +- .github/workflows/release.yaml | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/backport.yaml b/.github/workflows/backport.yaml index 54bd0682..e0eead2c 100644 --- a/.github/workflows/backport.yaml +++ b/.github/workflows/backport.yaml @@ -17,7 +17,7 @@ jobs: with: ref: ${{ github.event.pull_request.head.sha }} - name: Create backport PRs - uses: korthout/backport-action@addffea45a2f0b5682f1d5ba0506f45bc18bf174 # v2.3.0 + uses: korthout/backport-action@e8161d6a0dbfa2651b7daa76cbb75bc7c925bbf3 # v2.4.1 # xref: https://github.com/korthout/backport-action#inputs with: # Use token to allow workflows to be triggered for the created PR diff --git a/.github/workflows/e2e-gcp.yaml b/.github/workflows/e2e-gcp.yaml index 256c10c0..902a24c2 100644 --- a/.github/workflows/e2e-gcp.yaml +++ b/.github/workflows/e2e-gcp.yaml @@ -46,13 +46,13 @@ jobs: env: SOPS_VER: 3.7.1 - name: Authenticate to Google Cloud - uses: google-github-actions/auth@f6de81663f7788d05bd15bcce18f0e57f23f0846 # v2.0.1 + uses: google-github-actions/auth@5a50e581162a13f4baa8916d01180d2acbc04363 # v2.1.0 id: 'auth' with: credentials_json: '${{ secrets.FLUX2_E2E_GOOGLE_CREDENTIALS }}' token_format: 'access_token' - name: Setup gcloud - uses: google-github-actions/setup-gcloud@5a5f7b85fca43e76e53463acaa9d408a03c98d3a # v2.0.1 + uses: google-github-actions/setup-gcloud@98ddc00a17442e89a24bbf282954a3b65ce6d200 # v2.1.0 - name: Setup QEMU uses: docker/setup-qemu-action@68827325e0b33c7199eb31dd4e31fbe9023e06e3 # v3.0.0 - name: Setup Docker Buildx diff --git a/.github/workflows/ossf.yaml b/.github/workflows/ossf.yaml index 9c136342..d5dee948 100644 --- a/.github/workflows/ossf.yaml +++ b/.github/workflows/ossf.yaml @@ -28,7 +28,7 @@ jobs: repo_token: ${{ secrets.GITHUB_TOKEN }} publish_results: true - name: Upload artifact - uses: actions/upload-artifact@694cdabd8bdb0f10b2cea11669e1bf5453eed0a6 # v4.2.0 + uses: actions/upload-artifact@26f96dfa697d77e81fd5907df203aa23a56210a8 # v4.3.0 with: name: SARIF file path: results.sarif diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 3945198c..3b79d224 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -34,7 +34,7 @@ jobs: id: buildx uses: docker/setup-buildx-action@f95db51fddba0c2d1ec667646a06c2ce06100226 # v3.0.0 - name: Setup Syft - uses: anchore/sbom-action/download-syft@41f7a6c033dbcdf78917f23b652c8b8146298c85 # v0.15.4 + uses: anchore/sbom-action/download-syft@24b0d5238516480139aa8bc6f92eeb7b54a9eb0a # v0.15.5 - name: Setup Cosign uses: sigstore/cosign-installer@9614fae9e5c5eddabb09f90a270fcb487c9f7149 # v3.3.0 - name: Setup Kustomize From 5e14014e37fec3c0d82055c82a8017f25b328eaa Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Tue, 30 Jan 2024 14:07:35 +0200 Subject: [PATCH 741/818] Update dependencies to Kubernetes v1.28.6 Signed-off-by: Stefan Prodan --- cmd/flux/build_kustomization.go | 4 +- cmd/flux/cluster_info_test.go | 4 +- cmd/flux/events_test.go | 6 +- cmd/flux/tree_kustomization.go | 4 +- go.mod | 146 +++++++++------ go.sum | 313 +++++++++++++++++++------------- internal/build/build.go | 6 +- internal/build/diff.go | 3 +- internal/tree/tree.go | 4 +- internal/utils/apply.go | 7 +- tests/azure/go.mod | 55 +++--- tests/azure/go.sum | 127 ++++++------- tests/integration/go.mod | 42 ++--- tests/integration/go.sum | 102 +++++------ 14 files changed, 461 insertions(+), 362 deletions(-) diff --git a/cmd/flux/build_kustomization.go b/cmd/flux/build_kustomization.go index ea0517c0..dbbf7abc 100644 --- a/cmd/flux/build_kustomization.go +++ b/cmd/flux/build_kustomization.go @@ -21,10 +21,10 @@ import ( "os" "os/signal" - "github.com/fluxcd/pkg/ssa" "github.com/spf13/cobra" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" + ssautil "github.com/fluxcd/pkg/ssa/utils" "github.com/fluxcd/flux2/v2/internal/build" ) @@ -132,7 +132,7 @@ func buildKsCmdRun(cmd *cobra.Command, args []string) (err error) { errChan <- err } - manifests, err := ssa.ObjectsToYAML(objects) + manifests, err := ssautil.ObjectsToYAML(objects) if err != nil { errChan <- err } diff --git a/cmd/flux/cluster_info_test.go b/cmd/flux/cluster_info_test.go index 560c881b..86b94c9c 100644 --- a/cmd/flux/cluster_info_test.go +++ b/cmd/flux/cluster_info_test.go @@ -29,7 +29,7 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client/fake" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" - "github.com/fluxcd/pkg/ssa" + ssautil "github.com/fluxcd/pkg/ssa/utils" ) func Test_getFluxClusterInfo(t *testing.T) { @@ -37,7 +37,7 @@ func Test_getFluxClusterInfo(t *testing.T) { f, err := os.Open("./testdata/cluster_info/gitrepositories.yaml") g.Expect(err).To(BeNil()) - objs, err := ssa.ReadObjects(f) + objs, err := ssautil.ReadObjects(f) g.Expect(err).To(Not(HaveOccurred())) gitrepo := objs[0] diff --git a/cmd/flux/events_test.go b/cmd/flux/events_test.go index 53fab161..cb27e3eb 100644 --- a/cmd/flux/events_test.go +++ b/cmd/flux/events_test.go @@ -31,7 +31,7 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client/fake" eventv1 "github.com/fluxcd/pkg/apis/event/v1beta1" - "github.com/fluxcd/pkg/ssa" + ssautil "github.com/fluxcd/pkg/ssa/utils" "github.com/fluxcd/flux2/v2/internal/utils" ) @@ -160,7 +160,7 @@ metadata: func Test_getObjectRef(t *testing.T) { g := NewWithT(t) - objs, err := ssa.ReadObjects(strings.NewReader(objects)) + objs, err := ssautil.ReadObjects(strings.NewReader(objects)) g.Expect(err).To(Not(HaveOccurred())) builder := fake.NewClientBuilder().WithScheme(utils.NewScheme()) @@ -244,7 +244,7 @@ func Test_getObjectRef(t *testing.T) { func Test_getRows(t *testing.T) { g := NewWithT(t) - objs, err := ssa.ReadObjects(strings.NewReader(objects)) + objs, err := ssautil.ReadObjects(strings.NewReader(objects)) g.Expect(err).To(Not(HaveOccurred())) builder := fake.NewClientBuilder().WithScheme(utils.NewScheme()) diff --git a/cmd/flux/tree_kustomization.go b/cmd/flux/tree_kustomization.go index e345f0f2..010bd72b 100644 --- a/cmd/flux/tree_kustomization.go +++ b/cmd/flux/tree_kustomization.go @@ -38,7 +38,7 @@ import ( "github.com/fluxcd/cli-utils/pkg/object" helmv2 "github.com/fluxcd/helm-controller/api/v2beta2" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" - "github.com/fluxcd/pkg/ssa" + ssautil "github.com/fluxcd/pkg/ssa/utils" "github.com/fluxcd/flux2/v2/internal/tree" "github.com/fluxcd/flux2/v2/internal/utils" @@ -261,7 +261,7 @@ func getHelmReleaseInventory(ctx context.Context, objectKey client.ObjectKey, ku return nil, fmt.Errorf("failed to decode the Helm storage object for HelmRelease '%s': %w", objectKey.String(), err) } - objects, err := ssa.ReadObjects(strings.NewReader(rls.Manifest)) + objects, err := ssautil.ReadObjects(strings.NewReader(rls.Manifest)) if err != nil { return nil, fmt.Errorf("failed to read the Helm storage object for HelmRelease '%s': %w", objectKey.String(), err) } diff --git a/go.mod b/go.mod index a43c6315..2b549450 100644 --- a/go.mod +++ b/go.mod @@ -7,55 +7,55 @@ replace gopkg.in/yaml.v3 => gopkg.in/yaml.v3 v3.0.1 require ( github.com/Masterminds/semver/v3 v3.2.1 - github.com/ProtonMail/go-crypto v0.0.0-20231012073058-a7379d079e0e + github.com/ProtonMail/go-crypto v1.0.0 github.com/cyphar/filepath-securejoin v0.2.4 - github.com/distribution/distribution/v3 v3.0.0-20230823142118-4f7424c8eb41 - github.com/fluxcd/cli-utils v0.36.0-flux.2 - github.com/fluxcd/go-git-providers v0.19.2 + github.com/distribution/distribution/v3 v3.0.0-alpha.1 + github.com/fluxcd/cli-utils v0.36.0-flux.3 + github.com/fluxcd/go-git-providers v0.19.3 github.com/fluxcd/helm-controller/api v0.37.2 github.com/fluxcd/image-automation-controller/api v0.37.0 github.com/fluxcd/image-reflector-controller/api v0.31.1 github.com/fluxcd/kustomize-controller/api v1.2.1 github.com/fluxcd/notification-controller/api v1.2.3 - github.com/fluxcd/pkg/apis/event v0.6.0 - github.com/fluxcd/pkg/apis/meta v1.2.0 - github.com/fluxcd/pkg/git v0.16.0 - github.com/fluxcd/pkg/git/gogit v0.16.1 - github.com/fluxcd/pkg/kustomize v1.5.0 - github.com/fluxcd/pkg/oci v0.33.3 - github.com/fluxcd/pkg/runtime v0.43.2 - github.com/fluxcd/pkg/sourceignore v0.4.0 - github.com/fluxcd/pkg/ssa v0.35.0 - github.com/fluxcd/pkg/ssh v0.10.0 + github.com/fluxcd/pkg/apis/event v0.7.0 + github.com/fluxcd/pkg/apis/meta v1.3.0 + github.com/fluxcd/pkg/git v0.17.0 + github.com/fluxcd/pkg/git/gogit v0.17.0 + github.com/fluxcd/pkg/kustomize v1.6.0 + github.com/fluxcd/pkg/oci v0.35.0 + github.com/fluxcd/pkg/runtime v0.44.0 + github.com/fluxcd/pkg/sourceignore v0.5.0 + github.com/fluxcd/pkg/ssa v0.36.0 + github.com/fluxcd/pkg/ssh v0.11.0 github.com/fluxcd/pkg/tar v0.4.0 github.com/fluxcd/pkg/version v0.2.2 github.com/fluxcd/source-controller/api v1.2.3 github.com/go-git/go-git/v5 v5.11.0 - github.com/go-logr/logr v1.3.0 + github.com/go-logr/logr v1.4.1 github.com/gonvenience/bunt v1.3.5 github.com/gonvenience/ytbx v1.4.4 github.com/google/go-cmp v0.6.0 - github.com/google/go-containerregistry v0.17.0 + github.com/google/go-containerregistry v0.19.0 github.com/hashicorp/go-cleanhttp v0.5.2 github.com/homeport/dyff v1.6.0 github.com/lucasb-eyer/go-colorful v1.2.0 github.com/manifoldco/promptui v0.9.0 github.com/mattn/go-shellwords v1.0.12 github.com/olekukonko/tablewriter v0.0.5 - github.com/onsi/gomega v1.30.0 + github.com/onsi/gomega v1.31.1 github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 github.com/spf13/cobra v1.8.0 github.com/spf13/pflag v1.0.5 github.com/theckman/yacspin v0.13.12 - golang.org/x/crypto v0.17.0 - golang.org/x/term v0.15.0 + golang.org/x/crypto v0.18.0 + golang.org/x/term v0.16.0 golang.org/x/text v0.14.0 - k8s.io/api v0.28.4 - k8s.io/apiextensions-apiserver v0.28.4 - k8s.io/apimachinery v0.28.4 - k8s.io/cli-runtime v0.28.4 - k8s.io/client-go v0.28.4 - k8s.io/kubectl v0.28.4 + k8s.io/api v0.28.6 + k8s.io/apiextensions-apiserver v0.28.6 + k8s.io/apimachinery v0.28.6 + k8s.io/cli-runtime v0.28.6 + k8s.io/client-go v0.28.6 + k8s.io/kubectl v0.28.6 sigs.k8s.io/controller-runtime v0.16.3 sigs.k8s.io/kustomize/api v0.16.0 sigs.k8s.io/kustomize/kyaml v0.16.0 @@ -63,47 +63,50 @@ require ( ) require ( - code.gitea.io/sdk/gitea v0.17.0 // indirect + code.gitea.io/sdk/gitea v0.17.1 // indirect dario.cat/mergo v1.0.0 // indirect - github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.0 // indirect - github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.4.0 // indirect - github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.1 // indirect + github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.5.1 // indirect + github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.1 // indirect github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect - github.com/AzureAD/microsoft-authentication-library-for-go v1.1.1 // indirect + github.com/AzureAD/microsoft-authentication-library-for-go v1.2.1 // indirect github.com/BurntSushi/toml v1.3.2 // indirect github.com/MakeNowJust/heredoc v1.0.0 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect - github.com/aws/aws-sdk-go-v2 v1.24.0 // indirect - github.com/aws/aws-sdk-go-v2/config v1.26.1 // indirect - github.com/aws/aws-sdk-go-v2/credentials v1.16.12 // indirect - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.10 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.9 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.9 // indirect - github.com/aws/aws-sdk-go-v2/internal/ini v1.7.2 // indirect - github.com/aws/aws-sdk-go-v2/service/ecr v1.24.5 // indirect + github.com/aws/aws-sdk-go-v2 v1.24.1 // indirect + github.com/aws/aws-sdk-go-v2/config v1.26.6 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.16.16 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.11 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.10 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.10 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.7.3 // indirect + github.com/aws/aws-sdk-go-v2/service/ecr v1.24.7 // indirect github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.4 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.9 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.18.5 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.21.5 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.26.5 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.10 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.18.7 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.21.7 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.26.7 // indirect github.com/aws/smithy-go v1.19.0 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bshuster-repo/logrus-logstash-hook v1.0.0 // indirect + github.com/cenkalti/backoff/v4 v4.2.1 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/chai2010/gettext-go v1.0.2 // indirect github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e // indirect github.com/cloudflare/circl v1.3.7 // indirect github.com/containerd/stargz-snapshotter/estargz v0.14.3 // indirect + github.com/coreos/go-systemd/v22 v22.5.0 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.3 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/davidmz/go-pageant v1.0.2 // indirect + github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect + github.com/distribution/reference v0.5.0 // indirect github.com/docker/cli v24.0.0+incompatible // indirect github.com/docker/distribution v2.8.2+incompatible // indirect github.com/docker/docker v24.0.7+incompatible // indirect github.com/docker/docker-credential-helpers v0.7.0 // indirect github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c // indirect github.com/docker/go-metrics v0.0.1 // indirect - github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1 // indirect github.com/drone/envsubst v1.0.3 // indirect github.com/emicklei/go-restful/v3 v3.11.0 // indirect github.com/emirpasic/gods v1.18.1 // indirect @@ -111,22 +114,22 @@ require ( github.com/evanphx/json-patch/v5 v5.7.0 // indirect github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f // indirect github.com/fatih/color v1.13.0 // indirect - github.com/felixge/httpsnoop v1.0.3 // indirect + github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fluxcd/pkg/apis/acl v0.1.0 // indirect - github.com/fluxcd/pkg/apis/kustomize v1.2.0 // indirect + github.com/fluxcd/pkg/apis/kustomize v1.3.0 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/go-errors/errors v1.5.1 // indirect github.com/go-fed/httpsig v1.1.0 // indirect github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect github.com/go-git/go-billy/v5 v5.5.0 // indirect + github.com/go-logr/stdr v1.2.2 // indirect github.com/go-openapi/jsonpointer v0.20.0 // indirect github.com/go-openapi/jsonreference v0.20.2 // indirect github.com/go-openapi/swag v0.22.4 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang-jwt/jwt/v5 v5.0.0 // indirect + github.com/golang-jwt/jwt/v5 v5.2.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.3 // indirect - github.com/gomodule/redigo v1.8.2 // indirect github.com/gonvenience/neat v1.3.12 // indirect github.com/gonvenience/term v1.0.2 // indirect github.com/gonvenience/text v1.0.7 // indirect @@ -137,10 +140,11 @@ require ( github.com/google/go-querystring v1.1.0 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect - github.com/google/uuid v1.4.0 // indirect + github.com/google/uuid v1.5.0 // indirect github.com/gorilla/handlers v1.5.1 // indirect - github.com/gorilla/mux v1.8.0 // indirect + github.com/gorilla/mux v1.8.1 // indirect github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/go-retryablehttp v0.7.5 // indirect @@ -154,7 +158,7 @@ require ( github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/kevinburke/ssh_config v1.2.0 // indirect - github.com/klauspost/compress v1.16.5 // indirect + github.com/klauspost/compress v1.17.4 // indirect github.com/kylelemons/godebug v1.1.0 // indirect github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect github.com/mailru/easyjson v0.7.7 // indirect @@ -177,12 +181,15 @@ require ( github.com/opencontainers/image-spec v1.1.0-rc3 // indirect github.com/peterbourgon/diskv v2.0.1+incompatible // indirect github.com/pjbgf/sha1cd v0.3.0 // indirect - github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 // indirect + github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect github.com/pkg/errors v0.9.1 // indirect - github.com/prometheus/client_golang v1.17.0 // indirect + github.com/prometheus/client_golang v1.18.0 // indirect github.com/prometheus/client_model v0.5.0 // indirect github.com/prometheus/common v0.45.0 // indirect github.com/prometheus/procfs v0.12.0 // 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 + github.com/redis/go-redis/v9 v9.1.0 // indirect github.com/rivo/uniseg v0.2.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/sergi/go-diff v1.3.1 // indirect @@ -191,27 +198,46 @@ require ( github.com/texttheater/golang-levenshtein v1.0.1 // indirect github.com/vbatts/tar-split v0.11.3 // indirect github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74 // indirect - github.com/xanzy/go-gitlab v0.95.1 // indirect + github.com/xanzy/go-gitlab v0.96.0 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect github.com/xlab/treeprint v1.2.0 // indirect + go.opentelemetry.io/contrib/exporters/autoexport v0.46.1 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1 // indirect + go.opentelemetry.io/otel v1.21.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.21.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.21.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.21.0 // indirect + go.opentelemetry.io/otel/sdk v1.21.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.21.0 // indirect + go.opentelemetry.io/otel/trace v1.21.0 // indirect + go.opentelemetry.io/proto/otlp v1.0.0 // indirect go.starlark.net v0.0.0-20231121155337-90ade8b19d09 // indirect golang.org/x/exp v0.0.0-20231206192017-f3f8817b8deb // indirect golang.org/x/mod v0.14.0 // indirect - golang.org/x/net v0.19.0 // indirect - golang.org/x/oauth2 v0.15.0 // indirect - golang.org/x/sync v0.5.0 // indirect - golang.org/x/sys v0.15.0 // indirect + golang.org/x/net v0.20.0 // indirect + golang.org/x/oauth2 v0.16.0 // indirect + golang.org/x/sync v0.6.0 // indirect + golang.org/x/sys v0.16.0 // indirect golang.org/x/time v0.5.0 // indirect - golang.org/x/tools v0.16.0 // indirect + golang.org/x/tools v0.17.0 // indirect gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect google.golang.org/appengine v1.6.8 // indirect - google.golang.org/protobuf v1.31.0 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect + google.golang.org/grpc v1.59.0 // indirect + google.golang.org/protobuf v1.32.0 // indirect gopkg.in/evanphx/json-patch.v5 v5.7.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/component-base v0.28.4 // indirect + k8s.io/component-base v0.28.6 // indirect k8s.io/klog/v2 v2.110.1 // indirect k8s.io/kube-openapi v0.0.0-20231206194836-bf4651e18aa8 // indirect k8s.io/utils v0.0.0-20231127182322-b307cd553661 // indirect diff --git a/go.sum b/go.sum index 8ca1859b..d2be5976 100644 --- a/go.sum +++ b/go.sum @@ -1,18 +1,18 @@ -code.gitea.io/sdk/gitea v0.17.0 h1:8JPBss4+Jf7AE1YcfyiGrngTXE8dFSG3si/bypsTH34= -code.gitea.io/sdk/gitea v0.17.0/go.mod h1:ndkDk99BnfiUCCYEUhpNzi0lpmApXlwRFqClBlOlEBg= +code.gitea.io/sdk/gitea v0.17.1 h1:3jCPOG2ojbl8AcfaUCRYLT5MUcBMFwS0OSK2mA5Zok8= +code.gitea.io/sdk/gitea v0.17.1/go.mod h1:aCnBqhHpoEWA180gMbaCtdX9Pl6BWBAuuP2miadoTNM= dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= -github.com/AdaLogics/go-fuzz-headers v0.0.0-20230106234847-43070de90fa1 h1:EKPd1INOIyr5hWOWhvpmQpY6tKjeG0hT1s3AMC/9fic= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.0 h1:fb8kj/Dh4CSwgsOzHeZY4Xh68cFVbzXx+ONXGMY//4w= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.0/go.mod h1:uReU2sSxZExRPBAg3qKzmAucSi51+SP1OhohieR821Q= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.4.0 h1:BMAjVKJM0U/CYF27gA0ZMmXGkOcvfFtD0oHVZ1TIPRI= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.4.0/go.mod h1:1fXstnBMas5kzG+S3q8UoJcmyU6nUeunJcMDHcRYHhs= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.0 h1:d81/ng9rET2YqdVkVwkb6EXeRrLJIwyGnJcAlAWKwhs= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.0/go.mod h1:s4kgfzA0covAXNicZHDMN58jExvcng2mC/DepXiF1EI= +github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 h1:bvDV9vkmnHYOMsOr4WLk+Vo07yKIzd94sVoIqshQ4bU= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.1 h1:lGlwhPtrX6EVml1hO0ivjkUxsSyl4dsiw9qcA1k/3IQ= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.1/go.mod h1:RKUqNu35KJYcVG/fqTRqmuXJZYNhYkBrnC/hX7yGbTA= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.5.1 h1:sO0/P7g68FrryJzljemN+6GTssUXdANk6aJ7T1ZxnsQ= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.5.1/go.mod h1:h8hyGFDsU5HMivxiS2iYFZsgDbU9OnnJ163x5UGVKYo= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.1 h1:6oNBlSdi1QqM1PNW7FPA6xOGA5UNsXnkaYZz9vdPGhA= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.1/go.mod h1:s4kgfzA0covAXNicZHDMN58jExvcng2mC/DepXiF1EI= github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= -github.com/AzureAD/microsoft-authentication-library-for-go v1.1.1 h1:WpB/QDNLpMw72xHJc34BNNykqSOeEJDAWkhf0u12/Jk= -github.com/AzureAD/microsoft-authentication-library-for-go v1.1.1/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI= +github.com/AzureAD/microsoft-authentication-library-for-go v1.2.1 h1:DzHpqpoJVaCgOUdVHxE8QB52S6NiVdDQvGlny1qvPqA= +github.com/AzureAD/microsoft-authentication-library-for-go v1.2.1/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI= github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8= github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= @@ -23,38 +23,38 @@ github.com/Masterminds/semver/v3 v3.2.1/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYr github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= -github.com/ProtonMail/go-crypto v0.0.0-20231012073058-a7379d079e0e h1:NfjGPY2A8SSRJvXny111ZPoB57LT5lWgX4XiUjW10eY= -github.com/ProtonMail/go-crypto v0.0.0-20231012073058-a7379d079e0e/go.mod h1:K4vciqCJaZ1Ghw/SvtJbEAM4soEtwDCNVqkdQIIujwU= +github.com/ProtonMail/go-crypto v1.0.0 h1:LRuvITjQWX+WIfr930YHG2HNfjR1uOfyf5vE0kC2U78= +github.com/ProtonMail/go-crypto v1.0.0/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= -github.com/aws/aws-sdk-go-v2 v1.24.0 h1:890+mqQ+hTpNuw0gGP6/4akolQkSToDJgHfQE7AwGuk= -github.com/aws/aws-sdk-go-v2 v1.24.0/go.mod h1:LNh45Br1YAkEKaAqvmE1m8FUx6a5b/V0oAKV7of29b4= -github.com/aws/aws-sdk-go-v2/config v1.26.1 h1:z6DqMxclFGL3Zfo+4Q0rLnAZ6yVkzCRxhRMsiRQnD1o= -github.com/aws/aws-sdk-go-v2/config v1.26.1/go.mod h1:ZB+CuKHRbb5v5F0oJtGdhFTelmrxd4iWO1lf0rQwSAg= -github.com/aws/aws-sdk-go-v2/credentials v1.16.12 h1:v/WgB8NxprNvr5inKIiVVrXPuuTegM+K8nncFkr1usU= -github.com/aws/aws-sdk-go-v2/credentials v1.16.12/go.mod h1:X21k0FjEJe+/pauud82HYiQbEr9jRKY3kXEIQ4hXeTQ= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.10 h1:w98BT5w+ao1/r5sUuiH6JkVzjowOKeOJRHERyy1vh58= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.10/go.mod h1:K2WGI7vUvkIv1HoNbfBA1bvIZ+9kL3YVmWxeKuLQsiw= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.9 h1:v+HbZaCGmOwnTTVS86Fleq0vPzOd7tnJGbFhP0stNLs= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.9/go.mod h1:Xjqy+Nyj7VDLBtCMkQYOw1QYfAEZCVLrfI0ezve8wd4= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.9 h1:N94sVhRACtXyVcjXxrwK1SKFIJrA9pOJ5yu2eSHnmls= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.9/go.mod h1:hqamLz7g1/4EJP+GH5NBhcUMLjW+gKLQabgyz6/7WAU= -github.com/aws/aws-sdk-go-v2/internal/ini v1.7.2 h1:GrSw8s0Gs/5zZ0SX+gX4zQjRnRsMJDJ2sLur1gRBhEM= -github.com/aws/aws-sdk-go-v2/internal/ini v1.7.2/go.mod h1:6fQQgfuGmw8Al/3M2IgIllycxV7ZW7WCdVSqfBeUiCY= -github.com/aws/aws-sdk-go-v2/service/ecr v1.24.5 h1:wLPDAUFT50NEXGXpywRU3AA74pg35RJjWol/68ruvQQ= -github.com/aws/aws-sdk-go-v2/service/ecr v1.24.5/go.mod h1:AOHmGMoPtSY9Zm2zBuwUJQBisIvYAZeA1n7b6f4e880= +github.com/aws/aws-sdk-go-v2 v1.24.1 h1:xAojnj+ktS95YZlDf0zxWBkbFtymPeDP+rvUQIH3uAU= +github.com/aws/aws-sdk-go-v2 v1.24.1/go.mod h1:LNh45Br1YAkEKaAqvmE1m8FUx6a5b/V0oAKV7of29b4= +github.com/aws/aws-sdk-go-v2/config v1.26.6 h1:Z/7w9bUqlRI0FFQpetVuFYEsjzE3h7fpU6HuGmfPL/o= +github.com/aws/aws-sdk-go-v2/config v1.26.6/go.mod h1:uKU6cnDmYCvJ+pxO9S4cWDb2yWWIH5hra+32hVh1MI4= +github.com/aws/aws-sdk-go-v2/credentials v1.16.16 h1:8q6Rliyv0aUFAVtzaldUEcS+T5gbadPbWdV1WcAddK8= +github.com/aws/aws-sdk-go-v2/credentials v1.16.16/go.mod h1:UHVZrdUsv63hPXFo1H7c5fEneoVo9UXiz36QG1GEPi0= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.11 h1:c5I5iH+DZcH3xOIMlz3/tCKJDaHFwYEmxvlh2fAcFo8= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.11/go.mod h1:cRrYDYAMUohBJUtUnOhydaMHtiK/1NZ0Otc9lIb6O0Y= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.10 h1:vF+Zgd9s+H4vOXd5BMaPWykta2a6Ih0AKLq/X6NYKn4= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.10/go.mod h1:6BkRjejp/GR4411UGqkX8+wFMbFbqsUIimfK4XjOKR4= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.10 h1:nYPe006ktcqUji8S2mqXf9c/7NdiKriOwMvWQHgYztw= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.10/go.mod h1:6UV4SZkVvmODfXKql4LCbaZUpF7HO2BX38FgBf9ZOLw= +github.com/aws/aws-sdk-go-v2/internal/ini v1.7.3 h1:n3GDfwqF2tzEkXlv5cuy4iy7LpKDtqDMcNLfZDu9rls= +github.com/aws/aws-sdk-go-v2/internal/ini v1.7.3/go.mod h1:6fQQgfuGmw8Al/3M2IgIllycxV7ZW7WCdVSqfBeUiCY= +github.com/aws/aws-sdk-go-v2/service/ecr v1.24.7 h1:3iaT/LnGV6jNtbBkvHZDlzz7Ky3wMHDJAyFtGd5GUJI= +github.com/aws/aws-sdk-go-v2/service/ecr v1.24.7/go.mod h1:mtzCLxk6M+KZbkJdq3cUH9GCrudw8qCy5C3EHO+5vLc= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.4 h1:/b31bi3YVNlkzkBrm9LfpaKoaYZUxIAj4sHfOTmLfqw= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.4/go.mod h1:2aGXHFmbInwgP9ZfpmdIfOELL79zhdNYNmReK8qDfdQ= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.9 h1:Nf2sHxjMJR8CSImIVCONRi4g0Su3J+TSTbS7G0pUeMU= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.9/go.mod h1:idky4TER38YIjr2cADF1/ugFMKvZV7p//pVeV5LZbF0= -github.com/aws/aws-sdk-go-v2/service/sso v1.18.5 h1:ldSFWz9tEHAwHNmjx2Cvy1MjP5/L9kNoR0skc6wyOOM= -github.com/aws/aws-sdk-go-v2/service/sso v1.18.5/go.mod h1:CaFfXLYL376jgbP7VKC96uFcU8Rlavak0UlAwk1Dlhc= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.21.5 h1:2k9KmFawS63euAkY4/ixVNsYYwrwnd5fIvgEKkfZFNM= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.21.5/go.mod h1:W+nd4wWDVkSUIox9bacmkBP5NMFQeTJ/xqNabpzSR38= -github.com/aws/aws-sdk-go-v2/service/sts v1.26.5 h1:5UYvv8JUvllZsRnfrcMQ+hJ9jNICmcgKPAO1CER25Wg= -github.com/aws/aws-sdk-go-v2/service/sts v1.26.5/go.mod h1:XX5gh4CB7wAs4KhcF46G6C8a2i7eupU19dcAAE+EydU= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.10 h1:DBYTXwIGQSGs9w4jKm60F5dmCQ3EEruxdc0MFh+3EY4= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.10/go.mod h1:wohMUQiFdzo0NtxbBg0mSRGZ4vL3n0dKjLTINdcIino= +github.com/aws/aws-sdk-go-v2/service/sso v1.18.7 h1:eajuO3nykDPdYicLlP3AGgOyVN3MOlFmZv7WGTuJPow= +github.com/aws/aws-sdk-go-v2/service/sso v1.18.7/go.mod h1:+mJNDdF+qiUlNKNC3fxn74WWNN+sOiGOEImje+3ScPM= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.21.7 h1:QPMJf+Jw8E1l7zqhZmMlFw6w1NmfkfiSK8mS4zOx3BA= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.21.7/go.mod h1:ykf3COxYI0UJmxcfcxcVuz7b6uADi1FkiUz6Eb7AgM8= +github.com/aws/aws-sdk-go-v2/service/sts v1.26.7 h1:NzO4Vrau795RkUdSHKEwiR01FaGzGOH1EETJ+5QHnm0= +github.com/aws/aws-sdk-go-v2/service/sts v1.26.7/go.mod h1:6h2YuIoxaMSCFf5fi1EgZAwdfkGMgDY+DVfa61uLe4U= github.com/aws/smithy-go v1.19.0 h1:KWFKQV80DpP3vJrrA9sVAHQ5gc2z8i4EzrLhLlWXcBM= github.com/aws/smithy-go v1.19.0/go.mod h1:NukqUGpCZIILqqiV0NIjeFh24kd/FAa4beRb6nbIUPE= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= @@ -63,7 +63,13 @@ github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bshuster-repo/logrus-logstash-hook v1.0.0 h1:e+C0SB5R1pu//O4MQ3f9cFuPGoOVeF2fE4Og9otCc70= github.com/bshuster-repo/logrus-logstash-hook v1.0.0/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk= +github.com/bsm/ginkgo/v2 v2.7.0/go.mod h1:AiKlXPm7ItEHNc/2+OkrNG4E0ITzojb9/xWzvQ9XZ9w= +github.com/bsm/ginkgo/v2 v2.9.5 h1:rtVBYPs3+TC5iLUVOis1B9tjLTup7Cj5IfzosKtvTJ0= +github.com/bsm/gomega v1.26.0 h1:LhQm+AFcgV2M0WyKroMASzAzCAJVpAxQXv4SaI9a69Y= +github.com/bsm/gomega v1.26.0/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0= github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= +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/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chai2010/gettext-go v1.0.2 h1:1Lwwip6Q2QGsAdl/ZKPCwTe9fe0CjlUbqj5bFNSjIRk= @@ -79,6 +85,8 @@ github.com/cloudflare/circl v1.3.7 h1:qlCDlTPz2n9fu58M0Nh1J/JzcFpfgkFHHX3O35r5vc github.com/cloudflare/circl v1.3.7/go.mod h1:sRTcRWXGLrKw6yIGJ+l7amYJFfAXbZG0kBSc8r4zxgA= github.com/containerd/stargz-snapshotter/estargz v0.14.3 h1:OqlDCK3ZVUO6C3B/5FSkDwbkEETK84kQgEeFwDC+62k= github.com/containerd/stargz-snapshotter/estargz v0.14.3/go.mod h1:KY//uOCIkSuNAHhJogcZtrNHdKrA99/FCCRjE3HD36o= +github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= +github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/cpuguy83/go-md2man/v2 v2.0.3 h1:qMCsGGgs+MAzDFyp9LpAe1Lqy/fY/qCovCm0qnXZOBM= github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= @@ -91,8 +99,12 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davidmz/go-pageant v1.0.2 h1:bPblRCh5jGU+Uptpz6LgMZGD5hJoOt7otgT454WvHn0= github.com/davidmz/go-pageant v1.0.2/go.mod h1:P2EDDnMqIwG5Rrp05dTRITj9z2zpGcD9efWSkTNKLIE= -github.com/distribution/distribution/v3 v3.0.0-20230823142118-4f7424c8eb41 h1:vlGNYFw1NB27Gk5tIwJpiog1Ti6FKOUI+DoFZKoCDZo= -github.com/distribution/distribution/v3 v3.0.0-20230823142118-4f7424c8eb41/go.mod h1:WREzLx07iIFUGvbm6tBoqGt40zOC3whiM1qkcWOMFrs= +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= +github.com/distribution/distribution/v3 v3.0.0-alpha.1 h1:jn7I1gvjOvmLztH1+1cLiUFud7aeJCIQcgzugtwjyJo= +github.com/distribution/distribution/v3 v3.0.0-alpha.1/go.mod h1:LCp4JZp1ZalYg0W/TN05jarCQu+h4w7xc7ZfQF4Y/cY= +github.com/distribution/reference v0.5.0 h1:/FUIFXtfc/x2gpa5/VGfiGLuOIdYa1t65IKK2OFGvA0= +github.com/distribution/reference v0.5.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI= github.com/docker/cli v24.0.0+incompatible h1:0+1VshNwBQzQAx9lOl+OYCTCEAD8fKs/qeXMx3O0wqM= github.com/docker/cli v24.0.0+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= @@ -106,8 +118,6 @@ github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c h1:+pKlWGMw7gf6bQ github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= github.com/docker/go-metrics v0.0.1 h1:AgB/0SvBxihN0X8OR4SjsblXkbMvalQ8cjmtKQ2rQV8= github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw= -github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1 h1:ZClxb8laGDf5arXfYcAtECDFgAgHklGI8CxgjHnXKJ4= -github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE= github.com/drone/envsubst v1.0.3 h1:PCIBwNDYjs50AsLZPYdfhSATKaRg/FJmDc2D6+C2x8g= github.com/drone/envsubst v1.0.3/go.mod h1:N2jZmlMufstn1KEqvbHjw40h1KyTmnVzHcSc9bFiJ2g= github.com/elazarl/goproxy v0.0.0-20231117061959-7cc037d33fb5 h1:m62nsMU279qRD9PQSWD1l66kmkXzuYcnVJqL4XLeV2M= @@ -124,13 +134,13 @@ github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f/go.mod h1:OSY github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/felixge/httpsnoop v1.0.3 h1:s/nj+GCswXYzN5v2DpNMuMQYe+0DDwt5WVCU6CWBdXk= -github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/fluxcd/cli-utils v0.36.0-flux.2 h1:7nlXfAJ7iaDF34IdbyId+wBf7beL2qvzDBLmVBJSDVo= -github.com/fluxcd/cli-utils v0.36.0-flux.2/go.mod h1:TQtgRf9OjQBzE5FJ9UDV6WNz9Po3pzAtk3NQmQEN5l8= +github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= +github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/fluxcd/cli-utils v0.36.0-flux.3 h1:5CQTOc08UnabfwluIYxIhlhpCCTplWBn/xpjVr560J0= +github.com/fluxcd/cli-utils v0.36.0-flux.3/go.mod h1:9lShvUz7uRPIjYZ6phr5AOuORkRDmaUgf/sZN7SDcpo= github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= -github.com/fluxcd/go-git-providers v0.19.2 h1:G/O0z4WUlgChV6o3YrZ1GP1ZgZSd8ZJWACIW0ICqxMo= -github.com/fluxcd/go-git-providers v0.19.2/go.mod h1:V44pmhFqoZ8heFJEBU1PS+OHTwLWOfoj0nKpFAqik6Y= +github.com/fluxcd/go-git-providers v0.19.3 h1:G70yZR6biRgOE7FJVnSTLran642K9rm645wlXPNxLvw= +github.com/fluxcd/go-git-providers v0.19.3/go.mod h1:NyHogwOJXUflL8IX05ycVjXwmvxqql0WgbVkmoj+iiE= github.com/fluxcd/helm-controller/api v0.37.2 h1:tkLezpRdqPDz7HoKHFu92sV+ppOCVDxkjFTh8/lpff8= github.com/fluxcd/helm-controller/api v0.37.2/go.mod h1:BuXZhAX9blQviil6yUN5zNM4RB753yhyBTJXxXff7Mo= github.com/fluxcd/image-automation-controller/api v0.37.0 h1:0L8kzX3zaYfg4wQ2Mx3G56atLMNeDGjy5qMGP4tDKRs= @@ -143,29 +153,29 @@ github.com/fluxcd/notification-controller/api v1.2.3 h1:vXVMg2PmTjmRC5+ULZfbmBEm github.com/fluxcd/notification-controller/api v1.2.3/go.mod h1:A0VkH3mswQAeGKsmzq81jAUN+zNJt9SPXjwe8mvnnaw= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= -github.com/fluxcd/pkg/apis/event v0.6.0 h1:AUaeee1CGWb65BLqVximHXG8Gcu6vWuYONIq6tVpjgo= -github.com/fluxcd/pkg/apis/event v0.6.0/go.mod h1:OEzWcX/oPbMmkCvC9QGoK27JXFvUZgBhLD+zgxZe47A= -github.com/fluxcd/pkg/apis/kustomize v1.2.0 h1:vkVs+OumxaWso0jNCqdgFFfMHdh+qtZhykTkjl7OgmA= -github.com/fluxcd/pkg/apis/kustomize v1.2.0/go.mod h1:VF7tR/WuVFeum+HaMTHwp+eCtsHiiQlY6ihgqtAnW/M= -github.com/fluxcd/pkg/apis/meta v1.2.0 h1:O766PzGAdMdQKybSflGL8oV0+GgCNIkdsxfalRyzeO8= -github.com/fluxcd/pkg/apis/meta v1.2.0/go.mod h1:fU/Az9AoVyIxC0oI4ihG0NVMNnvrcCzdEym3wxjIQsc= -github.com/fluxcd/pkg/git v0.16.0 h1:xgfMpgsVaxGLechKNaSUif9jnt2Ji/HkwIwxXeDoADk= -github.com/fluxcd/pkg/git v0.16.0/go.mod h1:ZsaxXDBHIUjNeRf+3qDGyHD22KpqbjuNPCbHy2Xid5U= -github.com/fluxcd/pkg/git/gogit v0.16.1 h1:byimVk7VLbERRxJDkVktithN03GC0y7fyc8Ur9Uka8U= -github.com/fluxcd/pkg/git/gogit v0.16.1/go.mod h1:nx3PumOFe5e3fMsh2HPLSlAeOk2wC+jVg7H9BTRKEmg= -github.com/fluxcd/pkg/gittestserver v0.9.0 h1:OthMahtKmmpwCRw8LmSGrceqVhHywGg/QiytxHGSgeY= -github.com/fluxcd/pkg/kustomize v1.5.0 h1:Q2kynQzF4coKlOJq/XaLM+gVmVloaInkoa+vsor6Hho= -github.com/fluxcd/pkg/kustomize v1.5.0/go.mod h1:QgFwpteTedb7oio5+yN+h+rhSgm253OIjmtoTow+a5c= -github.com/fluxcd/pkg/oci v0.33.3 h1:dj5IuF2O9/0r37tOWoOoKX/0emytjEiJ6sXy9FUkHww= -github.com/fluxcd/pkg/oci v0.33.3/go.mod h1:6+vIgdqP6AkFitvlyGx2W9f4s8q5Oguw9SNeN494MCY= -github.com/fluxcd/pkg/runtime v0.43.2 h1:xH2BvttUqJ7wS0zjuBETr2pLXG62QY6f0mdxg5UQKio= -github.com/fluxcd/pkg/runtime v0.43.2/go.mod h1:dhhNV45B3tekg7qPzATFTuWOulvUzMoO1bV+vc2pSts= -github.com/fluxcd/pkg/sourceignore v0.4.0 h1:99Ikoi8qMirlBK4yjnoKa5vx9YFQ/BSSK3Axi+yDg9s= -github.com/fluxcd/pkg/sourceignore v0.4.0/go.mod h1:j1BRQE+R0TJmPYPUnEd/0gm8KcpajlX6mDv3z7s8YFQ= -github.com/fluxcd/pkg/ssa v0.35.0 h1:8T3WY4P9SQWApa2hq1rU1u2WE8oqP3MMTsAiEWwhmfo= -github.com/fluxcd/pkg/ssa v0.35.0/go.mod h1:rhVh0EtYVUOznKXlz6E7JOSgdc8xWbIwA4L5HVtJRLA= -github.com/fluxcd/pkg/ssh v0.10.0 h1:JFz0u/CPEf3hXvmrEvUvXsc70eKh8xphqjXxZuSby9g= -github.com/fluxcd/pkg/ssh v0.10.0/go.mod h1:1lFTj3MhU9xQuaJ5PJJoh/FyRYzK54ll9NY/s2KqOZM= +github.com/fluxcd/pkg/apis/event v0.7.0 h1:QN/gz9i5kZ3GlfTOE6SCjjnSXrSPUU75MCVRwN8U+qo= +github.com/fluxcd/pkg/apis/event v0.7.0/go.mod h1:zdqe8SVXjFQ/Nfuk51c2SJe0NkyNwYOxSFtN6SmikVs= +github.com/fluxcd/pkg/apis/kustomize v1.3.0 h1:qvB46CfaOWcL1SyR2RiVWN/j7/035D0OtB1ltLN7rgI= +github.com/fluxcd/pkg/apis/kustomize v1.3.0/go.mod h1:PCXf5kktTzNav0aH2Ns3jsowqwmA9xTcsrEOoPzx/K8= +github.com/fluxcd/pkg/apis/meta v1.3.0 h1:KxeEc6olmSZvQ5pBONPE4IKxyoWQbqTJF1X6K5nIXpU= +github.com/fluxcd/pkg/apis/meta v1.3.0/go.mod h1:3Ui8xFkoU4sYehqmscjpq7NjqH2YN1A2iX2okbO3/yA= +github.com/fluxcd/pkg/git v0.17.0 h1:eHL8IazeX2HXwXzT6zLdzGaX3H37n/ipkdd1+byyzUM= +github.com/fluxcd/pkg/git v0.17.0/go.mod h1:lBeHCTtVt9py9mMGj5sKs4+aFpMWGjH73gx5i818i6o= +github.com/fluxcd/pkg/git/gogit v0.17.0 h1:X8C+q/Nm/MjBKAoqw9NPpnJh0B3IxVLtqPgH+wT9NEg= +github.com/fluxcd/pkg/git/gogit v0.17.0/go.mod h1:qyRSCQy41wG0FwUwKQtfSnwqkrJg5XB4UdMvrHjIcFY= +github.com/fluxcd/pkg/gittestserver v0.10.0 h1:joqfczQNtguZFGxTuRL535ymDW/9clA1jBWa3d8B6WU= +github.com/fluxcd/pkg/kustomize v1.6.0 h1:LIZ0BkpGLkyj33yzJ3HUsNzJ20wcLSxkUFcZg9kpg34= +github.com/fluxcd/pkg/kustomize v1.6.0/go.mod h1:LitgZWd9+2X9g+Y4JeyZJewel+E10OIkUaUw4t4YWM8= +github.com/fluxcd/pkg/oci v0.35.0 h1:VPFeEsF9U2O5Vg/l/cD0d6+MHzQUJGpT3OBSGEXpN8U= +github.com/fluxcd/pkg/oci v0.35.0/go.mod h1:B5Q+Rb4zfQ9GR24FjUsCNmQMWXNRfsC0ovHxFXrpUCo= +github.com/fluxcd/pkg/runtime v0.44.0 h1:0BEPSpcsYXOiswKG5TWkin8fhCDHb0nDdAtq/5VrCSI= +github.com/fluxcd/pkg/runtime v0.44.0/go.mod h1:s1AhSOTCEBPaTfz/GdBD/Ws66uOByIuNP4Znrq+is9M= +github.com/fluxcd/pkg/sourceignore v0.5.0 h1:8ffSJCRIKsMpxXjGPVeRK3xhGUjuk+tFILf/+EODCVg= +github.com/fluxcd/pkg/sourceignore v0.5.0/go.mod h1:cJsXn+wYmRY3VamrtG9I3MBL2wjtns2bS7ARIht2XAQ= +github.com/fluxcd/pkg/ssa v0.36.0 h1:h9FB6SrrdVlxNQtfG+Fb/Roe1e61EPgtmJ5ORlAxwkU= +github.com/fluxcd/pkg/ssa v0.36.0/go.mod h1:FJj4xznwBvRM+9h02lGGC0CGYGucPeXO7P6NEPphbys= +github.com/fluxcd/pkg/ssh v0.11.0 h1:7WDDrcB0cNimzZjrpkzYBrizkrUgyM4Zr2cd9z9aqpU= +github.com/fluxcd/pkg/ssh v0.11.0/go.mod h1:K8YgH8KM0GV5DWuRErX3iKgpoHlYh08SBK+U5Q0teJc= github.com/fluxcd/pkg/tar v0.4.0 h1:SuXpfXBIcSJ5R/yqQi2CBxBmV/i/LH0agqNAh2PWBZg= github.com/fluxcd/pkg/tar v0.4.0/go.mod h1:SyJBaQvuv2VA/rv4d1OHhCV6R8+9QKc9np193EzNHBc= github.com/fluxcd/pkg/version v0.2.2 h1:ZpVXECeLA5hIQMft11iLp6gN3cKcz6UNuVTQPw/bRdI= @@ -189,8 +199,12 @@ github.com/go-git/go-git/v5 v5.11.0/go.mod h1:6GFcX2P3NM7FPBfpePbpLd21XxsgdAt+lK github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= +github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-logr/zapr v1.3.0 h1:XGdV8XW8zdwFiwOA2Dryh1gj2KRQyOOoNmBy4EplIcQ= github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= github.com/go-openapi/jsonpointer v0.20.0 h1:ESKJdU9ASRfaPNOPRx12IUyA1vn3R9GiE3KYD14BXdQ= @@ -202,12 +216,14 @@ github.com/go-openapi/swag v0.22.4 h1:QLMzNJnMGPRNDCbySlcj1x01tzU8/9LTTL9hZZZogB github.com/go-openapi/swag v0.22.4/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= +github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gofrs/uuid v4.4.0+incompatible h1:3qXRTX8/NbyulANqlc0lchS1gqAVxRgsuW1YrTJupqA= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang-jwt/jwt/v5 v5.0.0 h1:1n1XNM9hk7O9mnQoNBGolZvzebBQ7p93ULHRc28XJUE= -github.com/golang-jwt/jwt/v5 v5.0.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= +github.com/golang-jwt/jwt/v5 v5.2.0 h1:d/ix8ftRUorsN+5eMIlF4T6J8CAt9rch3My2winC1Jw= +github.com/golang-jwt/jwt/v5 v5.2.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= +github.com/golang/glog v1.1.2 h1:DVjP2PbBOzHyzA+dn3WhHIq4NdVu3Q+pvivFICf/7fo= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -217,8 +233,6 @@ github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaS github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/gomodule/redigo v1.8.2 h1:H5XSIre1MB5NbPYFp+i1NBbb5qN1W8Y8YAQoAYbkm8k= -github.com/gomodule/redigo v1.8.2/go.mod h1:P9dn9mFrCBvWhGE1wpxx6fgq7BAeLBk+UUUzlpkBYO0= github.com/gonvenience/bunt v1.3.5 h1:wSQquifvwEWtzn27k1ngLfeLaStyt0k1b/K6TrlCNAs= github.com/gonvenience/bunt v1.3.5/go.mod h1:7ApqkVBEWvX04oJ28Q2WeI/BvJM6VtukaJAU/q/pTs8= github.com/gonvenience/neat v1.3.12 h1:xwIyRbJcG9LgcDYys+HHLH9DqqHeQsUpS5CfBUeskbs= @@ -242,8 +256,8 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-containerregistry v0.17.0 h1:5p+zYs/R4VGHkhyvgWurWrpJ2hW4Vv9fQI+GzdcwXLk= -github.com/google/go-containerregistry v0.17.0/go.mod h1:u0qB2l7mvtWVR5kNcbFIhFY1hLbf8eeGapA+vbFDCtQ= +github.com/google/go-containerregistry v0.19.0 h1:uIsMRBV7m/HDkDxE/nXMnv1q+lOOSPlQ/ywc5JbB8Ic= +github.com/google/go-containerregistry v0.19.0/go.mod h1:u0qB2l7mvtWVR5kNcbFIhFY1hLbf8eeGapA+vbFDCtQ= github.com/google/go-github/v57 v57.0.0 h1:L+Y3UPTY8ALM8x+TV0lg+IEBI+upibemtBD8Q9u7zHs= github.com/google/go-github/v57 v57.0.0/go.mod h1:s0omdnye0hvK/ecLvpsGfJMiRt85PimQh4oygmLIxHw= github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= @@ -254,15 +268,17 @@ github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/ github.com/google/pprof v0.0.0-20230602150820-91b7bce49751 h1:hR7/MlvK23p6+lIw9SN1TigNLn9ZnF3W4SYRKq2gAHs= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= -github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4= -github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.5.0 h1:1p67kYwdtXjb0gL0BPiP1Av9wiZPo5A8z2cWkTZ+eyU= +github.com/google/uuid v1.5.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= -github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= -github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= +github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= +github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 h1:+ngKgrYPPJrOjhax5N+uePQ0Fh1Z7PheYoUI/0nzkPA= github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0 h1:YBftPWNWd4WwGqtY2yeZL2ef8rHAxPBD8KFhJpmcqms= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0/go.mod h1:YN5jB8ie0yfIUg6VvR9Kz84aCaG7AsGZnLjhHbUqwPg= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -274,7 +290,6 @@ github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+l github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-retryablehttp v0.7.5 h1:bJj+Pj19UZMIweq/iie+1u5YCdGrnxCT9yvm0e+Nd5M= github.com/hashicorp/go-retryablehttp v0.7.5/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8= -github.com/hashicorp/go-version v1.5.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/golang-lru/arc/v2 v2.0.5 h1:l2zaLDubNhW4XO3LnliVj0GXO3+/CGNJAg1dcN2Fpfw= @@ -304,8 +319,8 @@ github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4 github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.16.5 h1:IFV2oUNUzZaz+XyusxpLzpzS8Pt5rh0Z16For/djlyI= -github.com/klauspost/compress v1.16.5/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= +github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= @@ -370,9 +385,9 @@ github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= -github.com/onsi/ginkgo/v2 v2.13.2 h1:Bi2gGVkfn6gQcjNjZJVO8Gf0FHzMPf2phUei9tejVMs= -github.com/onsi/gomega v1.30.0 h1:hvMK7xYz4D3HapigLTeGdId/NcfQx1VHMJc60ew99+8= -github.com/onsi/gomega v1.30.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ= +github.com/onsi/ginkgo/v2 v2.15.0 h1:79HwNRBAZHOEwrczrgSOPy+eFTTlIGELKy5as+ClttY= +github.com/onsi/gomega v1.31.1 h1:KYppCUK+bUgAZwHOu7EXVBKyQA6ILvOESHkn/tgoqvo= +github.com/onsi/gomega v1.31.1/go.mod h1:y40C95dwAD1Nz36SsEnxvfFe8FFfNxzI5eJ0EYGyAy0= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.0-rc3 h1:fzg1mXZFj8YdPeNkRXMg+zb88BFV0Ys52cJydRwBkb8= @@ -384,8 +399,8 @@ github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1H github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4= github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI= -github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU= -github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= +github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ= +github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -394,8 +409,8 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= -github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q= -github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY= +github.com/prometheus/client_golang v1.18.0 h1:HzFfmkOzH5Q8L8G+kSJKUx5dtG87sewO+FoDDqP5Tbk= +github.com/prometheus/client_golang v1.18.0/go.mod h1:T+GXkCk5wSJyOqMIzVgvvjFDlkOQntgjkJWKrN5txjA= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw= @@ -409,6 +424,13 @@ github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsT github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= +github.com/redis/go-redis/extra/rediscmd/v9 v9.0.5 h1:EaDatTxkdHG+U3Bk4EUr+DZ7fOGwTfezUiUJMaIcaho= +github.com/redis/go-redis/extra/rediscmd/v9 v9.0.5/go.mod h1:fyalQWdtzDBECAQFBJuQe5bzQ02jGd5Qcbgb97Flm7U= +github.com/redis/go-redis/extra/redisotel/v9 v9.0.5 h1:EfpWLLCyXw8PSM2/XNJLjI3Pb27yVE+gIAfeqp8LUCc= +github.com/redis/go-redis/extra/redisotel/v9 v9.0.5/go.mod h1:WZjPDy7VNzn77AAfnAfVjZNvfJTYfPetfZk5yoSTLaQ= +github.com/redis/go-redis/v9 v9.0.5/go.mod h1:WqMKv5vnQbRuZstUwxQI195wHy+t4PuXDOjzMvcuQHk= +github.com/redis/go-redis/v9 v9.1.0 h1:137FnGdk+EQdCbye1FW+qOEcY5S+SpY9T0NiuqvtfMY= +github.com/redis/go-redis/v9 v9.1.0/go.mod h1:urWj3He21Dj5k4TK1y59xH8Uj6ATueP8AH1cY3lZl4c= github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= @@ -435,7 +457,6 @@ github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpE github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= @@ -451,8 +472,8 @@ github.com/vbatts/tar-split v0.11.3 h1:hLFqsOLQ1SsppQNTMpkpPXClLDfC2A3Zgy9OUU+RV github.com/vbatts/tar-split v0.11.3/go.mod h1:9QlHN18E+fEH7RdG+QAJJcuya3rqT7eXSTY7wGrAokY= github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74 h1:JwtAtbp7r/7QSyGz8mKUbYJBg2+6Cd7OjM8o/GNOcVo= github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74/go.mod h1:RmMWU37GKR2s6pgrIEB4ixgpVCt/cf7dnJv3fuH1J1c= -github.com/xanzy/go-gitlab v0.95.1 h1:rQjcmX5Au2Lz9bc3QLTdtSK5ZHdTXLnmhz3CAB/G5So= -github.com/xanzy/go-gitlab v0.95.1/go.mod h1:ETg8tcj4OhrB84UEgeE8dSuV/0h4BBL1uOV/qK0vlyI= +github.com/xanzy/go-gitlab v0.96.0 h1:LGkZ+wSNMRtHIBaYE4Hq3dZVjprwHv3Y1+rhKU3WETs= +github.com/xanzy/go-gitlab v0.96.0/go.mod h1:ETg8tcj4OhrB84UEgeE8dSuV/0h4BBL1uOV/qK0vlyI= github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= github.com/xlab/treeprint v1.2.0 h1:HzHnuAF1plUN2zGlAFHbSQP2qJ0ZAD3XF5XD7OesXRQ= @@ -460,6 +481,38 @@ github.com/xlab/treeprint v1.2.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +go.opentelemetry.io/contrib/exporters/autoexport v0.46.1 h1:ysCfPZB9AjUlMa1UHYup3c9dAOCMQX/6sxSfPBUoxHw= +go.opentelemetry.io/contrib/exporters/autoexport v0.46.1/go.mod h1:ha0aiYm+DOPsLHjh0zoQ8W8sLT+LJ58J3j47lGpSLrU= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1 h1:aFJWCqJMNjENlcleuuOkGAPH82y0yULBScfXcIEdS24= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1/go.mod h1:sEGXWArGqc3tVa+ekntsN65DmVbVeW+7lTKTjZF3/Fo= +go.opentelemetry.io/otel v1.21.0 h1:hzLeKBZEL7Okw2mGzZ0cc4k/A7Fta0uoPgaJCr8fsFc= +go.opentelemetry.io/otel v1.21.0/go.mod h1:QZzNPQPm1zLX4gZK4cMi+71eaorMSGT3A4znnUvNNEo= +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.21.0 h1:cl5P5/GIfFh4t6xyruOgJP5QiA1pw4fYYdv6nc6CBWw= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.21.0/go.mod h1:zgBdWWAu7oEEMC06MMKc5NLbA/1YDXV1sMpSqEeLQLg= +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/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= +go.opentelemetry.io/otel/exporters/prometheus v0.44.0/go.mod h1:ERL2uIeBtg4TxZdojHUwzZfIFlUIjZtxubT5p4h1Gjg= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v0.44.0 h1:dEZWPjVN22urgYCza3PXRUGEyCB++y1sAqm6guWFesk= +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.21.0 h1:tlYWfeo+Bocx5kLEloTjbcDwBuELRrIFxwdQ36PlJu4= +go.opentelemetry.io/otel/metric v1.21.0/go.mod h1:o1p3CA8nNHW8j5yuQLdc1eeqEaPfzug24uvsyIEJRWM= +go.opentelemetry.io/otel/sdk v1.21.0 h1:FTt8qirL1EysG6sTQRZ5TokkU8d0ugCj8htOgThZXQ8= +go.opentelemetry.io/otel/sdk v1.21.0/go.mod h1:Nna6Yv7PWTdgJHVRD9hIYywQBRx7pbox6nwBnZIxl/E= +go.opentelemetry.io/otel/sdk/metric v1.21.0 h1:smhI5oD714d6jHE6Tie36fPx4WDFIg+Y6RfAY4ICcR0= +go.opentelemetry.io/otel/sdk/metric v1.21.0/go.mod h1:FJ8RAsoPGv/wYMgBdUJXOm+6pzFY3YdljnXtv1SBE8Q= +go.opentelemetry.io/otel/trace v1.21.0 h1:WD9i5gzvoUPuXIXH24ZNBudiarZDKuekPqi/E8fpfLc= +go.opentelemetry.io/otel/trace v1.21.0/go.mod h1:LGbsEB0f9LGjN+OZaQQ26sohbOmiMR+BaslueVtS/qQ= +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.starlark.net v0.0.0-20231121155337-90ade8b19d09 h1:hzy3LFnSN8kuQK8h9tHl4ndF6UruMj47OqwqsS+/Ai4= go.starlark.net v0.0.0-20231121155337-90ade8b19d09/go.mod h1:LcLNIzVOMp4oV+uusnpk+VU+SzXaJakUuBjoCSWH5dM= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= @@ -471,12 +524,12 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= -golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= -golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k= +golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= +golang.org/x/crypto v0.18.0 h1:PGVlW0xEltQnzFZ55hkuX5+KLyrMYhHld1YHO4AKcdc= +golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= golang.org/x/exp v0.0.0-20231206192017-f3f8817b8deb h1:c0vyKkb6yr3KR7jEfJaOSv4lG7xPkbN6r52aJz1d8a8= golang.org/x/exp v0.0.0-20231206192017-f3f8817b8deb/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= @@ -496,11 +549,12 @@ golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.6.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.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c= -golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= -golang.org/x/oauth2 v0.15.0 h1:s8pnnxNVzjWyrvYdFUQq5llS1PX2zhPXmccZv99h7uQ= -golang.org/x/oauth2 v0.15.0/go.mod h1:q48ptWNTY5XWf+JNten23lcvHpLJ0ZSxF5ttTHKVCAM= +golang.org/x/net v0.20.0 h1:aCL9BSgETF1k+blQaYUBx9hJ9LOGP3gAVemcZlf1Kpo= +golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= +golang.org/x/oauth2 v0.16.0 h1:aDkGMBSYxElaoP81NpoUoz2oo2R2wHdZpGToUxfyQrQ= +golang.org/x/oauth2 v0.16.0/go.mod h1:hqZ+0LWXsiVoZpeld6jVt06P3adbS2Uu911W1SsJv2o= 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= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -508,8 +562,8 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= -golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= +golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -524,7 +578,6 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -532,20 +585,24 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220906165534-d0df966e6959/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU= +golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 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= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +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 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4= golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= +golang.org/x/term v0.16.0 h1:m+B6fahuftsE9qjo0VWp2FW0mB3MTJvR0BaMQrq0pmE= +golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -553,6 +610,7 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= @@ -564,8 +622,8 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= 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.16.0 h1:GO788SKMRunPIBCXiQyo2AaexLstOrVhuAL5YwsckQM= -golang.org/x/tools v0.16.0/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0= +golang.org/x/tools v0.17.0 h1:FvmRgNOcs3kOa+T20R1uhfP9F6HgG2mfxDv1vrx1Htc= +golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -574,10 +632,17 @@ gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw gomodules.xyz/jsonpatch/v2 v2.4.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY= google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= +google.golang.org/genproto v0.0.0-20230822172742-b8732ec3820d h1:VBu5YqKPv6XiJ199exd8Br+Aetz+o08F+PLMnwJQHAY= +google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d h1:DoPTO70H+bcDXcd39vOqb2viZxgqeBeSGtZ55yZU4/Q= +google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d/go.mod h1:KjSP20unUpOx5kyQUFa7k4OJg0qeJ7DEZflGDu2p6Bk= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M= +google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk= +google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= -google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7I= +google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= 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= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -598,24 +663,24 @@ gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0= -k8s.io/api v0.28.4 h1:8ZBrLjwosLl/NYgv1P7EQLqoO8MGQApnbgH8tu3BMzY= -k8s.io/api v0.28.4/go.mod h1:axWTGrY88s/5YE+JSt4uUi6NMM+gur1en2REMR7IRj0= -k8s.io/apiextensions-apiserver v0.28.4 h1:AZpKY/7wQ8n+ZYDtNHbAJBb+N4AXXJvyZx6ww6yAJvU= -k8s.io/apiextensions-apiserver v0.28.4/go.mod h1:pgQIZ1U8eJSMQcENew/0ShUTlePcSGFq6dxSxf2mwPM= -k8s.io/apimachinery v0.28.4 h1:zOSJe1mc+GxuMnFzD4Z/U1wst50X28ZNsn5bhgIIao8= -k8s.io/apimachinery v0.28.4/go.mod h1:wI37ncBvfAoswfq626yPTe6Bz1c22L7uaJ8dho83mgg= -k8s.io/cli-runtime v0.28.4 h1:IW3aqSNFXiGDllJF4KVYM90YX4cXPGxuCxCVqCD8X+Q= -k8s.io/cli-runtime v0.28.4/go.mod h1:MLGRB7LWTIYyYR3d/DOgtUC8ihsAPA3P8K8FDNIqJ0k= -k8s.io/client-go v0.28.4 h1:Np5ocjlZcTrkyRJ3+T3PkXDpe4UpatQxj85+xjaD2wY= -k8s.io/client-go v0.28.4/go.mod h1:0VDZFpgoZfelyP5Wqu0/r/TRYcLYuJ2U1KEeoaPa1N4= -k8s.io/component-base v0.28.4 h1:c/iQLWPdUgI90O+T9TeECg8o7N3YJTiuz2sKxILYcYo= -k8s.io/component-base v0.28.4/go.mod h1:m9hR0uvqXDybiGL2nf/3Lf0MerAfQXzkfWhUY58JUbU= +k8s.io/api v0.28.6 h1:yy6u9CuIhmg55YvF/BavPBBXB+5QicB64njJXxVnzLo= +k8s.io/api v0.28.6/go.mod h1:AM6Ys6g9MY3dl/XNaNfg/GePI0FT7WBGu8efU/lirAo= +k8s.io/apiextensions-apiserver v0.28.6 h1:myB3iG/3v3jqCg28JDbOefu4sH2/erNEXgytRzJKBOo= +k8s.io/apiextensions-apiserver v0.28.6/go.mod h1:qlp6xRKBgyRhe5AYc81TQpLx4kLNK8/sGQUOwMkVjRk= +k8s.io/apimachinery v0.28.6 h1:RsTeR4z6S07srPg6XYrwXpTJVMXsjPXn0ODakMytSW0= +k8s.io/apimachinery v0.28.6/go.mod h1:QFNX/kCl/EMT2WTSz8k4WLCv2XnkOLMaL8GAVRMdpsA= +k8s.io/cli-runtime v0.28.6 h1:bDH2+ZbHBK3NORGmIygj/zWOkVd/hGWg9RqAa5c/Ev0= +k8s.io/cli-runtime v0.28.6/go.mod h1:KFk67rlb7Pxh15uLbYGBUlW7ZUcpl7IM1GnHtskrcWA= +k8s.io/client-go v0.28.6 h1:Gge6ziyIdafRchfoBKcpaARuz7jfrK1R1azuwORIsQI= +k8s.io/client-go v0.28.6/go.mod h1:+nu0Yp21Oeo/cBCsprNVXB2BfJTV51lFfe5tXl2rUL8= +k8s.io/component-base v0.28.6 h1:G4T8VrcQ7xZou3by/fY5NU5mfxOBlWaivS2lPrEltAo= +k8s.io/component-base v0.28.6/go.mod h1:Dg62OOG3ALu2P4nAG00UdsuHoNLQJ5VsUZKQlLDcS+E= k8s.io/klog/v2 v2.110.1 h1:U/Af64HJf7FcwMcXyKm2RPM22WZzyR7OSpYj5tg3cL0= k8s.io/klog/v2 v2.110.1/go.mod h1:YGtd1984u+GgbuZ7e08/yBuAfKLSO0+uR1Fhi6ExXjo= k8s.io/kube-openapi v0.0.0-20231206194836-bf4651e18aa8 h1:vzKzxN5uyJZLY8HL1/OovW7BJefnsBIWt8T7Gjh2boQ= k8s.io/kube-openapi v0.0.0-20231206194836-bf4651e18aa8/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA= -k8s.io/kubectl v0.28.4 h1:gWpUXW/T7aFne+rchYeHkyB8eVDl5UZce8G4X//kjUQ= -k8s.io/kubectl v0.28.4/go.mod h1:CKOccVx3l+3MmDbkXtIUtibq93nN2hkDR99XDCn7c/c= +k8s.io/kubectl v0.28.6 h1:46O3gGJYlpqy7wtwYlggieemyIcuZqmflnQVDci3MgY= +k8s.io/kubectl v0.28.6/go.mod h1:FS5ugZhi3kywpMQSCnp8MN+gctdFHJACzC6mH3fZ6lc= k8s.io/utils v0.0.0-20231127182322-b307cd553661 h1:FepOBzJ0GXm8t0su67ln2wAZjbQ6RxQGZDnzuLcrUTI= k8s.io/utils v0.0.0-20231127182322-b307cd553661/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= sigs.k8s.io/controller-runtime v0.16.3 h1:2TuvuokmfXvDUamSx1SuAOO3eTyye+47mJCigwG62c4= diff --git a/internal/build/build.go b/internal/build/build.go index 201cc83b..227c3891 100644 --- a/internal/build/build.go +++ b/internal/build/build.go @@ -29,7 +29,6 @@ import ( "sync" "time" - "github.com/fluxcd/pkg/ssa" "github.com/theckman/yacspin" "k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" @@ -45,6 +44,7 @@ import ( kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" "github.com/fluxcd/pkg/kustomize" runclient "github.com/fluxcd/pkg/runtime/client" + ssautil "github.com/fluxcd/pkg/ssa/utils" "sigs.k8s.io/kustomize/kyaml/filesys" "github.com/fluxcd/flux2/v2/internal/utils" @@ -251,13 +251,13 @@ func (b *Builder) Build() ([]*unstructured.Unstructured, error) { return nil, fmt.Errorf("kustomize build failed: %w", err) } - objects, err := ssa.ReadObjects(bytes.NewReader(resources)) + objects, err := ssautil.ReadObjects(bytes.NewReader(resources)) if err != nil { return nil, fmt.Errorf("kustomize build failed: %w", err) } if m := b.kustomization.Spec.CommonMetadata; m != nil { - ssa.SetCommonMetadata(objects, m.Labels, m.Annotations) + ssautil.SetCommonMetadata(objects, m.Labels, m.Annotations) } return objects, nil diff --git a/internal/build/diff.go b/internal/build/diff.go index b84037c2..3aad9d10 100644 --- a/internal/build/diff.go +++ b/internal/build/diff.go @@ -41,6 +41,7 @@ import ( "github.com/fluxcd/cli-utils/pkg/object" kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" "github.com/fluxcd/pkg/ssa" + ssautil "github.com/fluxcd/pkg/ssa/utils" "github.com/fluxcd/flux2/v2/pkg/printers" ) @@ -145,7 +146,7 @@ func (b *Builder) Diff() (string, bool, error) { createdOrDrifted = true } for _, object := range staleObjects { - output.WriteString(writeString(fmt.Sprintf("► %s deleted\n", ssa.FmtUnstructured(object)), bunt.OrangeRed)) + output.WriteString(writeString(fmt.Sprintf("► %s deleted\n", ssautil.FmtUnstructured(object)), bunt.OrangeRed)) } } } diff --git a/internal/tree/tree.go b/internal/tree/tree.go index fad06426..75c7ffd1 100644 --- a/internal/tree/tree.go +++ b/internal/tree/tree.go @@ -23,7 +23,7 @@ import ( "strings" "github.com/fluxcd/cli-utils/pkg/object" - "github.com/fluxcd/pkg/ssa" + ssautil "github.com/fluxcd/pkg/ssa/utils" ) const ( @@ -74,7 +74,7 @@ func (t *objMetadataTree) AddTree(tree ObjMetadataTree) { } func (t *objMetadataTree) Text() string { - return ssa.FmtObjMetadata(t.Resource) + return ssautil.FmtObjMetadata(t.Resource) } func (t *objMetadataTree) Items() []ObjMetadataTree { diff --git a/internal/utils/apply.go b/internal/utils/apply.go index 94767623..5867287c 100644 --- a/internal/utils/apply.go +++ b/internal/utils/apply.go @@ -33,6 +33,7 @@ import ( "github.com/fluxcd/cli-utils/pkg/kstatus/polling" runclient "github.com/fluxcd/pkg/runtime/client" "github.com/fluxcd/pkg/ssa" + ssautil "github.com/fluxcd/pkg/ssa/utils" "github.com/fluxcd/flux2/v2/pkg/manifestgen/kustomization" ) @@ -62,7 +63,7 @@ func Apply(ctx context.Context, rcg genericclioptions.RESTClientGetter, opts *ru var stageTwo []*unstructured.Unstructured for _, u := range objs { - if ssa.IsClusterDefinition(u) { + if ssautil.IsClusterDefinition(u) { stageOne = append(stageOne, u) } else { stageTwo = append(stageTwo, u) @@ -108,7 +109,7 @@ func readObjects(root, manifestPath string) ([]*unstructured.Unstructured, error if err != nil { return nil, err } - return ssa.ReadObjects(bytes.NewReader(resources)) + return ssautil.ReadObjects(bytes.NewReader(resources)) } ms, err := os.Open(manifestPath) @@ -117,7 +118,7 @@ func readObjects(root, manifestPath string) ([]*unstructured.Unstructured, error } defer ms.Close() - return ssa.ReadObjects(bufio.NewReader(ms)) + return ssautil.ReadObjects(bufio.NewReader(ms)) } func newManager(rcg genericclioptions.RESTClientGetter, opts *runclient.Options) (*ssa.ResourceManager, error) { diff --git a/tests/azure/go.mod b/tests/azure/go.mod index 98ee8663..fdf7a510 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -13,10 +13,10 @@ require ( github.com/fluxcd/image-reflector-controller/api v0.31.1 github.com/fluxcd/kustomize-controller/api v1.2.1 github.com/fluxcd/notification-controller/api v1.2.3 - github.com/fluxcd/pkg/apis/event v0.6.0 - github.com/fluxcd/pkg/apis/meta v1.2.0 - github.com/fluxcd/pkg/git v0.16.0 - github.com/fluxcd/pkg/git/gogit v0.16.1 + github.com/fluxcd/pkg/apis/event v0.7.0 + github.com/fluxcd/pkg/apis/meta v1.3.0 + github.com/fluxcd/pkg/git v0.17.0 + github.com/fluxcd/pkg/git/gogit v0.17.0 github.com/fluxcd/source-controller/api v1.2.3 github.com/go-git/go-git/v5 v5.11.0 github.com/hashicorp/hc-install v0.5.2 @@ -24,9 +24,9 @@ require ( github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 github.com/stretchr/testify v1.8.4 go.uber.org/multierr v1.11.0 - k8s.io/api v0.28.4 - k8s.io/apimachinery v0.28.4 - k8s.io/client-go v0.28.4 + k8s.io/api v0.28.6 + k8s.io/apimachinery v0.28.6 + k8s.io/client-go v0.28.6 k8s.io/klog/v2 v2.110.1 sigs.k8s.io/controller-runtime v0.16.3 ) @@ -46,7 +46,7 @@ require ( github.com/Azure/go-autorest/tracing v0.6.0 // indirect github.com/Masterminds/semver/v3 v3.2.1 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect - github.com/ProtonMail/go-crypto v0.0.0-20231012073058-a7379d079e0e // indirect + github.com/ProtonMail/go-crypto v1.0.0 // indirect github.com/apparentlymart/go-textseg/v13 v13.0.0 // indirect github.com/cloudflare/circl v1.3.7 // indirect github.com/cyphar/filepath-securejoin v0.2.4 // indirect @@ -57,26 +57,28 @@ require ( github.com/evanphx/json-patch/v5 v5.7.0 // indirect github.com/fluxcd/pkg/apis/acl v0.1.0 // indirect github.com/fluxcd/pkg/apis/kustomize v1.2.0 // indirect - github.com/fluxcd/pkg/ssh v0.10.0 // indirect + github.com/fluxcd/pkg/ssh v0.11.0 // indirect github.com/fluxcd/pkg/version v0.2.2 // indirect + github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect github.com/go-git/go-billy/v5 v5.5.0 // indirect github.com/go-logr/logr v1.3.0 // indirect - github.com/go-openapi/jsonpointer v0.19.6 // indirect + github.com/go-logr/zapr v1.3.0 // indirect + github.com/go-openapi/jsonpointer v0.20.0 // indirect github.com/go-openapi/jsonreference v0.20.2 // indirect - github.com/go-openapi/swag v0.22.3 // indirect + github.com/go-openapi/swag v0.22.4 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang-jwt/jwt/v4 v4.5.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.3 // indirect github.com/google/gnostic-models v0.6.8 // indirect github.com/google/gofuzz v1.2.0 // indirect - github.com/google/uuid v1.4.0 // indirect + github.com/google/uuid v1.5.0 // indirect github.com/hashicorp/errwrap v1.0.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/go-version v1.6.0 // indirect github.com/hashicorp/terraform-json v0.15.0 // indirect - github.com/imdario/mergo v0.3.15 // indirect + github.com/imdario/mergo v0.3.16 // indirect github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/jpillora/backoff v1.0.0 // indirect @@ -90,31 +92,30 @@ require ( github.com/pjbgf/sha1cd v0.3.0 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/prometheus/client_golang v1.17.0 // indirect - github.com/prometheus/client_model v0.5.0 // indirect - github.com/prometheus/common v0.45.0 // indirect - github.com/prometheus/procfs v0.12.0 // indirect + github.com/prometheus/client_golang v1.18.0 // indirect github.com/sergi/go-diff v1.3.1 // indirect github.com/skeema/knownhosts v1.2.1 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect github.com/zclconf/go-cty v1.13.0 // indirect - golang.org/x/crypto v0.17.0 // indirect + go.uber.org/zap v1.26.0 // indirect + golang.org/x/crypto v0.18.0 // indirect + golang.org/x/exp v0.0.0-20231206192017-f3f8817b8deb // indirect golang.org/x/mod v0.14.0 // indirect - golang.org/x/net v0.19.0 // indirect - golang.org/x/oauth2 v0.14.0 // indirect - golang.org/x/sys v0.15.0 // indirect - golang.org/x/term v0.15.0 // indirect + golang.org/x/net v0.20.0 // indirect + golang.org/x/oauth2 v0.16.0 // indirect + golang.org/x/sys v0.16.0 // indirect + golang.org/x/term v0.16.0 // indirect golang.org/x/text v0.14.0 // indirect - golang.org/x/time v0.4.0 // indirect - golang.org/x/tools v0.16.0 // indirect - google.golang.org/appengine v1.6.7 // indirect + golang.org/x/time v0.5.0 // indirect + golang.org/x/tools v0.17.0 // indirect + google.golang.org/appengine v1.6.8 // indirect google.golang.org/protobuf v1.31.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/apiextensions-apiserver v0.28.4 // indirect - k8s.io/kube-openapi v0.0.0-20231113174909-778a5567bc1e // indirect + k8s.io/apiextensions-apiserver v0.28.6 // indirect + k8s.io/kube-openapi v0.0.0-20231206194836-bf4651e18aa8 // indirect k8s.io/utils v0.0.0-20231127182322-b307cd553661 // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect diff --git a/tests/azure/go.sum b/tests/azure/go.sum index 095b8937..36b0fa72 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -35,8 +35,8 @@ github.com/Masterminds/semver/v3 v3.2.1/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYr github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= -github.com/ProtonMail/go-crypto v0.0.0-20231012073058-a7379d079e0e h1:NfjGPY2A8SSRJvXny111ZPoB57LT5lWgX4XiUjW10eY= -github.com/ProtonMail/go-crypto v0.0.0-20231012073058-a7379d079e0e/go.mod h1:K4vciqCJaZ1Ghw/SvtJbEAM4soEtwDCNVqkdQIIujwU= +github.com/ProtonMail/go-crypto v1.0.0 h1:LRuvITjQWX+WIfr930YHG2HNfjR1uOfyf5vE0kC2U78= +github.com/ProtonMail/go-crypto v1.0.0/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= github.com/apparentlymart/go-textseg v1.0.0/go.mod h1:z96Txxhf3xSFMPmb5X/1W05FF/Nj9VFpLOpjS5yuumk= github.com/apparentlymart/go-textseg/v13 v13.0.0 h1:Y+KvPE1NYz0xl601PVImeQfFyEy6iT90AvPUL1NNfNw= @@ -79,25 +79,26 @@ github.com/fluxcd/notification-controller/api v1.2.3 h1:vXVMg2PmTjmRC5+ULZfbmBEm github.com/fluxcd/notification-controller/api v1.2.3/go.mod h1:A0VkH3mswQAeGKsmzq81jAUN+zNJt9SPXjwe8mvnnaw= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= -github.com/fluxcd/pkg/apis/event v0.6.0 h1:AUaeee1CGWb65BLqVximHXG8Gcu6vWuYONIq6tVpjgo= -github.com/fluxcd/pkg/apis/event v0.6.0/go.mod h1:OEzWcX/oPbMmkCvC9QGoK27JXFvUZgBhLD+zgxZe47A= +github.com/fluxcd/pkg/apis/event v0.7.0 h1:QN/gz9i5kZ3GlfTOE6SCjjnSXrSPUU75MCVRwN8U+qo= +github.com/fluxcd/pkg/apis/event v0.7.0/go.mod h1:zdqe8SVXjFQ/Nfuk51c2SJe0NkyNwYOxSFtN6SmikVs= github.com/fluxcd/pkg/apis/kustomize v1.2.0 h1:vkVs+OumxaWso0jNCqdgFFfMHdh+qtZhykTkjl7OgmA= github.com/fluxcd/pkg/apis/kustomize v1.2.0/go.mod h1:VF7tR/WuVFeum+HaMTHwp+eCtsHiiQlY6ihgqtAnW/M= -github.com/fluxcd/pkg/apis/meta v1.2.0 h1:O766PzGAdMdQKybSflGL8oV0+GgCNIkdsxfalRyzeO8= -github.com/fluxcd/pkg/apis/meta v1.2.0/go.mod h1:fU/Az9AoVyIxC0oI4ihG0NVMNnvrcCzdEym3wxjIQsc= -github.com/fluxcd/pkg/git v0.16.0 h1:xgfMpgsVaxGLechKNaSUif9jnt2Ji/HkwIwxXeDoADk= -github.com/fluxcd/pkg/git v0.16.0/go.mod h1:ZsaxXDBHIUjNeRf+3qDGyHD22KpqbjuNPCbHy2Xid5U= -github.com/fluxcd/pkg/git/gogit v0.16.1 h1:byimVk7VLbERRxJDkVktithN03GC0y7fyc8Ur9Uka8U= -github.com/fluxcd/pkg/git/gogit v0.16.1/go.mod h1:nx3PumOFe5e3fMsh2HPLSlAeOk2wC+jVg7H9BTRKEmg= -github.com/fluxcd/pkg/gittestserver v0.9.0 h1:OthMahtKmmpwCRw8LmSGrceqVhHywGg/QiytxHGSgeY= -github.com/fluxcd/pkg/ssh v0.10.0 h1:JFz0u/CPEf3hXvmrEvUvXsc70eKh8xphqjXxZuSby9g= -github.com/fluxcd/pkg/ssh v0.10.0/go.mod h1:1lFTj3MhU9xQuaJ5PJJoh/FyRYzK54ll9NY/s2KqOZM= +github.com/fluxcd/pkg/apis/meta v1.3.0 h1:KxeEc6olmSZvQ5pBONPE4IKxyoWQbqTJF1X6K5nIXpU= +github.com/fluxcd/pkg/apis/meta v1.3.0/go.mod h1:3Ui8xFkoU4sYehqmscjpq7NjqH2YN1A2iX2okbO3/yA= +github.com/fluxcd/pkg/git v0.17.0 h1:eHL8IazeX2HXwXzT6zLdzGaX3H37n/ipkdd1+byyzUM= +github.com/fluxcd/pkg/git v0.17.0/go.mod h1:lBeHCTtVt9py9mMGj5sKs4+aFpMWGjH73gx5i818i6o= +github.com/fluxcd/pkg/git/gogit v0.17.0 h1:X8C+q/Nm/MjBKAoqw9NPpnJh0B3IxVLtqPgH+wT9NEg= +github.com/fluxcd/pkg/git/gogit v0.17.0/go.mod h1:qyRSCQy41wG0FwUwKQtfSnwqkrJg5XB4UdMvrHjIcFY= +github.com/fluxcd/pkg/gittestserver v0.10.0 h1:joqfczQNtguZFGxTuRL535ymDW/9clA1jBWa3d8B6WU= +github.com/fluxcd/pkg/ssh v0.11.0 h1:7WDDrcB0cNimzZjrpkzYBrizkrUgyM4Zr2cd9z9aqpU= +github.com/fluxcd/pkg/ssh v0.11.0/go.mod h1:K8YgH8KM0GV5DWuRErX3iKgpoHlYh08SBK+U5Q0teJc= github.com/fluxcd/pkg/version v0.2.2 h1:ZpVXECeLA5hIQMft11iLp6gN3cKcz6UNuVTQPw/bRdI= github.com/fluxcd/pkg/version v0.2.2/go.mod h1:NGnh/no8S6PyfCDxRFrPY3T5BUnqP48MxfxNRU0z8C0= github.com/fluxcd/source-controller/api v1.2.3 h1:71mXv3Qg9HEhcpqOq1ObmoE+P/HuZNaAvxfI7dqZMo8= github.com/fluxcd/source-controller/api v1.2.3/go.mod h1:5gaIVVH7hgb8p3HKFp8P6hGmZEC8fKSt4EcrG3g5vZI= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= -github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= +github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= +github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= @@ -108,13 +109,16 @@ github.com/go-git/go-git/v5 v5.11.0 h1:XIZc1p+8YzypNr34itUfSvYJcv+eYdTnTvOZ2vD3c github.com/go-git/go-git/v5 v5.11.0/go.mod h1:6GFcX2P3NM7FPBfpePbpLd21XxsgdAt+lKqXmCUiUCY= github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY= github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= -github.com/go-logr/zapr v1.2.4 h1:QHVo+6stLbfJmYGkQ7uGHUCu5hnAFAj6mDe6Ea0SeOo= -github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE= +github.com/go-logr/zapr v1.3.0 h1:XGdV8XW8zdwFiwOA2Dryh1gj2KRQyOOoNmBy4EplIcQ= +github.com/go-logr/zapr v1.3.0/go.mod h1:YKepepNBd1u/oyhd/yQmtjVXmm9uML4IXUgMOwR8/Gg= github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= +github.com/go-openapi/jsonpointer v0.20.0 h1:ESKJdU9ASRfaPNOPRx12IUyA1vn3R9GiE3KYD14BXdQ= +github.com/go-openapi/jsonpointer v0.20.0/go.mod h1:6PGzBjjIIumbLYysB73Klnms1mwnU4G3YHOECG3CedA= github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= -github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g= github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= +github.com/go-openapi/swag v0.22.4 h1:QLMzNJnMGPRNDCbySlcj1x01tzU8/9LTTL9hZZZogBU= +github.com/go-openapi/swag v0.22.4/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= github.com/gofrs/uuid v4.4.0+incompatible h1:3qXRTX8/NbyulANqlc0lchS1gqAVxRgsuW1YrTJupqA= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= @@ -129,6 +133,7 @@ github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5y github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= @@ -142,8 +147,8 @@ github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4= -github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.5.0 h1:1p67kYwdtXjb0gL0BPiP1Av9wiZPo5A8z2cWkTZ+eyU= +github.com/google/uuid v1.5.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= @@ -157,8 +162,8 @@ github.com/hashicorp/terraform-exec v0.18.1 h1:LAbfDvNQU1l0NOQlTuudjczVhHj061fNX github.com/hashicorp/terraform-exec v0.18.1/go.mod h1:58wg4IeuAJ6LVsLUeD2DWZZoc/bYi6dzhLHzxM41980= github.com/hashicorp/terraform-json v0.15.0 h1:/gIyNtR6SFw6h5yzlbDbACyGvIhKtQi8mTsbkNd79lE= github.com/hashicorp/terraform-json v0.15.0/go.mod h1:+L1RNzjDU5leLFZkHTFTbJXaoqUC6TqXlFgDoOXrtvk= -github.com/imdario/mergo v0.3.15 h1:M8XP7IuFNsqUx6VPK2P9OSmsYsI/YFaGil0uD21V3dM= -github.com/imdario/mergo v0.3.15/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= +github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4= +github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc= @@ -199,21 +204,18 @@ github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjY github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/onsi/ginkgo/v2 v2.11.0 h1:WgqUCUt/lT6yXoQ8Wef0fsNn5cAuMK7+KT9UFRz2tcU= -github.com/onsi/gomega v1.30.0 h1:hvMK7xYz4D3HapigLTeGdId/NcfQx1VHMJc60ew99+8= +github.com/onsi/gomega v1.31.1 h1:KYppCUK+bUgAZwHOu7EXVBKyQA6ILvOESHkn/tgoqvo= github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4= github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q= -github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY= +github.com/prometheus/client_golang v1.18.0 h1:HzFfmkOzH5Q8L8G+kSJKUx5dtG87sewO+FoDDqP5Tbk= +github.com/prometheus/client_golang v1.18.0/go.mod h1:T+GXkCk5wSJyOqMIzVgvvjFDlkOQntgjkJWKrN5txjA= github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw= -github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI= github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM= -github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY= github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= -github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= github.com/sebdah/goldie v1.0.0/go.mod h1:jXP4hmWywNEwZzhMuv2ccnqTSFpuq8iyQhtQdkkZBH4= github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= @@ -249,7 +251,8 @@ github.com/zclconf/go-cty v1.13.0/go.mod h1:YKQzy/7pZ7iq2jNFzy5go57xdxdWoLLpaEp4 github.com/zclconf/go-cty-debug v0.0.0-20191215020915-b22d67c1ba0b/go.mod h1:ZRKQfBXbGkpdV6QMzT3rU1kSTAnfu1dO8dPKjYprgj8= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= -go.uber.org/zap v1.25.0 h1:4Hvk6GtkucQ790dqmj7l1eEnRdKm3k3ZUrUMS2d5+5c= +go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo= +go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -257,10 +260,11 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= -golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= -golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k= -golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= -golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e h1:+WEEuIdZHnUeJJmEUjyYC2gfUMj69yZXw17EnHg/otA= +golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= +golang.org/x/crypto v0.18.0 h1:PGVlW0xEltQnzFZ55hkuX5+KLyrMYhHld1YHO4AKcdc= +golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= +golang.org/x/exp v0.0.0-20231206192017-f3f8817b8deb h1:c0vyKkb6yr3KR7jEfJaOSv4lG7xPkbN6r52aJz1d8a8= +golang.org/x/exp v0.0.0-20231206192017-f3f8817b8deb/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= @@ -279,18 +283,18 @@ golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c= -golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= -golang.org/x/oauth2 v0.14.0 h1:P0Vrf/2538nmC0H+pEQ3MNFRRnVR7RlqyVw+bvm26z0= -golang.org/x/oauth2 v0.14.0/go.mod h1:lAtNWgaWfL4cm7j2OV8TxGi9Qb7ECORx8DktCY74OwM= +golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= +golang.org/x/net v0.20.0 h1:aCL9BSgETF1k+blQaYUBx9hJ9LOGP3gAVemcZlf1Kpo= +golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= +golang.org/x/oauth2 v0.16.0 h1:aDkGMBSYxElaoP81NpoUoz2oo2R2wHdZpGToUxfyQrQ= +golang.org/x/oauth2 v0.16.0/go.mod h1:hqZ+0LWXsiVoZpeld6jVt06P3adbS2Uu911W1SsJv2o= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= +golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -305,37 +309,38 @@ golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= -golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU= +golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 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= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= -golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4= -golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= +golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= +golang.org/x/term v0.16.0 h1:m+B6fahuftsE9qjo0VWp2FW0mB3MTJvR0BaMQrq0pmE= +golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/time v0.4.0 h1:Z81tqI5ddIoXDPvVQ7/7CC9TnLM7ubaFG2qXYd5BbYY= -golang.org/x/time v0.4.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= +golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= 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.16.0 h1:GO788SKMRunPIBCXiQyo2AaexLstOrVhuAL5YwsckQM= -golang.org/x/tools v0.16.0/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0= +golang.org/x/tools v0.17.0 h1:FvmRgNOcs3kOa+T20R1uhfP9F6HgG2mfxDv1vrx1Htc= +golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -343,8 +348,8 @@ golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8T gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= -google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= +google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= @@ -364,18 +369,18 @@ gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= 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.28.4 h1:8ZBrLjwosLl/NYgv1P7EQLqoO8MGQApnbgH8tu3BMzY= -k8s.io/api v0.28.4/go.mod h1:axWTGrY88s/5YE+JSt4uUi6NMM+gur1en2REMR7IRj0= -k8s.io/apiextensions-apiserver v0.28.4 h1:AZpKY/7wQ8n+ZYDtNHbAJBb+N4AXXJvyZx6ww6yAJvU= -k8s.io/apiextensions-apiserver v0.28.4/go.mod h1:pgQIZ1U8eJSMQcENew/0ShUTlePcSGFq6dxSxf2mwPM= -k8s.io/apimachinery v0.28.4 h1:zOSJe1mc+GxuMnFzD4Z/U1wst50X28ZNsn5bhgIIao8= -k8s.io/apimachinery v0.28.4/go.mod h1:wI37ncBvfAoswfq626yPTe6Bz1c22L7uaJ8dho83mgg= -k8s.io/client-go v0.28.4 h1:Np5ocjlZcTrkyRJ3+T3PkXDpe4UpatQxj85+xjaD2wY= -k8s.io/client-go v0.28.4/go.mod h1:0VDZFpgoZfelyP5Wqu0/r/TRYcLYuJ2U1KEeoaPa1N4= +k8s.io/api v0.28.6 h1:yy6u9CuIhmg55YvF/BavPBBXB+5QicB64njJXxVnzLo= +k8s.io/api v0.28.6/go.mod h1:AM6Ys6g9MY3dl/XNaNfg/GePI0FT7WBGu8efU/lirAo= +k8s.io/apiextensions-apiserver v0.28.6 h1:myB3iG/3v3jqCg28JDbOefu4sH2/erNEXgytRzJKBOo= +k8s.io/apiextensions-apiserver v0.28.6/go.mod h1:qlp6xRKBgyRhe5AYc81TQpLx4kLNK8/sGQUOwMkVjRk= +k8s.io/apimachinery v0.28.6 h1:RsTeR4z6S07srPg6XYrwXpTJVMXsjPXn0ODakMytSW0= +k8s.io/apimachinery v0.28.6/go.mod h1:QFNX/kCl/EMT2WTSz8k4WLCv2XnkOLMaL8GAVRMdpsA= +k8s.io/client-go v0.28.6 h1:Gge6ziyIdafRchfoBKcpaARuz7jfrK1R1azuwORIsQI= +k8s.io/client-go v0.28.6/go.mod h1:+nu0Yp21Oeo/cBCsprNVXB2BfJTV51lFfe5tXl2rUL8= k8s.io/klog/v2 v2.110.1 h1:U/Af64HJf7FcwMcXyKm2RPM22WZzyR7OSpYj5tg3cL0= k8s.io/klog/v2 v2.110.1/go.mod h1:YGtd1984u+GgbuZ7e08/yBuAfKLSO0+uR1Fhi6ExXjo= -k8s.io/kube-openapi v0.0.0-20231113174909-778a5567bc1e h1:snPmy96t93RredGRjKfMFt+gvxuVAncqSAyBveJtr4Q= -k8s.io/kube-openapi v0.0.0-20231113174909-778a5567bc1e/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA= +k8s.io/kube-openapi v0.0.0-20231206194836-bf4651e18aa8 h1:vzKzxN5uyJZLY8HL1/OovW7BJefnsBIWt8T7Gjh2boQ= +k8s.io/kube-openapi v0.0.0-20231206194836-bf4651e18aa8/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA= k8s.io/utils v0.0.0-20231127182322-b307cd553661 h1:FepOBzJ0GXm8t0su67ln2wAZjbQ6RxQGZDnzuLcrUTI= k8s.io/utils v0.0.0-20231127182322-b307cd553661/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= sigs.k8s.io/controller-runtime v0.16.3 h1:2TuvuokmfXvDUamSx1SuAOO3eTyye+47mJCigwG62c4= diff --git a/tests/integration/go.mod b/tests/integration/go.mod index 7b69149f..5114dfd7 100644 --- a/tests/integration/go.mod +++ b/tests/integration/go.mod @@ -11,23 +11,23 @@ require ( github.com/fluxcd/image-reflector-controller/api v0.31.1 github.com/fluxcd/kustomize-controller/api v1.2.1 github.com/fluxcd/notification-controller/api v1.2.3 - github.com/fluxcd/pkg/apis/event v0.6.0 - github.com/fluxcd/pkg/apis/meta v1.2.0 - github.com/fluxcd/pkg/git v0.16.0 - github.com/fluxcd/pkg/git/gogit v0.16.1 - github.com/fluxcd/pkg/runtime v0.43.2 + github.com/fluxcd/pkg/apis/event v0.7.0 + github.com/fluxcd/pkg/apis/meta v1.3.0 + github.com/fluxcd/pkg/git v0.17.0 + github.com/fluxcd/pkg/git/gogit v0.17.0 + github.com/fluxcd/pkg/runtime v0.44.0 github.com/fluxcd/source-controller/api v1.2.3 github.com/fluxcd/test-infra/tftestenv v0.0.0-20240108135005-b58e0c4e0cfa github.com/go-git/go-git/v5 v5.11.0 - github.com/google/go-containerregistry v0.16.1 + github.com/google/go-containerregistry v0.19.0 github.com/hashicorp/terraform-exec v0.18.1 github.com/hashicorp/terraform-json v0.16.0 github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 - github.com/onsi/gomega v1.30.0 + github.com/onsi/gomega v1.31.1 google.golang.org/grpc v1.56.3 - k8s.io/api v0.28.4 - k8s.io/apimachinery v0.28.4 - k8s.io/client-go v0.28.4 + k8s.io/api v0.28.6 + k8s.io/apimachinery v0.28.6 + k8s.io/client-go v0.28.6 sigs.k8s.io/controller-runtime v0.16.3 ) @@ -50,7 +50,7 @@ require ( github.com/Azure/go-autorest/tracing v0.6.0 // indirect github.com/Masterminds/semver/v3 v3.2.1 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect - github.com/ProtonMail/go-crypto v0.0.0-20231012073058-a7379d079e0e // indirect + github.com/ProtonMail/go-crypto v1.0.0 // indirect github.com/apparentlymart/go-textseg/v13 v13.0.0 // indirect github.com/cloudflare/circl v1.3.7 // indirect github.com/containerd/stargz-snapshotter/estargz v0.14.3 // indirect @@ -66,7 +66,7 @@ require ( github.com/evanphx/json-patch/v5 v5.7.0 // indirect github.com/fluxcd/pkg/apis/acl v0.1.0 // indirect github.com/fluxcd/pkg/apis/kustomize v1.2.0 // indirect - github.com/fluxcd/pkg/ssh v0.10.0 // indirect + github.com/fluxcd/pkg/ssh v0.11.0 // indirect github.com/fluxcd/pkg/version v0.2.2 // indirect github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect github.com/go-git/go-billy/v5 v5.5.0 // indirect @@ -82,7 +82,7 @@ require ( github.com/google/go-cmp v0.6.0 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/s2a-go v0.1.4 // indirect - github.com/google/uuid v1.4.0 // indirect + github.com/google/uuid v1.5.0 // indirect github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect github.com/googleapis/gax-go/v2 v2.11.0 // indirect github.com/hashicorp/errwrap v1.0.0 // indirect @@ -115,16 +115,16 @@ require ( github.com/xanzy/ssh-agent v0.3.3 // indirect github.com/zclconf/go-cty v1.13.0 // indirect go.opencensus.io v0.24.0 // indirect - golang.org/x/crypto v0.17.0 // indirect + golang.org/x/crypto v0.18.0 // indirect golang.org/x/mod v0.14.0 // indirect - golang.org/x/net v0.19.0 // indirect - golang.org/x/oauth2 v0.15.0 // indirect - golang.org/x/sync v0.5.0 // indirect - golang.org/x/sys v0.15.0 // indirect - golang.org/x/term v0.15.0 // indirect + golang.org/x/net v0.20.0 // indirect + golang.org/x/oauth2 v0.16.0 // indirect + golang.org/x/sync v0.6.0 // indirect + golang.org/x/sys v0.16.0 // indirect + golang.org/x/term v0.16.0 // indirect golang.org/x/text v0.14.0 // indirect golang.org/x/time v0.5.0 // indirect - golang.org/x/tools v0.16.0 // indirect + golang.org/x/tools v0.17.0 // indirect google.golang.org/api v0.126.0 // indirect google.golang.org/appengine v1.6.8 // indirect google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc // indirect @@ -135,7 +135,7 @@ require ( gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/apiextensions-apiserver v0.28.4 // indirect + k8s.io/apiextensions-apiserver v0.28.6 // indirect k8s.io/klog/v2 v2.110.1 // indirect k8s.io/kube-openapi v0.0.0-20231206194836-bf4651e18aa8 // indirect k8s.io/utils v0.0.0-20231127182322-b307cd553661 // indirect diff --git a/tests/integration/go.sum b/tests/integration/go.sum index e3af981d..3c8a01c9 100644 --- a/tests/integration/go.sum +++ b/tests/integration/go.sum @@ -13,7 +13,7 @@ cloud.google.com/go/pubsub v1.31.0 h1:aXdyyJz90kA+bor9+6+xHAciMD5mj8v15WqFZ5E0se cloud.google.com/go/pubsub v1.31.0/go.mod h1:dYmJ3K97NCQ/e4OwZ20rD4Ym3Bu8Gu9m/aJdWQjdcks= dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= -github.com/AdaLogics/go-fuzz-headers v0.0.0-20230106234847-43070de90fa1 h1:EKPd1INOIyr5hWOWhvpmQpY6tKjeG0hT1s3AMC/9fic= +github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 h1:bvDV9vkmnHYOMsOr4WLk+Vo07yKIzd94sVoIqshQ4bU= github.com/Azure/azure-amqp-common-go/v4 v4.2.0 h1:q/jLx1KJ8xeI8XGfkOWMN9XrXzAfVTkyvCxPvHCjd2I= github.com/Azure/azure-amqp-common-go/v4 v4.2.0/go.mod h1:GD3m/WPPma+621UaU6KNjKEo5Hl09z86viKwQjTpV0Q= github.com/Azure/azure-event-hubs-go/v3 v3.6.0 h1:UXRi5KewXYoTiekVjrj0gyGfbyGvtbYdot6/4IMf4I4= @@ -57,8 +57,8 @@ github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= -github.com/ProtonMail/go-crypto v0.0.0-20231012073058-a7379d079e0e h1:NfjGPY2A8SSRJvXny111ZPoB57LT5lWgX4XiUjW10eY= -github.com/ProtonMail/go-crypto v0.0.0-20231012073058-a7379d079e0e/go.mod h1:K4vciqCJaZ1Ghw/SvtJbEAM4soEtwDCNVqkdQIIujwU= +github.com/ProtonMail/go-crypto v1.0.0 h1:LRuvITjQWX+WIfr930YHG2HNfjR1uOfyf5vE0kC2U78= +github.com/ProtonMail/go-crypto v1.0.0/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= @@ -134,21 +134,21 @@ github.com/fluxcd/notification-controller/api v1.2.3 h1:vXVMg2PmTjmRC5+ULZfbmBEm github.com/fluxcd/notification-controller/api v1.2.3/go.mod h1:A0VkH3mswQAeGKsmzq81jAUN+zNJt9SPXjwe8mvnnaw= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= -github.com/fluxcd/pkg/apis/event v0.6.0 h1:AUaeee1CGWb65BLqVximHXG8Gcu6vWuYONIq6tVpjgo= -github.com/fluxcd/pkg/apis/event v0.6.0/go.mod h1:OEzWcX/oPbMmkCvC9QGoK27JXFvUZgBhLD+zgxZe47A= +github.com/fluxcd/pkg/apis/event v0.7.0 h1:QN/gz9i5kZ3GlfTOE6SCjjnSXrSPUU75MCVRwN8U+qo= +github.com/fluxcd/pkg/apis/event v0.7.0/go.mod h1:zdqe8SVXjFQ/Nfuk51c2SJe0NkyNwYOxSFtN6SmikVs= github.com/fluxcd/pkg/apis/kustomize v1.2.0 h1:vkVs+OumxaWso0jNCqdgFFfMHdh+qtZhykTkjl7OgmA= github.com/fluxcd/pkg/apis/kustomize v1.2.0/go.mod h1:VF7tR/WuVFeum+HaMTHwp+eCtsHiiQlY6ihgqtAnW/M= -github.com/fluxcd/pkg/apis/meta v1.2.0 h1:O766PzGAdMdQKybSflGL8oV0+GgCNIkdsxfalRyzeO8= -github.com/fluxcd/pkg/apis/meta v1.2.0/go.mod h1:fU/Az9AoVyIxC0oI4ihG0NVMNnvrcCzdEym3wxjIQsc= -github.com/fluxcd/pkg/git v0.16.0 h1:xgfMpgsVaxGLechKNaSUif9jnt2Ji/HkwIwxXeDoADk= -github.com/fluxcd/pkg/git v0.16.0/go.mod h1:ZsaxXDBHIUjNeRf+3qDGyHD22KpqbjuNPCbHy2Xid5U= -github.com/fluxcd/pkg/git/gogit v0.16.1 h1:byimVk7VLbERRxJDkVktithN03GC0y7fyc8Ur9Uka8U= -github.com/fluxcd/pkg/git/gogit v0.16.1/go.mod h1:nx3PumOFe5e3fMsh2HPLSlAeOk2wC+jVg7H9BTRKEmg= -github.com/fluxcd/pkg/gittestserver v0.9.0 h1:OthMahtKmmpwCRw8LmSGrceqVhHywGg/QiytxHGSgeY= -github.com/fluxcd/pkg/runtime v0.43.2 h1:xH2BvttUqJ7wS0zjuBETr2pLXG62QY6f0mdxg5UQKio= -github.com/fluxcd/pkg/runtime v0.43.2/go.mod h1:dhhNV45B3tekg7qPzATFTuWOulvUzMoO1bV+vc2pSts= -github.com/fluxcd/pkg/ssh v0.10.0 h1:JFz0u/CPEf3hXvmrEvUvXsc70eKh8xphqjXxZuSby9g= -github.com/fluxcd/pkg/ssh v0.10.0/go.mod h1:1lFTj3MhU9xQuaJ5PJJoh/FyRYzK54ll9NY/s2KqOZM= +github.com/fluxcd/pkg/apis/meta v1.3.0 h1:KxeEc6olmSZvQ5pBONPE4IKxyoWQbqTJF1X6K5nIXpU= +github.com/fluxcd/pkg/apis/meta v1.3.0/go.mod h1:3Ui8xFkoU4sYehqmscjpq7NjqH2YN1A2iX2okbO3/yA= +github.com/fluxcd/pkg/git v0.17.0 h1:eHL8IazeX2HXwXzT6zLdzGaX3H37n/ipkdd1+byyzUM= +github.com/fluxcd/pkg/git v0.17.0/go.mod h1:lBeHCTtVt9py9mMGj5sKs4+aFpMWGjH73gx5i818i6o= +github.com/fluxcd/pkg/git/gogit v0.17.0 h1:X8C+q/Nm/MjBKAoqw9NPpnJh0B3IxVLtqPgH+wT9NEg= +github.com/fluxcd/pkg/git/gogit v0.17.0/go.mod h1:qyRSCQy41wG0FwUwKQtfSnwqkrJg5XB4UdMvrHjIcFY= +github.com/fluxcd/pkg/gittestserver v0.10.0 h1:joqfczQNtguZFGxTuRL535ymDW/9clA1jBWa3d8B6WU= +github.com/fluxcd/pkg/runtime v0.44.0 h1:0BEPSpcsYXOiswKG5TWkin8fhCDHb0nDdAtq/5VrCSI= +github.com/fluxcd/pkg/runtime v0.44.0/go.mod h1:s1AhSOTCEBPaTfz/GdBD/Ws66uOByIuNP4Znrq+is9M= +github.com/fluxcd/pkg/ssh v0.11.0 h1:7WDDrcB0cNimzZjrpkzYBrizkrUgyM4Zr2cd9z9aqpU= +github.com/fluxcd/pkg/ssh v0.11.0/go.mod h1:K8YgH8KM0GV5DWuRErX3iKgpoHlYh08SBK+U5Q0teJc= github.com/fluxcd/pkg/version v0.2.2 h1:ZpVXECeLA5hIQMft11iLp6gN3cKcz6UNuVTQPw/bRdI= github.com/fluxcd/pkg/version v0.2.2/go.mod h1:NGnh/no8S6PyfCDxRFrPY3T5BUnqP48MxfxNRU0z8C0= github.com/fluxcd/source-controller/api v1.2.3 h1:71mXv3Qg9HEhcpqOq1ObmoE+P/HuZNaAvxfI7dqZMo8= @@ -224,8 +224,8 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-containerregistry v0.16.1 h1:rUEt426sR6nyrL3gt+18ibRcvYpKYdpsa5ZW7MA08dQ= -github.com/google/go-containerregistry v0.16.1/go.mod h1:u0qB2l7mvtWVR5kNcbFIhFY1hLbf8eeGapA+vbFDCtQ= +github.com/google/go-containerregistry v0.19.0 h1:uIsMRBV7m/HDkDxE/nXMnv1q+lOOSPlQ/ywc5JbB8Ic= +github.com/google/go-containerregistry v0.19.0/go.mod h1:u0qB2l7mvtWVR5kNcbFIhFY1hLbf8eeGapA+vbFDCtQ= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= @@ -234,8 +234,8 @@ github.com/google/s2a-go v0.1.4 h1:1kZ/sQM3srePvKs3tXAvQzo66XfcReoqFpIpIccE7Oc= github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4= -github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.5.0 h1:1p67kYwdtXjb0gL0BPiP1Av9wiZPo5A8z2cWkTZ+eyU= +github.com/google/uuid v1.5.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/enterprise-certificate-proxy v0.2.3 h1:yk9/cqRKtT9wXZSsRH9aurXEpJX+U6FLtpYTdC3R06k= github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= github.com/googleapis/gax-go/v2 v2.11.0 h1:9V9PWXEsWnPpQhu/PeQIkS4eGzMlTLGgt80cUUI8Ki4= @@ -315,9 +315,9 @@ github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjY github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/onsi/ginkgo/v2 v2.13.0 h1:0jY9lJquiL8fcf3M4LAXN5aMlS/b2BV86HFFPCPMgE4= -github.com/onsi/gomega v1.30.0 h1:hvMK7xYz4D3HapigLTeGdId/NcfQx1VHMJc60ew99+8= -github.com/onsi/gomega v1.30.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ= +github.com/onsi/ginkgo/v2 v2.15.0 h1:79HwNRBAZHOEwrczrgSOPy+eFTTlIGELKy5as+ClttY= +github.com/onsi/gomega v1.31.1 h1:KYppCUK+bUgAZwHOu7EXVBKyQA6ILvOESHkn/tgoqvo= +github.com/onsi/gomega v1.31.1/go.mod h1:y40C95dwAD1Nz36SsEnxvfFe8FFfNxzI5eJ0EYGyAy0= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.0-rc3 h1:fzg1mXZFj8YdPeNkRXMg+zb88BFV0Ys52cJydRwBkb8= @@ -330,7 +330,7 @@ github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q= +github.com/prometheus/client_golang v1.18.0 h1:HzFfmkOzH5Q8L8G+kSJKUx5dtG87sewO+FoDDqP5Tbk= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw= github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM= @@ -396,9 +396,9 @@ golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= -golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= -golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k= -golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= +golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= +golang.org/x/crypto v0.18.0 h1:PGVlW0xEltQnzFZ55hkuX5+KLyrMYhHld1YHO4AKcdc= +golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20231206192017-f3f8817b8deb h1:c0vyKkb6yr3KR7jEfJaOSv4lG7xPkbN6r52aJz1d8a8= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -429,13 +429,13 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c= -golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= +golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= +golang.org/x/net v0.20.0 h1:aCL9BSgETF1k+blQaYUBx9hJ9LOGP3gAVemcZlf1Kpo= +golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.15.0 h1:s8pnnxNVzjWyrvYdFUQq5llS1PX2zhPXmccZv99h7uQ= -golang.org/x/oauth2 v0.15.0/go.mod h1:q48ptWNTY5XWf+JNten23lcvHpLJ0ZSxF5ttTHKVCAM= +golang.org/x/oauth2 v0.16.0 h1:aDkGMBSYxElaoP81NpoUoz2oo2R2wHdZpGToUxfyQrQ= +golang.org/x/oauth2 v0.16.0/go.mod h1:hqZ+0LWXsiVoZpeld6jVt06P3adbS2Uu911W1SsJv2o= 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= @@ -444,8 +444,8 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= -golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= +golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -471,17 +471,17 @@ golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= -golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU= +golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 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= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= -golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4= -golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= +golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= +golang.org/x/term v0.16.0 h1:m+B6fahuftsE9qjo0VWp2FW0mB3MTJvR0BaMQrq0pmE= +golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -490,7 +490,7 @@ golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= @@ -505,8 +505,8 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= 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.16.0 h1:GO788SKMRunPIBCXiQyo2AaexLstOrVhuAL5YwsckQM= -golang.org/x/tools v0.16.0/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0= +golang.org/x/tools v0.17.0 h1:FvmRgNOcs3kOa+T20R1uhfP9F6HgG2mfxDv1vrx1Htc= +golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -574,14 +574,14 @@ gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -k8s.io/api v0.28.4 h1:8ZBrLjwosLl/NYgv1P7EQLqoO8MGQApnbgH8tu3BMzY= -k8s.io/api v0.28.4/go.mod h1:axWTGrY88s/5YE+JSt4uUi6NMM+gur1en2REMR7IRj0= -k8s.io/apiextensions-apiserver v0.28.4 h1:AZpKY/7wQ8n+ZYDtNHbAJBb+N4AXXJvyZx6ww6yAJvU= -k8s.io/apiextensions-apiserver v0.28.4/go.mod h1:pgQIZ1U8eJSMQcENew/0ShUTlePcSGFq6dxSxf2mwPM= -k8s.io/apimachinery v0.28.4 h1:zOSJe1mc+GxuMnFzD4Z/U1wst50X28ZNsn5bhgIIao8= -k8s.io/apimachinery v0.28.4/go.mod h1:wI37ncBvfAoswfq626yPTe6Bz1c22L7uaJ8dho83mgg= -k8s.io/client-go v0.28.4 h1:Np5ocjlZcTrkyRJ3+T3PkXDpe4UpatQxj85+xjaD2wY= -k8s.io/client-go v0.28.4/go.mod h1:0VDZFpgoZfelyP5Wqu0/r/TRYcLYuJ2U1KEeoaPa1N4= +k8s.io/api v0.28.6 h1:yy6u9CuIhmg55YvF/BavPBBXB+5QicB64njJXxVnzLo= +k8s.io/api v0.28.6/go.mod h1:AM6Ys6g9MY3dl/XNaNfg/GePI0FT7WBGu8efU/lirAo= +k8s.io/apiextensions-apiserver v0.28.6 h1:myB3iG/3v3jqCg28JDbOefu4sH2/erNEXgytRzJKBOo= +k8s.io/apiextensions-apiserver v0.28.6/go.mod h1:qlp6xRKBgyRhe5AYc81TQpLx4kLNK8/sGQUOwMkVjRk= +k8s.io/apimachinery v0.28.6 h1:RsTeR4z6S07srPg6XYrwXpTJVMXsjPXn0ODakMytSW0= +k8s.io/apimachinery v0.28.6/go.mod h1:QFNX/kCl/EMT2WTSz8k4WLCv2XnkOLMaL8GAVRMdpsA= +k8s.io/client-go v0.28.6 h1:Gge6ziyIdafRchfoBKcpaARuz7jfrK1R1azuwORIsQI= +k8s.io/client-go v0.28.6/go.mod h1:+nu0Yp21Oeo/cBCsprNVXB2BfJTV51lFfe5tXl2rUL8= k8s.io/klog/v2 v2.110.1 h1:U/Af64HJf7FcwMcXyKm2RPM22WZzyR7OSpYj5tg3cL0= k8s.io/klog/v2 v2.110.1/go.mod h1:YGtd1984u+GgbuZ7e08/yBuAfKLSO0+uR1Fhi6ExXjo= k8s.io/kube-openapi v0.0.0-20231206194836-bf4651e18aa8 h1:vzKzxN5uyJZLY8HL1/OovW7BJefnsBIWt8T7Gjh2boQ= From 976f40b6421651ffb904c9f4c36141aeceab6026 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 5 Feb 2024 00:56:55 +0000 Subject: [PATCH 742/818] build(deps): bump the ci group with 3 updates Bumps the ci group with 3 updates: [anchore/sbom-action](https://github.com/anchore/sbom-action), [sigstore/cosign-installer](https://github.com/sigstore/cosign-installer) and [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request). Updates `anchore/sbom-action` from 0.15.5 to 0.15.8 - [Release notes](https://github.com/anchore/sbom-action/releases) - [Commits](https://github.com/anchore/sbom-action/compare/24b0d5238516480139aa8bc6f92eeb7b54a9eb0a...b6a39da80722a2cb0ef5d197531764a89b5d48c3) Updates `sigstore/cosign-installer` from 3.3.0 to 3.4.0 - [Release notes](https://github.com/sigstore/cosign-installer/releases) - [Commits](https://github.com/sigstore/cosign-installer/compare/9614fae9e5c5eddabb09f90a270fcb487c9f7149...e1523de7571e31dbe865fd2e80c5c7c23ae71eb4) Updates `peter-evans/create-pull-request` from 5.0.2 to 6.0.0 - [Release notes](https://github.com/peter-evans/create-pull-request/releases) - [Commits](https://github.com/peter-evans/create-pull-request/compare/153407881ec5c347639a548ade7d8ad1d6740e38...b1ddad2c994a25fbc81a28b3ec0e368bb2021c50) --- updated-dependencies: - dependency-name: anchore/sbom-action dependency-type: direct:production update-type: version-update:semver-patch dependency-group: ci - dependency-name: sigstore/cosign-installer dependency-type: direct:production update-type: version-update:semver-minor dependency-group: ci - dependency-name: peter-evans/create-pull-request dependency-type: direct:production update-type: version-update:semver-major dependency-group: ci ... Signed-off-by: dependabot[bot] --- .github/workflows/release.yaml | 6 +++--- .github/workflows/update.yaml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 3b79d224..f7953b27 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -34,9 +34,9 @@ jobs: id: buildx uses: docker/setup-buildx-action@f95db51fddba0c2d1ec667646a06c2ce06100226 # v3.0.0 - name: Setup Syft - uses: anchore/sbom-action/download-syft@24b0d5238516480139aa8bc6f92eeb7b54a9eb0a # v0.15.5 + uses: anchore/sbom-action/download-syft@b6a39da80722a2cb0ef5d197531764a89b5d48c3 # v0.15.8 - name: Setup Cosign - uses: sigstore/cosign-installer@9614fae9e5c5eddabb09f90a270fcb487c9f7149 # v3.3.0 + uses: sigstore/cosign-installer@e1523de7571e31dbe865fd2e80c5c7c23ae71eb4 # v3.4.0 - name: Setup Kustomize uses: fluxcd/pkg/actions/kustomize@main - name: Login to GitHub Container Registry @@ -155,7 +155,7 @@ jobs: --path="./flux-system" \ --source=${{ github.repositoryUrl }} \ --revision="${{ github.ref_name }}@sha1:${{ github.sha }}" - - uses: sigstore/cosign-installer@9614fae9e5c5eddabb09f90a270fcb487c9f7149 # v3.3.0 + - uses: sigstore/cosign-installer@e1523de7571e31dbe865fd2e80c5c7c23ae71eb4 # v3.4.0 - name: Sign manifests env: COSIGN_EXPERIMENTAL: 1 diff --git a/.github/workflows/update.yaml b/.github/workflows/update.yaml index ec619fcd..a3da9736 100644 --- a/.github/workflows/update.yaml +++ b/.github/workflows/update.yaml @@ -84,7 +84,7 @@ jobs: - name: Create Pull Request id: cpr - uses: peter-evans/create-pull-request@153407881ec5c347639a548ade7d8ad1d6740e38 # v5.0.2 + uses: peter-evans/create-pull-request@b1ddad2c994a25fbc81a28b3ec0e368bb2021c50 # v6.0.0 with: token: ${{ secrets.BOT_GITHUB_TOKEN }} commit-message: | From a30020a6d621a71c5c8b6368ef4cd0a30fe474ce Mon Sep 17 00:00:00 2001 From: fluxcdbot Date: Mon, 5 Feb 2024 09:19:05 +0000 Subject: [PATCH 743/818] Update toolkit components - helm-controller to v0.37.4 https://github.com/fluxcd/helm-controller/blob/v0.37.4/CHANGELOG.md - kustomize-controller to v1.2.2 https://github.com/fluxcd/kustomize-controller/blob/v1.2.2/CHANGELOG.md - source-controller to v1.2.4 https://github.com/fluxcd/source-controller/blob/v1.2.4/CHANGELOG.md - notification-controller to v1.2.4 https://github.com/fluxcd/notification-controller/blob/v1.2.4/CHANGELOG.md - image-reflector-controller to v0.31.2 https://github.com/fluxcd/image-reflector-controller/blob/v0.31.2/CHANGELOG.md - image-automation-controller to v0.37.1 https://github.com/fluxcd/image-automation-controller/blob/v0.37.1/CHANGELOG.md Signed-off-by: GitHub --- go.mod | 12 +++++----- go.sum | 24 +++++++++---------- .../bases/helm-controller/kustomization.yaml | 4 ++-- .../kustomization.yaml | 4 ++-- .../kustomization.yaml | 4 ++-- .../kustomize-controller/kustomization.yaml | 4 ++-- .../kustomization.yaml | 4 ++-- .../source-controller/kustomization.yaml | 4 ++-- manifests/crds/kustomization.yaml | 12 +++++----- 9 files changed, 36 insertions(+), 36 deletions(-) diff --git a/go.mod b/go.mod index 2b549450..6d9a5159 100644 --- a/go.mod +++ b/go.mod @@ -12,11 +12,11 @@ require ( github.com/distribution/distribution/v3 v3.0.0-alpha.1 github.com/fluxcd/cli-utils v0.36.0-flux.3 github.com/fluxcd/go-git-providers v0.19.3 - github.com/fluxcd/helm-controller/api v0.37.2 - github.com/fluxcd/image-automation-controller/api v0.37.0 - github.com/fluxcd/image-reflector-controller/api v0.31.1 - github.com/fluxcd/kustomize-controller/api v1.2.1 - github.com/fluxcd/notification-controller/api v1.2.3 + github.com/fluxcd/helm-controller/api v0.37.4 + github.com/fluxcd/image-automation-controller/api v0.37.1 + github.com/fluxcd/image-reflector-controller/api v0.31.2 + github.com/fluxcd/kustomize-controller/api v1.2.2 + github.com/fluxcd/notification-controller/api v1.2.4 github.com/fluxcd/pkg/apis/event v0.7.0 github.com/fluxcd/pkg/apis/meta v1.3.0 github.com/fluxcd/pkg/git v0.17.0 @@ -29,7 +29,7 @@ require ( github.com/fluxcd/pkg/ssh v0.11.0 github.com/fluxcd/pkg/tar v0.4.0 github.com/fluxcd/pkg/version v0.2.2 - github.com/fluxcd/source-controller/api v1.2.3 + github.com/fluxcd/source-controller/api v1.2.4 github.com/go-git/go-git/v5 v5.11.0 github.com/go-logr/logr v1.4.1 github.com/gonvenience/bunt v1.3.5 diff --git a/go.sum b/go.sum index d2be5976..47b58c6e 100644 --- a/go.sum +++ b/go.sum @@ -141,16 +141,16 @@ github.com/fluxcd/cli-utils v0.36.0-flux.3/go.mod h1:9lShvUz7uRPIjYZ6phr5AOuORkR github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= github.com/fluxcd/go-git-providers v0.19.3 h1:G70yZR6biRgOE7FJVnSTLran642K9rm645wlXPNxLvw= github.com/fluxcd/go-git-providers v0.19.3/go.mod h1:NyHogwOJXUflL8IX05ycVjXwmvxqql0WgbVkmoj+iiE= -github.com/fluxcd/helm-controller/api v0.37.2 h1:tkLezpRdqPDz7HoKHFu92sV+ppOCVDxkjFTh8/lpff8= -github.com/fluxcd/helm-controller/api v0.37.2/go.mod h1:BuXZhAX9blQviil6yUN5zNM4RB753yhyBTJXxXff7Mo= -github.com/fluxcd/image-automation-controller/api v0.37.0 h1:0L8kzX3zaYfg4wQ2Mx3G56atLMNeDGjy5qMGP4tDKRs= -github.com/fluxcd/image-automation-controller/api v0.37.0/go.mod h1:B2EbmiY69mE2bGOENPNUXr6klwrVe7FwVoB2iE1q08E= -github.com/fluxcd/image-reflector-controller/api v0.31.1 h1:nc44G0JjLgSvqglJSiXQJZcrRw+eY01j7fHRUDB3FMw= -github.com/fluxcd/image-reflector-controller/api v0.31.1/go.mod h1:KopMbC92Cw2ypZZeMytzTLr3EfOj2hoL6MizrdpBDhc= -github.com/fluxcd/kustomize-controller/api v1.2.1 h1:+WgQOU7jpqz9bA4djPWmaeYAp9cG7c/TdcIYku3Jrzk= -github.com/fluxcd/kustomize-controller/api v1.2.1/go.mod h1:0Kgc4uYnr5jCm4H8JwArkR0v4WTmXeX/9KgoDbxluVc= -github.com/fluxcd/notification-controller/api v1.2.3 h1:vXVMg2PmTjmRC5+ULZfbmBEm/CsJaM9yjNJzRdI0JMs= -github.com/fluxcd/notification-controller/api v1.2.3/go.mod h1:A0VkH3mswQAeGKsmzq81jAUN+zNJt9SPXjwe8mvnnaw= +github.com/fluxcd/helm-controller/api v0.37.4 h1:rkBMqYXexyf1s5BS8QpxGi691DsCi+yugIFCM5fNKLU= +github.com/fluxcd/helm-controller/api v0.37.4/go.mod h1:KFdP5Lbrc4Vv+Jt4xRj6UUo3qiwdBqBPl1xiiAnBe9c= +github.com/fluxcd/image-automation-controller/api v0.37.1 h1:zi1VfPoGuHsNtyTpueKbr4b/c+Ms7HjFocTAmixmYno= +github.com/fluxcd/image-automation-controller/api v0.37.1/go.mod h1:7p0woxB275YzhdctzbxVMck0/hZt45bm0K12A0ABldo= +github.com/fluxcd/image-reflector-controller/api v0.31.2 h1:s16ewwfuLBYuh8hENuVgU8SYsSNxRaA4f+AD60/+les= +github.com/fluxcd/image-reflector-controller/api v0.31.2/go.mod h1:tV7g+KXQL3W8w5+fRJU7ubVGc4QAfx1C7XI5qrQvA3U= +github.com/fluxcd/kustomize-controller/api v1.2.2 h1:LXRa2181usLsDkAJ86i/CnvCyPwhLcFUw9jBnXxTFJ4= +github.com/fluxcd/kustomize-controller/api v1.2.2/go.mod h1:dfAaPQuuoWfExyWaeO7Kj2ZtfKQ4nDcJrt7AeAFlLZs= +github.com/fluxcd/notification-controller/api v1.2.4 h1:H/C8XW5boncf8rzJjSe/MCr186Hgvw+arPat9XOaRlw= +github.com/fluxcd/notification-controller/api v1.2.4/go.mod h1:LeHtKKTI3ew+FXY0oYtYqM68UYOArfBa/cy4pxAzN4M= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= github.com/fluxcd/pkg/apis/event v0.7.0 h1:QN/gz9i5kZ3GlfTOE6SCjjnSXrSPUU75MCVRwN8U+qo= @@ -180,8 +180,8 @@ github.com/fluxcd/pkg/tar v0.4.0 h1:SuXpfXBIcSJ5R/yqQi2CBxBmV/i/LH0agqNAh2PWBZg= github.com/fluxcd/pkg/tar v0.4.0/go.mod h1:SyJBaQvuv2VA/rv4d1OHhCV6R8+9QKc9np193EzNHBc= github.com/fluxcd/pkg/version v0.2.2 h1:ZpVXECeLA5hIQMft11iLp6gN3cKcz6UNuVTQPw/bRdI= github.com/fluxcd/pkg/version v0.2.2/go.mod h1:NGnh/no8S6PyfCDxRFrPY3T5BUnqP48MxfxNRU0z8C0= -github.com/fluxcd/source-controller/api v1.2.3 h1:71mXv3Qg9HEhcpqOq1ObmoE+P/HuZNaAvxfI7dqZMo8= -github.com/fluxcd/source-controller/api v1.2.3/go.mod h1:5gaIVVH7hgb8p3HKFp8P6hGmZEC8fKSt4EcrG3g5vZI= +github.com/fluxcd/source-controller/api v1.2.4 h1:XjKTWhSSeLGsogWnTcLl5sUnyMlC5TKDbbBgP9SyJ5c= +github.com/fluxcd/source-controller/api v1.2.4/go.mod h1:j3QSHpIPBP5sjaGIkVtsgWCx8JcOmcsutRmdJmRMOZg= github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY= diff --git a/manifests/bases/helm-controller/kustomization.yaml b/manifests/bases/helm-controller/kustomization.yaml index 099cd240..e663a4c3 100644 --- a/manifests/bases/helm-controller/kustomization.yaml +++ b/manifests/bases/helm-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/helm-controller/releases/download/v0.37.2/helm-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.37.2/helm-controller.deployment.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.37.4/helm-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.37.4/helm-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/image-automation-controller/kustomization.yaml b/manifests/bases/image-automation-controller/kustomization.yaml index a89e9847..5e24e1ce 100644 --- a/manifests/bases/image-automation-controller/kustomization.yaml +++ b/manifests/bases/image-automation-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.37.0/image-automation-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.37.0/image-automation-controller.deployment.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.37.1/image-automation-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.37.1/image-automation-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/image-reflector-controller/kustomization.yaml b/manifests/bases/image-reflector-controller/kustomization.yaml index f8aef1e6..a3d4aa9e 100644 --- a/manifests/bases/image-reflector-controller/kustomization.yaml +++ b/manifests/bases/image-reflector-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.31.1/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.31.1/image-reflector-controller.deployment.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.31.2/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.31.2/image-reflector-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/kustomize-controller/kustomization.yaml b/manifests/bases/kustomize-controller/kustomization.yaml index c25d9209..6fb1a2d2 100644 --- a/manifests/bases/kustomize-controller/kustomization.yaml +++ b/manifests/bases/kustomize-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/kustomize-controller/releases/download/v1.2.1/kustomize-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v1.2.1/kustomize-controller.deployment.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v1.2.2/kustomize-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v1.2.2/kustomize-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/notification-controller/kustomization.yaml b/manifests/bases/notification-controller/kustomization.yaml index af3abbc1..6a3b1657 100644 --- a/manifests/bases/notification-controller/kustomization.yaml +++ b/manifests/bases/notification-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/notification-controller/releases/download/v1.2.3/notification-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v1.2.3/notification-controller.deployment.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v1.2.4/notification-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v1.2.4/notification-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/bases/source-controller/kustomization.yaml b/manifests/bases/source-controller/kustomization.yaml index 538fc18b..13195e87 100644 --- a/manifests/bases/source-controller/kustomization.yaml +++ b/manifests/bases/source-controller/kustomization.yaml @@ -1,8 +1,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v1.2.3/source-controller.crds.yaml -- https://github.com/fluxcd/source-controller/releases/download/v1.2.3/source-controller.deployment.yaml +- https://github.com/fluxcd/source-controller/releases/download/v1.2.4/source-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v1.2.4/source-controller.deployment.yaml - account.yaml transformers: - labels.yaml diff --git a/manifests/crds/kustomization.yaml b/manifests/crds/kustomization.yaml index 97e8cbcc..a376de1a 100644 --- a/manifests/crds/kustomization.yaml +++ b/manifests/crds/kustomization.yaml @@ -1,9 +1,9 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: -- https://github.com/fluxcd/source-controller/releases/download/v1.2.3/source-controller.crds.yaml -- https://github.com/fluxcd/kustomize-controller/releases/download/v1.2.1/kustomize-controller.crds.yaml -- https://github.com/fluxcd/helm-controller/releases/download/v0.37.2/helm-controller.crds.yaml -- https://github.com/fluxcd/notification-controller/releases/download/v1.2.3/notification-controller.crds.yaml -- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.31.1/image-reflector-controller.crds.yaml -- https://github.com/fluxcd/image-automation-controller/releases/download/v0.37.0/image-automation-controller.crds.yaml +- https://github.com/fluxcd/source-controller/releases/download/v1.2.4/source-controller.crds.yaml +- https://github.com/fluxcd/kustomize-controller/releases/download/v1.2.2/kustomize-controller.crds.yaml +- https://github.com/fluxcd/helm-controller/releases/download/v0.37.4/helm-controller.crds.yaml +- https://github.com/fluxcd/notification-controller/releases/download/v1.2.4/notification-controller.crds.yaml +- https://github.com/fluxcd/image-reflector-controller/releases/download/v0.31.2/image-reflector-controller.crds.yaml +- https://github.com/fluxcd/image-automation-controller/releases/download/v0.37.1/image-automation-controller.crds.yaml From 9c06883ccf55a90550e7ac76ca40029a7f87bb9d Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Mon, 5 Feb 2024 14:10:09 +0200 Subject: [PATCH 744/818] Update dependencies Signed-off-by: Stefan Prodan --- Dockerfile | 2 +- go.mod | 2 +- go.sum | 4 ++-- tests/azure/go.mod | 14 +++++++------- tests/azure/go.sum | 28 ++++++++++++++-------------- tests/integration/go.mod | 16 ++++++++-------- tests/integration/go.sum | 32 ++++++++++++++++---------------- 7 files changed, 49 insertions(+), 49 deletions(-) diff --git a/Dockerfile b/Dockerfile index 65feaa66..9b66c043 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ FROM alpine:3.19 as builder RUN apk add --no-cache ca-certificates curl ARG ARCH=linux/amd64 -ARG KUBECTL_VER=1.28.4 +ARG KUBECTL_VER=1.28.6 RUN curl -sL https://storage.googleapis.com/kubernetes-release/release/v${KUBECTL_VER}/bin/${ARCH}/kubectl \ -o /usr/local/bin/kubectl && chmod +x /usr/local/bin/kubectl && \ diff --git a/go.mod b/go.mod index 6d9a5159..34b1937e 100644 --- a/go.mod +++ b/go.mod @@ -23,7 +23,7 @@ require ( github.com/fluxcd/pkg/git/gogit v0.17.0 github.com/fluxcd/pkg/kustomize v1.6.0 github.com/fluxcd/pkg/oci v0.35.0 - github.com/fluxcd/pkg/runtime v0.44.0 + github.com/fluxcd/pkg/runtime v0.44.1 github.com/fluxcd/pkg/sourceignore v0.5.0 github.com/fluxcd/pkg/ssa v0.36.0 github.com/fluxcd/pkg/ssh v0.11.0 diff --git a/go.sum b/go.sum index 47b58c6e..287a45d1 100644 --- a/go.sum +++ b/go.sum @@ -168,8 +168,8 @@ github.com/fluxcd/pkg/kustomize v1.6.0 h1:LIZ0BkpGLkyj33yzJ3HUsNzJ20wcLSxkUFcZg9 github.com/fluxcd/pkg/kustomize v1.6.0/go.mod h1:LitgZWd9+2X9g+Y4JeyZJewel+E10OIkUaUw4t4YWM8= github.com/fluxcd/pkg/oci v0.35.0 h1:VPFeEsF9U2O5Vg/l/cD0d6+MHzQUJGpT3OBSGEXpN8U= github.com/fluxcd/pkg/oci v0.35.0/go.mod h1:B5Q+Rb4zfQ9GR24FjUsCNmQMWXNRfsC0ovHxFXrpUCo= -github.com/fluxcd/pkg/runtime v0.44.0 h1:0BEPSpcsYXOiswKG5TWkin8fhCDHb0nDdAtq/5VrCSI= -github.com/fluxcd/pkg/runtime v0.44.0/go.mod h1:s1AhSOTCEBPaTfz/GdBD/Ws66uOByIuNP4Znrq+is9M= +github.com/fluxcd/pkg/runtime v0.44.1 h1:XuPTcNIgn/NsoIo/A6qfPZaD9E7cbnJTDbeNw8O1SZQ= +github.com/fluxcd/pkg/runtime v0.44.1/go.mod h1:s1AhSOTCEBPaTfz/GdBD/Ws66uOByIuNP4Znrq+is9M= github.com/fluxcd/pkg/sourceignore v0.5.0 h1:8ffSJCRIKsMpxXjGPVeRK3xhGUjuk+tFILf/+EODCVg= github.com/fluxcd/pkg/sourceignore v0.5.0/go.mod h1:cJsXn+wYmRY3VamrtG9I3MBL2wjtns2bS7ARIht2XAQ= github.com/fluxcd/pkg/ssa v0.36.0 h1:h9FB6SrrdVlxNQtfG+Fb/Roe1e61EPgtmJ5ORlAxwkU= diff --git a/tests/azure/go.mod b/tests/azure/go.mod index fdf7a510..50a1be48 100644 --- a/tests/azure/go.mod +++ b/tests/azure/go.mod @@ -8,16 +8,16 @@ replace gopkg.in/yaml.v3 => gopkg.in/yaml.v3 v3.0.1 require ( github.com/Azure/azure-event-hubs-go/v3 v3.6.1 github.com/chainguard-dev/git-urls v1.0.2 - github.com/fluxcd/helm-controller/api v0.37.2 - github.com/fluxcd/image-automation-controller/api v0.37.0 - github.com/fluxcd/image-reflector-controller/api v0.31.1 - github.com/fluxcd/kustomize-controller/api v1.2.1 - github.com/fluxcd/notification-controller/api v1.2.3 + github.com/fluxcd/helm-controller/api v0.37.4 + github.com/fluxcd/image-automation-controller/api v0.37.1 + github.com/fluxcd/image-reflector-controller/api v0.31.2 + github.com/fluxcd/kustomize-controller/api v1.2.2 + github.com/fluxcd/notification-controller/api v1.2.4 github.com/fluxcd/pkg/apis/event v0.7.0 github.com/fluxcd/pkg/apis/meta v1.3.0 github.com/fluxcd/pkg/git v0.17.0 github.com/fluxcd/pkg/git/gogit v0.17.0 - github.com/fluxcd/source-controller/api v1.2.3 + github.com/fluxcd/source-controller/api v1.2.4 github.com/go-git/go-git/v5 v5.11.0 github.com/hashicorp/hc-install v0.5.2 github.com/hashicorp/terraform-exec v0.18.1 @@ -56,7 +56,7 @@ require ( github.com/emirpasic/gods v1.18.1 // indirect github.com/evanphx/json-patch/v5 v5.7.0 // indirect github.com/fluxcd/pkg/apis/acl v0.1.0 // indirect - github.com/fluxcd/pkg/apis/kustomize v1.2.0 // indirect + github.com/fluxcd/pkg/apis/kustomize v1.3.0 // indirect github.com/fluxcd/pkg/ssh v0.11.0 // indirect github.com/fluxcd/pkg/version v0.2.2 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect diff --git a/tests/azure/go.sum b/tests/azure/go.sum index 36b0fa72..244d405d 100644 --- a/tests/azure/go.sum +++ b/tests/azure/go.sum @@ -67,22 +67,22 @@ github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FM github.com/evanphx/json-patch/v5 v5.7.0 h1:nJqP7uwL84RJInrohHfW0Fx3awjbm8qZeFv0nW9SYGc= github.com/evanphx/json-patch/v5 v5.7.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ= github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= -github.com/fluxcd/helm-controller/api v0.37.2 h1:tkLezpRdqPDz7HoKHFu92sV+ppOCVDxkjFTh8/lpff8= -github.com/fluxcd/helm-controller/api v0.37.2/go.mod h1:BuXZhAX9blQviil6yUN5zNM4RB753yhyBTJXxXff7Mo= -github.com/fluxcd/image-automation-controller/api v0.37.0 h1:0L8kzX3zaYfg4wQ2Mx3G56atLMNeDGjy5qMGP4tDKRs= -github.com/fluxcd/image-automation-controller/api v0.37.0/go.mod h1:B2EbmiY69mE2bGOENPNUXr6klwrVe7FwVoB2iE1q08E= -github.com/fluxcd/image-reflector-controller/api v0.31.1 h1:nc44G0JjLgSvqglJSiXQJZcrRw+eY01j7fHRUDB3FMw= -github.com/fluxcd/image-reflector-controller/api v0.31.1/go.mod h1:KopMbC92Cw2ypZZeMytzTLr3EfOj2hoL6MizrdpBDhc= -github.com/fluxcd/kustomize-controller/api v1.2.1 h1:+WgQOU7jpqz9bA4djPWmaeYAp9cG7c/TdcIYku3Jrzk= -github.com/fluxcd/kustomize-controller/api v1.2.1/go.mod h1:0Kgc4uYnr5jCm4H8JwArkR0v4WTmXeX/9KgoDbxluVc= -github.com/fluxcd/notification-controller/api v1.2.3 h1:vXVMg2PmTjmRC5+ULZfbmBEm/CsJaM9yjNJzRdI0JMs= -github.com/fluxcd/notification-controller/api v1.2.3/go.mod h1:A0VkH3mswQAeGKsmzq81jAUN+zNJt9SPXjwe8mvnnaw= +github.com/fluxcd/helm-controller/api v0.37.4 h1:rkBMqYXexyf1s5BS8QpxGi691DsCi+yugIFCM5fNKLU= +github.com/fluxcd/helm-controller/api v0.37.4/go.mod h1:KFdP5Lbrc4Vv+Jt4xRj6UUo3qiwdBqBPl1xiiAnBe9c= +github.com/fluxcd/image-automation-controller/api v0.37.1 h1:zi1VfPoGuHsNtyTpueKbr4b/c+Ms7HjFocTAmixmYno= +github.com/fluxcd/image-automation-controller/api v0.37.1/go.mod h1:7p0woxB275YzhdctzbxVMck0/hZt45bm0K12A0ABldo= +github.com/fluxcd/image-reflector-controller/api v0.31.2 h1:s16ewwfuLBYuh8hENuVgU8SYsSNxRaA4f+AD60/+les= +github.com/fluxcd/image-reflector-controller/api v0.31.2/go.mod h1:tV7g+KXQL3W8w5+fRJU7ubVGc4QAfx1C7XI5qrQvA3U= +github.com/fluxcd/kustomize-controller/api v1.2.2 h1:LXRa2181usLsDkAJ86i/CnvCyPwhLcFUw9jBnXxTFJ4= +github.com/fluxcd/kustomize-controller/api v1.2.2/go.mod h1:dfAaPQuuoWfExyWaeO7Kj2ZtfKQ4nDcJrt7AeAFlLZs= +github.com/fluxcd/notification-controller/api v1.2.4 h1:H/C8XW5boncf8rzJjSe/MCr186Hgvw+arPat9XOaRlw= +github.com/fluxcd/notification-controller/api v1.2.4/go.mod h1:LeHtKKTI3ew+FXY0oYtYqM68UYOArfBa/cy4pxAzN4M= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= github.com/fluxcd/pkg/apis/event v0.7.0 h1:QN/gz9i5kZ3GlfTOE6SCjjnSXrSPUU75MCVRwN8U+qo= github.com/fluxcd/pkg/apis/event v0.7.0/go.mod h1:zdqe8SVXjFQ/Nfuk51c2SJe0NkyNwYOxSFtN6SmikVs= -github.com/fluxcd/pkg/apis/kustomize v1.2.0 h1:vkVs+OumxaWso0jNCqdgFFfMHdh+qtZhykTkjl7OgmA= -github.com/fluxcd/pkg/apis/kustomize v1.2.0/go.mod h1:VF7tR/WuVFeum+HaMTHwp+eCtsHiiQlY6ihgqtAnW/M= +github.com/fluxcd/pkg/apis/kustomize v1.3.0 h1:qvB46CfaOWcL1SyR2RiVWN/j7/035D0OtB1ltLN7rgI= +github.com/fluxcd/pkg/apis/kustomize v1.3.0/go.mod h1:PCXf5kktTzNav0aH2Ns3jsowqwmA9xTcsrEOoPzx/K8= github.com/fluxcd/pkg/apis/meta v1.3.0 h1:KxeEc6olmSZvQ5pBONPE4IKxyoWQbqTJF1X6K5nIXpU= github.com/fluxcd/pkg/apis/meta v1.3.0/go.mod h1:3Ui8xFkoU4sYehqmscjpq7NjqH2YN1A2iX2okbO3/yA= github.com/fluxcd/pkg/git v0.17.0 h1:eHL8IazeX2HXwXzT6zLdzGaX3H37n/ipkdd1+byyzUM= @@ -94,8 +94,8 @@ github.com/fluxcd/pkg/ssh v0.11.0 h1:7WDDrcB0cNimzZjrpkzYBrizkrUgyM4Zr2cd9z9aqpU github.com/fluxcd/pkg/ssh v0.11.0/go.mod h1:K8YgH8KM0GV5DWuRErX3iKgpoHlYh08SBK+U5Q0teJc= github.com/fluxcd/pkg/version v0.2.2 h1:ZpVXECeLA5hIQMft11iLp6gN3cKcz6UNuVTQPw/bRdI= github.com/fluxcd/pkg/version v0.2.2/go.mod h1:NGnh/no8S6PyfCDxRFrPY3T5BUnqP48MxfxNRU0z8C0= -github.com/fluxcd/source-controller/api v1.2.3 h1:71mXv3Qg9HEhcpqOq1ObmoE+P/HuZNaAvxfI7dqZMo8= -github.com/fluxcd/source-controller/api v1.2.3/go.mod h1:5gaIVVH7hgb8p3HKFp8P6hGmZEC8fKSt4EcrG3g5vZI= +github.com/fluxcd/source-controller/api v1.2.4 h1:XjKTWhSSeLGsogWnTcLl5sUnyMlC5TKDbbBgP9SyJ5c= +github.com/fluxcd/source-controller/api v1.2.4/go.mod h1:j3QSHpIPBP5sjaGIkVtsgWCx8JcOmcsutRmdJmRMOZg= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= diff --git a/tests/integration/go.mod b/tests/integration/go.mod index 5114dfd7..6ae6d819 100644 --- a/tests/integration/go.mod +++ b/tests/integration/go.mod @@ -6,17 +6,17 @@ require ( cloud.google.com/go/pubsub v1.31.0 github.com/Azure/azure-event-hubs-go/v3 v3.6.0 github.com/chainguard-dev/git-urls v1.0.2 - github.com/fluxcd/helm-controller/api v0.37.2 - github.com/fluxcd/image-automation-controller/api v0.37.0 - github.com/fluxcd/image-reflector-controller/api v0.31.1 - github.com/fluxcd/kustomize-controller/api v1.2.1 - github.com/fluxcd/notification-controller/api v1.2.3 + github.com/fluxcd/helm-controller/api v0.37.4 + github.com/fluxcd/image-automation-controller/api v0.37.1 + github.com/fluxcd/image-reflector-controller/api v0.31.2 + github.com/fluxcd/kustomize-controller/api v1.2.2 + github.com/fluxcd/notification-controller/api v1.2.4 github.com/fluxcd/pkg/apis/event v0.7.0 github.com/fluxcd/pkg/apis/meta v1.3.0 github.com/fluxcd/pkg/git v0.17.0 github.com/fluxcd/pkg/git/gogit v0.17.0 - github.com/fluxcd/pkg/runtime v0.44.0 - github.com/fluxcd/source-controller/api v1.2.3 + github.com/fluxcd/pkg/runtime v0.44.1 + github.com/fluxcd/source-controller/api v1.2.4 github.com/fluxcd/test-infra/tftestenv v0.0.0-20240108135005-b58e0c4e0cfa github.com/go-git/go-git/v5 v5.11.0 github.com/google/go-containerregistry v0.19.0 @@ -65,7 +65,7 @@ require ( github.com/emirpasic/gods v1.18.1 // indirect github.com/evanphx/json-patch/v5 v5.7.0 // indirect github.com/fluxcd/pkg/apis/acl v0.1.0 // indirect - github.com/fluxcd/pkg/apis/kustomize v1.2.0 // indirect + github.com/fluxcd/pkg/apis/kustomize v1.3.0 // indirect github.com/fluxcd/pkg/ssh v0.11.0 // indirect github.com/fluxcd/pkg/version v0.2.2 // indirect github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect diff --git a/tests/integration/go.sum b/tests/integration/go.sum index 3c8a01c9..b79cc99c 100644 --- a/tests/integration/go.sum +++ b/tests/integration/go.sum @@ -122,22 +122,22 @@ github.com/evanphx/json-patch/v5 v5.7.0 h1:nJqP7uwL84RJInrohHfW0Fx3awjbm8qZeFv0n github.com/evanphx/json-patch/v5 v5.7.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= -github.com/fluxcd/helm-controller/api v0.37.2 h1:tkLezpRdqPDz7HoKHFu92sV+ppOCVDxkjFTh8/lpff8= -github.com/fluxcd/helm-controller/api v0.37.2/go.mod h1:BuXZhAX9blQviil6yUN5zNM4RB753yhyBTJXxXff7Mo= -github.com/fluxcd/image-automation-controller/api v0.37.0 h1:0L8kzX3zaYfg4wQ2Mx3G56atLMNeDGjy5qMGP4tDKRs= -github.com/fluxcd/image-automation-controller/api v0.37.0/go.mod h1:B2EbmiY69mE2bGOENPNUXr6klwrVe7FwVoB2iE1q08E= -github.com/fluxcd/image-reflector-controller/api v0.31.1 h1:nc44G0JjLgSvqglJSiXQJZcrRw+eY01j7fHRUDB3FMw= -github.com/fluxcd/image-reflector-controller/api v0.31.1/go.mod h1:KopMbC92Cw2ypZZeMytzTLr3EfOj2hoL6MizrdpBDhc= -github.com/fluxcd/kustomize-controller/api v1.2.1 h1:+WgQOU7jpqz9bA4djPWmaeYAp9cG7c/TdcIYku3Jrzk= -github.com/fluxcd/kustomize-controller/api v1.2.1/go.mod h1:0Kgc4uYnr5jCm4H8JwArkR0v4WTmXeX/9KgoDbxluVc= -github.com/fluxcd/notification-controller/api v1.2.3 h1:vXVMg2PmTjmRC5+ULZfbmBEm/CsJaM9yjNJzRdI0JMs= -github.com/fluxcd/notification-controller/api v1.2.3/go.mod h1:A0VkH3mswQAeGKsmzq81jAUN+zNJt9SPXjwe8mvnnaw= +github.com/fluxcd/helm-controller/api v0.37.4 h1:rkBMqYXexyf1s5BS8QpxGi691DsCi+yugIFCM5fNKLU= +github.com/fluxcd/helm-controller/api v0.37.4/go.mod h1:KFdP5Lbrc4Vv+Jt4xRj6UUo3qiwdBqBPl1xiiAnBe9c= +github.com/fluxcd/image-automation-controller/api v0.37.1 h1:zi1VfPoGuHsNtyTpueKbr4b/c+Ms7HjFocTAmixmYno= +github.com/fluxcd/image-automation-controller/api v0.37.1/go.mod h1:7p0woxB275YzhdctzbxVMck0/hZt45bm0K12A0ABldo= +github.com/fluxcd/image-reflector-controller/api v0.31.2 h1:s16ewwfuLBYuh8hENuVgU8SYsSNxRaA4f+AD60/+les= +github.com/fluxcd/image-reflector-controller/api v0.31.2/go.mod h1:tV7g+KXQL3W8w5+fRJU7ubVGc4QAfx1C7XI5qrQvA3U= +github.com/fluxcd/kustomize-controller/api v1.2.2 h1:LXRa2181usLsDkAJ86i/CnvCyPwhLcFUw9jBnXxTFJ4= +github.com/fluxcd/kustomize-controller/api v1.2.2/go.mod h1:dfAaPQuuoWfExyWaeO7Kj2ZtfKQ4nDcJrt7AeAFlLZs= +github.com/fluxcd/notification-controller/api v1.2.4 h1:H/C8XW5boncf8rzJjSe/MCr186Hgvw+arPat9XOaRlw= +github.com/fluxcd/notification-controller/api v1.2.4/go.mod h1:LeHtKKTI3ew+FXY0oYtYqM68UYOArfBa/cy4pxAzN4M= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= github.com/fluxcd/pkg/apis/event v0.7.0 h1:QN/gz9i5kZ3GlfTOE6SCjjnSXrSPUU75MCVRwN8U+qo= github.com/fluxcd/pkg/apis/event v0.7.0/go.mod h1:zdqe8SVXjFQ/Nfuk51c2SJe0NkyNwYOxSFtN6SmikVs= -github.com/fluxcd/pkg/apis/kustomize v1.2.0 h1:vkVs+OumxaWso0jNCqdgFFfMHdh+qtZhykTkjl7OgmA= -github.com/fluxcd/pkg/apis/kustomize v1.2.0/go.mod h1:VF7tR/WuVFeum+HaMTHwp+eCtsHiiQlY6ihgqtAnW/M= +github.com/fluxcd/pkg/apis/kustomize v1.3.0 h1:qvB46CfaOWcL1SyR2RiVWN/j7/035D0OtB1ltLN7rgI= +github.com/fluxcd/pkg/apis/kustomize v1.3.0/go.mod h1:PCXf5kktTzNav0aH2Ns3jsowqwmA9xTcsrEOoPzx/K8= github.com/fluxcd/pkg/apis/meta v1.3.0 h1:KxeEc6olmSZvQ5pBONPE4IKxyoWQbqTJF1X6K5nIXpU= github.com/fluxcd/pkg/apis/meta v1.3.0/go.mod h1:3Ui8xFkoU4sYehqmscjpq7NjqH2YN1A2iX2okbO3/yA= github.com/fluxcd/pkg/git v0.17.0 h1:eHL8IazeX2HXwXzT6zLdzGaX3H37n/ipkdd1+byyzUM= @@ -145,14 +145,14 @@ github.com/fluxcd/pkg/git v0.17.0/go.mod h1:lBeHCTtVt9py9mMGj5sKs4+aFpMWGjH73gx5 github.com/fluxcd/pkg/git/gogit v0.17.0 h1:X8C+q/Nm/MjBKAoqw9NPpnJh0B3IxVLtqPgH+wT9NEg= github.com/fluxcd/pkg/git/gogit v0.17.0/go.mod h1:qyRSCQy41wG0FwUwKQtfSnwqkrJg5XB4UdMvrHjIcFY= github.com/fluxcd/pkg/gittestserver v0.10.0 h1:joqfczQNtguZFGxTuRL535ymDW/9clA1jBWa3d8B6WU= -github.com/fluxcd/pkg/runtime v0.44.0 h1:0BEPSpcsYXOiswKG5TWkin8fhCDHb0nDdAtq/5VrCSI= -github.com/fluxcd/pkg/runtime v0.44.0/go.mod h1:s1AhSOTCEBPaTfz/GdBD/Ws66uOByIuNP4Znrq+is9M= +github.com/fluxcd/pkg/runtime v0.44.1 h1:XuPTcNIgn/NsoIo/A6qfPZaD9E7cbnJTDbeNw8O1SZQ= +github.com/fluxcd/pkg/runtime v0.44.1/go.mod h1:s1AhSOTCEBPaTfz/GdBD/Ws66uOByIuNP4Znrq+is9M= github.com/fluxcd/pkg/ssh v0.11.0 h1:7WDDrcB0cNimzZjrpkzYBrizkrUgyM4Zr2cd9z9aqpU= github.com/fluxcd/pkg/ssh v0.11.0/go.mod h1:K8YgH8KM0GV5DWuRErX3iKgpoHlYh08SBK+U5Q0teJc= github.com/fluxcd/pkg/version v0.2.2 h1:ZpVXECeLA5hIQMft11iLp6gN3cKcz6UNuVTQPw/bRdI= github.com/fluxcd/pkg/version v0.2.2/go.mod h1:NGnh/no8S6PyfCDxRFrPY3T5BUnqP48MxfxNRU0z8C0= -github.com/fluxcd/source-controller/api v1.2.3 h1:71mXv3Qg9HEhcpqOq1ObmoE+P/HuZNaAvxfI7dqZMo8= -github.com/fluxcd/source-controller/api v1.2.3/go.mod h1:5gaIVVH7hgb8p3HKFp8P6hGmZEC8fKSt4EcrG3g5vZI= +github.com/fluxcd/source-controller/api v1.2.4 h1:XjKTWhSSeLGsogWnTcLl5sUnyMlC5TKDbbBgP9SyJ5c= +github.com/fluxcd/source-controller/api v1.2.4/go.mod h1:j3QSHpIPBP5sjaGIkVtsgWCx8JcOmcsutRmdJmRMOZg= github.com/fluxcd/test-infra/tftestenv v0.0.0-20240108135005-b58e0c4e0cfa h1:JdI+rVwGF5gBYt+UBijOVzXtq7aAU80vgksMNXSCCfU= github.com/fluxcd/test-infra/tftestenv v0.0.0-20240108135005-b58e0c4e0cfa/go.mod h1:liFlLEXgambGVdWSJ4JzbIHf1Vjpp1HwUyPazPIVZug= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= From 8fdfbcd25106e2b6f07e70e7d3218288443faf0c Mon Sep 17 00:00:00 2001 From: Taka Nishida Date: Fri, 16 Feb 2024 16:59:48 +0900 Subject: [PATCH 745/818] Fix typo Signed-off-by: Taka Nishida --- internal/build/build.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/internal/build/build.go b/internal/build/build.go index 227c3891..30784b6a 100644 --- a/internal/build/build.go +++ b/internal/build/build.go @@ -103,7 +103,7 @@ func WithTimeout(timeout time.Duration) BuilderOptionFunc { func WithProgressBar() BuilderOptionFunc { return func(b *Builder) error { - // Add a spiner + // Add a spinner cfg := yacspin.Config{ Frequency: 100 * time.Millisecond, CharSet: yacspin.CharSets[59], @@ -361,7 +361,7 @@ func (b *Builder) generate(kustomization kustomizev1.Kustomization, dirPath stri } // a scanner will be used down the line to parse the list - // so we have to make sure to unclude newlines + // so we have to make sure to include newlines ignoreList := strings.Join(b.ignore, "\n") gen := kustomize.NewGeneratorWithIgnore("", ignoreList, unstructured.Unstructured{Object: data}) @@ -375,7 +375,7 @@ func (b *Builder) generate(kustomization kustomizev1.Kustomization, dirPath stri func (b *Builder) do(ctx context.Context, kustomization kustomizev1.Kustomization, dirPath string) (resmap.ResMap, error) { fs := filesys.MakeFsOnDisk() - // acuire the lock + // acquire the lock b.mu.Lock() defer b.mu.Unlock() @@ -562,9 +562,9 @@ func maskSopsDataInStringDataSecret(stringDataMap map[string]string, mask string } // Cancel cancels the build -// It restores a clean reprository +// It restores a clean repository func (b *Builder) Cancel() error { - // acuire the lock + // acquire the lock b.mu.Lock() defer b.mu.Unlock() From 43437bf2d51662291378cebef6aa1e773d8e7cf5 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 21 Feb 2024 10:02:31 +0200 Subject: [PATCH 746/818] Update equinix runners Signed-off-by: Stefan Prodan --- .github/runners/README.md | 22 ++++++++++++---------- .github/runners/prereq.sh | 10 +++++----- .github/runners/runner-setup.sh | 2 +- 3 files changed, 18 insertions(+), 16 deletions(-) diff --git a/.github/runners/README.md b/.github/runners/README.md index 440c6865..8dc738f1 100644 --- a/.github/runners/README.md +++ b/.github/runners/README.md @@ -4,16 +4,18 @@ The Flux ARM64 end-to-end tests run on Equinix Metal instances provisioned with ## Current instances -| Repository | Runner | Instance | Location | -|-----------------------------|------------------|------------------------|---------------| -| flux2 | equinix-arm-dc-1 | flux-equinix-arm-dc-01 | Washington DC | -| flux2 | equinix-arm-dc-2 | flux-equinix-arm-dc-01 | Washington DC | -| flux2 | equinix-arm-da-1 | flux-equinix-arm-da-01 | Dallas | -| flux2 | equinix-arm-da-2 | flux-equinix-arm-da-01 | Dallas | -| source-controller | equinix-arm-dc-1 | flux-equinix-arm-dc-01 | Washington DC | -| source-controller | equinix-arm-da-1 | flux-equinix-arm-da-01 | Dallas | -| image-automation-controller | equinix-arm-dc-1 | flux-equinix-arm-dc-01 | Washington DC | -| image-automation-controller | equinix-arm-da-1 | flux-equinix-arm-da-01 | Dallas | +| Repository | Runner | Instance | Location | +|-----------------------------|------------------|----------------|---------------| +| flux2 | equinix-arm-dc-1 | flux-arm-dc-01 | Washington DC | +| flux2 | equinix-arm-dc-2 | flux-arm-dc-01 | Washington DC | +| flux2 | equinix-arm-da-1 | flux-arm-da-01 | Dallas | +| flux2 | equinix-arm-da-2 | flux-arm-da-01 | Dallas | +| flux-benchmark | equinix-arm-dc-1 | flux-arm-dc-01 | Washington DC | +| flux-benchmark | equinix-arm-da-1 | flux-arm-da-01 | Dallas | +| source-controller | equinix-arm-dc-1 | flux-arm-dc-01 | Washington DC | +| source-controller | equinix-arm-da-1 | flux-arm-da-01 | Dallas | +| image-automation-controller | equinix-arm-dc-1 | flux-arm-dc-01 | Washington DC | +| image-automation-controller | equinix-arm-da-1 | flux-arm-da-01 | Dallas | Instance spec: - Ampere Altra Q80-30 80-core processor @ 2.8GHz diff --git a/.github/runners/prereq.sh b/.github/runners/prereq.sh index 043876eb..e1e497f4 100755 --- a/.github/runners/prereq.sh +++ b/.github/runners/prereq.sh @@ -18,11 +18,11 @@ set -eu -KIND_VERSION=0.17.0 -KUBECTL_VERSION=1.24.0 -KUSTOMIZE_VERSION=4.5.7 -HELM_VERSION=3.10.1 -GITHUB_RUNNER_VERSION=2.298.2 +KIND_VERSION=0.22.0 +KUBECTL_VERSION=1.29.0 +KUSTOMIZE_VERSION=5.3.0 +HELM_VERSION=3.14.1 +GITHUB_RUNNER_VERSION=2.313.0 PACKAGES="apt-transport-https ca-certificates software-properties-common build-essential libssl-dev gnupg lsb-release jq pkg-config" # install prerequisites diff --git a/.github/runners/runner-setup.sh b/.github/runners/runner-setup.sh index b13d87e2..e7e1d332 100755 --- a/.github/runners/runner-setup.sh +++ b/.github/runners/runner-setup.sh @@ -22,7 +22,7 @@ RUNNER_NAME=$1 REPOSITORY_TOKEN=$2 REPOSITORY_URL=${3:-https://github.com/fluxcd/flux2} -GITHUB_RUNNER_VERSION=2.298.2 +GITHUB_RUNNER_VERSION=2.313.0 # download runner curl -o actions-runner-linux-arm64.tar.gz -L https://github.com/actions/runner/releases/download/v${GITHUB_RUNNER_VERSION}/actions-runner-linux-arm64-${GITHUB_RUNNER_VERSION}.tar.gz \ From 1e7dc1b392514abc24560a20592fc32bac4cfba8 Mon Sep 17 00:00:00 2001 From: Rishikesh Nair Date: Mon, 26 Feb 2024 20:14:36 +0530 Subject: [PATCH 747/818] Fix a typo in `--force` flag description Signed-off-by: Rishikesh Nair --- cmd/flux/bootstrap.go | 2 +- cmd/flux/install.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/flux/bootstrap.go b/cmd/flux/bootstrap.go index de02154a..7f0024f2 100644 --- a/cmd/flux/bootstrap.go +++ b/cmd/flux/bootstrap.go @@ -135,7 +135,7 @@ func init() { bootstrapCmd.PersistentFlags().StringVar(&bootstrapArgs.commitMessageAppendix, "commit-message-appendix", "", "string to add to the commit messages, e.g. '[ci skip]'") - bootstrapCmd.PersistentFlags().BoolVar(&bootstrapArgs.force, "force", false, "override existing Flux installation if it's managed by a diffrent tool such as Helm") + bootstrapCmd.PersistentFlags().BoolVar(&bootstrapArgs.force, "force", false, "override existing Flux installation if it's managed by a different tool such as Helm") bootstrapCmd.PersistentFlags().MarkHidden("manifests") rootCmd.AddCommand(bootstrapCmd) diff --git a/cmd/flux/install.go b/cmd/flux/install.go index bf0ee758..92665265 100644 --- a/cmd/flux/install.go +++ b/cmd/flux/install.go @@ -102,7 +102,7 @@ func init() { installCmd.Flags().StringVar(&installArgs.clusterDomain, "cluster-domain", rootArgs.defaults.ClusterDomain, "internal cluster domain") installCmd.Flags().StringSliceVar(&installArgs.tolerationKeys, "toleration-keys", nil, "list of toleration keys used to schedule the components pods onto nodes with matching taints") - installCmd.Flags().BoolVar(&installArgs.force, "force", false, "override existing Flux installation if it's managed by a diffrent tool such as Helm") + installCmd.Flags().BoolVar(&installArgs.force, "force", false, "override existing Flux installation if it's managed by a different tool such as Helm") installCmd.Flags().MarkHidden("manifests") rootCmd.AddCommand(installCmd) From 51b0cbfe2869e1c4d8d1e35dec3dca4c469f748e Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Thu, 7 Mar 2024 22:25:01 +0200 Subject: [PATCH 748/818] Remove deprecated e2e tests Signed-off-by: Stefan Prodan --- .github/workflows/e2e-azure.yaml | 47 +- Makefile | 1 - tests/azure/README.md | 57 -- tests/azure/azure_test.go | 960 ------------------ tests/azure/go.mod | 123 --- tests/azure/go.sum | 393 ------- tests/azure/terraform/aks/.terraform.lock.hcl | 81 -- tests/azure/terraform/aks/aks.tf | 35 - tests/azure/terraform/aks/azuredevops.tf | 21 - tests/azure/terraform/aks/event-hub.tf | 26 - tests/azure/terraform/aks/keyvault.tf | 37 - tests/azure/terraform/aks/main.tf | 52 - tests/azure/terraform/aks/outputs.tf | 80 -- .../azure/terraform/aks/service-principal.tf | 52 - tests/azure/terraform/aks/shared.tf | 32 - .../terraform/shared/.terraform.lock.hcl | 61 -- tests/azure/terraform/shared/acr.tf | 6 - tests/azure/terraform/shared/keyvault.tf | 43 - tests/azure/terraform/shared/main.tf | 39 - tests/azure/terraform/shared/outputs.tf | 18 - .../terraform/shared/service-principal.tf | 105 -- tests/azure/terraform/shared/variables.tf | 0 tests/azure/util_test.go | 457 --------- 23 files changed, 1 insertion(+), 2725 deletions(-) delete mode 100644 tests/azure/README.md delete mode 100644 tests/azure/azure_test.go delete mode 100644 tests/azure/go.mod delete mode 100644 tests/azure/go.sum delete mode 100644 tests/azure/terraform/aks/.terraform.lock.hcl delete mode 100644 tests/azure/terraform/aks/aks.tf delete mode 100644 tests/azure/terraform/aks/azuredevops.tf delete mode 100644 tests/azure/terraform/aks/event-hub.tf delete mode 100644 tests/azure/terraform/aks/keyvault.tf delete mode 100644 tests/azure/terraform/aks/main.tf delete mode 100644 tests/azure/terraform/aks/outputs.tf delete mode 100644 tests/azure/terraform/aks/service-principal.tf delete mode 100644 tests/azure/terraform/aks/shared.tf delete mode 100644 tests/azure/terraform/shared/.terraform.lock.hcl delete mode 100644 tests/azure/terraform/shared/acr.tf delete mode 100644 tests/azure/terraform/shared/keyvault.tf delete mode 100644 tests/azure/terraform/shared/main.tf delete mode 100644 tests/azure/terraform/shared/outputs.tf delete mode 100644 tests/azure/terraform/shared/service-principal.tf delete mode 100644 tests/azure/terraform/shared/variables.tf delete mode 100644 tests/azure/util_test.go diff --git a/.github/workflows/e2e-azure.yaml b/.github/workflows/e2e-azure.yaml index 3f45f046..c05d39c8 100644 --- a/.github/workflows/e2e-azure.yaml +++ b/.github/workflows/e2e-azure.yaml @@ -21,52 +21,7 @@ permissions: contents: read jobs: - e2e-amd64-aks: - runs-on: ubuntu-22.04 - defaults: - run: - working-directory: ./tests/azure - # This job is currently disabled. Remove the false check when Azure subscription is enabled. - if: false && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) && github.actor != 'dependabot[bot]' - steps: - - name: Checkout - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - - name: Setup Go - uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # v5.0.0 - with: - go-version: 1.20.x - cache-dependency-path: tests/azure/go.sum - - name: Setup Flux CLI - run: | - make build - mkdir -p $HOME/.local/bin - mv ./bin/flux $HOME/.local/bin - working-directory: ./ - - name: Setup SOPS - run: | - mkdir -p $HOME/.local/bin - wget https://github.com/mozilla/sops/releases/download/v3.7.1/sops-v3.7.1.linux -O $HOME/.local/bin/sops - chmod +x $HOME/.local/bin/sops - - name: Setup Terraform - uses: hashicorp/setup-terraform@a1502cd9e758c50496cc9ac5308c4843bcd56d36 # v2 - with: - terraform_version: 1.2.8 - terraform_wrapper: false - - name: Setup Azure CLI - run: | - curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash - - name: Run Azure e2e tests - env: - ARM_CLIENT_ID: ${{ secrets.ARM_CLIENT_ID }} - ARM_CLIENT_SECRET: ${{ secrets.ARM_CLIENT_SECRET }} - ARM_SUBSCRIPTION_ID: ${{ secrets.ARM_SUBSCRIPTION_ID }} - ARM_TENANT_ID: ${{ secrets.ARM_TENANT_ID }} - run: | - ls $HOME/.local/bin - az login --service-principal -u ${ARM_CLIENT_ID} -p ${ARM_CLIENT_SECRET} -t ${ARM_TENANT_ID} - go test -v -coverprofile cover.out -timeout 60m . - - refactored-e2e-amd64-aks: + e2e-aks: runs-on: ubuntu-22.04 defaults: run: diff --git a/Makefile b/Makefile index 44317f17..9d024880 100644 --- a/Makefile +++ b/Makefile @@ -18,7 +18,6 @@ all: test build tidy: go mod tidy -compat=1.20 - cd tests/azure && go mod tidy -compat=1.20 cd tests/integration && go mod tidy -compat=1.20 fmt: diff --git a/tests/azure/README.md b/tests/azure/README.md deleted file mode 100644 index 7a51fd5d..00000000 --- a/tests/azure/README.md +++ /dev/null @@ -1,57 +0,0 @@ -# Azure E2E - -The test suite goal is to verify that Flux integration with Azure services are working properly. - -## Architecture - -The tests are run with the help of pre-configured Azure subscriptions and Azure DevOps organization. -Access to those accounts are currently limited to Flux maintainers. -* [Azure Subscription](https://portal.azure.com/#@weaveworksendtoend.onmicrosoft.com/resource/subscriptions/71e8dce4-9af6-405a-8e96-425f5d3c302b/overview) -* [Azure DevOps organization](https://dev.azure.com/flux-azure/) - -All infrastructure is and should be created with Terraform. There are two separate Terraform states. -All state should be configured to use remote state in Azure. -They should all be placed in the [same container](https://portal.azure.com/#@weaveworksendtoend.onmicrosoft.com/resource/subscriptions/71e8dce4-9af6-405a-8e96-425f5d3c302b/resourceGroups/terraform-state/providers/Microsoft.Storage/storageAccounts/terraformstate0419/containersList) -but use different keys. - -The [shared](./terraform/shared) Terraform creates long running cheaper infrastructure that is used across all tests. -This includes a Key Vault which contains an ssh key and Azure DevOps Personal Access Token -which cannot be created automatically. It also includes an Azure Container Registry which the -forked [podinfo](https://dev.azure.com/flux-azure/e2e/_git/podinfo) repository pushes -a Helm Chart and Docker image to. - -The [aks](./terraform/aks) Terraform creates the AKS cluster and related resources to run the tests. -It creates the AKS cluster, Azure DevOps repositories, Key Vault Key for Sops, and Azure EventHub. -The resources should be created and destroyed before and after every test run. Currently, -the same state is reused between runs to make sure that resources are left running after each test run. - -## Tests - -Each test run is initiated by running `terraform apply` on the aks Terraform, it does this by using the library -[terraform-exec](https://github.com/hashicorp/terraform-exec). It then reads the output of the Terraform to get -credentials and ssh keys, this means that a lot of the communication with the Azure API is offset to -Terraform instead of requiring it to be implemented in the test. - -The following tests are currently implemented: - -- [x] Flux can be successfully installed on AKS using the CLI e.g.: -- [x] source-controller can clone Azure DevOps repositories (https+ssh) -- [x] image-reflector-controller can list tags from Azure Container Registry image repositories -- [x] kustomize-controller can decrypt secrets using SOPS and Azure Key Vault -- [x] image-automation-controller can create branches and push to Azure DevOps repositories (https+ssh) -- [x] notification-controller can send commit status to Azure DevOps -- [x] notification-controller can forward events to Azure Event Hub -- [x] source-controller can pull charts from Azure Container Registry Helm repositories - -## Give User Access - -There are a couple of steps required when adding a new user to get access to the Azure portal and Azure DevOps. -To begin with add the new user to[Azure AD](https://portal.azure.com/#blade/Microsoft_AAD_IAM/UsersManagementMenuBlade/MsGraphUsers), -and add the user to the [Azure AD group flux-contributors](https://portal.azure.com/#blade/Microsoft_AAD_IAM/GroupDetailsMenuBlade/Overview/groupId/24e0f3f6-6555-4d3d-99ab-414c869cab5d). -The new users should now go through the invite process, and be able to sign in to both the Azure Portal and Azure DevOps. - -After the new user has signed into Azure DevOps you will need to modify the users permissions. -This cannot be done before the user has signed in a first time. -In the [organization users page](https://dev.azure.com/flux-azure/_settings/users) -chose "Manage User" and set the "Access Level" to basic -and make the user "Project Contributor" of the "e2e" Azure DevOps project. diff --git a/tests/azure/azure_test.go b/tests/azure/azure_test.go deleted file mode 100644 index 889af1ad..00000000 --- a/tests/azure/azure_test.go +++ /dev/null @@ -1,960 +0,0 @@ -/* -Copyright 2021 The Flux authors - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package test - -import ( - "bytes" - "context" - b64 "encoding/base64" - "encoding/json" - "fmt" - "io" - "log" - "os" - "path/filepath" - "strings" - "testing" - "time" - - eventhub "github.com/Azure/azure-event-hubs-go/v3" - giturls "github.com/chainguard-dev/git-urls" - install "github.com/hashicorp/hc-install" - "github.com/hashicorp/hc-install/fs" - "github.com/hashicorp/hc-install/product" - "github.com/hashicorp/hc-install/src" - "github.com/hashicorp/terraform-exec/tfexec" - "github.com/microsoft/azure-devops-go-api/azuredevops" - "github.com/microsoft/azure-devops-go-api/azuredevops/git" - "github.com/stretchr/testify/require" - "go.uber.org/multierr" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/types" - "k8s.io/klog/v2/klogr" - "sigs.k8s.io/controller-runtime/pkg/client" - "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" - runtimeLog "sigs.k8s.io/controller-runtime/pkg/log" - - automationv1beta1 "github.com/fluxcd/image-automation-controller/api/v1beta1" - reflectorv1beta2 "github.com/fluxcd/image-reflector-controller/api/v1beta2" - kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" - notiv1 "github.com/fluxcd/notification-controller/api/v1" - notiv1beta3 "github.com/fluxcd/notification-controller/api/v1beta3" - eventv1 "github.com/fluxcd/pkg/apis/event/v1beta1" - "github.com/fluxcd/pkg/apis/meta" - sourcev1 "github.com/fluxcd/source-controller/api/v1" - extgogit "github.com/go-git/go-git/v5" - "github.com/go-git/go-git/v5/plumbing" -) - -const ( - aksTerraformPath = "./terraform/aks" - azureDevOpsKnownHosts = "ssh.dev.azure.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC7Hr1oTWqNqOlzGJOfGJ4NakVyIzf1rXYd4d7wo6jBlkLvCA4odBlL0mDUyZ0/QUfTTqeu+tm22gOsv+VrVTMk6vwRU75gY/y9ut5Mb3bR5BV58dKXyq9A9UeB5Cakehn5Zgm6x1mKoVyf+FFn26iYqXJRgzIZZcZ5V6hrE0Qg39kZm4az48o0AUbf6Sp4SLdvnuMa2sVNwHBboS7EJkm57XQPVU3/QpyNLHbWDdzwtrlS+ez30S3AdYhLKEOxAG8weOnyrtLJAUen9mTkol8oII1edf7mWWbWVf0nBmly21+nZcmCTISQBtdcyPaEno7fFQMDD26/s0lfKob4Kw8H" -) - -type config struct { - kubeconfigPath string - kubeClient client.Client - - azdoPat string - idRsa string - idRsaPub string - knownHosts string - fleetInfraRepository repoConfig - applicationRepository repoConfig - - fluxAzureSp spConfig - sopsId string - acr acrConfig - eventHubSas string -} - -type spConfig struct { - tenantId string - clientId string - clientSecret string -} - -type repoConfig struct { - http string - ssh string -} - -type acrConfig struct { - url string - username string - password string -} - -var cfg config - -func TestMain(m *testing.M) { - exitVal, err := setup(m) - if err != nil { - log.Printf("Received an error while running setup: %v", err) - os.Exit(1) - } - os.Exit(exitVal) -} - -func setup(m *testing.M) (exitVal int, err error) { - ctx := context.TODO() - runtimeLog.SetLogger(klogr.New()) - // Setup Terraform binary and init state - log.Println("Setting up Azure test infrastructure") - i := install.NewInstaller() - // Find Terraform binary path - execPath, err := i.Ensure(ctx, []src.Source{ - &fs.AnyVersion{Product: &product.Terraform}, - }) - if err != nil { - return 0, fmt.Errorf("terraform exec path not found: %v", err) - } - tf, err := tfexec.NewTerraform(aksTerraformPath, execPath) - if err != nil { - return 0, fmt.Errorf("could not create terraform instance: %v", err) - } - log.Println("Init Terraform") - err = tf.Init(ctx, tfexec.Upgrade(true)) - if err != nil { - return 0, fmt.Errorf("error running init: %v", err) - } - - // Always destroy the infrastructure before exiting - defer func() { - log.Println("Tearing down Azure test infrastructure") - if ferr := tf.Destroy(ctx); ferr != nil { - err = multierr.Append(fmt.Errorf("could not destroy Azure infrastructure: %v", ferr), err) - } - }() - - // Check that we are starting from a clean state - log.Println("Checking for an empty Terraform state") - state, err := tf.Show(ctx) - if err != nil { - return 0, fmt.Errorf("could not read state: %v", err) - } - if state.Values != nil { - return 0, fmt.Errorf("expected an empty state but got existing resources") - } - - // Apply Terraform and read the output values - log.Println("Applying Terraform") - err = tf.Apply(ctx) - if err != nil { - return 0, fmt.Errorf("error running apply: %v", err) - } - state, err = tf.Show(ctx) - if err != nil { - return 0, fmt.Errorf("could not read state: %v", err) - } - outputs := state.Values.Outputs - kubeconfig := outputs["aks_kube_config"].Value.(string) - aksHost := outputs["aks_host"].Value.(string) - aksCert := outputs["aks_client_certificate"].Value.(string) - aksKey := outputs["aks_client_key"].Value.(string) - aksCa := outputs["aks_cluster_ca_certificate"].Value.(string) - azdoPat := outputs["shared_pat"].Value.(string) - idRsa := outputs["shared_id_rsa"].Value.(string) - idRsaPub := outputs["shared_id_rsa_pub"].Value.(string) - fleetInfraRepository := outputs["fleet_infra_repository"].Value.(map[string]interface{}) - applicationRepository := outputs["application_repository"].Value.(map[string]interface{}) - fluxAzureSp := outputs["flux_azure_sp"].Value.(map[string]interface{}) - sharedSopsId := outputs["sops_id"].Value.(string) - acr := outputs["acr"].Value.(map[string]interface{}) - eventHubSas := outputs["event_hub_sas"].Value.(string) - - // Setup Kubernetes clients for test cluster - log.Println("Creating Kubernetes client") - kubeconfigPath, kubeClient, err := getKubernetesCredentials(kubeconfig, aksHost, aksCert, aksKey, aksCa) - if err != nil { - return 0, fmt.Errorf("error create Kubernetes client: %v", err) - } - defer func() { - if ferr := os.RemoveAll(filepath.Dir(kubeconfigPath)); ferr != nil { - err = multierr.Append(fmt.Errorf("could not clean up kubeconfig file: %v", ferr), err) - } - }() - - // Install Flux in the new cluster - cfg = config{ - kubeconfigPath: kubeconfigPath, - kubeClient: kubeClient, - azdoPat: azdoPat, - idRsa: idRsa, - idRsaPub: idRsaPub, - knownHosts: azureDevOpsKnownHosts, - fleetInfraRepository: repoConfig{ - http: fleetInfraRepository["http"].(string), - ssh: fleetInfraRepository["ssh"].(string), - }, - applicationRepository: repoConfig{ - http: applicationRepository["http"].(string), - ssh: applicationRepository["ssh"].(string), - }, - fluxAzureSp: spConfig{ - tenantId: fluxAzureSp["tenant_id"].(string), - clientId: fluxAzureSp["client_id"].(string), - clientSecret: fluxAzureSp["client_secret"].(string), - }, - sopsId: sharedSopsId, - acr: acrConfig{ - url: acr["url"].(string), - username: acr["username"].(string), - password: acr["password"].(string), - }, - eventHubSas: eventHubSas, - } - err = installFlux(ctx, kubeClient, kubeconfigPath, cfg.fleetInfraRepository.http, azdoPat, cfg.fluxAzureSp) - if err != nil { - return 0, fmt.Errorf("error installing Flux: %v", err) - } - - // Run tests - log.Println("Running Azure e2e tests") - result := m.Run() - return result, nil -} - -func TestFluxInstallation(t *testing.T) { - ctx := context.TODO() - require.Eventually(t, func() bool { - err := verifyGitAndKustomization(ctx, cfg.kubeClient, "flux-system", "flux-system") - if err != nil { - return false - } - return true - }, 60*time.Second, 5*time.Second) -} - -func TestAzureDevOpsCloning(t *testing.T) { - ctx := context.TODO() - branchName := "feature/branch" - tagName := "v1" - - tests := []struct { - name string - refType string - cloneType string - }{ - { - name: "https-feature-branch", - refType: "branch", - cloneType: "http", - }, - { - name: "https-v1", - refType: "tag", - cloneType: "http", - }, - { - name: "ssh-feature-branch", - refType: "branch", - cloneType: "ssh", - }, - { - name: "ssh-v1", - refType: "tag", - cloneType: "ssh", - }, - } - - t.Log("Creating application sources") - repo, _, err := getRepository(cfg.applicationRepository.http, branchName, true, cfg.azdoPat) - require.NoError(t, err) - - files := make(map[string]io.Reader) - for _, tt := range tests { - manifest := fmt.Sprintf(` - apiVersion: v1 - kind: ConfigMap - metadata: - name: foobar - namespace: %s - `, tt.name) - name := fmt.Sprintf("cloning-test/%s/configmap.yaml", tt.name) - files[name] = strings.NewReader(manifest) - } - - err = commitAndPushAll(repo, files, branchName) - require.NoError(t, err) - err = createTagAndPush(repo, branchName, tagName, cfg.azdoPat) - require.NoError(t, err) - - t.Log("Verifying application-gitops namespaces") - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - ref := &sourcev1.GitRepositoryRef{ - Branch: branchName, - } - if tt.refType == "tag" { - ref = &sourcev1.GitRepositoryRef{ - Tag: tagName, - } - } - url := cfg.applicationRepository.http - secretData := map[string]string{ - "username": "git", - "password": cfg.azdoPat, - } - if tt.cloneType == "ssh" { - url = cfg.applicationRepository.ssh - secretData = map[string]string{ - "identity": cfg.idRsa, - "identity.pub": cfg.idRsaPub, - "known_hosts": cfg.knownHosts, - } - } - - namespace := corev1.Namespace{ - ObjectMeta: metav1.ObjectMeta{ - Name: tt.name, - }, - } - _, err := controllerutil.CreateOrUpdate(ctx, cfg.kubeClient, &namespace, func() error { - return nil - }) - gitSecret := &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "git-credentials", - Namespace: namespace.Name, - }, - } - _, err = controllerutil.CreateOrUpdate(ctx, cfg.kubeClient, gitSecret, func() error { - gitSecret.StringData = secretData - return nil - }) - source := &sourcev1.GitRepository{ObjectMeta: metav1.ObjectMeta{Name: tt.name, Namespace: namespace.Name}} - _, err = controllerutil.CreateOrUpdate(ctx, cfg.kubeClient, source, func() error { - source.Spec = sourcev1.GitRepositorySpec{ - Reference: ref, - SecretRef: &meta.LocalObjectReference{ - Name: gitSecret.Name, - }, - URL: url, - } - return nil - }) - require.NoError(t, err) - kustomization := &kustomizev1.Kustomization{ObjectMeta: metav1.ObjectMeta{Name: tt.name, Namespace: namespace.Name}} - _, err = controllerutil.CreateOrUpdate(ctx, cfg.kubeClient, kustomization, func() error { - kustomization.Spec = kustomizev1.KustomizationSpec{ - Path: fmt.Sprintf("./cloning-test/%s", tt.name), - SourceRef: kustomizev1.CrossNamespaceSourceReference{ - Kind: sourcev1.GitRepositoryKind, - Name: tt.name, - Namespace: namespace.Name, - }, - Interval: metav1.Duration{Duration: 1 * time.Minute}, - Prune: true, - } - return nil - }) - require.NoError(t, err) - - // Wait for configmap to be deployed - require.Eventually(t, func() bool { - err := verifyGitAndKustomization(ctx, cfg.kubeClient, namespace.Name, tt.name) - if err != nil { - return false - } - nn := types.NamespacedName{Name: "foobar", Namespace: namespace.Name} - cm := &corev1.ConfigMap{} - err = cfg.kubeClient.Get(ctx, nn, cm) - if err != nil { - return false - } - return true - }, 120*time.Second, 5*time.Second) - }) - } -} - -func TestImageRepositoryACR(t *testing.T) { - ctx := context.TODO() - name := "image-repository-acr" - repoUrl := cfg.applicationRepository.http - oldVersion := "1.0.0" - newVersion := "1.0.1" - manifest := fmt.Sprintf(` - apiVersion: apps/v1 - kind: Deployment - metadata: - name: podinfo - namespace: %s - spec: - selector: - matchLabels: - app: podinfo - template: - metadata: - labels: - app: podinfo - spec: - containers: - - name: podinfod - image: %s/container/podinfo:%s # {"$imagepolicy": "%s:podinfo"} - readinessProbe: - exec: - command: - - podcli - - check - - http - - localhost:9898/readyz - initialDelaySeconds: 5 - timeoutSeconds: 5`, name, cfg.acr.url, oldVersion, name) - - repo, _, err := getRepository(repoUrl, name, true, cfg.azdoPat) - require.NoError(t, err) - files := make(map[string]io.Reader) - files["podinfo.yaml"] = strings.NewReader(manifest) - err = commitAndPushAll(repo, files, name) - require.NoError(t, err) - - err = setupNamespace(ctx, cfg.kubeClient, repoUrl, cfg.azdoPat, name) - require.NoError(t, err) - acrSecret := corev1.Secret{ObjectMeta: metav1.ObjectMeta{Name: "acr-docker", Namespace: name}} - _, err = controllerutil.CreateOrUpdate(ctx, cfg.kubeClient, &acrSecret, func() error { - acrSecret.Type = corev1.SecretTypeDockerConfigJson - acrSecret.StringData = map[string]string{ - ".dockerconfigjson": fmt.Sprintf(` - { - "auths": { - "%s": { - "auth": "%s" - } - } - } - `, cfg.acr.url, b64.StdEncoding.EncodeToString([]byte(fmt.Sprintf("%s:%s", cfg.acr.username, cfg.acr.password)))), - } - return nil - }) - require.NoError(t, err) - imageRepository := reflectorv1beta2.ImageRepository{ - ObjectMeta: metav1.ObjectMeta{ - Name: "podinfo", - Namespace: name, - }, - } - _, err = controllerutil.CreateOrUpdate(ctx, cfg.kubeClient, &imageRepository, func() error { - imageRepository.Spec = reflectorv1beta2.ImageRepositorySpec{ - Image: fmt.Sprintf("%s/container/podinfo", cfg.acr.url), - Interval: metav1.Duration{ - Duration: 1 * time.Minute, - }, - SecretRef: &meta.LocalObjectReference{ - Name: acrSecret.Name, - }, - } - return nil - }) - require.NoError(t, err) - imagePolicy := reflectorv1beta2.ImagePolicy{ - ObjectMeta: metav1.ObjectMeta{ - Name: "podinfo", - Namespace: name, - }, - } - _, err = controllerutil.CreateOrUpdate(ctx, cfg.kubeClient, &imagePolicy, func() error { - imagePolicy.Spec = reflectorv1beta2.ImagePolicySpec{ - ImageRepositoryRef: meta.NamespacedObjectReference{ - Name: imageRepository.Name, - }, - Policy: reflectorv1beta2.ImagePolicyChoice{ - SemVer: &reflectorv1beta2.SemVerPolicy{ - Range: "1.0.x", - }, - }, - } - return nil - }) - require.NoError(t, err) - imageAutomation := automationv1beta1.ImageUpdateAutomation{ - ObjectMeta: metav1.ObjectMeta{ - Name: "podinfo", - Namespace: name, - }, - } - _, err = controllerutil.CreateOrUpdate(ctx, cfg.kubeClient, &imageAutomation, func() error { - imageAutomation.Spec = automationv1beta1.ImageUpdateAutomationSpec{ - Interval: metav1.Duration{ - Duration: 1 * time.Minute, - }, - SourceRef: automationv1beta1.CrossNamespaceSourceReference{ - Kind: "GitRepository", - Name: name, - }, - GitSpec: &automationv1beta1.GitSpec{ - Checkout: &automationv1beta1.GitCheckoutSpec{ - Reference: sourcev1.GitRepositoryRef{ - Branch: name, - }, - }, - Commit: automationv1beta1.CommitSpec{ - Author: automationv1beta1.CommitUser{ - Email: "imageautomation@example.com", - Name: "imageautomation", - }, - }, - }, - } - return nil - }) - require.NoError(t, err) - - // Wait for image repository to be ready - require.Eventually(t, func() bool { - _, repoDir, err := getRepository(repoUrl, name, false, cfg.azdoPat) - if err != nil { - return false - } - b, err := os.ReadFile(filepath.Join(repoDir, "podinfo.yaml")) - if err != nil { - return false - } - if bytes.Contains(b, []byte(newVersion)) == false { - return false - } - return true - }, 120*time.Second, 5*time.Second) -} - -func TestKeyVaultSops(t *testing.T) { - ctx := context.TODO() - name := "key-vault-sops" - repoUrl := cfg.applicationRepository.http - secretYaml := `apiVersion: v1 -kind: Secret -metadata: - name: "test" - namespace: "key-vault-sops" -stringData: - foo: "bar"` - - repo, tmpDir, err := getRepository(repoUrl, name, true, cfg.azdoPat) - err = runCommand(ctx, 5*time.Minute, tmpDir, "mkdir -p ./key-vault-sops") - require.NoError(t, err) - err = runCommand(ctx, 5*time.Minute, tmpDir, fmt.Sprintf("echo \"%s\" > ./key-vault-sops/secret.enc.yaml", secretYaml)) - require.NoError(t, err) - err = runCommand(ctx, 5*time.Minute, tmpDir, fmt.Sprintf("sops --encrypt --encrypted-regex '^(data|stringData)$' --azure-kv %s --in-place ./key-vault-sops/secret.enc.yaml", cfg.sopsId)) - require.NoError(t, err) - - r, err := os.Open(fmt.Sprintf("%s/key-vault-sops/secret.enc.yaml", tmpDir)) - require.NoError(t, err) - - files := make(map[string]io.Reader) - files["key-vault-sops/secret.enc.yaml"] = r - err = commitAndPushAll(repo, files, name) - require.NoError(t, err) - - err = setupNamespace(ctx, cfg.kubeClient, repoUrl, cfg.azdoPat, name) - require.NoError(t, err) - - source := &sourcev1.GitRepository{ObjectMeta: metav1.ObjectMeta{Name: name, Namespace: name}} - require.Eventually(t, func() bool { - _, err = controllerutil.CreateOrUpdate(ctx, cfg.kubeClient, source, func() error { - source.Spec = sourcev1.GitRepositorySpec{ - Reference: &sourcev1.GitRepositoryRef{ - Branch: name, - }, - SecretRef: &meta.LocalObjectReference{ - Name: "https-credentials", - }, - URL: repoUrl, - } - return nil - }) - if err != nil { - return false - } - return true - }, 10*time.Second, 1*time.Second) - kustomization := &kustomizev1.Kustomization{ObjectMeta: metav1.ObjectMeta{Name: name, Namespace: name}} - require.Eventually(t, func() bool { - _, err = controllerutil.CreateOrUpdate(ctx, cfg.kubeClient, kustomization, func() error { - kustomization.Spec = kustomizev1.KustomizationSpec{ - Path: "./key-vault-sops", - SourceRef: kustomizev1.CrossNamespaceSourceReference{ - Kind: sourcev1.GitRepositoryKind, - Name: source.Name, - Namespace: source.Namespace, - }, - Interval: metav1.Duration{Duration: 1 * time.Minute}, - Prune: true, - Decryption: &kustomizev1.Decryption{ - Provider: "sops", - }, - } - return nil - }) - if err != nil { - return false - } - return true - }, 10*time.Second, 1*time.Second) - - require.Eventually(t, func() bool { - nn := types.NamespacedName{Name: "test", Namespace: name} - secret := &corev1.Secret{} - err = cfg.kubeClient.Get(ctx, nn, secret) - if err != nil { - return false - } - return true - }, 120*time.Second, 5*time.Second) -} - -func TestAzureDevOpsCommitStatus(t *testing.T) { - ctx := context.TODO() - name := "commit-status" - repoUrl := cfg.applicationRepository.http - manifest := fmt.Sprintf(` - apiVersion: v1 - kind: ConfigMap - metadata: - name: foobar - namespace: %s - `, name) - - c, _, err := getRepository(repoUrl, name, true, cfg.azdoPat) - require.NoError(t, err) - - files := make(map[string]io.Reader) - files["configmap.yaml"] = strings.NewReader(manifest) - - err = commitAndPushAll(c, files, name) - require.NoError(t, err) - - err = setupNamespace(ctx, cfg.kubeClient, repoUrl, cfg.azdoPat, name) - require.NoError(t, err) - - kustomization := &kustomizev1.Kustomization{ObjectMeta: metav1.ObjectMeta{Name: name, Namespace: name}} - require.Eventually(t, func() bool { - _, err = controllerutil.CreateOrUpdate(ctx, cfg.kubeClient, kustomization, func() error { - kustomization.Spec.HealthChecks = []meta.NamespacedObjectKindReference{ - { - APIVersion: "v1", - Kind: "ConfigMap", - Name: "foobar", - Namespace: name, - }, - } - return nil - }) - if err != nil { - return false - } - return true - }, 10*time.Second, 1*time.Second) - - require.Eventually(t, func() bool { - err := verifyGitAndKustomization(ctx, cfg.kubeClient, name, name) - if err != nil { - return false - } - return true - }, 10*time.Second, 1*time.Second) - - secret := corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "azuredevops-token", - Namespace: name, - }, - } - _, err = controllerutil.CreateOrUpdate(ctx, cfg.kubeClient, &secret, func() error { - secret.StringData = map[string]string{ - "token": cfg.azdoPat, - } - return nil - }) - provider := notiv1beta3.Provider{ - ObjectMeta: metav1.ObjectMeta{ - Name: "azuredevops", - Namespace: name, - }, - } - _, err = controllerutil.CreateOrUpdate(ctx, cfg.kubeClient, &provider, func() error { - provider.Spec = notiv1beta3.ProviderSpec{ - Type: "azuredevops", - Address: repoUrl, - SecretRef: &meta.LocalObjectReference{ - Name: "azuredevops-token", - }, - } - return nil - }) - require.NoError(t, err) - alert := notiv1beta3.Alert{ - ObjectMeta: metav1.ObjectMeta{ - Name: "azuredevops", - Namespace: name, - }, - } - _, err = controllerutil.CreateOrUpdate(ctx, cfg.kubeClient, &alert, func() error { - alert.Spec = notiv1beta3.AlertSpec{ - ProviderRef: meta.LocalObjectReference{ - Name: provider.Name, - }, - EventSources: []notiv1.CrossNamespaceObjectReference{ - { - Kind: "Kustomization", - Name: name, - Namespace: name, - }, - }, - } - return nil - }) - require.NoError(t, err) - - u, err := giturls.Parse(repoUrl) - require.NoError(t, err) - id := strings.TrimLeft(u.Path, "/") - id = strings.TrimSuffix(id, ".git") - comp := strings.Split(id, "/") - orgUrl := fmt.Sprintf("%s://%s/%v", u.Scheme, u.Host, comp[0]) - project := comp[1] - repoId := comp[3] - - repo, err := extgogit.PlainOpen(c.Path()) - require.NoError(t, err) - - ref, err := repo.Reference(plumbing.NewBranchReferenceName(name), false) - require.NoError(t, err) - - rev := ref.Hash().String() - connection := azuredevops.NewPatConnection(orgUrl, cfg.azdoPat) - client, err := git.NewClient(ctx, connection) - require.NoError(t, err) - getArgs := git.GetStatusesArgs{ - Project: &project, - RepositoryId: &repoId, - CommitId: &rev, - } - require.Eventually(t, func() bool { - statuses, err := client.GetStatuses(ctx, getArgs) - if err != nil { - return false - } - if len(*statuses) != 1 { - return false - } - return true - }, 500*time.Second, 5*time.Second) -} - -func TestEventHubNotification(t *testing.T) { - ctx := context.TODO() - name := "event-hub" - - // Start listening to eventhub with latest offset - hub, err := eventhub.NewHubFromConnectionString(cfg.eventHubSas) - require.NoError(t, err) - c := make(chan string, 10) - handler := func(ctx context.Context, event *eventhub.Event) error { - c <- string(event.Data) - return nil - } - runtimeInfo, err := hub.GetRuntimeInformation(ctx) - require.NoError(t, err) - require.Equal(t, 1, len(runtimeInfo.PartitionIDs)) - listenerHandler, err := hub.Receive(ctx, runtimeInfo.PartitionIDs[0], handler, eventhub.ReceiveWithLatestOffset()) - require.NoError(t, err) - - // Setup Flux resources - repoUrl := cfg.applicationRepository.http - manifest := fmt.Sprintf(` - apiVersion: v1 - kind: ConfigMap - metadata: - name: foobar - namespace: %s - `, name) - - repo, repoDir, err := getRepository(repoUrl, name, true, cfg.azdoPat) - require.NoError(t, err) - err = addFile(repoDir, "configmap.yaml", manifest) - files := make(map[string]io.Reader) - files["configmap.yaml"] = strings.NewReader(manifest) - require.NoError(t, err) - err = commitAndPushAll(repo, files, name) - require.NoError(t, err) - - err = setupNamespace(ctx, cfg.kubeClient, repoUrl, cfg.azdoPat, name) - require.NoError(t, err) - - secret := corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: name, - Namespace: name, - }, - } - _, err = controllerutil.CreateOrUpdate(ctx, cfg.kubeClient, &secret, func() error { - secret.StringData = map[string]string{ - "address": cfg.eventHubSas, - } - return nil - }) - provider := notiv1beta3.Provider{ - ObjectMeta: metav1.ObjectMeta{ - Name: name, - Namespace: name, - }, - } - _, err = controllerutil.CreateOrUpdate(ctx, cfg.kubeClient, &provider, func() error { - provider.Spec = notiv1beta3.ProviderSpec{ - Type: "azureeventhub", - Address: repoUrl, - SecretRef: &meta.LocalObjectReference{ - Name: name, - }, - } - return nil - }) - require.NoError(t, err) - alert := notiv1beta3.Alert{ - ObjectMeta: metav1.ObjectMeta{ - Name: name, - Namespace: name, - }, - } - _, err = controllerutil.CreateOrUpdate(ctx, cfg.kubeClient, &alert, func() error { - alert.Spec = notiv1beta3.AlertSpec{ - ProviderRef: meta.LocalObjectReference{ - Name: provider.Name, - }, - EventSources: []notiv1.CrossNamespaceObjectReference{ - { - Kind: "Kustomization", - Name: name, - Namespace: name, - }, - }, - Summary: "cluster: test-1", - } - return nil - }) - require.NoError(t, err) - - kustomization := &kustomizev1.Kustomization{ObjectMeta: metav1.ObjectMeta{Name: name, Namespace: name}} - require.Eventually(t, func() bool { - _, err := controllerutil.CreateOrUpdate(ctx, cfg.kubeClient, kustomization, func() error { - kustomization.Spec.HealthChecks = []meta.NamespacedObjectKindReference{ - { - APIVersion: "v1", - Kind: "ConfigMap", - Name: "foobar", - Namespace: name, - }, - } - return nil - }) - if err != nil { - return false - } - return true - }, 10*time.Second, 1*time.Second) - - require.Eventually(t, func() bool { - err := verifyGitAndKustomization(ctx, cfg.kubeClient, name, name) - if err != nil { - return false - } - return true - }, 60*time.Second, 5*time.Second) - - // Wait to read even from event hub - require.Eventually(t, func() bool { - select { - case eventJson := <-c: - event := &eventv1.Event{} - err := json.Unmarshal([]byte(eventJson), event) - if err != nil { - t.Logf("the received event type does not match Flux format, error: %v", err) - return false - } - - if event.InvolvedObject.Kind == kustomizev1.KustomizationKind && - strings.Contains(event.Message, "Health check passed") { - return true - } - - t.Logf("event received from '%s/%s': %s", - event.InvolvedObject.Kind, event.InvolvedObject.Name, event.Message) - return false - default: - return false - } - }, 60*time.Second, 1*time.Second) - err = listenerHandler.Close(ctx) - require.NoError(t, err) - err = hub.Close(ctx) - require.NoError(t, err) -} - -// TODO: Enable when source-controller supports Helm charts from OCI sources. -/*func TestACRHelmRelease(t *testing.T) { - ctx := context.TODO() - - // Create namespace for test - namespace := corev1.Namespace{ - ObjectMeta: metav1.ObjectMeta{ - Name: "acr-helm-release", - }, - } - err := kubeClient.Create(ctx, &namespace) - require.NoError(t, err) - defer func() { - kubeClient.Delete(ctx, &namespace) - require.NoError(t, err) - }() - - // Copy ACR credentials to new namespace - acrNn := types.NamespacedName{ - Name: "acr-helm", - Namespace: "flux-system", - } - acrSecret := corev1.Secret{} - err = kubeClient.Get(ctx, acrNn, &acrSecret) - require.NoError(t, err) - acrSecret.ObjectMeta = metav1.ObjectMeta{ - Name: acrSecret.Name, - Namespace: namespace.Name, - } - err = kubeClient.Create(ctx, &acrSecret) - require.NoError(t, err) - - // Create HelmRepository and wait for it to sync - helmRepository := sourcev1.HelmRepository{ - ObjectMeta: metav1.ObjectMeta{ - Name: "acr", - Namespace: namespace.Name, - }, - Spec: sourcev1.HelmRepositorySpec{ - URL: "https://acrappsoarfish.azurecr.io/helm/podinfo", - Interval: metav1.Duration{ - Duration: 5 * time.Minute, - }, - SecretRef: &meta.LocalObjectReference{ - Name: acrSecret.Name, - }, - PassCredentials: true, - }, - } - err = kubeClient.Create(ctx, &helmRepository) - require.NoError(t, err) -}*/ diff --git a/tests/azure/go.mod b/tests/azure/go.mod deleted file mode 100644 index 50a1be48..00000000 --- a/tests/azure/go.mod +++ /dev/null @@ -1,123 +0,0 @@ -module github.com/fluxcd/flux2/tests/azure - -go 1.20 - -// Fix CVE-2022-28948 -replace gopkg.in/yaml.v3 => gopkg.in/yaml.v3 v3.0.1 - -require ( - github.com/Azure/azure-event-hubs-go/v3 v3.6.1 - github.com/chainguard-dev/git-urls v1.0.2 - github.com/fluxcd/helm-controller/api v0.37.4 - github.com/fluxcd/image-automation-controller/api v0.37.1 - github.com/fluxcd/image-reflector-controller/api v0.31.2 - github.com/fluxcd/kustomize-controller/api v1.2.2 - github.com/fluxcd/notification-controller/api v1.2.4 - github.com/fluxcd/pkg/apis/event v0.7.0 - github.com/fluxcd/pkg/apis/meta v1.3.0 - github.com/fluxcd/pkg/git v0.17.0 - github.com/fluxcd/pkg/git/gogit v0.17.0 - github.com/fluxcd/source-controller/api v1.2.4 - github.com/go-git/go-git/v5 v5.11.0 - github.com/hashicorp/hc-install v0.5.2 - github.com/hashicorp/terraform-exec v0.18.1 - github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 - github.com/stretchr/testify v1.8.4 - go.uber.org/multierr v1.11.0 - k8s.io/api v0.28.6 - k8s.io/apimachinery v0.28.6 - k8s.io/client-go v0.28.6 - k8s.io/klog/v2 v2.110.1 - sigs.k8s.io/controller-runtime v0.16.3 -) - -require ( - dario.cat/mergo v1.0.0 // indirect - github.com/Azure/azure-amqp-common-go/v4 v4.2.0 // indirect - github.com/Azure/azure-sdk-for-go v65.0.0+incompatible // indirect - github.com/Azure/go-amqp v1.0.0 // indirect - github.com/Azure/go-autorest v14.2.0+incompatible // indirect - github.com/Azure/go-autorest/autorest v0.11.28 // indirect - github.com/Azure/go-autorest/autorest/adal v0.9.21 // indirect - github.com/Azure/go-autorest/autorest/date v0.3.0 // indirect - github.com/Azure/go-autorest/autorest/to v0.4.0 // indirect - github.com/Azure/go-autorest/autorest/validation v0.3.1 // indirect - github.com/Azure/go-autorest/logger v0.2.1 // indirect - github.com/Azure/go-autorest/tracing v0.6.0 // indirect - github.com/Masterminds/semver/v3 v3.2.1 // indirect - github.com/Microsoft/go-winio v0.6.1 // indirect - github.com/ProtonMail/go-crypto v1.0.0 // indirect - github.com/apparentlymart/go-textseg/v13 v13.0.0 // indirect - github.com/cloudflare/circl v1.3.7 // indirect - github.com/cyphar/filepath-securejoin v0.2.4 // indirect - github.com/davecgh/go-spew v1.1.1 // indirect - github.com/devigned/tab v0.1.1 // indirect - github.com/emicklei/go-restful/v3 v3.11.0 // indirect - github.com/emirpasic/gods v1.18.1 // indirect - github.com/evanphx/json-patch/v5 v5.7.0 // indirect - github.com/fluxcd/pkg/apis/acl v0.1.0 // indirect - github.com/fluxcd/pkg/apis/kustomize v1.3.0 // indirect - github.com/fluxcd/pkg/ssh v0.11.0 // indirect - github.com/fluxcd/pkg/version v0.2.2 // indirect - github.com/fsnotify/fsnotify v1.7.0 // indirect - github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect - github.com/go-git/go-billy/v5 v5.5.0 // indirect - github.com/go-logr/logr v1.3.0 // indirect - github.com/go-logr/zapr v1.3.0 // indirect - github.com/go-openapi/jsonpointer v0.20.0 // indirect - github.com/go-openapi/jsonreference v0.20.2 // indirect - github.com/go-openapi/swag v0.22.4 // indirect - github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang-jwt/jwt/v4 v4.5.0 // indirect - github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect - github.com/golang/protobuf v1.5.3 // indirect - github.com/google/gnostic-models v0.6.8 // indirect - github.com/google/gofuzz v1.2.0 // indirect - github.com/google/uuid v1.5.0 // indirect - github.com/hashicorp/errwrap v1.0.0 // indirect - github.com/hashicorp/go-multierror v1.1.1 // indirect - github.com/hashicorp/go-version v1.6.0 // indirect - github.com/hashicorp/terraform-json v0.15.0 // indirect - github.com/imdario/mergo v0.3.16 // indirect - github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect - github.com/josharian/intern v1.0.0 // indirect - github.com/jpillora/backoff v1.0.0 // indirect - github.com/json-iterator/go v1.1.12 // indirect - github.com/kevinburke/ssh_config v1.2.0 // indirect - github.com/mailru/easyjson v0.7.7 // indirect - github.com/mitchellh/mapstructure v1.5.0 // indirect - github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect - github.com/modern-go/reflect2 v1.0.2 // indirect - github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect - github.com/pjbgf/sha1cd v0.3.0 // indirect - github.com/pkg/errors v0.9.1 // indirect - github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/prometheus/client_golang v1.18.0 // indirect - github.com/sergi/go-diff v1.3.1 // indirect - github.com/skeema/knownhosts v1.2.1 // indirect - github.com/xanzy/ssh-agent v0.3.3 // indirect - github.com/zclconf/go-cty v1.13.0 // indirect - go.uber.org/zap v1.26.0 // indirect - golang.org/x/crypto v0.18.0 // indirect - golang.org/x/exp v0.0.0-20231206192017-f3f8817b8deb // indirect - golang.org/x/mod v0.14.0 // indirect - golang.org/x/net v0.20.0 // indirect - golang.org/x/oauth2 v0.16.0 // indirect - golang.org/x/sys v0.16.0 // indirect - golang.org/x/term v0.16.0 // indirect - golang.org/x/text v0.14.0 // indirect - golang.org/x/time v0.5.0 // indirect - golang.org/x/tools v0.17.0 // indirect - google.golang.org/appengine v1.6.8 // indirect - google.golang.org/protobuf v1.31.0 // indirect - gopkg.in/inf.v0 v0.9.1 // indirect - gopkg.in/warnings.v0 v0.1.2 // indirect - gopkg.in/yaml.v2 v2.4.0 // indirect - gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/apiextensions-apiserver v0.28.6 // indirect - k8s.io/kube-openapi v0.0.0-20231206194836-bf4651e18aa8 // indirect - k8s.io/utils v0.0.0-20231127182322-b307cd553661 // indirect - sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect - sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect - sigs.k8s.io/yaml v1.4.0 // indirect -) diff --git a/tests/azure/go.sum b/tests/azure/go.sum deleted file mode 100644 index 244d405d..00000000 --- a/tests/azure/go.sum +++ /dev/null @@ -1,393 +0,0 @@ -dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= -dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= -github.com/Azure/azure-amqp-common-go/v4 v4.2.0 h1:q/jLx1KJ8xeI8XGfkOWMN9XrXzAfVTkyvCxPvHCjd2I= -github.com/Azure/azure-amqp-common-go/v4 v4.2.0/go.mod h1:GD3m/WPPma+621UaU6KNjKEo5Hl09z86viKwQjTpV0Q= -github.com/Azure/azure-event-hubs-go/v3 v3.6.1 h1:vSiMmn3tOwgiLyfnmhT5K6Of/3QWRLaaNZPI0hFvZyU= -github.com/Azure/azure-event-hubs-go/v3 v3.6.1/go.mod h1:i2NByb9Pr2na7y8wi/XefEVKkuA2CDUjCNoWQJtTsGo= -github.com/Azure/azure-sdk-for-go v65.0.0+incompatible h1:HzKLt3kIwMm4KeJYTdx9EbjRYTySD/t8i1Ee/W5EGXw= -github.com/Azure/azure-sdk-for-go v65.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/go-amqp v1.0.0 h1:QfCugi1M+4F2JDTRgVnRw7PYXLXZ9hmqk3+9+oJh3OA= -github.com/Azure/go-amqp v1.0.0/go.mod h1:+bg0x3ce5+Q3ahCEXnCsGG3ETpDQe3MEVnOuT2ywPwc= -github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs= -github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= -github.com/Azure/go-autorest/autorest v0.11.28 h1:ndAExarwr5Y+GaHE6VCaY1kyS/HwwGGyuimVhWsHOEM= -github.com/Azure/go-autorest/autorest v0.11.28/go.mod h1:MrkzG3Y3AH668QyF9KRk5neJnGgmhQ6krbhR8Q5eMvA= -github.com/Azure/go-autorest/autorest/adal v0.9.18/go.mod h1:XVVeme+LZwABT8K5Lc3hA4nAe8LDBVle26gTrguhhPQ= -github.com/Azure/go-autorest/autorest/adal v0.9.21 h1:jjQnVFXPfekaqb8vIsv2G1lxshoW+oGv4MDlhRtnYZk= -github.com/Azure/go-autorest/autorest/adal v0.9.21/go.mod h1:zua7mBUaCc5YnSLKYgGJR/w5ePdMDA6H56upLsHzA9U= -github.com/Azure/go-autorest/autorest/azure/auth v0.4.2 h1:iM6UAvjR97ZIeR93qTcwpKNMpV+/FTWjwEbuPD495Tk= -github.com/Azure/go-autorest/autorest/azure/cli v0.3.1 h1:LXl088ZQlP0SBppGFsRZonW6hSvwgL5gRByMbvUbx8U= -github.com/Azure/go-autorest/autorest/date v0.3.0 h1:7gUk1U5M/CQbp9WoqinNzJar+8KY+LPI6wiWrP/myHw= -github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74= -github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= -github.com/Azure/go-autorest/autorest/mocks v0.4.2 h1:PGN4EDXnuQbojHbU0UWoNvmu9AGVwYHG9/fkDYhtAfw= -github.com/Azure/go-autorest/autorest/mocks v0.4.2/go.mod h1:Vy7OitM9Kei0i1Oj+LvyAWMXJHeKH1MVlzFugfVrmyU= -github.com/Azure/go-autorest/autorest/to v0.4.0 h1:oXVqrxakqqV1UZdSazDOPOLvOIz+XA683u8EctwboHk= -github.com/Azure/go-autorest/autorest/to v0.4.0/go.mod h1:fE8iZBn7LQR7zH/9XU2NcPR4o9jEImooCeWJcYV/zLE= -github.com/Azure/go-autorest/autorest/validation v0.3.1 h1:AgyqjAd94fwNAoTjl/WQXg4VvFeRFpO+UhNyRXqF1ac= -github.com/Azure/go-autorest/autorest/validation v0.3.1/go.mod h1:yhLgjC0Wda5DYXl6JAsWyUe4KVNffhoDhG0zVzUMo3E= -github.com/Azure/go-autorest/logger v0.2.1 h1:IG7i4p/mDa2Ce4TRyAO8IHnVhAVF3RFU+ZtXWSmf4Tg= -github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= -github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo= -github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= -github.com/Masterminds/semver/v3 v3.2.1 h1:RN9w6+7QoMeJVGyfmbcgs28Br8cvmnucEXnY0rYXWg0= -github.com/Masterminds/semver/v3 v3.2.1/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= -github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= -github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= -github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= -github.com/ProtonMail/go-crypto v1.0.0 h1:LRuvITjQWX+WIfr930YHG2HNfjR1uOfyf5vE0kC2U78= -github.com/ProtonMail/go-crypto v1.0.0/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= -github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= -github.com/apparentlymart/go-textseg v1.0.0/go.mod h1:z96Txxhf3xSFMPmb5X/1W05FF/Nj9VFpLOpjS5yuumk= -github.com/apparentlymart/go-textseg/v13 v13.0.0 h1:Y+KvPE1NYz0xl601PVImeQfFyEy6iT90AvPUL1NNfNw= -github.com/apparentlymart/go-textseg/v13 v13.0.0/go.mod h1:ZK2fH7c4NqDTLtiYLvIkEghdlcqw7yxLeM89kiTRPUo= -github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= -github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= -github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= -github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= -github.com/chainguard-dev/git-urls v1.0.2 h1:pSpT7ifrpc5X55n4aTTm7FFUE+ZQHKiqpiwNkJrVcKQ= -github.com/chainguard-dev/git-urls v1.0.2/go.mod h1:rbGgj10OS7UgZlbzdUQIQpT0k/D4+An04HJY7Ol+Y/o= -github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= -github.com/cloudflare/circl v1.3.7 h1:qlCDlTPz2n9fu58M0Nh1J/JzcFpfgkFHHX3O35r5vcU= -github.com/cloudflare/circl v1.3.7/go.mod h1:sRTcRWXGLrKw6yIGJ+l7amYJFfAXbZG0kBSc8r4zxgA= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg= -github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/devigned/tab v0.1.1 h1:3mD6Kb1mUOYeLpJvTVSDwSg5ZsfSxfvxGRTxRsJsITA= -github.com/devigned/tab v0.1.1/go.mod h1:XG9mPq0dFghrYvoBF3xdRrJzSTX1b7IQrvaL9mzjeJY= -github.com/dimchansky/utfbom v1.1.0 h1:FcM3g+nofKgUteL8dm/UpdRXNC9KmADgTpLKsu0TRo4= -github.com/elazarl/goproxy v0.0.0-20231117061959-7cc037d33fb5 h1:m62nsMU279qRD9PQSWD1l66kmkXzuYcnVJqL4XLeV2M= -github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g= -github.com/emicklei/go-restful/v3 v3.11.0/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/evanphx/json-patch/v5 v5.7.0 h1:nJqP7uwL84RJInrohHfW0Fx3awjbm8qZeFv0nW9SYGc= -github.com/evanphx/json-patch/v5 v5.7.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ= -github.com/fluxcd/gitkit v0.6.0 h1:iNg5LTx6ePo+Pl0ZwqHTAkhbUHxGVSY3YCxCdw7VIFg= -github.com/fluxcd/helm-controller/api v0.37.4 h1:rkBMqYXexyf1s5BS8QpxGi691DsCi+yugIFCM5fNKLU= -github.com/fluxcd/helm-controller/api v0.37.4/go.mod h1:KFdP5Lbrc4Vv+Jt4xRj6UUo3qiwdBqBPl1xiiAnBe9c= -github.com/fluxcd/image-automation-controller/api v0.37.1 h1:zi1VfPoGuHsNtyTpueKbr4b/c+Ms7HjFocTAmixmYno= -github.com/fluxcd/image-automation-controller/api v0.37.1/go.mod h1:7p0woxB275YzhdctzbxVMck0/hZt45bm0K12A0ABldo= -github.com/fluxcd/image-reflector-controller/api v0.31.2 h1:s16ewwfuLBYuh8hENuVgU8SYsSNxRaA4f+AD60/+les= -github.com/fluxcd/image-reflector-controller/api v0.31.2/go.mod h1:tV7g+KXQL3W8w5+fRJU7ubVGc4QAfx1C7XI5qrQvA3U= -github.com/fluxcd/kustomize-controller/api v1.2.2 h1:LXRa2181usLsDkAJ86i/CnvCyPwhLcFUw9jBnXxTFJ4= -github.com/fluxcd/kustomize-controller/api v1.2.2/go.mod h1:dfAaPQuuoWfExyWaeO7Kj2ZtfKQ4nDcJrt7AeAFlLZs= -github.com/fluxcd/notification-controller/api v1.2.4 h1:H/C8XW5boncf8rzJjSe/MCr186Hgvw+arPat9XOaRlw= -github.com/fluxcd/notification-controller/api v1.2.4/go.mod h1:LeHtKKTI3ew+FXY0oYtYqM68UYOArfBa/cy4pxAzN4M= -github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= -github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= -github.com/fluxcd/pkg/apis/event v0.7.0 h1:QN/gz9i5kZ3GlfTOE6SCjjnSXrSPUU75MCVRwN8U+qo= -github.com/fluxcd/pkg/apis/event v0.7.0/go.mod h1:zdqe8SVXjFQ/Nfuk51c2SJe0NkyNwYOxSFtN6SmikVs= -github.com/fluxcd/pkg/apis/kustomize v1.3.0 h1:qvB46CfaOWcL1SyR2RiVWN/j7/035D0OtB1ltLN7rgI= -github.com/fluxcd/pkg/apis/kustomize v1.3.0/go.mod h1:PCXf5kktTzNav0aH2Ns3jsowqwmA9xTcsrEOoPzx/K8= -github.com/fluxcd/pkg/apis/meta v1.3.0 h1:KxeEc6olmSZvQ5pBONPE4IKxyoWQbqTJF1X6K5nIXpU= -github.com/fluxcd/pkg/apis/meta v1.3.0/go.mod h1:3Ui8xFkoU4sYehqmscjpq7NjqH2YN1A2iX2okbO3/yA= -github.com/fluxcd/pkg/git v0.17.0 h1:eHL8IazeX2HXwXzT6zLdzGaX3H37n/ipkdd1+byyzUM= -github.com/fluxcd/pkg/git v0.17.0/go.mod h1:lBeHCTtVt9py9mMGj5sKs4+aFpMWGjH73gx5i818i6o= -github.com/fluxcd/pkg/git/gogit v0.17.0 h1:X8C+q/Nm/MjBKAoqw9NPpnJh0B3IxVLtqPgH+wT9NEg= -github.com/fluxcd/pkg/git/gogit v0.17.0/go.mod h1:qyRSCQy41wG0FwUwKQtfSnwqkrJg5XB4UdMvrHjIcFY= -github.com/fluxcd/pkg/gittestserver v0.10.0 h1:joqfczQNtguZFGxTuRL535ymDW/9clA1jBWa3d8B6WU= -github.com/fluxcd/pkg/ssh v0.11.0 h1:7WDDrcB0cNimzZjrpkzYBrizkrUgyM4Zr2cd9z9aqpU= -github.com/fluxcd/pkg/ssh v0.11.0/go.mod h1:K8YgH8KM0GV5DWuRErX3iKgpoHlYh08SBK+U5Q0teJc= -github.com/fluxcd/pkg/version v0.2.2 h1:ZpVXECeLA5hIQMft11iLp6gN3cKcz6UNuVTQPw/bRdI= -github.com/fluxcd/pkg/version v0.2.2/go.mod h1:NGnh/no8S6PyfCDxRFrPY3T5BUnqP48MxfxNRU0z8C0= -github.com/fluxcd/source-controller/api v1.2.4 h1:XjKTWhSSeLGsogWnTcLl5sUnyMlC5TKDbbBgP9SyJ5c= -github.com/fluxcd/source-controller/api v1.2.4/go.mod h1:j3QSHpIPBP5sjaGIkVtsgWCx8JcOmcsutRmdJmRMOZg= -github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= -github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= -github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= -github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY= -github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= -github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= -github.com/go-git/go-billy/v5 v5.5.0 h1:yEY4yhzCDuMGSv83oGxiBotRzhwhNr8VZyphhiu+mTU= -github.com/go-git/go-billy/v5 v5.5.0/go.mod h1:hmexnoNsr2SJU1Ju67OaNz5ASJY3+sHgFRpCtpDCKow= -github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 h1:eMje31YglSBqCdIqdhKBW8lokaMrL3uTkpGYlE2OOT4= -github.com/go-git/go-git/v5 v5.11.0 h1:XIZc1p+8YzypNr34itUfSvYJcv+eYdTnTvOZ2vD3cA4= -github.com/go-git/go-git/v5 v5.11.0/go.mod h1:6GFcX2P3NM7FPBfpePbpLd21XxsgdAt+lKqXmCUiUCY= -github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY= -github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= -github.com/go-logr/zapr v1.3.0 h1:XGdV8XW8zdwFiwOA2Dryh1gj2KRQyOOoNmBy4EplIcQ= -github.com/go-logr/zapr v1.3.0/go.mod h1:YKepepNBd1u/oyhd/yQmtjVXmm9uML4IXUgMOwR8/Gg= -github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= -github.com/go-openapi/jsonpointer v0.20.0 h1:ESKJdU9ASRfaPNOPRx12IUyA1vn3R9GiE3KYD14BXdQ= -github.com/go-openapi/jsonpointer v0.20.0/go.mod h1:6PGzBjjIIumbLYysB73Klnms1mwnU4G3YHOECG3CedA= -github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= -github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= -github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= -github.com/go-openapi/swag v0.22.4 h1:QLMzNJnMGPRNDCbySlcj1x01tzU8/9LTTL9hZZZogBU= -github.com/go-openapi/swag v0.22.4/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= -github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= -github.com/gofrs/uuid v4.4.0+incompatible h1:3qXRTX8/NbyulANqlc0lchS1gqAVxRgsuW1YrTJupqA= -github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= -github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= -github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= -github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= -github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= -github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= -github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec= -github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.5.0 h1:1p67kYwdtXjb0gL0BPiP1Av9wiZPo5A8z2cWkTZ+eyU= -github.com/google/uuid v1.5.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= -github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= -github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= -github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= -github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= -github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/hc-install v0.5.2 h1:SfwMFnEXVVirpwkDuSF5kymUOhrUxrTq3udEseZdOD0= -github.com/hashicorp/hc-install v0.5.2/go.mod h1:9QISwe6newMWIfEiXpzuu1k9HAGtQYgnSH8H9T8wmoI= -github.com/hashicorp/terraform-exec v0.18.1 h1:LAbfDvNQU1l0NOQlTuudjczVhHj061fNX5H8XZxHlH4= -github.com/hashicorp/terraform-exec v0.18.1/go.mod h1:58wg4IeuAJ6LVsLUeD2DWZZoc/bYi6dzhLHzxM41980= -github.com/hashicorp/terraform-json v0.15.0 h1:/gIyNtR6SFw6h5yzlbDbACyGvIhKtQi8mTsbkNd79lE= -github.com/hashicorp/terraform-json v0.15.0/go.mod h1:+L1RNzjDU5leLFZkHTFTbJXaoqUC6TqXlFgDoOXrtvk= -github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4= -github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= -github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= -github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= -github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc= -github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= -github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= -github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA= -github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= -github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= -github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= -github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= -github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= -github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= -github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= -github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= -github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= -github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg= -github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5 h1:YH424zrwLTlyHSH/GzLMJeu5zhYVZSx5RQxGKm1h96s= -github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5/go.mod h1:PoGiBqKSQK1vIfQ+yVaFcGjDySHvym6FM1cNYnwzbrY= -github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= -github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= -github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= -github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= -github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= -github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/onsi/ginkgo/v2 v2.11.0 h1:WgqUCUt/lT6yXoQ8Wef0fsNn5cAuMK7+KT9UFRz2tcU= -github.com/onsi/gomega v1.31.1 h1:KYppCUK+bUgAZwHOu7EXVBKyQA6ILvOESHkn/tgoqvo= -github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4= -github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_golang v1.18.0 h1:HzFfmkOzH5Q8L8G+kSJKUx5dtG87sewO+FoDDqP5Tbk= -github.com/prometheus/client_golang v1.18.0/go.mod h1:T+GXkCk5wSJyOqMIzVgvvjFDlkOQntgjkJWKrN5txjA= -github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw= -github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM= -github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= -github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= -github.com/sebdah/goldie v1.0.0/go.mod h1:jXP4hmWywNEwZzhMuv2ccnqTSFpuq8iyQhtQdkkZBH4= -github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= -github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= -github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= -github.com/skeema/knownhosts v1.2.1 h1:SHWdIUa82uGZz+F+47k8SY4QhhI291cXCpopT1lK2AQ= -github.com/skeema/knownhosts v1.2.1/go.mod h1:xYbVRSPxqBZFrdmDyMmsOs+uX1UZC3nTN3ThzgDxUwo= -github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= -github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/vmihailenco/msgpack v3.3.3+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk= -github.com/vmihailenco/msgpack/v4 v4.3.12/go.mod h1:gborTTJjAo/GWTqqRjrLCn9pgNN+NXzzngzBKDPIqw4= -github.com/vmihailenco/tagparser v0.1.1/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= -github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= -github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -github.com/zclconf/go-cty v1.2.0/go.mod h1:hOPWgoHbaTUnI5k4D2ld+GRpFJSCe6bCM7m1q/N4PQ8= -github.com/zclconf/go-cty v1.10.0/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uUAzyuvAk= -github.com/zclconf/go-cty v1.13.0 h1:It5dfKTTZHe9aeppbNOda3mN7Ag7sg6QkBNm6TkyFa0= -github.com/zclconf/go-cty v1.13.0/go.mod h1:YKQzy/7pZ7iq2jNFzy5go57xdxdWoLLpaEp4u238AE0= -github.com/zclconf/go-cty-debug v0.0.0-20191215020915-b22d67c1ba0b/go.mod h1:ZRKQfBXbGkpdV6QMzT3rU1kSTAnfu1dO8dPKjYprgj8= -go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= -go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= -go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo= -go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= -golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.18.0 h1:PGVlW0xEltQnzFZ55hkuX5+KLyrMYhHld1YHO4AKcdc= -golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= -golang.org/x/exp v0.0.0-20231206192017-f3f8817b8deb h1:c0vyKkb6yr3KR7jEfJaOSv4lG7xPkbN6r52aJz1d8a8= -golang.org/x/exp v0.0.0-20231206192017-f3f8817b8deb/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI= -golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.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.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= -golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/net v0.0.0-20180811021610-c39426892332/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= -golang.org/x/net v0.6.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.20.0 h1:aCL9BSgETF1k+blQaYUBx9hJ9LOGP3gAVemcZlf1Kpo= -golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= -golang.org/x/oauth2 v0.16.0 h1:aDkGMBSYxElaoP81NpoUoz2oo2R2wHdZpGToUxfyQrQ= -golang.org/x/oauth2 v0.16.0/go.mod h1:hqZ+0LWXsiVoZpeld6jVt06P3adbS2Uu911W1SsJv2o= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU= -golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -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= -golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= -golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/term v0.16.0 h1:m+B6fahuftsE9qjo0VWp2FW0mB3MTJvR0BaMQrq0pmE= -golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= -golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= -golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= -golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -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.17.0 h1:FvmRgNOcs3kOa+T20R1uhfP9F6HgG2mfxDv1vrx1Htc= -golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= -google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= -google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= -gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= -gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -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.28.6 h1:yy6u9CuIhmg55YvF/BavPBBXB+5QicB64njJXxVnzLo= -k8s.io/api v0.28.6/go.mod h1:AM6Ys6g9MY3dl/XNaNfg/GePI0FT7WBGu8efU/lirAo= -k8s.io/apiextensions-apiserver v0.28.6 h1:myB3iG/3v3jqCg28JDbOefu4sH2/erNEXgytRzJKBOo= -k8s.io/apiextensions-apiserver v0.28.6/go.mod h1:qlp6xRKBgyRhe5AYc81TQpLx4kLNK8/sGQUOwMkVjRk= -k8s.io/apimachinery v0.28.6 h1:RsTeR4z6S07srPg6XYrwXpTJVMXsjPXn0ODakMytSW0= -k8s.io/apimachinery v0.28.6/go.mod h1:QFNX/kCl/EMT2WTSz8k4WLCv2XnkOLMaL8GAVRMdpsA= -k8s.io/client-go v0.28.6 h1:Gge6ziyIdafRchfoBKcpaARuz7jfrK1R1azuwORIsQI= -k8s.io/client-go v0.28.6/go.mod h1:+nu0Yp21Oeo/cBCsprNVXB2BfJTV51lFfe5tXl2rUL8= -k8s.io/klog/v2 v2.110.1 h1:U/Af64HJf7FcwMcXyKm2RPM22WZzyR7OSpYj5tg3cL0= -k8s.io/klog/v2 v2.110.1/go.mod h1:YGtd1984u+GgbuZ7e08/yBuAfKLSO0+uR1Fhi6ExXjo= -k8s.io/kube-openapi v0.0.0-20231206194836-bf4651e18aa8 h1:vzKzxN5uyJZLY8HL1/OovW7BJefnsBIWt8T7Gjh2boQ= -k8s.io/kube-openapi v0.0.0-20231206194836-bf4651e18aa8/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA= -k8s.io/utils v0.0.0-20231127182322-b307cd553661 h1:FepOBzJ0GXm8t0su67ln2wAZjbQ6RxQGZDnzuLcrUTI= -k8s.io/utils v0.0.0-20231127182322-b307cd553661/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= -sigs.k8s.io/controller-runtime v0.16.3 h1:2TuvuokmfXvDUamSx1SuAOO3eTyye+47mJCigwG62c4= -sigs.k8s.io/controller-runtime v0.16.3/go.mod h1:j7bialYoSn142nv9sCOJmQgDXQXxnroFU4VnX/brVJ0= -sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= -sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= -sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4= -sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= -sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= -sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= diff --git a/tests/azure/terraform/aks/.terraform.lock.hcl b/tests/azure/terraform/aks/.terraform.lock.hcl deleted file mode 100644 index cc3c7846..00000000 --- a/tests/azure/terraform/aks/.terraform.lock.hcl +++ /dev/null @@ -1,81 +0,0 @@ -# This file is maintained automatically by "terraform init". -# Manual edits may be lost in future updates. - -provider "registry.terraform.io/hashicorp/azuread" { - version = "2.28.0" - constraints = "2.28.0" - hashes = [ - "h1:22zcPLrP6T0FAGzhkx44Oc3SreGpzttng34JSYhoknE=", - "zh:0e8b008417d74f7d7f931effe48c0719f20789440c9c5932c2b1cf4110348f41", - "zh:1c3e89cf19118fc07d7b04257251fc9897e722c16e0a0df7b07fcd261f8c12e7", - "zh:2a2e4408fc1dc902553ff6a5751924c5e9a59df30f0668b55aa6c07264537c03", - "zh:2ab09b735888a7402bdd8e74f75a053ac102e0a01b876b0608a0c240dff57b2e", - "zh:2ac1f45bb1597726ff6822e1f9a7bc7227179c10b0b51533849b44ab278a05ed", - "zh:601a7821c7fbef870a1a2165a684e4fb4f4c84f6b85e0ce51ef7783a581cf594", - "zh:7f8e4dd03a3d4259e06b498ed0b04c6911aa99cf5f01018e2092899cd135c6e5", - "zh:8408143a24baaf4ad527aeecfaf11dfcd0fb6f25648958f2c94464717f776206", - "zh:bc836c1389f7b01537eb71ec709ea9d1cb4180814b70992ce3004356ce28d173", - "zh:d4b5571c96c2bafdf79494265f508dbe569f6fb16a5ddc41f22da22e9be029e9", - "zh:f1c2a1a13fe3725ba84b57a418adb1bd8c93db09dd880658a468cbd4832f9224", - "zh:f39b090d45674395fecb39add1260dd4565661e38eb40c4017c3fd84c8af1717", - ] -} - -provider "registry.terraform.io/hashicorp/azurerm" { - version = "3.20.0" - constraints = "3.20.0" - hashes = [ - "h1:heH/4bYgajEFQ+fwSV9Zduvpyb7eTCQUv+gl201EFg8=", - "zh:0d534bb2fed67b5b58d3adb2b0be7a9986f62b34f40eae450dafc9454fb54db8", - "zh:19f6d5f196a35500e0f1ae9d9baee44f49b90858524338a7b8aaec06d3e3a047", - "zh:1d042648d2eaffde8858a8006b944374599c5e8c2f834ae74b97adedd1468142", - "zh:278ebac38cf3c1e6df4bc5de00e931bfc04298607f428aa84a932bbf26dee421", - "zh:48f29b802e2de7e6dd2452a012c633686fce5d7ad3eadb490a7b8c0967a9ebfa", - "zh:731bf2e97c4a519723682beb2e85e065bf0bf53b2f50e2ff7b15b39ea74e37ff", - "zh:7c8187ebca19ca8f6ef82d3d79a418ccfa6574bb99e63cc930fa46ff938a7921", - "zh:82fdb2052601f6fa925195e77506fb609ce8bb4a6f6e94cf6a5058252ef570d4", - "zh:995ca23bb3765a16c6b3138b468d920acff5742b22492324c836579e3344ea40", - "zh:a970131232ad41203382f6fa3f0014a22767cbfe28cd7562346184ea6e678d63", - "zh:bf5036675a7f0b8691fe393e2782a76c7943ba17eec7255e16a31c7547436a48", - "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", - ] -} - -provider "registry.terraform.io/hashicorp/random" { - version = "3.4.3" - hashes = [ - "h1:xZGZf18JjMS06pFa4NErzANI98qi59SEcBsOcS2P2yQ=", - "zh:41c53ba47085d8261590990f8633c8906696fa0a3c4b384ff6a7ecbf84339752", - "zh:59d98081c4475f2ad77d881c4412c5129c56214892f490adf11c7e7a5a47de9b", - "zh:686ad1ee40b812b9e016317e7f34c0d63ef837e084dea4a1f578f64a6314ad53", - "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", - "zh:84103eae7251384c0d995f5a257c72b0096605048f757b749b7b62107a5dccb3", - "zh:8ee974b110adb78c7cd18aae82b2729e5124d8f115d484215fd5199451053de5", - "zh:9dd4561e3c847e45de603f17fa0c01ae14cae8c4b7b4e6423c9ef3904b308dda", - "zh:bb07bb3c2c0296beba0beec629ebc6474c70732387477a65966483b5efabdbc6", - "zh:e891339e96c9e5a888727b45b2e1bb3fcbdfe0fd7c5b4396e4695459b38c8cb1", - "zh:ea4739860c24dfeaac6c100b2a2e357106a89d18751f7693f3c31ecf6a996f8d", - "zh:f0c76ac303fd0ab59146c39bc121c5d7d86f878e9a69294e29444d4c653786f8", - "zh:f143a9a5af42b38fed328a161279906759ff39ac428ebcfe55606e05e1518b93", - ] -} - -provider "registry.terraform.io/microsoft/azuredevops" { - version = "0.2.2" - constraints = "0.2.2" - hashes = [ - "h1:oKfPQ5Tp9WNeacY08gMifP3G9I//o3LW6qTLsveJwi0=", - "zh:016142d26ec662949ba95b6c84672b243b54bbdca04cf8714fe0b4318783a72d", - "zh:0337b3c4e023bb56b23a5d2d9abe917f197eed378fa69803e9d0b11a36211e15", - "zh:240c9636660292eeb99bd892602eafe2e5c22b469b082de6963e31dab9e0092e", - "zh:439151590a489a7c0cde50ee701fdbf254e67bdbeaa2acd2a99d005c4051d518", - "zh:6086f5eab87662678eef7bc83041eab5667e92189eb3089b966aeb2cdb58d299", - "zh:94a64223905bb3cef2c38e163ae56ef841422e6511a79f8e60272edd7f8fc67f", - "zh:9d9545445607c5ba6482da0137464d5de4c3459ae1671e6ff94e337e5943c0eb", - "zh:a53bfdea73985ed31acbadd200b295745662a4a54e8c37f050faf71dab7deb8b", - "zh:aa6943db7093b2556fcc2ee5b8b5a8a48e625ded2b063183fbc5a52c94d133f2", - "zh:af4729e8fe8ec255e4c4ca0e6dd4cf43d855bfe4c45b2aa6e47d8c35be55813d", - "zh:bdf8752a6cd12ba3a33597bf7519825000a498b655c72be8c8df504bb9f70fe5", - "zh:c760fa7bc5c62d56c54ef41b4b03b0ae391149f46f36c8c8a55d2511e7f8e599", - ] -} diff --git a/tests/azure/terraform/aks/aks.tf b/tests/azure/terraform/aks/aks.tf deleted file mode 100644 index aab1a0cf..00000000 --- a/tests/azure/terraform/aks/aks.tf +++ /dev/null @@ -1,35 +0,0 @@ -resource "azurerm_kubernetes_cluster" "this" { - name = "aks-${local.name_suffix}" - location = azurerm_resource_group.this.location - resource_group_name = azurerm_resource_group.this.name - - dns_prefix = "aks${local.name_suffix}" - - default_node_pool { - name = "default" - node_count = 2 - vm_size = "Standard_B2s" - os_disk_size_gb = 30 - } - - identity { - type = "SystemAssigned" - } - - role_based_access_control_enabled = true - - network_profile { - network_plugin = "kubenet" - network_policy = "calico" - } - - tags = { - environment = "e2e" - } -} - -resource "azurerm_role_assignment" "aks_acr_pull" { - scope = data.azurerm_container_registry.shared.id - role_definition_name = "AcrPull" - principal_id = azurerm_kubernetes_cluster.this.kubelet_identity[0].object_id -} diff --git a/tests/azure/terraform/aks/azuredevops.tf b/tests/azure/terraform/aks/azuredevops.tf deleted file mode 100644 index dd1ebc50..00000000 --- a/tests/azure/terraform/aks/azuredevops.tf +++ /dev/null @@ -1,21 +0,0 @@ -data "azuredevops_project" "e2e" { - name = "e2e" -} - -resource "azuredevops_git_repository" "fleet_infra" { - project_id = data.azuredevops_project.e2e.id - name = "fleet-infra-${local.name_suffix}" - default_branch = "refs/heads/main" - initialization { - init_type = "Clean" - } -} - -resource "azuredevops_git_repository" "application" { - project_id = data.azuredevops_project.e2e.id - name = "application-${local.name_suffix}" - default_branch = "refs/heads/main" - initialization { - init_type = "Clean" - } -} diff --git a/tests/azure/terraform/aks/event-hub.tf b/tests/azure/terraform/aks/event-hub.tf deleted file mode 100644 index 13162d29..00000000 --- a/tests/azure/terraform/aks/event-hub.tf +++ /dev/null @@ -1,26 +0,0 @@ -resource "azurerm_eventhub_namespace" "this" { - name = "ehns-${local.name_suffix}" - location = azurerm_resource_group.this.location - resource_group_name = azurerm_resource_group.this.name - sku = "Standard" - capacity = 1 -} - - -resource "azurerm_eventhub" "this" { - name = "eh-${local.name_suffix}" - namespace_name = azurerm_eventhub_namespace.this.name - resource_group_name = azurerm_resource_group.this.name - partition_count = 1 - message_retention = 1 -} - -resource "azurerm_eventhub_authorization_rule" "this" { - name = "flux" - resource_group_name = azurerm_resource_group.this.name - namespace_name = azurerm_eventhub_namespace.this.name - eventhub_name = azurerm_eventhub.this.name - listen = true - send = true - manage = false -} diff --git a/tests/azure/terraform/aks/keyvault.tf b/tests/azure/terraform/aks/keyvault.tf deleted file mode 100644 index 9133306a..00000000 --- a/tests/azure/terraform/aks/keyvault.tf +++ /dev/null @@ -1,37 +0,0 @@ -resource "azurerm_key_vault" "this" { - name = "kv-${random_pet.suffix.id}" - resource_group_name = azurerm_resource_group.this.name - location = azurerm_resource_group.this.location - tenant_id = data.azurerm_client_config.current.tenant_id - sku_name = "standard" -} - -resource "azurerm_key_vault_access_policy" "sops_write" { - key_vault_id = azurerm_key_vault.this.id - tenant_id = data.azurerm_client_config.current.tenant_id - object_id = data.azurerm_client_config.current.object_id - - key_permissions = [ - "Encrypt", - "Decrypt", - "Create", - "Delete", - "Purge", - "Get", - "List", - ] -} - -resource "azurerm_key_vault_key" "sops" { - depends_on = [azurerm_key_vault_access_policy.sops_write] - - name = "sops" - key_vault_id = azurerm_key_vault.this.id - key_type = "RSA" - key_size = 2048 - - key_opts = [ - "decrypt", - "encrypt", - ] -} diff --git a/tests/azure/terraform/aks/main.tf b/tests/azure/terraform/aks/main.tf deleted file mode 100644 index 0e70f4a1..00000000 --- a/tests/azure/terraform/aks/main.tf +++ /dev/null @@ -1,52 +0,0 @@ -terraform { - backend "azurerm" { - resource_group_name = "terraform-state" - storage_account_name = "terraformstate0419" - container_name = "aks-tfstate" - key = "prod.terraform.tfstate" - } - - required_version = "1.2.8" - - required_providers { - azurerm = { - source = "hashicorp/azurerm" - version = "3.20.0" - } - azuread = { - source = "hashicorp/azuread" - version = "2.28.0" - } - azuredevops = { - source = "microsoft/azuredevops" - version = "0.2.2" - } - } -} - -provider "azurerm" { - features {} -} - -provider "azuredevops" { - org_service_url = "https://dev.azure.com/${local.azure_devops_org}" - personal_access_token = data.azurerm_key_vault_secret.shared_pat.value -} - -data "azurerm_client_config" "current" {} - -resource "random_pet" "suffix" {} - -locals { - azure_devops_org = "flux-azure" - name_suffix = "e2e-${random_pet.suffix.id}" -} - -resource "azurerm_resource_group" "this" { - name = "rg-${local.name_suffix}" - location = "West Europe" - - tags = { - environment = "e2e" - } -} diff --git a/tests/azure/terraform/aks/outputs.tf b/tests/azure/terraform/aks/outputs.tf deleted file mode 100644 index 21a8f1de..00000000 --- a/tests/azure/terraform/aks/outputs.tf +++ /dev/null @@ -1,80 +0,0 @@ -output "aks_kube_config" { - sensitive = true - value = azurerm_kubernetes_cluster.this.kube_config_raw -} - -output "aks_host" { - value = azurerm_kubernetes_cluster.this.kube_config[0].host - sensitive = true -} - -output "aks_client_certificate" { - value = base64decode(azurerm_kubernetes_cluster.this.kube_config[0].client_certificate) - sensitive = true -} - -output "aks_client_key" { - value = base64decode(azurerm_kubernetes_cluster.this.kube_config[0].client_key) - sensitive = true -} - -output "aks_cluster_ca_certificate" { - value = base64decode(azurerm_kubernetes_cluster.this.kube_config[0].cluster_ca_certificate) - sensitive = true -} - -output "shared_pat" { - sensitive = true - value = data.azurerm_key_vault_secret.shared_pat.value -} - -output "shared_id_rsa" { - sensitive = true - value = data.azurerm_key_vault_secret.shared_id_rsa.value -} - -output "shared_id_rsa_pub" { - sensitive = true - value = data.azurerm_key_vault_secret.shared_id_rsa_pub.value -} - -output "fleet_infra_repository" { - value = { - http = azuredevops_git_repository.fleet_infra.remote_url - ssh = "ssh://git@ssh.dev.azure.com/v3/${local.azure_devops_org}/${azuredevops_git_repository.fleet_infra.project_id}/${azuredevops_git_repository.fleet_infra.name}" - } -} - -output "application_repository" { - value = { - http = azuredevops_git_repository.application.remote_url - ssh = "ssh://git@ssh.dev.azure.com/v3/${local.azure_devops_org}/${azuredevops_git_repository.application.project_id}/${azuredevops_git_repository.application.name}" - } -} - -output "flux_azure_sp" { - value = { - tenant_id = data.azurerm_client_config.current.tenant_id - client_id = azuread_service_principal.flux.application_id - client_secret = azuread_service_principal_password.flux.value - } - sensitive = true -} - -output "event_hub_sas" { - value = azurerm_eventhub_authorization_rule.this.primary_connection_string - sensitive = true -} - -output "sops_id" { - value = azurerm_key_vault_key.sops.id -} - -output "acr" { - value = { - url = data.azurerm_container_registry.shared.login_server - username = azuread_service_principal.flux.application_id - password = azuread_service_principal_password.flux.value - } - sensitive = true -} diff --git a/tests/azure/terraform/aks/service-principal.tf b/tests/azure/terraform/aks/service-principal.tf deleted file mode 100644 index db46718b..00000000 --- a/tests/azure/terraform/aks/service-principal.tf +++ /dev/null @@ -1,52 +0,0 @@ -resource "azuread_application" "flux" { - display_name = "flux-${local.name_suffix}" - - required_resource_access { - resource_app_id = "00000003-0000-0000-c000-000000000000" - - resource_access { - id = "df021288-bdef-4463-88db-98f22de89214" - type = "Role" - } - } - - required_resource_access { - resource_app_id = "00000002-0000-0000-c000-000000000000" - - resource_access { - id = "1cda74f2-2616-4834-b122-5cb1b07f8a59" - type = "Role" - } - resource_access { - id = "78c8a3c8-a07e-4b9e-af1b-b5ccab50a175" - type = "Role" - } - } -} - -resource "azuread_service_principal" "flux" { - application_id = azuread_application.flux.application_id -} - -resource "azuread_service_principal_password" "flux" { - service_principal_id = azuread_service_principal.flux.object_id -} - -resource "azurerm_role_assignment" "acr" { - scope = data.azurerm_container_registry.shared.id - role_definition_name = "AcrPull" - principal_id = azuread_service_principal.flux.object_id -} - -resource "azurerm_key_vault_access_policy" "sops_decrypt" { - key_vault_id = azurerm_key_vault.this.id - tenant_id = data.azurerm_client_config.current.tenant_id - object_id = azuread_service_principal.flux.object_id - - key_permissions = [ - "Encrypt", - "Decrypt", - "Get", - "List", - ] -} diff --git a/tests/azure/terraform/aks/shared.tf b/tests/azure/terraform/aks/shared.tf deleted file mode 100644 index 30fccf5f..00000000 --- a/tests/azure/terraform/aks/shared.tf +++ /dev/null @@ -1,32 +0,0 @@ -locals { - shared_suffix = "oarfish" -} - -data "azurerm_resource_group" "shared" { - name = "e2e-shared" -} - -data "azurerm_container_registry" "shared" { - name = "acrapps${local.shared_suffix}" - resource_group_name = data.azurerm_resource_group.shared.name -} - -data "azurerm_key_vault" "shared" { - resource_group_name = data.azurerm_resource_group.shared.name - name = "kv-credentials-${local.shared_suffix}" -} - -data "azurerm_key_vault_secret" "shared_pat" { - key_vault_id = data.azurerm_key_vault.shared.id - name = "pat" -} - -data "azurerm_key_vault_secret" "shared_id_rsa" { - key_vault_id = data.azurerm_key_vault.shared.id - name = "id-rsa" -} - -data "azurerm_key_vault_secret" "shared_id_rsa_pub" { - key_vault_id = data.azurerm_key_vault.shared.id - name = "id-rsa-pub" -} diff --git a/tests/azure/terraform/shared/.terraform.lock.hcl b/tests/azure/terraform/shared/.terraform.lock.hcl deleted file mode 100644 index 03a5e2fe..00000000 --- a/tests/azure/terraform/shared/.terraform.lock.hcl +++ /dev/null @@ -1,61 +0,0 @@ -# This file is maintained automatically by "terraform init". -# Manual edits may be lost in future updates. - -provider "registry.terraform.io/hashicorp/azuread" { - version = "2.28.0" - constraints = "2.28.0" - hashes = [ - "h1:22zcPLrP6T0FAGzhkx44Oc3SreGpzttng34JSYhoknE=", - "zh:0e8b008417d74f7d7f931effe48c0719f20789440c9c5932c2b1cf4110348f41", - "zh:1c3e89cf19118fc07d7b04257251fc9897e722c16e0a0df7b07fcd261f8c12e7", - "zh:2a2e4408fc1dc902553ff6a5751924c5e9a59df30f0668b55aa6c07264537c03", - "zh:2ab09b735888a7402bdd8e74f75a053ac102e0a01b876b0608a0c240dff57b2e", - "zh:2ac1f45bb1597726ff6822e1f9a7bc7227179c10b0b51533849b44ab278a05ed", - "zh:601a7821c7fbef870a1a2165a684e4fb4f4c84f6b85e0ce51ef7783a581cf594", - "zh:7f8e4dd03a3d4259e06b498ed0b04c6911aa99cf5f01018e2092899cd135c6e5", - "zh:8408143a24baaf4ad527aeecfaf11dfcd0fb6f25648958f2c94464717f776206", - "zh:bc836c1389f7b01537eb71ec709ea9d1cb4180814b70992ce3004356ce28d173", - "zh:d4b5571c96c2bafdf79494265f508dbe569f6fb16a5ddc41f22da22e9be029e9", - "zh:f1c2a1a13fe3725ba84b57a418adb1bd8c93db09dd880658a468cbd4832f9224", - "zh:f39b090d45674395fecb39add1260dd4565661e38eb40c4017c3fd84c8af1717", - ] -} - -provider "registry.terraform.io/hashicorp/azurerm" { - version = "3.20.0" - constraints = "3.20.0" - hashes = [ - "h1:heH/4bYgajEFQ+fwSV9Zduvpyb7eTCQUv+gl201EFg8=", - "zh:0d534bb2fed67b5b58d3adb2b0be7a9986f62b34f40eae450dafc9454fb54db8", - "zh:19f6d5f196a35500e0f1ae9d9baee44f49b90858524338a7b8aaec06d3e3a047", - "zh:1d042648d2eaffde8858a8006b944374599c5e8c2f834ae74b97adedd1468142", - "zh:278ebac38cf3c1e6df4bc5de00e931bfc04298607f428aa84a932bbf26dee421", - "zh:48f29b802e2de7e6dd2452a012c633686fce5d7ad3eadb490a7b8c0967a9ebfa", - "zh:731bf2e97c4a519723682beb2e85e065bf0bf53b2f50e2ff7b15b39ea74e37ff", - "zh:7c8187ebca19ca8f6ef82d3d79a418ccfa6574bb99e63cc930fa46ff938a7921", - "zh:82fdb2052601f6fa925195e77506fb609ce8bb4a6f6e94cf6a5058252ef570d4", - "zh:995ca23bb3765a16c6b3138b468d920acff5742b22492324c836579e3344ea40", - "zh:a970131232ad41203382f6fa3f0014a22767cbfe28cd7562346184ea6e678d63", - "zh:bf5036675a7f0b8691fe393e2782a76c7943ba17eec7255e16a31c7547436a48", - "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", - ] -} - -provider "registry.terraform.io/hashicorp/random" { - version = "3.3.2" - hashes = [ - "h1:H5V+7iXol/EHB2+BUMzGlpIiCOdV74H8YjzCxnSAWcg=", - "zh:038293aebfede983e45ee55c328e3fde82ae2e5719c9bd233c324cfacc437f9c", - "zh:07eaeab03a723d83ac1cc218f3a59fceb7bbf301b38e89a26807d1c93c81cef8", - "zh:427611a4ce9d856b1c73bea986d841a969e4c2799c8ac7c18798d0cc42b78d32", - "zh:49718d2da653c06a70ba81fd055e2b99dfd52dcb86820a6aeea620df22cd3b30", - "zh:5574828d90b19ab762604c6306337e6cd430e65868e13ef6ddb4e25ddb9ad4c0", - "zh:7222e16f7833199dabf1bc5401c56d708ec052b2a5870988bc89ff85b68a5388", - "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", - "zh:b1b2d7d934784d2aee98b0f8f07a8ccfc0410de63493ae2bf2222c165becf938", - "zh:b8f85b6a20bd264fcd0814866f415f0a368d1123cd7879c8ebbf905d370babc8", - "zh:c3813133acc02bbebddf046d9942e8ba5c35fc99191e3eb057957dafc2929912", - "zh:e7a41dbc919d1de800689a81c240c27eec6b9395564630764ebb323ea82ac8a9", - "zh:ee6d23208449a8eaa6c4f203e33f5176fa795b4b9ecf32903dffe6e2574732c2", - ] -} diff --git a/tests/azure/terraform/shared/acr.tf b/tests/azure/terraform/shared/acr.tf deleted file mode 100644 index a339feed..00000000 --- a/tests/azure/terraform/shared/acr.tf +++ /dev/null @@ -1,6 +0,0 @@ -resource "azurerm_container_registry" "this" { - name = "acrapps${random_pet.suffix.id}" - resource_group_name = azurerm_resource_group.this.name - location = azurerm_resource_group.this.location - sku = "Standard" -} diff --git a/tests/azure/terraform/shared/keyvault.tf b/tests/azure/terraform/shared/keyvault.tf deleted file mode 100644 index baf1eca0..00000000 --- a/tests/azure/terraform/shared/keyvault.tf +++ /dev/null @@ -1,43 +0,0 @@ -resource "azurerm_key_vault" "this" { - name = "kv-credentials-${random_pet.suffix.id}" - resource_group_name = azurerm_resource_group.this.name - location = azurerm_resource_group.this.location - tenant_id = data.azurerm_client_config.current.tenant_id - sku_name = "standard" -} - -resource "azurerm_key_vault_access_policy" "admin" { - key_vault_id = azurerm_key_vault.this.id - tenant_id = data.azurerm_client_config.current.tenant_id - object_id = data.azurerm_client_config.current.object_id - - key_permissions = [ - "Backup", - "Create", - "Decrypt", - "Delete", - "Encrypt", - "Get", - "Import", - "List", - "Purge", - "Recover", - "Restore", - "Sign", - "UnwrapKey", - "Update", - "Verify", - "WrapKey", - ] - - secret_permissions = [ - "Backup", - "Delete", - "Get", - "List", - "Purge", - "Recover", - "Restore", - "Set", - ] -} diff --git a/tests/azure/terraform/shared/main.tf b/tests/azure/terraform/shared/main.tf deleted file mode 100644 index 36623f6b..00000000 --- a/tests/azure/terraform/shared/main.tf +++ /dev/null @@ -1,39 +0,0 @@ -terraform { - backend "azurerm" { - resource_group_name = "terraform-state" - storage_account_name = "terraformstate0419" - container_name = "shared-tfstate" - key = "prod.terraform.tfstate" - } - - required_version = "1.2.8" - - required_providers { - azurerm = { - source = "hashicorp/azurerm" - version = "3.20.0" - } - azuread = { - source = "hashicorp/azuread" - version = "2.28.0" - } - } -} - -provider "azurerm" { - features {} -} - -resource "random_pet" "suffix" { - length = 1 - separator = "" -} - -data "azurerm_client_config" "current" {} - -data "azurerm_subscription" "current" {} - -resource "azurerm_resource_group" "this" { - name = "e2e-shared" - location = "West Europe" -} diff --git a/tests/azure/terraform/shared/outputs.tf b/tests/azure/terraform/shared/outputs.tf deleted file mode 100644 index ff0e09f4..00000000 --- a/tests/azure/terraform/shared/outputs.tf +++ /dev/null @@ -1,18 +0,0 @@ -output "azure_devops_sp" { - value = { - client_id = azuread_service_principal.azure_devops.application_id - client_secret = azuread_application_password.azure_devops.value - } - sensitive = true -} - -output "github_sp" { - value = { - tenant_id = data.azurerm_client_config.current.tenant_id - subscription_id = data.azurerm_client_config.current.subscription_id - client_id = azuread_service_principal.github.application_id - client_secret = azuread_application_password.github.value - } - sensitive = true -} - diff --git a/tests/azure/terraform/shared/service-principal.tf b/tests/azure/terraform/shared/service-principal.tf deleted file mode 100644 index eaed3a6e..00000000 --- a/tests/azure/terraform/shared/service-principal.tf +++ /dev/null @@ -1,105 +0,0 @@ -# Service Principal used by Azure DevOps to push OCI and Helm Charts -resource "azuread_application" "azure_devops" { - display_name = "azure-devops-${random_pet.suffix.id}" - - required_resource_access { - resource_app_id = "00000003-0000-0000-c000-000000000000" - - resource_access { - id = "df021288-bdef-4463-88db-98f22de89214" - type = "Role" - } - } - - required_resource_access { - resource_app_id = "00000002-0000-0000-c000-000000000000" - - resource_access { - id = "1cda74f2-2616-4834-b122-5cb1b07f8a59" - type = "Role" - } - resource_access { - id = "78c8a3c8-a07e-4b9e-af1b-b5ccab50a175" - type = "Role" - } - } -} - -resource "azuread_application_password" "azure_devops" { - display_name = "password" - application_object_id = azuread_application.azure_devops.object_id -} - -resource "azuread_service_principal" "azure_devops" { - application_id = azuread_application.azure_devops.application_id -} - -resource "azurerm_role_assignment" "azure_devops_acr" { - scope = azurerm_container_registry.this.id - role_definition_name = "Contributor" - principal_id = azuread_service_principal.azure_devops.object_id -} - -# Service Principal that is used to run the tests in GitHub Actions -resource "azuread_application" "github" { - display_name = "github-${random_pet.suffix.id}" - - required_resource_access { - resource_app_id = "00000003-0000-0000-c000-000000000000" - - resource_access { - id = "df021288-bdef-4463-88db-98f22de89214" - type = "Role" - } - } - - required_resource_access { - resource_app_id = "00000002-0000-0000-c000-000000000000" - - resource_access { - id = "1cda74f2-2616-4834-b122-5cb1b07f8a59" - type = "Role" - } - resource_access { - id = "78c8a3c8-a07e-4b9e-af1b-b5ccab50a175" - type = "Role" - } - } -} - -resource "azuread_application_password" "github" { - display_name = "password" - application_object_id = azuread_application.github.object_id -} - -resource "azuread_service_principal" "github" { - application_id = azuread_application.github.application_id -} - -data "azurerm_storage_account" "terraform_state" { - resource_group_name = "terraform-state" - name = "terraformstate0419" -} - -resource "azurerm_role_assignment" "github_resource_group" { - scope = data.azurerm_subscription.current.id - role_definition_name = "Contributor" - principal_id = azuread_service_principal.github.object_id -} - -resource "azurerm_role_assignment" "github_acr" { - scope = azurerm_container_registry.this.id - role_definition_name = "Owner" - principal_id = azuread_service_principal.github.object_id -} - -resource "azurerm_key_vault_access_policy" "github_keyvault_secret_read" { - key_vault_id = azurerm_key_vault.this.id - tenant_id = data.azurerm_client_config.current.tenant_id - object_id = azuread_service_principal.github.object_id - - secret_permissions = [ - "Get", - "List", - ] -} diff --git a/tests/azure/terraform/shared/variables.tf b/tests/azure/terraform/shared/variables.tf deleted file mode 100644 index e69de29b..00000000 diff --git a/tests/azure/util_test.go b/tests/azure/util_test.go deleted file mode 100644 index ededf2d9..00000000 --- a/tests/azure/util_test.go +++ /dev/null @@ -1,457 +0,0 @@ -/* -Copyright 2021 The Flux authors - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package test - -import ( - "context" - "fmt" - "io" - "os" - "os/exec" - "path/filepath" - "strings" - "time" - - corev1 "k8s.io/api/core/v1" - apimeta "k8s.io/apimachinery/pkg/api/meta" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/types" - "k8s.io/client-go/kubernetes/scheme" - "k8s.io/client-go/rest" - "sigs.k8s.io/controller-runtime/pkg/client" - "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" - - helmv2beta1 "github.com/fluxcd/helm-controller/api/v2beta2" - automationv1beta1 "github.com/fluxcd/image-automation-controller/api/v1beta1" - reflectorv1beta2 "github.com/fluxcd/image-reflector-controller/api/v1beta2" - kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" - notiv1 "github.com/fluxcd/notification-controller/api/v1" - notiv1beta3 "github.com/fluxcd/notification-controller/api/v1beta3" - "github.com/fluxcd/pkg/apis/meta" - "github.com/fluxcd/pkg/git" - "github.com/fluxcd/pkg/git/gogit" - "github.com/fluxcd/pkg/git/repository" - sourcev1 "github.com/fluxcd/source-controller/api/v1" - sourcev1b2 "github.com/fluxcd/source-controller/api/v1beta2" - extgogit "github.com/go-git/go-git/v5" - gitconfig "github.com/go-git/go-git/v5/config" - "github.com/go-git/go-git/v5/plumbing" - "github.com/go-git/go-git/v5/plumbing/object" - "github.com/go-git/go-git/v5/plumbing/transport/http" -) - -const defaultBranch = "main" - -// getKubernetesCredentials returns a path to a kubeconfig file and a kube client instance. -func getKubernetesCredentials(kubeconfig, aksHost, aksCert, aksKey, aksCa string) (string, client.Client, error) { - tmpDir, err := os.MkdirTemp("", "*-azure-e2e") - if err != nil { - return "", nil, err - } - kubeconfigPath := fmt.Sprintf("%s/kubeconfig", tmpDir) - os.WriteFile(kubeconfigPath, []byte(kubeconfig), 0750) - kubeCfg := &rest.Config{ - Host: aksHost, - TLSClientConfig: rest.TLSClientConfig{ - CertData: []byte(aksCert), - KeyData: []byte(aksKey), - CAData: []byte(aksCa), - }, - } - err = sourcev1b2.AddToScheme(scheme.Scheme) - if err != nil { - return "", nil, err - } - err = sourcev1.AddToScheme(scheme.Scheme) - if err != nil { - return "", nil, err - } - err = kustomizev1.AddToScheme(scheme.Scheme) - if err != nil { - return "", nil, err - } - err = helmv2beta1.AddToScheme(scheme.Scheme) - if err != nil { - return "", nil, err - } - err = reflectorv1beta2.AddToScheme(scheme.Scheme) - if err != nil { - return "", nil, err - } - err = automationv1beta1.AddToScheme(scheme.Scheme) - if err != nil { - return "", nil, err - } - err = notiv1beta3.AddToScheme(scheme.Scheme) - if err != nil { - return "", nil, err - } - err = notiv1.AddToScheme(scheme.Scheme) - if err != nil { - return "", nil, err - } - kubeClient, err := client.New(kubeCfg, client.Options{Scheme: scheme.Scheme}) - if err != nil { - return "", nil, err - } - return kubeconfigPath, kubeClient, nil -} - -// installFlux adds the core Flux components to the cluster specified in the kubeconfig file. -func installFlux(ctx context.Context, kubeClient client.Client, kubeconfigPath, repoUrl, azdoPat string, sp spConfig) error { - namespace := corev1.Namespace{ - ObjectMeta: metav1.ObjectMeta{ - Name: "flux-system", - }, - } - _, err := controllerutil.CreateOrUpdate(ctx, cfg.kubeClient, &namespace, func() error { - return nil - }) - - azureSp := &corev1.Secret{ObjectMeta: metav1.ObjectMeta{Name: "azure-sp", Namespace: "flux-system"}} - _, err = controllerutil.CreateOrUpdate(ctx, kubeClient, azureSp, func() error { - azureSp.StringData = map[string]string{ - "AZURE_TENANT_ID": sp.tenantId, - "AZURE_CLIENT_ID": sp.clientId, - "AZURE_CLIENT_SECRET": sp.clientSecret, - } - return nil - }) - if err != nil { - return err - } - - //// Install Flux and push files to git repository - repo, _, err := getRepository(repoUrl, defaultBranch, true, azdoPat) - if err != nil { - return fmt.Errorf("error cloning repositoriy: %w", err) - } - - kustomizeYaml := ` -resources: - - gotk-components.yaml - - gotk-sync.yaml -patchesStrategicMerge: - - |- - apiVersion: apps/v1 - kind: Deployment - metadata: - name: kustomize-controller - namespace: flux-system - spec: - template: - spec: - containers: - - name: manager - envFrom: - - secretRef: - name: azure-sp - - |- - apiVersion: apps/v1 - kind: Deployment - metadata: - name: source-controller - namespace: flux-system - spec: - template: - spec: - containers: - - name: manager - envFrom: - - secretRef: - name: azure-sp -` - - files := make(map[string]io.Reader) - files["clusters/e2e/flux-system/kustomization.yaml"] = strings.NewReader(kustomizeYaml) - files["clusters/e2e/flux-system/gotk-components.yaml"] = strings.NewReader("") - files["clusters/e2e/flux-system/gotk-sync.yaml"] = strings.NewReader("") - err = commitAndPushAll(repo, files, defaultBranch) - if err != nil { - return fmt.Errorf("error committing and pushing manifests: %w", err) - } - - bootstrapCmd := fmt.Sprintf("flux bootstrap git --url=%s --password=%s --kubeconfig=%s"+ - " --token-auth --path=clusters/e2e --components-extra image-reflector-controller,image-automation-controller", - repoUrl, azdoPat, kubeconfigPath) - if err := runCommand(context.Background(), 10*time.Minute, "./", bootstrapCmd); err != nil { - return fmt.Errorf("error running bootstrap: %w", err) - } - - return nil -} - -func runCommand(ctx context.Context, timeout time.Duration, dir, command string) error { - timeoutCtx, cancel := context.WithTimeout(ctx, timeout) - defer cancel() - cmd := exec.CommandContext(timeoutCtx, "bash", "-c", command) - cmd.Dir = dir - output, err := cmd.CombinedOutput() - if err != nil { - return fmt.Errorf("failure to run command %s: %v", string(output), err) - } - return nil -} - -// verifyGitAndKustomization checks that the gitrespository and kustomization combination are working properly. -func verifyGitAndKustomization(ctx context.Context, kubeClient client.Client, namespace, name string) error { - nn := types.NamespacedName{ - Name: name, - Namespace: namespace, - } - source := &sourcev1.GitRepository{} - err := kubeClient.Get(ctx, nn, source) - if err != nil { - return err - } - if apimeta.IsStatusConditionPresentAndEqual(source.Status.Conditions, meta.ReadyCondition, metav1.ConditionTrue) == false { - return fmt.Errorf("source condition not ready") - } - kustomization := &kustomizev1.Kustomization{} - err = kubeClient.Get(ctx, nn, kustomization) - if err != nil { - return err - } - if apimeta.IsStatusConditionPresentAndEqual(kustomization.Status.Conditions, meta.ReadyCondition, metav1.ConditionTrue) == false { - return fmt.Errorf("kustomization condition not ready") - } - return nil -} - -func setupNamespace(ctx context.Context, kubeClient client.Client, repoUrl, password, name string) error { - namespace := corev1.Namespace{ - ObjectMeta: metav1.ObjectMeta{ - Name: name, - }, - } - _, err := controllerutil.CreateOrUpdate(ctx, kubeClient, &namespace, func() error { - return nil - }) - secret := corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "https-credentials", - Namespace: name, - }, - } - _, err = controllerutil.CreateOrUpdate(ctx, kubeClient, &secret, func() error { - secret.StringData = map[string]string{ - "username": "git", - "password": password, - } - return nil - }) - source := &sourcev1.GitRepository{ObjectMeta: metav1.ObjectMeta{Name: name, Namespace: namespace.Name}} - _, err = controllerutil.CreateOrUpdate(ctx, kubeClient, source, func() error { - source.Spec = sourcev1.GitRepositorySpec{ - Interval: metav1.Duration{ - Duration: 1 * time.Minute, - }, - Reference: &sourcev1.GitRepositoryRef{ - Branch: name, - }, - SecretRef: &meta.LocalObjectReference{ - Name: "https-credentials", - }, - URL: repoUrl, - } - return nil - }) - if err != nil { - return err - } - kustomization := &kustomizev1.Kustomization{ObjectMeta: metav1.ObjectMeta{Name: name, Namespace: namespace.Name}} - _, err = controllerutil.CreateOrUpdate(ctx, kubeClient, kustomization, func() error { - kustomization.Spec = kustomizev1.KustomizationSpec{ - SourceRef: kustomizev1.CrossNamespaceSourceReference{ - Kind: sourcev1.GitRepositoryKind, - Name: source.Name, - Namespace: source.Namespace, - }, - Interval: metav1.Duration{ - Duration: 1 * time.Minute, - }, - Prune: true, - } - return nil - }) - if err != nil { - return err - } - return nil -} - -func getRepository(repoURL, branchName string, overrideBranch bool, password string) (*gogit.Client, string, error) { - checkoutBranch := defaultBranch - if overrideBranch == false { - checkoutBranch = branchName - } - - tmpDir, err := os.MkdirTemp("", "*-repository") - if err != nil { - return nil, "", err - } - c, err := gogit.NewClient(tmpDir, &git.AuthOptions{ - Transport: git.HTTPS, - Username: "git", - Password: password, - }) - if err != nil { - return nil, "", err - } - - _, err = c.Clone(context.Background(), repoURL, repository.CloneConfig{ - CheckoutStrategy: repository.CheckoutStrategy{ - Branch: checkoutBranch, - }, - }) - if err != nil { - return nil, "", err - } - - err = c.SwitchBranch(context.Background(), branchName) - if err != nil { - return nil, "", err - } - - return c, tmpDir, nil -} - -func addFile(dir, path, content string) error { - err := os.WriteFile(filepath.Join(dir, path), []byte(content), 0777) - if err != nil { - return err - } - return nil -} - -func commitAndPushAll(client *gogit.Client, files map[string]io.Reader, branchName string) error { - repo, err := extgogit.PlainOpen(client.Path()) - if err != nil { - return err - } - - wt, err := repo.Worktree() - if err != nil { - return err - } - - err = wt.Checkout(&extgogit.CheckoutOptions{ - Branch: plumbing.NewBranchReferenceName(branchName), - Force: true, - }) - if err != nil { - return err - } - - f := repository.WithFiles(files) - _, err = client.Commit(git.Commit{ - Author: git.Signature{ - Name: "git", - Email: "test@example.com", - When: time.Now(), - }, - Message: "add file", - }, f) - - if err != nil { - return err - } - - err = client.Push(context.Background(), repository.PushConfig{}) - if err != nil { - return err - } - - return nil -} - -func createTagAndPush(client *gogit.Client, branchName, newTag, password string) error { - repo, err := extgogit.PlainOpen(client.Path()) - if err != nil { - return err - } - - ref, err := repo.Reference(plumbing.NewBranchReferenceName(branchName), false) - if err != nil { - return err - } - - tags, err := repo.TagObjects() - if err != nil { - return err - } - - err = tags.ForEach(func(tag *object.Tag) error { - if tag.Name == newTag { - err = repo.DeleteTag(tag.Name) - if err != nil { - return err - } - } - - return nil - }) - if err != nil { - return err - } - - sig := &object.Signature{ - Name: "git", - Email: "test@example.com", - When: time.Now(), - } - - _, err = repo.CreateTag(newTag, ref.Hash(), &extgogit.CreateTagOptions{ - Tagger: sig, - Message: "create tag", - }) - if err != nil { - return err - } - - auth := &http.BasicAuth{ - Username: "git", - Password: password, - } - - po := &extgogit.PushOptions{ - RemoteName: "origin", - Progress: os.Stdout, - RefSpecs: []gitconfig.RefSpec{gitconfig.RefSpec("refs/tags/*:refs/tags/*")}, - Auth: auth, - } - if err := repo.Push(po); err != nil { - return err - } - - return nil -} - -func getTestManifest(namespace string) string { - return fmt.Sprintf(` -apiVersion: v1 -kind: Namespace -metadata: - name: %s ---- -apiVersion: v1 -kind: ConfigMap -metadata: - name: foobar - namespace: %s -`, namespace, namespace) -} From d48cbe3fcbe44295cad42713092ec25a160f552c Mon Sep 17 00:00:00 2001 From: adamkenihan Date: Thu, 4 Jan 2024 15:28:19 +0000 Subject: [PATCH 749/818] Create CDEvents RFC Signed-off-by: adamkenihan Create CDEvents RFC Signed-off-by: adamkenihan Update README.md Signed-off-by: adamkenihan Add files via upload Signed-off-by: adamkenihan Edits to diagrams Signed-off-by: adamkenihan Update README.md Signed-off-by: adamkenihan Add files via upload Signed-off-by: adamkenihan Update README.md Signed-off-by: adamkenihan Improvements to rfcs/NNNN-cdevents/README.md Signed-off-by: adamkenihan Add CDEvents Receiver RFC Signed-off-by: adamkenihan Add CDEvents Receiver RFC Signed-off-by: adamkenihan Add CDEvents Receiver RFC Signed-off-by: adamkenihan Small tweaks to cdevents RFC Signed-off-by: adamkenihan change cdevents RFC yaml example format Signed-off-by: adamkenihan Add CDEvents Receiver RFC Signed-off-by: adamkenihan Create CDEvents RFC Signed-off-by: adamkenihan Signed-off-by: adamkenihan Change RFC number Signed-off-by: adamkenihan Update rfcs/0006-cdevents/README.md Signed-off-by: adamkenihan Update README.md Signed-off-by: adamkenihan Update rfcs/0006-cdevents/README.md Signed-off-by: adamkenihan Update rfcs/0006-cdevents/README.md Signed-off-by: adamkenihan Co-Authored-By: Sunny Co-Authored-By: souleb --- .../CDEvents-Flux-RFC-Adapter.png | Bin 0 -> 181315 bytes .../CDEvents-Flux-RFC-Broker.png | Bin 0 -> 748787 bytes rfcs/0006-cdevents/Flux-CDEvents-RFC.png | Bin 0 -> 39957 bytes rfcs/0006-cdevents/README.md | 135 ++++++++++++++++++ rfcs/0006-cdevents/cdevents-flux-tekton.png | Bin 0 -> 665010 bytes 5 files changed, 135 insertions(+) create mode 100644 rfcs/0006-cdevents/CDEvents-Flux-RFC-Adapter.png create mode 100644 rfcs/0006-cdevents/CDEvents-Flux-RFC-Broker.png create mode 100644 rfcs/0006-cdevents/Flux-CDEvents-RFC.png create mode 100644 rfcs/0006-cdevents/README.md create mode 100644 rfcs/0006-cdevents/cdevents-flux-tekton.png diff --git a/rfcs/0006-cdevents/CDEvents-Flux-RFC-Adapter.png b/rfcs/0006-cdevents/CDEvents-Flux-RFC-Adapter.png new file mode 100644 index 0000000000000000000000000000000000000000..270a98a8d1faef5be58a530c52077de38cd0178d GIT binary patch literal 181315 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�L5tehr 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 z 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%0D4LuGhJejn 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

f?&H1$t`)P3`#ax<)(aeV_Cl`jw;v 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

rftjb32ziJA&hegPV!35p-F2KQ;(^Y< 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 Ohwh6*;v8?>#&ohyj`UirIMN_TI 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

H<#i)+fGB>P4DAbQwYGYLRd(+V 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� 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

(GlX=eVsV4wLptR{flh2aScaSz*KhGM)2nNAa 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

UH< ziuhidY@@`R0-r6>fPf*STj^=_I9X!0`;UVChNhWz3kgm;?{8msz)1KUC2^!q^KqRU z4PR6&5AX#WPUT>^=nUEJYcq$rCC?RvF+v7va2AczaRn+JSCu`>jH>$b3~?w1y8q)v zJr-+pR@ePSy51>dp~(B)L_1L6jt*Ux%CJWhncnolW7b7gpc#8;2KlOx1&xT<-t9|Uf2 zu7yk=FW9VCg9>V*2unBOG`!xkt#ch#BtoPhDbZb3OCs1(RiQ$^#|n|Tvj;>lb*>B6 zYS_rBmMN@1mjjAw{yA^6GVL#XOz~XarngY)NW!w8eYeZNMz_6n=TVAti!<+rzjfLa zK4?NUly@O3TGE>-@TLBD3ovPZ`_z`+mT~If%_YLnB^bIPUCu*(z%$^?!Lu6v$bQuw z_lQVmeEei@u%3_Ik8ezkIz>&+T0{?E+Z_T2qO4DSvC+7=;gFOP-1 z_n`;j-J-`=DCZ>P6`X4wi~a6WubTO<{;?oy;(0n=hv&Yg3;S z9q{wB%zEAa0rD$t#}ff)Cseqy{CjH7Fap#ra(saAPImsmOaN*Fu))nENMaANTDozM z9=eLo*E*qSR}}Ox5o{ihztZ#HNfIx_zU!_VN9~uGVeKQdYVCHD6b9RhD9@io)Cb6l z77Dc|ai0~_Pb!iEgpc-Blvilu9kA7#eQaUt)L_`@vgh^Kry6IS)dP5S7U91?g`30i z4%7c(jxel(X$-37Wk#6(GTbE~ApAkFE`_Y@R^E5DL=Bs;yKlJB_oHj4Ix%yp|L>{N!y|-|q zBqokhxFef4X>&=iPs3%(Z<}7Zu%>4zf2rbrvGCtDCik_;I0Rfvk1FchFIlm&rPT)> zVzPT6e%F@7v?&Q3o8M(XY9d{MOsRY!&E?(zRXAH-o$6e#wAUa7)Zn{>*Bs`2`dpSL zME;Vmoq-NO4!|1mF+~$xG)HC$B~R9ZpB!$4rfRKiy3UkpkQ=6$_X9i?g9TK>8Rj~S zogKlInE=C(OuWD|RsW<7DqOfeNnSY38y2UMs_(tIGpUY^WqQ~cG>ZLDaFL&HLG5H% zOm!DZYZ_EFfpEwieQWyrxL<_+j&2BT^^w1CC_M8d#K13-6<%lUVT_FGempG!ckemX zIROtiTL0ta6VI=;_r7J#+YLPHS0Ul=SBRj%KJC$}tM4;*iV{?;>P0p7sa`y*s0)2X zWs6K)R+&GdW7GWFQ}MU!bv@5At5m+y0Xawy!Yo%?BW8BGEu?zj$UU`2Z<@chb_d^s zxSgRn0m9iUR5*?l1K0g=#EJX8vV>>Oieu^{1drTKMYYqBcZb(v>rkzcGM@{WV-^O9 z1S^e#4fakTINucG)=gJ95!rriP=u!N-GqI5hFbCO4)P^`r9W&11Fl~eoopPaRf6xG zfTBGO3u?$MNWLPwuy}(qiJVy)2Eq2$t{$Nb3joa8cT!RNMK;~Ml5}5ZgJuSP^_|spk*YHVYRSbJyT#f65ec}sSBy_+tK7L0R?rKh74j;yJp`UI}pYQ#8MQ!=G z)e!H4v@c%Ybf3%)BPjSzn&pQ34Mq-Mh*u!~Y-xNWPVVHZnKy;dVW|#y1y9XJHs5Uv zFkGLi>as&eRij&VeT0hIt%~qjHz9vUo9j->-|iGA0a8<&VVB`u}+1`8T+rugtLnS{I-Whp0r0#GVIFdaAA#94^J1& zG0pdBji2-xkMHTO54|CrOgDy#;`qnY_1oLuLVH5aaX8qtO+1el_D<=byo3aaplIFF zm+!Zf``FYGa#VsnmlXE-C)c63tLL2C_#7^rB-9+N3%b{E-)A1f&4&j-M3N|0atcI2 z%3f{;bI&5Fz8_!T{&Ipe&XO4fbSNwfG+OIs_Jcw>zURO1`g?ddzhnc}4 z$;W=WnE|<)oQm4a-*xfC8?AIh&#*mQM99T{JP2IP#Eg(@I;;0Qe^1@3or3WYHa0rq zgUt{)3Tv0Zdmq2by|Kri`lXWRxMWPWqJp*t4hM+~J1^tEsePiV?oS6VWr*mGH)F6h zB%z3}Nly2u{s7o_tAv*HBa4~&$YeQjb9PZ2%5{y9J?DB4>3zGaNS}DOg~kAu>f8+g z8dkW)h%c|#9uo@b`eyu|z{lVFJxO2=6>gnK1|7$PiOWOmXWd?5U<~Qwl;-y*2M>Bh zqf&UVFl;#NCNmNd6p!@YNlmGTzXKuUfH%hLeg5*%^*pl0ySP9+YY*a~GkjTpL-NNk z+0%baKe4>pLVsL7=V0GYLy!@~dU=3m{)D2`O+7V2F!bJPe#-Fj=Qa;PH=mdZs9;s- zLIOZGAdLT55Mu7x4ZIDk8V$uXCaw;z`b9GReJzn7x6XqFm*q=Y z@uWhC`5;#y_Cb(_0vFq|9^3TT3(;yACB6Y7U?lm%`^2QJNo_Q`SLq(t0$xnL_pw)> zOf6{M#Q+N?t{oYpm8?xoM#AZk4@)@~9mmkr6L|d9bPIjQJ;oyFfkOEQz?s_J)Mku#@L%+FjQrQ)?|}8 zLZ5!}=_4RX(EzBcvA7Dq)$ny%em^g`C~y<-OA+j70kR*eA%)ObRVUH@-ozU@??rF? zINoMP#bJul4Gh+G)Xq07rZ69ru7bmbuLI=vqaonbNQWi|EF_Rs1ykPt=%H`mpO46{%?i?+qs1~LJ4{~ zFTRXhD?7~<`z8QH3_;JET8zv5J@gY9fOZhRE?VvKx`IVB&vR#4n&+G}Pyqt^ZvC9yB@!`oE<{`ZsAx$%EUVNs5gEOZ9Xzq?M zpFduj%guA4SH85tS(70TV;ECnaoIGL5MuuQdPv#t<90n6w?6fNz7JAtbO(Fz2D-6P@ zo{9Ofm&0u6N(=a1T@M4s;n^`o#bbE}>yVG5%wE!a({`xNs#(BC;$C`LuisMlFlA{U|~JqE{|BITV8~C*agkq{XLH^ z(M$8Me0HQw1xnld5-DFQF!TqFz4Zl=qNY)gm;YDW3e~KQedr+4R|iY-v0`Z;r*Q zta_s4eZ!cR$NM~e3eh$MI2&_@@0a_o)XgXhiM=Q7axju;0s0%!iNSoF^i-aE;(cxT zA21aN*XCj*ukC41F4H)L;Knco8SqO+8^Hz!`4McIVkgW{C-F=)XAJhz?U+>2@`rgs z1GEC#Yc6U2@icoNZ3OCg)RdGx!GDW>b??KE619u=ibfVVlZyj^I%y@Htq!uwfg90n zEKcJsAr{)Hz4sf=NF@=bA9LU8$7uwiI7^GWyGMX*T;2B@Nbaq${&*Wc_WK$|{@nio zjwaP%qH@&%11gfisO^)DyCM!`k<<9?s@NmMz(Gwp7s~2e-(<81Hb5 zq16S8({FZs2noIRWKRp0aDje5BTe7sZQO2iuXNwJvJVH%YfjN`-3{Btmveykl5qQt z*E*W8KY&-fxLmzw;^K#=&*yiBGjJdp9f*?fX-_9sXNd>&*{#bwyLG;&)spKa^P41Q z`Oz380sJS_A_mV|B8`d9hlOhc7}8p)uH0ESr%4U~#!pVZQ|cLYCqo!xZNRG6qTyxz zVBL+np?;uOzEU>}#VPGfpwj^1N19EttnNu|nCX3p*2|SAQUOSg{X(BkhmRFKWDss6 zT6y>%afT}2`$pOVyKrX_dFx_T84G0JTE9yA>seUvFxi~v=d4GEJI1ZIq=x35M z)F$XjapuF*LNtktLe!1UCz-3Whx`_w|1#U8)@wOlpl1ctBMRr~ufaN>iz8L*$?#??e_CV>UVHmw&WYi9{hNxG>M$}dQ}z8h zJprN02$f}2Q5PY5_<<7lj(j@qi$Gmbg9Ll_n6h` z$y$cz@A-;FSjt2A8f`_wX!cFka#LDyKco*NXWtOkv!8Lt1w@z560DsWn!6a67{LH8 ztcq&tvKN@uF!xVP;^4wcpYB?-Xit0N?@P&=T4zxl(1LjL*=x7y%i$>Bi80QyKQ%GWZuj)fN8T{&K7?6VTzqo;9z-(tmt$#;Xs$G9(H*S?-L znF-C$k~ zD1)NU{S3u0oa}6J$r1vT$N@Rc?&nl4X-8wqSN@(gvoKMoCTKAHvJ0BN<2dLrn!K*; zzH+VoiC{wGi_eecW4pRor{K?E;VfH~`P&u-0+AVy9a zoMI#WL5KqlR&M(pWQ+x%Xor3M@~)Ak-1SY&2B1LTUx1}_gnIX)kEdi*;& z?nds*^plL>Rsql1r4MfjbfQGLXkNu|k^PT4T#neJRVSs@2L!LrIQ0!kR=h1J9FEA& z?}r01T9~bY+nSA)3cWYKKPvg>J|ijG_kh9J>%wA1ZsjgHA}*f)Qu)(G0ig%~^x)Pe ztx<`35ugi_6272*HRdj@_~NwR9{j*RHnaA2?jJFrrVLq0^~ksr3*q4WgiSyd=QKnmu>(9D}y!Lfaghsg*bzrHc6| z-r;+8u6IaKXQzV-!d*{x`I(oH<#f*{1P7sUf+>dFD*ffmk$8U&XmlPE^RdE5>+=}` z)O*p{>m;ncXex8>P_^%REY9a)6W-f!Q-fN&`J{NOl~goVb^@VX&>!JGH8L410!JcPBD&@BAOKZAxqqrle05IiIu0y^e}6xW==k;hrl_ zy1Sq36%cCoFI|7^p+m$yr_H57*xgr1Zf1s=f6O+$uPOtmxmn=6(b}oH@R8M`+g0EJPmd*~0);hmF`Zaeu-Q$Fht zN#tbMD3KtGs0S@)qO+y!u*|pdv6K*XX{?tpBwEdqSn-J=xuVF8<2`4kh{Hv*2eyD?~zy|Iu{^-o}57#)Prjv}^+u3%6k+CB9 zfwTH^IUAMu+XC?SpeL3vPVmbiaP*{p5Qm1SPxYCafY9z#7y7o!qi6^)qwg z5Jr>DK8LMq{GmJur1M|7up@HIegaknsX30#10R5^6QDgOHE> z5lojCnh;;{#^opCW**OnHr9=Utf-2@EYIf?a_;Rs9X>t-FJj?C>RLj}3Tix05+m)T z|3YW$Mmf^pwZsiKvmAL&=)CR(44#mF=92liycQOgMsRyI=sP|TD5ucco4KL!V@Opf zr_nHV$UF5Zj6Od5QgMQFB|GDf;&>O^90b%S&R>kZzvXU^-7*hFNzUqn`;ZCO{fpF-at}g{=Cra31s>hVGAc}h>(6&%aw!1BrV`~3TTE#v1-wsPG(eP@d5c( zx_mi}w)Y7L>(^V+YcS!snHBZ#CMciLhJ<~yO=MapImyxT$F_{uuW95d@cKs~sb4X; z9uAcD^jH6Po_PD^LLZvuGIJkC>5{=AdDKn$^DRinr6xp?{XN!w>W}MRZ!#cZ)JK31}a9*8Yh$G z)G*#VL3@yn5IGA~nG|XBfqu;lX;kq1A3c&%m&=0TC$+OkSj$q`K8%4Uy9fx{a_J-X z8IzGe&&d096su=Zpa(L^Shsx?tBge*`{`Tw5TE982495Q(#epij3mDC<8!cQNWw=^ zYbbxv%96h7DKvU7jr`jc_MFR#eBpLvm_&nS4G@*EU3|@RaIWuj^%eA#9`csaO3!k( zo@Zp{wO=D*?Nh0PtJ+=KgB%?tEh#xD8^v1fwe@an8qCM9Lq6Et{|u)ZF4I^E|0H~| zorL7`E;6dwlsVE?sJb?>QbJ0UDy5dEvc)@4zJ37#(MV!k-l(IT%&^)xQ8rbrHsmV% z8Vv0l?^*@AP~82{E(}4IDe%&2lO{i6zUL3eQThVZ2%Eu(76!fILqEOT_hbaP=0Hyd zAdnOe{BI!9LQ(v75T*)!O6JA;ChgYZBF*U#-#6WY;I&-i7U&&4|6}RAx)oJ|DEyZs z!y`ddf+CXS4G>I#tyxVz018|z+@-n7G;Ky;1S=k z|CqsJ*lztZ@(t4n?;CTfSb^!itq?pY@$|qgXXE!(srk|}RBr6fZ;1k4Bu!bwv-7O*- zdA3-)eO(-O7x|*?B*}c}W2RLTnjcm;tQIY(ER&nShxs1xbIRtc3u-t%>a)`*ZLBM5 zZfcoY#(jjDYUGlgN2MghUgO~+TKhi%?N{UvZtyE|GUH;M5cE-dNhiJG#I9!%lehL+ z!m@==iYKr%!er&NAuaPXybYVtGBI99Y$n!WzwG40OtuY|mUGYJFDTIiL1>Gev5D;n zIe*BB`m)mWfl-zRlL@l03c z{BV$FYpU%86PupBi$~e!z^sv&b$21Vl5?qP?+QMpH_2t?{Da2U{$ zfSMtNsi7Ltw0*gYcA?7~u1(c6)a-jbXXc&|@8|Lim+J#94xh5I2blz-Ui)0JP2st~ zq@?Fx6lAWO))~m%BxRF32j%qQ-^G$wH2He>+$MW}NPCR?t!VMkhW{x}e6ZL7di>iE zkF&o$i&!*dZ3@yrLEGf9D!uT;tVlI#u@n2sS;^SUvx-{XaZbC6;pZKAKE1r2&n5iE zrKBNpcB}k2DZmmTQX%7u2R5Avzelv$te6jk>tVX^w>#}P4{HRK7!KY*HS!9aLFD$5 z-_=*=-9l%LkHAEIez;){7GdEc&K0SOXIX&ud1YaSW@m@zHF~D%a@vzk_ zsv6GBFs*aE_VLEKPCv(e)%A6Tude@A?(jK3v)dh&lpZX}<-)v@&z@W8of>~bT_=OE zD^Uy0RmDH$J}h$leP@pwtBTj?!O_|Do1*31J8Ap;<;qdr#mvcgug&s=Gm@i<26Q}d zV@kkJjb?9uMx#y8q27}>TyhVZICk(s#&8cdr(=zw!LVc;!Wyu$TwSe|YqU?4&d(4R z{aOPI%TzyzP22hDJmzQrgVx4hRl;RTI_Ae7p6ICB<7f!q@5vUguE{1ak4B0;h{sO}Y_{Xhu(>z_){q=ljYDQVK3kHWm5J}is0)hW9i3DAi zF0hb0Qtc5pq#yJ5BW~91kk)}|L9fUMdz}j$x7A|$W>NgNTycL-J2lBMC57-?;wy`7 z$r@McU`2+qA}A!Z2&ZY3ZTj4SWdaujhlpYo{)x!ODq(x_ms;@;Fi-k&Nu*YMcg6}L zvqE7BuYI`_klcL=D%pEi`eB3>ux#Djz=xgoW9nLYcOi-UKssE{XG~dI{3cp!<*TLY{bJp=D z7s>A+XT0UQCd`o^-O5XEms1$8&9l0Z)fxCNw z%1j^I4Nlw!4NIj*5HCAU%_W&p4A6@-%v1C1yrB#>*5uloo)*0lo_ytOJbrqLpa(pv z{YwLf!0KWMtFoguN6Wm)MggMFr84vuto++igRp@go z=mT*tAn|7Hn5P{z2|2{&IoLvU1C>8JIOp|KJkaPGKfW9*VY~dat{aDEQQj(x5xS+T z<8j!1edl#P0DOht93sz0Rj|_P-0XMLAh{pt1^zN2Of!=aD-2jH$9I5nSvo=LGalBW z%EWKfYxs+6@nuBza|1@HG!>vSa3Ov-VEP5u&UK_L5ukc+P3|tU$sI_ptGb`Bs8+lM zbJ45J`u01L45(>uFT;oc+J)Dhkth~7it;zc@b5Gi12QBCBVqa^`+`7s7WyUeX0H&& zFXbf`uJyYzQ>`7Lxm*wiQX$6oR+Wfxpy)xJb`%|+{URX(86xw0KJoc%I zrZZidzgCt_hX`zKeRe{;4pWA$cw-?PL*W|jT>nCb*d-+MxTig*i3#|C5zIZn@afnq zO^7Y0vO}wns3DX0%LBxoJFM`E4&AAIvD&F2w~6(M#6t@6mr3L;rYfb+F6GAQ@KMbf zcs^>##QI^xJNo>5vV;__PvsR=is$6KWKrxB-FnIXEGB=M)&brRQ-14?} zYl{tkWV#AZBv8?XZKw1;nZ#?umc1?Cwp-BCGt4+r7`+IV?a=}09O%ceOwpsY4JO(7 zRBe`)6)5rkJ@rx5V_t&V^FM(MAr05$P z_ZlDdie{UB6>g2OOM~6)^j|+_4ty7u(;HAFr2Y@V$K$TIZVn#ad(h}eZZK*Us`Joo zsvK+7RjtcMhnk2|8^AE~F0+()FQmRH4 zBjAX3Q1Q}Cypd7Y-eKxqT#a{lJ)Z+D*~dtKMTWtU!kA|7?)(x|u*4{|!*CtC4pdL% zc=x=b;SSNyBWzo94nD0-08wW5+Obfngpbh&wJTb*ce?hU&tR2x8UTWEyYUAu{#~GM z58G@=&g7%;nvpyi^Nw=t0EY14zMbI_Ozw1vqmSwL$tWTF^CpQSnaI?M?Dek;15dc0 z%EE-1t8=9XgkHIV3|VaNP^W1D*e7cb3kVxtWea!xtQq3(bw*}yiO<0+u1&OVj8y|o z_2~9qKE<6+lE^sl!6mQvvl)L9Y)N zzIMK%*hDwcn!=a%-%FS(}Je|D&)8%qWki_sfmU6+mAsIrJkR=PGu2 z-q!1nhLQot!7s5~^?}bQ8=yM?tizhl1DTav|AvxewG^D)Wu?0#j* z27RP-u9YBm15e9e#m`))WNxwN7hvs~AB7*ofu8(%ENh#OIvL|c`mXZrH$P46r*){D z-RZQWD?7?rI;2MM8=3waKY!R2>i66l9AFOjK#Ps)YvUN0_)$K%1D^^$>MOfSOqGbw z34=iiwcG1W?gmE!iy2{XX>;(gdRHf&LdRqNw~fjh7*BaY1;QQKp*n2yJ(8ggd0#pV zz|LM2e8OF!3ib{#VpdU+Eh0O>L<3Frx{>$)9hdrcJ4#Pf(dE6s$8UW*bos6LUgD>k z%zTa~;p|bKYwzlg#9S18q?B02PrJQZo?uS#WzCWb$y|i0({J!#A3woeIv7@r^Ai`P zCX#Et@m148ztQ!R`3*(&(!w7-y_&vAwtlS}!9jScpWKqQxhq0>;Q<^Y;RR)n+q9Yc znEu5VkYmzh@hk0x~)ZO^4;< z9<--u6|mPX!}tw*td#o;MzpW2$&V`<0FOm-KW*AGJZeWK>(FA2*ZN?}$om-W(~J!^ z;aEcPQm2ofu(=m11aFzN@aeaC13K?hAG>lP=kDvG1+qBy9MZ8rQA~OQ_nIANA3iV0|b9>N|dqRzmHibjx!+9N$ zN8oksaw{C4e)$4kCRWemH7GBvH2I%XH@)tU!ImQ3jY@dtCQ@O^ZC5ha0ov`;urIB< z9m(D`yRKtGhE&SO8qpgmmZ;hHw^6sg*prEB=y;|$jKgje+ukThxD{W}1qDB+jnNuo zE_;ZKbKboNJvvR~RXx7_PC1cni=W11``SlVGm54;KC&^C){28|?L}@*8p&s2k7F7? z;?fa9;CTgV2#efrrNWO6`;TFySr>1yY0zFKn4rO(7;FQjwnzFHzAATT_@Vf+a9>tW zxuqAKtTx}DC1hB{Qf%TIsb*bvzduf-V=zXqKP5L-853MB2t-kW?(__^YaZSZr`icpRTheX(78RKW5Y+*G zO>Q-=MlFI!wshXI`0so_<_S50^!rX`R}ypG#?`9#J2D{yE{^gj#!pq~VJQZK`sFeS z&x4HDnNF2_dM*tw1+++}=p9^(YKI=f7XXb2ij~1gzQ8B_A0ZgIi92yT&|dg~DX9vB zPD}LLpOJ(3!Ve(83}8d_^>^+Z3i% zW!Au5lbr8e({2`$WI(@sFbVxmDu1|^57^GP?qzycHhM{_b8~cyTRK6VncngTb-aEQ zpa=UDll*aq_VnJlT9^AwPFgPZq8Md=C0yxK6q#mBO7*n-*?+DP3y^YyL>5}WW8++~ zE5)A&m%GpH;k?44;?Q9CzMT&)A#J!DnsVCR-m#g%-17laC;$ayeCo;zpJTj$BgQ=0rz`kvm}-0OK)#J~d|s|r5z-ua9rZX` zMg@`lk0t&g`qEA7+lpQFr}>5_2#uvmdMZAKjJYoZsK(C)saPC|%x&s%SZ+76kfHQ> zU-&?XRFYgbkH-=&QKKuqwf-~KrpIO84uWp*9_x_bUS-hVh#xJ!l#YqX?H_d;CIEY$ z!9L&YTl<%z!M>Yms`&->t@({x{$$Ti^>I1TQqG>Dsb2PB*TV@s@T&njOg!iMh}!Xq z&L5-Pd2+xYB&tRUj;YFjnXm_{(;Xtm)DqN3mP5aDdan$&y z;$;-ClMgm9qm;;cwkBk%ytgnUx@1RG%?ffq=Ut2f{8?SDJ~WvZfnld)&F>Lg1wssR zX=^=)b53PtrRloikX1h_|DrUHQEiCg+K4gD>*+@TG(;R&{U;^3W zwen;}X9F|E{(^4y+9Ay$_o4+V!;`@=^o;@2Nrf?O&`p|tye7r(_A!&i zbfT84_R{jKTgdC{JaKkaw0adHJsl||S(W9R?*gOE?LK+GE67$<75g_(yuf-oq7F!e zj*imuazpGSvS?u-GkQ-+zfMAU35N$VS)SilINQLZED*(4KxJJfRo5$dul!F9Ru$M? zDa?{pUDCf!?Q3@?qnFT94A_lSvYAycl!)f&QWr2QeqqPRm$#=G^^RZOk^?!DsklS3 zI5|mcx=0$@D(iqz6M|@X_qNwN8J=TC7Y^{u+-~^WW%MdTlz0A@J{{j*L3N&UaYxdh zwaq?H3KE3^+iqV>Dg3BGX)s1klFzCRul=ubjbxENc0 zvZ*8n*^NquBaW>o2O-k{lSw3dOFxEa0BCH#*-(8HHFk_ef8iZ|`%L!ZQ;55koB-Lk zUbmZuj(y`d)HE5Hdh4%KkGTOdn!k9wYTCS`-Aq(+9+Ca`5j;IGk?g)dp(_j7v%l&D z+(X@4fYvZc7(IDEgNm~H540~iDrnCvS)c(v3V~e!sK&w&R~$1)%jWCsF8(u9LOJ7C zPi+gG_oPLHMs_%QUv`>y-QIhZ(Z9Jl2h1Y8+3{Jw%}9$};E|P}(Do+YGPS`!hnwr2 zms|GH7xsu9{ON?*OEKkFhi~?}rPRW135DJf5+B_8P~gUhL?a>5cUFosh`vvLg;IP& zVjF=>NjC{`ukPg}fP+!nsUaul<5c@2+^UW=fA59SKlB&YNNdH%ok_xE1w{O64nAx7 zEqylm?kGOSR0U(wfi_M-{%Ln;mA(QQ?9IA$V8`*IPSTx*=pgxgUh+O`Umc91>+YtN z#U;CoKmHmybpObusJRqgSd70Mf}gN!K4j#es|qBrve$;o?|i|_!uRxiUAG%Kji1yq zL7u`-Kaj;+*vpz|g!MlgwTcMs^kYbt?t6D)4m)DTYs1ueL#Ov5+Uh#sdM!zUEjO2^CQQL zcsaP-b~hBy&({n);egb9_3IaXanaZN25%7SLT#xpRod|XU;yaYVui3Owp)H#uT zlH1iAbc2O2s92k25+Bv=;ooyqBT>pYP94L^Cv^2~Q49yG0aoFaA>C%F6tC}1)Grnj zzHQ1V3o_o&O_8J3{3}UZQjQ~UKqJ|q$@RyOZL{`zQ#F-T-8Ec_uQEn51%<#utCByN zYFRaZnY}*=?#YI$3(oUPIEjO~Dn8ob-WRP(=6-$Es8^H8hBlqztZBx6H;P{#lIO)n ze?fg!%Qq~l4&8<9nX-U74j}-m;%U_^-+4atpD<^KI6)sZSpUM1e|0^eA~F%{jUspt zXiA?A{&(cU)1XKNxauf_?Tw$|pKkYRc1&NLPG5MI?eHvfGPEbjp`9V{s0CCP5kSJs zgV%$M?2UrkHm{v9e&_Kh1f|oWM#9?=muTK3rZVfS&K!#~m^rV{slfG92(n0L$M)m7 z?$T-AvGATP9>1?h4klaLUoOsaN4wGm4mVE{NF}KGc_KwSSu7X$P>=y1xy#D5*WDOT z30hC90_45Nft=GS6xJ5I82eQwSqv^^WiKvV*$)syVj@ZypB5f^OSPzUK+D14-CRz2 zwl276gWR8vsJqG{2Y1?Z=J(pXPAp)ggU`Hs7{#@C8sPbb zP;W59h#YboQ}FDP@5k}v-@Uzsa#6RF>%B#`jy2acQ4BDIS}%9rd%{X$TEn;K8$a=j zDw&RO1GllJe$F|>4Un$qxjcDS<&e5)vTt{zc8f*Jy$)gTs2qEr9|7(KaZ5>DHLNXv zR3h>oQLghN-3^&zE3L>3Ji4(Lrf2#r0iy-`KUnEd1^c*4NX+$+qLE&TH+TBY0`q9= z!`T-PyX7*xHor752`HQMVgrNhSY}kyz!y~)R~KXPyHmZs*mK@aEpFFO-n_ux(RE03 zpQVL#NmZ){;0-s~z15|*-Pjy-=zdp*CyG%}t6187G?Y;>oUsNeiok99LlHrPShv&l zvfri8JV7!ZRwLE6gIE){EQHPYi;B>ez_>1&LyzSoH@}To$toQL0`tRS6g~x6m?@w> zmPOSyd-ZU_TBk!0Z*9VMuY&Rmv*ASep+;=Di)`Bu4X&(0pCsPZ{OeW`kozzSKK6#m z!Q$3mlHi71a~6-9`ht-&d=IWHnM0JdJK)&-@1WdoyY;>flVw#>u--2vss-pW-Roa|vj2Y!9)^U1~{Mq`S1o zp}nx?6&V_`(5cDADF>V~I3Mi-O)<+js?J@B^;CJFaG?FtIT+4DY~gchAcHoKebc)`^5F5c(sO# z%JiIHP3>r^JFqPF+qt6d6f(=@A7FOOpIMW25c|>P{?%k&Y>iW)M(#uwAh6qUk#IEj zW1Ap5PxH(E+}-8;`oXX)@a~fZ)SurN?+fBt-P#S1uu;Xn+28P@@E)MFqfs0g3e<|6 ze?lE=I&_EML$OS>c%DabKt65mAcw~buD8dt>AJ3k?H?1g@GPkE&IP*0F^9uemPCH9 zKP2lT9qt9&yH8613aBW4q-uQei1$NB9d^89A2GIR zYwJfPw~jEpZY1v6zHYr<)pxt^qP^s}h#H}?5m;f1XQiBxuGSa6;*#IHye&0k2!?EA z`(F$y$O}Bg{qZ!?pS%5*o{#Np|EO)Zp-_XB@*a}Gn1+I>YglW@JT_6+nY)eqbt!+R zGW){XD&a1NhxXaW7p1!H*%8#--2h1{+lC@0u?Vk1IrXq)Zuo-&4kBO~{%V85^hHG$ z(00ece7HQ9ao)}eRfvNa@B2gXzVJ1g(4c9v4=^C2i@BJ-S;0T<3hM(NPeJ;_AmhhA z-(c0SVZXB(!I`EX&DZ-r;c#G`-MhPkzN)=oH>}1zWTT}ikSL$ODS+hmEv_6GfhfIl z&!7YnXxi^3gh$a$UDUFDa1a0tM)P%>1xASgY_wMr!6=7 zKA$?0jMSg-+1^FRRlQp}+e6T^lYZ`O+9sMBU33oD(`3xNl(oq8r%l?L_uK`p ze0S6g6#(mfglU}dU8H+t{z9_QN@`hDl?yfoS{Z+?m+ttwPp)2NsmEv+b06Uvw54VT zz8A90eKmhe(#+rQ@$74@09GnSalg+`MI*fr;9bo3G(cC zR7px&L&PFIXnQ&cvW3FGN}_3Vpn|_vC=06P^uAvj2hUEQ=>MZH;(Hw`dYdh7vX((mhuXb>Z`srN^x(h7c%@{es!ygaJm~Kjm_6w^dUfYs z!e@NmY7uo4Sf`a}J-Ay-CAq(J=RvcU7y!-Ol=JKMUMl)a8>WpKM_%sX=`^WULh1X=Q)w4V6$ z@>-ckDwiY?q@Vr6;9v&Bk9TVK8By#%sP;<|n&MKw&{xi-w&|HFeBf67YOX2CN8Gbz zv2nh1ON>tO-Du9&mo+;tTml_;hI>&dKM1(t5oK%aUve3&$_6fU%$*Oked;*_8bZZV zA^W6PEbjSH=4`zQQzeqkJ4*lRZ-(%KUz>VfV2MVe!wNceu(=1Nj=i70n%Kse;217P zC%aGN%og=pw|$(&4`89H@sD6XiSJWL)EkQK!$PlUCgNhGY&26V-$lGvb=#QTHIf@ZOX@cAD|h$ZgS^y?7Zd_S>t+ zJFfIa##>Z#j1=j{ACCKrOatpP1+)7WO8pH1-%l0`=AxdtKQ>9>GTS+MA|kCM*mEkQ z+P|Oi1qi#}BoW_5wvOX6RW`O+`yJ!_1UYSvvXFL@|Ghr@$b2u4^9@zU%1=BgK()F) z2hdW(9Pn*dT2?+j)qs`&kPIZWK77ew(WNFKS*1tfKaTy2q!w5QR#)Vr#&DvXmX#UN z!ghOGNZxHJ8M_OT+~A$uDTkRp87oO}j6LxuXk$G4Y^Fx1EqC0DegPi4={?Tlc9F=4hGoO+1uH{{0I%`!>|UO% zECB*ehG=kx~9A^oDWCX32tHR+M%jcY* z(n%1(QgHp4Q8jWLe z%H23Ii7!lpI!W++w%fA3f}Lc z*R|l zhj!sAgWr*xLb?9!;MoJ2^%Q1byX8(jsp1a~?LaIo4s~LsvmEWn-BkCDanAnGO26q+ za$-Z>Ljwh>$l##jwa9ZG;uzDDHFNVp+GK}M7mJ84-h}nFeF5Qi z7M<=O$Y8BQmQ`r{(U{dz4dim)sWD$__TEvC9J0UTS-?t-*Y5Xe1i;vuk->y706jHF zq1CN@942n2#v5D}fE7hDiSHx8PM&=fzXYD^)qdcRg`o_xzf8HUBZ56ZDndcM zI2{Adw~rOvY4dW=zBsyhFdNch=!rh@UIS6 zx+{7XVIOW$=SO$KLl@<;bTy~ArLhO<@nU$*U&ZH9gB0Mo1?*+!<5>@2uyIt|0M7P5 z+yi84$c`tJ>X0m>jzuex_Hj5&Tk+*A$S@r_6(LWu%9upe?5`)T>q_+e9@pm{`VUXb z(#jVTac$qHbH3VF3so5H@Ro$tI7jKFlmA$qmhS>5^XJG06nq4!|{1m+!S?s0VEs%PbPg4BA&pift}WQTm)3xE?{k9Gh5K z6_H8V@D_S#E{=`+98C`ld!@&9ePf>IotnEcze+Z`(nQs86-I z(a47!`^F3&PUyN~|K{fmV``x6;r0kFR~(Chk3nz3RLVQg?oa=OClN=3Ec#QxXc0%y zD3HiHCwx2(>w0l#ht66ac^GDgZpM~G+bw9y6q7+e5ADh4dZk6x%$x?!M~{G&f|!?47#tWh{QG!brbAhN!Z|wO1|2ytT~95U~>hNIJ#C}a%tTT z&riP6nXXMu!^RIyK=b?4{XJCaq|L%@4lDl0Gu0hC)@2lHMxNn*cm|a3M;~MZWIVT) z)uRNSc)T+QIM=0qA}TzzYmKUTIO^Zsjw~IGpYM|pgNw(>xA7gpp`+$27nQs3`<5Ns zf=po>?59`{mZ#C@8ycazY!bdEei4qxtsSfzJRFTun9dH;fQ<#919GWo3|7^Twlyrn zr)5v&Fd6wdZ5xuDi7pm0`o8GTK{GVzKI6SiVbi~B1_lwzk4~m0^yC=((|1;HFRJc# zkGjDM#{qG>kC6rK&Yh)=I(VJb_3VaMWxO4t=b5(;`(C~lunU-#84wgpx*V^sh=9v= zMua}k_ijD8O}N;>WfDCU1H%_AGgMNY*GMYt7)3FR(ny+177x?j7x7Sqz0SwQCyF+MAS%2h;*+5~+%JXOP&_4|tZcMSOE5zh4d%$#IcY@8#BZ7(`D$sSBvs?T&TM&Z;3 zcNitx-g{3zUY?hB)lLC!)4g;)MUyN!N`Q{~PN^U2;5xT}Iln(`FWh>^5<4u(iiG0A z+ncCGeA}&D?n}|qs(4vHhn*+CsP$M)A5iDN{M$&gR0PQc)<1F{Rsi52fuDTo8H{sf zUeWlw0wA{F8;xAH?N@ty*k4j36^hslst~{EcF1Vspf`a&yf4?JJ(w06dwWIj^LtKb z@GrUax1={Ka@)51lKkUmyM#;J?k#szCYe9XY6r&M1LA;poR4lVH%gUH%--DK)&?jA zUQ<3a*134xM$wt?w+7>g?(^pebE$_7+~mnFpKq!C;x5ehb?_<00e0wa7`oqnMzj5y zWS<7!!o54}PfBS$^|Wj=G~uA#w7=tbCxFG3g0U1Nnf26#PzF}AIlF~1bT7Awi z)sesvQg}2a{AzOUVu&q%VWm|)CpCRM{6TIpgf#8c-b7P*@zKESQAT9Y{?7cRGmgjW zB3}7T^g0Rr1hN`c`kJ?BNpdfk@)UTtXTSB$YUoRU_6;6c;k#6=Hof+;vpKh;GSa3u zUFv4Pmf_i0&}^il705#d$44^w!Ew=(3D`no$E@F`0 z^zbco^FFo+d-b|VKi_W+dx6`F+ziKp;Rzs6uR^d#@If${$#595anI}Cp*+4zBs!(x zMB>)xMXkZjFMr3=8^p?y>|-FRd3pKu{nTtUvZBa(b`MYN^&f>Jk9vJd*NaY<9POCW zV;AMU)b;1{wYI4heIl&E*nhjWG(vaNLJU@x@X;nL`leRJkNH5914Axpl*rcb%)bYq|IzCU_<2M1HK z3H6{Lvd|k6Kv%O|Un5K$PsKquZ}0)yyRUOGT`FNGu1L4XU^*$c^X$9!3+~sX63j-8MabD=j z2{$rh{PHhv?`Hc;=KLk~tj7SvdcE|O!C^9Dh3g+jn!}8+_V3g@sm7Jgce3>gaeypcM->Fov4eXlqC#4nihx3kby?F$`YAl1M zr?la2nf!~rs5`+wqcy?vP*XQ>XX{U5ky#V4VeD{6#-Xvf!b+GS#YG zJh3x~0|$*wgJb9azf(YBu=a@|~=(Ib9c`0o7?r}Eo}Xbw$pH+9d^K(}R8GPeA$ zJ+R*j*pP$Fm3uQ>%Nl~hdvU`c)ibv@Idb`1LBn=32|}v2%Vbwccx<|~u6x$W$r^Zg zzb@yiwGbge{``o@5*y2?)0ADkIg1e(`VVM1mQ?mUM)Jyf{VkmAU+Keu3SI}nk>R0l z==dfI%~I64;g_jmyN0;7@%{M)dl23x%Gpn>_b@RGIj4t+`S|nvSp&hg3V+wb73I+$ z@*VwP6xUDa^RCz+9)0?VK@8+ScEV-YtRGr-&zJW@yKA@ct5_R7BC^#{t$#<6Nq%hM zMk*!RS5n%i#O-6gMW(KeJ=jG~GSbcS;-WAQ#$PCsi>t$($Z`3wRL}60ezJEwhIe_B z3uS+b)BHY_UHzT(G${={wx(VF*R7lpKOqH5C7DD@f zX*vndZ%lvTj--=`g~hss{5^e{3@n&uZpZ8S5~IVldaBaLcXsv@)koXa$*{e#Wj1s# zV5-B>yqY)Qi!9k~UAn^=43itW=w6vWBMc$YDE@{j4%cr3yIy&gBO?@h)gt#?_1-u+ zJa5AZZ1%r_QC{JRVI3r+W^=^XocI*gHBtMq!Q{)`bZBAmexHtMBRvyMfV-*w27bbq z|93w%B#s7WKUnlelQ3_y@uZvL~pasC0Pe`x2U zPuVJj_u0i_pBWgKf07OT7sJW9Ieyn$yB5iLp}SAde@qyx$5J1>f7$%80Su%pIF#w8 znOb?h!DSMx0Dk9OAlSu0nele^e#+-%`Wmh=@>KZv@8%o?Zz5cw|nSzz&*`DH_++%ahwem9sj(>$)1 z=RpfOl75MIz9foOq)lKE*dYvgZ--&86%1q^`H9;*oigtIIw_E^dq+N9GwwY8hHLcW zC=Y{40qc^pKcZJ@zka)3RW#!04K1<m@Ax8!x0ce-|%)z|l-LT)xSiH59r7miqGnnHoK2Ba8Q870)*0 z%VjBPNz&Q)1p|(eZQ<7Cz<4h{EGAU=(<3>yV@3u~6a{Z=!ryk_dRJ8h?K(t^qF;x} z9ERfFwh#b5=dogU)1eINiav^56?{`P_|KBJ_vwGX@iv?{9X~ z>4$~anBOx>F~KXMk~otC2fVH4>0fmCuIRcXCR)l@8G>Vd9S(K@sP+lw%kEzHX`b}V zm#dSQHxDjkqnMz1-`Zh0{$ZM0Fb4u7L>+$g{c?~-_ujiFX?F}x7W%`A_1abT8EH8M zc+_{qT8s>OYm832w`Q?xIEH}dya;##a7+3a=V{Bvk^Vh~*O8T8fq!bm&-XUP4w>%E$ygXru#s+45w_EgJ2XCTO3c{3mX}I$oITH+gJ<-C>A=szJgo?Gb3&HG zI=P+`G3kmj!)B~0CdJ!)`|^tnT;LbL;^pw{f=)$gs`RNWSg2zNP}bngPX1GsFcc{5 zY;aK@KP)9bv%L)pex;6iQx^2{1{MStXcc&stftx*JGb%_eUHQB{`}+;?Q@t&kW+NN z^J-CD)PxOy4d-P3;m=c56^;gbQVck+_A{{*_E4;D*s6a8UJNPAXHTB*L zj8XTW-hMPdtuk_W+Nynna2QQ*r^6_CBnI9M4Gi3!toxqZjH5WQusth0W%-UHP75v03h_Tr3Oh1c@B}{Q@e_yE1f;f(& zo+6kh4)XZQPJhN7!LwTjn3%lDY;Kj>+V%~yFQwlIDIS5@G&rc0tUUFka^2W_oKixv z#ThOX>37nz4>GxEp^%~l6R=(i)Qvg9@7#{QzekWvh(L-DmNv1iojLR)RQQ$uG-KEpa#|Do^J;qG-xDQZ;b!8LLNdE(HyAuR2CmT1x z;Yau{LY?Al8J)Ub&>HvT8C{3r1KeEN$5M(m-fh=VPZ7OauNc`UGGps7Tzz3ebD@x*AjX2)Naf>+i5;X2=mnrncIb=8mU;@K_o_Q8@{ zuH~+mhTRWZuE*ExqJJLGs^>lK`2=F5GB9htQ!A|AhdHbt^NK``p2Maa)}{iWWv@Ap z$^#zz`=hMGncw{kJ6d}_T7jZV9{hXljZregpuLNSV{=}a%7e~GFvygHKLfd9BGg`g zt@-LpY;U_o_2e<)hbul{l{(J}tV#a-`T!%|Z~1bFs8_B?C*I4|RxNic^!9C+-WNQ* z-`$iBZa?RRNGC!4!~pw{yVE|T4SlZTL>K9`aXXTF(#bw!U|;UBKBLrc{IGY|VdKg) zdh);)Ue7!1qTuwB$r!>qdTMY4sj5jbNcrl&T^hHpNVkl3dC;Hx9K$(|q128ScQkr)mX zN(QQ-h!NHCbznlTag|QUGimoutHFXBGF;2!6E+IuY|1i;sW``-q*6CHZ(CqRrw-Qx zU4fd>Vf<)s)q7>>S1lf=04)3mY>$8bPZ!COdg1SA61I|WQ>@;BCEcLkd#g_O&oaK? zjeAbD>27MIbHDY2_Rp3OFPo(OQNM!L`rvl=qonPN>(4~1W$i?x5S`vtcaHvYUzrfM zNhs(OJVUTL)?m>oA2h@#4st*`7^@Ib9W_L5!u?|aC$OpU`^a1BbVQp{mr_(waY#7S z*9-`Yw<;mF&M@xLubIergEv(oV?imexoVwmM6#}ODKzJk}&*r`{Cdpth}%oz`c@gg%iI2~;rgXZ6}x~D$qtsDZe6; z7@gcnrgd!na`@oTeu#vFE!kQuo*u#=MKkhiHG0pclFaZt8IruNbj)dsR!%xk`2REs z(PiyOos%Z;CjA2gMZRJ+FcihtvAWzxR2%p?w`X))(6r(J$u+Dsm9rYqbzmlhN@Nc*>dqenSK`7MQQ5leXX0bU!@Cx`f#RCkf6Bd2JFOG zg5f7?LdUu4|uh?WMcTO%?##FWePOYICwgQwVOw+prWebK+OSMT}KTtGGc zYwGdv6-=`|rN03#_Fe3v=k|p(Z6shC)f2!p?K!3Ull`Qs+D3S34m@QVp!%W}Xh9RF zrcrhyu>GDrPG$J?|&-B0|!P{Q*6@@} zw1|Fd;eo!xlg_QiN6e|??K)m;X;7aBdfi^KsTGDsXG(tiMK8I1rR|5=#&TlFx=<_3 zDv67d4kk1FSh49&bl>V!I&Id{#mx+S6ZnGJqk2lErCs>th1`Xbvxavr=_9wfTv?U* zb3MaDIkDI3Isft)QYa4WUnQkc9G*22DBl&=$W9cN{OOF4c7R4xTbeiLCF7k(hT7K6`d#jhiO zOIGa&6z28k-$tt2Psu4oFxHRx&~P@H(R9^iZ*uGo7l`FZI+<8mxLyk?d*qise4-c6 zAHN8^a8xACsDXdt$bs$f{!lHcoQsA0 zxqAysk>P=DS~`4%PfD1Rh(pajTrO&W%+TXP!#}f`AD(%Gw-&!VtU-s2GX1$*iOU}C z6XnN9$2kh8M2@V1NV)4Lv-i?^it z8WTAs7mTISD6iJOxOqW*#ha*4T!z2CONQ$6{_V;nbO@Ir_PXta{`jcl%MW7h70P9Sj;Jo5Z}%uiSQJ~`{o*o7YNH2dCF z+5b)Ihd&X+3&z(419qL_9;D|>fE&y709rDJ8^jDg*#n9`AwEA>@Sv?3$X6nqCU>6! zr>iy=B)K7+@3tV5Jkj|;aSxXPgDVLoUI?u0((Pb_hxOe=9A!TYqRUT^Y{QM_TccUJ z=aMU~*Za*S%x4Z>@}1qCpZ1?e5sC00m|^?2;?sXNO4DRl%sFlKT(i8gZvEg|Y*&!n4i+TqcGo|Ccfdyn+%#_TBR&_Sj zFvH}|R+EfFlKwT+hs!+OxchCMgp?vI=MJL~ZD$ArS>6)I4SYbJ+H)PsUG#bU9rYjN zxd-d~;T|w$9?fe3y3QrfU1C%2w5T)948uyUKH>W{@MO&iQxYf^jNr+F7IJYdXD@perz`)ak>MMSu8Nz>@_4Rd6Q)D@gWP=Ik;+Ijg;25%B-S=nT3%;AytUsm@ z%M+eeIzRnAj6KBXH}%Za31&6C>UOxJ#~+U`cwEW_JUPWTYpH#($KDcT=gj#!sE3|| zbrT|kU>}nwn@5`{^ZJ~JB|VgT>e?hhAhMZ-@vfj%OX?mk-H0({#)D}`KN}vRGueR> z`bD3CYG2O)mp=Gcfi9x84aoXrK5|dl$0E+m=vk@WOkScM+z?)RV*FSp#zvg_u9p zji&Eh6~XYX-_I%x7}?cLADh7niSK2P?nviCS+ARvF0dBB8R33ln*1xz7$6!^_&Kb~-tcA~Jx+2H|E}mC!dE-oIK~+-DMwAhf;O_}2U?N$_1ByuQ@5SE zV{oFwJILk@L2vPmAo)gDotU?yIEpXbh4n`i?WrKmEbqM&4LsOSDt{SCR7&wc^9gq; zl0t~zhw?dgXFdPXZyi2%CoqFfM8u7zH|Z?D%-@- zGe`c#UBm5piGXL%=hI(ZQ)4jfQ4ZXXIS$CI9)*UkBfQ&C0?T%e2?5&T;lYrmy1AWL zEfx6L%D9Bi0Fs&cf`J@dS)56~+)rrleEeJj&qQ&~cMs6};^$1yB+au8J6=Ee>mt(Y zT+;8O?ki3}Ci}e-dvK#D|G27kSZZEeQU}oD7*vECd5E8THGs9_chhvR<^upqxM-|0 zPr$i;1}cpAb)%*0i;E5Iz;kF0{vI&hwCDi>dHUrULfs^h-GozHP={65f1*X>ZU z5sfeJ8_$jScrTakUJ=lsyL2VB%w@@MkA4qz0+TpXWyV1E`E(97;E=73e&ik6;EN?=RU%u`Em0^JU!~CfwI76YIdI;A#z|3I%{rwv+3beeI!@aTBrd zXu!ko@BF!aYy0l`n>+0*peBTQDZ$QO==QLnvf}Wd7TSQ^f)GheRWs|20WGdvK)ouA zSAQrYajmv%jaCt5I!{mT^SbT|5@}z2MVf-PErO|~VKMj_|1BR6M#Z1w8JvJKT2ZVY z*W_K`jry>kD`fMdLy{`E0ElSsLXNpF;k_o35b7>PUjh7lv^|XKpFNF*1aQxb4#yT0 z(X07$EKrM~gad=N7pS5w*ePUgx=D<vueqsaC5Am1zFUK4A2F6yU)+h z_Jgx3(x-Q85pmyFSrPjYO~YFVRj)ik*fs4N-&MamqE+6%2jmvn!3Ar|jV$vBzn|aJ zsYz| z0W5gwyi}lp>PU1!2LEqYt*+>fmzg9Stvm~s} z81#a2BMTdtqE4>w4@`6rLxuJlJ>TOg^G>foInNj<@96g9?i(+g;fZ7~^i6)NCigA- z-~QWnIfi=Bycbw?z(YV%*|-DD#i-7*TD3AFZG1?ZYcZW^`FwdSElw40qRDPh%uA0R z>ij)14J&B?QHX=QFDn5#pkymh(w~A z(>H)83)nFGO3(_?O?gOAOMpWsa>=kSTR@(b=h8Q>^WmUSi15R;10{i4U#J!g`yH;F zBWhM;J#|T7={phH0araoqlNp(E`gNPgN!20WR4~F7j#*b*C5h{BGYkkCP)wUP>lZ7X+NH;bhKO{Yy zKDzPQpBFt91Os1k3NFwd;BF{4?iW40t7n2ZW?@O7nr=TVdCAb(v2fbEMO&Dm^)PkA z?1ilDd4`|+$`H>7fUJ|XlVL9T6WM}vs$KXjUP^3fcRT7*xfXAYXhT(#W?$Is8eL37 zA^%Wb;e^mc@@y~UtT$kG;w?@@M}<|4=#F&e^%pj3?Bn}NBZnf<9eIwDYN69sXzC=* zy8M=2F@p7Hg=0!k?{ScS^PVX1L}A4_?j^=&I^I=tVG*53KSTN*;eXEdxS8@yw$MK) zE;P($?Oxc$f{QrF-W={(0ZF;NyVwOTH^Gnl+9rZ%zn!+n^SDO^xTJC`KeavHfL{m9 zncb+o7L(dGm-BSJQNIKnSjIIFtjH&!hJ6HcI@T&4E6uKlN99aB0ixEloW@>U2W3(E zQ#3GfmE+s4!_@dQpNlI%^Y;@RHHJnsSN4HswxxE0G6QYV9k*oP*J>!CPr=pbu(b64 zCZO@~135ux?l1EsT#@o0^J8`q37{>=hw;IUgn9IaGg4(+?=U4QLI9UOuDrK^WkF5$ zXcuKo@br!HFS~fJk?Fl({gtEtG-?wwoU&@aEZ77kHM*+5!UcbS7k!``<+?B81EGBs zTIK^a7W}6mIthBm_z3U@!RLZ~u>SaSucUm-vr|}?c|PU2@Sf%xE+z7|ZDtb`2ojV} zI`c=-5D#cyUfg$iXd%s`B0hmb(|yi|V2O<9H|een!kR)UBr&e2SWVNn?F%sC)560S z3DN2C$-bu87A_>jkm?x(6NoSSGyW>~d^u}km4b=jHxhV^$3O;S?G~~PZO|P~hqSuz z&G~xYhfj$ML;*k61G9dGbb^(H=->WrWihex?iGDne80~FhU8rKM z3N&Vl7U=9Z>j+w>VO`1OmCY}K%Eobg-bK}%iEYoI?I+=_`;BbJc0XqyRRmkCEAMh`)fNHMvAd~f?c;apkD1-9x=lz6mvK}zt9&a)sKL}pK!iOH_x>XZKuSj^DH{2*hk>-+( zxlcsx_h|301KOkLi_g8pB&dJggIQGqo`uctdF^f=b_Esq0`}W8bv(UA!t$Zp`57`P zY$KAq=WhvNJ*b}$5oj<-B>kQh*pvMH5Z>O%MN`gI)EtndHDe6!{IDH9&c#@iRl0bm zAB3+0W&8%~c5FWH?m!uS%po6^ROL3OnY~ zhgywY>Ldd9BDFScb84>HQ;`jHS!1=7VEdXMFv1t|Fnd6*a}#MkX_0$nJFE`}N|S&{ zsB#GA#<+_W`WY+>9uY?gp6pydL+b2Xr;9(PR1EKPHRwtf!Q?T_^~4Zy7?V8J8vpuX zZ50Kn>vNlkr$t&C)yXIA=G9lIcob)b#bCmsBjd!0A+@0sbsv9B?lQcryrXG$uewUk zEm*$afN-^BkF0%2c$8p2SJk}ESe07p_K~-?OOQmzY!Sy~hWX8R^kAN`k6J%wZ@zv* z*GDBL_DQ7;^}fH1Ol-LuLrG>wO@hjemHH38%POngKb_Jyia%O8T$79-d5O~Hba$=e zOE!LZES>Pgkxzd}P|vSR^!q)`90}MPg($kSV6F~i>y&waX=7r3xRIJU*^Mcb1dMd~ zVX$}wPCaV%#ku6`obe#%WOIWwfkvRm6uYi8Jw0w|k=e{13~q*I)j53Rws-R1oz3sm zyDIqED`hZX`+0C{_Iv$<@{31Gf%wkaPh90VV~oyC|M7jN)?f_d9>uZLo)|#9QD+Ip z^g7kfbg9In)S6gF`PKemrd8ZY#~ZfFn%}c+`QR+^_XE?h|B~V zrwu{*G7pXa=}py@`HHIHu{D>KJxbB+Ohnor-G#tI2$RYAFxB9!42Hkz|IzEu#&6{h zB(CVXU)54&e@+qC+Gp)gzc=jd0}N3K&Y}3f-p}qmIZZyGv+f3KD_EF5O|CxstN+v( zwTRQK*5>Z$b>0ipdp~%-5*o;oZvY4Mi*JQrQRAM+1%YMUM%&x8RCPYgXh1zi0_(l~ zWml*`iQSMaI|Q#d{Cd)!ae>s$zLNac$C*4Qr)aw+b*7rKp5d2-@)1-!f|1>3WYq1$ z!53jR^0)e25$V0?A&|FIt2&C$23J%sfitcctDV7yKC=1?{0&Hj!T*Hy2#JaYx;O0o z-JgM9hf^|os9X&*>Z-i(PFSj+NKp^q|>$~7@XA{kJ>A^f3U}BY{a@(-U;v$ zQhWWvMwo{QC;2FX3)ntiWMnq#1(r1zG^Cjm&=7RV(P_Z6Qo%gGm5`Nf)_Sp%$8 zLJyTZD~YKNFdye`wD5`K!|TJej|Sm}hK+C}w2>~gYO->94~@TdCJ^oRp$?=%FIvteS>ti)AHH4xijIPWslv~@To$i3fbkU^3Ybz?W^hg z30BP%UA}w7n-{lVch7I3h^-C{mG5ix7H@)>0SsKEJFfDC_-$7i#k}W?-71?`V+j_H@bG?JICmDaK&=d81|2<7W_#?9Xg}LGYtR{e!C? z`jEs2i-=y7;|wEP9$zaiSb9M2bOrAmKF;-_8AEH~nd)Ur-dx-T&m2DA@46?BUQBhr zJ(@3INQr8@_TT>ZG(6CD>g!`bL?!KrMdZQn*B0BG%=eY>%|9Z|6mDs5}#h9 zvySK{W$c4*bZIL%llm$A$acfXJ$`Nq{26&-m}nG7&EpsecCL1QEBdEN|J{&Vr@zv= zj(fOr(m+5bTgS+?OEyQpHzXtxICFqD8hkqw_@bojayV(WtDd5@y#y?XxVX^^*;M*U zOLg8a%T6GMM*e$L$HUfFC9%^l z6)d-AJF^8@K8QaKG3X_6bl;bt+sW;wHq1=H9N74hjvgqmxE)<(B90gz_2OUUM|$cC zwqQ^knQw{9m+Az# z$Rx~-Rci`s=-#=s$#?G99_!U%a-Q^k0Wf>&JRytavA;c*aW`tYCbwkX>a@c4(d4!S zWH&Ae|C=t)dPx>pxJ<4_IB-G40YT%_0_|&~oNR8$v&V`%BrJLro=Eyiv087R^4&d~ z0s|0@w4^^%Epn13ZGpX<>qCo_V6p5c9xdI^!Obz9uccJEjW4os7!&7>sEudOxK&mb zbMW*)(rUSUXyGB8bUE~MkC4-zF-$($tDP~vXhSfI!OyFYJ#tzT)Vd(ilzqmN*VK8s z8L^oS)df{IIwtX|3;A4_(;#2e@v!VO{v;uFXk^8A%2tM6(Dy2E?A_km=OkrcwTFm` zOa-m`eYm_UWhnyUqq89~JPthznWPgv4=#nC_=*&+US6N9Wmta%?Q(FqLlcv6BL-w+ zKMb*0rq5lE2y1Z+lyr^R^=Hd09VeeGEjlvh^YwYL?}05fnY~xMJG7UwgV)KU0#`>1}Q;Z#btzEWV=4&)3820R!;R@Lvzy z)1yBe!Ep?U00~60{RH3RRF4h_o8kjf;IDV~{MnIsbI>3@3kJBZSQPfx#0j98S;04AR=k1jWKh#m$c7DR<*S~|&Xe9J*U#$_+?>*XIoxbO@!(uI{^I`GLu@BgLR~A|w@WKjMIYPH8fB}#PJ_)=#o+tuN-!&o{G&IY?oj%qIO4#MP z50`WLGLDA~7O@~duokHUhsbuKs3gZC>jF-JO<(1vrV$O+0f-vkf#j$ zofeDqA#RFS?BQHUD;LExTgr24zp38DH-Pe)VP#ZJQhFaQZ&kHXuh%Ru91kT|SkG^% zKOPTErvXixat7|JXA$gIEC7}xbsPBP6de~XCoB6a7<_i+a4prt<(O21dTOkt-6QAw z_P!sfNhPv$YmV)7JtO|LFb;=OW@N-m~(V0-^HAWXlGDgA%zKrAX3FUF z<^EXRnqK=oQt^&1?(A;o>+yW6^8Lls4J=Hf?(qhA@6>jzv*!?M3faA^N_xR+ZDMnb z_!ONU3wm;uYVn{VnP+SLV1bs}u6B?eEODj!7g^v^-oMhDaip@8Y^_=T+Avf7_JYD% z*fY~wxFyGjUZl+Bsmh|TAwUBn^wfsNdp`p7%jBS{Pxs3c#-7C^M=K$m(%vVi?!Djl zE{?zTz3sznGveKecw`UY1fwL(ATJ6vZ!n$?7q!(fKgSf+!z{uRUN>#=95w;U>otmQFq>s zl{vxI8PF5U4w!L-do446DMndugXn*z}X5>=;v7pzN}pU@-dvd$h8M z{3eTT4_&xevCK}tNstF1*rWdTS8ce+rJ!oC?{Al>CN))$_j4qTpA9;RSOqTKq# zo?^|YaWdZS-c~>NJVTb8Y}<{kPde9hx_&xDJwebqY>;;Kf9An(mb695%P zeHARA3Bpl$x7!@vbzbAQM7==Fbpq~JNmPqnm8*M^4#Sj8_py(Y_i^*=AJebWz9~zD zw>iDY$jIt9*0go&U%fzIYVv3_e>9aD2`{arxF4plqylw#$WG-wHOl7`Ht)F2+?S~k z>wQ%B*@vA+Zo0>SmruJ|A3heiixQ%l`e^rjWNlKId;XP|wrkR(ji6G-AH*)K9AElJ zry@4?W)WWHnYIlC9?t^=TAcd4>$FGjq?Lz29M6ar$?vgDFA=+kHDc;A(Q7h1#yGgm z?Zq9^&S!Ty_$)G;i0GMdsUMF30v51ODIAXc^_ba{sFtF#z8SZWTDO#LJ>g#8Om>P52?{NRh~K*2mHTP5LV1xeQp3t`Egvzx6jIvzbSz6 z^!f4)W%5Doi;#zS30oI>C_Fi{;mfo36ajroFRO^^k@f)lO0-DaVX<099$p{<{KyECRHR<59q{l$(m<04$$+!f za5ll1$1~uFdZll_BbfQyHGkc%xXqo6H}ZDQ>I6)S`sGBtfjwcDQD z%2VXHM)q>NZ(#USEZj~U@aMw5=7w*H;N2|0RP=>^kylx^(s{L*;>KkS^-Z>s%#B-0S<7{Tl^B=*CRqSO|?_Se2DZdm1zCuk_n)6==-r}X{{>ax3!@apD5EExw*ef(tXkX`#dyHk-Dvi(9A zL)ypmjITyZ@Ag^#(S&R0C)nYrhq$1AALDWh#?V)>mrTK{eSbp^OVFr++mzB)MM9Ad zgC!I*_nCXn>|6P=P43P*fG!u1I^xz<<;R|gzrnl@RnqJh%0h=X^V{b;mDU0Mc_HuE zq-S!E^N^$0B#Wx9t?_0U?G4+`dm*QrNWrOz{>t%Wc@Ma-l(uShkrp4CE)-n9w*W1B z7yV^vKjz}VN2-`SQ_|8lgUHVk=H)=qLo9B8-`rUPobJzi`k~MDp83wtKlA~>!k#4q zdLmcWlfdnIh|rij)cnZtNu*7>fYP||zAGl^j@Bb_oGYU0gy8i)Z?=y}mWB_)WIh@a zpN&1ijdH3}<45cUjLA}Bn@0vdcKGXO-&($KYll`KWwzjcqW9TKpv9Z4<5O7_H~WQq z$Ef)IZP#IW%Oq01r?d#m)vcSq){T3)xC_ao`xR)aIX3wctQV&7n5EhoW-cm zaVfl~{iX+0rJ6LK<4p|FCk?AgXMBB)XzH&YCj%z^7DZ~2*dvsn*kG*Udk`#b<4#ze zw1DL(n_W^Oktc|(zYS4`)D5mjl5l>7y%NUlLk^JtM2S^7<$Ve)R`+}tOZn+T_VNAA z2jAAYyHIp7D1>uUcFEslNtl1au@;7|& zEg6e;l;s#`lGQi9QV*MlpX5Gr*eb*F3lI9_OSyg08$;fV!uLZ69E6|m#mh72?=Z9d z|AK2V++6U#BqS0h|}KZGm7C+OD9oIj5v~S>NOPvu~SVy3ZAG(#9E6Z0<-kUR(H`X06z|}+V@K5-jptrYRVQQVy#rXl zL7$RNJ^x^jGW0i&G^h=<&tBx@3n`ZH-Nu77PfTx5_0``iJoeYW)6 zx5sXS6R6j_!PwgMX(HX@t6oARcnaocMJ7ssamsL- zAJhod^O<{FUkHO`lXJJ}d-g#R#(UVeRypd2?)SJjU;t;7sh1`yOJ7UB1LE1)uS}U1 zHhj(+*gd0OFZ((~ochjK`t5X8NGHUutF15-@~-dg3GYniCFcU>r=;IX`}o{LpxIlb zEKZ}9g04Hh>xbEW8$W$tf<@SD3BU*fAYj2H*?!;!B=Ov8$11C;%iB8{N;jKaab^!& zRJ2>Q*up;P_RU_7Q1%>R${&i3c>Y3d9g_NK#K~`Z;~#glnEnh9 zHsqt!=<>Uaa;`}*kP?nAeIMB*S$t#h>(e zH@HqP72j6h)RsR1UNOd=DW*fWgmE$T*{s2NM-3y{0@Ml`Bcd1Kep)WA4=QiXARs2P1vI&Qeeb%wov&;<^3+Lb@Ri4zE`rsdY>AtT5 zp!x|K`kvno#H7Hch2|Je>|*@*xA8`Zg6HJk?tz*8Xx?A1m&kb;*vb5WK&|w%v>q=3 zldoB;b*2YfL_7e-oLDk+#vT2|BDXXej-9A4sQ$|D#8r_SkzlNfJ2tOkq~KA#GH+Ow zd^Nq)Z~ULH!0wHyy(UrdpDrmrT)voJ!z%Raj@s5{%Ok@>doq!9!h0fz$3FYz1Xcb^ zci@H!q5^p0XirnJ%J&IIlWDfP%c0!z^GO!kL%eTZQuFz!do~IdOnwRrtk!MgVShr4 zK+=6l3*ZpXs!Qu*;vOFtn0muC)pkV%pZ2mk`Sv)X`anyg`Qf?9;odKjd;&^fjXZyx z^~6k~lW{Gd^GTQ~(E^j*U3(Nw{&tP!Vq52ZE9YQOhuiLLQxnz$E4L#$-@Y)!QxBN} zdkE>^Z-K7eZjWA0&(!9tR-@X3u2=~hJzLkMmw_k;Pol3rVe33e%gIVL-RmWOt8-J_ z$@_k&zh=LzVy=7+RdnElkuJF2+^c#wjquOuFvcgHeb&j0KA(Q6eb`P8={o+EfbsCJ zk9&Xsy{UNw*f5TRH#H1Oon7(?11Dum{L;Sc>%4u`@42`^#M zcCzp7!Nh%VI=V1v(x)#DHPo;&A)MF;gCSe71CsxnH{GhVIhM}33{7k#-Xo2AMcKfn3cgOg?m zxagk%LXtIUNYI~Sq-(vM-e#|t6*ke;MNu}2nGTxG+||&`(lofk>H`pFUJ7Jfc&YZ^ z{&8IH@SnS~7y#GH=Eq#-0<)g$7lJ;{C6IHV=aPX+Qnz(-LaPRCHA~Ud2(Wbo`D28SJ+mh`1!nB;`gHDJ#(ODczeh=dTT6Pm!}eD z&8H)Dn+J*u-`7bz5U0dJ&}v??XDT}6G=ifs-1{*7nfp--&)46X>3+Sgck5dCqK~vA zimI8x8z$KTN)2pu! z#pnFmsJI+yJrv=qCFDvmZI48|6sMo~oRkMVWpy+$mHR?y{&h8Bq&bhs184THJuY#| zKccxw7ZBjwb3oJP-}%Kpq~MO#S$YWSpIQ2P9%~}=ASC@Ml}gZuMRq=v)duJF^Ev$v z8QvPmHIfSR)$N=xv2dM!&uV(*BKx#93Q*>WLOD~@u|{jmIp1EvIWaaC2CoUaE6g^e z_0K&T+C!ZtZDTNY5zt{Uln*4eC1%GsO6`+~hn5{XO5mEe6D!|Rx}IqX7M5rS7%Lpa z*6rY(#SbN?*1qh-D4~~lS?8M zIS=&74chM>XEu8wtX*)19LYUa!WoeJsJu7zm$(rV?(yl& z;PK&$e*lEG26CHm<;*l1ZVx~^Ak7a~_*vlNb?oi*DSPS%{iS@3PiSgB(^UQF*x4#Z z7`#Q(m2rKw`}qrzi^YPbuW5s>XCJ~nvhISnAqQ6AY14(cKO)?W|9*GwZGf&jxJwEH z?d_d`?F_Lih+NMES{rM2wzOUoRR}g%V&EfbOcn9gyK21=AmJzarwpAA+}|EIEpc6( zvu7Qkh)Tu+!We1${sc<(_A907dJ=~)!G>8hfu9Lz*#v=js?qCSJp?@UTmGSA@tf@- z?I9W+_AZD`fryH}ohcPS!aX&>T+-|NBKBZXlf@VJ#BD4(?tc3u1rtPhG3d2>SY=@y zt}h3a(tGBK`;y$yfvPpJ(5`p#`1!m(2#se?%T?rX&{$xx1b z5|F4$3BT&xIg2s=_trPmAZENpyEwA1c7Ipj-tOVt%p3FGrYNBs3^W-Cy4qh%9NKr% z^IG38M={-NEBlhJ22*g>XCYB^C7o|pWgSvb$3ypaK#3q4n=i4R9!L-+zfE9a^Ml9D zMuM6i9^9QJGzf|(@e8G(Z^%*~#3s7(8m0S`IC%hjH;P>*b&Q7G|!p)+6k-_@GE3uWm>x4ZAIj)W&y1`=pLW~Cj3|4A=BD0@DU4L?~M;_3s z71-=|b>->A*7Xu0i?=BH8DDY&S0Q#U?n#`jMOWpLwZ{l?RX&&_<-uDfCvjm=EJEOc z=l1(AY>xv9o8iXDYm_`i^e*lG?%FJlRf8TxOd4rS>2$i8AvC3*$76#nR&{xx(0|cx z5Q^C@4FRE6mRtOnF)6f-;@x_Zn02mvy7?H$e(c8@*gwqK$+Qn_@1OR7 z297bAJU0Dn3hq2rDtuo zXwdj)g5E5V#v0S}lngV&MpV+ym_RsA`d?@k0ts3L&l`kF=|A1c@|hUp0!x)9_L#Q# z8!P#}ual>(TfE@4KIeExVQ%3Lay%%{D^C0pab|#L#C^GCjwQFP2qZ%{4>t_x+Pwef z!RXR-EOkr+RcQ~?c9v2)@o=4wW)>N{^h<3o^C3HAlea?$OE*+ z#Ka-QP4fpJxB$Uingt{`rIj_M4{_@a1M3i^@>R=L8prQiWYqweUslI^ckiSx!mVy>Gp4b zHoRfuSTiwseEyhY$f^-^Ve*_I4KjbQ7x7qy+3)F08Ts=rVW*S6;eJ*WbJ?}I*vvQc z%a~?5R_8k3o>H~B%R4G0TzCnJdzcW|Peq`K{TO4@R7c>@>4_DGjR5u}IG{B;&G_|p zxIF+YhKDBl6$`7YAN*`I z&DvON5Duqo-}o=hNhAGGIA}C%%JV;YTGVFe*Ua+IZpG=_=mBcDKzDBvf;S_DgwR`7h9B>$NqGYr#WKL6Xse{WpW z>kl?&steLN6z8WVVm6xGjH;;W9&_g*Mu9y%tZsj6mjjOvs-0980oR4uF=^6CR?=vc z-Ld1Wl%sJTX$t8zPmB3xLVHpN$#Py+vpk+iy~0*nCuy49FQs%H@AtM&9U9t2RC(Nz zstJ{;04Rpb6@Cx3b#83Py+EhxJ1lXGp->jj%Pl8#Q?90dtw=OQODiW5ijYbeioN(G z3d1`Q>*p`2mF{2l_Dfx_&g+B^fIIC0pcoI8z!hE&&M85j_m76wZlepcLTJ+7thE?{ zWB z=hmU2BL;kC71!c2_k{XDV@J=?;$SZ&Y4Q}UKldTYm+ggG)8IE;ew`kJ%1pkjHxT?B zZG9MF1jqHq#`{DkX0YRL#UfBu2q$gq0|6M3DAN;r=1!PYAN>)M8{8jSK(1U*A*7D? z9YljU2b~5k#F%Lh!OQwiw3%s^f-ND({7T1{))S{FiXQE8^7g&04A1p(y`xt|1>GA8 zj>isJYx2t~S&tZIaKn|@_nAfPH+?t;`CH;0vc(>x$xR9GG6M|K#B#}gQ{ON_#8ZZ_ zbMRm2$jb=o{VCf(tPpZ2A%!06BgcqGeT`>E8+v1Gq$Edjn1;=)oeSEi z@su#gX`qVLyL)x?V{@EKEY0q3yQ%P-@gAq&uTLl3ZwiV3FVl zTnE?eXJAQ2{t!Eus?^1czr)MrVo3P7_h(BEwTI11nn&n`nz{YflX&ZICBJ~-XI*es zKe}aJr)15d4nmybePM>rfTlXKwjYs!h`4RXk6-KFeUkVQ#fF5O!zn${(NH@I@kFI~1 zOC6wq$CwvEBjvNqzTr@C9VOxhFs5#*tsZC6HJ^X0OC0>GI}1kH5)hCSue%pMH&-ye ztoz#!OhoA6e0P2YD43luDRB)Ksz_V~E=~KcA}gcQMt=&4u}jtWjAHnaOO{qG6%knf zH;p?@G5%MFNA3Ef4mVeSc@g(mvJN57F)s)V?P3slE(dS}QVNAGy?4Y@xKka*ukW+?W5) z%sScf$85qzW$wXSOW^kJtTy3o6>rq-cI#lq8x0_X-L8H)&5F_EZgx8#uxGO|gZHqV zy&HXM1ZA@yumW_B`yLr5*qRcyLzS0nA#QMcu~2lJEa}kh3|CWB;&66f;xj&+=#l)u z^j+A?MLEqlF*`Y_AC^B++H;<~va#X?;McNo7^$5Q0O19?MJI?*bZt}uK@{ql0_blx z*(Oyq=X?@hg?+YB4g6exxW-b_8z(t} zF7HQGN_hI*Lm7TH;55sP;+^uMK)2z{`9Zj)r=0#GlqoL>zqM+rlr?d)+ROV~kkNuu zvS}cpf;K=pf>I4n*Yv-ny|xpU_O5o#rG%>uZvJv}7`Q4IL#1x@d(HD*ZV$)6*5x7p zHiLBP`QLX+*?~M-_~o!;)$%LvAIEK{_5I{*}&XvBZ5$k6Pna(c}dw zlE@wK9L*wGo%y684`PR5g#+hCIf;!lS+2sPD8K2Iu3q_Xy`? zZ6B$6R7uR>aDCrS{N=Pv$8Na_!#T?lj7eyuLT3{DGAldy%R7fL1CJPImRE7?wfjfd zCy*l8No$uKpmWep*D%~(#XHr_E2e8ZgqjA3?t{O`-bj`v`McUe4UN|*6U6N+td)LX zZzOY(lX^&h=rv4n_(FZ|?=1(>vnb#jpQi*iy*V~pqn0jIOEo{|44YogAxov)0+FK7i`;F1CX_@mA4nDvfpDrZ&XgEVjzxq zja4ET#5SRgded%`{t)!{k@QKn`pq9*i$m&kM;P$E1yH)S##7STi};+`S^wdgmF4?^ z^D-Xl)^?4)9nSo1Q2kFF)_ejD7B^M@6wLXJ^OO-Exy|#(Kday~+m)5YGAVa|J|6%u z3Ic4T_pk->QpoaU%Qu3sbldT2z2{CDEUn!n8=x5zlXW| zuzP150|MP$U3Ka^Aovb?KXUCHn{i5b50-kF%f1?h<^?D$kC;rty0h}MpP0jvd)(Qf zk*9zs{F)p}E{9h|$gulhWXPPPJavO}q*iDg2v$dd$+#|d#TI|=f(I{RNmYmXg_TAwt3Mn=!_#0CYf@glTTV&hA z{8GZCUC=MTpwItXh88jYfEvqfat|9;#1N|C9KK_Aet<4JI67D>;4VZE0DNOzM0(70 zjF0nO^6m7IwQq)vuE^vg$ti}822ldr*7S%p@+U--}lH7-S%b-GXIb z29)15USJ|0uj1=3gI9F>Ckpx4I|f{2Y2A?gA-JKjIQ>YtbQw=f$o1IzAN1A z^T)i~-|^dPGCBtF$M(jm#)}U9jO~iRe>}R!Wk~w2GowtLN{1q}?HN)v#Q)1F>k!aZ zRj5U(+m6N+qSY~R09QI4p`H+w8Bn%>&FTzIL%=)?QcwRl~tZY32&Qj zTXM~Ovzf5e3Kt#ZbJdJR3p}`ey?ySraP-__3{UQ__4KO)Ns;y?)9l)xmr2t;v$K4N(YB|;I27YMes%MpER555yrtjKYfK3h1?dv zjiL46?apjJuSaR^6?A~mc-j~12A=kDkVN^V4>hi(O%t5tbFj2W6u!f_B-4QsVTSO7 zznHwwtsf9S@Xx}s@j=?xoWWDP?=i2Ww6Kvk+2`KR+cJ$QPrM?r4a9uz!Heu$K`qZu zA6tj~#Ct*ALo8YE2dUceO){*=0NTqKVMtRX#(058WqFi3kLcEO<1^G}U1w7YBzLPU zk~Hr2@qiaoxk>O`+UHb!^zb`>e1Ng;ojkDSAJH9+=lxxY2Dy1@LU8E}VQkLs$0mEP zeG9iIXK+8kzc>*rsf<9G1sF`eXR|czZ)y{=mDcP1J6-oFM7f~Z_cO-R=`ARb{)BZX zDr?ix(I%k+Ccg}W2h;${uF!rSUmu|2;c4_a*d@wrI5IkVJ+&>twS6qVdZwX{&)+Z0 zIvy+vO*Ybg57&D%c?^D6BFYk-mcK6)6cMk55LD_PfKO??EAc!o`Y`kF`q4y7TZFS! zQ|sN2GAQcz9Y4dP?IR%b^^bD5&&f_ZK(I?<$vfy03v_Q38bQXR+7Ir< zeQ=D7pa1hYy#~(jm=y&`cEvQ~nm?Tk$CjM+*XROAYTt+@<5}GLss3$LovCf|K zNBpGL{Am^7pi|i)Djp z4dapIpaM>HP*J}(+8jW_6(+9v7==k}x7FETTvIh2V%pD19uQenhW0VtmvJAh501k9y?VsXQzig&HGAK5;Ir9X2?-8_7P`|pN^>P(yN-bM9i^82R(NG&V5 z!?=}fNUu*CzT*kun#SiY+m02el_QqAKLTajk~CX>w?uO9+#QUZs=f}rba*6uI5aWD zV9*RCxY0xxSckhUdb32LwTyW^KybFu;xe8W`2G<9ZzuqC@_pvGGtic1 zMoIZ-*J-bD_*R$a?{i{>RF0#7JBjwreKsFJ}XOO+srM# zfF#pAp9j!Lc=K`#>uR_goaSEV`yPC-o!jbpcN~x<_%(m$kuvUqb6~U?GtaB6KRo@q z#ZS$(vKRd*n$6HiJ+LQ=FRE~1ru`e!6Ahq;*lkLGdwS{n%_ng0dkaCKq|D{EXvVEv z9k?*PJS0UiDM3q1$HCi$+eXBfg!;ygO*4xKjY?|ew-m#m*YX!sXVboB?C2jl9pOC9 zzJV7SAnsLlp@)&w*oW)2z4}@FK%2++VyU-@BGgLI6PMw_1VZ^=b>}MKW@|~}9}CRL zFyqP-X=;%Qah>by$U%8|E-UC)>b`Qr*Oi3vmhbvsZGcZ^s@;*-@8F+T<=z6>L+qI_ zO=*?d{82)E0Yy7Ry(oVJH_0Pb6`KZbt#_wXk7H77d-XvCB{bxpxV8_TZLw*&79CUj$qJTePzuTH<1R|3=m3#%c@5DEdIUc2 z@G0Jdc7yj>x5o%Bb>5er%VaiQsr>B=&RTlCM;=f>FcFTN-7Zmt_<;|9H1amXn=|;f z<+Ko>wW%}{jw1s)_xiK=F@(ait6zV8rCRNrUPnEBPRE}Q#UR#e@Xyun< zbVuyf9QK0pt(j-n>;3KRo@Z*zo=&rwswezSINM0^-(2HL?2$kLxhZm`hBjiPT+91%4!%WwLiZ z`Wn2~L5gcDwR1kyi}O8Z9i5PlPhC__pP(#odWjBtS%bCq<^HTgAKh#Be7}pW>j6rd z&r{F0gK&A3YxZRm!$ftvyh$~)R4atxkjq%@0d@rNYqRTxJ=pX>KgLoR@D88kiA2L)||CrIiU(XIIqO#D^%D&AQer+-4m+AC#^Eg*0+ue!qR|~5JkJLnJ zU`ru>>1<;Z#f5OrJMceP4Y=bSiZzYH1YSL#Pg3gWGe5@uzR({ z$-gDfNp_4Xd^~OX2wK+mx?(wqAMw~g8JgOX|IWtjJ5%X&@1KjB6KRURZV`7q4!W&j z1F($D3vp>RF>6Cs3722&uTw#~c|`6&WDR}5p60Us7+uu>n=~%(_TXc18Sru8BlZ@I zpKyBY7ZAoeGmhh<+nS~wSwOMy;K5+5Gk2C~cqnY;hY^zsZ;L;yw{lv7(@ycU;OxPb z?u!7`){S3QJ4DH87|<|K(NFO5vSi3XW=FF%Y~3%|>>y!b=1Q)4>Rii4UOX7}z6)B^ zYmfhBU#su}AX-y279Hf?k+xR6L5lU|m}_H4$w#6fU|W8C2xg-$llIgfcS2V`Mq}JJ zz}#ALWZYn_@wkx92=8Saa!y+h3xcRZKONTJ^1ZJS-dG`l#<2dhMKh}t4C~rqTK;KW zzkf6|?RAQ7&&_!}g{0&bc{;i3|Vfv)x+Kp|#t6`ZchU1jIs z&2q=ZCw?95F$+kw_s@?SD6PenH_S{N#oHiP8X=#5Vo)-CfyScVm<90SFxjcX&sr0V z04xFGg#W4g7e9t%PmZHIq;;>1*u$=1AM z=kDHbRNsf&;Q}lQC&w8ka#iFYpijQ&hnN(l(9Q1$4#T~uzI^d$U?49i+-aVu%wV=~zq5z>03<(nvNSZ^xY@Dq!_roUIr3(Luuw^ z0G;=WkaXShi-)*+a>l14REk3$tIIxrZEfR2pl|>zCB@w%(!B3OeTKa^nP`_idbu3* zuzN0qGo%c~Ge?a+Gj};&rB!oG3J`4IAa!(Qcn#eAPSN63=qUyXU|$hs$_nkfR}>o~ za<)?}K7T2$iE))qXcaRaa(H#}pLu`HR3SIzefdPDeUV;6@slJB>TVB)&dUWwb?yj! zuBwUq8tGn-o?`j{THhvg`7@sYTwE+~2p#0?j*6=vMmOjtm|UFjMRnz$CFa*lRt}OYF0e zA>7_GN6|iDvJDhz9u?b0D26FJ)=s~Axt))n=Z$(mtb9%jt`WzDz_bAN==-?JQdT9( zCbTR*faYKxG(!xkk{VKAdTXiEald%`C04ns4UCwxcOtv!2AelB@IJ&2wvv@`qv5fu zHzw<9u}E)~4>VbG%hcEHSc8qezX2OA1Iwcot=FnJ5CG@JqzYP~^~yE2x<#>g{FVBr zgyweyfERx|#J0z7Eib%ea1% zW^E6^mSCXA=NXw;EGMzffoE&C86@oKg9uDm>g{=lR{V%r=*Ir{07tC@4tpZvX-F_jChIEW4 z@w%ABB%707$;HI|&Xi8Kj!0FX;=Vl!#_tKxH9aZ+K{5unuS<5^!@e9qp?-c@sM%`Y zE6RK{#n4CZ8SPHtld)-VBqr46He!RnpLJ|cmi=`!XQ9<_$*9hRqf7RBDcixS=6cVCdV!wsCYK!FD+ep@|si2|P&ohpZH_j{(9 z_GRq+eSwyMA8;`H@|eLuJ4SOFYP@wSBjhK3LbKdv`dv<0xQ`akW?xaiKVQ32*fCG) z;~mG7#M$BW#Et!(*+>)`Kr~ZAg}B~k`!24EG5dwrC-HvxqQXODn(Onn_#Z}oeCD*C- zF8%BJc_*>3Kd|^3o_H;O#i0*wL4;q*MI^LOf%saj;;Gg4B<4pX(~hr^^uMfLahm!< zHPNYXWrN2lxLjI}jbcCs64@w+zqRhrsORrt7CFQ5VaIWpTNz{Oer96D&8OfR?OB#v zaUcWaWcx&Z+*MM%5eKF^w5YKJ!F>Dhp9hRI;j!kD-~Ni8G^J7>A6-zQ9%}Owd~hMZ z6B~Jb(EXmb%qFy7y;ke=d%48!QYaQ@e2OV6a&UvYH<-Q77}Nse3JSA9pHrz#)$ql} z2VaYB+Ie7qC6)v63YQ&PfsthOE&^+hqvNVmBGk@L#~H=m-6{=s;9vulT-x@GyRYt5 z0{@^NmIOE^vEi2y>PWRR(~UoQq>LWKwoAG7GXNCK$2adsXtY}#n9Y@tb(l~@*bp4juvp( z7ajta;ub4Y6rf&~GTemp#ADi4j{nA@fg=~14e0vygzQVcGT`&zm|rW}Lbw55B2AwC ziSxc>JCe`bs4%ZsV$6Tq5#q&&KG*@8&ByS4ek28Zy~m1KeFYOORP(vtNF|&|c-VQ~ zKL4c&{>O${8niE~K|~EGBfXR?w_h30OR^gcv+^1fJ|6fWd3rIkPOLYG*#CsbPCtsP zA%1j}2hok8T0&52b^oB+)X24FFBH}v)E;1VjM0(*O5(K6XfHQfM7_cwIxjegm{ z&}hW-st4~o4oD}epSb74BBD(N*ln0{5$+|#$3wIl^qd^JR(Ky~Pk5HF5@%(YnCT`< z@dNGfTIRl9rTB5015E|~6A+^70o9*v1e?>>;ERW^5=~tGmj@ZxLmB|(O7Eptae3b- z`pCYoRecBQZkxGZpW>^lDQTesf_ldgmw&dL{!`;sHKeb^pUCEKO5P)lQ`b++GaPtk zt}#tQ>r`;ry8nRx3Sd5s$UWKHsaEVeBOkeEMD;D5+^>)PFx&kp6W@3AQ8iA176tS3 zt1iDi$@e)1%Tjuu*Ed0i=(N|uHLt)mSeabW9E6@&iyk=9S-3NfRqsHbC+7l*Nrlyh zOnrm=iH=q4lf|5#LMmBryadt^*-O$^WEwX+S%n1jVRZo^ja&|QxR0G-L_(q&_hw_y zFJJ`D`||vJ2VIYzGc=w{3pR!Dx49;R-elK4HQF|9xal+>DGJt-@0Ku8ph>%Lx`C4Y zk=3QVK0XhWV7PAx$3yNCDFX+#IgTbkqpPd}YPhF6M3{flzlLDI0>N)Nz&zfu6o)e} zk=-*t7t^*R})icW$Iyp$2Y*4`S%xCo`O{H%Hl6 zM?5o@0!a_j3OqO`E7RRKqS`BWPRh3R8hH}+g9sLK(D-N$p>hVa_uJ?XVuNm%cOW@k z(e#Y2GWOD1;;PEX>FiVDjao_f%6y&eF?dmW1iP?-K0&&Lba)Zmh0KQI$A=I1r`e9o z{M0I0>`B8!j`oE7F{^)`NU3oK~bpz4V7diMozguVMq^HM4f|Q}Wi3Q}A z>bqOzT7%CJ&<1n3^n;UmYbuS{{3DC+kz|~*YZ*THX4MW7IZn18 zNvcJNpvdR@4PS4Ql;htGgbf1cCJPT3ld8p2-~{}5X4G#{Vn87*=vWNb^$j(T^x$u- zQ+^-2DjfxJZto2c$M0~CuWvF1up~;cLoyo? zz0fgMPJcvCc%N00VSL`|csz(zQSJlZU=KUTYmY}4pZicD+%F+U^eX<`BeJFpLaMEE z8ALu$y)Xqmj=Z@zVH3YYbfXpSGc_Hv z`GJ;Q{Vy9SpW6s7O}oj4s__}Jw&kF<+_e|nBHo72LCnF9JDBtdn0>MdAY2mSfa(%Q!h=N&uPd<+5W{ORwQF)e2!l=o$+9uJ#qj2lj80GKx z7a+(MZ!%kz8`B*Kbfrn25kRVO(XNZxONMxj(R=h(!Z|5oq353&h{XFW{Y@Y)P1bV) zrZPAU*$Z1wah-9}J`2_F4hIk%+fx8Nr{&gs9|>C|xzux!ku5Y!p*ThyZkY-Nl zdx^C&7dM!581LV8fTv?N9ryZT#sW`=cgv*DnNNi4tG=NK6Qxq*@8Kc$2p=(fnN;FW z^*(ZQ1Vnd9Z~mD>z}^;W9IZ}xyDMn-I!6q;3ovD?lqn9ouUgEsa>P6qaZ=m0FT3r=d1#mf0JJ+JlSey`p6H2Gp1YaWV?{IhrfGtYv z>OG04_aP{QZO$%}a^d2y^dXaehIJ~A2dfk(kHgmT1$Vva@u7nZmOBxbuM&#dMeg~> zbPw;DkpFe#CPW&Tdt^*=SP}5A8u6*P2wy6A^pF6oQGfIid+bx5YfX>`X8_M4suL@3 zE7VyU-={#{%M~B8@o>aQMM0I536HDw(x~B#e#rus7{Ivg@4#$ah0b%tjDJ!&D!$y( z3v+#aojtQ4(Bp5~nL1sdTqKl(;52b9-l!c4V+P^vth~a*C&wf=C)C-ATTM9Lrz`7QwK#0z+kTIh91%mAJ$2Nv9{`x#jcOqVIz&TIm-Xzpy0bpFjL!Fu{RMJEQ} z*HwtdZ4_gNFQLEo{X<@6xRJ%I%t73@M^c^oDO}?;rkL#0Z8CzfyGR^j-Md8@12>l9 z8bL^zVQxQc-q91>w%R9D%t?b3l<-7)?#Fo<6Lf(03)}B=m>+zLk!_VpFdkkmU2d|n zPaeiVe9prqhs4U&kUf7 z_~J1VVW8)dY`BfDz8VyqvI|wbWv<)ttk`QT5w44oBZ|%429NFVsEi)*Ge+N^j#A&F z5q5>q4(Gv^{=~o(X5L^82iJ_?(M|*lcDO%QulGuF_+H|HA-}=*ab1snp4bvRprjj( zqZX-zk`C~*z>mM+%EI`^RSZU3#1uJ#^+uPbun|d7hsVX>UdO=XFL#369t|v4`p|U& zbky@n-$po2f+7UHc}*=FcSg3CsTMEWFL7%)p#qM$w{IO*8XwjC?oNlMUlr3dfO5Kh zLgxJT0*eK{QuiE?4FU5eEFlMOzZ4ICUzMJ4HgMG?B!|G&NU5~y`w4i!!&0w&0r&AM z?1ZPcHOg>Y0i^h^dW?lXn0RR##(`H4u#Ne$AM&-_;L6+4<@7z`4&AWO+cYfI9dUUP zLUBK2_)J}W%g~j!q6(lK(snQ=z@rLKxhN`^F7kgcZ(&FrciIcF$t^W^cHg2$Z*O@+ zU+)9$T-Oe8escfT#b&&Gifr=Vx<=|}Hl9s%*q#>=8jbWc@ZebUC%P*o5j@%n>Ylm` zE2n;z3M%^#;cK{-nCjxQTRvtU-i|n};{6+0JY5-$qo7be0o#8|wHL}s=teJoN%)n@ zNT@#TyvKp*FhD=vz~4Ij6_p0D`cnSpi?S$p)06~ta+@r7_F0QOe%x+CQ=id)wY|2u z9ELaWJnBh7lh5txJFhd45e~wVkCUm?Z=|TN`{3fqz~_0tOLi7sT3k_RY^PMGR$n<=|>7OOgFf}3{bKr)E9YE_`VJ)%i49R zkN_8{@8>L)Fc1xanVRO&cOfdr`|VSuh`M@Wub%@t=yqMRG)#K5m`nd1Pmxu#hr>B* z=)j5jhQO*J+9#WG-;nY=BND_%v!>xkh}0IvB`JLE_whF)I3BuNZ`{A#J4*QjJ_ea- z<_8#*v=MH`lT-p$@YP%rFu{L%!!v#*y<6G=d^bhE;)1G$VZG`7)E1|LrDRSdcC57M zzxIj%mjZfS%vUtjt`?;VkArdD1T?{$(!S{Yv9!PrKf?k5A+37hKExFraC>G*QrM8R zbncDdtmRVOx46_ew80;y2)v95AfNtw(|wi@ZO;3_tv-83h}-XeSa^@8i8N}l+>Q68 zg+LHHcgH5n-*l--Fwh`nyX-UWm6C72A{Yfj^NCELSmX=Tc=wqi-<${^0G5DKu+55J z_~Z>vy|oATRLLjr@i`RH4TQUKygO|6DIPvi1kn-i*(`wNqR#yZxYu2oRRT7va1jvV z#1_zKu`4X@#BG}Anq=3%Ca*gI^O-}QS!dhRiSkO9XR}CldZonYn~T(ye>I?sl+ccD zxt9(X32!oNklHMjqKk?8LO%sKB4*+PT6``j%*B1k@3UChDW^E2HPyMFT2Xm)*USIh!eMglW4|=A!Cujh$ zX6zbL%-|{-SAKBn!|L?g5n`A_l3VUkS;Kv|C~d#yH$jbIUo5-s?0ojTUgZG?$wS5Y z8q=e2BBHN|2I2n6bvV^OJ=g_^cs`!#=D0mYcJ5K)cznUf$xPgAk1Jt5vQ(|tX%P&A7G&~g%}rMr zwUd8@HrkFod}0*t=L@Q=1t;cb4#WW^&l7ALXgcX^vn$xp zP2O4kT*`-d_r-U!2czp%m!Y({5p{0h5V|O3T=S)$lI{iF0LC5qT4i8KU&TFlpKzy< zrrTh7&7B@mPhgcEvF4H;kZkT8SyifQ+U{32*jGcbi}ywKXN%MXlkoWRo}89%EYI%L zGOcM#sTg1?vL}zO5*`ut&9t9jbvw=P87f0`FYX`nq6hAUBfrf8@mH2yc}d8f^_Tn0 z>55IAD16NWyS#iD`fqEPh4@7kr#y7fv5@H_Stu$s?`l&mNsL8dGn9p zV!U|@uE&~x3F?o`SkOB@QBYoR*tdd6shf)o$Va2_I~?&~w>5X}l>ZJB2pcs}9I61M ziicJGEuxlt_1_<2wNa{*y1Fl`Y|m48<@qG5os*^j&B1Nz?9P3Xzp8@eG;`6QBb~OP zL)8T+=wp{0*j#I$X}f{pDl7-?^O5!UZ-6};gx+7hGULS_b@K4zgV|Z+^qA90i5$>& z&tf5cEa=!lE=Fx}!7MK6FB!ii!=b*vEpRC4(vu}%g@2yLw_CoH(y|2nK9Jrv*Cal> zZ*#f-b+T&JP0AUlU`$O%28H*dcKJ+&e9_S()8zxX4~7vPa3Ks<4oq2l3D7cTqMF8A zOji-5SlQjKlwS{G(eNkMi~IefsNE(NU>m}e;UlXhL4CnS9CiJ~4$RJ6)SrXl%2mfL z2#Sz);1s`4V^9$Kl8YD?KTCeF+!WwXhrON*a1+ovMDB&PpLX#{cPN%jPtd^9`k#T` zx?jIPEoI0s-5_Ot=ME%h0R5ZQHrm$YxE2E^bVmp_WtJz&eCFwUMUm%+tf4!XOKA6S z)7%@^A@V`(*wjjE-$92BwFT4nLFm7I+&YV=3%_zi3+U6w#4ge>S#&2g1zGB`3BvjU1<}7G<#CD8#{L@U`=P^xE6#Duq8G3h#l5(= zfAGwux6TYt#Rfk{AgW)?Z=W(r8*~VCkdaI}(Vq}XacTtWRp#saBEqHhC_C(qc2{Q> zB07RMB318-V&Xp#skMf8kS%Z<5kWm|xN>J6dVLR6_QTA9_)DDf%k?`qH7gG2g_p6u zsJ@il4$2mTg%9HXY%bj|TFtE<4dYEEyhZioEI2n%ct0lug?NPxQb}JmB1M8ode3rjrm=7;B;&XZYm#^ z{*Sv#Z!HE~{d*c=(St)%J>4c~;f9)_IV*JBmQ72f&P1$-df%NxK$*$QCS2z%aa8~S z*KLX!Fvx7Q-syQ4gVlWsA$3}!tPR=#?(le=g`<`5l5Ak`QJ1H_`-bF-^DQ=(HJ-_M4{Y}% zDO7@dZS=C_@p2;6+Pye+|0yANcY6F;3NXoJ$CZu`7MZvw`Uay)=j%ZAM(Vb``lY?! z3-m(Y?%CCB^92OeKL?@bvrcZt$X?y^KCyt|8XnFw7!rnBxO#o!H7N36D;Y|43^^jc+6X7!k9)eeqAu>eL85PrhX5*JL7wT}${Syxdd}i1uk$`T>jd$$sHb2s zP02V_?3)T_M>i80>i!v_0osWy>U!7ImsrZ@FTt3fmDq2|+JDl|j? z<-!B3UQ9JzpXXQR(eVlvknR$fk8s|zajN0ke1ZD5qOV#D=kw9F=xMw`3fq#;`(3cB zu5?q6eqg6O!Ds7GJdBIbOMWq8?;;O1b+#yMZh_L@{I48JpVtuuZ9P?M^#41Dm|T&t zCu34?)=P9k;EqbSwpp7iE_d`C6PnNvSaa|WS_ev`g}ri}w5Ij=(a!#*p5?bL`>VgA z3;M4GfhOhw;8B-=L)Hw6(3^qM+fBlO-cLv|&rMf|08k|-3`fqqJcx5fm;H1{3VQC5 zXMhEFM-;v_17z<_Y>sFdqn>MDHatWrGXELlLgUJy(Q&2D-^9wY?+^58$kucbJ#djznwf=AJf z%n94l@u_u(1KkiEfFZDg=Tuaqct8DCpEYbyhd9uK3x+x!gD40$fV=e-8qp9{daM zUe4|guO)ke$=sFqeQIC>_eF90T6~Ig2JfbFXHz=c)QP&>y;MhY$R%KAagjyCE#E)) zyahwV$sRe80m~i$+Cr>hx29fLFMGuz)pG%=4g2ExgV6=uBEh%T`DVlJ;Z39&aR<){ ze~iQMRklQMpAQz2vwa&f)3bc+-%=ilr&Sx5`pfNF0%;AI?c7O+eTH-%Z2ZFPLQnS& zat4M^-jS_s)K3n(QdXdHzVQY#NcQn|v0KnO)8W96U%`I*f(2k;Wp;1(G{1(Y-?)zf zcdmGHfDZ%?Gm$9;U)3`PbH zOq7^07_V{t@~F@4A(91}Bz^cmw<;t~8Y>-}*TgHS@(5TlQ_Vy8>&M{yfdk0`YUSi} z_4Dig_y~|Je4saj!t6QsT03wiurcw)j*W4%KoTWSO@2 zpr;#P`X(#KAEB0vqwRSHYTJk5`!o0y9FLNxI#^e_tx?0o%yF~mvI|jF@Q#kZwzcw^ zli`$Mgm4bZj{BUBmJ4P@XJs%~U!+M$uBRV=m+6^j!&2PEOw2yt^d!4s2dx*AtMaYV zh2k+uK-}RI_;Gq~oj@8*i=LIoYwto6L!De8^zpLy(E(Hfq&j)FQ0l~=_>(m#C>LqQ zQ+2om0 zI-XlVKSsDB;mg2})?wfn`vmx(Jw*N^-Y+8l0JcCtgpaQ`zybprw)>lbg+%@i{rdSt zp=kJ(`T6m?`)3RLKVX|}F@%%IzBxv_APi+fHsWAA1n}@-;kz)TJK~w1f%(AHAtL`O zaopfBhGTFuFKSvkruVG%p88=;QQyM$!qTTpNRcFEWjdP^35PhIB><&aj8CX7w$b8> zQ%EY~cjy><>YnUWV=*Q~98gSom@E~xC#G(?f12TdBM>jvKM0n?AKklH%swlSnM+rl$1q)N_um~u&C5aYe& zo%R{mh!*0a@F!&yfAQuZNzEKbFl~E&rChgeXdJ!EAmyrFBh6v+Z!GYfW6Ibtx6jOm z53#p)0A}W_0Fh8F-f}~{-9FXtk5WbT8>Oet@hM-=BP!@_(4u$Yol+$TOzDVPR7Wg< zO5c@WoKLE{Xtn+|Gj!1|@bA#?A`tn`Zvrk3r2-rSAk4h#98Z@Q_U&ih{ZLYFmHQcP zVLwwdzqrX`ib zk}$U~cf@ywW%GS;wVo^S^KoRq-|hS|n&Ey8`B&G*q<=w+2KF{-$iI7msyC@RE0q>HA*pnsp=mse8*)n21~WFu&I)ZVgtM23Qhq z7rMKiksN={AOBDh<}B9H_l?Tra3sp&_4XSAz1dVxNm`t2+Ws{KXPe$k@i=D*dHB5V z^Zm75;=8}xDHUpr?LqH@i9m4ZUs%GwZmAtLUpO=~Y8Y1azSs?CV9SFz7C0`+>ZQ{k z_c!gxu)MrdY5YUWf2#1tO+VlwsmB8fvfU%RjQelx1;oVb%RZ!nZ!ItCG)@nd=h_Wv zn?3w#kz4HP)1Xs7OidecIlX4>cck6Ov97^ryw58*t5;?9lJA2X8TJ4i8Rmg85qs`u zdk;hAl{emKem*_p8{((uC4z0Ml}B-g(o%i*kLcHb^I;JCYu6FGx|g1eO-%kyLP{FUYiT~b{`Rj!RSf}W%EIKsm1d7R z`XhIYG;;Or00poiZ8a1wqdXmfV8>CcYbEBErn6~t;4Q_5b6F&#e-ep8&e*F=y~+qz z7O5uAp%leQ1*_8*s71Bo@p{A#5+6~L@qy-_5`l`a107TIvLujpWTY>cbBD{0=M2SV z{_;hAwr#CDInNfxRJP{sHtOOmr(JuF5VxxH`P$s@ujIwZ5L?X6xO6~KV&MQzig@1~ zh}-RaaNB6#`%jFt`c9_2V2xfVHM#Hq{Oc_kxc&jVN8?fCr%t?@@DBOBE|(~L{egba zEApVjq<@Fe7?L2V^tC%HwF?k@pF(}l2*Fdzd(3nY7cFtMK&Sjz9^@|}!^=873slS` znWG}s?-{;t;V#0{IFY6nuFvB&Y`+QqG5kAkWx;3Y_HeD7JA)o=giMR0?8;ok5FcQl zXGSIfjXr(}JGB2|RXdxIe*O`yTqY99Np}R9iAj}M7sdMUrNztjVBaw8GODJd3xZq* zZd%7%mk!1D9@)3dq}23?6ji)l-<)+H9y6pzbIJ&%c~=mw(e7+wk8*yUE(W{6k@=eB zWti++Hue5md7VWA&3dcF32eOcb_21TdcMh9fs$S^-wO?@K-00=2Lm(qmycOC$?f4o zKFJr3aX-wB@w56WI$V#~`LywaxA^C)S`YyIhvwtuPZuWr-d{PoPhY|Q&G6B-Vj0)$ zt6jjLm~NaZRH!s7?;@U>bQ(ft7+E5|{oeYg84l5zHD5o}1fdhq;Hm=jw$`8$TqbAc z_mznwi6(2>>DJ0NEt7n^ejV@*_jH>Y?5)Xk`(|RtSa!ukzE|zWX}BGwxO; zLA-R0g+?2==LMbLU*3PI2JQNZ`{^g4c*YLy=L%J3ICHcBc^M(@%YeBS@RL&P-?+zF zI5X9pLpmp@_Vx354G9v{k3E#SpDu@pH?b=a0~)CuO|`*0*mu^2{Cvt^m-cJ#eSEDO zj1A$V;g81_6&c*gnX_@;1-`#dZ1X>pF<^<5;&ZbPE}klC7k zxAj=OXvEqFzgX6Uu4y@r#=EO)Sk%_>o%;GoIKK6ZtVRJm0y?y)Qzmw0t_A&B2`^mx8do zE!GtU@-s0+b#kfbxA1sR;N3MTdj&z@U>UCpg zW}>)b_*mvMjSA&6b4S>VBmeQ#P6I5=%)hF&en%cccuSK^{0ScOuj`fC-`PhGVb99f z{p0F=i5eOzy;sUL3Ygq`f_)?={AVD2G=rm6<_k{SR~i+lpJ5N{-<7yDF5!XxTIhGp z+VdWqO8e?75fDO_g<@IMVb58q(7Zo^c(TWRDRCEkp4wVTaEG(9WR6bcHA;;BT9sST zN4~Ga`KctDmnaU*gMMy6fGcq?Y#9I)2Pl5WT<%fOYui1pjv!{k`(+L5Z9MTkgn9S! z@~Qj1zD@nCT`iXz0w>a)FT&-~z@ExXs{zCgMy8o7phMZQXXIvk(pSH2UIb#CLmWZ& zPHOIF_{H~f1mkhqcThZ)doW1DPsFDhrc&yd&*ytM83hw&BJr#BtL|sm(a&O-)BKwz z(5AW>Gt7Gf`If!jE}G24UjjU{w(nMqs)K99V>JsZ()f5gV({XtYy;)Dtu39l4nPR+ z1r#!jtkTCcXajqP_s9ZAJia-h9^>;rEujttur|AxX3;>>hMg-Z|I8!YrccSarL40v zeaTZSSZ4M5T+RFMJ|x|K>h=ymHJJ2$*xk_{${#b~kf<&_Y~J4;_1=$C-J^sq%PMRr zk;<;HtsA;}S*7hLUzQmoQyie!?UdL22+9Y2SqZczRL8rWNyM5WMEPa-G&SBAy~vXH zpSP)J86F3T7k`l^_TFllargW+e-HJ%ylUkt6x?N9X!c&kC(N#R;_|LFmkQ`a^w3?! zx*VoZqj+CA@uHwUqgmG>BegyIuu11^D2AK$!bK&SjTf{M?AU3xtm;070*mJ7YY0b} z3S*ch4yboS*?gTQ0I~4$k^S6D+kX58I0+x4TjjA${~$TafqqagH`rWH>CdRw_vi9K zoi7_L5dJ@Fe}gF)zch3#i^vFRXmO>ak2{6Y6(OZOW}UB48WsmtlWVZ^I_ zGp~2@L7n#xU#}O3yRAbv>rSXm;h$7CMRq0%J5+-Bkc7p#uZL;Xf1FhMmWlSCtdH~KSieR%+dtLCSRwRKF7D-5v5z?_mdjNes?~fosmQvE$me=*KGqUA_>MpW^rq-YZQU>KYn4fYUmQ!V!3i zWdmS2q1$cEEl$B{#1?}`boJU~GvEE3c)}D%^ds#Z` zR0vZff#GiAeaHftTZDAQr!k-IBR0YsUe3V^Z!SWORBuK4bYp(y-C*=;Blf^o?Z;sT z2Ms(F%w1r4*f8T*>9RJV>}T?@LoZzdSBgp^D6vXPuNetVnE3;LTvzv#(-5gWoR^e2_iZDy}Q5 zvnX&%A2@dO=fS#~qm4-wz3(;zx8Dx@*b$6hRx*ii5--5q^tG}VLfY%j7x5ePdl-RS z>3l0@xCA9JLD~8p^zV~%5i(W}o$&moF9qNsGrSh|QUarb0~s|XR^JbH2Jx=! zRo`1$0TU6dM=DIb7`Yl<+ASYT2|EYfhlQ^~^sF7X*W}Tk;j(y%{JHbi$aK>-Ip!xr zrOXL}%9)}cj)n$vvlseX)sW9rs<8bb+~d)Gptd=zgWnX_}X}z1UN+YGmN?~u6ahQcS$?k(yn-$<`f!L0*pk< zc941*QnPuh`b8Arw|yxUY1&sREWLs%7AlAFt(DSrDkq9zN8MHDyuO}4llQIW{8}16 zF4I3_oF1U{17qrRU&Buir#=|CH`@`elbZLS%a#qN z^9Qx}W1o4It`7Dgd2HjW=;ueuqufk#gzE0z9b|Q?F-g%FJiDfFI@S8Q3MXto{uLO&N=W5ISY~J74={6&~|d-XPF~qqWmYp5{~Mcw69ydVirV z=nnQ_&-C0=D&|TGziG6+p4UfmE4O44%6&v0@9`;_7>jAM*BQjD=Wlwi<={xQvrgu{ zd8Y(Lh534kKf;4{kd#QMl(KLodwN9*6~~Ni3;+o4CC|Lzwb#$#`=vH7Vc-)`SXi1x ziZ;zIi$N!VGMPSdAvNvh8r@>%p}x~9)ooznWUqfbs3Y(@4X9=?uAy2q|*9xeJIC02n6~W z`kmpOLX>7m0I{m!%|~wZ=9kAtPv4ty&nNT}*7!NI7Z#AlyC9h|ec&(Z$!4Kzd-55h z{7e;mcJ%qh%qzJ&U6?&MO)>-wui|V@clpJmb8`0v zF@5;Acit&8B7A1~(55x-lT^2C2km;uub?3rhN%+seIXZ+M!<;(JGHU$3tX%nh8loM z_LfN7f~m9!Tm{Qjdy#7aav#|t13sFAvy}$|X41Z{;@(Y*C5c6@xFKu$aO3$-+R2nv z$3&b4n#M6BibJ^$;Q`!i0V`9y4Ny!@ikOt$ug9K#k89a&z!R?HD@{H4Nf{1#v9i_I zph>WJiay{Yu>1**Xivr(&Vh4V(R1OWaZ8RX0q;MY_)6)3nEuE}gw66#La1LFvHa98 z-iH7bKdzFwS9TJJz~!j8Fx%1V%-H8LU{hmMFBJV%xYiA>0`PqjjD^$LNY<+0xb3m{c zC>d<|&p+U5$GB(_9AZJfcYgro7gd5zhf`A&u#NctHQ2FT4>ar3+9UX|&(zAY+VP2b zdwGWq&{Wh%g_`DL`CK>pRDMEZLcuY6wmL3XG`I0S_57=V`W+0?KHSnkowWIWWPfYI zOW}p$0@B2^;zKGSG#E;6dC=(HDA%d2+7_pPE;&Z4H~`W1Jx_MRgIPP)d2_`R5DENM zx;Ez?u9<78u8bRW+iLH8+J@V_{^e1p@!kM`O^i1aOsnSi3DL*Cv3y>SMW1G<_&`-A zag#kn#NE9oz`I}Yw1{5(PuqFc*P0SM9 zW9y8xB7eMK8>sZltyr?%3IPb$$^c!wS#Z5E9uM`7R%+G51IQ;%mGzN{JNq{;|?ndy!I07hko)IA8MiPFU%NQw3I>Vj(HoK zo)X;ex8f&}&n!bP*1%+8Ja`)HeaGNo+>clcMQLAW08`n1GI+lEBH?>?&WM=e33nL5~C3&HU;hK_t9Nv74N5vLUJa3w^W{1 zs8rmLfvD%`L_)@FqbdEVN@}n`xG6nR(0>DHQ*WnfZ5jevIKZ%P>+%@Xyas=6E9uks zx-Zr|2OYPPB;$rW?!j6H!T86>TGIVc#!!9YTs?k5#uCG8`oQmMI|`p~emT;bC=1zc zts=(z(0(5+;{`=$=^4fBO?c(fAI=@bX8E`er{hDMpNBh%FK6)_c0>>xF??@1<$9+j zYt}%PTXP0MyoV?`kdEyM#so5aGSySclE?i$DycYs4fTFIyDy(?xzBx@-}_Qv0#!}M zVep#9859-aOkZj5dNbGnJGq!V!4IZEtUa8#knN6_^!+&U4O@Z1BHA=6&}JcrM^5D) zlrWv7SQR(xrY+_4bNQ zRdJ%fVBFtBZKd0YBrV|`UKw{7(MR)YD|L(_MlcJrDae5Ug_Cuk2^)>=1s-8m`#GhT zP^T_`pvawsFJ6Q0-F|PfX7^}*Nt2a&A6gGJf=Q3o5g`hWaX_KH|9-`&LDl3CptbYr zzcF~e?o*Y!=&j^nW-aiX`Ao+aymGnbHo`gS%a3)6nt|exhyFA@qnU;1Tex>t?Q(3` z5RYTxX-B1|HO&OcrKOKq*TUjuzu)dYWZ-~lB`Ez|o{Qyg+2_YSL+%)SO?Ut~6KI%U zLF>5tG_}`+MohH7WHGue^%8jYH5tg5MJO2eH{>v&v3e-Z?GM!aeVgH~;>ujZ6q*gOH@ zywRMY`31aUAGXB4~NCPf;qyAPniKF*Dbayp@?up}qSZ<|l=@HSA>lMyd>7T<9#W~yfkhP`=EsjkdaZlQ%j@0L-Lo^i z)*r5D^(0NTV4OoRFk>LwhK&GfZ-^De>JIX@E4@yrjh$a#^kZplj}wqximug6)extc z5CNMUkHkfUdajRtQ8htTAv?MpI&NC2V38LBe>nwCeHeD4hR}EWrr6Uo-LQo2|7xsG zasoEg-WLFactA)Z%)-KWp2mE^fp=`%qI9^dEX zb%MPD7iv)ggEpKa9hEQ4x4{q4Key(_PN_PaSQ>TJ$Ux1c%5VAo{LN^-zs3(Dx#Aw17?byC&S_3AgGop&93dm|3- z$&)A^3l7C(GXxp@lU^l)ghV=!C)0PzDeKoROc}Gg`Je#Y^-A%`0?{2(Zr)JvCFwNM zFvT~8QeCYN3l@&IZF}VsytP0?)M+{&MNkPp`TbJleV=c7pe9lADP^-4rx{GKQm09{ z6xdK}4dZvoR1DJ*@xGXg`|UL|{z?Y3+v`3x3*x=$zP)+kZGd=^j=Aa-#5>l>lLj6d z$@|W=Klhm}VLyOZ9~0bOaRp^1JjbD&H1Jr)-Xw|vG(+AJ;td=$9BAOrYO9YgI|WU! zC|Nkqk2l30f3E#A!b1pJz+U@pp1gECsjCF|YP!l22$o-zq^}Z~NB6G^RX3Gmh;Hu~ zT+ywGfr%NPC1iqvC7jae6+7SCS|K&C_G;5NBlCI*ygKmzV4B<}E#$qA_^u2J%ysb{ zNYQ8iOfc3vUw&*Nv72$-_aXi*ELf4Co9D9L)%}(Bk0RAeb^5Lr&gi2mz(9+O%V00_ zJuImq%}74W?(OgMhXT{j5999(N?ks`H~~tfz33Ka_P0;e{T6fqbd8+DPq^9sGWI=x z9sU&Y@O#12>At3jgYC>)lP&$y-|PN3Qm{>cKAyy1ttD)ETVnvk!|AA#S0u{oF~a&1 zul@-%H{~m$HZjQ?kX`pDgdkRkwMX$r&4v7IF&Cr+0Q>T+vDdvKh4@Aw0p?D1M#Rh% z$GoI&WAe-37)9`}wU8ZUx%16(TP|YZy0z39C+mBffY1*lrhG)s-Xs1nhZz(O5SG!b z2o_H}tSCVO&Yc=r1#GbZqMC1$E#V+h#i+*MB(#kqiTb;w#Pj z^Sp(>*Ex|>`f4~txR0Ne^8W%`#K#9dHDHc1B&YEp$@->Ogtn8BFWy!LXm*&RVpg!`=W=)ROxxft+Jc zL2=}m&1dP*ll3Y|`t)$qP|8jj4glZp8~r-v@M@u8c8<1FhW%_lX`8O2UJQu~JE8)X ztwICNI69&jkrmF}D)^EQ(CM9F<85N+wyIjqe06;+%#hJxj4xOXMH}tD z>JL$WKFoCZ=3dj!jBbv1Samr)$@S@&mzi5X?)5V56J;<|_TWBLSS{q`Zo?r)^R4j= z`||j+ndvLiMKxAOfe-wKd6u4+RP_BoHc!_FORxg`SQAC1@eNyTnjd8(T9Nu*`}{1` zLKY);cT2QnbBrO3I^$zBJWG{^(+n~@ypj(p?r&*gfRPurka${d8qo&s3mqf>JRh^u zZ?k`&%6cJ-P#-bnzDfF7#go--+s`{dR1G>9h^EWJ;*$KEy(i@WuMWNHKH3-EvgmPZ zAt9Zi%V2HeV%bURvGB3yRBAi2;tPDI{59wQXIr%_)afK{P*?BMVE#h5C9B#9(t^ zlJ=bvo<5CefDjAd*>}+(=xMoDftUej5Q5M91YO%!g1FtQ3hVE2Kgh1b)CT=sj{vs8uEVA%zV(d+)y+Hf={;__}j z24Y^24FqcgNLBHV;#+e|%{rmT5le*dz*7`tB&}~|JuyKNRs!6pPA-;{vr*XBpcLry zeBfn@n|~kLCc01Bf2u;$Iqdzy=W{B}eWw)wV)N+crQc@lEbY-J*MTgs6(Iva36RXe zi5nY?`;de|d_vkgUOB^f7J>cVgC39smV@t%Png7xN|9DlhhKX2c3W&4KpdXgw-xz7 zLE8QR`g^hHXHuR4Bo0nXJS!8gW;f{)UNg)wpd~wY;%grJ8S?Qby$RsD z^!#6%=$OaJp^tHQ)|2$sNqybGX*%8DZgI74Xz86r7`O+m|a5{u!(| zsHzAV;NhWI?-QJOD!KK1Lb+4r&&_xB8f=@bwua%;ozsK-vc6Dw#0MyZEmZ~>w3ng_ENz(2tuJ|r~DDf*K1XhY(FpijLd6xP}39fy)z`djO|O6DaSjMn}7tU z)NIQD)j}!_&--I(bQ+h;DgA*`mhX8F<@#17=iQ@fbgz%@SA31$#)X#2Wc%*)c!k%0 z5Jzh0W)U~!c?hu`Vjzxe$Sp#7j-MU-mR+L4cKO4e*1^B$8&*<(dce56d+Ev+pMygS!A^E1Hvi(jCx%P&V6rRd`M41L zNB75znG+z?-E}A~V46Y~a9{ZxNFpfjDn7`4^+iGT$ush2L?!9$b-eZ7by{HNL}5%( zu#%yI40cddiThiSgvRuuh>rXoM$8>?H1Tq5VF$SkLJIeVD zxphnl)3~QzXV&ENH|&PYe)`J7Fc9JUEAmB-q8EO>_!kJC3P~(7SHIW;lN&D(i8uC@ z>Lg$TbU-dgYA71aeZm7gDPwlEqGp+QusxioddDB}a~3Ml-1A^}B9}kR(_6Ygps)72 zcF{@h2s00hrjzp{{*=jHB7a)k<8ppMGRzUp+3$)vrGiI}%;IXo$(cD^t|EFTLMJ`X zx_EV*8onXzAqDDvy7a3OjMs}zsLkj%!}e!|azgWI$o3i0{hYmaC)lzW&@9%~KhU(sE+gEu5XrLvvtB;iM zUXD{{`8!7hfL|4NCzFUHPWSI`6?Q}(gEG?W!SzK*+wWDnuGXPPL!=$o9~5TwE0ffp zJ&*AQraCdA(w7MnwC8>=moOQ)_-KRe!*gVU&&#=S)KEjL;N{s^?7&^`{zv{cL|+W#3o3zCw(^_`7M`jd#_;984s;;J zzl=<8N!YP1IZ<0fM%ig^;?#Gj(q?11$1;uk9#Y`;hb}$@mla^my14`;+Cc7LAy>EQ zRxA3(hP)Zb)Sl0v2LS)zsWJimMpfW?tX?^~XI_vH{GM!!@qR-ssZzh~mXtGv@x-zIY^J-1UEoHG{q1=k6!L^6eOa-W|0-Fu@u)*eWOzmCMj$BVt+ToS#N- z`oI<>b8;9Bl{v>N)Lb_3EC_zT&tz?Zj{B|!*&5Id0%8fk8(P#u>0i$z ziCPemW6S;V8;MR|R}NA#Q4RUl<9tZ^5J(P-3hdLfKN+6l&8#CX0 zJy@9G2kO{(A2mNvVl#d=bb z%BcB+7>mo6c>x2CQ{gt7Ym#Xr+_u^^euYv*C*pNxE6uWu=8yYED-(b9A z-K%Vm7kujQDt+G&>Rbfp4)0kGXMcv&g&T7lShnwdn*cm09r^tORy_3r5rmwiM4hyQ z`$ywI$uYDp@E)Mcl&lg2x^Cjs9d}@W=lU|RC!8-R*%Ix#3wvycy*KJoqap~)bN$l} z)fuEIuwGDRdb+p3sfz)R3TzEdgWfI(6`<9cg8`NT&}f z7P$7&+b4WA;!8ihz(c7$mwRySpP((lcu6X#`?uN~1rkLV7@F}{i1CGWqy<4y@IYZX zi3?e#5J3`&ptioo1a5#(UY5s=z2#kTvd`}a-aurSYW;2ccbm#K=DvW~22fwU5V^MO zaqUCn1*3Pjnr`ldyM*a6F}OJ6P~h9|Xi{xa`59hnyIju^izlxW5JP~gDlo$41WKLt z;f4u?X$W_oKNR6c53<*e&I1aU4^_!~03MLVt|``(%;qo- zq23FVdrje0d=1&$AJ%QwGa4h=B%U zhJ5}d8+I|zN+m}JSp5CO;BhpWr+z-a%OmPCv9J&!2hzWj_VyR;#}+B^?&h z9zpxEvKE|~M6|TEv zr@uqqoM+1!Km2=eVOe@gql=%t%js1>4{NX@x<5^5&Qc0QEGfV;?w8sqMEBA)@rMDF z)~UgqFwX~HVg6_fkObb@$54CIRBt^02HP7p-hhU20;Lkjl-!{*&}dM22N`zQkGvIP z&(57iZhbMDE6{bs2|{XzSmmzcmI1TGDcaL%V;iy>Ls&lhoY&?Ib)&=`!KGg>I z*>75A-<6Qx9}a($gU|g(XAu8w&(vGZGTOeU#hQo05sJ-lk?6%6idmLockj2A%c>S@ z{gmrQV%^~pILxX~oPhxU_?7=qQaM>ZZXNM>E+WsQm|sGi2l{y8cgzKRG9Ha^bM-Tn zvv7}ZCcklvrRA3|o!c~`wDn-z;zryTy?f4P zca;n3zJ-Dq;yU_aE{I2wLij$aK(8xFvm%Wn@$xr+v5r!}Wg}Vsp7OlzG(eq5IfM~3e#+`~EP6OWmZW^Uv|`X6`Qz1hurfuz_u{@Sl;wmKo2$5? z^^5;3abSG5)eV{vkojM%5!&})WqKzq!Aw*79}X36X9R@(erdhEz02&7vqiVx?f3T# zQ=D93@imWrxb7_mu*e)c63~VnI zf0#zS=Wk5vx|c=>16M%RU&zM#LQwmn{pX>O{{X7TXIVlX|9-Wc)Ao-BrRj)6Xt95d zgaM`I0wp@QT#`p*O`YM` zN@ONL>Zrq0@tHahhA)lTSG17@jA**)TJ4)jbCA3}Y1Tpwt2@3J@mGoid*63Bs)6z6 z?Po!lMcU_e1V+Ac%k`H+)>l3SYW%M`biOxb={)SMM3p(y-szDJZ1ngUbyZ)*^WCZ$ zmi+Xt(zIb-8_eNz{+es-;V@idoH7M2*d+P;+XoSHw8;Z$qO7^`Vlfy*WIg~wZ{4x> z+RIPQlZ6WEH@&LDoMV5$RY9RscvdF?)j(s$WeQ!5OiUmhO|(kuq~{zOhHT=Q1hrksRV-RXJXU|&a+_tUT5 zr`rPc%r>|`(JKx{E&(>c$4>>+=-2mgZFres`R*Al>4gEcPyFy#YRD<|A~}ahc2y~A#CDH3a1PkVXAeUse-yP!mlqe)Y3 z`28XB5IW#GG6{QdP41_1p8j%bvl8;Nr6=HiFVP(j7xspZyf5`{%Zw}phJxo{szj7! zI=IL5-PFB+P?9;hRpDQI3Y&4CNgN25I5=WJmD1C*eTpU?Wwsj0oS>%o$2q}{9`i&X zbd~5$zKA(65rO!>p6BoSd%4bj%fw~U5`y*Oqj$P&C9Fh>$E&;ukT2_-S5SrbmGKFP zMi}6|T$@t9ygHLiAC4Wud%ROB{jk7s?kE-Jkwxv?-0)^>I;})b+?h|5ARXU?%+Og93ulh^-p<&c8FUp zmNLyI(db}Puy9?yEQNx)N2C~9jz=dRT)?-EiT#>obG}q%HJyc?|c61@aenlnKQoU@`NN*Mx>5rXxC>$UA zz2!UL_G#j^z`~t?H63P2Y`%Kh@O7`&((HqE8#9+{wRt;lCBdb^d9hqVds_nddN@Od z3Vic?Vxu`-diDL~`ao;rlbS&re5A-Vj5mc$(b@%zCQRIXf;@FLtmCCkG?cG1%AKXl zWiuw$o^O((TX*V{Ee99{40#^4;1w)tF*>c2^|uSrQ|S^MQWDE@^hOW;{4SFwy_S48 z14o7!L{B>P7_(M)Se`mAZ-YnRdrP+GEu5)K!s3Cv$jWBYrw*O-G(WBrOPpS3{ZRJH zUgSzy6`0DNzI5BZ)t@dQ6BtRw%D z^jN_J5>T?Jun$6;ju_~|8x>wrL4}(wP^45wz4G-3?*x1;{i)dxJfuq1A|6P1;5Rsvtr$?CnxQ?F&2F=B}AM3YfoHf>>zM5%3kwH$QAHX6Y`Q@Bv5wFjO*(fhD zyW}d0FP@A4AU?f_4O%2mumyko;ucui_miz-H@y)!Ib7O0haki&`t0>xIh3MzuB)&3 z+ly2Iils43}X8F(f6 z2<6w>atS;vfcB}}*{xO6FDlA9JW)nDz+mBc!gdLZFnO`w*v|w%3FTvupWxRiAf0<& zqwaH=d30BlZmM5V(tPeG`RzK8wgIJ}g&wLJ73wBTE?Y2kWh?1LA(F)eDe!N9u*G#b zdi%oPDP0OX!Z~aBdTO`>0X^j7a>Rr-6TycYrn~8ouThsQALSK}Fv$lZta49Lf&{f% zXfO>ZchR&udny9`}(dDVvsvF!XQ{}*KD4g3jt01S_Erg%vZN6Tvt-eUNML>b4 zIiun#oT4X6N$l2?&bF64E$w?^;N>=n(_^Yu0+7a22mz>vHq@ER`&S=;0lNHV?$&Ks zO%3sH9JcMHxew3HvK50koU@>A-c>;e@wDG5s zY?3g-I~#}ug%~!69T-UV9)O4xO`qTy$GNfHRLAA4W9@@cC;J_qJ;2irH2=-t7f^Bw zKR@?;p+WgF`{gX;knt0}`~kq|_wXwJDVY#w6Qc=>XIcX6@;3k5vg9=yPG`I?A5sHN zy>Nc?hYQZ>Sq3}Hp8`>Gp9B8GSbGhex;<0QHsoif7yBG!g4>>}OQj4E!3egIn;G=& zF!#b}X*N}T=Iw{7*V_a`+2lPfFlpuKx0kQ+uKCj(0V1sW69v;-=r$E%1x zV?n_`a;rw`YX9>YdYRkb62Ia;GyaACee?xNUo>CFp4V;J9+rT9V|W8iaz8aWmId%k zco!jX7APDH*TVmX-JJkEjYMtWWDKcFcYt=IrISc7U-wPQAzBH(+B8G@)BXzH^cq`n4`swKH12=-_7C4Zh`K6ZBN{E) zB8s|```=@b#Or8!<}ZJoQFC;lR{N%#vHdM6?3BD%NR;!;T5cZa{%Aj+HmpkM<6e0S z9JnGr+cS`4`^Wtp1O*ZAy;O@&w7_F@r4Xfxx<0>Kc&Wwwbvf8c<2m&_oXb6y0A#N{ zh_7b`g#spT*N@sGe@Bm9DztA_Wc=L?F;}_0ThN>4W61fE_a(Y*XpI?D zm?tzCId@bBU#`hs>W&WMljNR9-@WCCGM=zA?76%PK^^B9FD^vJYU<2<`^T-7PAu9f4NqNUExSw$ zIW`G8mj(0^rOzUo(5_CI`AG-I{xz$-1GT*xwrk8 z(;w<`rONo+0+H$IKPQ_Cj$0uLecdONwGu&gdzsh@fWe1BpX+qHbOXMXpu?Lq(3{V! zlM@R4O>2ZBty_jMfg8m?)&k_9L=7Q|`jEdrqr;dIfmO_hkC}ZX5;)e1{XTeRpel>B zUI~SL%wE5TZL>5)lmJnk%QLz`qIR#otLT0Xr~7)Ka2CFLVr4fkFj2m4tzR0bM6T}5 z*QS(&p)he2NBIpZC6tgN`Nnr>>bb=BW6k^vSegAybDDK$h#e@SIXGFv?ej8H_nNHQ zlJQYR8LAtkj0)6`$|!I@WOW(a=h?cs-I?)TJWS5W`u<4rCq2lIPWPlMXrAXxd1Kv4 zU%BtJ*Fn508mU=6NXwn=OCSY)&&Rd@MW3VS)K4mj z2<106S>a};W=vhoAYjo7c!=-einc0U3pb=}Wa|;3wr9h|SSwQ_bAA5|(hUo`B|`G+aV+K^qHqMd0IoWgQEctOvI7 zs6O<*=0N22b%D$dz7)R_jJ*kI7MaM`OIMdUr*qCveUG&8r}-^U8*+tz9!BF{eh3VD zK8yMJC9(N47j#G@TtO^(!d=IknSy~N*_BZNW#@)>Qs1+Iz^cY;WU4b66 z6^KzmCm7vYLhjyU=O_|b(--aZ@;2>r{lIw>AS1d@ZlI1ENSK4e6W0?!ZMc)?C*`6S zUt8F)1$~eHNGXSST1-~oGxqEIiB-;2grH7*F=QL22C|?0^@6t@x^u{EP**JGgj=(4 zU#jz3A@(3CWg~EvUSDd~Al3RSY0G=0(L+k_BC0gg(S|#3I;tN?%nj`KXjtS8H|O~< zE}yU12q3GW{{O*+$))xv$zkKqTbUFYAodCCF4Z%$Fj;{S!L)5iIn*eC`W z2O!hiVGrb_1Ev3lA~N3uDjYZFcx16gcu^KZFm2gDC%|i?JrFwbdt@!ZrHwY4haT%* zez^|ei4XcyKA9+^Q-@I0@7a|+%)sQi?C!xSeC5MkzEZRR`*R7*UQ=3VqYvj8of>1m zk6kr?zebzS){+%<{COc44F*3Rjspc(Cupwux2IVixLzh6mY2c&?@w7t2ccf5vi#B1 zIt{90c`Ro8PxpLP$Y8w>Y_Hx6zZ6(iY#!{y7*N3kLl0a=&++Y(>*AA*6Srqjy5_;p zJ$nPpCRl^7e9XeYZ`JW0z@+%~>c_xgp^m(L;XOei3)U*)dZ7yT2+(|;)6tYGTz|q!dsPR^@d(ft4m`cMYz>ckS;f-~7cQFXkzZ zH0y&jwR)mi4Jj6E^?PJ&anfsOlID*-dZb{;mT66RPz*d}Ay8B^{9W59E_^6A@rlWT zm4L$Zt5=&Jg|d^HZr6Q57^1!&D(K@jdPWxg0<2J6qV=oJ(GOh2FX`EbwPpUGWv@>M z4c}C5vg$$~?XcME7o&bQjw6`}53j&!T+jdm? z?O$HJIcDeZiDY;GJ+CQR9dj^01cw-+97ohsv6hKG0JtB^;sfhi?d9{S>E5s(gyJ18 zKCDX&D4HVyg+*&or?h939IK>&%DbUoJ1f4R&^I@n`@NPfqXt&TVV@RMfnRGSm@L8h z9;hFR)vj4y+uk0yagM*}5tVZTmGHy%YvIw}rjN2b%@7TUJPTX|7bQBg`eGpyZ(;x=rFsI0?4Cptvirq z6R`u+x!Jz!1nc_i1LTWmkNEjZ0gB@e=m z;gN3Q8B{kL-q)bc<5W;GT&L-*oBIkz*bY-_KqUDGRGzFSp2wZ~$ zo7vI%iYg%Nh;z}l_W8~GsE}WW^#|_a88!CXQoLD1xfNCvitIH?qVQzMAwdMvE4AN= zZyh&C6LT>9PLeAAKK8jRK35l?5KVEALf*?&65vKmL@y&7PAJ4=k@snZ4};uM*oaevYZQwnIXft7!u_{#>9THClpY)CQ#seFcktr6}x zKYwZJ%l(M%Cp=`XMe`fRioBQ0_IX9wwidqg{A&=zoQa|TTg zIcn7JP4SxJdOn_vhJwYY%h&A%9PlU&z}b7{ibTRkYtvMbS7Oy$_9(0D!ib=fLqnf; zG1ae`NCRq;?(>!#w{QKcS|5kxh7zw{#nq6Omd+CSsL0XJ$gXepz*`& z@tRdAX5|`Eh|_5T@d9G&-sR{e%aoi&W!Bg5akCcT36~Ef9^zFyyb0Ns8j96>$&C{9 zs*hH4V)vd*-pLNYQuz<^>}0Ij)A)10nHrcqWXG;7wj%-6g1CNP!3*>$F_#ib?T{8FiOx+IIN#HW}bkYZjV7p2MT2QNU!^BY!T^&G0>({y~1fKhBxzP zpXWC)2VyqP|0p|GPZgjfW9XpJo`jPlO2k4!Nz%Z2Dp(G1>hX5nI@^@J{hYew3nH2> zlX@-Yvr5VyemGJ5+#b7IKcP$-CueS?lAw$WFrehu$sQU6YDIiQS870kAoy|79#9_k z#*|~&Y9n7)YG3bEv9tVCY*M-)oS{L!C>)*XO@3|DofV$sWH^pxZ>Mci55&xh^p+0( zOYZTYleS|*e5Bl0m+{&@z%T^-EY>>d$}ZPnV`uL3y;a_%L=WNyJ$by{yf1Od7|lvv zCxC2Dw^)IOW3?cma!&-WS0pfky(1Tdfj(@Ry`P^AXv&+ z`;8`RfdZ>Qe{a8~v)fFeOr(7DOH8=}#)xCSEXX}A9Yem^cgkFO3hG>&kXUE)VmQU0 zZPgGyeiyGyd{@|?25_pPffUw0``rlsz~$n>N}APHH>T=CI7FzrLHc78?=Cx+AO6rD z|JcI9Xs~r#{{~2k>|OKs@4D^9AmMJd-+jsmgPE^aAX;KB4KY1+ufV?L@R4-KLCBEkeH*_*QSgs3Ki{@eaT_mME?4->k^6WC!5AiG*0dg5`}b-+Gc<3V<(&6n zcu1$qG}DoiDZ@l4EC=+cXoDGB)CUu=Xy!WSeBK=`FuejpwW}(7oH(gGbn|nM@Y<$3 zJ=jcZ&CfzlFKkoqNdJQa*GLRBwBE5MI9_T4#2+f0MXK>=oFNGaF>#l2SEUdTaz& z2HtwVD9G@Ve#^tXgn#ug(0v$W0($RfeK!+2SFriIvVxNTeoqKsY4SDL_Ze=N1{ZTp zeXw6S6wrTVONDateJlUu)l!$~JDNt*osgVpho?&{MS-!fSDJ`L`F;{EBVPczI((n z+-_@s_%ehEYMggZx1)Ks&FK2K@i^IFv#bZc+VRPCIT4!;!#E?j%Zj`~P+P@gGll0DTrKeLvd{?~PvWNvbD}%Es51%5Le6Mp{&X?B5J|twn zX3*pbh0eiEs~V7iGMPrZ1LU09nD_< zapeOlZ((81XYI=j02O8%TaO=a>l>bw&pI{I!u5B;RQAWpudy0h*5e@GQm@9gEcnoreitnkPCII&>ro9++ndCu4P>?z_KX7(DoUw#iQw9P>Qe2+jH zfSCO-f0N4Vx4$*dVgbbe?+aaHj6f2;jgwDJGQua4yDZLcxHTf3fWs5+9(FJE0tcaZ z9Ei$!eL43*-8UY$O(F1NK;;ZS4ZPFAhN=fJ8Ypjwhr?`^E&`^Hx$wu-x@}F3C<`_~ zOcxBwu&T%LfES+>iil^AosQ1_QLEp1YdRLe-u>CYjLi%A_3<}Z(j=}KIlJh$8hIbP z1p9JHmeZ2}muOEDKp+JPJG-U#76S09XkKwZ&BOcEePC*oaE`m=c{x|#|FHLNZOf|J zndq;{Vdp|XghP;xA|NUtaI!8y1Z0owfBm|7zd2JgvnrLOyVISlm3dk9`642lXEUBL z?#)DfPUqv%N8*paW+&ex>hLzxSmYG1R$LYeN@4B8F6z5~AS6U+;Poh1Q;(YAEe!46 zK0MB3eoDs2>K>fwML$p`E?Dc-^@7V}bOSMr_h47*Q!F5l!j^3Kxl+jxuJII^!yQX# zC6(aCBIfO5em^(uebCD84sHnSJ}4PFKz6gbA-6P{d3lLfrh{0#$h=XozgjI*+@_I7ALS+We zpqz4d%pSl>pbV~=htFkKEbwl2kFOkS0CYta7k$op^KDV59nIdX8%e@l;R8=P&sZO+T1?W1=nR?& zOY%CMbWy+Ibhi*}nONvWEhlRo50DFfe#;2StW2Wtdo6JXwC%;^gbBeIJe&-y>F%Z!5G7|>y7$|9A`Y-F14PFtF1u<=gEMR=a!Zu0 zo%U6V2ND)rM2XTWd&^<&NJ_fc4ei1p(1IY=)>YQHJ3f~BRudQJjgd-j=@YB`^zeDA zj0N@#?JTML3peuZO*!Pmd3`FE)>IdPV5=8piAY{w&;mB`4B-h!2GG7CV-rQ0JvTKf z{Vl5bOL9s?U7{dxedY!AF3GmAZ}*&Bg0gCiqAr3lAo}C$$}V(Dr&e&P1}g!Vry_Oe z(Og_@NdPbmOlqzULv!3+&6BL!FG+a$hey6TXL{W#MyvdCQZ{b2a+`j(F$uJOF?(gt zWqiIrFpt5eoq@G@0z-wn522h`_a0sbV+~kH-UJY2-*QTw20U0u6Z!gaGGNJ*MDV>) z;!)kMn=67Wxt2FhJTn?#COv&yuf#ewNpdQoia*1*MYso)y8E8$t2OoC4p&c>MnQG^ z!s(#dg2Z37s(O=(TjWS8>_J$HsDB55sgAEhy;>4^%#Z&3gh>(H3W?CT255aBahnrw zv`&C;TQ}C_BI>H{7tG+z^|OeQZxZd=&4AJ;@?hA8*Vzz=$lQ-2WQLDiGx+jm@+)Tv zCoi3ULH6*ayu$Cz=u&5YISH3^txm%JaWrXY-ax3H9il_7!p-JcMKrSLB(#x*V>;~s z?Xd4>f(V$LE%c-HWk`!JXk)IO9d%fya9f)#RQM7DkQ6x~--xf+WQXyj3z5)24vyk? z%bu)uU)aGr7s$;MS(fdKcJ>F(=-lkH|HR8DaggF*%)YXLPYru88c=#n0|=Cr`->TvVaO zJRXm`_jmA@HOOT(CV-IX7thnJlLIAjVqj<30qjK*DdfhKY(7JMChaXpFb>?4kO)F5 z;dAsoIGz7VeYUWTP`Ge5T|&+gSX8B@<;%N%M#G2jrQ*|aeUUpe|4MO(rO*u?L z`)O#Xy?SjXUOH?61B3Y`tCuR2-E#!7Qm8UK9I2Vi2VX*E-o3%3DSmZU8dN8k8T0_5 z7Gx1gJj|S~+6An9_rt@2PB>r1IG^FUSOZO`p49Oh(m>Ba2`JM0qRdFfe8iyl1=Qs+ zF_XJ{$4~BJwIxnssNx`=rSs*m^PoYvH(>EdcI}RQTCI`pL7=I&0bPzGY2I4Sx^UIW zL3C<(HB1e3U`5s9#6C{#E6}KIls`lqXo-#0>mh&*KW5ciYy#Mw-GZi10eMH}@2j64 zpZ8JaI3nWL*JxL)u<|pBm`EPqgl?+vulhigyFEis-wsy4P`J|>ttvah!PwYX_ zy4aXB2g$#35C}buscXINrqz?yp^MXEit0*=J)wQ6jO@Q)M+gqjF-Q-`Ew{9vYhO7Z zUe|qCo^wMP_Lu!UUygb@o})02YMMhz3hI3oZ22bll}cLoR#wyQY~^Rh*`^mIC(>;} zLLDmL0=H=-B2On8Y9ag{)$oe(e;5-4q5(O#97S36?tX{FFJcwpNZ3JIHn6s=#0L{} zvOW$l5{gr6m)c1YR7WpGA1Iq1ID@O_=CV~1t9K>E7wxtJh)r@?EST41KtMvm<5=j@ z=T-(MfOvuPyrt+D(|@B~gXMmclQsQ*PjAuV!5DigI~8i;pH(dASF>MFIgf=`GV#o7 zmqRPD(tr~SQ7?obmRu1^Rog4p}0hxT=&AclBYo|p9Ya#Q_-hGTGBu)Wvz zBgxlQ^^_=_+ph7!)+n;g z4M*kD4=~Eq07A19rMe~{`YaIO2T65sf`iHYXkXsaGA|V1EWW7uN#F-(;_1TdRmI5* z=m9`QQtP3O`M%(&JS6k2df>XNYlW|2XKx-;Y`sr08a$R*)rB=H;3k%BWo6mFY8{ZS zU%HP?B%+-A9*ehX8~^nu+>|24Zilb%ec5%%jRy?lKV5~B_%+{2&o}Dn(5fQP1XQN9B()F&25M1UR zLS#%2`RJQsXoImZclMH;C6>*wYMkNe5YfqLKSB*UQ^#JtX4iK=vy;4Z^wNVnuY!H z`}4eMk9!p?tP}&Q%^!d=FSix3zfXB~pkiR+O5qL&)(8NPHggqlvtjfDbKM`DBO%*^ z)_>pcuyyyqc~egPI#q^=XZ^GWmO--ulSeg=v!$J?=4lw?Z4xUkmKNf09o6CHyam6<{ZBJIPY*F#9^HHsFQ4({3oWT> z>lLVnI#>8SHr~`0$nTlQ9z3i#o;>f86~rx<59@i(_{$(&xeAk2OFe)a^e%5aA{lID z-0tFCiLOQUifQ`yy-i!Ow1-^A>$7WNHh+cT-P3cgaLMt$?=w{ON~yyK%i+R%zV2627PkpUhbr1}lFwdN^Ex~ZVl(TdFtggvPx^>fH zdEO@cM@FH*?C(vj+>cm6zu@dQhb%lxf1Di0s{XV| z*y&twdyyR~Z--aa?d1J)o-uf~Qp_;h({c4Xe}Ho`rOnV)u)O0|SQd60sPYLfzev}r z=;eRyb0kz_sHBt`=Zj1n*0?u?Q%*J_1AvYO_V9jD6>+)9pJ$q#84$CuBFJ9Wr`%1f zhKlc&t$=4&@k-zQ414eMp_{hflGL%+g`%-^^U0ggGdZ&Ih<%-BbA9${aC+_M${-=c z{J0h&;eZ~u5OtrQ_iA*Taea^b3AJ9*aUD8T+33SME8sFvx^t?}I*G>;;;EP3-W!mL zT0lS(XDCzF+rUWmW7|0KCc+_5{$6>zU!v1U8yxl=CEp*Ln2Eu1Yt-V@?+&) zzQ+@M0g#d|DcBZ9KELoil(#^ZZo@D`KV#-8aHC4qu{gZ!Q)auGDppPRf=Z#;0|z^- zriJ=sSx*=1!5x5InPBhQPki=uQV-|ET8yj#=62SVw zqv}?c`@;LYT+eHEEZbnJS9@~+6@ozt2X05hFKC;L1mkKaCOEOcP`=>Z$@jbX3>&Td zrA^~FK36T3p>9I_8pqC0|ICYycjLP9p6IB3fOLA^W+GsQWAKoDmVsOlNc*sD)Gd@M z5TjCDj10ns>QD>F@AErxt^>$MabU%U<@b55A^VPsy^k5T+G0Z6GcV`zj(5U7`o8w& z^lcN^QSKhH7`wFffy0l{!gLjT)J*@n9=WeYoO!?`+pROf_=tplLiB?1Ap;L(^8gcq z?twB`D)7jkjJg5G8PxFc{n-YUM|U*(>D<&_Jxud@0J@V1;BU>@S6HlUoWj>>OTX2w zu=B3^DN>r}uq&^N%Z0Z{Y7S85tO9#x&(qID`;0DaZuxh0dT!T1d~0ocI>4^|fHZlS zdo=ucwC%7^;5EZ7M~Jg*4GJ1;qZ_+K!m7S-&vFPQ6p3+zefdoQ+vj{43V+n3QRu&p z4NoQzI{HQ2AM|yWZVLo=J|^3=)&ev6jJZ5U5GODa;isF4yekbzuWs}NRd>t`srhM$Rj;DT;MrSFA9CG9>61TakU zxJYD@O-dfEi~h+Z2DBSf(B6pu^)O&i>Ipg{i3d5Mf}d|(u2h7 zJDCYq3I!-UoKtW!%FF4<-@vIzLLHKF#Mv|iX8(DAyQ7mQQA*@6-WD$Tk)}Z$FJKTb%1P(0lupmTcn&`3Vo(I!JO_>D751GVTB%{ms*V)B-B#vGn-7 zHqjxodu+S5r(vnShuugB+IM_AR+C7Q$&C%FNwdKtL>`}r=__kP{B4VyhA&pYRHz<) zN^(FkwdC;9GNlps>Jd;#>;ez+XoOxOR$@dD-|v?>lj%6xL49 z2P!mr- zBH}SFR_8shKHa$i{ZC*aljU3tWlxrD1m^hG(s|^&Efg7#zGl9vove0<5d_GT62a^9 zk+m&~*7g^qZ{&E3gCx42oh^jI%ggA@h+iH!+y^$H-&8ov!$SIuay~;0&{M$Zzpmi{ zX2k-lB-yoBi@~}H`ne|~4RClPRbgAD&mM6q0hHgwO}W7oByR+kQMM4(y->}bUy&)r zAI?>7OLEQj4-569PkLKX`OL$V1{npbbM~qM(8Y_Cd8fM9_thAvtV7Fv1o@Y=JxMYk?soBQ^kWZ(Nw00KE*cQ=ns7s8D1m_|HKa)#!*Is8ViTaU2WLn$ z1>CxoAMcpdWG;N(gYDek@UXd{*$DUAg!J5{hKJw5nllAz{kN>o!fymo3mD+M-qsc# zo93B=K)GC&pYFs1H1biom11rPT+Z+=dwrkz2}>U#fv#a?eBeW5ey{n1SvXr~B=hs) zjVs@06hHJFC`uu*kMpC-@>f-x zzYn$fHVgN@@j^GE&t2xNeht8LZmzfe{kB_p9RbrRF}NjjFGo`wY3+;{CJ^ZJ$;!t> zP#@*11Rfd*!sYOM!)_UrIF2XZ_YYS@O6ih0=!Yf0g-6Oe9%ypqs#JKBFA>m$%y?i; zBuk&WR+p#EhD8`IHci73TkYXC(nz;m^qMC4Mj?-pk&j#GR#2ZfIr^?@oXU#3$53|4PnwP8E%G1lLW zKbAZO;bxwh_bEYKa_XOLTVpQkre1wkH7ZYDI@4YWPA7z@dE=5Z4 zUkJb}G7rGkNQEC#TvQ$AI;=;A)`B8_aqK7Mi zs5<{5Qg{b9_1XLYhxDo24+9{tyBNIjO=O7&lk~XSr_ajY(GTTWxI>15qvxHdjTCgJ zkUA#{-c&Yd#WS1X#cBp0|9N_1&b<{Z93=C%QYDOy(GKa~eA;6S+$r!hD^@KYF1SQM%N*e)79FzFci z8sG2Mad}H~KHE76p3dog!oGq)-^C0a@JFRYn&r33s{=p{`f)RTkUQEUzf@PPx+)s* zQX+R&x@H8Z<)pjV?3IRcg^?}2d)VF2OJRzD?(JVejscoghyrwlmjCki<|E8)2692Z zC0A~*tN5DEbqwwF2kQ9zrAM^Xogc_>oD%rR$aE^gLX*u(PfrHsS_HGqxiMV3r#S~y z$mx$6+Tr^sE&}8qiT5rBn-;7NgX6Y1j{aJ7eS@m@^?UxloRK6HOo#GTA5`zxCBNMh z)ORFg4Y-}p?H1kc=oloi*8Rd&E3f*`Lfvy{%INRU#$v0ImM7PTK`f#dTK8+byO!f5 zj>1Xw-FxpwZ$7ez=OwT)HUP057TQf9M*CR{4BR2X8aN;2`+mNTTKG1^EsRN-FgE=u zGkHaQ+ShE?w@}e6y5|*1zxiBR&uz(Q9YavB){oQM7AEGpQ-?>OLjWft)E;7$52E!_ zF3>y3<`<>++48QCy=pqR%H$A{1~YOR7C}tK1lp+52M`;9Aey7NjwMBXByVbev<}at zy%KH5PpYhvFWR1x%ihrP(kkDM*koyy^?Pa_aBpRscW$pc%fI_5Nl)$>MaW_9G@eRW;xpG89P-H=qm`l|K^J^vPWm{(|g|gG?8mBfBo7 z;zIH)1zPFY_^?G6?9^}krqZKI!-;q(rH47xjSlmPrJ$JhTGSdq2f)8zap8(AbgFs| zR;^~QaJi~J8GD0EUd*?B`97g{(yhfliFLw(#>u9+C#*^WZA7Hr;cIKe+Yrc8g5tDq ziLE{_@EEmur1_ilD&5okdA1$C1CPtmG~M-;fnz_0$s-pN9e|^XzfQ&$-ex(J!R|C{ zZEe|+kD1>O5!sjdY(9_uqr4I~;Ne3bN`5>o7w#4-zu$Uvq&7BfNI`-vA3J`jFu%y2 zNmtLiyOocR-7+9kJ}%&UI8HUGM|2=K=tcEPH)qxydn%MymYlA;yBVr99BW@{a_>;? zzMNhuTS%ci-RGnrGF{~Db?2AtlE^*3BeeLF$T(4ys*J@FMfuhhm}0HP*1 zvkne~SEyoM!c{Y&gJg^h&_MMm;edWhD5Mo(8gZdJ&*Xg1@WoHj1aw)UxWsaYTm0D1 z7fghPkJv@)tugX^6m*u``*4{;gYkxux~V?>l#g+)mEJyNSEbn1$rkPUnPBJjny--d zKWLerBls#&fs@ z8i2(-;mD}AUpQ5U(wl-b<74_RU)H#(?~n}|=;uql6y8skMm=z(5d%xB;EmEMZ@J5^ zI5AmH9ueOoD6$ftID7Z`u;0<|ZpR#o4mh@y)^lQg>BYB^6!}-{tUceCA% zvsf3`mk!vzW5>->bCP;Bcb?g46vcb+tc_9NJ%r<_QcFf7%ArU0Ze>zl!5xv8m@|p> zu!@hTS?rf_(1mZs>934hxCasxx?~*%8m7%&KFr$+ZyUbjXy^I!#Zg_(CURP6o#^^_ zO<#}bQ3&3OV>#na39mwdKRkHdeMD__*n7aswjh@E`&kpFiN7HkA5G?j{T~mA+ArkR z^#gvl-XN-Q6Gw9xo*|LfCNx4LzuxtoHT^7m+{M{|i*ohG8NHSp7Az_aNS zedHRt%HI!NXy)=dP>Rm?HsGE^5^X(Gux_S~O8e({)Gt^8R*w-`x$k4^ACoO8NdkUp z%*Vox-+EIg-H;AaLcG;mzPb~lvyZ=&_L{11=?5pY7YW2oZWuq_x!b|8bxPFEFiR9i zukUEUVL^O5Y;y>K#3(cm2h1`!T547>&T@z87Q~DVvhLE(-?NGR+VScS`*yV3;FDZ= z0Vj!eOkYA(Kc@2c?g{5R*s+twzRM-L#n)SAga(9F>?ocz`VBA3$5(-v!M1b}AbZek zYZ~-MS%ruE$6$d;i?@$B=E*uuaK7`(;eK57l{AuLI~l+?H20$mZsPS4G>9OMx$R{A z`*fM1^)wM@$kmIpS4g6Jb{M7T4+Z93V^@FEX7#JeFzWKV(^Hl(RZMv9HXiN=^7&J1 zj79<$dxMTCL@;RBNDh3nJb8kMCmsdkWqQ}{42@WR>_*z1&!@i2%*t#-A;0AmK z8UTm4n16Xz<0H!3+6+Y9~hM=?=PCF%;(gXQhoLWmO2Z%He@9KCE;lOv@ce}&pq%3 zp4*?t(-8II&SGLJt3?kk9^`g+jur**FBrOevcILQSPF<@_G9)gKA-l@&xpk@rkA6; zoPm~I;mtfkM?%^Ac^t7{xS)Nup{O0$HBIj4ZN%V-Z9E6J3tdRC$n23$N?E~wQB86H zVE13rfSP_EEIxGtaOrT=*9Zix#UMzTE5PwGm8bLD{+6{7Ket6i!4PK2m-hj-(UF>09~{Er(k{ z#-9X&>dC#)K6ZwLDi}9gnsc4NCRQ(#p?Z z^9$o7$tEY#053;@bwIw+AjQwx?Du#KFIU!(|x zqhV0m1zemLZR`(Q*MR{{f5)MQOMLGKWIEb0Er)8Nh z1tUQ!i#ojN@K(<1%d*d>M`xTI=R{Hn7eDIvN3DF)GOfL_$9p2)E-1T8WTfX(^c8%P z3ftQ{8wgbv=^O9g*B37`(tD$Wfw%H_Y_Vhmz4Rcr*c~<3$M$5nTc%i%QcfNSts=!e zx2p_x%6ZZCJEZ)`CzQDgNT})X$O_<~x`M>em3hPxT`;5(N<-td#T^8{AMBF>KrTD` zs5g-CG*)?8H?bs6;+9;!5<(dB2DIBCNpgciia7$jj>=c-of~#p3+wPnMBa*v8HYo1 zwh_WF-aXFO@WAja(B4!XtB^w8e|N^#H16V?yf4h|eK|tWMZzlM485oEF_M|U2Aumm zT}~f3%1{%TD!Fn!0>a8D;bm@q4}%B zohJTGNDFk`M2H%?=i{)CVM=Lu2X4zQaGscS#fWPaj?{Y(Qo#5{N+fz-o-IW6`oYc9 zX?jWG9mk~xIv zj>dl)Bt!AmKtZCPYgsvL>f5MoXuS5~SNz(UB1y>6Ce|0g%JAf{o_JT}dxFF!!T&g= zS0n_BTXiKD;|S3@gitU+KiYcJRBO(H!HcpOyAtrSGM5QK`NGlcFgaO)@HtUs_}aN= z;8iHtB+;>pz#1gQ!o|8ai{1*}l$Q7`6#V&3TaL+k<2m$r|h1QlW=n zH~$+H5_hTntLP+;WE?s5jB<-w&X4sS#~Kq0ER~&;bNm$59La#_n$m?cFz(s!6Ebhl zpZkJ3xkB8axc@jc>7IAh!xvzjs*H|7AjM#8`~2g=J(bP$0SlLT3*|5PpW7Wc`*OUv z?&K>$4;g?+72o|=hE*C59LD1tou+ky_I%ga66{ft0HxgVbl)E^TFM~Pvt0^fU})VQ z=J@Vs+n7|xghODqta?;z`LtW5?Wc$+w2ri_e108&{VR*vh0%f37%=nFl=<%1ifK)l7P-}ri@||63FmJ zTWc@GJrBhZaTdqz7*Pl#rT|sDp097=@pJNnX7}73oS4t786IE)t475|UTX zeRNWfZEN%xp3jp73AU7~x0rwF;nIws5HHTky-v3pB>7t{8m)a7<6XLHo2somHC+Xl z*o>YcEcp2Q+c2JAv9GHuJ^P09=_Og)y~05W59Gqr4UN}z)D`vcq`**>c35#PG3iTD#_irJbP?p&B5~X{E{!f# zmS#*%d2C1B^yy;C(3bGEea57{dw->y=#G4WM*s@7BPMBDKQ`J)zr5y5?Z2?R6Kqg7 zJkJnB9-MyerITR@_?tO2X(6SrdAa9M4S`XXKk0fa_(u(?_Z{&HXapV6f;HsOWm9YUJG01kq6_PyC3rH0$GvJRQx+_V+>v; zopOg9jPWbTrJM=ltIbA3kgIKtf60bJEbQMer%PdYtHKo_EiCGsGFz`}`SAwd)OZYz z($bvc`o=dO;PQ4SdP^b+N`Ly^%S1Q0P+Q$B`xx)jyLahq85GQ-yTcKl_oUY;?Trwx zpx6ws{+EH#L+mb-;(vICtfsUj zY<3+exkFPs_G!3Br-yy8Vk(a_^5nT8aG%X37&?D{h9v<%(|`a~JnT2Nd)j|eJ!f_b z_o(h%{q=Z_TTSsqm#7dvbmVZ24@Lw?>9H^WNU)#Th&jxIh(~1Zluu+{vBuqY@;gZK z>y{q)Ac~U#Ut<9~sW7Qi{1?@qt#(Wp=l)K_Quz)n=rQkL>%nKu~O$4gS`-TT2{)+WaSnJM2r0gEp4qS-p8 z`@#A%Imr|p`s`b?dGxe5L`g2G|n?5M~Rq*Y5=1lK55ShIOfAvVHRM7kBjtCkAbgF48!*Xczl ziS$%gJLgXelwh`YzP}=8J#))G8Xls4U`}_DeT0>HbK?7b88S1);$;W%Zde`7ulcCo zjeb0)I=f5(Ov<<)j>G9RKh*}-JE7(sy&^8aHGiA%ER`V@ZQd-*yUf8~ACXSz=(jQ- ziLMhvSp_GMvlot+44ZbY>M2k!mmM21B&rYBhAN&cR4*LSR7>y@Ll{BmkdZgAz)-Vw zxa880U_VI*k3(%CUqnOrt2#5Nhi)={j=S}-ZQRIJ(FywuW;*zBx-AbKn35JR0!G0e zjw0|TCym+!b++lFDk#~F8Wd7jZYA=s^=vwCklu3)=QA9vKQ-9P@()AX!Frw|9X~Z~Z|)A!|3Q^LnX=koFjpjdNOH?+3Z5iBRIB zXX%Jf1oqOwP9E%BQTp-Dm%WeA0HE znU`cAD2&uTa=HE<+XU*hMr;+abpHGR#{Gc<=Dxqb8jvK-`0;tL(!tuzCG}mdkKOLB zqWfyRE5OkcxG+MG7vpX6GT5?PK};@)(_Re|7}cg61=F?#zkt^v86Yh0m0O|*y{mCP zTNZpd-S*O@*)!eDuRGzSBIPeg`%nSa5RYA`raE|Sqgeh2+KQ_2D3yM?w-Bir02uUKJ*s*zw7f*-vK{jdi~+kT&B_PLg&u>>kHd9xI9t zt$0A?#P5R>gAXpC z6oIpL&$HW?5N;#85U83NbHu*1YA*Uhsv$dOfE9~QFU_v5tgmPI*%3;Kq6>m~Albht zpr89EL|&?#(Il2?HNSIN;g(!kh>c8CBzz#vjZ&rMPtM`=&blHb#SEnp~(Y!PPF9q1wIEoR`9Q z$|t*@u*@4{tv~CQr)%fR?nf4p4D^%WKsIF~6kQ%t$2~!6WhqnZUNPlKD`&6emY=ki z{r!0x+t{|#gRddE(Zy~Z-2|CWz_D5gtmkJ|S%Tr6xscaM{nxowtXre3Q0W$dupMJ(HC(pFZr5F9X$2{m>_X7VDrzN);&Gtc|gs3D8K&D)SKlL(JBx{P)|;yAv* z45-X(3%PJs0}8D2M%)QzmAmo`x4$v32(I>8NAg@Lu&+$TwM$y{Qy~%OnPKHy0n~z@->d|wskbmtr34_&U>fc3qeb# z1U>ENoBYiqp(s|XH<8ZV=#3EkKyr>J_9q+U8Kbdf)oIc2bF(|`2kv&b#}E86?)t}s zU^{h7a(P_4Ml>MM@f8ZBV|D@qzuM9UO zu(J+(yL<>&UC8*?xxx{S)Q1pT=>YvC1IV#v=NTRU>3>RD7n8Z~Ld2buks~6(a0p(` zxl2oR^dL;pF{b7(;r0Y)j8Nb47+0sS_goa?n3?hu7AD)%wEFf`lDp3~(xs1+mO?5J zqza8wYUmrEH?#+v*T6&jrn*zI89id>IuhUkknOS7S?2AWg-X zepy^Fia)VyKv`uXCctfe2@4knY1rs}n?I-Z#u(c~h1Z#yXY-JPVZRM{Dd7EadiOyS zChu)`6eW+kci*jNAqal!I8jcWAxBAOpJ&!WZm9nP5Vahz?ax=Rt`D%zqge6saC zkYRLpjJF8td+ow@yPf_w$MpDqnQhzVA7U$pASi#Yyu)1i3-M}6hL(;2s|`jE6zLj+ zz5EIDI`6j2kI@ii>!y|_^Z_LnOIcuszo{}s`^kbZIgWM|Zwm3^M&jT-UL(;!m7CXA zd;sl*rJ!f0xt(^!Wv8(atmKCTGoG-0uRcFI@YRme{A58TIj`!X+=>}ch|5&NiDLK6 zU74C*8Ei=RsF)qq9$MR77nbB z$AC+cO}Rrkf*7BBlzd27D7?UC8J+ZSSPnqc01z8}yLQ?om~v#^IruOAvVISC{-w2p zIbBC^RwCr{U#pTXrTxr2c_yf-Ol;Zskf4u9e zmxD4Z7HmLy`X5L_E@DhO(k(ytvJ*&1*AAGW`(+Mu{%LI#LAjid zaZ&uMd;Yc?No22IKgJ|QQpx|1XPo_sdFbNq?zaDf`u+X{#jxF7oRk&k$m8OC#NeBT zbFu0Kbj!gKApOt!L}4W>%V>c&z|(R@9I4M!=vMv z0|hDXzu5-NUu{5#YR+#v{IL!EI;;QKXMJGUUqADAp7m~fa({l(%zwTojVWO}%keKy zy3e=AeAE!DY@hu9@d2|NGHJW`{|`K1ggk$Gz<=kt66jI?tY_9;pVp8P3ks+!q6`0Y z?N8kI%Ws`782YUn{-J08jbZzLvdez!q5By=aK?XooML`mOCNMe{M%^yw|D$)K#O0= zZ-dp(hQB|q{+a{+G~9P_5rCES$D{nG8o7VFBY)`6fAzS(Y0zxvKa>R@_1kO-#jdW; zB0S_Ej0>~=g3pD)o)Saoht}mEcHoOF**@sE#_-3dUJredRT#soDvq{C@mEdh-`y_$ zG@Z*o|KV4EUC@8*5YMvzd^+E;zYX1gn9g^lvJoc|Oh{?)`n{HeYC8uEVo*7n%`_3-c4kNwL(N&RUq`*XPY>n8tC z{N!(O=Rd{5fB(+>?~hV{zmUH-*8L?W-NvJTPfYqZhO2+q>f^PKS=5d(pZ+v#6U*>9&`Q{%Fx_j4`kf$qt+isvfY+}+FIa$o@L4Yua_mqq8?t-h=tu3rz&jA zi0;>E|8I#~|3)MD`?1Ww{ILIT&Sv!Qv)6BpVE;E3r|j?h{IL=IzTbbMHt^R0j@4yJ zvORYBF@S~MWzA3Y^3!<#yA}Lp^7*S)@cZQR&tjV2di@_;!SBPvf1+0K+nn}?q5r>I z!B4b+$M^f|Pb-(-5>>FR{WU=TJ{J7fZ3PUbr)`G%Lo4{JvH$nQ&Kp@HzU%4<^KM+h z5aH*o7!|?yn?>08zp{eG^wTZww&?jsYD+}^{O#fI|3UmC0SVUMwusv!*y50%&*9_y zhri4i9K*QBF!pQXpQejf5VP;?H2-RXVInpT-`gjD%$@$a4}W8g^uHb{|6#QFJp%jV zVDbC5fAd25?}v^5)SB^TYtVlVsCV2y{`2-s6Thw8ejly=143&2C`J6`zu%hS?;YyT zljeWf0Gs*kPX1r-U;o`1{@4wEz5g4XVMqKa*x&y?w*SZVg}?eu`p>`lU$*&gq}YG! z^pcgqmRbDQ6KTbkVH1KVPkxrBzt=oo@jDm_(3O7JQpuX|;DYZzUGt=Lh-U zw{DZlZ>J!>fzFyh^$t;&&nF6DXAIPxC;J?=7? zso@O|L-)rWN{ii>j+mc%-MzZmI|2L5pJ`;h8xT0#x1|(BX`Yv72_?Pg&PR30uFy|` zslmg(3(hHxfniqP$NTC1K!`pW4=bHNQYy%YB=FJe>{~%6R~6O+iZJ^Ra;_6R-T9QBkN9PI7YN6=4+xlaC%V$%hd)CL|dO&;x|t zJ`>nm{juJ2>h;6?@T1_Vv2B@2hXF{_*%B-OKp)x)s?(Mp*|tqgn=O%Li6^8SA#wDV zZ7UoGzookaXjy0NSd}P1PHUGPU%*3Our!g0_u;L7qH|#kEYz5WI9N>hYD zU=q(=c5*|xIyR_sx=l{TI}RS*0Z3=Z0*hn;N;oYy6|*8W^rIa=yk>=bm3{MO-0J7l z;?>PP8={?lW|^8PV}Y0(4+Ze}(jT81#{p(IbL7$v*!#NcFGiNZN*q9T>KmLN`{E1* z@@QX>3PjhQ(*rg>$#$PdxuJW!k@fE(Xg#k9S1C55nCN;&l|aFqXXeQ_^by`w1w?l5 z`>rkc&mmwuuRS;Z!+_Jcu~MA+oLu4T>BZ#3qQDAuC`@5G5gfEj;003C>t|rg zEAU_u@(ML%J*GXrt zflNX-=gk~@BiqT6U#^c z?n2)F3Q(*kr`H$mC$)$B@Hl+Crb+8ZIj{2y)qU8Vv&`&>=ND{wx{?RK)~j39@2)7Q zq8;nsJ<~=&Qv(PlKaHmMJW-~o@5)g5dT=gIp?$8S)Q8~F?XG*Js#Bl4JEr#D`PMuU z0XOFU>IW-`h4_6K3GDKu#zZdf0{S}6fT%Ua@iAO8)(pBEtZS=u`Of1Dd_r6Gn_w@B zU(sUEVmwl5doQ74&|4B98#sg~pL%h;cVpem@p|es|4@z(2mEpQPFy1<4P*-)N+23~ zh~CDPY>2jfebf+KSgzx6ojAw|rp}vvsL<1GTtM&MUrjfKK&s)58(ak%u;J4nw!xxP zvz;iHq4Nx@DxY?zBXnMB)e%!rh(Zqlzp9MOf@<4)*1*e)nho}zu%OO;wHqb$K=&+K z-;qG)K|t%Os+6!(fYo0-UsM7{%GxLYIP}0Zzu@wW(`>sp zkV-=01`s>4zHD0V`dD54V`kfzryxHGXh=f)Nbz7UbS1X_rJZ`U&yEcN`x6!t$qIc^ zo5#*>PjJfy>41X+vioHSY$#s`JyrY}YrCiIJJYXD< zi|9a;FkL)fs)!&D{WVw`KI`~D5OP!)gEr3Xp}|#wkNEZU&={82 ze5jd3J>&CGavt0fYjMGZ=cxX!4Z^XRZ0fGD`G60(j9-MEN2*N=ELOsstfZUIFJ3!dK%`{AJ?O50NVTp)nzN0#S82AEd=d%nS8M zkHa#Q`LSGCNcNu0bu4_ZZ`eqd$OnCcx)&!fi5uITWm1HA$H_VD%{|E;86Pjxv++~; zMYv>TP)6TC8qL;Qn>;MTM)i?(y(xzM`TUS{OU80%T9e$Zp#MW0>s8&#|p!P*HZHoNEn#qN#B0IP-f` zxr%E*uS@UGwymMC=gbPE{(!=cXTuzv^Dxg&oP`A7eZpT*i9#Cn3B5FNf37_GYQY;RX=O$v9}qekuAAix_p^R zlUnzti=B&?Pg8kzSg3yJek9(=7oTcEvK>j{0Du*mU~1gxUQ%QA4U3U?zMIkSUZw9w z1!=Q14d3!u7aenm{J|Nu>X{VG6H!g$>CXSl-n#%#@9uSB;2g&@(@s4O%JhPT>YNcv z|Nq(CHz>86WV6{#cC(x8=CX>IO|r>mv&rVR*(@qhagectT5H9^DAa=3vCh!ap5@Wc|Qxs5^S+I-t)Dvu~ddvz%uQWuzIE)TxRL8SOIg*3Tc@fKLY`}2S_;}HW59u%>&4KVVIE;!(z3+ zM#b#ZcvLmZHEt;KdHf(FDw~UQrQ@COb{w1lYIko)^D`|NJFA}`c3?S%J$txP(UB`g zfYRpZ8cu%= zN5{hL0h8X%Di8?NmM2|XuUfNoOPBlg>|QpD%FtUEYK&L5?Sh!0)@n`+_tWJJj`jkQ z$zPxF`{Km9mBq)waVhvy=4=X`u-|fL>v(p?`MxC9V?%9J_NWIp8cg5xS;XtQw&Xms zTY%N!3i`3dHY;lx#iFimfNv=8 zj(DcEyU~rAi2KA&nP}q*=EjTMQ)5_X+@D`zC!x6n^|W@v;MwTB#=Ai#6G#R5=5A!C zW+vaSFxsozmOAVnHTV5x_x+-pp@(YcEF0m5)WExCV^ z?BgSkSB{;WJk4@vkfYLQ*)#V!@UdWjqNhEuKxiRqfPTVfd$-@^c5CWvAk;G;N?)Dm z0<-~L7rPchQDR0p!$p9q?=*Wd@buoljI|037Yf?iGAk8I;p`aB(%a2-c)o!E7<-;Fm}%n8?eta%!Si+>J*5+eGx)i&^><9<6l(;6C}fv5c&2%#^pS4(I_V zsvFbsnwtV*w;Iet0ZbY>C>==RzLXioZT60vt+mk%FQF{SMJqZmfq$`KMrU}8VV=&r zFlkSu+XQBY8YmG5HXX;LwMwqX4YSwQn8Q=2m4LKA6XC{c*NfhP-TBV%y18wOXz|JA z1!ibm3|Mbz4JctfxLD8=4!6Cvj(4q!ocPTxeWG#?wDS0QV%-uuN4Ff~*@xRa?$^$u z5v+?Y+|r$XMZ2=fTF2PJ9id28WPd^=f|2R&VdVqqFR!VAI$vbVs;*?cSO?He_9*T^ z{6LB!Z|}1m8~WjO=hLHcy|B57iU(fr>osOvO;YAOfIEu($X{1i%ZnB*`c7-7j@HIO zKF_koA`82?SsP$40wl&-BHG_^$2&sweoW+>rV z;YyGB$YyicB`Mf8GdzGx1*?KG%Ev>n=TS^N**m(U-P2*Rw*$6o(dtzRvgTyEQfN5i zP6JTTn^vHto?h5`vi0|Xgs71;f z58`GZH{Y$8sXHw3J+)m_V(Q-VU|goYouBTfvsl> z%xtq8`m&@`74T`}tiIylZP&q3k=sy*Z4R9BCR<-58&>J&{3z-SKEg$a1q8v1Uy zEB{m-0=Xupg9c2xow0+L%6GG)em`{y(*xU|ZRZ1MwNBSCWiEb-YZNJBO2)Rqk1{IU zi8%F}Q=M5(1x)5h^Gf(V;w6#_ApagG#73NpC)X!3LQ`M>jBynypT^_!BL!gExtLfW z(bX^byit~BBxm)lKTd6O;;e0;NH6PtSkJhM&iYHGM?ND;rJ-47=%jX1eH zM=!3bwN5#^&eOq@Y!@AmySh+EgBQ$4;tazFk+pn;1d8u+IWsJEZ7=~G`QF8r)T$l0 zVWnwjR^Sl=7W*8;=DgX@uxfg$M|WkuDZO4Ur^YpXFo8MMd(M#I_G1^Q*O}-|_B6W_ zbp}x6a=xpNr=DJdb2E?nif9jG6qafy`@3*5L$k>)PkDEG8qZI#WVOx!B1t#nxAjsx zZcVg_1Wlyw>a6M{jdw&27+)q|fr7{sKnM<#^{V=NZ6@Bjd$S2e57sz_vAKqBD1)uj z>=1>c(A^jY!PQk)F<_&z4x;3$_>ta8bqby~{2N$79vj<9bgbCK*yx_JkIU;rr{|H8 z?0joCgJf01HoPu;H%|s{ac$SLJzcTa`pf|TE(<|ev(jbuc7pSC^QUGOcOkRvs8iuO zU@cNl*8q-5E=;10)QiEQ5X^POjI33!@22|w?DgtAa;UQtQR2)q^vbcMFbdLrUps4n z-G_Iyl)59sAI*t1U#|izAc@_(b!z~*R7Bg}4vVppV8I*SMdB&17;UdSB&L19Req+G0pFMzi{awnN{v=O_mm~4y7CKoq`zVXFYH) z`_5N7_6|~w9vUw)^n#M3WIS71%YvzKncCGCELWX7)sXCFk&|K0f}QS=Fo+M7_3eE> zStLeXURziX&<9b;Gox8kUgo!)pV@p~?VO|sQ$x1{*3h+_R2fY}8%nfDc*E6dya!~P z=U{c&39^jK^aYFhuek$E0`a#>SblDT2}|w z_Co<+Os-udjf!X&o$y|sJ4RpZrT|*1QoS7$w;_>|bG6N;EsT=|NPCVvdpxq&aaU2% zc@HV3E@PoVWcrxwTn8vv(e6|&GI4SVut0%3T^|u}na4*zTCdiTR$uJtB3!E?tk+el zbNy}01(!1ewPFFO1bvv!J$IRWeLl^s$;I0=j@?(@UP;%jx0?>&I>?nRwYP%e0E%^H zWsB!5Y$o0O-Yyp#x+LLq%flTH2SDjpzOfG15Ph%^Iunz)==;sMH?yr7XTUgh!>b+J zY*SHz6wcMy@GEw7omx?2_MqDBPtM_H!H13D>)sW!aYtUm!qxWY$6y(bE9b$CV3ugN zxw1EE%NXB9bf78a#x~e&zCNps%^0gDXRvwi4-f2(j$}U$*JZ^b!dH+MC;)JFf^$f4 zv5FdXas?728;}<6i5|ztr2$@0+jtlmEc$@;jX6l#r1Fg3#6sQB555{QVoiX+ayXub z$jCt#A{l^-1;Tu;&*i;$b6t3UA&~i1=X&bM-X&VYUIM}dye@$90v@8x#+dDWa^w^D zx+d-OYQ9n?qjj?zNqZ|LUYV-^=#tjNqWq+_3Vb8aidPOz@a#sdKe?H0+q)GXm;Y>P=-=AG#^IYDm$qz892bg;S?UHp+zkc zl2kaWJ)&4Wa2%uQMp5^@YaqJbO;(47Bb(C&1FlP~Zmmi~=CPyCtO>-_$+cW8g5~`j z0Il$`X0EnFysVmT56RX*7b-Xyol0zcRSl^YJ@hvs-&9c_mBd~kQOg#L-a8T@+5*QS z=Yzl)m}8&ODYH|-iEC@Nu-t<4fq9^1H7?@ga4egBG2U#Jv#|~b1)kDn7O(+LYaJB; z#^74!1q^LsKlE;qfpSQ{%`{C0{Z}*9(Y$%%n2Vg>7tO-1$djLeC9#1hRJWL6#L`-S zI;C)&%*K2C>+ZGg69 z*Ql{SiO2DlPFJbfsRy8v&RGdy;1#h`7h+1{v*S|E1=dWPJrPD-%uvDg5$yt3!uXrR zNFhjk>np5{!N_&aEjPt#$%NjE&ga2ZE9OdX#ryS5-8--iprGwTwoK?Pz=Ob72VR}?J3H+NH|#605$8t z&gfho`K`Jg>_`Ca*%qE`fK}?Kby{1ayO^(os-22Qrz9FPpijoW4|LX^nF1%w(%f0K z6MMF3_VJ-%naL6i)rc0}Rc#u9ioQm*6{ub@$YMRJ0HuC|l33|U3LC_M-7qTD)rALO z+sc|*F}C1B-8M&0*j&bw)&Ygvdh749(7z0lU0cUtJ{bK;Upexd7`Aw}{S|+ulS!e) zk7Jw_`DIpGlM<_U)J1v5PNSu8+^k!^s_aB=5KV0X8*PH1Dv_W*w~>hlNLFU$GUmQZ*yO@yaEpSG&>vTnXJx@M-fVB{{v_|d00zphiBv#jlP3-`k6?{?J9u3zuy&gxGK1$u` zP2L}XX_5$;IG9F21`6b|*@)cX>~VoNfNNkvH%Rd<)!uaAm5vopJ6`$moMY{U5NtJS ztT+@eJusk``ES;Bz%T}|&e$GfUrVii0)9I<7%J83J^Pr`&TQ>Z#;cI3fdvy! zn(FoZL8)Wsw3)44X z)=0P%_6&*SEYP;NP2qN;j1ka^`U)%Ic}Mth*Ndk?MF_HSbH%) zt=lEL?b(ia1x$P{I+zSphqZ#83gan8nq?6`dLUd~*8X%^#Px969H_KvrTr>k;RUyB z;>|3_1aB+o^d`%)%cUH--U!Z4OcpFS*g#xwgxFSvyv9@i{QYie!y0SWh}SE=72xcx&Yi(7g1NR z$x7L%;g0BLL@tkKKAl$dnz_IZk`FdK`T#Zv(Sg~SURUfI@dT-Cf`J{)i>zstFmUBX z7*WSL1*;t&k{!p&7YDqZjJ#d7mn(vJ({&@~(+3bqm3$>Qz|iuh$>@PP3kd142`X>I z+>wJ%ZO%6q>umx0Ph4khY)6kOrAJfy0QVA9sE0U>vguE>GmMDR--9#Y|%+qnuq8AnE*s6jpNPg{$efJu5`Ak2@u($DWB zC%t>}zFZYNM{PKRKWzpeULzji8@D!KPx_TMcfx*l2Tw*BDn$pV|LZL%^W?Cl_?tmY zXH{8)OM%-m#UlmRvdM1Qns&-TA%4ILdSGOn0oPf#TdeOoHHkN$EOv6vEJaqH3u2d7 zohvS4z~8Wt?lvkRm_bU$S6MBA^%;0E{JhKY)@Z)I<;wM5;(V$fsKHok**xN}%-UV1 z=exd}5J!dEFNAa+DQ&U!195^P8J!Orx2f1t+3ApqeD>I_iW!h^IB-OCk)Ao^b!eO+ z+9T#=!W})oaLn)jj56%Yhjvjh9)uF3pCB z9Kb;1>KFm+Px_$&DvqWj!yaI!BLP^p`#tgBP?51~WE-_r3lfRQsnfgzY2bn0pA`z| zUiXWkR`x+gTzuNjvw$X1M}^rTtI%9i;4HQXpw$X18Nh(d zuV0NXa7!d>{1D^nxGbja;w4vJ!uoP*{$6?~&%b5-qS(r?I{0d8BQ_E=qkgR&r12^P z%&O7>%S2_dC$6FFIL7RZOs@huk`N?bq!g$uLS(>lK$@+`(-Vtog}bx`N=|v*TQ5)Q z;z?DzFPz~RuLDaBqD|-V*X@i3^6io+NJx|gg2m?+w4|joavHWeqngj(E=j7O-Q-5y%5d{P0MIRCmYYo;m@tRk%H< zhsKR6URXI}YBWaXQm2`|0Wk`Lg0W^a)BqoiaNrAS6!|cF_p~^P5m6ias3%iclO08yoS7*%?lc;-(F9jkr-8^I--Uaej;zB! zf`&LQ2SPt8ndwc?mt#8y3)eiNn)RvJ1FeR2RXzJ~3K5NcqMN!P7dX|fi>?you4WD5B~VpYqcU3Mee&#_!f7=#b+vZ1Fae~G&> zvzcOcg6RS!eU*IcEk7SWqOq9S4V$gjo6Z;D^-jmKF7ODefxvl(1hR4R4mLNBz{#h< z{}NldS7b5sjlDwa^pcp4m3x)PG)N?8Oyi)og^FBKd9&PHh1p8#{pKalf+KCoqe#G6 zgVffZ7kg|LC3B_hFwC{wc3O@`UV(k2W2QOJqpP^j7qwU+mA2@K`P!sHdIO^GECL}V zcrX|raU>_!PbtZwgAzyg85u+phvi{|GFjk?V{F!nhxZgPvk2@F9AX4&>}7_kUe{#0 zAa+FtoDV*CJ7dkDLdGLvc{1x;gXj_6kJ%$)K$$R6s+2MFGd-~(oSU`0;PJ+h*}LEU z$yQPhi+=3`U;eDEZDKHQrqd~?4>r!7J6zS5H9&2C8vm$r%XGCn9EuyvD>(Ie4ER{E5u68loSZ;+3M9l`Jk>*r*@ElP6WxtF zhrii2+L0*ihr&8>v!^sk28yz)7u#9HgCf4xlm(s50PCyID{vF~aeQSLra2uMK+Qj= z{_eJ^#tSM+nbZ6%u6XXoS|KD3nUq_6$)JI``S@1tXD(%DshfU)#G+j?e$kLY$=ISsGrMrHf zL|5E00evv-=V`P(CF$86^mm5+@ppcD)=3B`brN}OMSkma+KnM z0_7f-GY4E7>V@t`qnUpJ#npw8*T?4ZSdU>Gfo^-(Sx#1~`xrN#dVsp#0*aaq#|wKT zgRT|TC#C1Elv9Oz1kOmxdX;b^E=Z?_zf1@AemwAFQWwzN#WgX*{fv;SsDki7E_pI7 zOojLYBocTS^}?1#9<;&6xb{S=kKsQMS)^L6YXB8rjEc+I?rG2wD(h9N zmM~dLtZfqU=9Z+8WslVK1bpYc!}g-r-b(lxfTHVJAu@rA%w;Sw!;Y5Z_MAk*&>ATa z?bZvcwNFi~bW)==eA11IbU&7B5NMIf*YsU~fgXPpCNgd;8?PyloH*ho?vU@F34kIU zQPcc_E&#Q>Q{xgeBUhvoCpl{yg_f6V<055it||a>=%m{bi5ER$x(Q`4com#ZQe>!j zvymqyPw`?=B(M-pG|c%CxSZxY*neQ*5buT4WS+V4Jrud(DtSEYSC`EZF+EL+!4rx~ zj2Wgk%s1X<)PT!0+qjR4V?-cL4hb`^z{Oh7$Iu$=^#CU5Y+{z#;0VsSfg^Z#V9Qb^ zh}g~`jCFKW{|3nYN)x_i12&p4&nZva>)lxyyVNAd{Av2tHHu`GaLK4wn48Wq zTk_&D`T72yk?gT7J|5Vit;D4h9{nDB)Ui_`vZ#&$sMJO^(p`lplP6ogH)})lOcMTZ zu|XYD?iPuuqNYzvxU4}nABjC6@ol6{GuEev!z7p;j#zD8ueJy>ag8{ylVxLnDq?l%p1MqNABf9UdWh= z^y$I}q&D!CO@U~I6%(fmpSUde>#_!3M?a6(_kBO;D^wK%@VL@vdoX%=+`$c_(MFL1 zrH_vDbv&SiWWZa`yTuSU>&*qJH{G~(#3+%EtDSgPsMC5}M1B@5OMdVi1q{||#zhTL zSebCx9j&_8oDsfYr3m1uF(>)p%hAE$GCVv{suMq>u!|*o9j#ljD1mp~8_R%Xk@xXq zB1WBi^fI9zLKX2l&^W1ZlE?-zJSq~DwCRT5>XU=vu&RzoN=SJ-DeO-BX>lblu@`}yJKob%pKP1uDqzYk z-hbM^aAG2gHgz2U4uqSnhe(t31%}L?A39GvXL1H;>&lf3VEIn0S7)5mh-sx zE=qu+nh_s|$Y)B^y-)z4_EA%!1m+=*gL}=9hqy%AMclc>q8Qc~+-7~wyG!TK28KOP z)L4BHEp2*Vcqt&Dm%t^!y1raH-*ziwCUg5l@xVmf_m+DCXS*_t?%;l~Vv-58`-4GA zo{Xe#KM01KA@$rc=cyQ~Aw^j5kyMb1*>Y3{;)0AB)*v`24JSEY#-+6rAKN`TNGd#-ltY4{_#{*D5pccg}8W+qI_2Xl7d|fWm5|#{7 z?$t%F=pLxf=ZdP;;5-YZkY_fM zSmS(b_nD9s4_@G=-pwSMCow1xNrCrpfto+rLk(dV zm5NcCFkPGdV~|$dG9SZcZWhi%gXB`BT1ds~if)2CcKYZ6*!ph6D^zTfDh6HWCtaO@ zzpd}F--<=R?;N{bCaA6{z{*dq43sm#Mix3AXS^sl3xE4UHZ zPZ1iD4uyN%kmMJ;zpT;%J1GS9dB{7vJ#y-n=K6vvn3@G=3N=coYf?~vx~Xq_6!)*d zV@=zkM7c}YSeZ4fIKGMH$>Fq;Ix4fypw|->ExK`T-|G~D)w(r!8!1HWQigz-YAfJe zqcHP6^SVnI^Y9L}PP~*|$PFNKT&>eQNPz-xG)HTqJ)qUp=*}WWEw+m>MRXV1tJJK$ z;6NWxsPkp~;nCXig-uyXY%kCi7?xS$DjBPEYj~{fKOvy}? z#~qxVe%UlHUi;558!3S3~>hhZXOT}UdQ8{lbHZq)tz!sWh=t-!6_2xrie+=oU-~w7gqVO zcPY%R=RP-06DY9-(J#s(Kpjup zw}Gk+=zDMV1|EY&ip2MyJ3NM+RCEhQiQoI7Bx|p~HBCzrm^;7e>MXG$eZm6W| zHZX!l4GJRnu;uFuVvi@zJUDmzx~oAgk2u=MJ#xT?UpT`#OlgaC-dHQBD9G0W>|!Zx zb_lnk;FxsOGAD z7&%UV4k%>u_YT-1BLTBW8OQsY0$b&%pE;-!fm`a$gp^@D_Qp zBf*o~XkPnhzKCAmn}CXWZv)#=J!>rMEaw!soV!_1{NOQ$Iu+^zak*slM4k9W0EUqx zxPkA5x2}1tKSX1utNVIiO~~@e&No_DI1X&ZgQPL$!@(KR;&kK`Qwip=rcbYjs+)qp z9^C?M(WDh$=42HdrSJlRQ?cQoRwU}ukN3R18s%(wJ(=@I`VxYA^una{)bfVqNi^Js z){opybk6Q{P<2>8iW=va8tXv0pLwT%4IiQ#Te}_ice4WKm#%u3rQ5BY`B)T3Z0h_hS-vBdb+s-Enia+L^TfnHs2 zhlv{OSKj<&%~&i;Uipry>`wBVy}r)FTA*ikWs^iHY(Pepx9W0@o}>C>rsxkJ;~A_`mB!L(lHUx2;;w_lju?g^VYYXzfmvL(e}Pbg*dSdySs9F*qde<1PAE65C7J)4AKW zp1$&$M`@HNbW`ZleSEdRM^0=>)l)#O7tvt14(~OJ0p|~Hp(Z*sb#e_ObZUo{u5wly zl*KAQZSG_%`NG1qp;WZRZs}a^$ON}IdeR;*WhOy4 z7LQvai^7An4#hEcv-A=U=?A2(mBlfWv`e@y24snKCS&%_*-VRli%`uH=c(2Mtc~qW zN4>~6$UR<{`QuP039{2cr<+j3V5-Qg3f3$e7_FIH{g>`V=V7786#;uyM)VIATHP|8 z$j&)MPQp6+ZM3Hs{;FB9_7RZ$JE3ggA8cB8jPcnkz8kb&@Z@%fj-G58biJ`Y&qkLi zjfhR)qF$qIFB_RWNOUX?yzsa!a=ODWI6L)=N~x=iU;;ky+Eoi?-D-Ngx-) zS}0oGbo`cb;pN|NckKFA*#ocPh*~OfPmQ)Ex~>~7%*KAUV8s1`LMY^PU&8xA?KFyh zOy3HTrI;2$tP=4RugxpmBuXgEn7yFTwqLA7Ejgjel!VBxPJsTzx4s$SXfCphxdgpU zIhr7cYO;n|5o^$f9Zk|+M9XiMLYy59jkYLa^U8X6)tFNaHp+)2kV~?4%MBpQ-pA7* zlY>Hg|b)rlIbP-QRaC5i_ooO#<7 zb-s>er!n=CBd+3XE8IaEoruP)GY4#AmEyJq{Zf|Ji3c%SgYHvHOWcG|hoG4tca{nr z9?JAk^*O?=6Kz8w3Ziv0?{H$~AUxpjr?qc&dBpFoXwI1O_uZB1*hdn;P%D=XXPjJ=f`NI?GE|kFN-!KEIQ$5ev*yPg=cZG6+n+#;28Zl?_zYZrXg}^1coOO)GbVb%At*Qjj>{cI(aH&>11RS1 zrrF4)k8xkv$sP6OENr|Ne>V_Hr)7KELID5Jv={a`9!;%AJ4+rt(MI#ELy-Fq+E&My<)mK?op{fXMnCYE}=K;SLHu4DU~kI){zH$gsqo30v; zn{lFeGRx@^+_RTGI-aJMr!Iu;cDy7}Ev?)Y^KzkOyntla?6?VWAOFG2IeXk3HlDXI zCv5$gpMo{FUu$UOx%FmPt!IO!qHC>QBbYnd9{9Fx`Ii=_B*u2zsuA^KZN|=R3S4pf z7O!P186K0#>^8l%lxCwYX+9UyL{=>2#IN-UESNSaCJ04i1PA4Ufk-2E3|h0XRvt8! z>*H~9p!5sm^D<{#22rhGwpvY~v$IKY7j?@jf->A8YuzJ?r&@W90zZmNb9YhJC+NPp zcM7IklrVsn?Qss}Fo($jo(|-5mQKIfF4vp1)dN%luTl^)9>}iL`%yOyq~6jtV#1={ zyJFn5u}F*bWNl>PN+~Xzm-k-h8304(&OuNkuwaL~p^@^t-t1NUgTB6?oTJ+S@FSYX z8=bJtOL#cwOW539)OLX8(D7xXAUGQC7}+oZ7;Ke7<%XeJ%@!@{iV;*PMmP9sY0Oi~iA&l%@=yLv-l6Ko zZydc($=!RSx*i14Wc+0}6AF(7B~Z!D8V96wqpLzP^yRE_l6ix=_DV%Oa%uE(HNQLP zsFEF+ecOV4A+MS|CfUTFbr|wpY53cEJ?=qme0LE1u`w4qb>OQM7Q~5c#66hc9Y(Yd z^26pXRdHX69uQk(+bpBq9>tYvrY0zSv1;Wpxxoq=NFeUEtIguhxrlt=x2>6?9@H)7 z+ORuTZA}8TXwgKyqk;0M^K!{dC^TE6QeZ|s79@8wN8B37CX1sj7~MJ~Ux=e)bg*B# zt);$*m0R^f)tRVtflu|D_R<%OPH(+8yCFMUhyL80%P7!<{pvwe^aJd{D}Sb1D(V-& zI5nww=w1+HmxdG}Di;n+hL+%M-_xj0S>*g(L1VT)x%w%|;T>Mynqv*_N`4`33>S?Q zt$cyKh7Bf)*q6=v0T84tJ}|ARgbJ3=(X?nT$WK6&sy9{9BSy8FPE;jnsP>W`#ut3+ zaX>RmB^V$yB&O|@bW_dIs4uVi#*}j62x*V3o*6f!6kyqtpe-ZRAVn2+bGCM&0Q5Yd zv9u*BOT))*G%K6h-b9ROuC zx1J+>pyeSP)|;~w1`=r1MYF2S5bS?DVho~93IDFMNekotkohF|07?d-_Pnq_+)!Z_ z;~;)qjuk?X2(n1s%3rq09B!aRdJS}dbZwi)HzTWpXi2H+*p~N)593Ibj-!H4tL-!@ z4h534<1uPW&o?p(_}OkKxf{+2#(*Y6Gfq}DkPB+iACy97hUm76ps*0?T_he1f=hWv z+s;fuGOP8N>m02?DG3(wM+ks~+dsAj6Q<~D!*>vcRv(k2dcBJ&60K+5Uz?K-F? zX;8w(M%qqy1b6385sK^fat!bmqz^*L;_hht&d`~SYe;!m-?PHdg0Ve;Q!DTM$#nPV z&sL^6A*CE2%9<|Vf#i=IIpVBPvG~+js4faJK1*P*ZO%vkctdsuu|HQYS(c!1M7yr?l{yCsmG#nRtvs&S zwGrB#CX@$Xsy*`(N&~mOFgqegyd?`8P2`372-X5ao6C`Iu>FHiZ)P)A=+cApt9qsE zggs}{^6Zqv;c^0Jrao?!UFluMs0*07<4xYJD+M>=L}O8J>&J0T>MGQ$vj`2tj9iiC zHXZ*UH50(_KuAMPttMu%6c!)?1mI?aj=p`GOy*cTKPTiISfiUg#bz zByP6f4KgZQv-KFA+O&`j#-h7J%1ZHS)44&iyU|L>)ffvgs6%2gCX4ZUGCme0r7>pF zH_+dOs2li@C#M|g?!qZ>KCAov5W~G%JGJHogRBAVE>>3bNo2C)h5_yuxVd#5n1Mc+ zeSlGSI-M>bJC;;2K!$KZqM4=@+V6Zx+oHn(f2M#@INROkBFn&?{O}7%=1&4O{Ikfe zhU&35w|T|bWf}h6F+2?{?zainXzpG5_2}D>#0>i`UNt%QJsi}3_7rOZmKYh)PX}A~ z2`>5s7kz?@KEXww;G!_lpWvcTaM35YsQLsKeS(WV!9}0oqEB#90+0Cw7kz?@KEXww z;G$1((I>d*6I}EOF8Tx)WuD-oPjJyExabpH^a(DC5s7kz?@KEXww;G$1((I>d*6I}EOF8Tx)eS(WV!9}0oqA_WBd4h{R z!9}0oqEB$qC%EVnT=WSp`UDq!f{Q-EMW5iJPjJyExabpH^a(Ed1Q&gRi$1|c5hr?r zi$1|cpWvcTaM35Y=o4J@2`>5s7kz?@KEXww;G$1(QMd+AaM35Y=o4J@=L5JXH4=cU zO29bZM;GOOo}-J7@ihN1bkVx(iYSgg%qSzExc2F(jlqQ%#y9{N_$!X3?Ip)=6n<>Z zaSM>+H@_UqqE&;-DJSzamjInVQu7!fz9Ty*8k|i|uul(iDM}!}gUnto^RmW)57W$n zilQUAY17u_IezOCyb4Cd*Z!%1%JSSRD(vfP7x>p@(4V4~JS*mq6ty|Aoh-|ud_Cdqb@FCZ|74+rh0!bW?(170k3adXQ#4@4$#lN`*56wl zKZjmA*dadQrGJ>_^A2WHO4>O<|86C=xia-GS!nnnd?Oghu{t??E{CZn7x>u!zxvI2m!M8g#hY=Du5S+*PlQ$ca?$a7 zA6(1k^s?|@jyLToJmZCv`?V#Whn)QWMIP^*API3ra+G;<*4sm6`1h|GMA7?`N4d$@W&4G7as8Ok%uQS?H#JbNP?IB@UA{_ufIWEI)Sp|NlrAe*E!3<-&V7-*4#@N_^Ej@2xQ+ ze}&iY{Tz}muSn`Y9fb1kl25{x=y&iq*4S)8ZUl!oU%$T#!CTR`<>jptCT~{1^0FV_ zwl&JGCDH==tB6Ca(--^XA7+4jYQ^#i1_)^0@#kgXlZEF3ajcwM8PYDIj^j(9Qf-ZmS{x=qWZEU-4fIDq#`6hIcY?eJ;?1YJw4 zg15}he`E^+GOHduvS!|87!DVEIpC9+B`A;$FR-O*crK7QR&Bl`8g zdn@wI1iW5^Y$Paw5C7wh;5{Sjb+1qu&71ju@1D(z0rE4rCqpFJr#&WMK>1`SN z-m!l=`%4hScVA`y>-y%IPar1w887dja#NF=GH-3_*Jb!R0D%|Z72o>v>Knbc+kVD7 z{Ga)5d!5&x&Tf0st32sdp7bhDdX*==iu0sbQH>|P%9CE@Nw4BQ=~bTeDo=WqC%wv( zUZpy2Cr^5nC%wv(Ugb%z@}yUJ(yKh_Ri5-JPkNQ$Nw4yxS9#K_Jn2=CR)5l~Jn2=Q z^eRt!l_$N*lV0UXukxfkbs+hgZ~DYx=Igc$3qkFvAJOvhkW?644Paad$kHGvRa_ji_mUnO<47yi?g7a+XyEr|b8#r!9QD&d!Z#v%5yM z`^5EkC%Optqt&FE@0yj7nrHD|I8El68{cC_=wFlac-XHlo1&>^H2vxtMKVjcWYjCnP3M^H8DB%b zA>ZFKTtSt^$HR}~R^rkLkB;8G8S+%<%eiB$>Qkc{>8`p47f-f)Z`Ow9Il%W1=B2$A z3#?g4`F@`S6rmcIKSKR+ANUt ze&$Y3!X!7;YH;QJzSvC%!F4-rOWjWVuyfhasW`{(r*07J&FNtsC2o>k*$gJJEv)^(Vc`lV0UX zukxf>XljJJpkPI@SWcR>ZRU8<$W8e_vaoOy7K0>1yRtXFRVZWot><@x9EA^ z00ratPl?z}(EkaO27$r;nS!0a_jQW?1hC|vziS0J=AVTA{ah?Ri;IP$UU%cqE4i}W zdESz5PhXTX`ej+)naua!c?IZxOS!yRI&Z0w_i*BW4k1^kZF>b*4R{Sy`~{XfNI<$g ze)j}^AoXRO4Ss0T?s6!CQ%-(4=H30Bw5(4LNSPpi!<6&xm2eZi3Ybq?AU_FL$EQZ; z{}?R#TWkui0*0qvH|2X+=wtES@vC}zOC9mAE9>L55%(_ldiXu4^yGcE2BP!vc>hq| z0G#tm9q>~zx&sG)-U)MKK(1cRQ|}n_CNgDUvmFj-~6Z2@A+Esmwu)4P2c*hzyJUG z(O>(8k01DkZ@K<;>G8k(p4pH6=->Rlzw`d--~XWx{>t^=_;0@H*Zo*;(ga| z{enO9)zokM_V4(P(+~c|Kl&qo=fD2NcGEDw{Qmu4_9H*>_kZXw{EhGaoj>|R-}l!) zbp7D?11}f)$VVn0`8|K`%YOKeeXsV*$v8gpyQkm({lD!Of1~?FzvcJcKKfhwZ~uXB z{F-n2=5PKz-~4YWKl0_DvHH4SUwqqdzkb!n#{B&s`WMF^9MhkF{e!>nU-_eW2K@f- ze(=YC>@R=UH-1g|C;q@UF26?o){p+yFaEUO_8Z=v{e?eb{*llA2Y++c{@4%vkzYLj z&ENYUz1)yI_-Or0u2K7S|E4GuFB36RKJ?Yx`7{6W@A#fS^y~i6_k6+M``(ZIvA_4x zFZq(M`szRah2Qb-|LdRkd0+9tUs3!AuMdqIeij+P_z(W!ulen72JkH({L+8tUH?D* za_5i#hWQ_!{jUFQkiPS8{*GVyRbTh}f8*mTKl7cv@_T=k`LBM<5BHzZygv!QX^Khs zuYN50zVCc9DW5a>wCvmd{@?!A&;Fgi>xGa0=HL65{+Q2b z#~=L0_h<3TzW%p=>9735^8Yb>$6x(?GOJ(q>0kMg?k|7g?4SG0f8#g(!Y@=NpZz62 zUS(PKA2#13e#Q6v+8_S!KVAG)Li+Nc-;WpZ&vzgAtbgg3|KR6+o{2%(xAO76m``@nFfB74}`2YO2ulT#)*MIcW>4#vv|Gn`C{v@9J2mjKSzdZEy zgFo_XKH&T(`|tjO>1TZ92fo4j)&F)@eEs_CzU0UM=gY4`C#Qnm`IH0K_jgzQZ<$ZL-QD2a{^Qh_ zz$UAMyW%O%z5|e4g@i&fhf!}-;2Fzd~Jii9rx7^PY$PF zJT!HhnwknK{}-ns&(gh;Quoj7ZXl0;uK*V!n?f_K-E*hev6pF2`r*HTc=4ght516| zr_fjbldBM6On^7nTC_s5We$k&aZMt}YLZ{)}IvW}1rJW5toRoUKM9$r3NOx9iXL{y6h0G$-vpMPg7fFD& zf4D6#hot>q)RKz)u*cm~@bz~`Y;NG4ZLYDhGG;s(|L2w^v$uY~+xKDJ*L?SLD!RII zJ~QcC4Q>5Hna*8lMHSK%0hjrM-xbIH+1qRE;P793j&zjbzU}o7qQkI4UK#3@b@{I5 z)Oib|;od$Ljr)uA4PRugh`vsUJ>XPq_~2-EseCUF09@w{ySJ|7D$0!elI!9$u`&Zk{2R z%rAPYscA|mtF~<`CVtZA&(610xsrp&oAt80JHO-hpH5$y0v^ss6dVc$k1_rmIUe|K zgO}Jnx}AG_d;dGTfh(3@3~m1Y+09OPj|8?+R78J^7qHUcb8gl>{8Gu3l?BejuRMzX zIyFsjJ$PeDFi7bMpBnv!{CEn?SHQq5(E=sU)vrz$#=}y zankrbJuWbL~`_%6Yk_S zA+-Dc_ZJ?V=LP;#2ySbNZj+T_4VB5cUb{m-&L60w#7ZdPp%XG$Pm zr+N&`%us0%C?T$J^{t(>bLaVRASV|$;J+Y5(|V#f<9+ne;2ab)EIUg}i|7=D4AwkN1`PUy0i!AG9%gAQBYn^zeug@=-`R z`4ck!Sr7v70rRQv8S=!9Fr`V0GLrrY1u`x#~&iQ)(-G$n~8Fc@#l^YiNgbGK5yQiT=o}Bpc zXTzbx0hYwXyQxtEuBwq`#%%pM<1aKgS?3;~` zjL-=fZ7(1AW9|C;SG>bH55CH6Mz_x>6p;2^Si4}RDs*6w-c2i*(}8CE#Ui}rjS|A> zHYa(MH#b^qb?SL0=-90b%EwLMOH0ULf1X{}c19aJ`?aYp3KiNkPmg39m*f#0TfT;O!LEO za}+YpN4`cLpCAQum*R};3`cqAeMu8GG11mCDs{3NALt|qI(b%h>0T3z@7YU%OHVzc zgS|nHiyd)7>jk(mS!Faqh6SSB4l~wm3NVnU8-`}ndjE5 z4srKED~7joz=cn~?>Cu4)bGdD70E3m(YWKfTM9C_a-xN9up8~Wf|Ag|i=v|M!&JDB z!pO66Htj2?1jHB@n(8a#6;KCsmj9qU{u!p2y^PkM4x+ece-t^nVI9qe5ptsbXz*bJ zUAWiIWuh`uPHtEo@4VaOD`vOGDB)ca>%}j0vg5JT{KX$>;7JQZK%GO8rw!Ecmoe%H`?hw_Wk-0 z-@r+s0@IVFXneDaJ|r9$g)3cUjkAMHVL#XGzx#L9#!rgF`^xk@v_z>!e7P6UCM@FP z`(oo?8$zM3Ho)Ovp9CRA@%g_e8?(j61QOWNiPvhQH09ZE?|cE@m1-(}q{r}rciInn z7JrN0PxV=QaAX)`82Y6=jcaJ6&B_u|G|ScwkE)tSi6{4f~$Mv6tBKL%GaM*PfBM0 zwE|MearP)-9pmy;?}{GKz0OgoB;9M$2B|wNwedul=h8fMH+Mui`gWz3;u<7DzC|Y6 zfAgI|BOKo7_PW_n!%$mx9v#e8QRE&Fhh7qi-F(;dyM^b?7@_c#3JUYR}0FvD|`r!4xB7Hy2{4#bsEXG3w1yGg=Nh~l&v14)_}&DP+P{9n6#k_ zi<`7qc^5w=Ta%+;q6DVd%2>dxL!Y#DhWUD)sa@KF@*A(Dh))U z7iF+p&-7apAT9`@IaagtepKMyn0$W)*;+R&i|XuLK_ET9^;d4!sOX9 zSZ?aWBndZF5j$42tHG@x+3V`jx)pGMB2f0zsVhf`|51a_VUo1tg_3Ut0+sCVYrC8} zrwVwfJMM&NPmp{jIngyW9LK+13&Bh|;MkWL;YuI7Ghi9BKL}OuBIK#_<(B-u=HZOL zyg{~bGf4~y8~vD9?;OInnQ?Se!7o|y`^U=rYoVIsJ!_bU-5>76`gJIQT&vtb)H+}8)Y)3ybNm$``nY=R^xMSzJNXfhGZECdGkHtYtdq%dMR2aewj`mjQL<$wCbME zb3C?&*7N_wu+bEj?23j}S8*x{W~{wQ9uGl-3|6$XXU3z?%1m1N+oX&BV5=Y{;fwKL z2px`u9hGrM*Cc`eZnaaobf(;JuC7;#hVQtOP+lT8<@WpsGu zQ!2tC@hQpV5SS&gBD}nh#Vw@)Ekvc4lJNqqKUV>>IgFB1TfHO-r4|K*dstd3iWCZ8 zv@jTr4sB_(E@p6Jj`W7mj7epX`p|&6GThbRQOqkB&HHae`5Y0cfbj94fB}7EE%&8S z1Z)gJYd}Wc(3ui78=gHn@mk!)ic^eMn!00(^G<*MfZxfsi;XfvwqO+84Ey<`5PSvo za6@iywn^Ivo-HGj=8jR#NVkO7QECNVbm~ka=Gr2UeH0uifsqGo&N$9!wi{3RK4h9V zLWV+yj$bv7mkNQ@zO}S~P2|oYk{fr~=X2)Boa$g!ieH|Y$8Pi6gW)WvV)jX%u)wE_ zyq{zkboybo_fk zIpfnTVWVb=hc?kjYqTclY{A}>?*g=d?G?_uRUQ9I)BcT{;Nt)(|G)qHxrPMdu??QLKlo>${s^Gj44wt zODxJF0vNZa@w6z)jTfX@boeo}Jc}*jpnY7^m%VV0PXkwwWL@Le|THJ&p=8q=xcE)I8)W1`_(CmqSlBacW z2?ozciNHEdmge257I44QOCWpx-o~|miBx{5&<=bMd5v5J_u(^5r+TS*^m-Zk5=e{) zBeW^G*)(<(Xbx*p>nahi{l0R|wKH*n&YdcK^G#Vkc?x0I&U&cls)nI4{{ zZFJ`V4Bhe@oJTbN&-K@GAZiU~i^ipE!5l>s36I!Qe=gv0o#5>9u4Q9*bhYLB_PW3t zXwE3%(-+(ie4n;X>AfHs8I0n~lP>Pw$Y@-z7Xt_7xru#w$v4A)p+Rok0gwJj>bko0 zB;AzCEO)$q2PFkDKak@HlW4H`XDKb9TxwqE;!!9@qqlIpn)H5s9xWE$F`rh6u8Mw_ zFdb>A6t@x=r`BjI$8Fdb@ufz|*WPsq4A~b}0nOR=~?- zQH0Fc_JXf{Y-33uB_K4Zg(J3MRAH0KzE?$d3bl(vcf|yt%sBfjp4js_p32;@u5)%? zD!Z5M=j(%}}=%q#I*6K`V{q{1~ocKBJwQUfE_#LkW9jvgLGsuoVDs3N!clny@ z$?qdu+jH?JT?)es^GK-ntuAqjvEiGYd=x23-b|rDQzX{-`S@%Ws!wemJ3KF2qn@OY z$bIrNQwXu00IFqV7@t0n(ZF$yB*c$~UQ&(4p+zw;&qVnzH==|ql;gSW0z%d47Gf?{ zgy$*z;md}i)?D>96q7?zBqzfXs4S|^(#7cOB-hV#*FI%kVAW`c!6@RNaMKLSE_Nw~ZV-z2vx)77dR= z7H5xKCR_ZbB2tMDzhN{M4M=3Dp4EbOR$uSMA&Lnvcj_!sHSfNHxHm^|&n{2K2WKhQ zCDSQU=ZP$Fq7Oa;<)PMkaRM9g1GuV~DU<~?s8Vh`R})r0R*;F&f&f8#i5*zWGP?Af z09zxL@_aq;K@BMjs>;uZgNowX0uay8bM z-gCl&gN)1NBnR@(1uu2Uaw%=e`A{i_l=~KV&iLwi&ygWu2MgPGF{PxYsXG`$&#Sb{ zDB)isv^gF?VXF#~TH8u9B$xy18bgL&LIpARYyeIV?7G! zHp|ASe+O+6l^N&;XZjTP5h6er}2!%GVswA$MF;SmL2 zyCiqgCp5Q`z~IqdCc<^;b%A3nVxjKncqc$0Sf|&9z%7b3#Gqd%Oq4De9e{AF%FM)6 za)%w5Q>tXV#iyJW!{C{T1)8?iGs^s8`|hHvGu2SSE~0H|lqn7tV0qgOKww}iK$DXN zX;p+r3z^B|II=~vAQMa?B(oi>iteCx^~sbVKLu}O*!EH`S-~S?%MpC4s6h4^cjT<) z%bB1Y!9gf@te!I?Uy(td?{QT$vz9@7w;df49>=UdR>KspP10WU2(DK0bwozJc2P9e ztzS@h`;^Yvg7rz4@Hl0%bQrJtaqh}Jaub6MG_CA=4dlX4I9Q1r|6=qp!|SIzA>ZYX zfrCCI3YB7ZV@j;eF|5)SR{Ct!pnd6OO;qo74|~g7TJPCIKc{>!Uv93c%+0TF=pfgL$8GTZJZs)Oy2jj}}4LQ*^ zpgOTFJ_&oaVF0_>YnKrxDl9LOWZbVl**$BZ05GY=wu!=?AwjS{5(w)?lkAQ^k$5Fr z)LinVvSSx8&!KgP@s`JHVdTz)0g79ghm(d2^IjIpK}KFW5Sk;$>mvS3u1c@b6VZ4&&mrag#!{FTg} zIknjo7eQSY)YoBIO;*g9Wl7HGMvjx(R5H}WB~sq~6+i>-T=)7LcA4{bU(GWo5B-ni zQ|?#)*LIUJ+6#^XS$V#GMZ<>Q@O;{ixcSi_{Fiv1bDjk|A~|t1>+rm}B&v|6yoyQb zuR(4+4l88v$4g@g`!w2mi7ttlQ6k?2FCxMrwXnL3;1DJ17QROGh9-4ocI>EJYc0(_ z)3)=|wbr^pm8AHYPqSJ%HWO@eL_v6aR^j`~59o!gk)rh59C6%=9b&e(xq`hLp?3wWKq4Y(lM6DVj^oV&ok1I%>OPD!EMGjoUtiH@r0b(fsz7tuG&IV08#a zz!Kru&4dbbelf1$D+c^ru4MXtWfDpGnN{DK_fJq3$?gl^2STLOVkh+Wlnp3FKiE zC}6AJS5lhCWXL??FsjpdvpvVz5s6y@nB)o_QlhIHZt1Uj93&6hqCe&x?J|#?TC5t_&H`OaOoYr!0+^)4B~O17|U=x zF;IYC->wMAWgr=bMFvU|~FI>4(&09p{WfmH>e3t3T&2;h< z%%T*;(ivhy)7$n~;I*E{RTfe*e!g2gtgNavvzFI6_62x=24(7E6JAQTCvY5LG-VpuN4)DjE4o3@qF{b$tCc>{_>_v zjW3#l49G#6A|;yA%JGjPD>v!7ge$t1Sb?Y2p#%BTHhujSPlBD!W9cfNl91=et2BHy zTi+i(FHxKmiJ%D3e!o{?yt9o}`E9bh}u&g8>eOUpnR+}AKF;_rc<2$!g#+ACyU(fTWoe+Mu$E%6?V`S4JekTw# zvfBK5kYXly8JhLzbgr%<^1_0B*8araA7oimh`n^k7t2GyvZ?CxdzbN*edWQX;m9$6 z!>ZIc9#h!>#w?=)`wgPm$0djWxwXU&3C1@3aP8-E|DlM&Oq|ouTlj9wFdRgxIIN@( zKDCmJ^rXINV3_Q?nOcOK5Ye~WNb7`Qc%Ei5DeOZb?>Ltf&cm$9%~4xL8t6S&jw-om zhOr5#KFN@v8T%@cM%0(vtrXUQ#RmB`h}|G^S9p-k>f^?KM;1oUffhdT=s>CXQO^dO zcr0J_E{(T+;cBtEV46AQ87+020U~$4&D-aE{@>j>LU#usVty~iDdSNIO1+(u#}E%0 zj&*{P;Ty**XPmUA$!{vYObb)VBdKGo8A%%6`Vv}e(=3xHMGKC$g4j*97>J!y&c`;!J6f0ZWK+3f;8w zY=ikvkWY|4#j$##U2JaSmN)P_kNj#qliCPRgOA>N_vBJuNYmWIPrncX|B^=dP*Ap|K@@bJsmSUwonms+f$CDZw!-_cBkWhW+bl`pYoA<#qBHAy zKkQ9sN6_8wBgcMmz*1GhXym2)AlXkXP)P+NmL{C5NC1{huB^mBBn_C z)u!aG1dO`f5413yn^Ck9vlwqua({pwi%ilTf>;!>YP8rAn)Wz~r{b~)vviip$54~r zQ7bnG0I}XgD^2CGfa5edzMzDk6-%Y1yl>j52<6x@=NHTrE5)QZK3PHUu>4#2I+>i3 z=`xivszu4Gri(QDuq%HOd0lkkihz47H{u5BM$@XiCX{R&Htfn{H70}5Y316t_BR?# zUC0^@3#2{I6X+gCLAeTx#zBHPen%B6qY(upEDv4Cf-CIlF_kS^f?QNYtDsqyPTgo< zLqbiWl1EHr)KSJlJGHOT2lU+(wRvy(gIyHKLjDw%Whg{?t+>+qIUlO|orNGB zq8?aA;Vkmv)*uZDlx1ubDUVY1FInmKLf7OC7}*6DpjL!;uHAc z#kdfu=V08axGp>gx1xvSjLp^9Y`Yal0!c%eS8LMq2Yy$Q?HMn2-g)StSW}A1t>;Fk zm<3=t-+v73TGjlAf!@9{5aZ5j01`DUWo)a_pEqP5f01(p-q|?bHj3KVvS2_31Wv#@ z@TqDgQ^jS4$YE%z@R!-)v<7+u8((itxzU-p7>d!yM)_(&ZK|3iAhc=Y@ZE{Wn}IB! z!g=U8mrR%yeo6Zk$l--WGZHsg`)9CZ2_g&}*0k6p0;?N@Lb-t*{p9Yf$OUIV7g{aD zYoMhGumD(<2O^o2WW8A4XfVzS!Dw=5lA^ZC;OOT<@P)9w#C#$LkS!lC($O=f(~Hs3 z(!r6#VdBu!0z`V+fIJPZERn<1l(f{d8m3azK;M%YF8wCOpQ!*mONcuY&@Y@?VrUP3HrMv zbY1xsYP-N6Qk14(B7H-PUq&Vf5i38|Ip=U>!(BG2Kiv?$BQUS2jkQx{rO9Dp6$_}8 z$lx@^#3oh!ZF$aFmrIZ!1U?I{mm918{hid!jPeeAK&_Fu+xxLTPgDn`OWbv7r5{i6 zJs~Yv_h+7Z@%M!%q~@~hg3So#nyXa{Fua(NmTPL;G0kGJs zatenOHVZ36M>^E$>!s-3%HjQNIz8wzEuchsoie-tzFE0Avj0tLD%XR~K)v|0xCFJS zK%b1XArTrI>r-k$YJTRh2}Jg{rC-0}sanz=!ZxNihGzO40uZ0mI1C6vMIrFbWk$uyb{bSppo->n z+_JLJ{Dd0ottksM`hjEfO2Zh!p$)ttg1OnxSs_>Dkm&8D!m_{>Q+#xi`SIi)4Td4}Oiq82%9^T@ z7qQ(e`^>!*7oKSpkD?@HrZev1dAvbhw);wPvAq14J$4_ZFz1ppcfWln=o@N{mL5H|tgO z%5(6g=eY*ER@BpsDuGidgZaE^>enEAdP#jlYFp567;+#yrkd0D+v{OeBb6Tp zUYv;A-YyL*-o8Km@TzXR_tm%o4ega{&;rS@63p>D4%{zqu~O-{{5X7k(N2 zh65RPGh?eJnMrVO>RN=thR_&T_Y|k`^`H3w8Q{?LQ~Pue8r3r5?T!z9x`Uq8HEwKO)due) zOJjiWMT$6muz?*P7%J3I6g_v$x&+d&;?=|mXv6Dfi18dvqr}Uv)k#sTi0dgHtEabk zS}s*`oD4`xu65okX7eO7FfbfUaj#2p|MG$Bs=xI;Iy&0ow89N&n8(}trNQktS=pUO zQq?oi-hwA;zpl8-Jxkk|Ew=jEM4a?^ncJ-k%vhM1>n@3FDnL7hvbhNT3u~}~Vn+AS z{VMyoS@WL_xhIp6p5l*G5^$|AFaphR~GLE)Gb{RZ9=?u@3oOHX-qH0zDUU zt45PHuE5?3rx{q^MQP;Qyk^%3iE2_p?+H?BCpF&SGI0>#FsSoXK)igfhX!*!Vm}mh zuP*G-Kk$d1|DEj4SIML(xz6zf;K~#oGO8awuNs({@u>y}=md{_Mh|XIyn3UcXiBG# z+J3U@{d|OdH++LxioI=^Hx1(mXz$~P7eaUyBjUIsJBYz|=$U(r;A75mPYQq|6YaOI zsjI7PWOfGfhY~pr9%aJNZ%{dAPh8035R#~5Gv-ypD@|fdY32t!MNUv|fIebMiqMwY zS&7+eni7I&|6ZNozR)R=?6yZV;_k$2|91@H==1|v>h#;06f}Sav>@SX(($n_G9!Of zgbN`NwWMh;S@bEzTCF`e5dPXfW#1^9wndTlW1NX5}C4POSRMLm@i zX%70c^R1c~WuQXmYGbHHUC_l`aJ+^@7H;sjH`0iqh4frh#DQMNW^&^LD$!T>qjxdY zGqn;Z*X0}=W^y^3qr9vNj*Qwv=Jksr zj~dcUe2->IS#WSSliZ8bmvDglH@`eF$^83Uc{E$AtK)E@;nD5Mm7d*)(k|!Q-2os0 ze;!5=#xTzWut#Y{VETGgItn>3-cuDM2#EqUno`^I)Tun%ed5Z(9oE7eo5D!uV(w?w zr@9G~(7PM;Q%pJwNW#Oyj%G6t8W0K@ZM~!%=7fCW#2YA~!Ks{JT9rGqX^RQYXf7+y z!;6X+pl!O=kN}Sp>l=sSkvGF;N)@0 z{S~5Y8S+Tq@;juI+5|i($x`cXy=57Ag?EkBmtte|%^||%-i>GRjE!g!nT^z?Mn$@O z>XJ5`RY9W|m5R5+cfN0h4+WqKQgS2tLbD9I6BZGD5)h|OBh1Sl2q4G7`G)ibhVd4k zmPkvih|i!?Ut_zUy5K5^#yWG|J#n85zRJJ0&>rDm(0czZ%w^z3h)zj;Ui<8up72ly zR}rW~=Ko;obCet0<$H|*IsyyhG+^V4)A;0`kJC40kSFL+hSFQWN~J*vl2?GNb|#&2 zd{i?KlUsMc%48aX-^Y<2T!6H46iGSa-?U7a<9mB!ej1hezH?l@Vj?Wr?1$uBHm1Gc z0xC10l|L%J3 z<+#AVthSh+6fu~0`B}dX%GDH>-S*Qqr_vL zQ&^t`FdfkWbkkPLl!L+PSS~-j(ibvH5qDYj;p@w-!JkW0TYL6JjBNX&lq}>$3XGRU z$ju|wDN3)?RWF}cCV7A5_xnY%h6|Lq(u83%$FFKkk~)mCk+Rp22hQuk=N)sA^1<#& zTSRb#ATNXKd8FGO<0a#-Qxdg*FmbPmF*62+82S0KHn+CUHupTCGqrt$dHJo%Sc;5> z3lHs*yi^A^;?Q%>f-^Qet#5PiLy=B=Pa|`?imgL`$!bjOg-^q(9QYp1!s$Inkg+FPKPWuc>Db!o!b+db!>XUyZdTcIvsJuHN7whP>hzkC-MYc_B z3=Q}U{%~V(m95w5CGH;;c#RFdowM0pF*8$k;Yo+mRe@Wnd1n%#Z+VB8re|!Hc!Ui# zz8C>QZBAZ<0e=iwXn7?#mmCC#5?JM#nkQI?Z2#sIKmw;iB2VIaq2g6{0a*Q0Ji2PV zRBs}+gcba{#$m8628ffJwG|{+7uNCYVFPUJCy0LXYbvb|T+)#W8o zM+a$KVhJCyG>RU`$;rbeGbQx<)To+B4BYl&^3MQLzD68cQLvO%Y>mXbO!U(&q4%XvyP7mH}D>XgKDvw}@k zBXSNjNrE|8zL1ZvG+M?x4Wc&p}wp2W^zyT42BmH2bRy(#uOZ$~@TXe7C`(<}ogUx4w6&{z7Ma&lNO#cQ z%^@^VNHkI42|1wc0gk4uB$+MnWvYLpr6$@wIUSpCn(Om&^@%m}YG{5RzIrmDKaLW{ zX}1;LF#45L$$sPliDnDFFFnaO*c)C6?*yOp@JNAmnf-Xx)iCW3$q5tVGFIsT3Op_p zFWdSPSw9ruN5`#o2xiE(D^IL-{8JRwhKc;%j!m*t5&UlE`}qg?$nXRRQFCI8H{Lx+ z26v%bHX-87Eelx3Md}l*z)6w;(7~jvVPvz$GS$y2H7h~Xv8E0`D1k1C$|7bXTG_Qs zgp?kg;Xd#e;U#F^YVSF>jBV}@Iu1Of8b+6EX&}5PAvl*a^|A|TQgeN5ce#ME)}ey9 zQ{mrLJ8za3V2Af~V2M_t>4vtK#ilS38;Z9n|2}-ey&gW1F#FI=&nVBPe^wn(wD!pO zPp&2pE0Pe&jD(3IniE;z!mAf%vQXxKruS62Er?W&1Y=C5bbC-%Z#8_;<4@2C^&ztR z($c|5PnND;lEe+G(~gTvIT!eHxE#K@5Kli%!rc- zC*6;{@7-e8k1=H3)zfFzRD!djA{B-$ncd5OcT&P;_OOe;>v62uI?c>{kC67|%j`^v zJpGsN(>oJ1vv8PC@h#a65rL(YL_Wixax1_bz#8mR#%ZNstad3wVl}kn79HIxJ)`ou z9j8jW@-00(QmrdB2*II(8xz|aiQ!F_r1MXnd183^pdJQ5$sXT#3@lP(7a3lfAD|g! z=%9N)pa1WO{TH=5bH28*e_E+hjvOs{5RTyA%aqI5*dWpS->sN}&%Z7>9Geb1hd1hz zZnUy-DbW}Qw*{4}1wYcjGpGN4>2qDFoSlf=iSCSpKR^)>W>oE{m|RdZPV+sORcrS( zVza*q&iTX(wdj~v76;#EP;MbMA_8L-Q0F`3N`kjl%yg+wNRz{$^EoJU6#bjQbO2I< zt))%DLP5#t71YOUO+Ek6Hm+5yE43|q*@T0>%|gvi_bvgN<=D1sY&)(Li>};XJ+Gu3hWT=IKw4+_ zWWU3~wlQ3ly)nArA-g?YwfQrC?)Q#CF}lV^l0`5Xuf(AOsLoX8Yu;QHauAEum z9IWq43$*1~&>mq@(QHM(M5sY@o}v&@@n}M4cfQ=3$tvzW5a2Ljic1#aIb}v((D7ll z%q5li+TwWmC?(niDyjb-Q47^k{40JBdgQ6V_~G9&!s#`n6VbG^wA2YJ+slLLON#Zs zn0Hg^lV%D-F51b^)EF@FAeF&vS^TET+s}oLwv5y2T*LD6?at*if`)P;Z!_MAg_p!5 zsbRy3ae+}yPXYZ>?PxP7q960!s=zF09!Wn-rvu|Fu_%%(s$WEqb8}BuYxf6TB~Vpg zUm`=dZ`2-r2!uZ>X!DfzpEhVixTLqTMUI$dn6F_CF>(45ob(( z;?9Ky_F$o20DZW!A6BOQR<$IvDZ#E@?wM!%3;hJHyz6(_7)^fj{!&xR4-U75cxu+aVzXNW&{s!1nJ zLQiu?=T!gC&wMiV0zEhC+oEicn~Q#qg;EWB-4%XWa4R)j25BeMbK_U_+D)4i;nk{d zk+p-W+b?a_pK-t72wfXvD9IPVAJiKlF7$gWeJkQwkOAejtYKyE8pCdhrs35UsHH7%2?QB+WPjX0iyK83H;1glGr=mCf>)U((^)CLgJA!Ww#ih^8Vg zve^IVZ`LJc6^SXt)>U1UcjK6Qhg`UUY{sa{YS{Cl5z9RZPor7!vI+?$7D zU+`>h^>RPzNoF8RYG#d}LS&uyj|IVa2m?(v%$SeXx^~5yYC`^|9wjsBgmpuioAZPy zT`Y2dK?r>}+&C8g`&dNDYzNP;ExA=b-YVSay9VoLn%KIRXK8folOeb;+Yw^>J)js^ z1r}NpW((LU4EKQj)z-r}Xs+mc?b;o@)e7~}84~Btif_~l?-uBRMm}GHaciTHNpl5( zGBcG?>-Q3$L5^1U6t%M9e`-{{84rJ#s$?j-j1VY}1j1Rz9>SYi>S3Z&;;>;+iDxRpOP^iI-5KbQwaienYajtZ8=IjNYr z@KIB6W*%$m6VMC3@gjZvUg@Q^m45h*a_rZ{y?&b_?zIxnQ89TMnF*HfHlJ*>^RgVn zS^IkTs13H&;m>dM8zfr+5=joIBQ4;{G*UvUPh16TCy6c+;RvT1W6mtc14lYrcfUDS z-6x7XmZJTq2bo4NsM-4`=BZeAUO!+O6?Eg?3_^gZ1--~oM=C$mURWgZ#5EnEa-9u~ z+$rlF798glhb640NjY=HVL67hDa-oumZfIYFn&6q)-x8h6eJpJZc+cZEXSo_@3j||K746f^%^u0UpdpmxorZlvcBOcvv7za!L!uY0V$kswrj(~87&l@vqZTaM5dGA>|QS!Ta z#c~?F>?-ZAhxI5g{KYI#A_mAUhi`oxeDP%Nbw+j4)%@GG*?C0OU8LPyds4@mfW?WmdKIbXmYVy>>huwD13NlAOk8MjJxYCJ&AIkJT7Z6i^&_Jr-opk|@-@B?P%(UL2&#s< zvE(-&J$`}PWq+jSto^g3zZFxd?$l?DJMz?n_m&q2QeG#D8N4AcAFh|fW1pMKv7p?8 z*f{FB$H+IUBBbG%0vv!+q$TmzOY~F;ti}x;YO%K)hGOxSFZWx2DjC8++;?h6Z)K=T z)(KhFlqAz?8I`aqQY1K5JX%bJ_Z%?7AaYz0x@BX_$Tn5xbfoTMOlptfFJlw0lde)a zvSD~yVqk~Mhl=&j-8+E1pW$in>gpnI-QhPQi~8^&P0cQSJkx7&IdE&H4DiqA{r(3V zxYxzevm@|&u|&?b_u8*wYAnhZ_NVj#JE7)Lz}h%A9{gUc_)4v`tn+CMgkVRks#sJO zpRcN)STYEKV?L{ zRz<2|0iap;H~rwWmHuLnKUKdg!7W*BEG<>dV#bQ&X^TSj1BGcKZ()U%G56;+={nK5 zdEe=N7eQLAWDSKT$v0@k(R!3PZ$Oh;MK3B=BWJ(>WeN_$8`J)tELBA;SV=^|83Pew zhZuailE6d|wId4GHTG%J9XGZKLlxsTGBE}|jHrKTz9@Y~v!Z!YOnEj;;mjBlvj7zU z;P!r9U%rm%;}<S9yN|O_R#V3`3 zC%vq~B5ummM-BqFWZfl`Q#{d-E={W^lpiQJU$^;2%C;DJLE=#;tlda%gpE{?OP$J< z0*j$(j|YFs%>yL?p%4Bh6t}3e(jayq*x;W@;PF z7`*2BCs>kM$}(_Vh)8eJpx1u{fWfl+C!gwCP`eWTCxYo1($6zu3z~tx32c<8B{l;f9!YMpF z_~}1(@ju`4Q~4Od8)oBu?3R8=ofS!zd0;m_>z?|>It7KPAECli<`=b~Liu{}L_)u` zM7VSIK*ZPayPYg}nF}otlHUCVWnm4f^BD^>g5uNQ|d9r3aUOlXu&nl4on@ zO@Wi{yi!UF`4p650YQd*5vPeolUn*?6AD<{Wo?@O86XXy_N!RHXcP|(6=xiu%h6)kP@EUQ(7z|wQj^m2rZfCp z6jVXlWB%#0)A3@}Fsilgj|%Wrgbf=hooHF^5wpG2pk_`f4g+ojEy33#1=n!B>n)L~ z<;`Y3x5OJ#cad1whnszRqXX`8z`-8$1%<6j6 zKbF~qu3wnG+zvU`8|L!Kg5th)IC=eoojnfnKqB*aAfNkTF!Jth{hP(@Lp7YYpc>$GJs3L>!b9M2b8QAzWFIY}RV$oxQ zZqW=+lJer#s17y+;;-{QG1dCg(gwFnulF3Teadu(%f0kgr3Hm|T?ps^+xp2u))_(!dP^o&rTeP$ z&I=ZycX}{zXloy}ici8tq*W#e2&yFHRlh`Cn9dDsz^if`8#$iRo9tAiYU8tRbQE)e z5q8s5Hzl3ghnuO%58Q34jLqH3k9h+Sq*Y5e5cISYTzdeZRL~O?FM1Y}@9O zZQFKDc9U(}wwvslY)$rLKJ`A|-*Nmm-ralmy6$zYwa&FZCzLZj*23+uduWSEt)R;y zn;iSIpbeFWXosm0X~Rct>cdiQv~_%^VIk&Ct#MK3=KdzzJamv5DcmnO1amK+NM)2s z`zm4?jzR2F6Jtunb$m0Kr{ab|dQ?@Q1qu66IRYrfFIm;p_KtMftnTZTvTx1a8uPT@ zB^;#=3KV5NCNEKi#bt*iKT5y&*Slm<<0p-c&BC9;6k#f-)0|-+1X#zX8UGt-YE077 zW&NO=X#B}(OyMw(IrYy|9-KCYDA55`TAD|L=8&eYJB?)>UzUHiRVw7kHdI8y^Zgu| z-T7@zIQHhZ-h{&vNIVv10kuxtZHGu2&>%JXdeaO(r)=H+JU<(&v_9;w(&W#~Kk)GV zfqCwg!oy-HT-d>1jFEzNiKaE97*Xp z0jIsPDqYCK7YAiQciq<_+x`8KlkMAC;d4Ss8$>?g8lRuYxVQOKszaBx5Y`4VEzmaU zpYg2~OQZ|LR}5-dX(~*Zm;eBpQ3hEQ*bNUX<2Y#y_L4y+gYa-c`U6ABEGPsfl1GHH zznzVeQU;$!Jjflr^_r#iUYVQ{hv8TcFuRefjEB#LbC)BVs)uS)95M5O+A%vEG^LW|c{J**%c5Lu97(6pOxTc8Q#)OIZJ6#MOHjRT zb`p%JjJ1U6YRYWCyDvh{C~>X2zo->-8KZKj{vaLi`n@(CQI%k=x{vcb;2-CwwGe@p zDJfvtkzQ^#lOYhpk;oB2eH_^Ydw4@;EBa)$^w%U_va2yAb4`cKILE2!FW0DDBNS`b zRL+&v%8oAbCDf(F4M@SY!}w1|g8<2BF)@9OQ3l;7n7sckzg1RMX0dM5ct6jcRCwLN z(w49-eZH~c^7y#o_C9;4=@67+%C0Ufw)2beU9(1px7U`PT9{V&=j&%U73Q0_P>Gw* zF_s*fDykgX8kWk*;+2oa@&mbPY3NFkzJ3M?b{%8kK5u`w+7jtLO*~U$5&IZeG18ZW zkx{3up}i|+gJC=tcp*}7|{nRi2~pxpb*hDKBlWSs9AQ5ehz4fou|MK zJDuzC4~54q-BkJq^Jwg{t5eu>=q=zIY-};#?qM`D#=&Pm=SCzFn}CC+8;%7ug%rp} zIT{1!lr0G^SDuK4!Q9uL4WG#+jr#m{G}o0${_?)a#pp!}8*hJ}CBay&H9|Gg$+b&q}*s z6D1tUoU+b@qqWHl{@JeoM0~~PXt`nXOIpn9to#381^5d2z2Uj?$F`lJsCSMx!G`~6 zWo=T!`=ZLH(&8t9JhvT{O&*8(E<|EySi69%&s96rvfmxJx&p4`{I*9)-3qz7TB3D@XXAuA67`@YcNg)AD|bf=QbiC z>UPu*OIdO9F~3Rx3eRS{%D;Y8Hus>b1XPXITL_dbIdR0+Ez-FB4dcpgmR0;seO{F1 z$CA)+8+lu+*A<7gbB~TE){V~_O*!iXAM+(-+b`tzTq?O+g0ib6y=bXeG~<~ueLgD1 zhe2VHMjH5n(GUf=U7?grD)bM zldyzQ^#F9JvrP5-_D)9{T=S-<)etHe;pW>o8D`W2@DvNt$XQOPWLH znovR6jv_kaFAeu)0h_2%H8sF)w$vRWl|3la!ITsBv%G^4dr(Iy*g}LaBEOOz3ZMR^ zr7e0_Q5A<)&t$NKXwZkIek6^{i()0E$R_~EeRV&RYxSn7mp?ynkJX*Y4f*yzmJ=p& zP%QDETWPvpmxINYD=v>BWj3n2%-Z?@sVN8FP)?z1Fx=17GaU-dfam|(?Va5QB?8Zz zIp@3nx#!42fhLJEw2>O8ZX#H-!ivM`hNag&L?v)Se9=YOu_w55>H$638(94ceERQf zRk&<9H|41g0`-24&=)4BQf|U2jv}+f5kb_{{C_W@B!vdh{E;xO$r3ft&V_AitcreT zpvQC3A-aY<@jrW|V6o_hguMv>5GQ3*e@juzRKYTNKSJ4d?1f1Ji56x7%V;Mabr%)` z_^vh5EyI!K+>Z#RsoqQKQ!5L6(Sk-MzDv*gYHrNEYs@8I|B|~qxekn}u7+$CY$}I} zIBt3$NCbR#t3ku;uI}60MuR5Qb5NubbKB4G(WF;C)3cyzZU%r_3Qbz{4F)TnCR9aG zL?^K@xWxc4=L~zs@(#bbAjQMb!!`jxR^aHwe&Pn;ItQQ{3M$zIzP%_p8tdkgBOtd@ zu5|_rD0s(g=yW&{`16j%2{;d)N}0Qh6Ay)5m~8?*ScqdgD5Z+dV|CAgZNpwfFvh7v z*cw&Gc3Akt(>PQ)d6yp#DY+z*!{22tW^Pa5 zn}6DTUgFjZdp@_f2p~fKM-;k9cE8^shb`etepsnRsH|xTZQ}zPO}34l_FfPcyj7Z7 z-Sq&~i6VCRO9geLBQ#z-r$HTE`FJ_dj3xCPn3w&(fMVeN+Js|_wELGa-5@Bl% ziqLev%DZW>6&D-6_sO5t;na3~&e<_vJqVpBmGtBw1%kG!VxiE^0;zt`G+BhWpYhN_ z%D+JtSyHN)k-&q0tLo;MRaU5+UxJ3!scWHJ(?vFgQdXl5BJG0zCULIpEO-q?20IE< zS83CbB!WGxV$^2Gt5+@J*a-EX2@2k`SO%GeOHuunMYzlWRP$D=BWI zHHA)WWc2P5AaO<4Eeq5=ofS$91omWb&Hp;C6w`xz15xTRg5O` z4#_@&S^1S+UmV*k5g0?72{me zN++*`nC`9RVEp|&EQ(kD!FE)jVQdoIxIQior@cQ2x9uTyR1gWB5uhU(`r0nOoEx=< z#%c}Hs@{ci;$QSd1gBG2oeWr8eO)2ByBeszG)UPZKQE@i@8-#Aj@6QI76NAOy-Tg8sYn|(n z-puo6F4eRzNITgnsh!P~G+$0lQ8cf(8YriJ`k+&@vcHG3>XZEPktR_TIK7fYn?%8r zPV{>!Lz5(w!{ktoV$znl(SPE@b-q+qGtemT4DjKadAa7t?Y@cIu#NA_E+U4%5sXQw z(phq)Ee^+Y?nbq)F&_fNpx|IED5BDI62}mO=26JS5q3{fHrvR3PKJ zjPTHwD4kQ(my>0>(d!1PVqM6i7T5nwVYsV@Ptw#y;*u`;%a{dAo5|+XQ{}VlKaNJR z8$@C;C)&&2d5M~_IHDTDCb~JCS|lcueO-XzvKTxLyN&IMfVl@NZue&N-8Xmkd^-Q` z49+sC@zY*(6ljkz`1wzr*M5K{#PZI85;y4CKxbB=+^?^b?U{&Ud6Xv_638R@`VQT0 zHTlrMorTUH<>aW8K$yVIwv6|lylxY=sHAKvgJA_Ef2^>;ts+hOAu|@znvH%Y_JCo1 z=n^<>uA)upA{zdxhss_Yh9LOOnX#67nWo;qgmtj8SEX!#)YG;*6JK_+=EEW|Lx!$F zjVs4n`ufJYP4-L-x3^7`IA{DPnoI01{xVEw`m@O^{yNWTt-XYf{h*RnF(eX{YNzH~ z^Iz|Us+0fL-T5xtG39eRf9$vaCIA%%zxVzlcMZJiZP##;Kt#4)Jv^yDtC$N&DM4}A z@r6lTJ!8^7JS~KG6PC_O=7SP_`qZGnV|4(=7vaRS5?oM3n$qlhaw+*)YB)wnc;ZY^ljWYJNtTqW7S(lRyRN9D0 zI7C}Ra~Gztrt)YSdUKA^MQdeM>&C{#$2OnH7_QEWI3iXIWTWt_$sVN{a)WE&%12A> zgbyP0mQ4JT(wn{1*2VQ|G`#@j>aZ?td~WRUsP(k4lhBmyKU&5gBIekm`8e8o@wk#c z;19;NdsY)f0Uk`bw*mdFaQS`RY5}0LcW-C-nV``5fTO^6GOj>7HILiuU+-s6RSPux zcJ=d58_@jJ0UtCZfl8c^;w8kNGm(PN%LfTLCG{FQgb>G>LStmul1O-|NNi$ZXu7^D zY*Ltmr$P6NIA?t-<$3IyJ=t_U`pDqLQ8feh9qWl{z5Az7ON$2D0QoXPtIV_Lk(9Y2 zvq~l4x+|ps--frBnl6It0ltI*ku=E(jB~%ebVHVbk(4wPNT48m*-2?U%Jv&5M*t3R zO+;E`FUz|f400YMf#)zm3vVjDjN$~7VLyBZ-yL(!>pXGWIBL+QMVR>CSr`0w)*`Q3 z+a;VF5Epsgxf)xKkmALqEw2Fq*;Q0=MZ?*$*1((V5>ZL2XM8A}&o?hoyBsCRXF}{x%fX$W-uFq9sR~Wl4KC@oJ zTNv~SI$Q!fOMWoGVCJt2xWgiR*KP*v96z<&5 zAup*-sN33zH`=HUO46c#Q3vm|9NZHUQI#%HU!%Uvl$F5HTNsxCq?_0cb%4XZKGzs6 zM^IT|Fbf$xTJ0^~tZB|_t}EZn*92NnORIb@*4ASmKBSS_*M7O@A{;j1ghGlL|Ij=x zOA^Hu%IKv$_Vz&zy5X$p+tv*{%y2CBmKc@62anyi7Wi<^= zdAv_IqLF;xpsI5Df+_||RcT)FGb$_d@j7zxWazqmqa_t8eq*`R}1cLPqwc>ZEJn`#yCje>jI4R z=c{4yMz{@Sj?@Lr0P6)$W4v*_sH1t!caNxA$uIL=8t4c+nhz@%e_QP4jTSU5BtHi!z?EX8o;g}|6pblSoy?M*^2Vd9)5AKl-$^r0c*F+=t)au!IoH^p{QJLlvhi1M{jk z+0pt6R(Jpc=Wym;Hrka_y>$*uIki96_1D#RIf?eovBw_-CH2kOX<~sO%-s?Lf+5jl~(!-NUldd%ih^jEoeQrg-#b zy0}ifUZt-osiG@wMev^k= zl1t>)5`bMpoqZ)qgvqp{25c$7h zgC;1(*?^kA*4xTLu3vY@&Q6K&CvCcj8Jy$_O2A;A=r1LSJ&83%%j^bu+dhld9G#Ia zo7W^Mj<5mn`Nd%|JMBs~#Dk6!(F_zAny^beGTIO-)8dIM5`WxsZTf_ji?OR1Wh-K# zbNnLm%DNV5A+)jfTXdE}v1H)YRu9{qL>OomY>v1>0=WJvaVj=Q<@`_{<=9^ucpuKN zP-jy9(Ae{Y?#Cp4>+Svd{O8*SQ$Cn>cr#k%AWlC%_3qv-gklUz{-(El_WY(UlV4z; z%kLG1glj`T>8)1~Nccaz>bJ|F&V7F#*aE?a5F%jIx#vc>1fe_XV_VzehO57HqMZ)S zu_#Y_QOpK1Z?Mfxx2iaRhgC5pK`TYbE0nyuvWuJ~AN**bQPMCE0lu3(TW0(7+>!#){E3w(eogJ^%)3dOh(|j<-D@bXxNui*L}^~1wvU` zk3?ar!TlOVo=rKQ8R+a1k!XH7!x^&+Wri2(U%M2?_eI6y3{IQGm!p))(hLz7+9~NM!m!&QRyEKCJM0IMOM_e#y>vwl59uX#T zMbmK?uD}W^h_L%1$W=!KRnQZPALfJ#W=rzy&!pKu%7x!6&PPREteDM{NPKwmA5qoF z2~_Z(?)la^Xk_DnC(Iw6=!wMoTni7y@h9A^(~mgx=QqtUl_foKMqzj-%#V<>scT3t zZON&riwpF6$+Wwx@TQg68AMoxPKI+Wt^qyDX8PS>+nrv=#JT=;zUT4f7r8I5c+i;i z{C){i1{VVl1#xU}^rdEkMM6)hi=dcEvm{om4-j@&LmAQcr679NWH2>p$f9n`FudkP zp$CalFVV(&h54QL*l=VQT);+iXgr3kb#ey`ig1WxcooXoRHnIOv7;);fGPScpGJrK zf-0u)=!m3r_NZ%MGfyh-Zw`d-GyN}gxgP;>e|c*^UGQC}S=>OhZr9x9F82$o=?oUP z{V?nWacuozG2fT{UuVgRf`uSV))4PuT^(cBc~$kxhZ=3GGV2?NV>92jiL9_s$W5gr z)^;<`x0uE!Z(L(H&sd{e^Nq@E*>ERNo-ZzbS6lwSHt-X-31@5`zi9MhL{vvhanget z8YkNU%PJu zp{giVbM%mhrCY2&E)-PB_%1MbMl9Fb(dL(JI!>jLEDc-OiGv~MdCdBx@GvfSQ6C3M zCXZh{0Rgw38U6TctBLv{(^w?!pN?W6{GK+q7lq2N&cKK)Nc~c-@6SG?g@6JRxeWP6 zN)L>-k<12JCJl%AWe_U3WErt;K%jw6=8+9J^y;~oW|%3Xd&A4X{3+jEw6zR^j|MT} zfqKUMmsES#Ld>Y+Cuav=eWB-`+j&|2UewCuqG5m}@3a8X-W#UkEuSgs*BzK80c!-E z#oY4!6jE5;G-TV7$%*fk7eK{|qh$&;As;M`xvk*y_O%#XuKaNT25ln(_Liu6Y-`Kv zx}>U?dP*!j4oewof{kuqUv?D_FR6G=(x%eLU(v~AgU)$Sq&PLc1Z5Q>fmT$AM1bV! zvZH+uu%x%}Ecu`F#uWo}@hMU`^cK9joXN#?kIq;ps3Gv982s1FzJLb^6oXc$30Aa6 zOlG#NRmB(~&f^W^=|@&)PO@)03BzoJjxT41r!7$TZUi;~T6+K6tZ*48;m5%HF>-<; z@PIm#$yR>q+>K`#r%VU}gQ^EP%H6ai--dh;My^vbb|-8t8hc*x!@y zA!Guhu?Fxq=B(Y2k|NSUO-fTIaJ%^uJOxEz`W+OLKJ9%|)@*>cP0lmx;yQG2q_-@9hoXwsl-Vc8#oMWk>JNf?Dn&_$+_zv46~mkI zGR=Q|NS36>+T-7o^()uYv9!^>j;OSVZS=P%OjA4J<=4BN#2@V386Q`pC zqEY7wieVWoFKeQet-Tu3E8@)-72v3;T)_@Z4lOMJkfq^`@T!JtSa-Jd-ep> zh;qUIPoMlR5|sfK^=*~N{@h(;)4ZQ&t2F~P)Vgo3)!L5OL7IWsJg)ifdmy@^plrU} zPMr6rFP{1^A5A*dIf#$P;P>N5&>GU#w@L=a=?%q%URYrOL3d-NlEm?z;q z%i_<(E~syaqJ(#TIJ8ogY_UQPObKWE%$B1#Rc#|E zn!O~#Na-MMxAxJ~0U>_zazjB!;n_tb?*mwR?^Ad0=hCB=XJx*H6nmfNWU%maPl9y%5Q%Cn4-B-P}DW{Nrmd#(wT)Q3^H4AzaiYNoPiD!bKgQqC4&MCVY$1F%$_?xU4c8Mw_XvKMIt*3WWNEn@0 zBzmgI+)Ot;e@Qkho*Astd78Iu|3lIvn*2u)8Ae%^w_hYp0PdNde=I+$akxUKI&!An z*{+~1FQLZbCo z*y;0)@P1b_*cGnc`I-Nhz?t{3d`$W3bRQoGd6w)=Vz1^D;$ogaObX8e9|1d1jPeZ{ z@;iWWYZ3Wmhz}(M#=xxtAX=&%8eMf>?7u{uxBoWPWJU9xSAQrJi_svqvIIIrDFpDw zp$2uXwL4?2$^7I*EPyyjBqheSNoh1qpS5(lYGf@|I?DAa%*{+VJ@HU;(x_yPZaibV^TSrlw{XkD$3~KaSSc)_J=69?@Tf-qin1rmAUZNEow5vG4u| z0&$z=Ir)Poi7&#n?e={&brxjp;jv~6!+TNFY&FHuPF`|l;5x&hrl~pBT1i}kZRpGL z-JW_j|&qV@l&h$El8( z2UJgl`*% zYQ&oStIXg}@q-8-j@?Es`ce3JW9Fxhxz*1^L2l^HRgc?G^498%vU9#D52lX%jd(i& zg-&E52CD?)1*HiEfCm_9G=<@wZ5D%GLKXth8Q|j#(s^CQW_q`XAaP3SjZ27t=A=;@ z%0+@e?b~cK+6M?#lER2V_<@lVrxz!L^a>eJ@I9R2!j$N48WkNGB(juo!g2SL z@Sl6nBK}herKW9xXoCnG+qE8<65WJ-+mu>7*XaN0n{tURhMP=!Hn_+HGbH5+qq5Oq+E=yX+H9C1;n zOD(+kd6q^^TDn*zc~wkF#~}_mlb(TQ0}W_! zatdGYcz;RR_SMPX)g+U}VX`@2xQVhXYDUz9e?$SxTnpZvVbSZ!ia-2iZn?J7Bo^k3 zz#?D97XthN|1~@nbe&=pwl5r`D{y{c2Cj$E(f%+L)D-#DK-oz^H@-S^GgO`>fP)wWDwAHM@S9XBXbweWzfRXBXkexVyi z(B9nU&?ewOyXo|sx9Pr5%aFhBqJ?g(Y0@_j%Evomiwc3zZ?YTZfy__tDMxU@HZKN( z^(n56Cqb~m?5Sy_M=cUJ6kVli7^3$6yGqnNWH#2kn@)_ZLQeK(Ar0JUYWb@p9Z#wY zrl4DAb4DFdQKv-HAK~Uv#;pQduG0`Eo7AiV0#VX@J)K6-K8fmmFZnL;^YPP;dKFph zVg4c>-qMgaQb);bzoHkv|J!&=BCqlQ)S$b*y>uMAEN*ixA@=H@IMI5ARxLwoyiW5I zy5Ts9<@uTZo_LE(?o^NWji+p@$BwE0x-&pDP-69dpz3UT-VTew`a@>-i+SY6D^SLB zCla^M6)_e0e#vo@_w14GOYY2^2whx;I$ch+urEmF!p8bi(6DgAa65UjT6s6KY(-J$ zG&P&3Xa$p@W$rnybBj}*_7G$}PYg}AN+}MJln@&xxq3;}FI)-Y zRMx?v;KXlYP-yD*)GkcQLfcs3ctudC&wGMi@-j54$T*IXvql6sG3llC{-R&Lmq?Vw zz(;Bc3CG??jX1a2Ts}<{zx}~5Il}smzwq)BnjlA>-S?g6(@DDel8Iz0n6e*~#i#&? zd0&tP!h;ua!%40uA%lKbO62A37?GmXt#~aBvTs}j?R76Go;}jxG=BPfUhC&%dF?rO zpEd6HiU?SnBMoa6b+t}er_Y(5MDRglL&#$JNjVDM6G~2lrr1Po7@PpiiF!oEO;(v8 zVrsElA4F#aL6Fna!$Xr8$~(27W^1ySM?qw9v@I83vYJknnuWQ(vp21X(yXSp`bpUf zzFEXLM@msG(+e4hq=1V^m4nI;;8pfSaj~%oF(Mixl9o>gu|q4oCy!tCf;Lv4V;4l% z`InJ`HR~7sIs@GKhx+ll^1dr?sKtp#EI6k+hxBF_PZBSr9xXBJiSvq>HQp3Sti)`Q z_Ht%V-*W#@eMk+L(r3y^lEHz4xeoCoYVFRTGyFa%K_IO_0?pEY8|-5R`p>P72^Uj| z^GOETJ2YCeW5tZD{u|N%qWeZP$1@s`-~Zv%hvU& z$Z|p3Mz=R;$JYX`R)1T;>1X_g9mdt?@)f8_pqwK6$UGrVi%o}5N`b_n$63(X4x@T>w!I9LI;?E#Oibu8W6N!uFNxM_y6S};a*DjPX zRwD(f2@LtqK7Baw>$h8Vjqc)PfZXmQ%79&_)IuafC z;%qS=v$fjEWs+aq9a}+$=^nQnJ{Xa6M5+krt6gA^F@OjmYd8+-&Kk$x9VFbyH#rIP;g9D zl@@4vu3z*Fm2@=eg`~$DXwy3~dh3!Va=tzcVK$AFB&sYFt7+8MBxC0p(36d!q|x{| z()7N0YT~L(SY$0!ooghH#PjK<2xCft(4@^41Fi_oKzh#>iYlycD~r+z!r_}is+N34 zK?)7OCZHT2fZV*eKN>{NcKNhFeLaG7sW-k4NIp|xz|@@ znYmCNVP?k`$@{(DtD?@k==o5klcJAIm`=LaLbB7o&+>~5HSYInyfCc9P&XNV&R%tP|XGgFe3eC}|Q3&6#Nd;=>TcF*x(N2T-8N&EBjIz+hC|u@zk_ZuwwLo?eG;o~F!`*w7J`zU(V9+$bD^V>@{eM?!9%K?E;r}{i zXoKl`Je}!%nkWVM1hFJ0BdPK-7TCN&+@%SMbUo5J{`(la&ZD$XYthZp^ra;?P|rgN zWT+6gF@ZtcLP5ILFPFtGoyMqNg}H)M$vSy!y1i(d44-*-PoOUFgAU=ED2Ys(S%qFR z&$s*IBj+qhv%?==yEgv$INU`}O=9=wx!)OINqWq-U&*YW+Af$jm~wHD$I9I4a2$G- zFkuU=$O{rUM=p#2irKf=>GI>&X&jo=mJQqQ|Bior_a>W{{3?y?N<6g%%ySkv%znTU zAMja}n+udN>w(2t><_Z2c>(KdE}kzfOKg{yH@J9pYMpWdO=+`gOas$-k{cl)zv1Sx z`gChVNjpHmhg{)3$^8((ax&;`Q8@W$v|9tQlxk4KtaPM~a``*MMemOvj}XyTn+SN_ zs+pCNF}9QcX8v_@?61c}X_&Z8C5O3x+(T%vl6yWepnKLoRuE?GyKKu1UL2A+EAku41FPGW9FIhuR!SYjztQU0Py@ zvhMvBcXuboG?nbhlw@ydM|bOy$dW8EnHtcci_GWl_-Z#n>-F9`cUWL3myorA^$MKu zoH*S6H8mHvC8C2@Db+@ciuiPaYNd=M%%a%~$R@?bNd!8;X?36?q6LB&t^c6@wFv(b zhC-cs=2fja+yZZi@Kpk~^ic+jK;#xMqg|*7gsp^W&9DBL;4^)}5`czCDnRRkW+rI5 zhZHya2!XzczV_4J33&a^bJ)_W68P`Ut=%7F-o@&)C(Lt{qIwAOvARR4?d;S}bxLQ@ zrF`%fZR|bC^Eo8?dimua*MPRy)YzyD6-OzTQ2;Dp>U${yE%BT(ZJR_h9D>{em#)Bs zl~)Arr`h~<ZIjTwGdEQlY@f-jr%BQ}W**FUr+7wmmlO{cw2&uxKeT{kkSX{o3c@ zkub4?UF1Dl+A2@sj1CQ{b{T(tI%Msp_w?nAgFK-QL8;}E?K8;Ms`hp$*aFzz50r;$ z=wM3eGgK)8_Ja)0+Thh^@&t6>!={iL*Sl$XQ-o=DlAW0I`B8!X)?oe+YDcxQNbx_N?J3G ziyJ#rb?<#82TS#WXl>tI)$Pa_!BUs0tB&lqPHm$(U$Xjki4#aY2R#Ri;7WPV28K;b zAHaqxKSxWdps{T3XWOqtwCkn_@>$tJHj&Sr8Trh>Ix2bS^?-KZn?2y2t!0sCpY6V8 z!K}=BNN(J{yN1<7kR-+rLUM)_W$q#|X#JP53WOy`Z~9wEWq#HhKZ&K8cd`Wcoiu*; zHD^JB>&LvNgq;weIG<*r##!DgsAsT#Or8Z(>%TSDG8>|Ps-!V4_*5h29LZDraQ^&dx9K0k1zl<`c z`Avyh3$=ICK(|z(Rt=S|C@RwC%K!bUd@lhi>KbIqRgS4R9QFxv1hfsHvgy#O{WInT z>cEVH+IH0t5^IeyxEwMd6GLD1@!qEm+oQu|#WaDZH8F>tTZz_Ck%)*nkmVtnfcJw^ zf!Bt0xivF_-*dwda&mY$v;gDN2xnvPdcYSDa|t46wfrc&*;3Y8yfIigv=;WW)6)pn zDF8=oZ!-CdY%wmE9M68iG?z&5iI+?w=FdSzU7g0V$!N~Iu{VHa57whPL5ZSS1=pWAkP_DySJAXHG>_TN+q z+99!oBV>%7+aV_40;SMRV6nh!5Sgo*JmsS)cY@V0&kO-*Ae76Bog!HHxcnQO4HEN4lp@h*g1c z=uY+M0!WzII_nt_8IQoC)CK4Xx`{;X03WG06x^@goAiIt`>>&84WIwL`l}#J zEaAR4H^iSF!TiUBrT(u-M4=0As|nlt;?aY7r!g`G8KLb->nE zJdj-;Y)kqbzAnAoI}+ObePU48QA25BwXa^{uDUYMe_1x=_dHlNlGT_$onU!;!~yXi z_-h2_E^q7D1-7A5+qmETb9oHn+wkUdWR&LufTnNJC4ULSXn=)UzvYA+njS7S`(|Mv z`qyBHeE$d`pRWC9ZHEh0tkekJ1NzkP^xadhB1QD34IqKR~egw-9hO&vlqLbt2={pXYKI z_G>(ys5UJi&oez{$DfVoA(SS`Fr#{4F)3bS{0nH2_VJXmZPpzrc35SbpDKyvPn`}l z&$46XZvAWe7Y~xQ=a2Sj`hlzO6+Ku`o9r&NNZ=!#`vW>h5Mos{BraA$qkNzhbD&cb zP#!lBO%3N~>0jX$0_V&@)}A;1#rxE}Gq29(g4-)7-dpsmn%zlFi_658=t9~c!@UDf zfqDT@6}9#*>B05+Q{j2{WIFBd9ciZXhgoZUfny7EL0{#wnyVVD$uqx8(Zi1=*IZ;| zV7FSfX=6qJKFFrDr3Vz-Y%yZ;oCe`!&J22f-mYpigC{@0HrtIGJ%nfqCaw|%D0V&4 zrr!F*JuPdsO1gC3V~0UZnbg9pBwv4%!0fkK`W%mgW2desKeF>*@^XYCocuxCXMr%m zd+gdgv>@m!oTj3EOYKga|4Oqk?QJbsAY+|8KDIJ)Z>u4`fn{A6E%ieO%%%}4nu75P z%sPJi&Ye_rg{nG5e@+yNc-(iI?{|{lq<7>;i%pKK z>nTOiKqaWs?>4VzRUT$0Wm-r`WJq!w9;MBqbsq>q)haWg33_ffZO=)p1k|5Dpw_S_ zezWh~uQ!93z+GzGWL}t86^`nT%S9?DwKfO=WDUx+O_HsqmjxepeocqCcF>SK$GZ0jMsS8o0poarBcyjWIUdg@l^~1+}HFLA_Wui-m(CZMbR7otg z3>W?p7ZnGxI700Tyz+Le&eJNd-@TNENLeaX0}PwrXa%TOwfCowhs_`DdGp z!4%i?-^HmpZ0S=HHpHTsRa8Lvkk^hS&Hd#}uXMu0QkB=SX1}H5gfJq58#ghS`s`WF zQ^M_FP~$=Kb|nQ!BVa!g$dh9fut;X5QxhX&{bB)RWM_KT$`7_peM~oke;73-@B;?$ z6Q=ZLfwMq)A*%+%ycUV}B`r@Ry39{I3YQ{VG-jD0sjRee~oE1x`n z08Mv9x3E#B?Nv*EY&Iz=TV*!VYZd^B0m%+20%j@LOvtY~#6jlzBriPp28p{;e*|FtM{mCxRZ%<| zxg>UCqli0E{U|3N{X|z8*^@qE*?o@LxurV6;A~R?sU8E<=h4RW*7Oo19BZ2E^Jt3O zbM>`J)7O5++owOcUB8dk@fz=1Qc)x9v1WNu4|%XP^%3IXwMcZG3is|vCN^r<6CS_U zZ69ZI2okt%TT_(*!HgYy5S^cI7wS$`RaG*lz%9#sKQ%r0z>Q{0#dVO=@dMj%C@&*O zF;mgdD4U#ozzzUiCFtUZn7+?LADi3e?H$txH@=N5tqbsbc%hR+i!;4Ry(OjP)8Tpu zICgckde<~2sM5~Q592{C+P??pdoPSv-#(CgSB}Xf<72I%5`bCh6;0ykcB_x8-+pGs zhp_JvJDCcW1X~xd$S;ty{dQ3HkSXvU_tb88z)Z%c`M+5J^AHS8jJH9V9@#bQz||-F z8th})Vn#gMvSP_fO33Og471qQ?F+UfoXf<#EDVcp&8;7xOP8k@e@WqI$K zQUU$tRjgtxI;6Gl#-!Fxi$up2M(cT!axa|i?i~u;5c{xp1!Snf^GFYaVZVAEBnn!) zGzx#{1SpzoqzwA61%LQG_&5CpDwY;Va(O-Hs^3kBMVHL2h?&nNmrWfB^=h>V z{G>W#DQKtvG7B?1GM|V>*i94+p*8;(5qs2Ti)C~C9O`N*MVhA+C<)zNN>db!(Q`So zSVtx=^X^)e<(AFkwT^D>;wSWH5H(0@^3}&C*1G8K6%qjw_wt)9qIX?EskI@xvZ`nb zr-ewESENU^oX$9E0=q`Llrfhj+)$AQEN#+!olHDdiE*~@KPU?p?y2D!rG=E^q*_vm0p2x8h!PeWcqnymMH?jt&zo{M7#xaY1i z$-T7u6Db4ZJUKx#-F#^4pdLyUe)T__pX{2WikqV0v3M^O8jBc!X&o$h=Y-HCiMH*o+^OpYq^dTOH1Km(6qj)d!me1E<{yYokjxu;5)kwoxXYo?(g;|XXjR63I(RO=0rI)exH{tR z_$)C`7}mLW_M#^O+3&n6+J4M2zsgt7!N!{iRe#$gxQiAc7xEqJ3zpx>m@o*i>5q)c zInhwtm|=IZeVIR^*OINLUnlvUSqqx4_mXWuCfIIX!5%Mj+Ny^fVjq`SeOH<(wcNdI z;f5Y%B#bRx+x_Py>2%RQ)?-seAha6lIwCjb)mbE3NHKY^y-=DvvW}0khu61c*kr-5TvF9g`%aX?? zhleO9VySkCW0h*r&ysd)r9f5QVf0+}5q9}Z!a^PetLF;B-P=_DMC&s?RpMv`?GgkA z9BBc^eE+a4{vQhn0G2RXhMAdV#RgeQ;~=``Hu=3BP{GFHy7I6|0KnP;ue4iLET$w< zAn`9PF_EN^v%++(i+kv4wg&)bR)HgY!s-LQ;;sS9f>hya!%%i2|1**o0hc4Z-r*?> z5PY5pNes!Glt)>bH_!!72;R}mx~wpOrM??ma(y9$EmYvv6QY=Xj(}IYuS>kO#Y-5Z z%al?5JP+Q#yC^^lm9)3JZqZCPvq2~hd z&f~X;C$9xI$NL}m-?^w$RZKIiAR6YaetQZ2=Ge2qFwNhnu7#BzD4nfpp{;>5=VF?| zmUXE`m`O^DQ;)evZ>420%FeG%4e?{^XLVdCuDZd3%+M&Kgapp1XTZfPr}Has)~#?t z-HJFD#_eHgAk(Mq;hgaesSYxpDQ65?3c0PXfACKK z%ZO{Ub|=XrJ=o+GVQVd6SBQc}!kOtMGkWfMIo-T=rL0m7nCxtlFTs;E1HsVO2AF~N zD$3+a#7?9QBq4bZNWiLe>LBDnBFLX2>e9`ky2AU_r+c0n4i!BkaV381BLN4-?)7L7w_=4GaD#{N{5+pU1GzFCj5tExk>IBTb-T zr`Mq7r`{uTn${dMf_pI(^I0|vxD&7ra%0KTx#RYNDDJ2x&h!_;$&LCv3@jDHaEN0r_yXoAUhRBhg6HB-6XgGex395x-?J1p9+FrXWw{EH~t?@ zXB8K9_jU0ZLQ1-%k?!sW>5y(1P`bMtM5Mbrh8ViLrMpW?q`Rfx@%g;}D=xVFojGUk zy}oPhL|n!> z!+l|!@k4kWl=vX$KnEr?mAS4FTvYlOo;F|-VmV>5o^)dam>q(vURu@h6Dc9sd=Jh% zWk6XAh?S6i-cuG%ZRMcp(}%wdEwxWDuR41a{I*L6DHP||!!fM#mOji_+twhAc1T{X z*Ka9nlIXAA+{a+O$S)N1ZQo*nmj~eP7jPC{#A{LXxKvcL1FqExeMuZ=&kS$zo@a8G znD;kn!NL({NAcJ%^0@b+y&_0h38Yk}d5375?muif2OfN?%Hg}0jGlkvXWvD^NO-JT z(c+SL?y(wAbTI_;XK3lQjf4f zIRc6jk9oX3mOaTmA=n?kTx!&VlQgf*_Y8r5Ddh@Ik}~ir{~%cP*a{;4s<_ICPiCq8 zVN<`g+#s*NP-KUuwY%FMQ@2)SY+!^6%7g^v z!wr*S)She5Y^Uttsfb?ryf{X8RnDPf_kZJ{JsEPiLK}a@erER>%pW|B!#?$7sUG`6 z)a}oQALz-JW%Q0RccIG{$q_*A9XG`D`Ug&4`!lJgTZ@?^MW1MfPgBR^nLS8ZcJ4nE z0tYJJd^Nt?uNcvsiO3%vW$gaGCW|{-)#5)|4(BjVv}eHE&J0300oux9Mg-!8HbW7u zl>qR{R}N6xN%X8(d8HvNMrlLU(Cmy!{ZI;BR zet>!>_5dmfI3qLGjT#~TJXT(o_CFZd-lqCziu8FwdQgoKvMpn zShyJw0Pk_$aUFBgdB5TOCte29I2Os;RVwB>U#eOMowb)mu)G9$2BQ&hNCpcR0`$7x zl!WsGCw5{4KLhvq_p>O$V6gWYG*d3=pGYo`&}2>9CtIQ1ZIvq`H?ZB-CLp}Q@3Ln} z#z@X1D5(FBHXA-|-t783H0zG`!Edii8$1;!pI)=M_{e_!0k=D*Yk1EmJv*_iGx0TR zZW=PLA;u`j{3`S7hdiYV!y;7^n@2C=7Z67vVoy=Cp`GdIFLyf;GyO&LFGymxih$x? zsw`EFg}%_7msPwW#PB}i5!C_54soSu9>hI?!V~LENvb^|1wUw#fp<{K`-_HGU0Toi z($PQun>I@IUFxGX)<`#(u#%Up?;1F|qFfYA%3sHyMmuu6?u@%WSk8CNC8M?}D-d&h z&h}DT^)c|SaK{kw1pcM z>vkP5tUHO0EiyGG8)0Eih<`dSVqMhjZU?oYpE0+;nSU4Zz2>~Sv>}t1i&c9#)O{Lj z4Kw^0mdpOh`-UO4+2}>mzID%u|L=iZ-R|F@tD7CN;l$VgI!!m`t5=x?=gC%|;pNIF zo4CL{cviP^5soZRD>Wo)l>+>5^1!X{o9kN#$$e#2@bl{wJBMR3a9=Tl$*$kI+6qBG+FW_l z)Hb~BJ~<0`WVt_tp3-uL>NWfJ$}Eo!ueZ6o*R@oK)-934#d_#lBDx6QdtgUxAeC#1 zaL;|ePl7*{_)*`UV(s(V?`}Ki%2yJ{=Hse%hJz01;1ismFYf`EiiHi?fvOA%^}@n}^91)&Y1+&Zvxa{DYuDpZ`Rb<#-0{6k zhbpm#mKGgCA|kW9lND#^h`%g*e2~b23HIIlX|Lk4GCAm;9Of0Mj$pRY;dKT5&oCMh&=lmipuv>jVjHy50tTT+*bMAJI9PXrW9#cG-1)A7gy@c`GPxjWBaCM8si zl{JD#<(c3LTEAjle{|7gy<->6&3Ut1BcO{l)R)6x)|rsB?r?=QkeL(#?xf6;vFe1e zDO@_@A=2X>A*c|6>|6Os(*MkA_ZC=cF8zzSC6Y#G`kYqpMQgQ5FX8G{c1pbJoe!Ez zrw`nW34d5y6?7NeYBR8&N61S+@4L>qa;rgBV&KBo_BMKN~OeD zP4l^EE3S(|Iq=6;sL4;b9ApU$1CQeI;kMN|jTGpK-|<=o{zQE*xH;!8L$9EmNHm#K zS$y&IV&05Xp2qE$y7j;Zl|;Ru(&&p)_tROso-jqv5W4fpa_y#1bD+Ku1JW}-lg>2# z2dVLQasAzsmg$>5`6oYb(P@2=v!9Ubb z?rbG-40xI!V669|qbOLfDI{c@RP4+)OuqPs-a#mA$}g~R;VVZcFC>3Ah;nX2N|*rB zJ@^f4#%6J+FdXSSjTxIiAYKyPHn{%U;L61D6DE2VWi401!V?(VhpZh=asK+yk0Y|x zWe-YEq+od6N0u*Nga~aiit?B?n?tuiRm?|!Yqv`FGaNPexE==a-5qG?>(R9{`a06UblU> zX#6gdXMKr(b&t*PX4OHJjDGftj$A$p*yC2!QCk;{`o&&WYfQtcng7$>!&g)U_rCd@o+6s-?*=jKo1gpedSD{JaJNDLgoA)yLlibs+vR%9;F@V%z47 z^z&z3TdP~AkiNHi0Nzn4AZ9_u5fA|%B=>|(7_M;hp47moyZNRtx$Yun-}D0S#q8Sd z9X(240#@K>nQM=(RDf!xf?QN1j{vR{uEUrcLo0vS{bJ5 zlmvp5+$NAI((%=?1KHt&q+!jCDqyd_MNsw3JQ}1gg}Ahq&vK;F>|;QxRYJ;$A75%z z%!%}Efv z9`sPF^cS{*+|q>4Sbl%NSP%JvV|%^z)Zt-?O@Elv@GyI=jGqq8^vHnY?ybAM&3PZo z_-~y5+WhZze&g}qZVsTL#E5Jd*-3qtfut_TGR4z4$t9ZqB(TohjYC0K&x7al`I}-v zRl=qX@;dwUa5ZMle^ENZVJT@OvnFvQy1}vpYLpdu_H2ZXVB{!Z^|Uig&5OrCiM+|3 z#c20-2p{y0t7igBJ!_!yLA=WLF1GM(ubQmV4|%VKR5`87X{vcr4^o=z!~`Gj<1B zY{E&`zI@=aoc0Dv6C^@UkwayODnrh0r@Yx(=b&ZqH;d0cGMsaMP6TI9Yb?_!P^ z1r?Pc^Zw_NnEpFx^`$^Yd=ws}|YgW2@UrPoK_`GHD@>;5LKd@gMW z6bA_I|GDpMitNe^_NyjY@NMk-g_oL;6I1ycL`ZSFaQ1>>+c^y#mLa$)4)yO{!SAX6;zMWL01}Sa?uE+8gVO){23xv*RJU8qEiiGU)g=Bb zp@OVXd~wp6q*h9i83nNh`N9py?yjtje*0@A_3T2)=>cVP;ulIE1#hkI=1rF$P8SPh zLm6#rjeFq%{Dg{_#BoyJBZxHI;PNhyrkEw9X38RGX*0en8^{2a;>RaA(|#KOJYm@?GPbr6?)9bQA-t*d+z?8TwvA)=~vdRSg|t6 z+@+a8%`sx>xpc;AQEihP@)*X33f#ZB@ceOgHwfNZ=d9!Uv)AjxKDe?{Nd+|Ek#LI|HJK}F#8{(k z;1ueuT&IMc#mc$^umvu;}1+b@a?X4<#OK?^Q2uYc6HXBkGdPOXFwDdvjqTCyrG z+mR|o`>U%UDpUkR^u~PM_Wwh=@85pg*UI5&YP9l28Y=k@a@MdkxBjkY@Va=UHM@3# zHLI^gD6SD~dDS42dv!B)Rr#hiMaI04UIU}-V2mVZ4{$q%7GfIY;or#LwH11CS*ErZZ6o>RV*XgLGB^@RBYGmRKS zD8#B-_oyM(XuX;@CxGbq_ZMCxZw~@4{HR)q`7wgkZm3Ay zt|y{M&9_?XV!QrtaZw-?OB%t+uHl#`cXlOJOwWd2Ui>T}FcGFmE=< zKM4Pc`-EfQe!QpzpKzeic{8iv=GQ~#AGhoU2z(%p`;mtMsZ{X;LRdR*5+WED78ge^ zw)=7EV8wu=rR5YA{f|%#H~01Juq2mZ_)i+GQby65$W9dJ&3PD^e@jDC)6pAX{rTCq zk$S~>j2RcB+K$b8r}bV|?*8k_Q<@y1XFK)8%wi_RQDfx!HgiB0Wk}Nj>spv_;iiRv zL3KB*lE`7kg7!D%dwK$#kjiW_k|oP4mc?3wRmzF^N^g#x!IvjBxI*n`b~B%M5N*{ z9qSfdcQH3I5=zZxq0^&Wb6(T!5Be!z4RlDRA4dZV7>B)`G*+eMsPe{(wb;Dy z9j_MA%TMs0OXg-5?5WL29o$}v82mL6^uY`G0(G~4qb^ZkKEF!erhyiJ6=az@=Y1^j zFRF1F=S>-8Bj~1iYU?JOhsOj*#hQ$h} zEnNNKkjp>YnViB+L-6BT-D&Tw>e4l)|w;Sn_8>KPM$P z0jBK4kmWo;jhg!w(@KG=SzN|KXq#h$P`V^MieN#Xh0nty{i&z@YRV>OM$GcaK66yA zdsQ5`p2Jy{xZ0-G`n%d^tVSHSYL;O5TRjQKq=s^066D)#86XXy>aFh8tM8Ef&U6`@ zse0*s*DVSdj$u6!d!%d8hi}@hT23{5d_W!HBq*FOUG28=LW63acl9_L z#cXGN`jv}aP)qa6xJRcP6Tm8%0Rm5Vsm2Z4apv*6?T}zMO@$GR%x}BQrbz=%2zQ|T zEdu8T5NAjO2-4SHoz`q@q~B~lCi5s<6%{;`cSHTsKx(OiX8Ch|}rLe*36ESuYuP)sShj1a_Tz?)u;lEuQ*o4sItTNBAv&^={#z zvYZl~7O~n1S#5LVa}-D`k9$QJ8+L$6CKcui!v4<=XkOGVpGp8a4T9^2edziu1%Ioq z2zUCF$`=ck=KFX1(NgOEsyX9-Z~s)ez=m1;Cy5ymKt=oSyaTcRa9<}XuO=tZhxezt znHP*I@Wd=WH>=70F&!Iag;1wp&>v}j^unb^R^hyM20sNx|H;qHjT;XZ;(wdm91Zah zVZA={1=Y9o%iO2lr)rG+R<;522Lruwa8huF!*Umo?ho}>ZRbd5S7&JyM9OCXCeO>S zv&%TiyqkK(OD2(+L?Z(M84Odx_hng^Lt$nI#kg0gF2%#req+yyE$Tdqblh6yVIcF| z9$Dd2WS0ioaAZn9c{sdco(DIe?$9V0-rKYesR40#ITzl_w4>6wY~}3xk3Tr356Rl? zt>fca8#LU(_er>AT=*Ue5m9iAV7Q2B)<(55`d_U& zG44T*Z+4Se{BxUU=nI_Q|40Fm5Jt1ib!jWH$rs|-X2$GH@|01W@aTYCPW|up!eW)8 zePEmDo(N^Fv6m$w7QvJDWEx@shf-r@LVDshE#y5{d_@g%!3-#!*OHSBlWfs!Dpz0I+dCCk3o?8;=3X|daXd!OBcD?a) zfB+=c{Uq@7o-9^uS8&_e8WPGSNkR-H>C7wKIY;@K>f8TVfTpUI5csFlm0Yi!jL=9L zGD>z~9Fy&Xv_&7qqzDQ4z9_$S2o3#FN~&5bT#XBpCE)J}u$lt(K$AwX)uiu$@A!c> zv0(gxO1>=cdU9o7+o-YmNYBH~lV=<8x#eF+EP8fKmLq&p;o07xu{81*!du-$#VW57e~8?VUI&e4~)-Y6V&EVs)Dav7jw6>eomY zKV;S*lytAckXm~SAoMa7LmQWNeY)WV3LT;p7}4vrKDTu#cUeftnwz76-wSB@R2ahI zjupcel>NZU!(b|-)1b)5;hjw0V0noe9lY{>$zizkCVze{$A|b$0J{x6l4rVKZ>ybW z*gPCvX*Wb#>mH6oD49VF+s*p6DHYU9W z*=iXJ<0NDzzdYN>E)9khExBDmmEf|~4Ywu3y7R85Q3wBPB9e1x6QvWxqPYMqMk@N< zFLQ*T&avl*oiLa}-W-qE8?sgX!4s}={FIMdv>3F3dpSigt}p2xV>Oo{W+$YS{rpvt z(1SV!F*{3+9i2poO%?gX(72hs4|)j`o*{-!Ep|L!6R-T1lQDgi%S<(Tu>B1e>*jBf z+R**`h7806=u_`sJgLy2i|rR!pGU!LjKPR)X8)&M5@|^0>Swc~mGXgst#yODB5}8x z7A&sP0-mMS+^ZJ0=I>>t;Yltapnn|9Jw~JkV2Q##XaF1=Kfz6*lDD>WOqW%ZzbI)8 zQ7+$)w&$6fg#@enb$j}Q17#Bun*NRi*?K71ZtDRgxq*l5Uu;>XM#qv0>P!_77kR0K z$vR$)VcaVCP!F}n2IYIwa}rXy7b#uQ#z3QqMHemjWob8zfh#?ZCwA z;4+qqlUE<@ZG|uW?XS$$p5Pd`<d`Z>@dWm8J6x23Y`glN|NnE51`~dtGs0ScSH{+Pg=#+*l<&!}y(1D~Z z9(vOQbvgZ1nF)nH+>Rv?)YA5(WuLSm8K~4YoEI+Zbl0iY33&z7hkh}#g)IxPY}m6w zh}#o{Q}WMc05n2Wf7ePzkc5=aOKXCcU`F#W5TEk)ah}qAs&(>SDiCscZrcqW&pXbR zZlfgf!F{?qI;G?|GX>f1t8(R00Z`M9tEe~|@|HoHYng5R1dp{LY~>x)vZz{{ca9?M z0o`4AdTAPvooS2k3d@l^R;7^T_RaA67;^Lv>Zv6scrSQ9wv9}Y>W&4ah;)@a^h@+ zMC%SK`hnMp|KD%b4Sp3N`mDdq{k;ZnIwGd7P8_k^M7(#v8>;? z%6;05*WNVzxbBlQtc<>{_v-$jK1&!r60>GU(fzc5rnXY8$kO_ozV-G_+gFw9#L%3S zOWMBe)a+FMNK=<;Oq*+TD`?mGaKJ}lQv^JTM&3tih>pYRSGRn#XZp43jG)TKNX@-i zt#UY+sE2C}fP+5Qxwt^JyXZCAy4CL$UiVpAtJuFvd{zD@mt-g_Vn>v{Lfk-C$Y|?x zbk64(6uAJrKrSHq5Ke>RN0oemd{6-hAnAZrz-2n)xAL|CSajda0)=!y9~N4yx(m@M zc^4B&G$F6pM(^v}<0WMu`ZBTA;DaeB%~=g9RB_55t|Qlin=Zn7ShcAhS+U5iG{&9& z9(?K$@T3pE=I}3FQTu2n+$5u!Xs0_x$7KlkQ$HnAzV=S`w-qv75jt+$X)gj96SUOH zay{QLTmp9|ZhZb3s#BVEMbg6{A#>wj(1aoe_PD(oW7S4xSx~0y%Azfh!v}fh2UI~L zEh7ALt&gBK@oM2>pOf0K#~g}+pI()fp%MGTBs|INf(~bvfuy+Ed8v@ncU?&F$CGK) z`llQQ(&t>Rb|msG>uy{y(;&>Ibl-y}wbf1?@z@|DSWBo=ja>`KMQ9y&g)G)Dlg^*? zG$fWW5f6~OW?slqy!DKsh7Tj8c=T~(F_$GC;6j>j@Ls{wt|2;E;nj5NsbzMm%(9bkw@q}Z?V5}M6=Yx-te2W#YDn+9SVFgWcTc{4Hz`y@dchBT zU-QRDyj#uBqQ|z(9!svMteQ*1K;Kg<8(z6?DjCAA_ih#an3-hg&txQ7QdEWOiqj)c zhAFCA-qOq|{u$4I&~o2DFo*fQb;}5<4IDuCd?G-VwEH(GT=HvO|IA!bew7qyyH`HU z)Fo$AvPl0Uz2!GG!Q-RQt6ls?3f*+ImF}>Pw_bT%et|8EHM!L*2KqDYj{)u5)K-?! zW3Qaj3f0jOyR(crv*IfbM{NANMRK#Vc!_>!EvgV3HY|^^Jm9YLE5G`mZ*Q5DW7<3n z%ak=aB6clVZjYu`v4dQ&F@!9T+Kv+>34k4(Ivk<7$F}0~4m}30(d0SO- z2&llz-%PTkZOfs0tN30XDgdqWUx%v@6q-Dj++ z7nz_E_-dgX>md+4WA*!^olPVXuEru!S9bk0Qfd_^OnG-j zybp^Jc_RACXCA`&{*nhGF_WqwsV^f)mZjtD^oyD~$gQxolix!JCgSb%%D6UF1559C zq<2L6zqKOxFhiwG;a~T245O&Y1Xnj}M0yej=6!GP zzZJ3BB!z$4<;+p(Ay$-6V59mndRrs!pfW$QA*JFemy;pE`UDqs)s^Y}=kqJ~k${J@ zC(S<<$oOATaRK@}6Dy`~qmlExMC^6?x=-CnZiLoyfT-(u3gdMS9#C5@RCE{os(rZ8 z+#WpB4AP^x-{_Fd(EG~abc9zo5%X#HCh;uJ(kCNo-T%k?VY}4tzhEBjvpnXJ_u{>} zliJU`K2>$x@x!M=>sWeP;_gD?w*Z$v1F0gZCl&8erAsqDubH^;Umn=)o@)zJy6o|{ zqo**ku4y+Btn2rtzT2Q~)w`wQvo5t#liT>sks7`zpMRD<5Uy8~1|NZJ<>_h|Om>?z zrl{RxiGr(o*Z+0Jo!eIi6AOMoG4+xMLwCAYG^TrIUv2>a!5xxf3qFO>J4lK$QY9Is^P)64lcstlvX{5^Klh{1b`!VE$< zP@s51;JSB;rP{YvRKQ@zxIdrBNzDN#>f}I&K~f!I-U(#Y6KbTVDwB2YC{CF)C<~VX zmkFx!FT#_vb37yMp* zv4*#F{;pF@vt{yHr14a37ffB$P&e#A!d`7H<~m(?a~HXHc#e?O@bulu<+}{QKS*)Y z1`4@8c7A7mR?{X7dc@^+zCW)@+|8|siylHtt`$wE^Dtmj(5fs=OtTon8aRU&sJiz7 z$#p$%U**bw2E`C_y%^~coUW88x)W+p+;@Sf$IA6gdjg%)U52K1ySyC6$XI+OfwVp7 zZTPs$Il_^qeJ!t7KRI({4L?bK=Cjscad>p}dYRaDo_9D?&5w*YgNHiG(i2FP=?=yj z#~0-TBgE;bBNQ77%XGnUw!-4koBH#=ipAxuq=LNHR({i|{#|PAqC?qBes?lsj|7K! z@ep>Ob(<~V^1yQ{j=cJz29-`XP`PkPAVXJ@zFVu)Ot{gc)Mmk74MijG2n&EY{Q(^H z0vEfnFrCGH6L6r4x>_-0HdmF2)6`I1a(qmL z$cs-AG(Hqw7Aa|ByHhGjd_}!Az{5sxCZD)XJo=?hrpoi~T1y2{_Gt|W4J&K-I_j^X zQ%-+$U&XP{-i@n`Q;MN_WRPVms=_*xVSYQ&c!vNR%?4BF!jUa3@1N3z9`*hG?otmi zuHMGSqr($w3|tk7SUZ1=+u#U1}7W!%p@O0oTpBGaJ_#mm^0Mqbx-nC zFL|R}!e#t{S+&e)p{PLRZllLRqq6|^wV*=39U{)`>)9Od`TreE+rP`E%Ezvs^C^Y0 z=A?7#Pkg{+vL(~UHL|vP$+gwpOF{g@^HuaCub8$ssoz$Iv-J+GS)O}bR#xGo;X|9- zOh(Rirq{mlp$Y~(kIP1<4eNUnmEpw>C>+z=1Hy( zE4OYa{u5wUFHKdnRan42s+Arov^H-`5lr927Z*z=Nx5rQT5X-oMi2dfS7=aj-O#l zxuBM&YCvCJEQbs6b&j`daS1)f1pTn;CHEqH!;!&zK4^f*3FI$%)2ym{*-x0~1F}$p zgcBdI1D6uB#<;ddc@>bb4hgOHZE>$Of)?KA`u4i`2P>kC8fFgz>H4x*u@)=vhj1jW z;_A5uOLW)xB_n(@^-1q=5mIp z!ii4wjAI_hc>8jcJ#qfBLZ9k6aZL%MH3!HkG^npT$cN017xb(6j}Q*wEEed<@u&va zZlq$7eAFd5cf_~RIaadRMDhcLae4GsO4sTGzl+d%^N$=MyzIQk*t(a=3!35YQBAfd z&_2*7y^WqKLlavWFiC<`6ee*a6<^=j=qfYx5fG#INlRB33XIjl_aeIPfXS+pO3b^d zWL_RCo=Qu{HG8T=PSH?}$9SE&CLIq2 zD8;0%Gv>~dC|Q<`e5T7JI2_N4e7jk{X}LgNd@bbJrQ*!+_3i&Q~8{6 zXljkt_jn6%8eF{m3;hf9l>-fbe7SBw*g159(+ z#&THN3Log$!y(t^KD<+1Zyfhg!JVbE)^I|a58k)hOm>YIWbqPd|)Wze>WNIvbdK<_a;zIlFXtG&9a zUQwQR(>#QQY;JoP5)bPi<-@fR~jsJ+^f8oXzwtVYW&i(4$8E|{3myfIy2EgpFI<-Q2#f}h%nb2 z1u<(;+fI>G4KduBrhGnw>ZOTQroX>>xWm-~_YDJbtC3daLgu;DrlkE_t8Xo!Qz z?x9W7&5++qf4xyZc($FkvkYzLZ z`oVMv2x0iUb1R4`h5-N=ELekuw>u<-t*dU)Ysqe{6%-iA-SPM?(^;RzS)o=_d+pF@ zt@-jJ=D?Z7Icu7)GP_k7R*`yeThz!s(vPCskKk1br^-0J#mp&S%nf60be!*V@WaNTgH*Vu!Ln%J?o3(R&MSElObWf0~WL+4r!^IE#>?tBJD znjT?UU6|P>wtM0g2z-2ihUn4WByGIAugUR5hVtj2o46ELrAkl#B7u{#oITkBi@{x9AMo&BGf{85_! z*HG+NIL{dgGNStHJwjRA=KBwC9l(O;bpS7kTU}W%5(tar8yaY;c>qNkJf=ECBFBdoeMN! z3r)!?C=x;lHD5TOi{ocR0s_*7yr1eh%=foBoWrJ#>dJ*(rzU)qHheBk9v=8PZ@Pl2 zCj6AY!WxfG{R$aNtw?y_WuE;xCSLMg+*Z2{eO%h~&g>d|UfgLq8?MNeio( z9TI}$Yur##2k`{r++dkaet~>Fdc6D)~UHH7;h?EAF0xIC@;iPqsdn83L zyxdYPRFKW*MhZ{w13-#COmiF@MKxU7`&N6#F(hrwBNFZ1UfQlVSi2-J+ys$~3Wy9n z*Bv>RXw0V|s#+a`+{~Ce-ioyu!K8b57Z$(5COT|js8O{C_j31&?prA}LU4ghwpS8I zjD{EI4910J$4TOKR=}LPHz`6+hm3Yxbid2LM>7cRzivJS>it2D25g-`=FZ}vmu>!* zUFN#XQHr6v5W~86GTp+M5C>4(oS?`1^AGUCOs+i1%LtBn$c@feU*>S^`R1PHyHRf( z`hmriRn2HfimdUMtvIo;ywRVG8o#@Xbr1Ccs^tI-IHwK`b-@UkwBH{A+LdOd2Tfm5 zc1~~=(=h{;j8lw~Zm{4huKfbPl^y>66ak@jWhx!>jlJdIIiwBbh1 zo{vM+TAf1QlL)FX7H!XRO9wtgJe=o@;mgMQ??O8+yX-5|Yw#t9UBa2c?TXN)MM|ztUY&fyzyb@m6&ViDLLoyYJJwFocK55nm_vf9P z58WZ*J_Wf^Akj0pRHA4&ww3?~boq5xtF0qCx>7C8YO(zlTKu1M^cCe960Vy__pODL zv&o53rrtGuW$N8fIBkvfR>Y~c{uQrlqQxE6eMq=WGN2=_YTjkRvfttv+vE5pDTQghfcGZY1fkz;)^ z^_x5emyWvFjnNVCTo5))gC2zLWrN&_*MkV}7#+k@V8+DN^!0a(z-UZVE&vel z8ImEr$$?38_X(VM(lrwqt@f^ti`($=Ezhc!74SXV!ri{F^#ozA+%g;xYD;=pK6;-+G3Ys53?QZ=)&E$4cftbM-16nC$&TnSXz4`hk*LEQ zsg$pSzX&TtVD|DZQtnwUb!i#yu-!CVU^{xhMQGaI=GaG-60(plKb~4GY`N%g^&T-c z(cNrw=0dxetgKvWvgq5s2LP6rXblJh?w!>A->jYS(NV=2fN_OqH+$-we=pC;Ge4P0 zM=63$=e4oYA^WYEMRQV)a8Jx`;H5s#QsJhM1LJh`wmZc9 zVwD&|E79^WF+OeuUq}vZg#{9es)ED4kQ=4ZrK4c;QDEM|+_fbu(Sr)C=hWs-ekKS> z$r4e(m)%wpe!wWjEaF-MB1;C9!As#Kk^fLtJA9{0-vK6l;P_$jw6x8?-5YkL30b0DQkeH{qz*K>mg zb9r*7KfhdA6cx|7M2Oh>yxL{DM&Jz2!v1df3hP1qVx@gty2VK)IgJ6&IA)+U;edKQ zM4YtslmL8oei<3=&7lRJ=U=pO*?QDRfg2IZSC*$c{Z~do_q5ht{6uIyGc01hT2RpL_Jv;OXWYDlz@oSuNrPgqI3V zebj`O>}!C+985Yo;TEy$6&C7@sphM6LpQSlF{yP8`{2f!`bvQR0Fje=`QZxR(!@xdzqEX zYoE4eUd(Pje_EPeK;^yu6axVKZlv8vg#L!hde742`inNriOOc_CAGKyJ9H+>xxcdAmgD@@aqlWb(MdHvwx&?9^-clYSjvXL} z(ySEI8hMItB87hMvyk6>JPuGmR#xb!Lvn6b)#MKPXHG4_@t28;EihQzx`koG`s;KM z*Jcdz3>oV=kgtd~k$-bfW{({!dR%uf#_8qKDO)?_o(p-8BsryWStA!7wQC916b_z zo%1HNO-vNaJ{Ifktl8C?8|fB``mi2qE#d#*3>~9?=+N=?AhBcsCN3 z+Qok}#*CA<2ys?)ORi|&3|I}%U>WV!pq}p=fc=%8URAw#;O1+;MGTfIXF7O2)Qq6L z;X}HskZ=3jsJy!{w5e(|8!u=J=?tM4u0~R&Uew7f7pW2LQP$Tt_^o>G;U6=gX;|OM zT>Pe=TluOi^{x9-ln1?>FpJlyowL1U^y}cgue9z5Oq$>^$>47O=}B}0ZIrxQ!KA9& zfcyHV%}S!@_08|X^dP{=>nH!^*ziuWJZXISPi`h*-6apW=r2|B`0bi?9Gq0ZN+Hfq zjE__t92}gTZ`r(+<;H?zWH0--pW1(hJ(2Fr)d#eyHOcWflDxd#?lX02%hF8mKU@+S z9dJ{7vD+Wf9WHc-!2rM0%tozCbx|FV*={{JY2uv8pb3Y`D}hps%pB}(lcCF~`?R^h zOK}!XV{(}`xIav`H)ft#SQ)_yRZXNwGbWtVJ5{VQ!6l{{YUB^m$Q>YB5{Y{ko#>ad zInN?)1_#l4ovy#etz7e5^b5HUc}s!FN;kM3jI&<#M4*Bk^4Q>3OM`uiDr!KYjYh0z z<_`{yn@7)$@j&%GIuj5d>x{c0@3Q)cuU>n?iy%Xd7HDqv#vkxZC=2VzQ8JzIWvHk# zk&!3~&lXQRP@S&)*OU2|KH?%gOSeqK@L_>>>SSM8l$PtiF3(Bxl7 zIG(hBM8`XqvOZYDO_@M^u2&EJ6D|$dZD)q^pv(~Xv_CWeQ@d^~bvB_E_% zr#|V{Lvv7Tm81#l92E^SzKfcW9?6?k@2F}9y)diyXW{h%qhe-XY;&!xg-EqAthC^4 z`?EuWG^P}A$X8j8-0-<{WX6L{-qmElPzPZG-vgB~_%Oy*R{%Ax($yxLaC|rNPQSzj zGQ86VSN%p^h8V1Fuk^gO^OusVP#ocYzZ5+bBsl80CNyDXxhJarTnnxSlQjwS!t-r6C@*_Xb%;jc*qCtk?4SlzS1hg0wRd^ z4okJyqSvqHLuEUEqS2R#1hVyopm3#g%A=|=(sO73r-{3R@T!9~B_7g6{YSJz@Y59I z4K)2gk10PPxp)hE3#n%Mrz}POQs5JnuG!Qy=xY`KA{(Pfxtj5(ZW5Dx?M>KC1J)`d z!aTu{OPFu%$0Nd{Eev__TrdAe(^bDU`M&K9Mk75sr3WJ2F_7-qC@JYwLb_WTfzjOz zq(Qo*rKKB@ZYiaF`FxM#{Rf_(uIIkb`>abW2+-4W3+z~fsC@KY-Lu2OKoKT;E~KjN z5#oD;)SG3uO4;`4^~*H*{t2SR8fIcw{gsz}=7+?68Lq;`f^Um)!Uz$c(Z}+URT>f6 zxa9j-G#|cgL~cgGf;Pf>#>hSTe)N=a@OuuG5)sksllteV+w;53Qz!v+hQDQUaY~Gz z{DlPwp%dhJi)f`e;%(^+tuoC1L?+3HsKAsBY_v)oLv~G^np$>u0KcQSA z3+0n~N^-$PfjU-W-+u!c7otS)H|IY$^-`<2e!JW8f5$}l80)K#b|QX0@;G1=x4`1Y zsw7t(Rk3w1}A=$JrB7z^s zZ+j;CA_jw1!QDlyB;ea)+?o&k*Q;w1VS9E(k}6#T>C2%4qFLG43lqKO=4u*~{s#V` z_!1ITu^#D=Z>HY}_qG3L<8v4JmTZv52qkd7q}viSBBQK2cR>37oTTJEd5N>4os(m|)uKFNE>Mn(T4E-Dg zmhMr3Dg)#RCIqqa;jf4Qi8-e@DbA`Kk`+nMku)V0ol11+*mrVyt|PC*MpLiwX0d~> z*L_Nll!CHYmP9Cgs5Otv3%S+h1q31Vo8LmjaW<9kEO%HcN9G-@=_kt$yurz_RjTYE zNV2#Ca_O{Yv-wk}Q=G7>@@nq+rzgIP1GmHefS^oiqJDTQ5PkewohIXwyB!nfQxh^{ zXYf;am%sxF7Lg8#+<|}m;8lP%Zp(*ObmfdID8VhOoXo^?Vpmq#I+a*Q%PcLUTEYo} zqLWh80}3KK)+!y!%r`t(Zq+wxaTocpzvW0AWYg&|#if=#DC;P!9=}!%e|Fd#TpJ*6 zCJ?t=bK74G4N(o#8n41`^5owdN#)*9%$((*pL_P?*6C>~$Yq&`pT1Grzf?@D0iSyy zckrqV;H$`Ax=YQz#&q3gL`;9g$a;NQ{+K3XudC&c5Iq)EHXkAHGQQFtC39*A9dy}^ zfGdAywjsU$$b9|U58TT~{LJQj>{3x|c{~?_eld8{8r?1SLC_2#J(&Hs@2_F$k-(;B z^*i62u`(SE%qT_{nN~iImPrB`zS(mTqLUSv-rs%n%h7>3mzNssy&-yi=%l=1ySeJLZXW2N zp4$J@xcH^NL{c;Vap=*|qJ-DCWS@16JW=>wtn>evtZI>G;Czy~ARu1p&W!@&ecx$T zjZ3*^imC;3$I?}u(+o|rH44QDVL+t-VOsWvcIH(nG-n)Ay?&1~EDE7tw)1FwvFS!! zqsf4qU|;g&H10(COMhzL_iTFOpyFWJ11Jl^3Cgtu_iB-a`pbe2Km@J8CS{!;%;dAm zL3?%B%rW#@sEUwo*dK16+pxGrA*qFGTh$8AbCIKl*QAx^1pVyBU*90+Z-rh>Oxq)n zPv*V(bCpccEyJz1%K6k|i>TD#O&>5PF%NKz!p!Zlj;rAV3`*4=k9fhC&H6_O!f*sp zt3k)_;qO$>j)9BL-VIigGA%giZWdV}Q6$vpL0|vj?x|I-hZ|bCrb6-bg*X6vk^(Md zIG?^iY(L5@=;_w}zu)vEM0!)4O_j6Sw zoz0d|sI*U(8?vi4(6-f9;!$Ys1^_@{fZ^d=fpmOH9iuc|kn#S7dW*v(AC`NTL)oOh zg=}vEyj%pM8EesX^VN?cKURKr={YSlQ<5Oj#9=-aUf`(2X3k#J9)Z2Ru6o3ccO|QH zTTynsX$h(C(BxT=yj}*HxKAYh4X+$U&Dlw*72H;9?#n$*2j!E+HdDn8vj;a z0*~~~U!-EvXVv}E&tIf8`=zgx${SCt(G^x!Y0R?&!G_ zh6DF=X7e8jxYrDA{I5fs%c1@>6B|7_x>3d&&XGY0q zP&d||eEQ*YeeOU2LKpbfDP{&UlwZHO5>b&_{`4%1RboEF9rf|NSpd;y)Y)5>T&SM! zpT>WUJ;B9zeH5Tj&=Tkt(@OvRSN&0(Qgo(}`oyPo`066QG|gVW2bSNTF%)_n`zq7# zvwT>6K#X2xy3O=BbhQN$kHLwQ1gz5osiVcWB^i&+=}21QU&}LfcaFU*(rmZET3Ah^ z29f*msPU^Lc#6^MVgYFVsQZS`sjl^7dny|4Jy9++cjN`3_KF2wGI-zVPBLKB?cRzyyTNQf30lVK!M zTP>sn|E-QXZ^`YmJ{e%97jn0q04Ek)O4CR6cSc9E!>`3_%oTq^hxpTS*KmiJ2waZ5 z5Y8uJMswwXWhDS-Vv-+QHptMbN&g}98`bv#(TBHcpXbgd$Hp`vKAIF+t>N3VmZ1xm z4iXzM<%5l8hr>Hcs)qo@8!L;U2HgB6<+5>`RiT^Mm2}q)*Ge~I|4~Pu%#iy{KTW+k zHkbY|exBJ=*#%`|x>AFdKOthkK%MyS*Xr^mjb&Letr4r9t74ew6zM-RCWlpj{Ou2_ zk7o3~RdnXEsq#uCPcSooBmLE83q^R=GHt<)PL%}Nq#SyA@)5pGx@IC`ws3jVNbC1x z^Oim24d&eEekHfd>KlDu31siOMlMxO3<_M`KjGtZWZPz+nZLPoai&G2S?Ns4B7Lm$ zj;Dm^%hoE%Z*uHg%#d>JQfeJu3m{df$0Vb;9v9!6(d zp}@k=UL!P!qRe{)f|O#9Y*d(K0HT4MI`j|9CD_YsDW$Xnh8MN@iO;n}qTf4+$Lu$? z@pfk5zJOTEEiA4O`;Lb=Xqqx^Fe_C0ASMWhkZ!d;_w_m9ew=FxFIl=i9Rf&QiTRd$ zxUTlZ?7X8iAe*GI#d?KSig}l2 zNG>W?{3aoz$`l~#O_%-azl2wA<0K%j{A7!-Hqm>W3BIhazh72f-_3SZB}P|Q*=yd_ zMpf=NY{Ek;bfqDNrU3MmH;ZRh$t;6euH#X$2Eq~Eycf!cl zY^Qmfw`?z@(e8rcA`i3vgd3vDi!Mu_m{T6u2b1 zyFv>I5I#VL6Hi`7TET5KgP0zG6Ob1**uwiBFW0y@!l{1!yeB>LC1LB<^8JQ!0t77? z*%wF3KN#Dsv;4y{5=spys+eJ6Z?Ht7tqLrCf;5lyLdkB{MWx8FP?$fu0lmv3--arb zpwcmmV;3yxjMkXH!L7t-=B8vT;ADzfEd3z{ZXwIBDokIia=QDeMBmIzPnWDTMuj1@ zbQuiM)5f|DkjZ6U^|X^J+Rp>fL6$!~#sW#dr>aqJG^;%yBtWvBE$SZ*RTtFM#Mcs5 zGG2YMZu|#pxE>6|+7;IWcFWR^b}xP9fj)q{fD?apls@G;Is-5?7o+KurqdboC||H| zu~B8H@vy7{@+bbCanUE(CKP^|loZrMN+EgTC5eDK%3heJIiV+uz4L46>oZJ(VjtX`jZOjfj3dn#GtbTe;KCi3$H|V`-jAN zpLBPdCHXXJMn)l<0g;;(R z$`tepd%ZX~-X|kdMsp8nyl?aEB|W+vrVX1WCze_1V;Lx`@MaL3Qz8x&3dnYyqJb2u zGvHb9LPRql{&haTj)=XG2~P6IkDyqnP|mcGNm?}L9L*hT(Xc`}N&%9nJiDv>w%Mj! z29dnIwdl>{cGJm;@?$&?LLaUW$?L9zn)Ddmwu-Uk9)LnyMgFMWk{i}30ei41P|K0toXnVSb!La%f4I5Z)GzYaq0@oExPD6IfvTa#FvmE zV#qJ`-kUt&F_XEz(c_Ow=OCX6DYzu~74;m92=8(Ul?R)=5XO@=Z(2h6Ne zZjSG~Tu-!PIF{7s77mxvQ1o)}{UdPdoUx4jYaqYiA?|$K&FIR$jK0&7j9g zY6gTFzQP$wyuqsU{OYSXNe(D5)fxQce|HhBq$MYZm@-@l%Jo(k!Ncm*%1O|(lX%xx zCp@knq9!1q%ypiv$k8^pxxAMg)?{wZ%LaS{$0xC@;lHGixV6hdS6v&< zse!Wxthef;%3ZJA+G7}^yzl>Lx0 z79BL!g`+`0LS#!o;G1}0PN_{V$J5Bp#;5&-fj*~QuQtw13m>t9PTx-y`WH%3H6AiP z683pf5)fmSH`a_%%rJ%3`TSjw<)LSir$sG~QYiU6V+%^LNDn%Jx4_`QYw-)Rf;u=f0MF{iJq}As1X~ zKC@izj>?=FZ4Jmec$paGr0Rxg4}3A@j`gtGtr7g;UwQmesMf7>UExp$RL+MPsHJ)49x-mJ`qyCR4?VvM8g zE~&$Li@uto8&wx_mnC$|QPqIIR zj-rJFR+#ejTdGg*AOsaVPgi zd=$Lpdzk3G^)lFSFGKeT0I?TnP(7*d?&8L%ZTLFChWcFq$sL73O~qR+t3vxLzYqIA zc+8c)3E(Sly=as2+cJE|8pg|eOE&aVB|~|fk6C;VQ0TKev{wNAlPW#F-8jUrGYg*U zu3|a1P(|s@8;GqSSv-hj_9i068v|GG!T0`6w9UJ(WJ%ub*#d0;-wQBW)!k(NbFcds zV`4&2BY7}&ta{A%^t^r;IS?r%^*FlI{9t#FV@q>4hI(DEe$Nlo(Pnr0z@C+>GkyFb zMXI7>FrS;eg3M{+=S?i0JhwuG*ws}yStm|7fuD4S+g8F!l?iWfoJ&QX59uC0HWE5#J0GPbAPbg0`bvs=`K=L=0_hdLC8T5PPCnc}YTl z`e=ZMhouU~OgCILy7u`!p_~N}LKC>k9XwRmWV((Gto1$LtTROXsO+Aa1$+YiD^Px` zB;m&VYc|ZpB64PLH-IM4CmVSxABbI}D~h%}WLJ-^Ovy<^f@0lLYQ=1g6e`Hm3I1?g zC%Z#r_6tl7T-!fGnshAwV5j?`xMfYHz7Z;ui(SlJs$J|9P0E!%_m$ro{-R5a!uj1P zcR(!bCIrnM)|Otxo_Om$_{W=BJ-@n|6OY7)_YES;?VWMn?U?k0$cys7ITrc3@?dMf z#&Yb}yZJ#3TvR|cmka37!NY2QSB zL5#+cN`YkJ9ST*{)-1azF&v=csfV$z=22zTdu7KwJ&u&m&cTexxa}RCFh^%cex`i5 zeeo(!$6)R4IgUc=7SZ)9u)1NQ>Fr5Mx0rzvbG262|EBqh>c463cF4?| zeoqMu`I_f{f<67Q;N>ghuC$)dsD$;uGt#U;o*8M(5!Xs3HB~|Sy2Cq-^|VN|lZ=CW zq?`a~TDk-QU~cf~z30JhEIy2}vr?Q@xh0A#WIB8mx{i&gEfTr(${Mpt4oblSxe<+6@T)edFy!0sZL*GEaJv)+4X} zfcsM%NqQYyu2CnNZ=s5+iRJOyWLo#N<4@-3O)L*~Sbgj1`nKW*jdbU&khMwSZ$Hkr zXwq@V3?jVkNnJxm7s!{e{akg(s~7dD=gdt-&YM3AU$aT0)@$z=3=#-fpTS{JY-4Xr zqXo4iZM2+cKt$V!O1mU^`4;?JzhZiWwZPML73K^N&!T}mB*UFYN$G=fHNm5{TP0Z6 z3Vga;wP;yE{yu%c&5(Tj5Fz%?loQyGb_qggeNgL5E3-A?-aAx!<`^Q#p;u4yY^CQ6 z8OAt!cxJbYBkZhv7v~S4$6ShQ6GM|2;xBGG8pU;{U>P8m_^un%(uMAC9WX_aH>x=g zHkU0g5*cvYwyc^n@1)WpLkEi`e7^MiO#H7QtScG=rL(3h0_A(whVUKgV)2-C4Ul`X zH=_;77LiiQ)XI?(?$@#lB+C#Juka{ka zs`wqNu_6ar(}9G}8vfB`qak&)f6E#U*d>=E+lJ*Mf(hHVeV>Pml@r!l+Rb;+dTjz9 zm*X`0$)`?_keqv(K3~mvv5EiDw#v?W%yC{oNv?iXVQ#PD?QlzY43Yfj_op{zRYy)} z9aP$sd>d&sA3+Ob{}u$0vAK7-WXO`2roRb?70i6%p?LCTd+y_t_Cm1$;Q8yWfD)RI zvt1GU-?SzrieCnyewr7ML5l&a-EwiJfELC7gw!jYOQVZ}>qkHdNO2kOt;(;Qy4JFB zG?YSYY3kn)|LFJ^MbeWoL}8TB#A(*W;zL<_<;~YF`Izs)<*G0Hi8^Fa2gVQd9AjwN zFn<0PV!T@*y{xUV0fnMBoYS|S7)6|SC zCEA6~ALMBI9#J0g0&AwWM_WMesBYx0k%kOu-l*wXeFaTCsvYGs*!kOCj7o{mWjZxC zah5Xt>WsQOlW7w_#kv^x<=C0|+ zrKW7+cdEQnU%j$^bD-n-jY?v}N)qKSrnnYkV(2uheeva^>OEl)y4SQ&O>-x{A=6gG zwuy(O$Ar4EGT-cJ69(W)nPHAEWDgGpCZ>cOnd5{gc`p}HKrNJjQoYOuP7vnfAygC$ zeHe-MnJgaHB~jcwD%hkjN)8aL@nJ6?t9W1(hV}@#GtuR6XmbZjSITNLF=;2mE0Ml> zYm-`CX?$7W*^wFQ+i+S8w(=P!qI8y*P;s>XQ{5pu zRG4OaY`X1MO>Fk5j)ndjseo+`usaYYoSGAwHT*ZP`3iYMgg~Is^Rb|ie}yh^eM)_C z{&^fHH=}MS2{6H43GxH*Vp!m{ROF^AYpQ*hL`)%o3KfVDP95~nyq6Yg@EAa<+sB^c z$8!Ay0D*WfbaUis6=R;mp8a~hmjvOKL_4O1tVeXkSh>(M^F|DX3afzXX=lHoJ5Om{DiMs?k{?V&3$nTSux8mIJZN;? zyAF{(S1AW4kK9~wbG)`Rw%ci2kom(J#~d~O9tQKOuU#vtkEC3^pj~QmFKvA(RoFq}~+cG1x@h{0oiMG<8|&y-O)%^J-DoHwr!4 zmO%5e%Q!INkKe8-79)Hq&a$&8>Zg#!&fYdwe6K zAP5Y6v2qEWW`7SFpm@YCnH={gY6EV1Z7LC*gfP-_`jASU7{B-_%UFj2@p6e+*8rKy zi+onKykPUjD9%n*VUMsIUUX)+e_RpR-p>St2=Y-?=2M ztlF+IpOEHDfjT`P+5+1=yMDO!P8j%fLt7j~o$zzdoKyA6x@R{Ge5- z8TLk#54Jk~@XKaUCmLzQI`|qrG1(MlG1QKRSs?P+IGOIeO2cEksGZ5?n) zsq2O&Dm9qEn0`uT#dBsAr|~2o#{d+AQIYd zuOtqhcQ2!v3!(LjSe;Y9iN1Ux{B%9)lJQQHG!{GmC9Dhu`k`s7>m85}#s5sqW=uqW zSM}~WDlPwPj7MQzZWewd4%&?hpVdZh#z=WDktb@H;$meXjN z7$yWm{i1idmq*H>$JV`& znCw-Vt-;#ve@wfhJPMHSaQYsU&Qy^kbkug9Su-TkB2>Fb{Yk(bqv?I~(If@NkFO@) zU!8o4zpvj_bnv$6gd+Sb{$i@u5f1n6leE+S-8yb%oLZ1D>%OZ&c=Qn7v*`;TwsOe6 z?c=}`P1OtcsvsUFwk0elgtevFHd%#^{SqtaXtpMi{)+1Y*6@y+xz}S}tFcF2kAg)Y zXN8Ov%lcIKZ&F=w@mxt#%$!YL%=pwAv-w)O&MlHj3rQ#XhWgMM+4rlT%Ma4gC!v^J zhp}`vP#4LXWBwv`A-^SppT~nSHo0%c=jY~iqqp-%m+1VZh~erew*Uf^7pZ2^7llJj zj*PvYb?$62sh}V-2o)0s<_#wIfj}iXk0DtmB`Gsss9~`q?n}&y8zMNfU8C)%5bi+U z*V6`?N~leuCv~b493@^xrden|PX8&)WnUU|wcPiEs+v5ZhopR;{PA>U`eFRB0F z&w_+B4knHPHeKTs@rG4CS`+-mG8X~P79&Rr=}|k%W5-@##lWbCzmD*<>oIR1BHSTf zn(B4c<);z|88?g0c)BK=YAmoEzOxmu-s)aCZ3743Uh&8>`!;~ZtBf^Snf>0n4{e14 zlD_3FkWpVgX*0;&bh)|ixr^a~VDZC@_f7=(D!Y79pop7&=0jCXEs;uC|2sx*mRJNyy6-a;cqAU$P9x>x$1$F} zW8r+qhjdTtg5r%LWe2CN@3aDb{l$EcihG9F|MDW(P1)&!yTws7uL2$eb(fzaF}T}) zE?OP3tFn8*2rwl9;-8GX23XiOQho84vV6nZlpO$|f+XoF!#ChE8np2w5+5B6A+#?! zz1$|d$4VOJwY1Qbuzap^C!cUsh`uuZydWTbdNcb3<#d1H<)>>&?rUfqcy>X)B(x_d zNC`V#2_bM*jqaOBa<0o!;u@Q=%!vI>>qhE|^To1k9aE6n=02SIjK@7F=q3Ao(wWUe zm(TF?q(V_|AWrr=#6DVY2H3%W$|av*#!YR3wV6J8YEkMoDODs97ZFu@=bY~{oxVwH z3FxZ8I;kj$TU6w1Fn9mZn$0}IcbFj>BUm}UhIK?aA6#0ODP*np8~W!)Gee`E< zgrK7EE%#c5-^^B6fJ}-S`%PA~+2Zciy=chqZ`;aY+zKTCBOOL(9L&9RmHJt%xtcK* zlF5nb5F#kxK4t!dA6`udR`Cp+Xk8a zecbO;WvUgogQ6r9f2uMlJhRUy!|%^MqNgW?_^>UY%#8kYQdU*_`3g6kMq7@yw?>c| z`yE91S`^;?#hOty)e%#ot03^1becdPf$~%Z-E2M!I=L>_f*74RwKMj`on8#0U(TRWEFsE)Py)Gg@Zy^L&leImcQG#X^x`HgZy%|cT*riYzX>IvS?KI=eG&be*Hd;g=~*D-NP#9ZVLimQHNWp1g9F?+qSQA9wmy`0rd@ zrG(*0W?3hE|0)P@Hs!IKlc>DxSUy?+fM6=-m)7VJ&?Ynt49M$g83vyy`7AoUwE@@S zqSg?fqt1!LZ@-L$X{+=LGvDj>hWSHHk+AqsOfn_ZQ=9AR(dtrNv(%&S9aj*6Sw)}& zayP1+9E*Oi+E5~eKF=GJxJNtupw=lPp*?jYLkB^WI_F+dqwuztW~7yiM}?jfhX}5g z#Wwix6(JHQHTv75pGg^EdtWy2kUa-e*3~xnkAJqnPtp# z!gTKBSAcmS6X(NY&+V13jz7!Ppy+B|?@vf}rB2NC*G0%rxVdC#h-!Fx>z;>^5yr04 z9Ve4ZI6c)r<>609iC!bhYwZQ<_b=c}SU|hnv#kt1qA#9A?<)U{S)bmuqj9%AX=EM4 z&jNz4h<-EE1^a*?mk@r(w)zzy1F1mhcX-Dr56J>{tR$(sOmIbW|ZrA^RVK z1u;IowgMpA0u!NW7FOc=LVzDyCqigjjzX9|praRXReSqJItXTNnDcak*;fKtscfWL zLh5Z+iAfTL^KD?u{$Qv=k3WOwUB ztiSvU4ZF?<|I<3Ip)mpAFfb_J1a(#$QUm&g&5YKEZB)cYxXFa(iihd<+W1R3@i_uPPIxWCyup3}v?m#bo#h(R_4H zz`crJj5WaA4*M0dQIw4%#a9CWA6{6*%Li)CyQ7`8YPKN&6h9<}{M^xYoCEV`DDBq0 zG6pRp^+YHtVaHK6I4ipbi4vwvzjbO$=UKcTqS1}1I%IWx>L!BMcZm=N`y~b4{tD}T z(%CkOxcHDnCRvusbv+KZhCJBCiZ82o*Ey#OxWDsm$Vk~K3Q*fw?j@80@31OCu%GGP z#3ci+{`LouJDjF9;``O#zH#3%y!9XmUjC&hCpPK1*m&+ zW}p^YmH^hU=*+Tiw!F;PAG7H`}NrkRMb$6~u{$+jmH!mnTV`cMn zWM@@#vUdJ{(lg^fQNG;+!o~9*gHv>(gwtg3*BLi`Foy=M4LC zUVc0jostKkg#W;o6La=l}9I&LvNb z{sQtwaU!Xe)|AU1`NPX~9CVM_sq@A7b45;Y0FJhxaZ@P8r4CV8hp z2v7Ex0^I?;$*dqTsM3h4>4%Gc(84+~qjWku+xyaw7S}Bvk=QvuXb&!nu(P8B!=HYQ zc5T4i)3!fLIW*>6bl1JG{R|5yw~-B*S=XER-bn{!CrYKDos zFDZKChtm>eWeDA^2W6+k-&K3y+Z#i>AJkT|_gXfSceo1jpPCW8c<3L^>gEI_KN z9Ks$YH$rUxTKk{nWMW7$fiTNsu@|R&G-ELSN6{XY@RwZR5Obw%`TRYJ08l(0fm}jz z;JU2tjyAVS9%E;OfWYAoModo^@RE&eG*d6!eP>DH^@ZR7lJ#W8odfNLp*?M|jovb} zNA)RlnES2PQ&_FKqMndr^6v^-v=|&j zO%&vFi;8v#rics_Sb%5rtLHx3V&u>>E#h|HIC_|(z99*0d^@Vh&y0RO*Xdd?B%t|E z*b~%d**gvEUK2qnCEsW~Td>=Ly`|9?D@pF=Idjjco9*#*C77IZMVQ|5_vw2{$s;Vz zz?Kgbk`p7o>YY-E)}vz-A5`u;JCRK} zX>1bdt2N&&3SO><(ae6@1>S~CYC+PN5h?cSy!2Oltu};wsScTu&m*7<9yyLd+)~^vEI(Hv$kc%o;;ycT^3VPfCkM9 zA(@FBgq*S>|6cu?Fs3F-Oy+UmHGQUT){5Aviu%5#(~f!hE6V;AnCAO%lz)0_CIQ}G z=bT_+5b5b~rsSH;h5@2n%uL7dZHS!%{77wA848f2d{{l1Q{PX5jMv*%B2I1`beGyN zgq93M$k*hwRJxX)(a7L`XvE$q@`0`Nxy|guVG~E-x!B76rrf+_<#@cXODhUK??L*Y z4h4~Iw(MU)&~HZUV=R*y2;fQ@S!nWVxV&z}=RJ8Iy0>KUoOI5Qw{MzI@;Wu)&kLqC znG{PSxlk=K_Eqy!2+cONmKJC8^T!&_U%Yy8Cvq~U4HY5+>4_(f`v|cD%%$1Yo28@w z-wWWb&}rhB0GPUG<$EqXe14b@rC7Klv>+f_n4aZNizXH9Z}3^Zkk|3wD~%i{?b1P0 z<;O&0q9=*ba?4Ws)#7ROqvlA;BQw*LI9=?k?V0w`Rx5Zji#{d?u=%0t)4{Y;kx?{CT*xvjK=~>hSa5*ki9%N%kb8T~I&Jy^9>&#i) z6d|4Yzb-7w0XXtWU)eJG@bTyVh53{a1*hg8$bh++OKG* zE@KCy&9W`>Ap;ks&`jT+IalMUNPmczI`V-w5!ICfKfX6KkPQ7dt@*CRW=hZsJOYRx zM1Dpydue8A6kWa;?%dJErkOAT1~g3y-AMt5;->E+uXR|0^_qS$i?YHNtzPqj8uH=F z{jjxk9h1N4pHiKYv3>BIV`D$FLYd@Ad>a}drr@YonxZ>}F=K z0YG^c8BU`t4vn!gCQ7oy=i8$QE2@%-S_&VPvC4KUPk1S7l$ zxM1)1*iCeol-OdbUh6kul8+nccinG4hNoihq7G%Ti<7Ak4PV;eTl5QTHEcXx>At-m zdf_qO-6;>Y)kskbb!LzX|IZ<)C{K@3^!MYlc*zU>hrP!N z5*MQhGWu{O!g;$xNG(IP(-vj1h3>GK=T0ljOjTqb=a2Xg*?UW|}lj!L}g9q35u*NPVH z<41MWpqzHk?Gs3Tugo!7A5o5Se(((B>a~0Dla(3ghz!>H>B*K&Kb%MX^6?5^=BRh% zIAO5Jj+#|;#atcwC9|RHXbHK;*ZEB79fbm_s4dE-`0@cI9g{vJSLvU@dX!cLoRkf< z2$?CYCIp9r!Om3XZ_`)4RuH8beB`cSM5I~B6U0E1MFxf2xrxn{YJu9zuatYJiKV$n z`BwR;iIqTkLIn`=`{d;Hg(}L}wINm8YM>%cid>Tsk-QO|R_%q28uEc+SPglVnXI+8 z%rRs1);mgY&SqhReUq9|x|>zy*=(^`v-if3y@XP=B)e4^PGdG;q|{r-p&5D4qDlLP zIZ)H3{a(-qB@&x)ufJK7eb6N85g;nAmBQ|(ppwz3m*d__YKKU0Dr>Z_R$B}xO2=p5 zA%Zv<1o~EWmG$X!4fl5nWSm*+W`xJn0bOpy%hz(FDO1V_Es#INdk@hFhV{dvg*q3m zik?fak}=PDplq?0sAj8Zd6o^bbAi@watW1_39~9G{iDvWO$vMOqQXU9q=OnuE)5`^ zpG{7yP%$nLkOBSXD}~q7o9t`dR`iY9vMXiBhDyDH*lluiwo7YQ=i+PzD!z(AN@3*< zrgMt6{hTPPOeDlARDq;LQPAhoPyzOfq(!9;%j;uuYU1&1@1LY_@tQ?bA9e8%|pKQAfVmQ%{xf8KXDG~IrvU3mJT0)u%0URIEfG zsQLYIUFGYRkyL=Z&DW(QRI&;T_AeoTKlVqcJ3q)whS#Wk<&wXHXb8gg@%sdGFYpoH zm7R~IO)6{!ZCo_lujC{wIvGBpwUj)E?Bp_5-N_ zqEoV`N}}c9Kqo@2F^FR$*}Qn1_tO7Pa!`#ipMAw?rrEg|jy-1Ot}i3fgAvJf6>70( z1PPAi6;yS{yG$UD#}`|}AnkfvGqifusM}*6bEq^3i_U*l)dlOKyIZJ~!b8<57n zEA%}-(%E~^^YoF*?kEtvz8vc#`UQV3|0kUaR2YY1S$)`VXO&Qf!@@%<3HQRcktUWH zep_0k8Y2Equ)YJyu#`kAoUUJY8<1ALbAc)K9xqUPjb%}5$Z{%oBHGX zO7^ue{0XHHDWyV1ET$yFX_X}3ncKP5d4j6Er2C~aiCij_2A(aMaE%bv(`V7H)>HWE zJqtkW3NMX)Klbyj1aEic^G4F;sp~fafwG8x%||?4jxo=!v&Z#}>tvFKB23+?K^1YN z@1mg%f+NJP58b}gH%jzHa|l*Z|5)NK_)1qpwm20kZX;vWWdeBBnfE7$lwgAAll>Mu z4LK(m`HQHia@zmognG%X%(H(`bA9kxS7C3@&#hJ}9&nS=%DDyUd%X|C?u0CB)#ZRl zCE7Z^*9Umdjus>c&Et6eKHls479SnW5=D1Yvqy}uNCMN0gI{`bgS-U2>HdJFTBhf# z3~g%eBFPkIzf0sl^CApVq5nJQ75+Qt{r-2(_oTj9aoh_(eS4BU$M>EylBEik$;Hw9G{j2fV` zY2zRkwcqLv09M|*eeTL| z3!Q7_L8vbFx8OFcAOZwQ7D?6n!WL!p7Rp+0te_QNe5~|N8%>z*v-B^MXLTqw+?5#a#?~^~zgwvcmboB>l)f`&A{HL`Eb7)-LCa{e)^AI&h2i{vhwK(S8 z%k?d7ghUfuev6C4S*STK+@eXcz29ipQ=?-|vx=Ra5X(U*zay+hD)PtP5i3O4h_&qh z==#d2w!Y{~2o5b;+zJ$jLZP^OarYv{ixi5xmI6hKd(h(UZUu@4cWWsG51K%NO#1uJ z%%_>JSu1PZ_wIS;p1sdL`$i)!q%G`|GKIL}-n@Jv>Zj5Nm9*6FWvsvAU>&2-woUe~zvG)#JB&n(>IR@@|LSi;VkJ2D~4F{1!RjdS2;Y={_nLRlVKIVl;l+ z@<)=(6wsoaTT@%hBDqU!;{S0FnN9goBp2VGafY&iZr+YnI7MPghmG4C&!{iI;nNiM zk*akJF(gm9+WG_}DFg%kh`8QUOf0AxJeFTi%l+G93px4~Kg6mtZcm13v-lXoMAPOLHnz9{8%)XM!p9Zv#)j;Z#Rd9|ir4(<5$`d) zOyyjuB=Ye2P}&xeO>ZGV!Pf(?>QMA!r`ZZF9!tvaRd-}86$q2^G!o)@Ka+uT%*?ebjn- zYpn=mA)Rf^U_)sjghPrpakf3a$_SilDHm*gZ~_X+jSdCk1-B0zeYu-z7<}Q7XM6^; z3oOBo%Wx=h@fXncU^S?tBw#0Ld#g98J@U!3#PTW~U6sGl;$W9Y6<;Hx< zY-kl})2bq&U=gDc*@z0~R3qCreYgC`SL77OYA?7AerADBJ=$G2*M(LBJ0fE#XvnJT z-x>JpCt0twHt<{};X}euH{~j%b688|BTA(NFRJ%MzwvDu0h!wx|4Q2=--`O5y^_|t zN)5o}a48vxlD80P7@|1Hi%fj|ZElt>=6Fmj;#IWn*C6xf*KtOsO1cI_wh6j->Z8WH zQs#{ly&ick?>9fXKAkxI|MXS|Cd)3%|4R2}h`6>4fz+dAUelMDR)xZt5;>ONDAw%iE$Tpa$u}*`Cfhx8KO16s z`Pr-;ZsAW4o7YWWA72r$h_o$;X(6`w%0u5H5?&}TvGTr(21FC(`s!D#d83>&^31N- zXZy!=o=0MRi?eVv{1e7F%4G`@uuvDj13ubc7p*{>w?%z5HF)Go;i+riCRuMZr#N4s;l^}k(G@6+q4+iyDywd|zC8?-Z z5(J9cAD@4l-2zWGMSb2w#koo83y>xinF zntL6eMcz&Sy(hCR`7G7Dp9jtKXFT1FPL2z9zwwrXOzrzN-S5m=&opz~c|}i)%kI&E zC;y4A5YK*rLdxQ$!PcAJ4fI%l3_1A(5n(Q+yqFR84E9dx26e=^$}Hv5 z^T!06dz>U3X^Bjm^^f{-(tIakTCegFM&Rgb>^?mERidT8<_ug8|us^bbG~K3Lgfq%D&79X- z4Yl*(tXIVPw$rD^j4mYo)4>YNr0PWdq~U=hS^WzYYwJk;3~-6x<|h8Rf$RorA(xNq z0qINu)tM^G-#Ln8YINWCIn6@CrE8rgyeL0YDB|=T!@^@EmQ^?^uAf9m-Q3hhHEc&Y z714hmLglOg0!Hw=gTrSJ)*3geJ>nBfg0?)``uC%T&(qf9p>rD9!mY~ z6uo@~@ZPi7k6oX2(_r6R1&8XX7fZxdJ@eSyP~}4_BPn0Q1nEJt>?U`W#79Zd(e_F8bkn!4`w|6ShxX)bB-RVQf78{dUf}HV=i%pjO)SJKjDxZlN$SAJPu;Z7k7j$J;(w;{T-d*s zkLMjqy_tSiF-0Eh&Wa|=N*EQLM~0}yR@TW?!gg(=(wSLC#B3f}>0jz`B}>QuMBe*e zV~LIgG^mpub$tikru872oF2;`HNwzP%d}*4n_PnqSh9*ddX&xmApz2(WD&4HGODCS zsFtR2=tNad7GsQ#AmwIm%IAIYh+jOPJwSp-VhNV(*@XQhug&3Z4 zu#2<6UnW58R?fqQ<0#=9ZUqkdtZ|qUP53SExmUw-l?_r5bS)0`AKNMj&;pm@j=Ylz zjgqqd@ICBVYD5?2i*`bBe-yd%(Ti`GVof3@Wb(7|2X$HgF~or)F8DKOF3Bhx?BR62 zN1577ar&8#Ejr{pzeS5s4)yHKl7ABDT6T8G=$nj8e{?-l7>A>$=#h9IFsp3aH@lpF zi-?d3eMX9BIBXMebV`Lio=(#jsHTb@Y%A5bkj;4gBYolNS1<}7*RYaK%`GP(3WAl* zR*-mPr9$Av``1d{ddM0#iT0Q1?dCKR2DLk$$*$Ja=`Ye&mM%E#MwW4)nPpmQknp3A z?e1b={Hh$hd8smA)Ub1lqKAHfuM$BzEN`dzTbeW46eH>Q3TXYoS=bOu{e4t3{D-;a zY}>?xYqctIj8m$CN)N$IMU!MNv9V+MgtM}+?S8dxKMu6x$0X;zM?2Xr0D%%TlFh-G zCdN@I;2WbzYP^I&!{_R2?p7_PQ>D=(znTHrCef{QV66_j4!m#g9@k9M@?f4*MzlSv zP?<7S>TAZ&>E2bK7>2B$(3WiK|+rC0~6+T~Ty3 zFDtc=OB?22R2uileOggsSs+c(aRe14N)mZm--}>1uvqE0!i{TH_{Jh*k`5~B-3p5~ zB}zbhA83GLB)(%sD0B~HRg`?!`B*Pa%D`=`gmP(q{RKz-)30~_dK)+r#Xw|GA=p3t zAPm^;@GURzk-ly3mZzmHNIUSA(0;P(TT<5JLCG;68gFNLBNqnj^Wt8}qmUks0Mx7$Dq5 z;be+XdXDhGjAQA=#D0+)ohG1G#q$NbFgoXewFu23UB3vUMF*|bILV0DljsWdRM^iZUL)wG>noeJwUh?jtvlu>z$z;RWI5>9TVh;E z>q{kXSZ~wKRQ1v^uHQfwg~(kr7x;U;X3jU%KhEr;NO5u6wHcr<=>0D6#l*`spyk}1 zc#w0KS(1`K!J7|)KzVS_yD-sfH#tVqqM3~Z%^PP2w3*%CPsZ+!In)@9C$TvZr1MR4 z?T9WcMSe-(!H3Q*p_WA@hf=6_%Mab@LE8e-fV;SidSMzICa{^zeAld<#6USYDbWH2 z^P=e8pB+33OFvDGl-by}wWo|>8mc|DF@}R#i5q3r8346>>i6?{=vAHS{W2w>L|mR( zy8M9RqIKj1RD^XlcrwLP@(q2(QHpcKS{+zLsp&;bUT|H|O=2bPQJN!kG$7Ra8Wt)g zl*zx?TQ@M|%l0a*h?X39vGwvz@i#7sd~L#MpjdFtVsO2!*3~pPv{p*b>P3I?jLArn z_8c*X`?D}e@!%U*rtjl%?XhKevyUFVLXX%I{_;6_S(+YW8I znD6%g#~upStXc^@9O375Ejv4XbZU)ASk*+{H}z{WV4{F;BY&0LD^41321Oq?Ct6$H z0WPw>q_|eui9_@X9ne#i7f?JHP7wLM7I&@{!hwRnWE9Gq;s|$91Rgs*;qEMXw zAtl-NUaQhSwH}w`tPGk(@^@w9rklsi0TC-wt8dEGN%0B9E5bXzclNKeG7JrAlD(eI znEu$Whn2feCNG3bx`^94)}BP+X3|LA9mQcynE5#rJyT^-DCnuy02f>9235OMggdLv zo~&OwPc&_VWir$MYJLceVpG-AWVTe7WS-ss;P{#-SqC0@~Kd z2AIAwZulp_hT03Z3*u6h!3K=drHdU~Wq|+#)$;14-^$eeo@Ns1Z;=Nnx;dtRy$H|9 z2!@f4<f`xtTC`C`c6XbtnE^#+cg9}0te}Y0^y$cLLs;npxb{p8x3XTekj*+)uEn)S;TlSrZ5!@A2t(S~LgKq+E zVx3|m@slXy52!?@G__ z_jOAmFJBxo&I#QIEWILf*0seCSLOD{Z+Pu7H!8q(m*8-Qde4uS!S+R7hxr(l#h70_ zKTHtlGo#z1Gu5GAb#+8Zgt1m)gdB?+x?;NhA`63F;esx4KH`@sH#!n=?o-BmUvPZ4 z3|t~|cK;*6(M6^o9I;2L{4O*^9ewoU_IZiE9r=*y3na72o$wnL5GSD-q3+D2j5b^WzbJhxolKUs5}Ga6 zS=0j@St(zOhf_h7q$_q0nY!q{Xv+uXX3m7@31Fw|Bq}DzEDpuI%pH^s{Sh>3uK4(4 zmqWYwIb0JSbDF*)$f$N;k4}wqO5TuM04q5aW=`$XcG;yEggJUvqj&42*yNBzxI^WV z*7%t8G6C($72}3 z{Q*n2lA~yDK$LVQ63<)Yw_L(h z&l{X^ROj5pS^+ET_?wIF2u2Q>-hElKJdTX_XtmVKR0TgD7^&`Wzr2|j-JjON=&mSL zj){&Te!G7#`>xLmJw>vt2{!~C%wDs8YP)f)``9znM-r)zqG3X`d)NQQT|yq103*JN z1>;!%KAHyXhfb`JoBn2AlPDJvx3AM0NY>;|J5HCDppVezEmObxiYrDci`8zPHB}kZ zfbnu>xUFvKa%1;ysKuH(^wS7gXsW?r7GglGX``!x!xomb-)d;XFIM@}j=h-7S}a0+ z?A)lnpirmF<=vPRR^V0$JBzFu2mFC8QG&sbzCerAo6|mn6*?9X{*c2t55Y_1TM`!foIpwoA*)wSoqA~e{lHFNBxR_O`WO!;`{5a zyX3AH?*S|LVvhwV@*@%0gwj7NG`sJ|09Tj$w%m?fIZIb#z4o+NjE~wSc<+ zqXi&%ch@Z%`d_p3bQZC++9M=Uf@0Cn`t#%>Us*$q-Cdo#>;g%Dc zI669M5l*%W^8nt>u2K#49x^{0e8+H`QG*inBYNuH+u|ih78d7coN)thFhXBn4+#58 z(H7wGhJ}tDxDA|tu(1G8#tq98QWDWNH5df>Sle1sac#erPaqo>#)M=y! z1lQgBrzuGEaNjAs$c5$MnUMWq7K?H6zf20nK4^46*W8UP%D~ zuY!Q8ir-tieTq$;id8jEt=XL{RTWNxRl}Ms!_~E8j>kDQwY>@ArRgIg7jyR!>b19MUif5EZ?3^2=ufzxJJKTS5EUS4qmFx!D|*4Nzp%eU1IB!MIT zidJ8aWiP+H!Um>!ZVg|A`BpQ;kS~k{>3jises4m0=363Y_(8gT+q?dI$}hk^x$?i+ z^SI+&T;!q_m)cA|xb;kl9;q&MZfB{u>l>1yM!m|WvCLSUi@3?)7*iIL%eINQe15y@ z_s7Z*MV`HW^r))O;+^|*g1AG!!K-*Ee*USsj9u5FvW`Y{UkY}G-F>tON_;yG)#of_ z`J2b|2}o;8$a`SK>=<3do`ta7u0JpUQ#(;ptVU@Q5*OmjckyujUJ>&2-eDXR=Q-2tVR77^aQB0 z2Mjn4eZPy=|K*M<#wJ_2#8aOG;&szk^E=E!wsr3%@NIR z4IEdri#{d0E9ZXbVfxBM56pmJHy6}&oX|LBT(f0tQ6ETNp9gHKr(${O@pD8?uYI12 z@pg>}pHpy`#PObzsT>+Cz#~2M9jUpQFvny=cs~bD{p?v+_0>LX{kGrV$;`7m{zk&V zT7qEZWN6E}3E!_v{e@Bu@5aaB@2@!%oLl}J2y({X7=5k=vET+7P|-hoBK_)IBwYQZ zGOXS7r#wx?xH0 zGX4kmsLIZ? zYT-2}ft%~agmrm_+%omJRr&8v^+3v)UE)XET$M;(I}(gk@8jy$LbHO#+J+%VDm&w# zE9WYwY?l^w59cE9^u@NxrXNrRgYEAAZ!I1*t)B}8+I$WWyAK5GJ0m&OAvYL;8-B%8 zlGmH9=j~5<>YbLOr0~v7f0f7D^{+M7GC9dQGZl-SZ^FFvj4^WJ+pW4_bDAvT8FMvg zJw~gjVWz}EweP0*Q+Eq*L$j~HlQ;s8&4k~4XtU@Ur|Wf6 z$5-?@V`AAhkp$>|LW-0{_g*UpO9vcbqcDEzIibsGDPTe?wh65GRmx+6^Y|=L^?IN} zB~&*YudI zWeLam?i={y-G5LB?Z?=LW>oKsmJqL%J~=z4*HVB)x(2sa zmTWk5(kj+Bn}MrWilOMU^tBzJN4LeGY-*mM zbq|+|#yipPJF3(#LN^`1fS9)yqOrAO;|Z!;1jy;_n+)zFNHLe!`mDxH^<3_QGi1N> zhH{D|f4gf4xuM8V5e$%7l|yROz+Cwsm+uc?(DOW}6IZG0Z_gZ_1a>n*g#Meo*#A%M zXr6Ij4(&%?RO?o@=|3z{X*IbWPcY(J}pkqgM(RnYd<=2w4y z#Hu^{><^O+(Y4Z3aE!#&p3*82$UGly7U}z>PtW)ADr39b$ADK7Q02vu6u+K+rH$Lh2{j@sBFMZ{G%o+!7ec5)IF!kA-x9*w8+JAQC73J z)YDTYrjn@9(m132$_RCz}o{e89y(_NT%n$Ci2n7A@%*qi2Va78zDsOh=et(&}82lf|E`=tFFpU|8^#^*H-)j^=pdq60n0nL2&s$ANy zSdj8_>M{_@Uwf;_!uVGBD3}PYGnI}61f{-!^$Vmg1;EI?eub{u)}#`N)Vzl5OdczMuA?Yp06j5Wax&mqM!-t-sPmDMN&0Gx&A z72(9?`JV94$V$AUavFKd9R(^e{y+blqj~?uE?`{>V?hZh6GJ8$MNO$%i*035s$08q zxDJt#p_YjH3&cnrW|7x5*Xq1t=X(E(Ju3uk`BcAXfNKg0 zzMzshO#|MpLsWc}!4nnw3ytSkBzA&PG4S>Gm@sWrW4>iQrHEhh@hvl03v&hizx$-% z`~j=RA=a@3nPuZ2d({$&P#m_rHtA2dwj~@~MZo%%6xXiQOB;+t1AS~(d{QVJ%kOUk z#11kaPTDhQL?kd@O2s;(pY`2+=z^BDtx?kZW`&0&>kJQmf#1#@8N#vys;`d9)==wu z*QxAjlM{E|QipN3g-pWf?>bs|#5S{`L4EO74=u}FH;DlJJsLeO<8>~!^#RwfAb&B$ z%~q%xnnC1iF+tJSEpGNFzZjj|^l*3d-?3U8W^Bd zLY5CL2k^Gd2G4E0WQpPlGR1rwb%?_qB3Q0+oX2UnD(53%2f5vFDqAI;{P#)&(dYi_ z8_@qx-{5RO-Fs93HpZHgU%RKdZh?~WGW6N!bG~cIY@C~kTSlVd{14h5x)J{20P_=c zOyVrIRQU?VtOZORf>rU2oeZxNaYA#Z!Ee&|BY%q|E z@_tS=JG^($SGn03EBQJ|cDK}DMYAj*X0TN{GUG-I1uP;LnPN|H+{gp#_%ZxbfY9>u zwF@mWoU+@FFLKoa<4-RVa(aC21eG=obA0x_q`DUAIz4K7exDe=>y9o_{eO6*g`p@y zGDiPOV(~O9AYSuMZfIkAUSPsJb#M5Kbj^=!s_my;LDlBM7?pI@n!^$1R2-IQ5^Ugf zbfYSS8qfWoy3;%h@nYxh-kcGJ?bBMyu=U#ZWdoWnt}EiwL6p7MrT!!i%UM~OdXLeyAn}(hir$~8WuQqd)s9pRTla#qL*1ZdGQJ_`-`sB1V z0_4*@uUNp_JxeDV!XtJb=Ow7!rgiPSj|ri^2E5bx(a+7coG|h@CE8oT2GOs6 zhkz#T75my#uYN#Jpjj(jPQpMwQBG62MDc8ACVD7;>1rf7qM*{^(aKPvny{N~KBEWa zY^MF;mNR2zUDC@jlJ(G&a-9|7Cmo46D|_9@FL~?kRk^k{EkJgJ+iX{%P|W^-}Txhd+kk@J-$7ZOwvZjOYRebCIGN@H(kM3lP71#{8bWpY_H2R_2}v2Jz+zve(Vo zmNN5_+E(b5J>lshi74x6ip(>?sNyWoQ#3T)x;qV=X1H7K%h#)4xfZxxM+?15|aLJlc zpwKgg-ibVM05$z-qebwpW5AG-hBh;!5sRAMOkWn0-cCc9-v}N-Td}79xQ67nK##5f zbh>Wq_?r9KDL}C}R&MYFe}trGvR-J^_cN)r?AU~Q5m4{QKE1E(bo$CB`6pILpX*Jc z^KOf4>z*s^8@<(v=#)&xi$llulVljawC`dC@CTZ9B|@PL(bx z!}82O_M2^9(lxC7U<_B?Oi}T~+YS>{x=7bhE@k7gXI&W21>bzsPvc-8pLwK=S?25w ziI9Ny|LC^&WCZ~OJ&>$J%fDFD>tejSIB8(ov3ybA;W06G}XER)fT&*3R>#& z>Zdw7PTNo;NxKdi%y-DqhZ3J|3)&d)p&Bf+V4D~H_{$0+^Gi=Bl)?=v*3;=(Qw>0@bzP<+t-Oq7ty_yySZQYItX>>L%RvE5`Jc2{keEJY( zrd{4O0zw%B_ZA_Z0n=m#o3}|1XMdztj-~E#?_!8|{7O-Yh%5JfV-xTbS22K3Eo^_H zDb&-LfmmW-m5u8hu~W@92}jq*pPUoQH5?XJ9L8vgX0|;czE#}fk5bjUq06Vad5|wP z8&`#;2D;l0>Q@=7@}D>0^hOoH95Nb*((l34fq(7RVN>AMja`-yy0}lqE@sP*WiCC3 zUEa6$%O);EDOY~=dj#N>Rz&XytlnPTA_YC7d6ka!nBPR-+_@oStNtpwNfyFXi>PlNuUdgPQG4$Qna200~n`42a8SmfQWK+B2ToXGhm zv1nWBXx)BFHhP7rWXxs!(wN^Bv9D{4*7ijuU^||SrJc#TfvRN!aIxt1hEbZZnOmlx z4Nwe>wn^Swi`}^bKVs4LKvF5&<~5}@gKvlEO$| zxmkRS4P$%mQBZ$FeB5&!Aqe|LuvSf)vTZ5`j(&Vd85Xz`|j|yltA0*gev8Wajjzj`#Do8yB-hmEhNbN_)vZIFie3t!PH7L<<_JDn*X~ z`NAiFuX1=ptyF-G$dVKXCP58*?@9TCJVyswanVVm`V!itEdRdWUT{go`d1elUo}t% z5@XFSN!E{T-OlQApd%ii?96(-|DBX-H~(d?KH0mA(>F}@kA+i3GZ&5K!IO`I_7_|| z8@d=W#_iYm>on%SVork7KbQ;4@xg5p@8XzGPcO(NdL-U$BV;XR?tl+zdDor0Cp%?l zLbf9(jT5h%$a@YHMDxe`*?>>`LVXPxz1O8;;`?~7+xyL*;LA_Oy#5b2%j;gtX7==V zzm$GVc0eZ4Iz09syw~+%m3&77CC(J^ulhu`=Dcm#bRqYp6Y_omQ&K&?_H=_5Ej593 z_xeK_L0LQ9P7i`&yJ$RV%UneY#L87QMA#TKD9>=sq#Dk;`W$E{rt3SD@_IbHdr4a7 z+K%{+h2M%3u%HzKN?`XRc67bFU>O)U`3lq116&GE5sR*S3r^oXP1a}QFG(P{d9FeI z-lyW!XKl!8rNol32X!?@;h6W!)kqYc&c=-(5pmumX+N_wE=LxisNp&KPP8TADSe~c zs-O*W06__l!8qY24jpn_9=0>jG~;%R&Jt8uimtGoaOaW*V?$72JOeq7Ns=7UzUo+F zbmV!MCD`m3(YQl^mCL6%JH!@MO=N#UY29DSNnIrU&Q1C}srSTh7R{gsml3TaxhE#K+R9)9)dDCt^Y?U!#Op z*Cm6p6QpjZ@HzW`4lWw*_kX!WWC_?L=&L_(LcI;p6Tv((}^ab?Xc;2i}Y=2HZ z^K<wbNoCV0_!+h;?wcD^vq1ysG*5c+q;0Wf6EUwh_6#K}7MO+I7-5h};CJ^gy0XDa0$@}C+C9EY@{ zg5^4;(I38`N5v}Ea?YUZUdg|lv>oSal2%x2t+3F6bH~U_EU>ca*aU5oYXAhSF_gE; zvMk}s6`_73Ii~=(?`L&YRSopP7ee0moCys>2~rL!2@60phU@D^omRuRV*8oaCq0m$I$HN% z445u3smEQZ>Yg66o(hyD%@Fwf(#(uy+lG5=&@T0M{q(d3VgoE`?;3(wKkY@FH8p`G zO`p_T_C_o=KN4)TuKhDmv=465!+#+T#aCq~F`;|m255hDiGcn{Ohe$7&E5U|x6|>e zj|da9^%Qf28gofWk|<`Z)eN$2s9ym{`qXoLCD{H*RpqiZ3Y9!uPYj9bI?oBgk4x~X zYniU-11(kBg z8X6tXSvwDmL0a||q9~d-r_-K3c&VQrspoy(!D(G)2O^thnACySWXOL%r-ne9dn_JA zOs^i=*3U-}&KI$uRt27Xe^A78P77Bi(@#xk=2z0*kq3t*fWx;&9N)WrEO!cob|kXJ zc{Vg6eX!hpyX{ecwUrZ)BeByH!^Jeo*>gI)*4OGT&;2t>@s2O^7UaZ^%@ml099d?{ za4Br*@kR9)>7|F;Bz5O)*E8~cB5DHMihCaT>sBNA-)wvShe^)Xzbxs`~Vsa5iI3K(x0+~g8rMw=JsGVXhC{y$Li?}%< z|NSicHS*qbjF^{qjoZP9Rb%_SG<`+Xwo&?!?oID?msYpmvd4#q4MX^1YMwhDAPGaO zcUmFKbr!A=KTtqizM`Z(@OY_4*Y#M>q#$HF=m8B-{E8EsH-hM)zLF026^;W#J7U*UjN@@ps?a_(`Igu0Qw=HMM;dlIY6p+1L{9qrqHE6aPafCUIO03?*cIl zkzst-yWs&17KD6hY8+?VfrjzWxJKm$SeR>@;e?1Mn&fr{YZ?TT4%0OL>@7HFbZn;kc8N`c*hO zJA}cx|C}mvgupklMNTKy9>+4t%hKqar+}Yye)l25U(922pdzuY4OkE_t*;O1iNQHu zJxS+5oxJ?y(SLkGCrQFqThjoQFClP4AXLxZenADn+i2p>22KA9jjo`7E-~voGQlYG zw&>`JJbg;5n?styztZW5^;}q++`=B^T{WrG=H4mmjQI9~O(6eA3t*`?AmfP2L^?E( zbm1*v20#ntN;Uf#fBPT?zTd!?`p_Y9Wviq<#;{3*eK$Z5T%ZExv@ovyYZh?Y0!XyD z|3l8t3tzELTh(G`j00S@MY7sIQfC@TaZw?oi=Gy?2jy@%?q zd~Chf*^TESr25dHKQXKt6>mIw{ozu5@}&6t&q%#E{!H=TW^ugJ_5iN|H?5*S=H1nW z&513h2hxc@a$Z(FHR+_y_C4%Oyf`6viNbHb;PEqy6lMPTa^Lc|;vNIjHAh7Ef#Lt8 z3o$_PrqENrsA2G?9j$&a-SyLkSO%j1xX4`L^}$kj{wZ{;|99v8RXKm7LNZM;J@y}6KczC+Zt zP-3b77Xjuj#hb7d)Vd(8x27*XR(wlY$gS3yzC)onUG+4#Q}_B^tM z{i({eyp2io{U-#MMfC|E&%>&=TKEH#2D+`#X(0~fE|G0Zq23)J?_+`eyKSFwo(0x$ zjQf=}a4Wk}!P9;K@UfH@S{-p>Tqo>rn7_Zf1x=9tg(Y<>qtBtendf{le$bSE!<8cy z(re~9tFT^UU`AQm=zr2Mx(4fo^*C=j)gnt0$vd0VD3ue_txK}7+3iPYn@QBS14+b* zwV}CRsl>lLu>tPj?Da(~R-M#3Jvr1Nz!@qsS$;Ao%WHJOEH5$Ql76-yVF|4j!)n@^ zez3K0BlAPZ*ZZT5w57I|ZSxQ)rygk;;OopYlp*rak=FHXYp;0z>Y0!>?x3;7{~Hj; zA&%wK5(%7}{UJW@4?|<1dK%<-W(oyQ=@l5|kAGEI}1@Yk+}tcJQE` zqpsUk=jC`;^y!a>Vy!Qz6)4(E;Ji^m=_WmS)RL_(m7A8*nv(!r;YfzJ0iUDH5Gkf7 z-vgGFC8(0};N@q76GmIVS`u-vg@Df9nOLpKvFbX}P(@xi3215fzY zVWdKjd(R@oFB^2sYQi6GpWBB2A&4!t$BO|m5n93JwOtK$JN>?HyS z-&=yf?*-Q%B7hN%jNrXmH?YY z|A1jJjV=81v#;zq5Was~>plAqJCi?m?pQh|yb14O#X4P)M z_0pe@27H=pPsFnIMXX&D?eiL(4^G!4cWDk(F=lhcS9bQ|3Fn5v<}REGrgp5kmkaD7 zw_*T>ZTM2#2`$7osxs3x(3-c4o|d-7HTWtAiu{o4itMj-f$-FzLsg4LYS-@BeE7np zpX_>R#=@fK_W4(#6`qhg)zz`)7L1w1hY4lYJR533XRSyt&5Afa*H0bSpG>{xBPyeR zKY#b~@I~8Nd4Z^)$;|edkst8kVreme2B{n!u;_I;q+~wyS_?3L1^SgbO@O@vm)nE% z?7A#9?id{hog-SGsvgfXgu1DhR){Dz-5=VVrwFzRIrcYp2d^xPcpdZl9)55KZXr1Q z6@?!6bzASoc~%+d+hp4eBpUUE>_6s8#wXtGu`{kqTPH+G?x72lQ0GdRPCoFg_IW zjpaR?i@ng0pkG^u`QRcsisJI>@#CH?>7ZiQhtB=3$$yy5Oc;sTHX|c)T;XE^fSe`g z25O#OIlZ!ogf$SpsNMEAy6pUER0bWxp|pN9+>TOdvp>VrvNtb|NKpZ+wiX8yGT$tE zooCn8TX`djaaBN1lf&LKZxE{<7FTiXBIi|xb*;7&>8n_h=ctH#uoRGXcV;Fj)lKNr zhQqbLY{SDaPw)o|#M<(;$e?2AL|7Oq4vhp@1f(r>P}88xUAt#l1btn%_yOkxiEB<< z2u6%_;@U&H@fUh`w7i2G(tfZ{+|)a9-+SF-q3y>S7xS(~4TJ?xCE@o%xPpF+ zr1*aSNLrc6ggH-ZKBCtVE4TIN0^&vYdAjy5~mfa!n71+rZ-B8B+UgrkU5{&5g2(4m6%nyy>B zZ2BtHI_P8$yzT~`@;=W&c%JC}REio=Nb`ClUgyt8f3SI-uN}&WgSSP?>-7G676&Ug ziY;D->gFDKlS3dCI-$UFI}kk*MroooX7*7)Y71a|J*k7>@vSr%5NWpN(CyncD=;bZeEQI z&qRwg6!Duadk{oAl`PU{bC3bv7O0?#O04X_3VS~sXNt*rmR(6+@SA%7?e)H-96cSM z4}8D=_y7sv;UxX}t=y`}Bw+1h84gXO^z6fE$i0%jI1xE~+_1OkQDeca!K5(p3dyxK z`1Bl`5%Ufv>^(L5&{-Pj8zL;`1ERtTRf)KwdwkxoLAR`y9Xgdyn6r(nlo4-P-cZH& zSVCw6;-7cDKxH55Z(jegkrnU+ay@MVZNl7@FAXg%g~0*$fDB!zu|2S9xofFwOW@<& ztB(8234I3GkDO1*P1B;PKQ!_<+P3_wTEECdM{j?9PR(+2bA$U9BmsLrHZ`RWKZ{|_ zXZ!7DG&kfO4nzk02W0ywA@%*>M5x4J z$A~icC$Q9Nkd8P9=4yO9b4Lun7olw2X6AFtpdU*HKe5GYTCg(@v5d{2@fb#K*w$^n z!lM&btrX1XDAwrKHywN#-h3X`^uM?|%b+-$CS2oAa1Rn-aY=A@m*5^GFN?doySuwA zu8X@Q!9BPW+#$H`*?d)}PSyFr--oK%nV#6pvw|Xg~cLAUAdhJ z+Ktw*SV7S}A9t!r&cI=3)Mn|$^uriO5cqByX}S05CoQ z6%p=pr@bg-`$DG}F}v3)U5C%m3e^0;R0uU~fx*w`^NRJjh|( zTUG`@c(FK9g6NA-*}Sje6oij|U^SC6QBu1Ed|%FXxd#Qbv^t6dGFSi;xiTd-i7SJ@ z?m5CXOtXY^2k-l3wj;NRgRN`ipPsy!Vt+c!gzavi%HPv9FY)wiB}`KPMczI?zesy1 z4`90K(`BK5zu)fV_H?}KhYLc~uKc%{3X^2HzJ_3!9&+Peh+&+N1Fu^$hLJt^9k(rHaaU zrgHfBo@uLb#>D33W!fRS^ut2LJF9G7Q$ec`LoLhfGqYj~&3I6Xo{?5@kG-guOIfb3 z)y#*YKIIP_CFkRV9Q*C$Aam8U`*bO-EK<>f5Twq*yg4qvXw4dkhSkf_I!x?+o4i=V z&JHU8CqZsMJwe{-PPKNnIj7ZktUOFH35f~D4MrHM6RC6gK$EZ|Z zasV+`8><3a9`%rklYVjYQ(FG#q#lZs9^j#x@8QQ9l|cD^rn`byB)&M0p8&?IkU*Wb#(Lh<|#0ex<2qQ1EUtcZlVhpgCvvu^%q2uQkmgu1N_ zT4h@gt!#s9=UrKv3tE=isbTpH++@MHEc0A7vNNAr3Uj2h5SQmXar{u&V=71BV+6=n z>KDrz@H6nO1Jrad{^W}av6=FQm5~8ubQU=c@unop{@Wyq+3Q#{&iLWq*fz&G8qU1H zMlbs}=5HwtP)eb&NBr<@?=H)E4ir&?`U7jI0hbkq7&=qy$9s;VnPHfDBZ{ToN$;dL ztDhA(H35T+LrxXFo)3`NBxMXzAwCkN8% zPy_pRDhD31XllXo?qp-0x^TrD(UWNpaEsKRc_QWT!dH^ecY)z0AKaCyO(3slR&~CT zef2T;3j!euOM^2DbV1WhhqqaR5KFz(a=IO-a}<=J)~{ zWpeNzU}A(x)WB7QuE}o`Gvpj(jBlAvpaQY5|bLRY}epf_HK?P z7L{s}o6aU!CYmXi2a+*VRm7e z#{@v=kq546?UD^HP6g z4EuH>Bgu+WS;Km>f4h=V!JS%G1#2ea7ri?gipw277wUp@d6Aa;5ihLw_|=NTy$Sl^ zg&Sk7rC*~j-a`^z7j;Yfw>I&&mF~dBO280KvoLJYZ7<|cIZ`aOJHGAP7+m0NejNp- zKrOG6E~y)3pql2lLX4P$B|63PA<>ir5}i?RWWVKlTkQ4Nk+YW}x#Dt38S<-E{8Y>( zi+DEJEJb~xBqsz6^;PloWOc0I(s^rlx0xk@o;Nfb)F9Y2d8fv z5Gp2ELa3B0?z+V*wt5OqHt~Cka0Z{$y#B%>S;MhQ7?~#&#i_{ zSU6=ZwdZG(|0Me(d_oLkyD}09Hle|WB}f_Jm_ok$ZypuAz2!L7!(l#$vH~6TJ$ZEE zb5i}Tz?a=5lFQD%1&LR8=qfHdK)(tSi>ei*Q=M()qK0lq`hxB+8eiM@3bjPrx6!H> z-~!ctTF5vEedF15%KfhN(`VtBUa`*Y#{vMnT?q}5A(RT^7E8<~sIBj2K`Rfja}JP^ zN_K^>*9;(g8gq-Ll+&_2!{b#BOGn?MKP; z6S9N=s&T@WvFkpOh5+IIZF@L$1VXtcF&LQ;R2*FsfL@`Um0W)3la^s%+w0~~c8>|C z`eToN&X3@Up)Iwku=_opI@uZ6PVyL`7-0iCKQz^`Khr~vRfSpjPiuM}<3~|H%*L(- z>q-UDzBbY6ib>b3{^z_!S&$qO@K?B!{99#oh-n9tNx26uYNLKV%M)J9I2sya| zaW&ssH7oK1Uf7hTc?d4Y&q)PhV3r_}aH-Heobl;1kMEQPxb9uV0)f4CWt|gi&!Y68yD$+s2Ynh1I zMpka;R{={awqKPxZau80=% zm%vru(Rx)00I@+Q;;5-wH*mn;(;IG=abQR5BaoOpnsdnBuW)(Lz$UW|LWD!VRY6BE zX$}xs+OC71)p>uB`-fvR+6O*wLB?7J9F9Do6l*(Bmo-KbO=-iZIPmKUq@u48{9s7F zfomTxFRfe|O$Dm}Qw)Q{pkr@9?BBN=EgO9jle1rRT9EPP-;h(qWiXsz zW1yvAaC!GRJBFj3=XA zCQDSE1Mo4GUgwlJB&OCIeWJ5T-1#pv$a@zZWM5*cH9&ahwurV!+83s%6=kkKu>A{D zP}ZOV2wUzxKjYo>!uQ-!Nx)-kF#-#X3}r`Y{FnyoflIS(Kb$yr%d+IF3{&aJFe zy8OBQt&)-QRbZ5IX(xh`4O+KBErr*8!GxBsE`y7%OA+Cv%JO_B`T}2Yev{~AwJhYm zm^N9Sgrn1lXVX7-vp{jFwR!yNB|`33LmsH<37(|&@W<9lYoiw=9Wectw4Sy{SiF~) zItW_=sIT}I9brqGMy8a0mGK*7^=wRA-!37OcU6DsJ6S_7M^}3OBLZ{`>Qi{iJU1J8 z?@PNUNf=EgdS}^TH%g60^^yBN`Ps#i;}bc$Xi{!BT$ZB|q$(%R?a*YDm4X^m@J$O> zIt3qLFq2BqKF!6hn*MiNlYv2nuKR~m>;Yx(kk$A6Or!E zR;C5;KmOL@R;6hhsnpJ_B&K}elJFucoOuhTRIHxsCaU+q*czYziX$-#W44D{! z?a_}#UykUYGr5O0MfxxD80%5Nl=zuFZFjy+!Lj^-2@fuYTk#&FwbFGEBTY-r76B8h zx}S&d&h&B>TeoZTY@tY%#t6+!1<7%#Ib`Ic5>(TyS5n|-vMv2J6AI>MiP@*0}dxmFypTWS@x8mB08#jWKny8njxz8%ByA9TMx-@1om zkWiD^w-*UPx{IPXu%Pne)(H2~HyVq4ud;Xd4YwtEH@7=9czlQ`FLul?e9w!{(>mwf zINmX+r(GQJQ0{dHz2%Qz!W143d~8!?mcrem0=0~c>OwaKC8AGwk~}@*F*e>dA(WhK zZR{{j*Q4WR6IhhV;Muij2*vv!#H_m|c;NhXo7^N}ggmr52OhX-fPBy5!JG0PzU4M` zN87++o%);o1wpyD3(=HM$luDkT6=kw4_;*zG|(CK z1m`ukl^8zOH@N>~>Z0S?2>zR-&V9`xpK1&8tHv29k@;+mi zW0Oh9`5X%u!&+KfnJV-N$PV9zMc;QqX0@E+dIjk5&+_vr7^_**%fq%Y;dR0}z*?2!wvL#)Y1$LT?W1!YT*CsRtOgBE)tD*XedSB07mtMR(SPN_W=Jo`bdIW5nP>JeY}g zl&TIE>bjS?<~G18MM}vFUqfqEzNzEpzfwOITIrKcg!aQRkHWDudl=hM{>ED#7}mS)y>b91x*FA(%0l++7d)nVTMy=?Rd=VcBKVcPI3CHYYzvW|tPFGd1n~fg=G3uxS%n z4V)EKP7kgcsQwu1|9pz7-t?;of=B$e$O~cpU<=t}%<_AC2fx>s)vJG2upwe3Wz)i& zN`)oMtoal;v-kn8MxrB~3S>6dkPdV8&2h}B1^`qUtw_mgj=s#ca)|cqX)H3&X~9U0 z@#eJC)va!4gXH9795(qp`rHh8jcyrYh7M$u~be)NxK{zJD#HCS(&RU4m zFHeq1hR$t5O^-}v9Y~wA1y|PlZGc|w*wIFlv$B;f;?0rkNILo^@MEtV1q}3Uwa~IP z-Ym5T`C61%|C>o(G<^HcV>+*={fzxU_z$YtboiSA?>7a{4zFH=p{U-SWo2|7N5wI~ zKR=_gwE!;)t(dAe+aXvdBB~)cb>;* z03D`J0ei@Uh;e7m z;lFPrr?*`up2#CJFi<+(8iPz{%fYw%eey=~Y0bR>efU_U?4|*KAEEP52+p})Hl30U zgp`n!p2IX_SB>G*Tir7;7_HCk(TUbLQ!%Wqv>F5Sn}&YgUZ%Bx{2RE0e;XA^=+&47 z%ANyG?tUTV!s)9WBR+ZyNX>Q9mQElu&y~AfDt{MFe_OVVLS0d9yOmm+FsFHaI3usO zvOB@CIPV$D#NRp=M?gmYrx~gLPc!;&Xqz?&Q7JU5b21tH-^%6fMrnJg9Fd84RmXqW zQstFxu#x)LDAk&gg$Tkcy4$dgXF6&I#ph(pj$9SO(rOtu`r>F6Ivz$(nM&(U-L`!N zPU=wi-9?c+s)`a;Q7LjA5k-O40QbO2tf6{K!AiypinU4@^ik= zMN)^$VO1QedanDb6_fd|8?&#kd-S5S&vTGlAsnUuTm~2lm-2K_to@+mtN?H8y0hZb zY=S>+*BLk_*Yi)5{Yq(*mB{ zOu?u6j9jQhZDe}9I;-MOE1aiT>bs0znfEyEz-<&7Yz{f6B56LX2QC-&K?Qxj>L5sh|O%gul1qF=1GJY@#9q2 z9qr21p9DZ#gXVuXTN%^rTN0#YMhzc{p>v@H2>ps%a>$GYep9{_%d%-UmdFR_(sdvr zrE-h7h0S@!Agd(Sftt)lT>@0GM_bQYa)6uUqKVfQy~Sd8rvVf+*R5gt_4-ZwIN;kf zGT=2{#u%LrYhrK}5@IQ3L0^8X=&6<{=QA|T8}lw-2MxoQ5-GjxLohCMfVcd=d6Hkj zMe0pER_dQkj17rc3N@01o&&vEzoimx5znQYwr0>DA{K(}9a;3g>RfMJdYqfBLa%v- zo_u_7RtX;})t||>s+ws&KHh$I2qi(->4V9>m{nlLHJbU#rPAhp`FiqTr8ywBTL5210e&T{MBrGphv6MbL8}4u3eD8>D4=#JtOn z!Qhg+aa#GV0BW9WxaWKfc)gxmTueV$?z>;L$*u*Pqz1^29Buks5@_nIV9RHJF%7@? z;XXuSF#<(EPeV}rWx0?YfAo5+J4IAg!|9$QEw6a)#%amXuj!6##((5j7ypgre+56O zD)TYk2h@#BslNri6* z0nr-)FJ9#NsQHX0C>$0Z>FDM^8f=&&S{r4gv^Y{zsl<`5$%qh@>6AB4tIn*OXg^hd z^KUS~R%j_99>fTfib+q&@J2dQt)9C zp`^eFT!gWFjZebGj~HoT2%Y<3&wBR|Qjj)21J9-yG|8ZtZ0zV_`@i|oE* zg!0GmVM21JT`#l{DH+XYdwM=FHM_;SxJfv*H>4`a6;+U-2#A@t^I_p4K+K^@=uvwR zKVz6BPf7lsbF_tLh!Zv8rHEu35Ik>xsLPboKO%Pi;RDm~di^^+M*d~)&kEu9l)J$W(8?UZEfWqeyZ zMQS7VX?*nI#SA$7EcW@V)i?*#Ey6&WEy6{@1A>6Eca2NI)mm3Wp6b={f|Z1TYMTm8 zG25nQ)nQh?1K-)!udH8+2;wkDs&HLR<>0M(d|sACp-E-O1FB#-D#VXy4RILhUtmA@ zSE$--a-zyKr|SoXJq)>AF8p#`l59)L9?-H1mdt*Ob%m-tCc$wiUxKlvYHB^n>$l@HmnsjHTEbAOsCD#g>JNZmqSr zF|h-_5Jm`wg)Q?OeHXW({jLpbd@910k<4CDyQ%Q{!pM!b=s20+lTW;)tWQz&iTcXv z&%BraD&D!97GljmpbRiut`f!?xv!WhEJ(vH*{jx|3P9BlS;)DluuA+WLdm~vI8-WDX)rny)i%i-EuK|3`HX0bPDySTwfK2(?K!f?t8&Iwt8us zw{uU@jD2?hBOFMF5OvZjDo)@6$(TeexxW9!v3vH3<8OPwSRlE2pyzB!AJ5898$#yu zd(j{@pLjL;P4oVewzqoj5>=PeR?#nZM?jz5BAG15shoc%@o`*>b$ZHq%$6OEn_%u9 zI)~Zj&3ZsyVW7(!boW3IplyxoI~*6Whs{08trHA|{+o96ibhs(82Qev^OyG;qoWY} zH;zN$-V|EACv|}nT9Ss@FQm({&2yBgcc3{e*VQ>J|0aC>;Jl>!53CO(ws=DxVQxr) zqw8Q0HA1-Msf5V~Y=ypApoA+cIJ&)+7STOn5?mbA-x+CwbB0-~VkdpZAbYC8+7!`J zXoiFK7tsn%0V;!e9Y?y3sU4o}qC?);Z$2;6H;9=8wTwe80K=|)ozJV>>u|vOk=U>N z{uU%cRa2C9EbE}cAOX=X)f9fvdv$k}lmZi`*#w#Z)j{H-B7RYXW9Og3)-XL8_BmX{ zI>_^+BzQ;L6nI)mSGAR~HU?7?ThJ-&osyjO^ZSbL&1Bl2uA3<&%c8N)VG19Hx0GiM zhAfyEsAwSrA;*UA!8Hk@F>8YYH&!zC(k7{IBkdA606d@fr$gqe^O(t2h}ZUNxmm`K z*7Pqqv7cKE(tec@NLmG%Pdl-p0)@QB$MrQHdrUo!Vs@UFzUi6Z7kbaD$&L<&p{HrT z739+sLF!DnaHA|`-s`$9=1x~xljJOU`dV9Cr_Y{$b-4hCn2pCGQ6+&t?1rA3rL7-O z9FrI$_;FrNzD4=oG-Isn8>@31txbkVb!!X&{jFMTeV=j(HeEQxYr%{(a_}W~F~A{y zNwcG%3>#(8Mtbk9PFBD}g4rBphP=PtMgT&Ip)x1p{`yV?MDOI`u_GWJLJ(_C#&uWC z3F$7kb=*PLZ&DbV3;r?9wxKz;xF#dx4+(FU^r0T7?eh)vCHq{pbq6pW8$_N;Z%v>` z`|Bh)>e+8Q)uxm3eo)y%OJS3gEq|yuxeO1YnFl1@XWnDB0LX!qu+A-*jE-Zvs^2f8 z9*+F&Ys;elaF<*dm1fCvoLBTTF=kG1nk4hE_{y&g8;=Y4l(sOI#*!N(!(p2TEDDLy z_or`Fhys2@FDGwc8x*s~D*ixR7jgQnC=lPPjda;WB+~9^66E&t-xiXkaCOY79)@ey zft90hAHqkBvX#oIEcss4lJ%7!RTnq;&m481d3Yoz&gq}zL9Qg!IPEr%Y$InQ2+!Io z{P4iyI+aQDe*POhXY{#|-<{UEpn{*Vo?g~j`)<4yHAiztVFB$*%iWT(@tTpUgRUm< zd41Law~E#E8@TaVsIybE|A46PQCj=6g0}r^v9ve2WzMZMVzUI^c?>4^=<6U{#~V1p ztQ@{AvB(se`Hf8A<2gyDMr%58*oG|RIv9h3U(8*UV*wA$KJ;ccz%YPh+38MmGwIM| zG5uaYonqR{OuYYCBpJa(1 zcQkGvkIr?RZE>6gwt*T}BZK^MYOk}Zfjc3GW8U-|bzBP*anGY8HA^6KMah!s(&J=q zmMTj6Q^;Rwh$^@k<;m7_R`z*Kwy!2d+$WzATAHXp>bOg=@|knq0CW|1{#Q+CmAMTO zv2T^%B^zL6s(D3q!znz&-rq!9+&_i2oy7%!z)hp2zTVeJ>O!8~sTg@j8h-p(+(osQ zqEuvtuZ{6JwKgjsqbA?lHg^M%OKuR*8Vxv4TGOrkPkEp>_%+8)cN@rdzK!TdHe}+{ z99|YIaVOUAl#eu4c;&n~7mZs> z*+RCW0e%WJ@0w*N=?Pn+d}}j$nBi0!Z!ke;!PYGd(1+fMZ#NxC9t*OB?bqEeT#9bX z><^0=m4=$k)=5pgFrz36p>9cKR_&)4*jDCS^Ti)^^zi~ip4ALrwVXv4RztQbesnx7 zVU2uvabUyq_|}(jA>yXTkQVu?(9&l?O9vD;yl7QyVl7T1xV$P7YR9uWq8f+8SKOQ0 zCrMx$U@f60Z6?V`KuSNz`%3l#L+!r&9hrayPRzbx013?=CT)g|();KWfxw>!TT}5; zq{8SErWMV3!_maKb z;jwi(`y0LMFs}2Pz1Krz%pZ}sON8pJewQ7K%(w(4uV z!YZ4r2QYWN2mo!adSbFv2Lnz88S+MIL3-G}NIK-FlrZ|p*^IUBX(H5fL!K>D znib2gM$*K7y~7++Z|-ykF~ipb0B+u!1&QBsMzS%-;~Ex!R$@Km$Jy3oo}0o- zi=HaJ!Re+(Ud}swy}Np;kfCnR2Oll zpR^{#)K!7q%O(4e_NDx{#{6+awh~&i2{?!FX}T*W{@(9gu%SPAN^Jd^Qj4ikvrg zN&IQ6;`OPJixhlLF9QY13yJVaO*@fbe!e*Gk>BHZO**Sy{TzcNPm zUl|kU$2HKuD1-ib6a13)+`NP;C@*c-(aaqVD&+uJOba){lrVf>>ugvqPCONWKP$%^ z&XDGcKCh;to4ignQ1`KZfQQr*$Qkv!yXG`9^&HM9GpZ4d!yOa>!i#~{dkN~P`AQP%sY5vW;hRVVs<<`sQ zLvx-Y-$(5hEgtC@7$d zb}L1&0q}AMpW7OgWPBl)tDB*i`fRnz3bJ;U!Q!tMa6=;#I{14@h~&=O`^m8$3gdzv zqy2^fEZhbk%Z6FnAv$xf2X@KEUsMAeybixkvcP>6B3VY6lPxEJJhEKoRL1YiqTHUpXZ3Jg>v zj#ag1g8U-24fuTwE=R6~om_;dvC)7z$I?vB)7&Z}^C=!lIC!Ls=6KJh^yo;$Ap3cy zYB-+J&g4p37gQ+ecQk-ZmPB}l$^dG`{z99o`|<;6xgF|}1It6&l5uv)UXA<|x-^Cx ze|mg$=skj6v3qcY@t%g-5z*`nPN*%q&ANN2aH^K}^~%z0U$y}Hp!D z`p^wTF8+s3MJH+Yux zj>CPByF2y%gW5CoPrQcrZ;s%q;dNwfHL*SdHdbskMVH?js|te3X?x^HU3s{aCKF6QVx-n5n~usv7x1-Ngc&_wP>e1&xlXsIbuz-F zdxf>(al;01dmP5`yp07abZ)+w@8qN9_xfzFl%70!p9j#@)6Cu+M4VY6xFaSoLMQ5H zoYyyCDt2L7WDS!>v=TrHG~mduxIG})BO#oglheOS^Lr#GFvKr7AM&X7v(jDS$+)mt zODEYkZW8(W^85F5AM)F+PjUg|9I+tS3;&;=k!|%>+8=BxFzwIJxJr@$7v8!2pL@pj@c%rx; z?*aBF&buvf+<-72N>je7?`v9r_1N5j9d*G~I@T>Z5)Rn;QQzA1U#2 zjzu<|FNR1m{T9&PwHTtmKVHmX9i<_m2OM+gd&L1oC9Io_=zF{%P*gm8gPIBYy!Q)V zOu%X$hIj2}P~lWv&lFCV?-tmsdd4%z1;90UO`ZsF_Q-N{{?84AxqZmG8D@TI28aL`?hZkXM<(* z5MvH!P$-3)}wnQ2bSwFh)SBrky_~SE&vD^cC(9@W(a)K9=Hd6QjCl@uj{> z%|wJEIfEN?>g(ZTPI+_(w8vH}h%7X2*(l)6t(LP?B=wDV)6=vTS?ac;&z8^ZmZazO zWO#3+>0WIC`dq(Ssgy}5W+RT2q$3~1Z8U`G@r&c~DmT^$Vtp zH54jgZ9Wa?7#Hy-&GeSAuiuo#yY&5bH^!rs{tQLXq1<%xKW;i1gCv)(0fw;srE0k4 z>p^?Whxv*xvnPvXkpfZL-9cgbXY_YQS#Df`O4Sl0PmWw`>EWPaI#4VMigeyg?df;p z$=LkH3=HB$QI3*4Hy`ok{jTC zPl?$cPA#szaw(#~3bGpK&rN3+7Xs{6<)!?C3M4Vu&{Xec)+h!`=_ms?ls_nk(#nn{ zbxHxhPw(kUTfUUK8r#vQV`C3 z))s+q-X<3-{&wAyvyP-#*!yXTUqaR9lPwid-_rk|l+Ge-e|S()r~pvYfAdX*Lnu`huTJjW;$Ur7vq1hB3nKn#t5sOxBEOI= z);aJ)JUkIZ$DSF1{?CA1m->&-H$7Y-LAabZF;58C0Q4Zq2zXi5KM{SRRhLK~zj>wU z2Of_5e2{~Qyr)Z6*E2Zy{Q%3%dLxp2RBkacBYcten(VM80ZiMJbNuUI7bK;klfujUZmLlnw6e2$BuD$aTS21v>EUgM z5rli`*iV>zB>#-|cWc#gAn1QbKItFMMf#*0EM8knDCSsH%SbzH?A#y_T}Ld%gqCML zKIn&A3sqdjtC2s$62YkLU9no;8T9b=ISIkxDZAwCj~Wf=*WAahUJ@ey5{uEAdadV}1TVn%7mD2b(e*5)?b zLNy0kk zAMhHj-=j+v1Mm2tr80tJp`4ceJYT#ue1O8%m&|gtp66icX!`g#0A5Iq^489k=h#Of zUeRZUqJ)2C&6e8-z^6L~^`+Iw<$4+{R|B`x`yoW4DZ2rFh3bssRnfn#rGv4-89g(UZ;AMU#rsq+K#=eXc_UN?<}u?NCHC0{qaRv1ORKZ3ndVZJT4p6@pc=5|y@(Y(BZETJYb`A&QaLJAPB6i2 zgf87uA~Fs}Nr3M54it$5+~jDtXtZZt`+IBlgX2d{77{397!A z_NN|V2~XFy3|{-(?K}W?YGnA||AfGy-*cj0`R({LydieffCuu?Fzx=Cp#4wxa#S%Nku&_>L~apSuF%hMxlL*;XrQyQLZp>jYabKjQPW0 zogg@&EbG1&iS85aD}v}zu3rruM!Kg7$44{B!O!-5?Q=|R{fZAgto-~Pb1Soe68aAr z(1d(mp7tgPC4GZS@#3!5@2GxyOk8wR11SNmqOBDrbpWIdLNr&&p&h*dK<`u;2i7AkaY4`sAyFw} z`G^Uey4nUEJX$~eEi5f-rc@NsYHihufU841je){_>a)t)*Qy2t!UP=YIYKtWW=HvY zmGjt4(@LC4TLUD=MX}mX$nq-dC^R@yji&0Pm&px6ZsX(6m^r=^_tkTy10C>CO7+MT zn#nXLP>MM|K^b-^`Yhl3RHf!0*e_>Px3!3vrh%_^j`S;DAp0bUAUVfE+sxWtfI3fI znO#k#m~xezyJ$W|fBSn7%lTOpn+7F9oX16Z%wAa6R$>y_ha|?~^W{E_uK3N#;uYn8 zNdG8~#RY3KrodT-Pjw>lR8e)ZRnwmK*~!3ZeoDM!#7CF+_tT2~=PkRw`zxQnPisy4 z6-^JyCASu*{NoPjd-P1!}8y!td79jBFGnIt4n@+%)tJsma?joi5&dxNs*h*se4%O8VuJKITM3Ny{%`+>+R8 z(rDfJZF8oq6UtyGMaElZsIxO8YsxuQR>q0P24fK08LnrG{fzhCMKx9<_>QWH+p*a- z?MH2=D5-Ern|&q&(z&ihE;k+}q*}Wk*)mFHeOQ-ULu56ap*A?{ZCunS%8ij6F>gWv za@%grW?fGI?*IAEO*k3ts)3gM2>U#3m;4nMZ7q!)>g3q& zPemjaavP;LrRU>hW_$ki^%vifmkgo^E#I%4tqR;CZl#FEGHH6#a|iX|rCg*A;ahgy zn_TtbG6Ut|GAGg3+=Lt4vhy0-Lo=jb^Na3v53uy)*RZ%|b2J_0dn&Y+5o_E-1qPC{ zC!7CR)hJfM80)3-P=M=i73zX6PJ^`ThI>1nI+&_}yjqXv7g~*_U3I=n;qfH21{eHl z$HT3?Zh&lVKCORjB(!Y+ngJpSg_@we4Z}@uzIRS!UB~6RFW{^)Pa>kMgV@GCfeRQB zB{kUbX2UiYuPo6s4l;vv*9tU)Y;7W3e<|4|fX*bATDXi5s3`iJI#W}LY&3n>{CE}w z)Vp@1D*D4DhX+>*DF{q#j|chKZG*hOZ%rt36xRzq*2S*brpD&;DXCiJ`%ZjN7pzct zQCzj{Wa6qW$vllQ#Q7OWy2C)H-`lISW-)ejMgCzpgGn zdh+hl2US@6k+d&dYB$0L|E{-1|M|msd@jJ4N_ZAAIYo!XO!6UhRe6e|M=HxE*x5cx zbjy~~CX)}yvcj?8=rfwk_JJ|dRr)?tgEdA%T{k#hyrYhQ@T0^efB{Vxlt%nJr)3mL zA7vGzUFJ4Ic%eUMiVfljq_9J$ux+kGSkiJ%;vy{M5j8PnSX z&}@y5&-j1fs?9%ewe~Hf`hgR@+i@x9?*g*Reg)?P!RX|y`JTIJk{M1tspo`Af6h>e= zj`OQNw)FiH^qIdNa&j_2N?eHZcu=sfa~g3fc8cWVUAlUEDt(r&?0abP`f+}>PTFV0 z)Fk>YlYP)O(yBpk<^E>@`JI*QvY|J26WGp^?7@l7m!*0)!e=5Fs^F;JlHUxLD?b0? zwR6!1y-WemEXbJkDFY=Zz#CznxjwwmMB0lQSaG!QWO=RapZ9chN%J<#TW6xKL!G4! z?W&w~42Dc%Ur7Uh4Xyw7O2=?q2(y=6=;y!WRSviJCnb8{b< z-PpA!48b6;_z*kZsVHkJSm97%GutT@R{9rbOx^}y=veZzh$-ICsNccCzC1PR8wbH#$0*0`1-ha9L!Bns0n^%gL{X4fC{Y#mM;^I%V;ahv2yCU)Y+#a2YZgIM}}P z=Hi9|MU_tl4b(E!9S?=IX0nwO04_|tI!iuR{I$3_kQ@YwBRpEf?mUUMLFk`-t1vV?ie_E$)^;KhJ;OxCmDx3h5oV|_}M6z=zic6oFne1=~3>uc|75sY`_$A|H{}b z(vj_Q7&>7FewCy&IqOt_lU351hy-e+%dhx|IHO`cne!HbFpMwn-$M1?L|{_%C9{8$dDhIsWk1#I?Z zZB6<=7eFjHKTKg3@-9yYigbN3s*^ux>h4s^CTcnHqQ7Y96#!1)pm*{i1!0SckbJIH ziFdQhNQE2 z>R0YZ#32D$w7;)ZC;=Anj^FRcC#Pp`vI-+nYg}czZiRom3p@}zP`qUE5BYW7#O$)7 zl=qTFbL%l9UgyWXc5F{&>>o&tnRoyGR&FmBch&$o;IIVdK}JlJuP)k)&4&i)Kc^K# zT>N09Z%=bdUEbs7);ct|4mUk@lY7W{Ruj#b_^`G{uby2($`7XqZnnLsDcU*26bI7x zt_vriJ^EK15G0s!0Q*G9XGqRb+PW_ss#h{l^wJk?`Am_GA8qjbA?nMDN8A_a1kXC! zN|S=iLe#)a{*<#Q1@*`9@*xz>fkvtm1b+^-yH`As!vsp#kPaNG`SDKN^ot{=_C%m%=7|)*n!(9M~ zBm$~KB^6qSjt#PhJ}7i7j+m7~uXR}`o>_|6rHni;W2*b(;brh zl>Gybe(YfrQ!y_mz5hegH^x==zF%kCwr$sh$+nw(vTYlaZJw-ClWkiQrY445cNXOE$>p& zR6UTFjF@H%6LU(!I|zM@A%c>}O%)Xm% z9SqxHvM>f^b%EA2x+^kl6q2(pl}#20V@~i*S~;h%fqJXt5z3T}jXCoflXvw-~BX0PZoQZmdhb%Rgt!+lwPy|jE zR`pqGVFOw$&nE+0T_Y~8SvQNu-}Z8mt+P{9Ln}eK`@Y{tRuW6}i<9)qE7nFLLS=-c|Pa^#hh$xU#O~O~%xm(CyN0?tZ z29lj6R8=LRjiUZI6sBg9-{p!&gqZ|hyVL9vrscnCFfy>*iMtivdC=p&;$`62dtsUW zl*(t}|K^5_R8ia{N7Ja6n#yiWYT2n+QC+9x<`z%0J1U|mXY1Md`zWu@T1BPL!;_AN zzh5m?e$0Sol4dVil97cqWzI(OCVsLlOF_k{B*L&u`X;`-t50S=CnmbWYVI5>nJv8~ z*Nzdmr+~yfekNQ6*;8)wuv^uey82bIc)aZcO6hqoP|Hm*0ZoF=cwNOyobF|Njjhey zEK&SwATx=hUl0A?d)GaXh~O-)%E|;1#1X`0FDnQyu}ZW?)uq z6&SFG6cEclL=uxwAW}H!Cs3$2t8OY!-Y%cB(i%vJGNw4x%ic3|Z-Ui3#qR4?iZ>JL zgkTgUb5q({-gJN|ZzUQAaa8HX0~{(H)+HjcDO=hh-ncnJ0}kGeLUJ{`r;B)(BWlmO z03%YDe5`yKEnMU1h;!%$L3|!ge^ROkJcLb7Gx`Q}4yYfSED(>$&|}wYz=NKC`~OZr-vpM-ARKQE z0%<-uv2$Dy;@V3offPgkQ@*ukicDhkXVi)S;sDb3b?!&{pDvaf2wbKTRZ870Gr13y zN}_EK?>o8e)bCm-4BU^WpRRzvp#JTUCBkq+Jc?Kp7FE!32Z6f?vAvF-a~;9FrV5X< z)Awg<3oXV|O>wy(ZzicBIQqN%`dvZMh0uBd_E3y4?fh`>gl3|q%)7>lD_i%kNJtoC zO!vT>8SD$AUyP05fHkrdL86Nm;`xH7dH!(?8DH2XsG zyCMX?RL%alFNi;P$W{pAC;c9D^%4ix1>9-NAWGh^lYkk)V~X3MKJ0Y)fxc>6IZoS_ z`wHu%Yq8r>{0uB34v4hGPNd~%w;4D4rP8b*h5yOB-sB z>9XKp3BC>M1P5-<)ZoTJ^8cj0r@^1SV4DyB%0bfm64>2E ziOVa?si{(k`yYJz(J*@wDw5uVn;{-RW}slyp{8f3sKI!Il-0}nroWW{j|Bjl2jVwq zzVKv**#^ZMxEvX74XMLNpJIXC+Z&X*96UFxUa@SO*svZ1A7a|t?4=YE`e}#)B!1Xp z-sd?`!pp+1f|P(=Uol;+G=SaA<=}sbr5*=C@Usc5g+Q`KLM#c=O-FE}HJBIbg$%#B zHwvU%qFmnI7Q7O1NoBI_R;X~Pbh8hvLW;-QTF)>2X*(KDZTjr0t|qkX)GbvCKYA8g zLy#YnJ;Jc&b&h8{n2s?8Z@Gg>vOE?>Zhw=^pc}?tu8&x$6;E<;N8`5rCYUOQs*FR) zP}?{th1Nr>2r46Bh2=x4W9dXzVP@HR?{z#fZz#;Qv8uPqlg%J7RVQclfSsP>eNI1 zN<1*DF_PnLwOXODH`b8ZKE-`T6%sS$P>2Y1_E=r7c~Xdq;wm;a+7WJ`$}eEG9gN9i z`cCk&+`)anLyaJT5$o@5|KO>@D_fBO&^D=SM`n+&gr(HEo8>1$;B5Q?gie6WQYlXJ zH)lNvY^Y|GuX@xd%f(DTB32DSc^KKz{lZ3k#i7EtVOK{^qg+ojSoA;0v;PPAVBgfi zz&cDkpBEtE&9A%p-)*(YJjL_pu(@tMq9^cH;(6*{O-rc@Gi`@rfBBqR>A=Vb8)E63 z&fQtZltNnoG$F`h;!f~KTYBr@CfsDzZs z2b*@_y4sjSWzsE_q$>}E7#@w4HF(98*tunD$wiEpefwaCCcwxa zo=M!*4#eY5cD{7cC^QvYj$|j1^PBAQcA+qAx)j`IC$lxpr_XUD^h77H0Nh_PnGR!| z1FVWnieP0=!nj-dmRa5-z~EGo7~mp+<^L7ykA~(FY8GxG5~tb@kqKPe7Ejuvmhf(y zV0`5kPH`$SNBDQJ>H0RaCeODouAEoU&9|JUGfql9y;(9pJllm$LcuJvwg-=`u!>#_ zkpY`+L~MB5BMASp1(c-fb`=%X}V4D=LNO&A}wjbOd*2zwlxDR2T(HyzwdTi5wDPL^Bm5%%v*x9}98hQ2`t!mJs^0l4=VAgp^a z!7e{!;UNWM~pI}f**%+$D2F=qZqx)j9!hC5*G1J4Ou6#2HbTS0qdyMf0z?aL;mL?W~hRtmgL zn0YU=kKyLev#M4Rt@XYzjGljn|F~|=6IlIo(w+q6=zI{Xk{{Jzbv~8Ce^RZ-r?Qo0 zPQ9mVR2nhk136;;H)GEIufw>cM3~Re6f)6Y^z!vX`1#_^gAz~z%9BYoGzb6ggg~ax zQ<82zw9KASYJ`j-BN(7Or!+i#Z7*dJZ+~~x;Va_Qr{5Ox5cukp$fy#UCowd+f?_bV z@N)65RUJl|eDwzuOkTwZT#drkRtZ|CXSItpq<%wzQm;k_6k#5aMw7q*@3v)x5mv4u z+UvWg+-1Cb!tF4~7@Soik;f8;t7vDdG%r`F4nrD8W&v+1_0r1Qr9hbIWiPYtnJ?Vi z#qcP2$dmd;^&{jEU~dO`0HNjo5wznHh1F_(OjM$NXqor2Uisiinj1KLX2rc?L$qBL z?g9mIp?I8o-2!<5yp1q$faHhxEWfjx3T8_=vIv=rmxZ39=GIFf5zZ~a&a9SNns$Xo z$Vgt53|X!=Wg6xRZBS$Sq{+kf)kp*W1xqygE=2A&^(p?gG@r*8G0r zs;RU#Q=(wVp0X4~)!pr5-0d3`;LmU$Bik=YDB@^kC1_|i7_0YFgnG5hVgle z*;AC!S`TF4b1Xe3aaviAifqyEp`18*`nfs@l!SJrXYrJK`g(QtnWkln+b*$C|m zDcf825WkKfKw;InE20WCPFwyG>8W~U7oVBq4g3(DYJYjZ-SKWsWnRKtc#g_NoLhD0OPvW<8VZNp$NgeLZWHcR_ijG zzY>xri~n&F`8fTLRc3n4Us*|W9W5a7KgfQPyP!C>`U?Rr{DBUkkKbOEc76S#NFHu` zmETITqz9e`eIwuue+%xe4Sq{fITrlZAeEg+W|zNm)Ed0`m8nJ0GDJ)q3y1R@W1mJ! zc!cnpbg0}`ILroJOQUEi&VWjJ8EAV4?y5V4OI*3Ms__g2zgB_2yO_8HxNPOy|<5jZKFVEdu3L-xgM?3ZV&m0iEh&xKziLgW;~YQ>~3_V!31+9XKE z&3yKX29P&68$!Uz@*8(O^i&`bvkJ9JKVPLc7#^gcx4kuqz5P&MlOLIM&Phjod9Coe8&)$?dIg7wsAEz~ zMk{-=J-W$M!EhGi@87ZcY&Aa6CVSF2C%lp7ZN5(O)@})pi}qIepUnrsghz(N6>B2a z?{1J#?y^_z5RNn`0w+QOy$%U!z6~LPwqJ{qXMf&Y3H;e8I%NH^exWS;nas+o3xfh> zG{5eJ-*qkni(>)imk!~`e*%7QLi#-=?uP{yDJg$zoHG=bZC#Y|Oaho0>)G+ni9n3D z$1mauLG9%GSzF*kpgp*?#`So=q6ysf!^5ED4o!oO_X7|7h+uBGwzhQWQa1lo%1SU_ zAv#2@+;a0C=HgCIF1qJjd{ZHM+iPN*$#&35IBbJ=r{&q#!k}(_9T3rM^hzb0Gl5Ia z{k1mc71-}ME4oJ?LSsR>VZKej2~ns>NgpCPFj&F7-Q}vS_Wl?CukHSOX%WUrwyHZnc*_ilohed%(}=cXMWD05&SBc3eg85( zSZz?wMch0g{vF%R_NE=dj7Z{p^%LhqKMPo#yk7>;=nZv`y$roXlQwVG_xtMoN4eV! zxRD9$X@So||8E+u{U5o$cByNyb6pTQ;BM*UW-X2UvqMbUP9i;@=u-uj$nv(Cboc?G zZXe?^0oJ@*(88lo6tx4W=HAw!=|@Q+?kBW)*gQ|e^0=K>s16N;6)U$^ko?dxmW8ogkWT5Q5eb?H1{df=S1lW(P`V*sT_jy)F8g#s zQ&I9^4>Dzt1w7Aea_*DyP&&~{G|C{MV+c|<|AtVgkR>&4n?Pb95tMqdC-TW=3a%B< z`J^YZ71nUW+*O7_BUNHFxkZHhL)|(GDOr8*5O=g=Oj4m3SS!{>S7LO8QX@{dp!+{A zfJ;vat3k$&18=3ktiWwXwW5D0W<^Qr=9xUxKvTU23NELp{U3Oe8bw}r=M(B%LQ@CZ zbib?T3-|Key6mi!BSIYF0Sbg@Dn-+qP!-jhbrd_Kkp2(g3yX8rQmEJ$4C^slJplROc^ni=w{=QQm z8k?vt&gNPEju#idDXVEP@Zw#A+Tk~ov~{hgg^~cB zz(&Kfl{F4|7YE3i%`xR=i6KC9WC2msl_rfgNp2P5t4qRRV@|tO3J)cA5I;_@lc!u@ zq-io)9QT!V`>VkhdS=-Nc-b7K64;%sqE_YtA_sdU*FqzZT!pZ(3e_BomxdW_zF_i= zoxO)~h)vlW1fHjxXrx7;isc8<#FD{cD%&hdC+Z$e9Y!f*9j{}9Mg?p~!}oZ| zz)M@tR)G$IAXtVXKOPm&0MU@rHd)ye?NwQzVddDGCJ|^5GH-C-#{u2PWiY)U*`N$; zRkq1*SR`c_4)@(n0y~s2;+q3pq`gbyAK|b#8*YUe!UM?=|Jhv$P7eb^8`jn|-}bom z=On-VPYZ7W~|pspMjmbG*@sG5;=* zC6f`0_Z!ALc$Bvb+EUR4=~T@ zN?VYlJni$XD!NPa9v%nIr7-p76>j-PJa(?9lW&|GmauhrX0G|zxlrNaXmPCV0w2cS zEBRL1da0&?GpO_k()}l|uO3LT*$~MQij*zkg3Y!SiR0e(rYXQu{ zv=)IDD4VCxOb}Vc72nMevrka4>0~S4o@_U-2Usn`>t!2nK*B#hx$d7{L;rKFEVvA3 zew0EEcs^z+>5Ydi+qC0not?%-fGh@{qS%F-SdT+Y-VsrG#()HU8?9B}GBGj5vs{tX z47Dg6S|JE84T>KQVz!=X4L_t4?QC(;n&~S`;;Ko(301&FHdwi;frU62Z-?yPAnDfaso?e_O%8(~udaZ`IO$IMm7=~9(0_`g3BxI#)D8Ih8J4mlcW!vzY| zASjJZJ0x6$RNEO0)#QKDR9^F27K;Nn}27gok*I)R*m9DRl; zuf@$sWe*C*d<;vRn7=B5G-*G}rN71$5QxWtSIls^*uH35=zFQ7HM=3)7`8ii=Vv-g z5h=8so{wt9N40vN@g8vFm@9vD;l`z>BBL*X9f&4+q(`i$eyU&pkA%nXa$WoqyA?Q7uF(a zNk`g#jC6bZqVba29vZIZ+2~s(Yv3KJ>_DwxC2vWl!DYPFXHI2Z>%N*RW|uM@zXT<0 zfSr?-=A}A=eM|$oU96 zuJvOAyK<>>4~K6LyQ*>tj^$@6O2cR~A2qm!6I!Ghd5@<6o02-L9CTqN9mLF;M5$*r z4S)A+VvnyltJCEkFYE2KMuLh2^{>D*W65Qa*@bIw!O<{J?Lj5*+s;*`{+>pB09~S9 zXn;%}+wcg-We>qe;>iwuH%S)=g_L{Z?#vU)>TMwq!HKbHKPV8rBc=%2qNO`XRWWnF$zbW-J1A%;JV0 zCVSS!JmG6tt2P~m#J`u}dX)%C#I@gMs~437Y0u)iEDe|Z@ZEZi%siT}V=>bqhpt_RDLd3<7w-Y?Qo`H)(CmWtr<{(IGh;uTDoZt%(X~$}F5q z3=Cvk&Fu;S70eJ_ETE3y2F&)a?5-hl0q38!d2gCbmKJ&iX8g#I1SO~uhW&t1D~HNY zpN^&aGvTv@SU;_5pP&~qJNC(z2e%?1i=%=%xAye3uPy8%=9$hSnIhqu(6F4hfeS^R zIMM)u8AHB4{?F&3uSv?A_<5$P+qbLEj*$H z^r|^#>Tk37N|1yx6sT(kebus!@`Cs=OXALIr8#mCG!Xmd;{~J8wyN%% z(!*b++)nmIoNDDK00Cq>Kv_mJ3^yjwuShso*@CiD_?XWEC|Q5Zgunp3<(_#A_*Q}& z96yFcJ0;{_Sm`0GF7q8{uNi+5@-RG8MB|H7^IlI(t! zR)Dr83CFX-mX%_Hd+zNr_rGdu?DNLIB<_aSy{y8^=C`ezV2(%mnJd)$lOM&k}5~5)1HwoX$k4 z5(i*w(h=6mSJ(r!EB$r*A2y4z8? za+Tn9Z<2Z1_^O}@sEEGYb(ujFX~aWP7Yd-v7jmZ9w&k=tc$wF&?A?11QaF-+;j&A> zUidvnnm@0!h+}9m4YF|@t~6EIek`vpZ{LYA)I``xdhy`CLUNik0^GT`dCo6ngHYr7 ziwLnd1Gl|3_M%zZyofof%bd%zLKi6%+_hRu)+XD%+#=frs%AyH?}IC|=)_s>cWoZH zq^je6Z3Y7Unno8CG4B=B_m{V(e5m-CHHPocrg*J_WH#WXW=Ky+s~%E|QQfzS=wqy` z)Q83@d*&OuJlaj_?6A}Ai8ZD`?J_wOseyETU9HetO}2bQjo;`IKy6zAWp{x{i&)hh z%Hqt14>RymDyEjw^({a_DIeNCia~&9~1h%e) zMJtQ4@#e%tT_;@|TRJosMi@O#jAJEvPVeVx2zn;pqk^`fhbjXo3Y?t$-?^N!ln0F{ zYr&bwYSs|L6+L)#i6u*00QkrqF2b4acm|{BZ`00^b6gqOtfus)7K%vO7K>_GP$qf4 z)_?ff9hSXkK(Uyy=X?iNCfi(rk5ZK^khIQrT01A-Gz@5HGosiU%+=e5ZwyqgxBnxI zZ~qaM{~T7d;bfNUQNItPzWlCZ-iNhyxXJ7KE2ul<73HyBHY#Rl3l-NNBCL%-a@Z*Xnof!nAE2 zptjeBYwuh2{kGR&DI~jzP`~=jz+O1|pWgri$q%EzSC4oP5jI*)leNx#5Q$!_CY1yW z^WFf&H;HBG;vZs!_Xlnfo*GOYa5IbKYb(ADF`g-mLlz-8fi}uA+t$wzQVZ4Gj;Zz5 z`2eI-CHtz?ST}o?dRojA9(@UUnMv?diE*2k#NnugRN?lHK40 z`bm(x*+5-BDpy3m$KS)f|Fqix&d8vH(rae=oHip&9qFC8?67f2sMj17&-@Z&ESDKBs}+DsJu)wE*sE@S1j1aw_V~Km2Yr zE#}3_A|}tF{8g>K%POgk1)*a?)7dM}$TYV;Ak$N&tFq~Afmnu+mzAfp4A_3G&W_0v zeB3tG`t`4p3whH{)iIIvp>3|J=&f930s25ko0~mZXfpk~65mvvYK4)6aZX-n+nt)O z(Zn2Sg`&Us+|}Y~bsZ4}F=i$H!04STZ^$|foyH*#D89Na^T~alsl$!*MFjVbr=7T& zA=<1sDOjL4Q*iqyNRng5x7KC)r}~sRzz8z6w+h#4vehbrS75>XYYaM~$*5p9Ejtjo8gA#-b~?8Xiygee`BwYsvMP7U6cqJs>Gqx-Q;90tY#Y>t%t- zCjD+rc@wAAkzE}kIgtDbkNbVbi~3pYj^-|B!&!^3gu5PA_9^RuRhu@Kb;K(lfAzR? zn#ygu^_!fDQ^V^;ajXW;RYqqCTjyaUyH&Ju)I^DJvi92ajk)3UdIOg(*PdpD&bCth zy0v_GoFi#vzyPAhGw;w5kRq2$r^~-Bb8}8qTf!OAW66tU6)P41f3(3$E zFP#99uL6XqAm5r^Ey>Iin~)(7=^V4}$8;*zX+4XVbo=mBoqn&nWRn_OY3x>!b~*V} zoI?J`-Xryy7-Ve_L*|(?rbGYs(UTuEo8qTFJH?8YQy5Wr3e!*B725iHjichU1b9)V zDj11%B%OlGbAV%sF!+yWpC=?D4e`5@m1W`+#vtD+yxNW?l!LR76b_E<=%IMNQx9t~kNUuFe+PS;M&&CZOayvL39_ zTGa-(&Jpi3vHEvr7uExnig1@H3=ga^TR>Ctpho%mzTDgqkCWN!7 zY6$4aC#)-FIqbGCThlaHNDUCumnm$(M#ePFM*@2i0DIsmKpk%O ztd~GzD!<;g?M*tKi|Z-~V{{U{>0Wt%cySFjfoP($w*^1vBFN-)>Hx>Qn4nTLM##c38t@&hIbU-0`))DWZeyS{8;& z1hzVhrYI^}l1ZGw-OJ}%Z+y}!qP6S|hcNIzoOiE#0-*ga-vA)n34iheFW#;9=q*)x zgcKyD`|?n0?X!E>Y(PbcMx!u>TH47*-tA+7(JU!AZ zMR_r!OWx**R$DsP)>^ZxmcH-!fmw&v=CmRSsq@Skj9B1%fj5S3vm7+NIyzOk@B4S> zXeS>eK*Rs#HWI15ple=+t0}~x=}AWHbt}O4DBQPYTPECUT{-%nzB%zgc*?J}hUW*s zyMVh8_RnntlZIbRg6G}+=|RPH#B_Q9L-3EiM~Ba1(&NaZM&#Cn@u!pqj#F(ygJ<`g z!S_p1(78(CQnB*Wc--k4Ux?58YVv=MnwoHl)rNubJ}wpi8#8tPH)h&WCNpaKVraVg zVR0oqa8Xm!zUL1(R=Jui$3W=qz(Jsx9g0Sv(q`0vc@@{f!Nn=BuHL9Xl2gZ!7CS>g zAgG|j5Taaxk%O}23Os)Bdq3HExp05zbf?1zcA?`w7fFWlR@r>nvA^ow1+AH!?*#pH zTm0fO#h$FSgQDm<->Pvo$YW5+X9%!~ijKZ{YO-W1Ja8_^K&F*r5}f<4AYd*M=ta49_7gj5b3M}!hDA`W^nh2C^7U5x_KRyg;rXi=n51<|O~+`EJ<)>wCr($bS!Tz%`Uv!fDKyso#|+}o9c=Any+tN~PKalOPuSe|lk zxV+IKqki3p@S>85Yz<5+mTGz7^*ruKXxoj8Em!yY4RZIHjfFNnSK9sISTq#6qP5mI za)(=r)2cs}-_H&1iF@8+y5M)FYd7^bqE-r?k|;UdUwipBvNR{~@aY&95b%Jq`rfpp z|0+83T}|aruivnaJe8QeT#?WVxIvbQ(&$U;A1H zBf5wB!QcB3p|EiwDa)`ue^>00BSJy%Nc}iFdE9627jm;?4szCr9`2m9RU&9mCR(lh znIS&us>M*<*(RASGmTR;;b+#PtF`nzljyuhbqlPuMCKlua?ZOdTk)8BBshb6e0GPU;J5Izt0+iW{Qa2TztnX= z#eoOwbJs)c?~VK-3!g1<{T&st#(6Qg-l|-bh5dd1&J6s}3JjL33co()q%W_xp14sj ziSzSA;6W^fO_3T!{WfJ=jVn4#(l~sVWoY)2)AYXuWydy0t}tP^$5wnN5`qsV%HmhA z-xiqhkKafbF;T9p2&xOr^a{2?Qy)$BH1#4M0Bl!3Ag+WxKt_%K>jEpk1{oCrUP}$O zaOb`Ljw>I?>hkM1zx=2>U#)5XDh2e;6UM}Z9G4TmX@8rZk#yJ>-v|1%DRAAi69Ffx zutSz{_hM0*XXtJElw$s&zTMvRWdT6@rq0T{JVJIPDI&p<%MD!cQt%VP59I4>ucWU} za+FemIm)FM5!qvRWx;_B%G`;VqO&J%SBj8+QitrzIxiF@?dg*S?~0W(q(vv-oDq3;TpXLY=3 zxH7GIdPXN%j=lx$z!tt)32O(M@#o*aT(r*JPW-4ZGr1+Hjv0WnqkvM^#)6}&pY2T4 zYF+z;^gY~rGKD)ZCNe5owpsG1c9#nls`DL1TGMs@Mqi-h|L8^YOgqCTYq{iiqHmi0 zFq0usRhdR{KmHfNN^fT3MCLw0cWd)am6)?Z%3KHtzRf@E2_#o9UnETyV zm)D%sk0^~XSG5!wjQ-MI^hCxs#^z|4L-YHcdw=c|w7_87u;9C^_);)qEj*x<6|{u2 zt1?;uSiQK_i2Au*;vwS-n5d?-x#RMuHDbv}C48C=>sTRNJVf7syw<|>%%L%;;;nTL z%IOI&vBd1O#Pb$w#sNA&0)ANXu;j$}0tTjM5}Im`Ylw>MCUp?;{9Jr= z=2X6NY4}vpwb0_`I+0XyPSPlgOd^=M(HhC$l zyvEM+4I9dTnqow`>v=h7vv1J&yA5yk3YyT(Pllo_#VS#VtmFfZ^o_Qu9Z<+ZZ9*2B zp2Ls^tKc2<5d1cuz)cC;W}Z@skLm?)t>+6ZPPAzh`ex;oe<~EhEEAxCBv`$SM-|NU z+(+^;TGfGO{{&j=r$PX}lm2^zY9EgNUxrireN7G+#V{YN=D(;abAb`1F-1?R|^4YAya6I{DkAa34=7XH*;%-jcvJ_}S{z zOp7_hnZcvpPD22d4PsK_HrUU9CVhd#GZg{?RLFPr6ex*(sjne%)8upg%2vy$5j?&p zCt-+`=~YcEm*qck>)@|tk!#@NW#horyqsb4A) zQi;tg&T-J#Ba34kD$vHcvKWO;*DvoxBL}x)%>t2br+nuP6UL@9O+))&G>#kGdKnLFg{0d{oBPq>6%oYnk$P+S0kJZx18J9qI5G8sC}+x(OuFZ zmkYzG{E?@ov~4l1MN%t$+_&p|y()xmJp3Y$oeT&zbaBZgD&yyWD$JIV1 zvp^Pgc*JM)V&Qj+T}}f~DV^2d0XvZaJkvv5XlI%HYmP3jc8HN?QIBudZ#v=mFZUi6 zeUuqD@kJ52e%x2Obd~*wZ ztTTxiGO_Zy3~|O&)~*H7u@P0{T6L%?Pbj}^y#{}PSi)VTUk;(NY0pf1)(`qvI-&(5 zXQ6rb8{Zd_UaFP`{yh`^mB;P_a7<_o{$=DZG$42T)XS{>Zr);GDe%rKQ8712C%_|I>T|!2)2}5)ehTCYXWYi4N ze`qd}aJ0LpPDu|)l4eBz-J_z~-XW9ukC_P!yM9LA#@UkLH*qG-5l(-nxOP5cyh=3~ zxKCxD6yeGkm5qJlAg?#Ogl;g>w=br|o^*>1@bVUry>2tnl%8dDmfFX8AjWW5^&LJsA?y2yRzdG0^)d)n08k!3N;#XBj=%D$Hu9GN7THUND z)0pCnqqTTCgj5ydTq$A+y^j=H!Ssvj+dAbM97Og&6<0amxyuFfH5Dxo&o)^7fS5!X zBOQKxR&46g&RL!0esggJ-14$l`Cw--mD3Qh}Qd*u71d< zWl}LGP-DleJw&>Ozz2tJO}kp*hb z?SunUH}a&`2eQviD-+n7+KL*%WWdmLq3+F%W8&Ht#!TO-(&mD3c#kiF`gm!`$_of z-!Ihu7Rsl;Q`2E)? zkLxnPu|LODuE4kgj|VnB*4$QHp_X4i6<8Oqx#CDrpRKx&e@Y$1=~C2hOq0ktU~)_p zWtuU*nGf5b`e`agmQKag4vkVn%=_Xg($db$cnPS~>DEb3*w<(=5+}MNff6~_Z%Nhr z(?(={@NzbR_srU}8qzegoXH6N4QYFv3S$#6!DY=6FO>6TOiP5Z)x6REklY_NzrAt3 zWPSy!)I^vvZEB=jjHC1uzFwC4yDq7sqvto0ljnxrNn&8YIKV_C#EBq4k#j-uzyD?% zc}XL`F)RUvwkXy@k^e;s6#LvyyTAAvo161e=Nnn83ohCrC!~{!7r?c@a>Erq=POGK z8j$H0^6=e;Ms@jS)o0(aXRp|Fq?2_~*##nedx#Di3k*{r$8F*@F=O9{wnEk0T|=sB z!6I(>^I*bnF|Mq(qZZ$HRJ+)(@v+-|je=5syJ5KsMo;>7S}=@B0lCERq?dDi`${k6 zEZb8@`SIbfF%tAM(_PVPD)`}JJM$c5g!~>n?hw%qN0-j3LT+lgca=e@Dcif6bsR(6 z=LA2z7S3DeItWYIvna*O>(c?mtdN5te!MT^D_ZBKhjM6tOqu|+_}Kqq26sF^&^f#| zJ1*RBDbxjBlHMCO)L=0S(Uq~Kd~K;gB7S@*Su!N_B$O)=kNr396TEBT@WVt)oeXWbtEK4%fLB0#0!G zXpRX7F5GloDsAl-IeFbnX$QK zG}EKNIz2r=u&7U~{GfhRZ?=>Xpbi4Im%#CY+Um~vQSK|$)qjayy;q77!(KYN23zrOi)J4@nbe*nLViptMo=FdJ#}LD=2{Oftbd^ zsh)a7h8~27CL`g5N_he*>W+M-T$oV;YkcbrN{Qw^Z~d86-=19}jM#PXZg%_DDq#3Z_k+m-JnkuqaDjU6X*ny?rQiEF*2i^P)k&_%=9n%PcBh_^Gj>RH6IxF z`tohjkvL6{jr_!YYCltn>Bo`NvobmNKOSS+cvcyc`n*h~mid8pg-hjAyVbu{!u3}h z@aO`733mDVH8Q^J_Ug+RQjv(ngyoRMRFBa zH)e3OZCdGtome%d(t^n{06_SRtoqjrx_RjvrQ*&ZEN-AHm;{OD%i-JS?qUnCkf-*)Rpoi6%}uj1uYiDQ zG*D)%rMz=#`P%RVhJEZB#hP09A0I^2RZIa_y7KVU*mp}r#a-~I<3|we_MD9bC(&Tm zmyQCvK1Ah8{>_GxnWlecv_q0pOW7Ly3J*WO8&<*G)f1@|UcuFV)zh2ZSiu;M)W_dK zuU|dn5ioxuFTCXee0g&@q|^Qroi+7!wyVM_$9otoc`L>?`t#e&?e4%-KLS+Pz>lxu z6Q@5&bk0`v#KjA0r%q=g+6B8#3PQ!>0^7A2iL8)FW5a7a0jq>4wX{gADKhBMYMF{Wxr48oFgZ^(B`xTK^&$Oh;s_(A0R99P+ z;&-j0F6__|mC6quxQ)ru7))HXLSP$vU%1<$mG4n!3tQ@#o@stMW%#D9e*8)=1K_pK zcwT){g{x|a?eedhxq{%0Q{WHH&a6oP36VO%*36SpP+#62y={9UG<7{@x^XI;>VrU$4kwJL z+_M&8`s%f~EedzhC5BsjRut|WslQlc3g&V!QTI&1(pbxnDL?yUY*a@cfz7~!TnXQU zC%0|LNf_QmIU0_le}PkJy)qH2x<@&ZwB2cS+*i~y^jKP%^X5a;{-nS3ZbfPc>EG-9 zrTbI;yG`6Sa=dpwB8Hy2{J)LW6w&-M750w0a1$V|6+BDYie^h#XpV|Dq_S1j#lAS7tai2MQX3VrJqH+ttTtz(* zvDHlj=;$1C@NwK9#;=364;7!#pxiI}9JC=U$Dq730eTt>raB>Cdztl@`-e`gbU6RkzrQbVf%l;7`TYen{~B1|SH$jDVJ&w0G8-5fmf3yd$$s%d z?vvC7i2O1^gx`+WAM7M7-BUwc!};CqJ3G|nJ?38ZuP z@^b;qHr}u4_(fOBmYzA4@`>s{Xw6(tES$~Hx}^vb04@_Id8XTmTiRa-;XB3RJh>f` z0=~D`U5e8Ds3g%aohSbF2ny`~$^Kb4oTGi7?0P|SY9`X>cSArr#F8gv?l8V6Co)$L zrrvX_K;OedM^^h6zPS|14+7$ue)~B*Z^|c&CO5^4>N_p>h8QHfvolI`^0M z!=kNd^5Qw$d%xMY*XyZ+$1l8T{x}uB`A$KB@Crb9eXa!H>c8$mcMNB88?GwK3FRnf zMV008~y$|g%Fi0=t3%IeeS}qN-XgJWc8B_89(1)hF__wy+qlxJe&(ZgfdwS6TbyI zCjZ|t)saH=N)a0UjiztDmvNk8o{B#ad+N`fLLf3)n*6>~7y*6Ue9*(YE?yI1G??tP ze|1-VoYPjzR2sv~zI(eRjQI0)-@Kg5H{bnr&c^=E{-wdV_Q>gf5nChuFPRgzpk>AV z45w=x#N??dSNs*3sIJvA>8B;MK+$yrO)EskmTZx6lr($ekaJ((iGZ|Z7cD{pD@@RJ z7T~+m$@MU{_hM9O587~jLqf6ML`e%(>0I&yJ@4S}9JP+r?^JatqnD;bRQ$hKMQczl zD^g+sgTB`@jM!wHZ5_@ONz+cgWW-92L;Prat`4D;^_Vc9f!wDS|GXS!A!>Rw{s%RX z#D0x1e%Y78QSYSO_+1})#)g@~>3A!O?2(u_@UUusZ1guDc>IF)^{pP0KmWbW2Slha znSRvMeBD<=P2L+=_$R3N51H??_}a$i*4D>g?9DT5>>IQvqm`(BDnXtqrY~sVM*`8L z-TXdEapeGR8!mRxpDmSBn|i6>mg=dhku*l0Ro%mk4!`T;8p?}~^QeC_Y{c*ItXZ=E zA9&svpTPT*kkO{~AMhBV`up8E{i0h0uH9R4F|F`a@?yBs8!OntgvkRn8OO5%G$&34 zaAD8Z2&DG2f_>qZ>3OSJx)$RUv~;Bx7meygN+Zn?rGQjIFI+yqJ3Cw#ZT)M6DmTN} z#z$ae#$M!;?M}qe`uki-JT0WUt{3Ap+@^ZGCp;g|FT+Yt5J!PMVu2m89*qd5zzR+s;HAe@^zgzq)46%; z?R|J!R9>Qz;z(d**L6J2V?d|eb(jGvZ#{D3^tlXrw|Xp-?Lrq4Y#DqauBfjabpMMm zFG5kwNS15W8K29d2|xoRSa1X&A0$Z97Qhz30&>OHhxqh9LktM_NbBS8e+<>7OkKbE zA{yngeIv2jB{E*tQPI|fSR%u}F0sVn)(red0}_Z{a=u-XH`Ow?s0_C4c`3xcGs#7j z^YfMkVw9~W-k2d_VhKHkMqSk#pQk;m!x8TBxGGc`4`Xar2>*w*v=Ny6I3_&Gq<`{Y z!9aT_h6(vGfDf}2U^d*BCrt?aP&0HJ85*o&lKIwEg&~vB#gK?_>iH=9(fxo#$92f| zFzuHP^!HqEK_@vO_G1owrR-U|6qxxEiH0|6!x)0KurHqO2;Qz!r~9%$CoI!xNr+m1 zr~$YD0L7XFVD&y^j(0i#B!GdJ6mPztzI}G!^ULC3tWnA9XGh9|$5w}059VOCSk9i)uD^uGf0(2ERF&p+@GDN@zxMrRX8A-zNgGw5O6TQ#i zeBUmd0rlbA0Kgr6gERnv{!16-C$@V%`FDGy?bTiW*^PJaRGzx%>yP2ayg-(kRqq3sbk!KoWA?ir~IU zT{9;!t7+f(58aXnkdO${2XdLc@SscL2Sf@WK^+6$8l>PRyIXUiwH17aR^S}G(rece z;Umxrt1n=J$ZWNjyzk5L`EBw#QkuhEZg}WvWw$%&yTRYNLmaj95^qZ**CW>if>-L& zqjg;t6w==$SvO(nnCCqJ%FF`bl-?hT3;rE+lvxAjcJJ2sjcCQhX}Rx76*Gi}cimny z`qS#UV?c!Nxa0)QJx0=|Ktp9e$KL?1B)mQX{Be3+nt!)YWy*b6c9Yi^!o9O#b^W zj|Om9{rL`DeXscRuf9*i`N+V-$BE zb}ys{a2tVOYdly0=juPo+(!yEbIOtSz0!yJ1&N>4sh+=!M_kF6c|d8)E(-d6eDuAY z@}X(xrfP%PhBnCX#pchT`)KZ}tp(J?&EeZ#9uSi2M^%p7kNWnblN5*|vKrN}6!p^K z+#Zkb5kTKE8CmU)KES2|zlI_UfUJs`2><*}oWQRXJZIRn*N7Zhg-+D^PHgBa9?Cd5+R8iQ+8GeOoQap!#3d~9)cncd&?pVZ^jEo3>*EHR=%S0Sncquc{ld(65UGjo~$)t51}#nC+F zhRwP?`(tly#`uzF-iihF ziXkeaXLxyWJ~!^m5CUh8S({@uZx%lK$lGk^ml+$I3xR6 zf%W`n;Xb522Q|{e?d28Fm8{(7981u@LCuqPwR2{+^|?hOt{ul+_?mlz*-RIH+{AG| zHFxgYA#dl3qP%o8<7TVZ`z`^(t_A~?4(Ep#-j5rr)SxRY-kyy7RPm-&t;rDZ^R1wD z-50(wz9;3PXw_)M&^(NPS_q^dH&KCyA}ze1qIid^c)Qa&F-Kz1=}x#-asEYc^ z+%SDI16xke37z-1V~&btbFfsAqsaZwme~j)p)5?!ED$) zO`2f;(Fuu8Il`RGa79j3OD0SFTe!O4fAZo@koj`^HMvzxB8xd^AbK!6QC#*dJX7;E z!rAYe`sfMxI6Q$I8UDUNlZuZX7#JV5qNmZ9FypljCsXOND`_@oadw~fUM_@}`Cd$| zTMYTUT{hmE+s$q?RLc#IZYo$K*aJ zAZIBD;F-5PSecg+0GJ~RSQ+oQk?nJ!=#&lGx~7t%k1yx3>l1YDmDZRQ2y7SpBRb2L z*1VJONnI>f7f(X(FTdW~hKuN4e5oD#T}8(lVdPKzJLK9nI(LG<}5&X^rpgBAH&nYYb zZ!{#JWm8!uuT1<&Yzwz7wU$++dkxM$QQW>OUNWW>K;w*TC`n^)hu zqWo%XX=RfY67(6lFx`VT!`lJjduBbWx8tf=Yx~Pd8{YYnkYHfRA0x4OdMt=A6g z=*D!RE&}c5dcXc6na62E7-XbbAmDZk4E|)L%;@dCxi_Jq-HJ{@FN+I6XqZ3nAYp7% zQ}R%xuSU{w+mqfW8CiemKZF-=L7~p_C<^??zGxMn5K3+(`FOt$Ij%+izViK7n>>JM zeC1Pr0E0Ptsk)ltj!s5Y)2$r$z{n$Bep*oas5ut|Owtj>|FVi@_(V;Y%O3A|d$hOg zXQr$%Q&|0>g*vM!q0K=l)LFj(#n8i+W|~{gSkGdTlfp-y|_7mFo{7om^(Wq`E&bepR2#}$W(f5%vF{NU+WE@48Ctn&n;JsL0RW}PTA6Rj|Z z&{-9eqZt#!bA3;pKXB>!9Cj{s&R@HNUvBo}&UN2~E%D1!>P*U{^td24pY4X(h`=tQ zPhWVso~Lz46hMDKL~wM=USSioZjh>|iJdi9kocv<2Sv)UI3%0`MKd-Kd*+Kb;s93E zzr$5@9pcg&2$K|fQ|Q!{6Wv!t5AI?}aaQ?0_P2z>+x6r#am!x8f-&%tavZVm{8B+z z7P_C;$>f>(+cPx7^wXM}x!xtdnnU5D)_H#HuyQ>ZB_($0_$Xsjs;c?@-=l0SrrYD%4!_TBRNkr}?w}kcnV5PnbB7dKdw7l;pR$k@BUF5uix>ceH*YAwK%L z*XWmJQCI;-S5MKk z><0_2ywC%wKnRv#GaQ$Gg*U#a7u*Np=UJimiG!P=aAsRI#xCk+@@~2={S-PbdszGC zRz0R`eDKq>+@)&|TNY`KqXMqg)rjqa*W}g$%Cwx61OhMOBn2LK#hV1_p%-*sxbSn- zP0xDX8J5gJ1Qoz$knu(S3`n?xpFrH5nB&_*ma3sHA@nV?`wB&FAy5yRSJ6G;z|V0))oevcbMjBkA+L@i<08H1Wes}J ztNP4&5jj*ug7&AHyV%WznszaXn;-=X9&?ee&;ddDDu19u)%@VjUEU5c)p;CkO@JAE zt0>OJ5<3a^Mz8w_jJj?WVjVMBc3pyNA>u4LOUbETsnKQke2a9N{6axrngasQc%7f8 zbBl4jQv|oTbTaIdO0GAIk6e#M1q+L^xj*YW!R8Lj3&Ik~#KDUn{h<4zjNpeH0-!rG z_x6+_6y2?meng^EJA$_8(q)r&$g2<#Yb!&ge7hos7?|TG18x@JGn1>mvxoqRYZVi3 zWT@aZjIW0HaJQzWAvaAcsrEmZd6WMV_o6{s{qw=->%)k)F(rpuGb%8Q&ZgyxV^1pR zdph69GW4p5*$ZmdH^FQ=^$ulODkfJIkgTfD1N&MqwA|1fx`-TbI2D7W7yv4K$=50E zchVy;T?Xl@cjH3UR7EFrO2g>7pQX@e+?0Y3PTP;f7tHq1f`#eAe@iBkv+yFd)a8&R zt=+(Sd;HZa3KdtOU=!!A;TBcYMP5FOQ9tYB3jiHsEg9_2+$&I6YCVq~3hO-2_p_QR z!2x-?`b=D7d2j7LT2dsN-(*rRdlT-&U>P)wqd@B%go&Ma;0rm@0@6h8JNccn+U~EE z8O{p21j5QTqO*j@(g_OoVdfmLY2JgBw^uDG3off83U7f;9gFYapC6DudYOH46CW2c zBrPd1!k0{(A?Aujn_nv&+>d>*4zS_!^pQ7fQ&71SB8;LK3TqFJc;7-@7>ELSOFy`e zVLOK$$;9^sAjk9xw<7>C{%`>@=@Qj!>j4Y+7G4k*zNiPC#u4=Ft65YUomDB$kjZb? z7ugg~n9Fj%U(e(P|8QIbbF*aHjj2r$ek{Qvc_AfifQHmkYl(!n@<g{H3^=lJFNgYp)Y^`5HHK}ZGxfGTam&XRk3+o2AjBKT5W}Z-UyvH2H^FwD~pv}G=GmY8Ya-8dbZbpY9lH4o9Sf=PN@M^!K zx8}J8BC2DS&|abczxRHM$GpGI|qq$WNC7d8;SOiyvxH)-xS+M)_Gr^1~Wo+y$TE9 zm%jMLibES1fUhWGzW%3YfIVQa(~or3qGd6fTYk<9_&ka1DjHRI)g{E#k-;a|Zzfdd zkTnZ9$_4q*9xVqf_&egUwsj3!Hgu(w9C~V5Ft28#dhL1V3j7WtFr*`Ir73_)vZo zpN!lh1Da9zz?U~XiBV0vdF~bQl+@ATXwWc}IN@kfbo7YJgkPizF?XCU$@lv;KR`=> zb7sn^?#if7X8I_2&j%kKw}+dvv*l=shj4xUOuhuIu3g>|x!SmqMK9V}ad2@IHFerB zVeYirwaV*6!w z^cQTw#x2~U-=T*W@&OKM-rbD*(fynR0(t}c3qOf1(gDf;M^`0ak`u`0UEU78uZ|tz zF)xlNq7vU7+IAM#{kr?u$r)puWK&pj!L<7hTJ0+c3TOA7OMws1s*GefW-s`YSKzlz3B4Bnk&~7|Eo~5 zt>CGfH8LS#i9>&doT&5fZ=yQw9w+Ip?g!sSmMled&U(j7nhI{NN0u1Q0+ybm!^4r7 zo^k*;RDi~-B`6**ZBdp%`Eg|54(j?AU(o_zppFfYVsNiuJ|I`0S;fh<^?rf;iX?5S z2NM9fBrH;xlYoL}fFZETf7{P|&Oz^TA_UM1JcpBCbKehqBx2u#lYEY$ki~3#0pMA5W8P zUSs#cNq}gnS(n^`GM)Un6mb7SMkE(((h4wzK5fdS>sU!FIwxz=V?x^kbWgp%KYboq zDS-<)-T9|T5BQx2EE1SGWI^z+AP{iY@#Lz`5kZVbMwppIrcMhnbIW89rC|Oboiz92 zo;aV!*6kF=i@ym?gzQ{qV0H8wVrqquX6LWLo%5?BhDih`%JvI> zmVgE8CvE2jv*-!4#-kLk_;n0u>5J=b>3-RB3JV>!^@eqmQ!_~K*~V%g`8K5=qxoJL)BTd-D}0hbthf51QnJ2xSYEYp;!l(;r?Dl zTu`i{BCyrXZ@XqMU0N40qjKE$@~N+tx_W-DGSmf9-cuKK*MhMEbgl_n)mx zP6H-nU_@>|xRxPNuFwOtDWf_Q0%*R@l+A_HTjAVPs~LXG8QAA(*Z0*lH4}Hsq^rUb zQOip*#)1(MZ-?|YCeP_rP!QpNl?SLzl1`EF*4%-8?`B(n8?KDJD&r7c>i$kXUAWta zE^1dt)e8FSszvwsv%$qwGtO^qBMU4<#TcGkGv zO)ZM(W$_3=3pQOMNkx(>h02-(EthhlTduUB{wX@g%@X5cR?6umc*LcVblvYN z?#A090PTl)xh%prTXXWf&EV_IiUVp(z`5Q6v}+Mk;C}(j&UVh^$|_`3%_Kp6a8fiO z`bXV;5k+3hKEbTXjJyHI&}b6SAi*N_GvSS?_Gy2$_Sj`TGc%X_zTgPfarL4F;!mCK zdYiJd;8Pz3&`9V(c)6q{66Nb`8>~35{<9#!LmEX^UqKu5z{CXJqeHAE3A+O!#a{sx zrPcVlVCe1eyB;El@QhAzmF?|;P=M;9_=^T9(h5Ee?bCKY)TV5-cT<8mox@m)>6I_VGfeF3fv} z&vO+@BVEEFDxIEb6F;bcfA6w5DsOc9lLX{CzG2vuyNm{OF<1;SB~4L4MbVzBbNx;3r6(u@g%rO=f+yHWy2{>%MCT3DPiC@?2M0w=H!9mK+X_I>U{uh zhD0L3dq2&aZ6px?%Nejmvyo(Sat_@^u?P@F2y{_4CFU7BmKh7z$$>1-a6b>t-}f`H zrtL1hTeml{zarU2yvcWpeER5pU3eeP=kF>EAtc-#b*Xa7j*G7H2%rBYSv1h5BJIV# z^cuAElOaDFZs*Vad%hE3_C6kwM*AA^0L|3ZR=br6p%Y&GDiVc&1WSZA>Mi`|LApKb zx*~RC$JMsVZ?Ak>z&OV(C#arAH}~ehG1sAp46Iowbh8WGzmGsRr~kM^fRo`d@?5R5 zuV)%$`xYzn3TU;?+~?~hcbFHJ6|6gYNG6}sVWfKMy*+z7upNHe=`6oK6HqT9A`(!7 zBLk=8oR4m&QDyX&d$k$fWAvAw{P@zRA3$V+-p(GF#-Y#o4-nB&o^2iBz1O$5pR2r7 zP|hcc9}=eKu_%wq>SVm`TGJHtM^+H5f9U&P? z?TlVMzOfFo?<)#Ht9&x!h5{B!Hsmq^WCPF@4eAK;aYwI5Y6d3m5dzY`#yK=VN*vYQ>Ef;VB0xaV9$Xm367Hd z=C6amv49z64?8;VubiR;Aa~XK4*v>37fL9){I6-4xq608|3w^_=PGwaR#nWZU7c5o zpfHQt9qTtk~MQ zgGL>?pJ!##WSwbcbKQm>cH!*ru?c^ z_cMx_hx*Qs>5vb%3+V7`JZ@BD7{K9xLRp=rkc2Jjyz>StcqBxC69VwjMGs5EdSelIC`$(?kE%hiXd9 z0yC8Nx_xr9L(Ksh6F1D3>M^5B_)KuOUCvq%l52Zj*>aU^;E*r@7P)F%=uS zw|Do}g2VJ6Xm?s0#R<3z)b2lvi@pBm3iw1wk7rG^3aYAM)iEhYoS`X>n(zEM#Y;<_ zD02O30y1^mKT!)W+9jd&i*M!Q0GIndL(|FTx9uQjml+LQ>N%8Mov(Gr`p*_HT)OQD zv?PDff~TT+;h6q^UWEkaJW|dH`N#7=DuMDWz$){TtTT0TSUjG{{XJGRuln3R{qJ+& zc(w%lbJ;hQklzFgc6i0AphGxXpz*2$@BVt)Ah26(ZQ%`$ZJHNvMVPrMM^5P8-TcR% zt3fo-Gy76Dv!;?+cWId<5{&Xc<%I!oG8qOsoH7GE0$&*^&1LlS%&f`>wqFddo{Hlx zf~OdU7}62%XMi0XCu>Ko^xVfz+}T-!uMvh0P@3Ww(}<;H02i z9A++teLG2(Au27xiN0j!aZSX2^8ft>QD_Axn)K?R9cm!FuzPy4Y+7OL(SMO!2j3at zVAjk?sC4CcD$=sDQB!CL8f7*f8E2*kMMmFue1U_90rnOHjM9|0UPtfRvUH;J27f_F zO(pMUI$ZmiygVgg)cUr_*X(>Xl*sV2e}?i2;I_hvp{5xq(%}aOdh`i-d3Dv^srZuZ zqYPoadki*}Jc7UoH9wmIs#w2;bNM9JBdqJJhB+Ar zN5#fj6#8?wIB zC_w0iWKq7<1nFi*P2r5W^D(Q6I(B&T5^-&{i1zGLevp2;7QB*!M&Dh5bQ|)=1p}CO zb-qhocJUBO@)>>>ztet-LCmaLE6zNBUi0YjPI}2mS|jerJk<}+^fEO=&8JszqA)LK z$Y!(Le(%4w+5#VBglR_F3fBTIQBQUee@ie&HjQzf^X#%4?I{MV`!loxd9tGv6mKg` zbWlg&M!7|5w?Ig5YN&`j@`2zu={L?p5E36S?vD|vU#l%ikmCqWvV{MU<%kR~^LbMv zaMl*HsYy2M$r>?ao>)5Ib5`f-^@fBQcso+d$H)1zrL%KlCNffoH<6VEl)`uRgK6(Q z$$)(~dfr_~TMvVj@nPl&6Ldb0W@p?l;8Sq<)WFL(3SXw0&C=4<8PbBJ3eB+XhgJ8x z_@c7nKGNpA%9;m5P}V!`s8L?Q?Cq`DF&|fb?VBmuNkL}qb%yQH z6Lpx#pYC9BKXbuWcnZ<8KR&dvk@}ZiyQR{@YvHV`f(tt&6jU)qvXkF@w+<9U?RM+A zetc?sP_%&un?2$mG{d|JbeTqEErFLod#@I@!N_Knwes^1^MSKo1=I6OY9YT!7{t8s zpywE?)2!9S4P2*fenajeTOE7$%ecPpai3i956nGZeLuP*uJQDshp`2Oa$ol2<=?jM zNRhK!3i1po!$TTK<3sd8rbR$I;_Lepf_|ON65t%VR&q_WII~Oroj|n;mmBQ?|5p8> z)e5`Xwb}xY?lz0E>fO>Ch)BCl{UY!N#1*R`_as&-RQ-zDja=(ibt@mY%%Qan0feX+ zkM=v4`jtZ$2=_z!{n|-uP<_hH0bpj{PkJji7cOouC#QxxHX2(#OEy)jLQ^hXt2lEp zNG`oUo>L&d+Jmme*1C0PyCT3<_SY{3?UeJk!k=Ol%S31l zPuEU7t_AMF_ihhs0pRNlqK(zKrC?9im~itMW!w2%y-Tn0Va(Nx&&65ry0vzB9xLF> z)%`yn!x`0QN&@IDF54b9#|!#mACGU~SC3-CLaJTtkmCspau}XhkuuWkyS^fs+dHso z$F;66Mz}0&+Tu=Kn3eT%S$9_B+FWlV>Lss$TgGV=zDX5@sw6NjZ;Zd@3akCABB-Hl zZ7O_SZOuN6=NPIw_qa!-vmlNmRUW)W9NzlO+Hl@zylop&J}U?tZB)~58K0Qb`{A4~xK{0CK6vH0UMJtz_nn zG`FmsX0ro#unAUk_MUQ2_?f-MZ!v>W_Qub+s)?-fW-Q=|pB77!rE7**E=LtsE%WSp z+OH+Sx_)-IeR{b`$wk=4Bc$gp^B`L-f=3$X*|@)U-ITg5g)QC-eZ#(nv-rm$8`WPa zxvqt6e?CJb*nEj7-BLE@r;uf>BJy+QtYCfEF$ILT?81VI6W`fApT10=X0Cy=NK4x8 zyvLh(D^6U`Tz$jXP~1YiV%7vBxLqGR`W9-Ki?lIlOMZ>e3($Nr@`^h?GBRvW#5B5& zj?JW&)2WA}a$jKI8Fx(jzGN0}2U+{joQN}1cD$$IvAqBF8Js4Jqj=cdw04;B!=+@6 z;xOtS{GDjUO#D7|_wz0vAqJRFE!F7(0LryD&yX{-GMA_Q)0ZbCqwvTlIukyPT-NT# zSXr%ZK3G2?Ueo(ChDVVb?GJ}_!289$Ny=K5ghkWrpIy4FFTO9`J)WWUJ=A$H&^F5| z+zQ00>VG(28}!Ik+2_<(uwmd4d*Q~zLSeI0!0JH=5{E|#2O}t1C9v_{_Q*o&_Tw6T z>+0W-xjLDG5%Htq$8=lH5PET?@$g(PLZaoVQnGV05O8U+7(XS!D!%$UMg4 zR&)=)+VM^OrFZ7(w(E207A@f5OtMG!6Qu+!y!atUf&S<9nsA#6elR=hhG`5tE9;wj zH|BmG{hZE{cQ|wW#;No;W6!;I)lsX}mhp^kCcF!C8-c#bXGAxiY8NA5Ei#JN?lKH; zpi*%2<(y}Pml2sYkN(9YQ&G5S<=xzP@e&QUtzX}-0}ajw{IFw7&haH8u3q=iYWwN6 zweA@LyBx0zdU?5oW2LcKnq6){g;EH3WFaVWWH8twN0_2+U%%Q2WdZXSfvPMXuUUWFZr0F!b)`7WECS&xrL9|R0Whfwc?FiyTEwVd#=z#y@Xu=j z+t;OX^Ac^0it>BJRlPcxsX?yeDrr0}^YjqzroCLD#%~J?=Wcd_jp=Mso_C(~yu^Ew z>m-&dHBPUB(wo~A<>-9G&)>watb>mD5|5RV)`3!w9%CLjk^J3^-)B?#4IPveGk0dR z0YT)SrH>C=zln_c78L}wxi7Xqnxx&?n0~BZxy-zt=ES62>3W<}&qF zD{Besr)xz09nz|qt1DRp8LWiaUXMoye-ICh9m=1KKNgn|LA0EyzrIWlljBg~%xbLT zIrDlh%boOEg$b?-z#l?2)Y@{gdq0TtZC|Qf+)?%oVF^*o9$yG=BHOas{Hd1@IlHeD zQ_zPftnwF(@i_1;nLkC#aVW~%0dPiwr{@O^X z+eAfO<>;A@+Nn>y6v8>1EXcF}<%Z5FG}G#nC_i7ID_1!SYdC!vs)J>T#b>V(u(C^z zG~@b7tqs%IZ{dX)Yt~YGu8WjGvzg?&*}81CbcboR}tel7_XE+(Bn|$ zE_O*S<(@6QKiMJ{rr-;75-i(Zv_@b2>}s1#@!weh+@}M*nwh$sf~q;bH~IY^f^qEx zUj-b%)Sk*HRpm0b*^vwQ*4=+sY2NA?O?51+D|sEImq~$Q7R?N1B%^Jcrc2b3Xvo0C za911c-Lt5u=@0uRt!bQz>NbGuc&N?DSyqB}19FJk_-o8GMl@TS&umZVCRqq zqLD3;es)homi$VJIj}` z>QGuHKDvSmA7*|HajNNJl6T%Egc*P9HnB?snJpIf{h~3s{8BS}#2MyA(U>EX!jO@D zY|4^SwfA#o{qJ(>p`z87DC%Z`Fs2=X3sd!qRAO2|J4jgaf>(~e{9;*YNxex-O3Xuo z(xAs^uXFrm7>HmCcV2A>eg0cpcYh-hPSGdr*7iPoyWB@CEFVCmifF4wAvxVJ+aP4q zA)O~c*_nU6HkaN;ZLc1LQgI-hW41JBeSnKw%=9LHy z>6&*pGt!y%9oR@8t>5SNrC7PyjGQVbX{DYBxRB4rw8ZzDsN>$QI%RmA`f72PB=*Y_ z5%S2n`&8X0oGMq9-snJbjupKd+LHy6Fd3|cc2-ZZ9tJD_ILvM3K?*%cwWCbIROgA^ z^Dd?pXp@o*--7TDjgYSj)HW*3*fg3bA}WXl@oH5qdK`5v(|8wXU8dFCMVsVnr+f7#=Iz8Kr$;ReR;BKsTRE7+E>>tLr_CL-@pmX%yDE$*}bLj zX3J<&c(RcbrTW@d#`s;@x){AH;%(`4Z^U2c-Z=1ada()xNjKuWEEL#FyZ zK`B`w>qH^S;|v(e!B zm3v#@Wj6Op!1b?r$h`{PE{^(!V9xd16^3Z6y-3F9nc=ua_yR83YgF+RPh8zFIZnI9 z*N$a`?iifM@%^erA~$|bGc`2r@@ZSdLPPP3)y30g;q4*88m(F}Q4T+vxFCfeqS}tB ztG=M-0TQs_u)3^lbAwzO%m}?=TPb|9NjtAa^)YMBs?er?6?j;|HzKm`cvb-d6cV}! zTBd=(`1zfC7AALt0)-UcI#+1<)^2CUCpD&jbJ5G)TZ~TQn5%T%O*%1^!S~UfHcjeU zW^;$5;HkVzC@~+=#=rBF&(VJK5joDPEQ?}=Kp$tHgXng3!b7ToUrY?gjZ9%^$f;aZ0=UWkQ@o2Z23Mfo6W5L1>bD)Ry$3g#0p9QWky}|4ReJ#>$UMyUt6eISH zk$f*t#&nnJffghT86h@a;8WmMx+P|1X5m|ljfk`Y*(ha8_;5x>EDD8 zd6m3vT3-G7qM$J_eU~Y7q|R?prdI$08oEe$o{UY}p-qX(KHb@9Eh7wd(#60q<uis1st5ia}p--u5OpmWk_WZJAU{@AqY)|*S6g?siU`LBX0 zcM7YtH}Rybw%?(fxN7JK&P;}gN2s&h=&=nVZD}31TWV?)&VqTJ`9%ui^ zgD?@=9W=$=Kl#Ua04Whu(5?crB{Q5kkyiVA@fDUj;m^pNEEDF{ zV(hEnaU#f(s0gi0CYBaEX-68RZc8b0k^y`{a(?J zwxRHkn~k%#Cz(ID2IOu1+?HfiSDnhW4YzvGlAg%gPVX+i5Ur0i?Q9VX%6Wy8V`9aS zpWgvHdWqgXi29qvU~#K@$5fdy*_!{QJE-tDR^FQ^F|=}PI7TZL@JC5mR5{q$BJ5?Y z8bo?1o)2AbD&|tvzFC${L=g_ir?dA#QN|v6z~;&XnW^>i$aQjl9+vySBDWmyF!hvd zc|8c6FQ-q)_-$NJ@y2?Qn&&G~gE)TokGR$z%i6C?UOC4T3#LSPGnYXe1>9wOQSo}* z%?TIAsLE;bJ$ccWgKTpaJG68jhL?ldkfFXX5A>+j8!g*iEYorPSJh$ynM3_yjtSxQ ztwINT0Y{|Qp&2F>zv{n6;adn!`u5)ZwL+c$Mp(UmLd=ARt-3)J!Iu~$ zZAg)bg3yL%RTxWuO0b&8%9|xe0cy@aKbyBy^l3aChV(wN$US~9_~Et2>Ca2D=i1nY z$JHN2YS=e8XG2%trif+9m`Cw0p;d5)KV^=e(Li(qq}X=|7agNY&)cg9iL@16WL*_+ zJ-w#;W)(Ru9+F>v<$a$)S}0f>^UGl~quISknc&PCZgb%BL%!)a^`4G#gKhn6?duyI zflQEGn<2fYAe#QLbEevd)~-|F-I^&`dbU?c(l_E$Q44aiKddQAufN?4YEwp{^I5Ot zq7xC-o#tQYKs;CItbKB_w_9(UrF;Mqf;Y1Y*>qx$P+50_Z>0h62g~a|0L3SLJN?D6 z2|qezI#I?9oJT7*iKTORbOy93(|!)S(PMuK*3Y zQBBaE&g*!LYRMV-Y8AGCOt);- z`y_fbLtcZ1;Dik~ckKcLvZd2imP;)sjcg3k7F427#6DH~*toH!B5U_UsWF~~Z1@`C^%ZYl=^qcN%mvt!;FJOJbSJ%)L&)W*8H% z2?2p+0t5fB! z`ASqt^L*&1l8ISw>UXmhl21#-EJz~{qFXi8do@No#IqMaNy*f@A z0Gz{MbFGN_Rh^;zi?KDzshbf`hDHnQUPeRfMZ?0S1yw+k7Nz8Ane({15&=O01n*F- zC(lzbm>~FGnX2oI~75> zdpAPMVN~f;E!!iQz7!*(o+y|`YM@2yA5W?N>zoFAI1MVMxk3*U>a_F zQZ2rrgov-z>?tpRECd3@2eb6buitK&OpqGd6rq)SP#$(0k|+4-Nf|Ej zXJ~Ger9WixjrCSFA+7Oo6&m_`bo%jE_{s8rQ*u#p%MHK8V5P%%wvvzdnmK7)(5`9p z@z`E{6LRNRo+!EgmTF}$c=5o6$#t*imI~_UDX%*R$=oE^VjF#Y6E9$Do{t&S6kD2f zSsy{l4;P!c>{xOcl-?G6s1ZQH_!VyZbw_X5MlsFEkj4l6U@M)YwB%*q{iow1NcV3f zbdgv1-bU{z6&e~~eliRaBL&mS*xhim_#1TLL{caJBx)GJEXnj>@*0r|p zHB}H~+<+Lif!FwXVj8dDkuE^Q=$hplsrdbfxE+?Ex6lZ0+2@V}iyGXAKY|1?$A5a= z_XT#|*P@|cVO#DD-(aIdKBb@qUg+9pQwmol($-EYD=Ls`wrWIk$obX6E%};%O?;A$J15ZQ z&`|17a`M&kD~qUl9JB!Bos^A@q4lhUnGI4ZoDGHD*xIsTv&U1`8m_rbX++xy&kxbX zqq3nngkHZ@@jtv*zDgXKW^%`;J#FVKkYl8H7j^hn2y!tHO5JRDl<^+4qvpEhRzHXu zrOH9L@VX(^M1tW|cxnJGRuL8z3ndUcNJB}4l1hc+m1%#B2{Le^w6clH_#bosWAXw{ z8Fjrk0&=|XdT*|Z_d;qun|q+ldeUF&0m)utP2%>SqL@E-d6BA%>rJL6Ne^YL>ki{8 z@4rWiR(APD9ml7oR_FZ99SVJ~?{-c}gm7cQ6Uqj3`J`l2|t$mwt^r=dyD@#6h{l-jbzNIqtPXOscoml5lL zhI6H*htzX&2QpUUajvJUVA{!Lg&<`?Zp4-IcZ61yl6wS08lQ}<>63f*8`ae}*Tz5g zb4O9K>NVz^~$q*-Y&pVE#N$MxlOCA+0ot)b(>7jsRWk#k0Qp=^>ODr}OpI zjA*i=N*khOo^#A)@v=0DxQS|wc9lATIDhXFzTuFhezI`-x6DC=sD8bfkR2TMOTTb? zH+a$|0|`m|-bLGZJxH*`+1(^kTlP=)C1>YH*8 zo$3PvrPurr*Yrh4XAWO7TrwIDEqxP{Bs=>oQsI=TJ~NWP{BgE<*FOxfu_>9F4jStt zL2cP}JViv4x6#hy3YCCbdjHH`8=PyHq z&&{eKWx;28uhre({T)La;2bgf8Vztt zn=MX)0LfqC$iNM)G2Q+jIIIbHG`}q6zVF zpGWLL!3Yi$qi%R!UvqSyqL_0!QZKD&j(?DB&~zc2+0BT*uNkLE{$lNsB?&vrgFCET z+~td<+ueoG#ScU`i{5!s@=O_p4|EuKS4qV55#wOkVIdTFJ&A)J*{~1@wXnKm#KfW-3)?hBuC;Keg(1KvnLRILg%a(Fj z&+-BoC7E7ML$F3t{KG=@47s+6uovo5MrOj4Tpe1RQ?hSD^hUCnhY@MEiH0TH>ZrVG zscuD1O$fQhv~w7d4fAsQ)-*rFZzM1Cn!>DXGGZ*5w)fFk9m7KXm7-yV`m;^yY>l#7 z+Da;|j=^xWFh#>xl6_1VVn;Gn?&%BjAbFvfZiwHvFMkxR4K+CCv+H4UV~g4pd*V7H zVz$ULNHr>~J(CB{yzC)-;nOp*$&8wS2gw*gxY5&KXyy|QQ#R>T1SioMI8tE~X**$01dVapBLanwFrsLZ*^9QW}InrfyZo{6BTHi8%5co#SSa~Xc} zmAQaZhq{<9S;Fr)A!pUJN7yHgYAsE6sXaGvMmO~Mg9+F6y`NzQ2SbE)h@T%BrXpd= z2%aI0wr9hOI4X;92qX8t9^(_)Ft3~hcx=manD^6o>dKEODaGA53EXr1 zX3w%C6tr$LJdD?qT`QVEpONiXYlP8_G!f>W8T5*U>7brrr(vpR==5dRoWIi)C;XVn za08w>&QtFBUZcLKB8If*-Gl*`N4teN9*pC{&dK6OXavbj*zt!o>5#UUd8Fe&BOPVq z9%-);T3=(HnII7kKa!zC$ZaD0|JZvEa7(Hx4SU@j`rgh>cN0}4g9HOcP;?YTM@B^j z<6w@6%7`*L=qSeD88BeLfY})nIw~kAQ4o|IML=?Q-wrqDd(Z#8Yt^c~s_s6F`s4ig z*k>N6>C@+&s@he1#qax8*$nF6ru4aG0kH;c&iS{J@)xLN<+Iz_U!i?jp|)Bqv+q|6 zfMsk0cQa@cCol_)o62?!gPiii$u9T(^`UErf2> zIkqm87OTr||I`JtY;n6B`@(%RcqS2@YoH!FARVo(T1lRs71=a8FDHNb0y*l??c}k$ z@0`Q~l>0fLkVog5dAGz+8wnPl;}H2ZMNXolQ#AMpJjGn_Q*zb%R+bL1S@2=7_-f}q z2bVS&FO&=f>FT`UYQ@}PhuD}XDuz9Y@X`|UTI;sto_+TZ{HF7>)Ay^~8nc^K$ZXCQ zHw(OTMHuToR+H--OscfSHH3l}e8qApEX`r7UGxjPhJ!yHt+Ww!LLA`t z$-8Q?2;xYV{!YXUQ)eN!rnx;z96^v-@5)&hplVCC`0O2|qWGLkWK)n?>r7D4o}ZCV ze)D#D!ai%|@W($?Va52(CEaUeVyaDgyIQ2PZCWn5`F8pKIqT(vuRBQjq|16+Wny+= zkn8u^C>dt=ng!lYf6!;YNF2&;O+-i(oWSTa`Q02%rCDJKI+F5^i^5Vfj%^NEmg0y6 zrF1$^9a@}A`f`b^7yenNBqC%qlX}vZLpbF2BgH0cWL?8SeP#{W#k0%%u~^2vBVNX4 zMZ1}^yF4c*Zj*{A*43&a9Jo)p4wgT=5k-~TPtEwGIqFTWtHynHdS0X&EW z6+9MlxpO`{*O5(4g7oY(Lxz>HRfvIe&$GpA2xw)HVGFpM3mYdTimJv(%{^yjGbj|q zbNiubA`7ap)}?mDQWTp?$#s<;my0*8&^lSsfM`Zz%=ssW5mPMlMkGa;L?ugtsU-Kh z&VicgzuDW-EvKIQZfW`0*>7t+bDyJS&$W+KV+Zb96VdLaYRK8FbZfZrRCzck3r5n$ z#?+* z{T8;?a}PJ~Z9<5p26LhV#w#kinv&T>p+FhbfNPu$3ts5RR=JzG1S=i^{=E2|iR{B*58*rVLul+WEapmE3B4vnavI8eEykLMA4K%fu>K62~id{%@PBL9x(tj-V5Ir(MZAGzrjV7X7#u@i8As_nk zf`?yC?z5fqjM!A}J~a!7a-v{X9Y#cGZ7Gbz z_epMfMGjVuQ<&dRdET(Y78PbyK+kgYgE1>rXF8;-y+syvA-Hp&3=Ou(=YDXDobZZ+WN|mz zwpKhhsK23ua)qH>p_R|FcTg#gcE7pa0-|8Om5y#Mxwp>BMir0q&Wab7K>I|IzFdOw z=X5`F9Vpum(-k^Tu6WJ8ry+n6aBO_!3JzQkzZnayIa}OJ7^!Sr1YxFJlYw}d1d#&w zLU9|EYe6iTqG--%`txjD-0CHNM0_H&C!_>w74pOl|zQPI4IA<=;V-m`n>l@%O`$u zeB+Saj*xwKc)ao%Nl2G;Ew(u|vy-}Ec#(ASaPeSbyxE8ZDjpD$G!gvi$cLU~3C}$< zp~(>Mc|b__6$fOHqNEtdqEVrwW$p>8S8ljz?!Zcncu+EHR*k|~p}L0=@P|Xi3&yDM zr6AQ+R;w^4#z>F|PgkVhSra-?RBiqIa}LZpNUo-vIuq`cE3(KLHQoe~W9@96npI9p zvUAulw$7%qS`FM6s)ynbabnyjU;A7o){ehkn6nqVExBr(tB=MYxf!Gxz>S#hf<70 z@@`S-ENY@)xvFOl-kIy1CjqXc!pFY%u`H1c$D)x3w zRROLX&oKu<&js1ux&G)^{vc~tERthicz|pkZAeSosLVG^MSNyXWN>_5W*ajyHG`V& z?eex4?Jqm6S*)lL&WW)WQSH#-r7`$&r^2%vXHwRKH{*=kXpK5Q8ztw+Cv6HZ&G7IY z2@{o|wJ*#HKdzR!MAW%Hme-7KK8 z&U;nW(i7PT_4g{ijy(&)O1YpQC9-s6jb@VT0yGmEbAC3CJ}P#r&{?fukb@CJaY1c9 z76+{RT7@QSQE-GJMov|-DjW!ujPs&0?nsmwPTxoX03ZNKL_t)1R}FNGAz7+ohNd1G zdCMf0_@a6N(G&S-_q}^q*IVG;gE*;<%2}vZ@AL!qj-y8E$ga1Za=sk%kGsn9<+HN1 zXN62m^+;E{NMARBvvDV=7-2^3odieWnE~Ozp2{V{x#ZdtVJ);4V=%M`G`dcD+bQ5#u?{2$wusmWTkJ`v z7LRAfD}|w)s(&+Kqg+=l2e)p<-OR;HIqFR_#cnIeTT#@X{oFZmOplysks-S%_Jb*WuDC+<=6nHw^3x%tC>aQ+SB?R-!+ zI*AV>8|Zc<&c>`(Nsu(AGl=to)Jk=phn4^F9{(dq=Xb`Zhh*EuJE{PSy$AQSPrIZz zUlJq|OyuM_2hQ)0n|?2ST}u^y!#VLe1Sj}C9tNAa)2hc|(OF<%JPtSDJsc$tAy#wv zF5O?MiBVRWXKZq=K#P4wCI3Cfdkv|m{(?Ez-<@T~>2`_%=X`lU2q?W8 z#?2*h;2Oa&-)yUjl?}9yen9#<`sICJyi$%o>XEYTs$R9F^)VP; z9VQreN`&o)>gXriPgS)>-J?2tu%$AKl;@H8e{l?kR;M#mgB+S5H%24J8)ogfCiW^b z0X?A0Rfo%fR0Zi0jJJID;(f{p(y3F2FBHDtjHl>S}LMqxxx;|CmD-#23?S@F4~eHdT9g<96@I4MF_khQ5JU9;y5h)EnIWfo;YGv zp&IPIoqdWg!j{o}!vB&?0QIL>*(ly)>=k30bbfWCp*|bC#q2`nkfNZ$;;hnEL_{5S9M@A@A9Q5=tR;Jf_K&Ovlt?7cR9&;2g{#reC>!B58GxRO|E0omkZnzYN862&lMb8g8|K|kFPXFo0qKDRM)jAp~Xp%j^{DXu}wNR(~8E3+6E3Q$3Hmg!Q&-nxkuqXe0IG6 zXtCMCahJKVGC6GlLvq+`U0?fwk^AI}7kx-tKK-lrGMYsvzw3YKzq#?W zprjaU>;|~_cODuHEe3OTZdy9qd&=MEJ^LTO)vD)$LFG?wI>+EpwC(wXoB_PcX>pX_?fdGQ{{fp_J+k3u({$Bb!i_2&I#lYw7m+dU8`q#=+ zb~{4fc7?8}ESQ6u@W5llS1wvn5h1E`W12y0U3r#7*b}r=VXF#!Sb|nP7C|QaC&JR3 z&D5hh+riA&Fbvxv!z75_5zoPIc#p(^U@mqFb85cjD1-oeGzYRlmULCC%Qhc%O1r;a zSaJwF4loKb=nS!%u#%0nF#$2JxaSO0Gui)o)sy|fdpNH8aQ9}NjXI>r)km|O^)Lp5 z=Zxn>lc4|?&nZZz>Ts&=CUxp6>ci;=vAXQMD%R;kU;QnXMPB)wy=8iSy;h;y+qz_A zf<$yyCT2IvvYtiK+USuJKmThv;U$lfj_z@_Cslqo&)ybITD*vngYt2mb3=k~n#xRx102 z@jbcVt66n8r!cI6N^MqLLVZ+iL=O7Jn$|hKba~k)bXsC(AvfXD9f!o%lF!1Ish6w3&ntc?_#*T3mTXxv$1&~qI44Wy zQp~}#h~HFIQgkdD^ZI;h+@VRY$jvwIs@IGEZ*44*vB@cEX_=Cl8H+1gTRNnztwq|} z$7HX4Zqe^!)4brq{o@LH+I#gF9GxVZwW0{;pR)veQrFM-IPVc?vPQh;ewXKrXH`*c zB=@Y){G7&Y9N*T@{53v~|K@#PH~f~}D~kE%$N4?{3Fni1JMn_iv=HYl-Z<%|3F_E{E3yf9|V{r*qUsJ#bFy)Co=CkkL9~DA!eE zkJiP{%0g>xJe?O+u~Doa=R^|Cn$e|?#bay_9NW71T3t|%0Kbl!Xhstu@Lw>`F;^7K zsNv>lV+rk6MM05_3{DK``FD316|IC3hl0GqL&r8qZw>X~cE5^1G*$mN=iO}Kh6=)= z83M3A+m~~qC`3`TKHg3n54BM_pgw@{Mg(A@{3WzlnV{9WpE-d>ieD7;5jXXMyd|9r z>3OPJT+t{Cjgn#nz7X zCx3>|7FAuov%Gg3**JP%O2RbDGAHZK*8lYP>j`)KySk(zL5|6J`CdzltX;CBtRKF+ z?4HIXvdr#^|1fvJxtLQ(=fpkH6ti-l{Mx+Qst%b1U8|ua>Q)uye>^Y1%G%oOPby69 zZJp|zN&Kt->(WG>Vn=6NxBc19pWT{3{`l%MSZN_$JY^mO*gZfo|FJ+^ynWmcTe zp{+vf2*!tGxx$T&K+UTzP{KNtNk{0wq@)oeU~`;u&|cohq2p|*1bgskoW{)+-m)3C zs#E3rE(8<#d!=wkP;|{fAdJ&Dupkk1gA>(!Iaa-zWl#@8C`4|HtFy(fni|{jO$!7W za@`)Qa2BwTLXEf_l~YUl@_eJ}Xb?q0jBeCtj{EFYzh-c6hZI$y$tr3#tZ;QV_MYIx zF&Oro*euit=X24Q2>;1Jiqgo4D#R^Ub**#qjy>gkS-pIby!ctG%7OLF7agCTlc~8a z(%;plNy>)7DLMI!OXW>3*iCwR4HoX*Pv_G{N`#9&)dR8|U&$rrSN5*Z{bc!g^ z1yhncOOmkt6kzSTTJ$&YEra6&vS#s)ngC(D_>-i~k~~8_O;Lz$>(Wjs-v`HA>Q--#BtdB6yv>$ugI#&A?axc?Nz97&(A7H6#qttes*58 zh}70LqSs4Nad<*xV!9!#mb7T%!nwpEjOlHR%gWwWMS^aW4hk#4h@DT$+HM}(tT6#e zf+wgZ`q-$5+*wi9MwC?rxYkwp;nD8JfHtQskWzfd^=Kk$%68s8bt6rJdfh#j$^TsQb#)*o9{!m! zaI7apTmN2N0Z&w`$)P2%xkNViIqhy1Nw21vMY35vQm9nN3U*l~w(hYzcuzoM<@o>d z-f>O8x$PXe;lAI=hLL;a$Va|T9=^?9dJ0y#p_-N;dd?draE`FOoIr_>K*9MsB+8S< z`rOSN1VLe=?z8SXMQ`w4v#!mzsD$GuR$Zod6_O=-k*w!5)6YD#=y2G@TXrUK9e{0Vh6abyQ9c z>QYZ;xE|J+bLToeplZr*@KHg5sE-4~h|>LCR472Yuu+67b4@t~N=xohbmf|ix9v$! zoJ&SA%@iD~PEq;1%4u9xR+n?oVv^BqmUYUTU$~b#rm-m!(S}UU4oXial!8_I-aQ*9 zz2FfAgK|MG2@c=4xu0ofZAyC6 z?8IyCxm?b?@^m?L@1x|=4|($cr91eWKi15wNQX81A9OGFl_$0uKNN*(FN|AEVW=&O z2MTCgQLN?PtI%RA=zC(%zw>vVKSQxu5rx;t)R27pvQMdfKWNuy%g(FzG=<+V+m~ZQ z@u>&n-aVw-;t2+Y1$gybv47q{<{$=CnMx_sULqK&c&|9cIdoEf@_tN(i z&oeO_&)EG@**v+euXB!D?=h&wmWJH4JvyRs6iKV|rgOaE+-zTqO*YD+u0@Kzb^AgL zsp!f1Y5CUWpOTg{e*N*rs=l>y*gi)W9Lov4xm+NBsyf)j7U^#5mSw&Cka7QjA(Dua zcv5}hv)}vO=dHTezpWg)*9#tW26yWT{q3y)M(o;qu8^~@`*LZ%KNGq*GG0}`jtoCT`SD9*tZ zv{#+S;=Eh-A;!WJS&Ue2d{G@9%XwmibW}{JE_+884v<%psp?}ebntW(WMKXrJj);$ zl&gd$p|Vw#E`)b47Yx%LO~bG;imswffbK=FGMKON8%hAK#ZCCcl2`@QNCTAKlJPG`MSUTFLWNFVf zGB!yOL1gpr7WvF~uay&DzMpKf)H?SLlcHPW)!}9kZdU<}vlms6ZF)=#I16WqBG!}= zlu|LT2en2^&P!fbZL|o10*O+*&pDwo5I5`zD&}!44dOWUZc7fv>yXDdS@ z-dB}DK5#UGQn*3hEz;m`_`YiJBMt2!v4$j~9#EFzJORzX@qc~m*>c4l=gGSc`_$i_ zGue8^584&@>9yaKKW@57p1Q~LWL5w6I?oaDHh;12u;(!tnBqA24!dMj$}6eY1o ztHY?AoI)?hV?WK-3awhyWKu)#GW8F{B^2;T(nzAc_^b$n(SfX>97%FS?6`(O)FANg zr4@!!VJw$mks#R|TDX_SGi;_V?b--@*7tZ$*TRLFoD$=mPKB3-1cmbino1%IlErzB zx_*T{iOHBjK@;bl?^BSjkKD6SHR!3NZhkXcOl$(xCyEd`O(d#_;|qxSKM~(tcrL>WRG)#&cyK*xlm9_Jl?A7m(ac3wtu@ax%Swq-cZPODk)wQ-++X0UxL2| zvP{9n{V;3qd{{?zHA~nN0xoe>-516p5byciQjYIvkY=ND>WClmL$0Y_r1xeJ>$Gm@ zPWkWOeO6k&ap@_IzOKb`=srhlFyG$RCQG|*zNiM>%GE-tvABuC*nvU)cZ>s>u4n4! z-uMH#{Exqs*B*S5EGq;I9<xuo%tN?-0spq^?UhpV7qx&pS4>c9LO$zUcL%U1C zo}Q$H=G;FFNQ5=yR3&qjL`w!YD(z)upCyCU3K=STR`t!zF3crOW&~{PKs2KDz+DYs zG3JQ#k5y+s|H>fw+Smf`DsjG1Y0@iKeO-%6qh9L^J?%5Pv_oUh^zjP;F5n@;qP{06V?a^C*gW}R;jU}7a*lU@{E zTa#*ZGe}YH*~xJd6}rV}joREyI;tN!{bt!=b-%p%$VbZNF{lE=($+REOM6z!#56oM zcyiNn=fJ)4ChvYz9Y z+c>OEvI@oQ&O|@(krk0+%V(h~01=F$WVz8-eowaP!=BiF*0F1v1Pg0u$IW#q=T5qmCEc9@lyzaQYfq{DI;vOyn+mKb!`;%eUFn&U=M9gjSp&_ zPD4@g8*U?W9bK+zVs>0V7ezl^B{#+~IYGNz(&eKGX%a-SshnVrCykM&;vHfAenB&F zVJW!OpgR4Ua{k4;pHU3486Ak^mVycD;QpI+b#2x(_nRJD;g9hJUL0^+%)R$#AOFn# zr{U-KnL?#f1v+}lc#UJ_62u$|2!Ee6O$Lrnods1xr{9W$2P{rkz(cQ z(k}RU*Opu5hgW{dl2Lei2k&--ax&qXb+vVA#Ro^phKfJL1FQl*b2GX)9w-t3-931R zeB+Xj%L#{_s)}h_Ut3q;fmi{O&5xY*7J2JaKPuyMlPc^$po9Z3$m&Lc2SEqT9Y6`? zRA_(&$;QhX(u!$y1j=T`wBrDy$|`WqI3toI34A}phuIStcB_zW)cq2nq%MgaoodNr z=}wSO&I`k=L28)IW!x0Fi&n{Gvtz6I~yb z;60#%Js9hx7-us!qp>t2xKYJCSX29KLDa92|C>Qr9ER-kX%oD%s<7*o(D>|FHL{u@ zsmQ{}`URsk6nZ5M`S&l}C_Aq1mzN#Bzs$>o%*hs6K_WT>{~B2Otjsh9WYd;;`N9wW zAfI^iL7JfYv*%qcFCf-Oy|C8xpaQ2tpu)3+v-4MOkh;RfN7t2wN&l=lb>j>9s}vDZ z2)f}C%~3PYF^y>|E7mA(_bxB_M%i&A#b^+MpSX8(bA)YVLxO{G{4zo7Sz0=EgS;Yk zlw|8|KQ2TlxRQ13bmoSJ`#3BwtfVy|5w6Yww$8|mss`7o0udIk0#XG8InocBacn8% z^mQ((s9NR(S_qW5e%9UtNL$x}_2CSiX1!E%Tqu8Q~d2U=uj)(4c4m_cN-V*ecmdM=Q{;jBIH;&AVQXr$NaOJxvKwhO zxe;F)Ta2t%9(yeO^XyPqiJfC_M#PB>cWk;v&b;a?((?T)PH!-R+dxZCoI- zkjCGvm19piPu8yNmzOMEItI&F!UWd)7fAo7FFb7*@Cc9A28Zf zIMvQbtq7G<19t9aRE#bI-x~DG0xi@MS19Z_2A;99&--<%K(lVVacqaRGvW5YdF=H> z+@ELW!#b=#iFqsuetb@Y^ayuO9jHZGsJ>;xwesJ;{j9v@kdvh^jBxn-^-f!_{DD}3 zb;Ebb7cV?n-uRRc$kGB;M}hzvA_@eSwx}_$+)1B&fGwqH5>>!`KSjZwX8TFUan<J6G8DA&Ei`VhCvH1R@wY%J(HWD>P|m;`DIR(w$L$fY-#CIMH{;T|n^8^I`Iz$Z^NQ$Qp^j+z1GIIVyL!M=ko;rOvI=5#3H7^hm~iqE-OoF?{E zAci{Ah_1TN(&XATAbOUTqe%>fwO*mpeoc<9nwg)L#a&BE8)*o%Y1wYccI9K68}VhG zzI6+gZ>L6ebQO)bQrIb0E{XC003ZNKL_t)eUs5X2_g3eV;>Qq5Th;^O%Y1>&iKqCy zyhOe5eV!>k&Z$o-x8~pBZ8x;| z@9~x?Iaj&R_0D%}oW#Ng{tEg?EG+T6SKM`poPW~~rR4`#e5tW7b8~q*u=)^Lj}$h9C@)PIsZ5l5F-pP zE%F?3pd`2$K(CIPAjHN6V?1)#>3q<-FcQfSYZAL%xugXZJ-VOfER5&Kt4`|YI^px7 zh8aJH17oeJBv;`(>r`1WavCw<81mRX&MD+_eCMu45i71A#|$^giwjS&OxM3wD~iXRa)GQ~u}EJ2k83o+n4j-aj;P4IOwThmU{(t* zH{LNMr=NM9y#KZPsfwP$q&m6_h!wDEDv^o%$1l_cyy$r2{6H44PF`%}UJ^V-6+FJ5 zgPZ5p)ZnS>^gR7J%|Vl`h-9M>=uFgSy{+k6TdIeuW&vFA&fW!(B!ihHxP1;<>~QUv zpykFB*g6gCy|2%#RR`SFSBfv>xSM=G2mLBlHI<8PftFVGr$;nMjeOGj`Kyr02s4m- zs{FTtW6K_iHirGI74zPN5J}LrBs`(e=!q?ABb@7Io$vdkvo+0{(`Q#ZP)W?<(%a6F zi*EU;y!`RU>)5TWudOTaK&-$Wn|?3f{LQKInuFgXD;9wWnNS-Q3rHNtlZjYZ@p-v% zZX};&@9>Hm44@|JNm~wzS!x!{&!|1cM&g5gydJ;duu1F?{}#uElr)u)AgGGokIxK*T62&+>jwOi>GPt*sUDF{6pBub`8ZzA-kiU<3>C0R^+D8IbGf z8a#AZ3-M8x!%=99REWpoo7_zGTv5(c{nu+;<>EGcAAdhQH6m*RTsx=gU(#VZtXSqR z?D*8|wAx3vkrdg1sK!YF6c$*g`ly^7G@1K{J;i4G^?Pg=zpu)*BMa|cPMg6sC}JYX znh=|SymNXa=ZVk6PLs?Vjhqbd-o}fmRTl4ugRY02zEp582 zxo6K|*>uh$ES+a13M=J`pB4iS$R9V}ELYxnp0xbrny)wR8T_NX`bj710U2(-r8cLI zt_ZUffqv2Qjt`;-w4C%^oByB&j~w{z=X|?>zm^gW>hv?|xV2=H}#u zFMOfgcH3?8j(5C6gS&h0y;rY?hvvsW{;@pkSNj`ke>j1E2cTr{wh0PnRpNyt1N>_vilh1NA%2j(hju?eeYPoGMRv_%r44JO4ug zS#?g~lCr|Y_q|(0;-JI13nedwy%pRN--H+p1U|fy=Rs-=rgcw17B6^pUW9SO0+h|a z?+`r(w!7-IkD9f3t!lTa zl5q3=l5>LMUNNVTq*WDRL-*Ln%G4oIIIB^u947vu1_k4rwP4^uK~7L1rx?dMk?_;0 zjtP=?WW7tu=gI`35T0OO?{S|b8SRocAGw#bwe+cAQAc}2W*dVtGe4zO)3(+wx!{_0 za_0Fr%L&KqS{5g&ViHv@u@4jXu?ILxf;S3^6eoP>_~hKACLRXQOx5Y!`Zb%osj~fD zX{=2SnoN+#z32Jov)h@{ zfc1GC-z3WyG2A>AhH~@Qe0&o2!F?vzNl;WDJylmGG(ocUg~DwTGGWiMpDj60qo*iJ z8NZw2g288#@I->Has52w`11NF1mNNkAz($ls-W7Bul||}%^b1+F|xz5olBFw)yLnz z*WBvk?|*%6-*}^Z=kn9!6;C)`mi2CRrwQMws()rIORmtHRQ;1Sfg|7;D;cK>;9p6G8AIvUWaED}Ya;61 zZ00O;pMS+GULl|U^rtl;eZ(Uk zAz%FB7v-r>eX1UUWb~QOe5Ran#u=YC`Aa$b z?6c(~ANk0iwKUgWd#&uV&pzdM{?gz1QxAIE#+&5KE59fQ>~xSEyz8@-e}=KaA;eCh zR=y@jw3@@lO9EW=5h!yuJ242HxO6zxxd>k&pz|4W?ie&_n<|pF0``~W*b`*597EA) zsIhPZo-?AUx|qhYr~#WE)lQ)&w{FC#<`Kw8XI1a4lnTS0y_KpXNfXxqm)4U3H+ zM>bV=c_z%+l^m8u+o)sm7uU`+6d{f-`eSRlLO+U=ri&GM6ndYAtFzMhta33Xw%B~x zB1zGX;>@H%ud3b0DvxAhW=c-@%%!TP`;Ma?Bb&w=(grcQbwp<7#`NB|xAv&8(Umvf zEkD2XkMh3P>|er!oWoP+5?cUtUnyvTQ=`xb)gmT>C<1a#_3CtPgiG$dB-`Iru3awB zFa^p%nVy>w9B`WT#?bTiMaRJIoe58D)Phpvg8O}9@B5y}CCAR?#(@)5k)Y)Sm^hYq zF?jYO^o&`i;G}(<QC-!GxXi?ugMb0O_fnQ zTqpOR^@^e+X>36X2$f%7tSLz=irTzf#0k6UHY)cXLHC(gep#SRJaeC;Wv3OpZuRk7 zef*#5#_#uY+Q_)3e<;Rs~5|nXd}Lzdq;xl1wfxw9mSsJC8>~8sP%$& z2~7_3Sy>b4NYuP3))HId%WO`)D2mF@DL0WpW5}r?O<+A<(r5=h z^F&;W?T%eu*1jA;(`O@a5&|$mu!&0%P2}XG+Ikc|jL5RGOCP2R%R8}9wBy#C4W(*WJ1^lf9X;M^R7 zL;?tIZpj~=GQ~YMhqsI`yZwCm)y?0Rmpt}3*>34W%1v|DS!c%Zg;Z+L@j+-TJde|`3|pVg%DPw9;EopaAU zSDyB?r~RKMqkqXdZP~I#ub1M&|JCcR&9}+-ulT&|zIK0k{KF5^iYFDiSlP!2kqj_` zgo^9X1KcB5Av0r%GT^Mj9{uIc2B(72;+%2ntRcqAyE+uUs9M&c!MPco78IBw ztS7Cmu**G)9AW1Va{ZooXyP=wz5;dOH;qTJvLc*;v#E3P96rQ)dbf(Ci)6UY*&sP* zjpMP`4Xu}tef1BrcEuuj!}A^~ld}!!Xr~fSg|SaMS{KRC1Zui7a>@0#%0*WW$j9G! zkS;0rje8pBbMk%)fNXHJJGEJa=K^#or-H}#2_V*uR%gbhu`X$jET1(#ZB@KL=T_F9 zQO*_dFW}E!@W}~paPBr=c20vt=l$A!Vx$uAB@;}d2*GEgzz6U1?6UV*Yl5w2*V#;L zs~+fC6?>f)X(KYI9MePrtmsJU9v!na;r{cdCD8*5M7<2UH=vb$cj`XACi1vrA_@02 z4m}5!&U!ioKL_vCHB~W>Ikl0l#O=^E_GnZuCD1oMtaVwPw|mxgUzh3G33=w;FOeOV zr_ShBAOF95!>vBP`5J8;T_>ks_(3^h|5wVgzP0*{mSTJbrwufLck0Sq{2HJK!c5EXPq*e)ePj) zU(J%S9MvEx&?B&D1*B48H&7bX?op_n23~0e&}Ji8oPP*cpYx&!m9vG|Tu>))WFw`5 zV<|)vy@1H&BrlVC(gxVNNZ9sW0NLD z8plQa%IDEFaXu;jg?q(u7mC-7mgk=kfWUBz{H+NU%hn&!&FVNWU8~XcvLxu5l}vo|YJkmCQ1_gx{E{qdL5a^WpMZCr831#;AZ zZt{Y5wTnrp7n4(Xrr0)qUMr#$6Bos5o;kINB9 z9HFx?&pGFuKjpF>kk8<#zIMqcWTzFoDQ^_R?m<5XAQ*$|Mpu)LiFQSl4>?y+w&Szr zfKuSxEJ$@YBL>qssSee^uwd-m2$soZA*jG{Tr`BPjB^jwSvVFyDBsqdq9%tEs8&;n zTwW0Z^J-WX_E`)hE?}PyPsDLWC2Vz|6NA#znIyrr>IZDIA$px2q~>O!=AeTP1C1gL z@%j}eRV31NXX6PsFcZ{AeVuY@v}VM{ijfmZ@s8w@F%~2!Ufs>jpX2+bG9um2g4>c3 z2cRyiG|=#lY_xBDU#p(A1S_Yu=xTqFvyl_d;5tcAre@~l8$Y>Qx;xwDsKfS^uJ$RJ zo*$B)_Fn03@0Z~TQO7YagYxUE2ITVVx9DgW94`)(L?j{va-(+4sZA;Wu+sgjso-&) zxelUt?jz)s&*rM8B;1@s{TXGS68w|{zKcQVF;FX&oad%1viV-!HwSJg1Lq}0sJ;0u z;Mx<)xAFupHwV`4>3x;4Fz)w;rUqqg-?qwKZ3ZXP4*%FD?VLvFl&a*;74z>}8U19l z2l1a#bvQZo1l_}K@SI0sBu~y&u{$J^JZHe)xcB9JR-fM&IAoPkNeE{Yqa1jC*!u*8 z&Rw;DY_NFGgq>VWgJk!=FaMOn)BbVam&>-H;2aJ8Rv({tds}^c^KgJ7*@w@1vpi?N zSIX{d_AC96+2R4Uab9RFInN!7gt^%Ma@A)NM(TvtijO?eiPKAT?P*PnxH6Ejg1x1zRn zFDs)G|MH=6?sRCY*H{P#{{KYx8 z<(hUT1fRvLgLmW8n}dNdcgiWJoFbbxZIa*p?ssz7VTZ}d zC!Z|$-FIL1T!7#5BKiE>=RPOh-Q7Z`kaOaE{`sH(Ss|~hRwZ}^p9ijc+;PXrK?fZq zKm6ej<@Vce*W+-l@L?bIs7EOumSps|zx}Pe_r33x3of`o&y{O;4k=w&&H>&nzsdE( zRn?$s-8%XAfB$!dLUYYec)}CpV;}pNa#(Zg`n9ipO+NFP&nQgy#v5;x&6_uCLd|F4 z!+!X~A6CvQ>-nWGeMxrNWf%QC>%}_K@g>pb+T-uIu?5Qe$xnV#`uqF!oS*o_C+hii zbad$X0dZ!{IL@nI{c5@4h8yJF?|!%bul^dD9F)(Vf0As!d>1)%@1wNx5@+%e{3^t- zXQ@>Ji>^pi@+t%8`5A?G`uF*6OKYn_E&LVXj9v}HaZ#ZJmO+Kq=XH72HO}qCC}OPZ zV<>X+*>U(Udr!q>CI^)TiSvtsJuk-}#L7 zj&4pk!;+R6P1=q-^&)xLc1z_YhwdSBvRUU)_H{0ok;#TM8nZG!Gb)|!Q*!Z@Bl5eO z2IRz7?5koDbWS73lk=^QM!~7DRygSB)LfV;3M*-GW`q$g9cA~?I``|!d*^GCtD5@w zpg6RgN+`lq{!DujCl{#Yl$0pAB__FzqmKw^2#g~P zmqZc)E1vU6D@bBn$;K(IVRk~f-QHOuNFjiU>X#1Dipt)~`yE}ch$-ypY3Kc$!qxt1 z|5wSH#XBsp)$WVxR2<&l>f^Wi_+~zy=i?Kf^tno$x)k_&VT9sIq^PKH z-^jiCocjAY5gvZml8KSZNT+&0ZHWln>>jlz-i&ej0Gj}Wf}grJz?ZXky#VL@J=A19kuoUgW>QnE$IrgM2GLIa9KHy&sVLB`{3VbW>CP4{*7*U>`HQc?o<4}U(@Qv zYoxsxW#&9j)*JuqiF|Hmu8Ky^j8_zT&1X(%Cp=Ok>&P;ldtc19O=Ilr-hsNI@atVx zea@zawTKT?Roh-$Q|qu-A>5jTk5lZBN;lonMNwCR-@N3ubL6IV zSCEXJ+xX>8KajUR?W5&Mv*9^m?k*2;obTiUDc(U<{?){gZi3&hyHd`+{=ejyC%#iw z_T`oKnkAzoh9CXtM>R&Bu?-tNt!$vee#o^tgzO9{nvk$si`S> z=tCbWkAC!{<;*kB)Mp8iB)WJUucxO+PCfNhIri9N<%%n=&;*Nw?nN(pk$mGD-_WG; zmRoL--FDke6DEX|a_91&|M{OPxb(KSy-fv&{6z=!`Okm8{>I|PirR zk{mwfF^|z}*>Au7@|{{6)- zezDwh&poXd$P{vC3|?VIHFFL;PB{w5~z={}8@d|JA9bdT#! zjr)mXMfk!KB)?Df5iWH!0iQG8@1}|%gzvE!Xs~w)s<;O{r(T?}BEXDxEd0e@z=0YU z+#uwdhOq=p%| z0wG|Wz|F=9EIOU|MuK?u9tjsd-yoY?ls*s>xr8RbH(RID1=ZsGY2G&_?O`qSdLrmh zeF|+JYnQetBuL5MS5@hW*Efz8T=XKDA_l=8W1nKN(q?#1R!}1jdF5Q)mXNeiu);rk zmzneTVr^9UrO3|j>iqCxOqRh|4MrPhu5$ep@M1^TeL-vzxGkjs=ZUln43c0)aUK#; z5+7zOJ5@n_Rzpg@Kj*H6;)zX~bh>|`;WjWnpuW_Lf_9%k63r9^T-CNet1&X*H5>)<;?q)q1 z<$LwtL5PY(^G84WQMp7U#1s~8zWHW7rG#Swq-`uV`9lM7P zAL^+I2IWS$0H@IrB0xRbyL8|2clK9I4!J&@0>(WKD)xZfINk=Uuxc1Htf+>WQ*^Ev zT|IbqPQJ$oU?6a^?yO2)Tuo-(tG4h^oK#P82#+T6c5^T(&cPv3B>jG!BuD&K>?%>z z!cj-Tpwv-KJVBDm&13Lb=JZDPhTiI@32Vz=_%VPzhZovLRLd2X2ztg zZCvduj`njux?b)b7?xv?+O@LwoKs!61E+?w^Nyqk1^&6%x#s&gaOe1z(6fxPAaEir zIOu?JQCR_fdv001BWNkl z;=JCouKSMMvf*ku`oLp#1V`?5e=yyxKE6uD+3Mrd6LiWsC&x!l*&2pJ&dDDg+})Uu}R>%79@Ngo0M>E zosVj{fp@Pd4&YlnLCjG{a)n|mUfWD?8Up^JNDDmH1r>=c(~Qm}oL8z2_fbGh%Id0( zFgK&?=Y_pA)nIXXp7;#z6~$-#hEh))G1f4&n#U`3WSPfR6c!@fmU9}O7?MR@NmR>y zF$I!(Y+4unbp4b%vWwV&SkmW|v-aFO#`Zacn}5gW@+UeS9)lYlX~TkoyuyvgH_Q5= z+XXf4mh12RZR7h_oG$Nv=BG8FR|(;{IZZ-iYhK}3vy%#EB%oEoY)yXq+IxN@=imHe zdC_CuA}b35bKP0ppQ9qtqbte6#}`S~;~w|8G8rY=Td`t=c2M8^<~Qp{U-`;cYElJc zm)8eB_(A!^CqAJNTwWx3$j<{2B~g6mJKw1tx@JN=&CZ1+3V1DD&fE(K?rUHBTKUB< zexV7gCuDy~GK#`5&|@4p>+-tSy-qubB#Q5U|NF~C8rbl_z<|P-bFXIC0z{T>uP39P z^wZ(>5jt02eYJL5f$9Q7&LyMu-=UjJ7nk$)7mB;64YS^Kr1>3^QQ*nE=!lYVvu<>} zdGJi+lH*DkS+@p7ZY=X~&Vob839V-v@DhI|&o!248QF~V#j zO%UhjHK6lA5vN86%w)<93aId*iOtg8mIT0fA7@9^Hg0Yp5Su2_2$5t|=ZoYp8SA7T zN*5y)XzBsE^9SKxdNAx0IjfcQd*M%1JTy>Piiqg37xz<9Q#qU$% zXH@4{DI{uYq@1zIdYU|bdj(#I1LU(2{=#n?e1wi_AqXK2HG*7I9A=$^OY{A@GNK!1 z9ZN%nw9D3-XM%f0;^E>jp0r`?D}0$^?yJq0?JZ^V>(c2w4}Z} zmYiBc@4a^g${jA78|C=0SnY1hiS8KTlDV)g#>`j<^`7{T)3yjOh3L?ABp6= zqR0#K&v8wW1Lc7d_QCfP*Gc!XK5|0Wbauklw56?pA}$n0D#t7Z7%s;l&~dRZzo&Zd znKz7BS5X|WKxeoJbkZn>dY4<1)6oq@2g*dDc-gZ%sRa`ch`6S2Uv`R&Pmjtg9)G+n zEkvZsFBSi>)yG?B^iL@`Z}su%>G|CG?~~<=R?8uKKEDwDGjSR%J{HhYR~hwhdE(>R z1SJ%(Gl}5vSvvoqULvgD{X577k~8cv{)wU;|3<6SeLnU8pM%Zt_`Qx^~-4g-yXda5Emwn>xth!}F=!$?bTT?>-S`YccU zRfJ}9PdEn(2L8KcavKD9G+`ebs6e>wdQiiqxt4qh{u#f;%LQBUc_dSGy`AFZ(-)R? zFO&Z6GztyBLvBQu-o>tn4H4`y|7hJ$v*m+@&$3zHiWoyHq*ZhbN{l(`cAM{xO^wNt z-lX2|Gr3u(SVTyO0=T=0j>df^76J0jvzoLfl8~mw231(Qsp6Xkg+sV~FY!!59f?hb z96#DMIKQt@D_CqdgFgir*q3gyTpjjiCF00}jw`pm){aa+3T2nT3A})R&|TjwCNS zr|?Yam_}J_RB>0XT&bU}C&oiVLz=|GtMnJJV7Q%;C(5`N&I7I_iE~?9+h5cfg~v(K z{k`vfPsNgW(d`9ZOZO7~1xYuZQk42`z4g{gTmYmP&gTD@WYq5$5MZFYe@ZgC>#nnympoCAhACVjqs3f&9h5jnL# zKARJQ!C2y${XVgt90SxvG?vyGg1@$`G7FUeoAoAekF!MiJoheDqHRDnFdr9S;+$** zPf|woYvNcKQ9lRgIYut7pA%~ooejT9SJSGtCYD8Im{(NB%XL&eY3uJ?T>hr3+t(NpE|cd!Wlx!$wQhJ@>$r4xkhCw6fzcTmotl*&o_oE_&$r6kUvxmZx9adM<~W+P1%aU_@hxZy%PI+;tDhQT#}u>i&G_q>VDQ_B z^HBVWoPPp(Qz|u4H})rcfV}})AdZegM2CGERlt3|CP+bEN>LfxP#IBG`kb)==?y3* z>vX}xPuzSyYY9?A(TD!ZK~4>+Xgp8zJ8gO`*kTe%Q^+;tT}v>luzo++sN!t`jl=q# z<-JMSp1-GJF9iZi*6YghK$t1CVTau}Ycaic?Y>sn-AGF)buHR#1Pb@U;Mx?+s);z~ z$t+OrsV9BBhn=9D`b zV+e~k#)RU1OKXe9Ry>C;a2Tf=kQ|dV({jT{@Lch{X?)bus))1LJ=Vs{+>}1koGbT| z7{t&*R#5gB6s-yTp2th3Yq3$0G?7!Pap>p<^BaW-SZ<78j*i1RU|0FUv7cdbdo^&S<9~2DAhKEFQ@v518JZVkj$# zsCN-~Xs){ZQu*mMUzK+r_Q{IyN_18aR5A)|l)0mb|14UxNFk)~CjB)#J1ehx)vHtl ziR6gC)3NO8GF&&DPm(zAI`STgBd{67hH_5xD_{AFtXZ?B98<%0NUliw=o-e?``-6H zO0 zTmy;wpVJxT`=_4!E`{knW%uVAfgE+Xj-EndeW*~xOqG2fZDBLK491%Hj8#|#?~`O; z*l~CyG;BCF4KF8k}*m;#a^}t=MSkT6NS#z{Q zSIsKU1SDL)&Jqn`7!-`Cj^i_V22{lvgh5T6xiV&{fZ;k-0B(*^XUwMBJw+{&j)94i z#iZ4fbKdt(Z&c~E@#iF? zTYdcBmyiF_#UEC#8PgaNif2#@bJ+X1A4^}(NTeblH?{LBYC-K5eA3$cb)`}Qd~5^> z2%RzaQ3);8UfMFJbl^WDpH&OrwK?T3az_Hk-uEOSH&&*kvjpy@7m$Gb`gge|PYzws z&0x%%)aJ%GBsT$|EXsutBWrJ za;rAlIsfQF6k?F&^o6!A&H$qztpu6a*3e(X9|Fz>Nt+;cko-F@}eM}A(nj1 zR(nBPsR|d8$XddgG(q?+uAAqC&MtH^FVyE~89?BHr8^AQVgnP)@-ck8$3Ed&;~ZCy zVfptszKC@uK4XtKx`xjn<`^3+m;dosa_hiN((;E5*EN20)fw`v{f?1s`qxy{7E?fL z!CyJEXm(1w9e!~x`f}IiTjWPqeMwF{{Itr(DestwCN(?nytDEUQJ#%2=aZ0ldD6(g zJA4$_3*9wdKste^@^?Cqd>&3Hs;|6Ip+)%>fgk>j&%iT9SO>u(lDIwg*h7;=5<8Nw zAN=44n%MDv?p)}U0#`*5)?Xx}%-w_^3N)1$$tfIHKL7T&zg^#hFG->cl$N9yxGLRU zIGgZZ5hFrP*Ey3UF$fvK2}LmJ4}bWBCdt5l*)YIa>5yJ^)m570a^3tc3cDoWbTU~3 z63Axj3fGf00^%Fj8P(n+k33S}0|w1n@msu@uS!Q5aU$T;@KWo)Ll=}zHRp2Ti6`p! z5Gvw6z(M7OfDuWpb4DFT&2K;B8PBLZ7yRWv&iNPFea!*#h#j6(kn;PqI%5*+9hI(% za{;2Wm_ndqWPQQQN{VSVN6e~$6k$j-*>D(Vg4|`Aw3$qJ9rsS)ZTv4BfDI}3SAB#_ zuENK0A<6T?`FYaC-`zOGK+&bP*Q(-PXUStADc4G(_8l!C27;qP4@Howr1+U}Y0Q&| zrZG*WOnU$7lHX#^c7wDt8m5qBH?gMSirOE?vg@4G_bVe@P&n>1_z~abH(7%?tJpig zb-|$Aye}vEQvvs++u_nAGLcf?v%PRqE=XY`TsCNT$2*uf51yZ>K-jEXWy-yq%fZ#` zK^MW{_x#?w%4$?Q#L@Dcr?zIOAZZ5ON5nUpYIvEN5v>S3FqFi{y@T_5Kl9a zj5;sN68ixw0u>c!@A9)YaI5^8#@TWle;)kU5qjs&Dml>Ea*Rn%bcEkfO3D13Iy&~Q zL&bR(BJ7RN-ZON!c26R_mIRGJ3m7%N%;01jbv>eJNBQj6IAGWVt_@$v-t~e5q80J@ z$@VNO3%$;7j&t@5Zd@I+WS#RZI+xh5lk4&4InH;rq!s>KqfE}#AE^T5peD?|&S^Y? zb)a~8K-u5fS0>UFy9mzN+aNrCeAQRvj?K5oTMju{dWxjDZmhTZ_^m$vFY)nb{Q6^B zOnKFlOi`cYfZ`*C%81mnL&u?kn0A>I)ikmGjSW_EivXdR*qEq4xy4jeVtX&aq=74QTMxTvA}?deS&6P(aq0 zs&*y2%UB}k-*aMwDTZ_;l4(#RaiLXZ4C!b)7dG|X2UP4(~k%C1-!DCq0rSKR~ zMU-k{O`KCsLH}1b|47yk-y^UKys@$2R5B`r?%va%{&ZEEB{@Vrmlq;Ahz9lb^(jP` zbfXPu867Dx+XnOSr%kEaK~I z_>Ohzl1#Zl*??vyiFiK8hVy~Ma6#xWVB|@1c;Ns`aU2ai(~xG22%DW`62lVVwO&c2 z)96qm6J$tmIQADt6r<%v)vq_FN@|ks>&p=?rY1`@%nU>1kHN)&U*d4%ijYiK8qw@#F&rS6?U@k_J5|1UN1G8=wMEf*{)}Ir;57Y%` z&$W`Ea1SX$#QAMF`gl%N>GhQ|J4=w#(5mB11AcP5-v9S};ZoUUrxkMO<5x;ciw##F zpX!jI$tmeT$GtY6+GJGo|@; z<>2pv<4iIH*DH#SxX)gdKVxNH7`6!f!^Hl#ay-iLeJraU7Jvjkgq)^)y_az>|cV=Oo@!4`>a| z(5A_$C#_VSohAcpjs!avY;xlbG?5CYMN?G35y`W;mAo9@8TT%B$9S7nyW`!g^cWH!NKWKMaZLngC)Ky60wA`0 zMz6<@V}<%TjR|5y!Vyc@d^)X~@K0>kg0}l>8)HZeTAj(Q{;|-tSX$^>`13<-$MIYp zJ~#fziYo<*s1V0w-_WF?-@$&sAF)S4aS<2C7`7B^LcgUe@oBZoUsKTMdAj`eU&_?X zn6zAZ*CmY$fB$1uFk4X&c?rnbj07iMxix_lf}*7rrBdGKhHz7d$2Z6~FFRFEeCBBt z9%d!0cmV!Fr;cQl&LSO84H#!;wChR&MECHU-~6T~bk4QJS(E&r>WUZ=V@9^VswtahdNQ{kFA|r$$7bw=b zZbo!B@;;8vjlFWkCI(B1dMCw`92*xQ8B5Nc^NKR*8f4e5)r}(6wOE}-O&Ad->_Zf4 zpqj>-5+q~1I7f$3#?QqWo1V-#$2W4(t;=b!Q%?k~qq=%kRp&8T)yLrM zE;ZhD-l!!l8&xJ9SaqBS$(r!Ic-5KYoHaF(2IFkxR93ma@BhlBGBqDgIX+}AGaH&4oTEBm!uzwOFCdBOpU7mQHhcj}N^M-#+AL7g&l z-E_eA8ihAEL&xwr?|#!^@Oxc{qj@EmJ$2ZTJ=E~MfC1?OfJ^8{^o2)h-#EJ)5JtmCAG3S9l=nSY0ymGTdb<|5{#$$fjZX2vx^^Fk{=g91AK)sMq_?V?X|2byOI|FI;evyx`GqkeyfV zr2!_%L9C=%K<18#S(p~2)zw&e4`b~dMhqy`CpH$)RysfJZ5^e!k^g2KHk+6UhMpGo>WXhNW^3!&f_%b)3iEtIyF(bm2<+F zMZusP#M1b0n=3?rhY+{5A}ElQ;Zl;rY_FsQt{k|DL51S7);ZoN_m1NLL5Tsrif2q# zm3vDOqAnX}bo+%+lm{a?mx0x%t>G50v;UL4^kj z7HEKuNflq#Sd*p}?d*FBI}V#mA`592C*Lg?z({j2h#)Y)6b+>2njq3;PQWj@N@6@(+8y$W)+vlM1xkEuKLawDZvralR#=vymGcN)!?AX$PxNa%b;@93mK|>%`~T zU)ZfO>1m-LZD=VyHghvkmoAh??R*AwhA;_Ad=Ye$e8h27iQ}5aVYwPF0lxFgom;;g zrT(Hz$8Q@2V59OGJ(+1XK|qy%=V!Da=swDkK~Q{1o_OUFB;L2ey?NrJw^HL}UY|W56_g6M)tTHS zl()0Df~281!+JXkt`zsIah%;}xzLw&eo_5R5N>irP(i#GW7twesm7=EeM-TI!h!oy z_75@Om3Lks!zA_hY`MMhv+KSohwXi|Ebm*R83$)pZC`=smC01jPe%YoFaE5CRe0O=Vcr-9_8wS%Pw=!OIJrd{^H!x|KjMsln&5c2 zrl@qvZvsnZ6okKw8?sqe^eoqZQ#jOc5wsUj4ZF@6?JCvbvC&|2Y@Da6skY(d)2JHj z{0>*(t^95sVhPehhbPZBDo{>`nP9}C3bqZYW-eS(JX9zy$-NfQj8n+>`JOA|actHJ zV_hfOb4}bcmoG1sV^yRfRqX4qaCh`$Goy0d%~SHD3-6HEJZE2d_zsI?WNJ_o6dSkF zEe#;6lZEmu>XGw(GBPF4CT)*9u)_U&HmOo zzn9BySSPPNatC?XHrrK@175X`B2*eE%uq39go||#-C5y0oj+;NpV6Y?YeAY7S0*%= zV?QNzy)Bvy0+I9I-fx=@;+n2 z?Nwi!g_=g#L@|?Q0vB9YU1Y(19{e1itId0?9nVFCWAQ%E9Zs7<0N3y1oa#sfRfU|J zDrVAI(Sf}PbddAoI!l;ZQLKtxO&2BOneyb^3pO@0*9tb;{T+p?RUN&Q1h|aX4fWU9x7$jw({< zC>Z}YFJSsSN~f)0v#Wk|N;!#sxd zpmv`dHDg`1sxrHGdGRgW7ms5|M4{%zLV$`nP7G@N$sHiq7~%;IJblf+WX0t2|@)ateI>9sACUwTp3V z?6gNNFz4glM=#vs*P^yT4$7#~dbIVma0TF&vR;glArK&8uk$wl|5!Jk!LjKP z`SdSO)cLjjJuCEii(^?ZLUcFSY~H!|?xCw>`nh8i>4uPuy1{Z7sL6!eyf5bzV*Fy& zjsz24SR|TbH0~X`M;(Bx>!|^l*kZFRi;63IhCrN3S~Mc1kPptL;O}t`3r9|js3D;0 z=SIMTM}s{s(qnm-kZuddBk^IcmR-fnoJ5X=6Y)x_&Rq-wMx2igy z@OO+q9Lso}7-9IF6ab>Lq8dj9EY1?8n+d<5lkpZs;>S56u^-{m<}gOIFot3GE}BDe zqfmqM>=2&t1SuJ6)Ke2w#l_o{v(&ZNpuIY)EOnYVw()|dWZN(_n_xsC++B>io+P3Z(}>c{ z$>7vFQJ$8jW{ZTttI?}lrpR6hKqp4Us+}*jO z(OKC@n`*^Z(F9W?8YHG9(Nektqo#-f_KhILy9@q2V~ac>Bj`lK0UKcAYsM|3;4<5o)qBdm$KL5IQRTIz z&b=2VNZ38$^3KRKK_AP$@Du9Rv+(Y__4E( zlRefxN}j&gk(C0P6*`C1Kk$sxP1`s+P#M|AZ{&o8+&}VXYio-zR?Cw`k{O_OrH-(%&z)48QqEOK}u#k)umNWLLIfF=dUW{38CT;WY*0K z;`lqxDb9rEH}M<%W)wi;_$0^JBhH`X+P}~JbtDJhCpP0eNh;kRCf;hAe{E~OSx4o> z(Izew7ZE=SF`YBiiFYL(F$F4arE*_e%TYb`F@VH?@c6N-UI6ra!t>zg@5NIJ#S}2P zHuss>eC|&~ntG?%g{>&Y6YtnObBA?D*DvnA_=%S?Sfo~>;jLnRT{_ryy7+EhZ z8;0*`{Or1K$v)dZLDnwaspLgD4~8It_Hg7-@z7BQhfjiYbTJ2J6Mg*bSlrhbXB#<|ST&uQX?F~Han z04r|4P_%WyBUB~51BPMYcQIBZJh2PoBV1PXZ=>7;@5u3ej$>+VHhzW*pLe_5Sy{JE zw5#jgJ`EJ7$7Su3ZPi#C4`4(SaW?{dpK~JVTu6#vs9tNrM6>GD{ruH9jIOUJo#r}y zX2hs4GR7hWv?bK25K-bBak5klqu@#j5v&E|IXQcSa!wU6BMaUgE*%v?-LX;xb0s>z zmn2!SvsQPqe3!~F32KBbngc~OZcMKOXOom;t58mypYk9UZ(G7B%j#%nk1Xl3t|rg$ zdr!Ya7WK5tn~vO56Nhy}76|qCSTfPmu~fE<%}GN>q_bmI74S^5z9C~%4e9P^$jCH> z04m-qWZlrLG+M@`w-Y!P$!)LPa_^{o>c4*{d+oePj{b+;D&hf*EZH!!K@)ke#JW-< z$MWu>JF8epR+`4-kiw}PuI;clx(rCddv%>ak>@AM!K?Ve^oS-{PW@nASXb7N>nBjd zk$ZAa#XE`sxzHHTIfW>L;sNui3JZBhzYfW&3vaj>UmVV^iQL$L2BuMc(*u>5%q2LM z6&(Ck559bV)y30Tdwp($Ql|?Bu{Q}^{CB-r73J_1WidUbhmA?A@q)%n2z(No@_B>? z(IcQzfsP&&4kj|j3@XMaxU7O)?&8(YQ)qhKi?4i+0vLQqM>6nUg2K*}1vBs7 zb+osukMQGQ57BXm^g3TV3fx|3<@!lbj1OxGlD{Y{;wLB;`}_6tce{se@xM|c3VuUt})BUT*79In!*4j8IrW)Xras@~gQ5xT<1x@^p7n;*-)P(qP zBoFtxtHZjI2_Zu=1wy2~C}>jnWgdAdB4FPUpyD}%PmG<^ds5DKwOq*)w>T=s#g3T0 zjgP5}L75nok?E8SQt;qheWa$xD|CL*Ac&*+N=4n8hDg%ZNbqD=f{ywrE}*4w_d+a- z<8!{wadm%h8UjWg@n@96^UUnDqO}%|aG`i#EzFQuN4WIQZ}_fE&Wzh=mkVzBsqC}; z<7D6M4lD%`TsbOAQaetX8{xyuT~(5dm|)@qKY5*wc8S6IR%5$$1^&OR00!ukbB>qS z9DI_jF1i~0Uh34PZj~#))?pPGYg5T>r~$%}=sZLW$J|s&AomR%XNj7KjuF+_L{Yi7 zKEfq+&}_pw)IkSD7vnCRv%xhuOb#c+XLz~z!vD+OdB9s%73sci&Yd$E8c6~QC_zAs zAZEv$$1sD=hzT7>oiS$}a~k6q$BYgjK|v8wF(4oyf(Q~i-oAZvzUTe^Rr}j}ozth4 zhv7$9+c%Hy(>ttPd#zd(zWPd$SFZz@8uo>r*3Y3tc;B?gsEXoI;(~2*PeCyu=h65B zdRO02TFyY)s)g&D)f5Vv%(!r{o$$mJZLq6pQxQQ-+Vq=yMl^1;U>1ybk3LpYMbtDD zUTNUdqcLIdWMkufsl~vdME}IbvZZJS9=*vb!WrruBRVWtbifv?&4xL_zi}PE;}G$U z8ku9&7Q|`SJK~;R(l9v`jH(H=nfDwXo3{6U>9=;&fotuABi7r3%~(&@q;IwZT}y3n z45xL>I@$yB>2RLH5$$X@o1BB?m(6ySZ62Moh1!($bOyYW4Qpg_-rn%3i*4`$CpEc5{JAFq6db9PtxrZB0U^~o@f(g8-%IO> z`M|nqbVP-wAj>UBxU8x4=JGM06mV#S$Tb>Y-p&aEqqfdErp=hQBW0};{~qwCG0$oM zk(HrWLCa}Lw93atU<|{B=r=VuLWwl%>!u#U>XU~&RF}mXm66J`iGp)~5Dk*6?#Z*g zY-e`D$YA}gc_IFi{UTp`=aj&k&N#)Md+e)h-I6{11tO3WNDu`!aYQ?dzLn`)HY4X@ zZ$Kx-zPr@d7XeE27JIBnV{jyJWCGn04pN08s&q+(z*<_TcOo+s{VY>PTLr0Af5&(g z*h%Z#o3XTVF8UFhg?)%1B>S!Rle89hcx5k0$Es9={kW0zPARJtHlZh^$&+2h0@2sEHjzfLL{g z8oSGWa?rmW8BHN%TyM>cyA!YMwSs+oUmQB=I58xP_1FWN39o?WSy?ODQnQ}+K&?bT zm8@XRolDi(dwsGaM+qwS`##SeL^31h$&zx937ZupQDm>Z9&~oX?Nsg8Bpm2doih4s zTs$AyvY*MmX*Pca!%b~F1$EO_bl70n3`M;2z*e?vJS zLw2j+_DW;SQ4|kpkR0xCk{APZk^Y=A z5?b@j5^^Nq#P!~)rJ=UO^#M$BbCX{4p{OGY3WY;WsP_^@S+#f85uR{uAS^Z)8P$q# zNI?U}l-8W^{%Id8z9}0J&q$%!UMes-Yy_bDI{HgRsEtLW3eigx0wY+!BZH;d3O2qp z%j-c0Y9!d$3YKE#1K%};a*7}Wy_b?gQBT;`*6y2C zz=WCiMA(&)bYh^w5$794#v%HzrJEJT0)`g95i}{Iv;Ax8qN_Nf%x7i3+0-#eooTRm zA1N%=h%OgekJWVyjN;F15Ec>!aJ)>rT$Ob0{Pc^9o@Q#+SDV8sF^MmK5<2 z^A^TyAnXItp1}KqhVdfiT)k6czu_SB2!jqItDYry$iIbx3sGk`;kqpCgUdVx9+qCq z+y~One39V~Y>V$C(iXl0*#K-nlfRb_o&Rb(Zr_L7{nnp!huSOhVD7vU`1MUcwzIDI zlD+!mXq^{f3JdyU;bMgV)IR8OC)$-$4(sx4InwW71*L-pio2|y!4MKDwXtbxdxz0vMI zq0Aop7IR2C4rd6bm2ao(y+p|w(5qHGLZU>iWT(%asOjA1-y|HtC|A**hvTKaQRNTJ zH3d8vSEJ3Ue(KmnDbEKry3EnW?h(qM5{yr4Perb^Y9QvXSll5Kl*5nQcvtpOm5($M z1oFP&L|1`lU9UdCe2;WKHEZF*+6A2eGE0YSz-u@B(rw3<;fcZ8Iahwg4&L=B+kefy zeQ~C&OS;grFa=DI$yD~~>sef;;F&Nm^Zs%0clN;jA7h8?di0%FJLZw!AtZn?`Hf%x zw+)VMuopl0?d6!5+ySQxWnUH9!w?&_9UT15f)z#|1CV*l!VW@%is==niR=LVG%@s@ z&|s1tx&iA=Ta#2RTvqr7P{HA<-is>!Zp>0Lu4XMMU~M99GaB)$1VVG%%&8DeSSx2xZ0k zPbtbVUemr-s$<|ifsCfTBOS^~A1gE8?9`S9XAp>w>UH>cvFq`!>BfqY52d=8UPDI> zdhfV2)5HdfY#WDX0FS&PflBR$Ec5!xim9pHaNCm-JLB~GvGR7?jR100|B3~zOI=d zp6Fg;v-2(Xx=&tgy}j*r%H#H|i$o%;M(X>Bn9}sRo*bx=F%aVc*>T{Eq%DmC#uU(S zZGf?X2aGxWM*Lai2kBlymH`>F2?iMn^I=6Df=%y|)CK8TYmYtcesNx4egbu(+BLa6zV?9ViT#(im{WLy$sM zj%14)S;$WH-P}va3ALaRX^XOwicn)va-E{<%^>jJ9${)EjI07qSfK%`fPn}pSVwNu zbq5=-*LTwb1~QVaFkG1w{dA^{F6>BUcK&g)t0?4US%8k4PLM)lIU`LTJ_q zFZAb6ZudZKni(ot{rlJYzNr14{lpnX+k#QF+*=o|Em>0ey==|VNuS1kmxuQ>Z-7F| z@xjUmor6Q57G0@+FVQ7tMGKOuZoQfAQqB9?V*I7vYa<{Yf!1)uaE=3Rn)VVU2*<&< zBLJ|ozS7YPbh6C+a*gy6*Qr#&YY#^^xJ{InI7L8n+JkS}hm_%EZsh@!;qN`^GOnW=nfl*z=Bmt$!eS z)hu`>GQUA}4BVFqCqsvi!w2Jhp2Z?$&=|3)fy@WuyvTHQmdsE5&b25Q1gPu;_l*Mf zR=*ebH%XoAx=dxh=yB47$^(hpYXLB^dlQ~zD^Ul9z{QckH*5NcXq-R?}=44Y_E*Jz}Sg`Ge!&y$<_Ul=XBdPxZIt zoiIF|@w#Y2Utbj8=1zAC#cU)diVbwwGoWl1tRIZ@Ek*XIzWz-;Q^VobQPpCscBfj( zDkV|jT(2dcn{ww~n^izLH@d^8paJiM?%)uVvss-S{|;O>NDXKs60ptK!0VfVi+Ca> zoZ-C2%qhRA@iqTNv9qx?gK{=g;MJyF^&#b+%ul{E|IS7uW^(4=$G&l$Z6BMp*FEQG z+d4L9T^-{#&>b23`Gs&q+uK^KtrgOs?Y@bOPs74DYdxJ~;fQntEpD?neEO$8w_ost zy=?8GD(c7>n)SdFoQ-cHXDTJ2lJUky%Qr~p9?()A=DIY2aynto{H)hEbA<5&3t#B> zbnX-EWYbeUZWTnTqO-Btje6Szh2xjT}mOeTcBNGU^YF;8b4+&Sh|4w9^HI8GJ zW;8uAJ-Vqb;;wr#R`t58hsafRNfB__?DJ8^S7Y5~C6mbVcC~ev#)BL@b6T zPY?TEECT|g217x_848&3O`UA2$VfX3cVfsE_0+dVAlsAnJXN3$LyF*l>X6*Io!H`Q zLD}aZ^df-JWeW?l_OTzl-X3+YXWK#Rj`;g;3i*k5DGA&(^n3flPu^?y+3N&*@Bxqa z^~8E30Ea!LKvQbqYK^eRu)eiMDkvtsA3L4HfqG|xw&-;3$9~Qlp~L`vhHjQK5+xn= z%<4EojclwuKeCtggn|leftFJFhM0fR<8qofkG*JB|H?9Z$33GYXS>5d6@YapWU)TA z4=ad;ebCVgLL&CTW*I1)6JVsgdt={LKR?l3?4w)92R$gw_}Q-sN@61e4VJCmj7`_~ z*CNo1BaeQnTCUaim5yGZqec6h@HHGYQj$DUsu1NP*hP)RMryA|;9WJH!S%7J2woR8 zjaCa}Sxc+ia_q&tg9wwz23PHGwgwsDz`7*RSioyx8ZQEXjEQ*yiU`=Px)MZv@`Bqa zYT**)7&Uj=)Bf8ctkQc40f$Y>{S;VX?AVp?kE8^P0hu0gy`Lsul;nsW*xjYmM?f*{ zo`4e^90-y9719inFA)Taq?V)%^G_DuHJw1tcILNc-?snYz6qaNgh zpa0u$d7H47@##@_M)z8AfGr=`)jw>b;mm_su!0|96j1!D0$dTa$N~KQ=F9EO%fDc| zEZNH*ap=>nwKe)3A$YMgG0D@W=g~)L(3J|&Tt#>ql|ZnI1wNmMH3G$;h+_059wo!j z(TDSP0!b8}=OZwp9VuOML@92qt9O!vpy&Y$6&Rtzlncza-*0@-i<+6}sWDGvn%bVU zHmMoZgnJB*ZFQsAd%d-`MXy&J;o5>n4bt`mC~LtsnFK5f3_Kv0u*IbrEG=5Tl@tjR z8Dr1;cv-6}Uk=_=QM+KV9d|<)hmC6)C-USQ5Dn3SapSvSC{xtQnHOg!d{aRtT(2w< za%GHZG>tLwyOj0K+y7v<4*kKdxaFs|dGr>0;R$cBWqqrQ0`_5BGeE=lPM;?TKXwh2y+nb2pd)l}EwIHDlEc4625!!E58q{H6!osa+hN;_ zdq%{1sK_WSE;CS7+bhUr`Xbv|Wa!zvCZ^`>ga3Pt^>laGb053EE$R-)rW+HZ3-0Lk zc23#0$*r!V78ZJKcrqMOvh+9ztt}n)&M*GLwvSEQi=MKtty^4?%yFNnMV_srzIR7_ zcB-z03!C8PF<{UkyCBU7I2g~7L8Y2PvY%|MnrF>et64iZOuTDKVil3!FbLTgafZn_ zP%o0U4Rc-MaPtM%Nqm=P#6rAh8DZ^P?io*gmmu2;#}(NlkH)$tkGPK%kl&jA7eMlCh4b{P+@OKbBsKNdg|iU0s007*na zR8PRGV#C$*7k5=zNpv*Vv)8H?+_M_v^)=tk+9U8yksn5q>RyE|z?ebz>YgQoK0&d9 z*;|+cxXyQ1G%_XGwB3@8{&#)5J1zRu8FTkw6`iA2ga za5bN^1R)@3Vg0)IAGl@mwWODAB9dSR&M-tVg^z; zGD>lMbz1S~;`jR77WYf8iGQ!TOjh)(?_^}oIjTP;e=B}W&m!Zzysru>DNx?zCgq*$ z?`<|TzQvY#OP}KE7XBM&`G5V7>A%I_$EHSXpl9(8=f;_FUE_VwC*9P0mG^9^`*U^8 zj=$fu?f3S}8-Hkj*m||!mtb>8dyng193LQ-jr<9cr?-a~Lsroqf+OruGGMf5qpcW$ z)=AfGZeJ9{gQdOvDQzW_CT_31$}N+{w~DsFH%TCXn;c*Boj=qI)PXi{p&$^6`%r zEjPOQeXZi`qi52fq_c?6PI%zBv41$W4?zUkcFo8LoAm;fK58U+#I|c|-~doY5@vhp z(y+@mdE1_pjaNZ#?0xAt`5K%nXDZs?jMbr~Jn&t#`cVK7T~oEC!4ZrgKyY=;x~vpb z)Sij1N_`T}PZ`_2mKGwv7PI9&RhC%}FEUPjGQLyPaCVgQgnOz55#O2lN5XFNIDO)) znrqH$3{p2kn(;p9Gf(g(y~9~g>_yHvos^v^;F7j*sZezl+r1#+X=}mnU;WJ}#F?BK zcV~2Q?`k`Ax1;N##-dB+r7_@G9K1->)J6T5paLERagvH9?#W-b`AWOsx8Jbs69M(w zQ4yk?AWMik8UKGRWG>s?h+uQz-#oh2+U76Me|ZMyVc>SO1uL5O!RaJT9+}Rbj&Ob= zt68(o4tftR_6QPLF+OJ05cL=Lrg8da_s+H1@{EWicX*~M9NuV-%sGsc@gs2Ll-AAi zt}HlG`>BKK(5;0zuf0oqBsOM{QZfn7ODAF@i~wVj&7T9B>XhNl8>CN0WR^_a>ms163niZ3qhWK?&g7<`N(#v#5X2@{5y=GMf&u}}h>2WT zIc#;SJGfATM@D&r2RhOSmxv=8>BD(9l%_Jb9xPc1xN}O_6a86-3uthaQEh~BDkI7D zs^MXrjrBSbloL|S&lZ`%B}GOyf>;>Ud{cL1$F}$-)XK?FEg?BQ)Q(oDkLXWY)xkH5 zn8xO@$xSk~pW!#wJ{y4dye$}2<#a}E4$!H-5>|{OB53vRZrN-f{@PWx=ehxV=@Sq4 z@ot}3u<1FoMLlyiII+24J6vR&M`o?FW6auGsWI)hj@EAb=;>G3?{6Nm7eDQuw#$-% zx&Ty31e8Q0RS(Sg6>t*#DgDm=PIHqUUDi91IVWNqS@@}Po;72wW-YKOizQZi4kv|; zoz*S!ie^lcVJJ=%aPuyon?P&iRH>ey!-O}PggfxJ5^YG0c zC`efi-B20d>fcRF+TKfae%klO6sj)+2I2|!DFu2OA@RXXIOkbi5qohia$@g_-iNVH z0&=_6`nvkctR(A+>myj#<2qgt_|(C4G=R4s+OfGi-;Hn2{>8eF>`RX$7ZkCN`tB`3 zJW*uM1)pyzsQfi|K&*V`qPJOBN3ZKs^!v__#HFh9oKjaSamn0y3X35qP967F{DQp@ zfgpE{%5%e&44z2 zu5O;jo)*wO9qDh#kKi)TVNZ0Jwoa87EUMR?2$_3eA8~LGo~1xQj9-qr9BJQe{d}_W zPOw*__jYxir0kOQ|0kE5tKv6Zlit7h*YceBd%Zi)b1-u0N55|I9`=MIPARfgmAz8I z=Yu~%hp+nv2K_)|3>D-<(H9Y?fxRDl1pVcIo||z(H91QPmWf#%=RzeN&B%rrgZCPr z9&_77%@ z)b}=rruHnYBVJTcS^Gg_V6Fc`+(~S$TJUlpXMb>+kMQ)Q0N@B zrHSNRVMEfTVUD`v`7-IIJriFBBB1p9sgEl`0Pm+hv8^P(lASJxH?19wu|(+>YaPc` z`2|(rwNwe8|`dPM;Y6o&xe$3 zDq4)ylNg!ab^dH=VTwqkNrts(f(QJCB6 z(HB0L8<EGvYN1IEPWILgp32B5?OQ!bu87RLF2-n23#c-J)Im zR7JyZm=v*9ErJ_9tsQ<}{pRqKf*eWgdJ(W#aCoc?u7I#q(0b+whCB)-Ez~c`2ijrB ztFnsTuL|~6?^%jbw{<6Xa=r&P}Rb6ZRKFHsi%D&N8Lza!@!Xz-~wZv99w<6W?9B&jCYDKMi8x| z2=0WD#CKC*#Cu83jN3IgjN9oK+-!&LyTbnA0sA{)(ei%SfH!$&X`pMFZ5f%h1)H+& z&KX}1U2VPgmGiH&pImXXJ?F9e+5YR6T2E&XH*f?IP<`!h=_K_nFWHDAu(Hvk@cPaK zR*+R1iB$~`G9jxB+amLfVB6M-L7&UoY=VVv#+`>WYKmOga5s`uPk&s#O42RXsq57Lj>I?@mB(F~zdWd-T?8*`uMBNNtK8pHre!8{ka zPY`X9ov(WJa($iQ*c|~B?#Eun_}E{S9g#tru1Og+=o{vgkT(QicqWc8a|;=a~{MAB+HZyW2ktrsfySKoNl}QaqBhq+l`m{ zJ&sv_lFipz0=m^rP$&Y7%!zo{7JpY@(?e53kqrhh(-uw;ZLFBP)UJw5j^|<+P0vmG zp2zR(bAcKHrq7-d0Z`^6IuCuwyCF;D%=wZX_q%!Mdh6>Va+by)uDN2lH=clc`mG2S3 z3C88+OhvFCSw^5f?#Z)xKOa+TtD7d%^HUyd2MxmWrS~~E_TE@id9`ZT>#YG3RG!>j*itb@=c6-G6WC zu(tMgzvm5Gf9tZ_ZRtKX`Hj= zy(>!&h_G1*vW6qa;pHDQfg%%M1nY+JvgegahnaET+c>YWe8z*ylMz%FJ3R;$u2o>J z474VCPi(qrTbI~hC!)T*r|KWhGe{n=-qq*a_t)_qdx7#zSf$wZa+*QhupT`CSy-`E zTNs$`mzCe8S<5;l1z7*e>>&#=?PK#WAJGx$O;B+u`jEYlwaA(zSnH&MFvCv``+ACm z6uO*poaoZPzR6xFvZG-4k4&kKl-q!{C{&gh%f&7xW3<1qe! z5l1ir1DXZxEl1kAO2`g#FrXS+T>(Y?T{t|9U%i!52e+|>iyR!r#HJVTIp)u4d{6G} z*_wF_y^7Gpn`cjtcuzwN&#j1*6X+_l)RrY*bt87y$XVW(u5nf)ZyeimWTT z%QwM5loF5rm~CbIAT}B1Jm+AvpLfYk_Jd1rv7_#})*f=?o;EfeY|bnCR@vbAoK4Kk zSYH=e`cCWV=(h_m+hE`N;Wc)`eRi=29k$LE_f$PD#qx_YA?9E?NhzTN?{&-Y%|7P{ ztoXX|5`=L_1EdY#nP+6^nVW(+0skR0fi5of`^>m+$~Xk7k>$S1SgsOt3KR>Bsl?pt3`IdrCqL z?j6CNDk#SokP~B7=>mV}*^+VDdZ@de~5*{*HWSpUYEGK9P=} z@gS=xsi|Pt=niy+8p->d*hzofKqyVSjI_rhJFaK0h^&fdZy3APfN%?I0{1K zUve0cU5el;YyAp1A>YZFYa8H&$d3Rjb17v(kIW8zn{gbd2OanSavn_T%n4@{bw{+L zBq@OT#P*KOB)G2DlSux;!Hk+f>==+unm5&cS>J>>_9 zS^0As7;{}X3j=)BvQ9|>L4MOrH-3qjdw0fH;7F8$XGR2<@qEgOYUT44s6{ucOM}Rc zuu+sG(3)(_z^14~eLEaE>}Tu8Q)Q~L!La4nH`Mwo_BR6mu||DPtG!wO z8rP%xjWxp==w19K^b_;S$tXSXK%z0~W?5r6=6|Y%i_l7{2jw};ef&xOjWNo9#F0mL zU3TMzwh{*XiJ6Jo53V`gR`jp2`|SAucal&zTquGVH=3CozBuDWQi2u+$O|%HHxvu# zrHq=oh(<$kE)z$6ly*k%FG2=9a(6z9qGUb*ksT&J4uwNxis*q8yc9}LwA4(Py8eHY zLr&|AQKaaX-W8@zSE?xV!f4P02v)}WCh*9l%G3n3SJ^X9SNE^1>ygNNvydQiap&D@ zZAKjeTTO(3-BdE@>lPTH#vBY`oo$)^!# zkrT;S!J&@8K!-a6YT?o>10pzD+B8}+ZEWEZ&Is=r_050kJ-LUB60w`{TR@PumP7%9 ze|R)3=|L6HRO;uV88>sB-!RZnILN;uIH6u`#Nl|7OE{QpHdRJeRQO^d)_V#*!u9%2 zA^+H{wb8SVyrwWQQam%`5RCesiVg>w8gWCXWSRB(H(e4c@GP}pS=JlDrgXF8eL07D zh4arl1)cs(8N^~vpzKlLl80xSfZ8|oK=Yc;qW7huww#C4$VR1iSA%W!r({g3dt^>| z?Pg(kGan;s5iF9e?-=JM4hP9^oFHLdQ;7 zSI4Y%x6}7=k=?Lq!anl#U)r9#4A>JNyr-=is3NXnVpenb&_^@2$+O{obw%>(vPL~F`be2h=4c8hlf$YY9NAZ* zwT(4l={$}7DYBm&Y54(TC2NUMiq1(l&&a$Jajy(_zKepQ+AKY&20=t8%)3=!Ob7!A zC6IL)m1b`#0zHf;vfq$RRWgy2q{iVGgy`O8o3)G@f?JUVDSGZskGYNwC~!FFe9s_H zi>!*~Df}Ejw~{cE%!N&zvL($$aL!Dlp(<@1*8A)}!_v{;akI{JB}LWM#R7 zh!FC)#U8-nyRw(0HFX#&Wb`obwHKiean3w@+}h^f!40BX&5;a3yr72(wmB@EpwdFr zd6Btd-O7(Fsu_9Wr$&=FGV7+4}yK@mP(Ya|Od@T;h^w42<}k z@cQh{bwM1zz998t@0Z~$qZC6IU7<24+8U)fEHuQ@t2NKL$!JC1Poo)oGUbjCmGD zwt67@cbXpaY$&KW5pnSid1t;W&teTBC+3lo7OWH5x&+@<(xKLBDcO+bKI>`T3Du&F zhvq)-kd7%xeCq4<8~Zm)mj&`7YPQi^Dv|MC)$|heYJ7p1%jPm9>mSIOzK-#lVbGu&I z!Dek~RDOVy!`x%8@Ehl@99UJ_%VE>gUN5r2jq^FRcl7?q4?m=2v@P}noO=bcgY=RT zrK-=kkSMG>^dvTqp3nZSwlwu*OTcg!mAynMqeB175qEt&H|ebiu`igDDg|S%Dj~CQt4$uc!wu>OrOR zmE1|8*<#7n+;Q7rY~v0(Rsk>tI;9I)C%pT`*L~NP_pi2=TCG+)_sXx@;@;(Unbn7?UX+ zsu^v)p2dX2uwf#gTiya3bm^F|Zn=xZO#= zC4?(tCC}9KMs)g56{>q(kQ<5AG|U!JJK#kXR6)wc`zs}ImDrRaZ@@tb3TTeh@en0C zzpJS-S?yr?q$Vpi@6rjUAL87Me?vJ#RaU86X^^VvoMrm z6B}|vcv;`F63P~tzcA!=1c5*W=MxqkXFr`MiiU|qONOr)CsAOWUu8hZK852EY_6dM zlu6g~<9XZsT$E)%>9)AsSX`QO80r`hjkOu7DHXd}`Ax?*`g~+=p=79A<(?=;MZ@Z$ zsY`s0tJchm;*-`I%w3|uMD_)}(Pqh*y6CcURJfMm)PjpW}%;J|kwqnARR zQ-?L`G;1Y6iWD9O1d34(iVy`jeo}bKG^O=ATrWb3v@H+6yYYy!FPedm&yL&h#CBVf z^b+;;*pNBZ#_Ck-PM8!yG|uzhq6Iv$8v9mfJJi}|p0M`Rc)H9$O#$g4I1shSjxg|m zLDfEpcTmG`jI=aU2MN&!zy2#58lACcoqT}pv+GLRK0y!9Y3u5U4R~a-X7By-C01)$ zuopc3AX`0&jq%}o-cS{A+(sLl~NCR#0?Sp6{%{E1Zdy}8b z9O5}%*VKUI*clm$AYs}p6;xAZA~oj7cqq`v_f@SDb4QL;S~o12sJ@%b4C@i2M)QaH zjKi-MLTZrC`qqBHTH{->KPiAIdEj&d+tQp;-D!UpsEu%91;1kKV&>$Y3ap9S;7=JJ z$ewwwwX3xlFyLV3j&&Q6^ngQ#@vZ&*}k|U}> zopU(&`m9Lnq@$YECo@*&1P(~lzy->n3eI$vhH8{gK-N=@pK}GnW(&p<6?D&g+a`OI zg0~o|DXCgTiWosi*HLvwDH-*UYa^Sq+M1;B%qZWW?5Umw-tC?79hqkvZ3~`5k4kh{ zijHZlF=P%i7n$=Z%PQYlXaZ%;W8Un@tnC?f@5Nj7^=_8=WK4qJ)54`>0k31kCF2>j z|2#M5Ul3WUl#G8*gSW~ktCrfK!DE|t2p0JBCxfWY`2h+Yr#+Jr8;z+%Y$XYfW|?d5 z8KoZM4lBkE;QqmU8#=#i!{NOvgX9mLMDijWOLP(XJu zg?<4F%R0d>bOO+J>MEF4kxfioMYg~1j+zT6o13m1BLA9l6APn_V1qjR_ znkx1e5hytURMAe#Q45pXJR2Wqgeq9XTE{Myy`%S!tYp~Hq2ubA_O-t>mMHQ4Stnut zKybOZMD`E_QC9`&x0Gy2WJj!3^t87|Db{V-L7-=`>%J%jn{?YFg~5h>fWr$Cr7FEa zN1smp<_a(jc&a#duqf#F2WT|gO8swdRAEe zieQBgi4*J!#|79|emEj3Y<{YFVp9(+em%yT8kCIL7vTtRU*9n}ecjcaqq(Nm* z!j=|)Cnh)YV*;}puZxQ4s_LR*1BiMP)w4;SGIALgYajv+TLSt-=DRR{Fam)nrV2<#4bTpZ zeAOcm#bsVF9%LQFP(v>JG#Vy_!Lua4P~emPJ{UccfivHZZ}$7uE31HsNm;3$5CSbh zHNqexd$}V6s5VgoL|ofj5S}!CCuK%b2u8D-ABM2X0}?fEY{8;znIPuUKQeaE z6BruI9~>MUOJy*)Kfk4!)6_`Da3m7TGntFP$vKwdxT<;;qN{B__t|Kef9Zy*dB$dQ^&dCe*U#PHKRx~7huE6sKoMb6USd--t@hb7 ze`D9*I%F?@<{`FjQI!$p{6<4t5r6(o&>bIZ(F~kGqu|!)P?JCQ9mX^AL$2t&#+oo0Z(bWUuqtWcA{ND9XlCQXaAwV< z#+Widtc5gFD#r6=7=H!pF>{B#EwViYDNI3(6>z9Y=sdt)X zX5yX5=tHy;8C*FN7?TQa@hzG`fg_+B^>BKpDipaA1^@sc07*naR9jK8O3Jw-qe97u z)~`wph<2yhzh=fqx$hM14R~Lk&+ox}8pe~HSwWI{mS-DgAu_2PE@$d=hT{2>6`$+n z$YYG5ZzBjc>h;!SJ(u)EP!ppGoy%Gmxrk@qT7r-#4GKm{!h-LC>A`wH_9`jS9Ams` zU6_I!7*i>XxUAnx#!v-Ds@7H28m+I-=Q#xU$f%-g0unb{zya&`qef^s-;Uof=FojQ zM5vguz?VjT(#N;5E$VwW0{P@y5kM4@B{FbB(ekfYBMJnhEURwUO^DJ!)G)`=Gy4Bu>f~ zfvtxOE5|aaM|Foa0x`%TtyAQAlmM{Sunjp!w!q5X6`pBDo{W`so%RxK#v&d_k}WPX z^to!*vH9FK@9HZZcJ9eKC4iO&bwM+79r~2L9Gydg!?U~v(vRnGPX!T5C~E@|Bk!kR zpO<45S$TAjbX?lPr5Wj^?`8C$Ezm#8mhv0_#@NNI&YW%}TMF4l|84dW>Ej4O6^IPq zp9H;cuLviLZ^ztc->T;(2!savwc2cj-7)H!a^#QhRg$KWFo?Z0B`6GAdBg)i=!htd z9P+XrWRY#ozG#bj zmWMM6wJuaQ2kmlX>4+jkj2sq=X!o_LMfNEOCKTb|CD_<8p1gHNt(Me>FcBl7p~=C= zO)xGAeOMfGuEvc)(#Yn8=U`a~uT}M%PTq)~0XQETb=? z12#ou#XGqpS`faZnGF`aGqQGcyK;)C-DnZDt7^>x*0X7cO*9O}iro&w3CD}Mn-=N^ zJQjyJf-tE8z?$NGuOn!qfFB~4=$WYl^uWaQgsr6JyMQiv-N4uehYpqXhh(2!3DTA( z+MVnS+RMEK>r%a)vN)-+BLf{pDpo^Xi=ih-j`WET1&ot<#6}Zk0s-C8cSk?4c}e** zuVC9_4e>rzmUqI5Lx?b{wM|*CLbLN)Ks4PTEBcJ3HP<{3ora!5{@2_%Zl68tDqFL> z+n)E>y@L>Lq212<$qjbFFK@KxKK34VuRWuer;cW=2ckiIW#qZub%GFTiy)ck_f3Yi zNDw9s6cT_S`p(=-p`3zttM{KaefH?W!hXT|jinNNCyWS;Svh`QW&+rwf8WHxYQr#xWi?S#5$#NJi*@Ktb!^Tp!KH%N6<1k|RDj9PlAPoF!OMfO-3N$#Px zabY}8_&4W$is7V2m}0<(OD zw$eAyv&2L#C|^ogOEYzXYZHXS4ocA! z?1Lg?!-k<0E7K@`MkD|AF(&JsMkL zdYOdPqZL&$h`lGcy(huuArg(gz#IYhro~ru>5wjRE+Vs%=Yv0={_D?JKL}5p(KE03 zk_+si2Ry!XvKrY2o7I50fjm9x8!SR*Q&qutMChjK3i4wEEZDSqmb)TpmfB^2c-nk) z!A<1|;~4Nv##>H$kCIM$O@Lsl!3GA#x`I`3-$nDf`7SAfp!$29NQso9RwcTZ(GR&cD9hTiqW}(}I z0w`DR!}pM(4N6Bsue1@kAZGYcg?OP*H8{iy>`kM zR(q$zjupw~yRtc{rf_EpR7$0>g$wUVy@}d8Fu%M;c^+28s;{jSF6)QIp4KQc*Kzup z(>UtGlL7Bcnbbzd{AO8AgJMU*3?TGzX+7ljlfL-?c?e@8| zF0&&KUSUspz=1oogz_fciJ^`0?KLAsyAhrv%y`rjv9LGbjN|YLjwKeuwEr~skTEAHD!LR|5!9-KTNmXM%=5H%5INyYi44OH zirFc@FUFwunJSAj@A`|m=1@k6jo848Rz-mZ*yavPngKyaQmX~jKC)~9myKHQi85g3 zr3T|$-1s7^$+^yiOe?O2QVFhOpJ4xrn)~21Xe2Gsx)r0T>JMGVd);HzS^@)z;0R++ zGYEoKLe|H+XZ(;RQjx;DVl=rEI5Xy~j>s-rcvPfyIPBVU8t1L%O>jsAmw?Ze!nh26 zh$=W!@(57l-HVYPC?rSI5H#?>TI{Edfe}56y%c$|XX-%y;-W~&p~S4I`fBOel$1*~ z+l>J@k?%P{WKsjy$aERD#g2qK+H+ILZv;9w`gc$FQFKEfQzCfDKH_CJZJlNR;9%CC zj=J3hlCF1RKNb_UXAh^aE7sN_y)cGZ_c-f9{4ggJzz0o%?v3(@B|cB3xA?}$y^(0I z;_8SV!Y&Wm6~VCX&xf+sk6zvU<_M}NpHSwSJunSGMybb;+YYJ) z4ygEeSvRWZBSYpI*+#LL3&|t&BImL%dPxWYo22)nWQ}}yWayz!h zt8B5^GW#uL9{~%#ftYK9P>gvNNR||d!naYNob`Z?QeY07wnFh#y`B~PAlQM9Op%>w zjWhQaT%0wpY&v7dCdU6r151&qjvC>V$f$D0qfdP#*ETwYS3#hd(;MB9l>bDaG7x}4 zc*;11fb#N(gv>7LNuw`xiZBt{(@}kej%h|9C9+tUxkV1@C|OTL&DHg+MaJL0^fR{C ziv6u+aC~d+qU*lvi~0C{AK@QJ*)K>(7-R~Ga6Eg_!o@ebu6|!gX;zPkB*|lZerintv71z_qbn_*21w)X@!M#uhTmuw9ijc^q*an$oQp~~LSg}oFs0GBb za%h+^94s!Uk)NH8j|FQjreT|`3||Z{#*o%qaQ|RHoGj{5JA7g@ zW|+iMr;T%2oV+8-nL|pJjh>Av&0sa7)t2$eWM!j_XinAlFyt15NsYB$jZRmo9Gqb; zm@0{=a_~LVjVbL<)VMGsH~}+Z^hET9X{}{3zMd0Gd}{$e3TQ2x1s^VDzf?3#L<)kh z@a?0Kdk`pSKB(Q0WT%ZE<(n!H#sNH-T4A+tY1}N_*e?3E2^ysFV@!J;Swk=aqJX)% zSts%d2M5xOX``+S!y;(>=Sm}o?*(iTBX+om+KtbQ+6o|n7K)EdFY|#b^BUmtW^LiWHmZTRsks6KuH3_ zn7kIFt;-F6wJ+i~ls4-}Ox&y+-Y25#Aw1S3YRHY*qGb~2F`np&SJlL^CfP_?KZ1E- zM8k@$O^tQP_k)33o4n=;azSqbSD_A<^N>BAum5nvBD?nb9y{jVOYN6ejapaNwB7$G z##Xg-;u+{dzOkZ_{9XM(6+~jLffQh~_x`{&bB6F}6VzUAipZF`LU4?%7KR1)^`61> zqU`8(Jtf`2{Nr92|EiVbo!p^uf}2i19~~(jqj%?9V2tQ}7%O`Wa%MiIEftw-7=>g% zx;wgjj=N5roA&eF5%9m${)1pgcU41Q1m(Ckbs8Bb&*S&;>0w*ex5{PdY^ZG=RX@I3 z&1M#6eg1KMwDOpBST}#?{nXTpbDSmJXmB1f;XRQ*hqpEC^3n5Mt)q!`}yy+Xwwl{t!Qf^ zVnoghhTeAnjpvrP{Tg>rR z`id9KkX+AS_(m#q35Pw{OGAFqo11%JhhVJoE8jwdbjVNFb5H(_ta1cqqbDlshwIC- zfSECWcdZi?76DP8&#kSl-&`+Q^iSmd!s&`time30zX)&Sh!app@1dtS4+lt$s9ew0 zu5;$2->`xW$e+>+o=I^jb4Ow4D-$+!0L%#2uP8-$Z%*4IH#^zOp89CM>JWWn5t z=d(u>fFNMR@7xca$@laiFhRefHWt~b_BZrUz`~hp>~GvN0=>gQ&Qmyz*dYYvqOLxk z9p8?UrZN9+&c@4HU#QuZi7mcg%RYn{i(nB@S6Ys7Eo)}W_*Q=g`;%mkj>m?g?pb9K z-ZvA*?#==KPRL0t#pqo#GQLZEpK@q1Fy8*v<-EZbaeeA-IO*|7@_k$@&Q?WWGd?h*7*Wd2C1dB zC2BSb21!>GMU=FjNM+m|M_%H}TYl<&z1TGFxyzBZ-=i3!{YR7^*{Z&Fa-R5#l7R2Fc9L;>HYP0J-h1T8P~@(>G-O@!?@$=X<$a6yi*x<|_y6(D_-||~>aAM+yUSYr zMvMRADAEViiIEa>upDnem{dJ0y>BwsV%*xeIo~6c1sO$*BF2{<>9 zIUh~lWjIxh-s6|(ixCI!l1X3f(guBOf|E-2s0@tH^a`5vUb(Wuq;zDKvK-^r{F4s+WIQ{}x*zJ=z~ zHz#%-BkjH>hXi*He}9M?|S$IH&ClD}>a-86nVkklGk?aDIfk8XWW*3f}v zma@2WK+B1?Tt0L&7u6Uk1tx?3q_21?X(eW_$O~-dfY})yUTW1*1v5L9Sp?@&;gb|& z`Cs1i{P84q%&sfd1cH33{64nITS~A)HEb*r4M&Qd(OmzYg5Qqgv3S$nP%8M6>x^Gh zantOn!=#Bru|ADcF0lG(X&BT9eNM2%%N9kavF&P!CIuY5?vJ>jC-FKd+7LZm-;$hZ zTSj~K=52PopEk(OBVFU^h1Rds%f$qhzSy!Y>3Wn)M-UTlsi0NwO}2;0(XEih&SeNk zlzgT?nVKX|au8z?)4xvMGa4!_9k)mi?V=$vqw<=`OQ<&825glBDo>uqIQMUoJF#kf zz_k!TA8vFA6kW;VmX9qU#vM~ZyXcXlyMQ>~-3 z3a69TM%RWYsn}X9tlTp8U_b~dgi%Xp5(~3wY01Z=WzuIhgb-W6rL-#C~TE+D~58d(KNY(s#G!m&Hd;6MwUW z4m#M3_9`#76?#PF(*I}128W_1U_=fTABy#vCv?w`uixUz(O*ycm29Eu>5UNL- zDk>-`#6(s`$nV=zB@IXkJ+35ya<`--_gH{??2EG_O0Ex$fQQIm%sB62P!x>ZR==LH1hm$RKLoY zpB%0k1)W973M;E?FxWWG27KY9jsK(8`)5{-hd?L>T=E9WF5zeEDR!>?;3*-j-e`#r zhEu~NS6Us4Qd+P(Vp>f!KW`QadcBA*vQ#;8TSXW9Rym8y40t?u8&V_1dRvQ!H9Lz}sX~|9!>K7~tzO;W8jj+xuCk|hxu&A3PEj~n6%(So=J~G6 zB1YAKk{KECUPeQ|YVno{al?9IU+F6QWBQzBS8Vf`Y16Kkv~yY~5px^*&8OZIP2WB> zVi5x%Kd+w**7Q*73H@}h&aSW zQtduR#0T&U*Czk&c|Cuu*rR?OgQjax00f$irq*)03IHTNB(=2^d(>Nv&#-v(>m-j} zoF-L^fI_(p;3^DW`CZra;A}NNN{*`68Rx~u2LH3%gd?8yr4KJfa}&IrY`30V?L$5# z+zZbwch)mI^9+}jw?(i!l}$Jw!Kn{li+^~$Lj;ut??GQ#eRrd|E#TpE{7qAjrG{8( zs5Z6h+SKXyfBfld6Yxm7LUU9o8Cx}9Axm?ly8pFeMjFs&|7h4cYmc;G(-NN9|ybk2|;%fdA562Y5Py_h}7Kf0agcr zRb}Hr4J}K2wnXHk?Qia6Hd>FkB0C9L03H5mS?zW4O{iASU_q*tWrh-Rnp<)H2aUil zQ}Q9tvY#=&6b}~QB zRpMrms_Dg44d0S-u}3Ax?G$niSRucL{T%ZnzpQeZti6?t5nxUIdNfj3ZRFZcKo(C5iaG zoQ(y-ukAunI+h`;vr756e_p0Y=ahK`w8|8XX|Lw@w0v0c>L+Pr(;y{olRPkKV8IhA4WP$>M2ouJUlur&Kd#`jmQ|QTJZM`pk)I^Kl z{Lx;JE{-4GPA-$0c)Z){M9TMt8y}JLvWi101^bbT<#!uO*~19HPkYR7=hzu8d&V(V z-ztJuZj*f+?#F8!Xt_ov9&;OE{X2!?622s|9O&1=t`JNsc6LwSSvV3UKH_>q_C$TI z@%MKYJZ5*KB{jS~e1*Y|{WN}@n?;9OVt3qZmBs&kS%2B;!>9@3HTIRoYs2-P#`Rp1 zJiZj++2UtPuNVnQ&mZY{d`M4xNusq|p<-$Ml^3K)c27kc;^+gDWg7;)H;IzLA*W%6 ze#LTGC7?VsI`kSkPBzkUdSls1PLE)~Q_COE>QjcND0INE%OrJd+gWh3pJy$f25+}5 zPER{Z9YlQTtM4Oy6&G;$80&xv$%a$d1#lw5ecAl89IwjE_Hp#j!>YC&fl-ExEOc~$ zivF5Vgyc99=LJ}-(n&WQ5&MFhgdE1l^X5JkV5h>@aiL)JC)(H*S+*z0($H97=17#Q zp&+drV#lO-e8x{yEv?0x-M|M$^bf~olIbGk`4x_Vrrsv^u#)$Cu%Kn zG3S##Yw`O@7H)6=j(PZ*K5dJl=M)^yBWuFuOdQf5)9z)UwAoLC78_HYMKzJs`i^ly&^ujG4FF-VK+JTmktvhs?t$K|EKouxu{wT%z!__A0TMD zg_rNB%A-h@`IVBNJde6n*ic-z%LsC8Am4NMUjGG0y0(A~Wx)FJ=v=Y(?JGG`L4=~h zhw<_S?(!g`4B7uk?G|!a=iW#FGJSeR*pid!#MY$Qmb9EQx|{MYd03!3*A_LU{s=~j zU;#sG>fKMmNaRI*6f9#Mg&Xb1zf=X?$47_qT~shOoDn$Dewj76!kAkL6Y7e2%MiL_ zZ)u!+xnFph=pbyx(vp&49b(TNfNf?Ws2=5v(@A^?Pb|@cSG^W;1{YNSzNh~67RpX| zFIWb1EM$R4VP-+ffZ4IRTx{%XZM$nY0tCksLgGDnE8VSl{$4h^r#HI}tH4}bLacpF z3gPoZHsOuUNbO|7?aHp(yj3%^6VF7oUTxm(DhOJ&Eu3pN%0f4yY$53eHLWmEDwt_U zfwW~DekDwEw6*T^oh?0YwH=kZ^~vpZc^Y}~e1J!VLjCZcy#O$d|G3sH>MML{?RKI! z-MqIqbG|E0YzJdYNxXZK9#4K{zn?WAR1T8gZT>~s^R8!xjh;@?N>{Wrci$aPms2f6 z|0aU=*^TZFgZu52MZJQbl!T))-|dY!9%}RBmE@!ortRRh>F|9Xe(#Mj3RHHy&ylxk z^PhxQq_cue9U&p>r29W1%*NBXx6#J~nLt9@|47#lpUMVo0ie=Txt<&9&NqYD*Muw< zN2dm7<9*XG`EKig#2mcI4D$`p%QyPOAH^k8&uR(SDHDKB6Ex4-C0B0Bx!wF=%;A@P~9cbhVqoL+UWnzBCOWzbab7 ziC?(DRt;dhuq0=uFY6^9L&ZzR#Dg?5PjXz?5Gi=`2`%sPuKEtLq2N1emiz#C(l?Xi zV$vu27xLWxh#F*OrqlW58<%&dO}eLsYaJ$i^HL>v4-3Gez?#Pt0VAYP zA?2R0=L@C6gK!@L1cmp>OfNrtdb}BA9E??+la=SIk~XiK^fit(`!l1Tihi31DND0D zC}a8~jSJm^1JLYD9AMR^Vm$P4!S&}-#pVOxMDW=CWG^hXFF9x4XY=36@;5hWz%;fOt!9EUHm2*Z1_^tPAp6w(oyN*g;zFZIn6a*yw=MA)I#eRsQ=dJK6yN=KC z?96sif<0j7q}6+s_)2>1?b>(G6mpkJ13yJQYm=b9)d4G{_Oq%57J+$(o19>FX5I5N z6BqlC=~lnZ%!7tg(sD=TA~?svY_Rs(%V*sBA89Jr~aN{a%MJW)wUXaNMiejE;N`^u++k%z3w+RHGMekVmh? z3t&EP5#f7DRU~Z=jp*dn{8}R1-~NNv6YQH3Vy#nBFuUL(DLW!%|Eq3;t4ls<=VXbK zIn0(rc-7xE7~T8(cJcEiTns{uoGqhUXUZUF#wL~4(Y1AT^J_f`2j}a__0P*&{+QqF z8ZID1(15G47-?JB-7Wg2zHQ25fIV|IM&{b8`E=Ukpali3&bzyYpUK>zWNsJa@EL7Y z7(5g&wm;B|&WpprHk6c<(-RY@db&Rro2{5Z_h+SU!9(U3gNE}fEBQG=#{+c>uFZ2> zBiRS&wmXQ_@yFyEL&)x%X&CH|S_=6sfww9-c;Ci%h^KxQm)i7@dg-|Zm_6lh1*S zY`xdNEMt_c74aU4m>qVBmHLk@aNt4OF&(&F(jlw#`*VFQozpyXDCk}EG5y~az~Tq? zFx2sRpUm>|$q&&v6oyZ)DMHV?nD@z({iAZ+I|&g4%l_*heCOX4&1r`mQ+5U1m@rDB zjWAG$JTG3**sRZ1*(H=3*AANB9%n8z!)_2wDtUpszs~aRF7gnHcaWs#WeuGq(&sA+ zrwu^Kb=tFNzMu~5776!u=EE@jS=JZ^Ynj`lWGNbVP_oNH-CSz!$y0hpMvSdJDXK?{ zTr~YtT$^KY-1*zCt4Zfq&Xq?K<<<7I;GHc6w&6Q}rtN$~rf(Dk3vbM@Z_lpZPsG_g zP&2?U%sJtW)-+^L@HB2L3j7#y*@vu9@B{FI$K7ssQ_a6$o_F2-dLg!XpT18daEWV~ z7eA5>yGbY8PsEJBo0u+x{dM(UKx4}&^LL{Fgm7Kpc$weF(KHLTzZviq1m}Ih1hF^T z!Ml0~H^|UC5-b+I%U;peap}8@(W^Gd>O;2*?VvTvP(5H8{CYy>Ce;ixM7U5$LPW$K z8yj0QN0*^&$q%+PU21~%y9krH98ccwB;u=?Y1tC4-wP-Ld&UP}uQQi>DL0ZQ-GY`; zOqdbrtw7Siu}Ie$h!6R3^Y!siwa_KCs=zkc%2%hKy*< zBFCo%C4`NeSH8Gi5t1(632b7EB)T5f@t#5y*|6i;9w_=*+b`B>KLqj7@po3EgwB$X zxsDk75@<5swpE5oKhFM#h>biwT%&HAl|Bq7o%NY9177V{YfseQ?E__;Mnlf3Z(z&U zTcQA*6SpkdO>r^jwu=!rS4=hoeQhhc=pM-k+OL#uooPL*t=}65cqz-EvPNgUa#0Ld zgNCivfAQDtFJ_FMpO%N_C-P{)|Z1=hX;5+L^kcUjr-Z}FH zwbQ!;T>bCP}naq+4 zR4!U_^!55vwu%4oR~E(D5678Xp!3Fn{UdZh_-PGV;v-M2(OCH{T->-6UabC-u13H4=hSYqbT$g94rF*`-C0B3`ctrf3K}$9_}>QA_&+1P3Pv zO#a4@f_}5vVT#(m zz#-gk%?-dfpBmru{#A<3BMm^w%4d0NMddezIbguc$`Ot&j+_btF+P0w$PAV9X}jaq zM)IIszuJg)s{k_G2>yj@;wS3?XSMrBymKv1xad8hY3>wOzS4v{PeW_UmnMjz*Db*O3YZL zg#zXq2cX2XhlwpOFwL)LX9M!O&I6DYnto6+(tu(o(Ved{EmQ1yexd zc~yFvPgyBT52}bN$;T{qRar&88Jt?-Q)6nCA)qGEudDLrWWYDI#y{=ewtorE8niuVu0PMg<=A0C?7HsZtRn`>j9N~AX{RQ^-EXWF!=YEx&tkXc? z$NMcj7n~HH~BzR$D`r}i;*vWfK?D)CQix&vRGLdlgiQ{ z_ET)2;*WfLltS-)(@bYx8z=Yr_m4ua`$EO^C8W;n#lW@+*^Djt?m&jU ze<`I4_Cti1h5a5C@}0KSu|66;zcBA&@7ge;KxoOOxLR$fsBE04AwKNqnmo{L0>mQa^?#+GHa6|bbx zCu=7!4BoQvujMB_8l5TWfxzx0&@Vx=9om(Ve&WZ_JD>k?>onPAAschRJQp(5eq|q% zW+A_*C_GCuNg4Ra{~2@+qgqVNiHLaJ=gUKH_LR?%7+yB-S0yZ=ThXUXU@q!hCm z0mZb1BxxF(tyhRWDKqge;sy0eTZ4(Owbgs6e|pa6Jq}n&d7xJ6p++)C3(0;Kbv^%= z0`)T@Y}o^6&M!YFsfb}Xd0I}yzCc)F;36eA@@Z;+Z@)Zp_0O)CuNBm)!EqI@kYh=ylca=bv71cV4etlz$lBK0on406%ZD9=bG`{VNQit^qX_WG@P3u*HiKdGT_; z4HzJ%qA0kC#x+@P9-hls4(jDT>sQEo7lZH}HajcWq#mN^$52DD`aOSMBh{+#b_IG; z3>2j|U*LGc7l{JfgVvh^HxQoIY3!uT>pcPi=wSNuC01O#K&UwUTuNW)!5q037aYrr z9Z(Ef(ePOAp|;qcx&AfHdkr|S|HJfaQU!C z(EJ2=EbeIS+S4@j=G6R(DAf&fs($ymOq&HJYHnZB#6n75_0-J_Vjpxz=309ZRZovk z?;M(v?8{0>plP8jicj-KoXh6ruu2}vp(iRW?V21o zS#V7&Rxz0=|3hKx6G-$-fqf!w;sJvpzVJ`myRcg(unL%}LC>Z4}x zRE>RFhG^n}iyJ5#_WtrULFPFC9UedhPo6g+*?nVi6mK{=RrrGvkMr|9W)2K-CB?PqzxCU!|SS`f~v9`b0Kc#oqp+02im-EUGJv+DJO`&}vDu8j64 z?jO07vbU=9#9j;jBes*3NjcqKacc|& zY}#qQ2jZ_F{HV3S_U$SqUG5^HTltuo95!9aBVw3c?RLG!cJ>IYOOOa{-rW-!gUlw) zU$JTp0RW;l#droLCLe$IfC`g;(xrQ{UG@(Tj|S2iyfb}W!F;~_{GbD0dO2xvkI!j1 znEHD9BE1UdFG6@zuteg4Q@LIU4UP% zC46&P%u6hie_PO%q3mQuGQTrXK#B$*DoXN#|Lt-#oncj!WU_=RgGnzQHoulcRXd@~ z)@Pf=k6XcwGNn#GPrC=$Y*ZieBH8*RgL!q#p=>sT%^&Y8*|*?Vn1WsU!ItYvB$A{T z*y8qyDfBz%dV(<;@#uS=>X_2U<@Z#rW8_H`r({Rl!}~bKeTP7nc@^g1nl|c`J)u#_ zi5w@vTDQ=v1v7&RR`|b+c(7bUrj1ffe?@dCK%#hbmI{c4B- zlXLOaj93m|%$G0E)Cb*cCTwzj4_uMYi1Z4WM^dJoJEQ|vv-hJwlE0&_mwVbQLLmQ) z+W-9yD8yOzLcFWntAZS;sk zhXT%%#j=MO%jjQmA?kgs$F36ADm+&br8nA(F!5L-20@zfK+1QqmGpUn`VuII$p^0g zK@F0*ee%<%)~5+Q^flz=L8*&~h?H|)GbSI|8IoL8a29fya~!!L_g@lqj86|&iEbw{ zPD@WNH9sYt2Oi%4MV$J5J>!UHdVGF0OG^Oi#T#opU%!&*$>hFd?9#!g3x((N3~yCx z=Gsk3UEE;YL_fgA3h?dF!4DisG7J4=5jD~15;R7n^UiwkK5^zgr&0<3 z(}9VecZH=yx$Y(jbD?*KAI|czZ#xjxa403P(D4d||00=ufbP zZJPC;PImT^=5hj> zT4Yx@UR-pt)8h$DlP3f{e@CP zY5^;E<8SQjV81E2hhQFx3&zGnRJ;qE@15&JoD!O-GI?aFojXL5oDaLVsy1?M^;tzF zZVZ|0i@8o$|7cAKvyWHhq5wgBCkgvPHUi z_rsoZzYPi)Ve%@6&xh}kw3&p?ULXJ8fAJqG*_JQ}UNt)JlU-H=Tt=p!ZqE!HVCK~# zUd;(kh|8?gjv0Tz+4S_&8SsoqDYVtQWkafaR+kno&H4L;)hr3t&1IbNR*#yVh=AsG z`AC2#f5DqOW$s%w^DK6LdPj%o{9aStAC%$%)Q0G;z;Zn!6Ccd)P)M;}PgPIKLp_JFl*feE5fo zf=x~8m(=F@*hP6IC22^Yt#X^sPLZ=NQVrmGqw2%IxH@ov*c@CX-dbeMHv8mViFxR4_)rVk&&-m{^B-$$D+sP|84`0~-qlX?K`rUsXP`JfXPrdc z_!^?8P>iJnQz$rf=Gstx`dn2<-a$R1`biz5$ULNkHrD)`1dCjR3-w7UH24l}VaLgQ z{K6?KE4wWC#xSoU*nr6ay@a|S@&QktFN<9&U5}81CgZ8slY&hj?C*UVAoYac>zML- zYN>6Wy6?cAr6bUmAM|g&=3oBi|E31LSNC8DOyj=ORe59mNOoga)^y04=^FhfZ_`Cc zcXL_T`_e2-Fu~4VIX*l5+0W+wmts0S9N7VQ_i$9{ZuzT}I!)*5QL}3;(DXQ8eTK<< zx3Zh_c_Ej!Df|W2W~Kx4=h20XE;;5Ezq|A*y(Y}TgR+x09Q-{CIRSBL2Y}I#I3A>h z%c#^D4Eczeg;emrF!I@7HqjabH*IrJfl(Jy^68L7;%)tp_sy(@Fd)eEis2mFM&dbo zUV3#HH?nlw%r#hvkh6**hqe|Ig99htG>@(RvbsCKSk<3W>pwGbHP8!fw}}U}Yxe-Q zGX)HzL<$(+l8#`Rj}+nHg3jQ(%sF}S*&44P)1o1tSi&mfSVxOtv7J6TX z8lK@R(C#DSfiY>cDv+1p@d>`0nuF?HmIb?=z^>{|oYkNUfM`TTEXNN=Ut_EID@naU zxi9Foy*41Vge{@0wx)pZZD>J4`D zEGjv4Wa%jTzY1ZO+RE<3wkqV^S@!gTxFw}ff$!i^xtG1^wPbz`&$M-LPOv$pnsrre z?MSfvTVJ1hBQ7p3e*q#6!Zu{qL^}m=zGc8fl3Z()may$8D1j#%3c0jdSkL^4hC(~Rjlj?l?9tr7?ye{+auzk}8>dD;y;W9JF z+RSLzS0-~oaz%dJ{x6^Be?K8eC}?u#U1gfiUNj$1=PmqJYJRKT7iQMBDSFn;W^M^8 zmmF)1beFU$KG@y%Y$J1J5iHPpJ6ZkxX93S4PD6457#AFCA`q&OhlrJp7c=gtWNCl%}=x!>Ty@?AYXT@A^5^vj? z_Fb;&TUk9VcM-<*E!{dgNP1PT6GkA{v4)RV@rntMKc)@zXJPK69urHTgweFq%3& zA;E7D+Vvx{tWSkge{TQ@9=cf#5f@*|a4K`=$t>;gZLD$sH9l~$JUAV{Axfk0efwK+ z$`>LF3B#*|sx2o#@g@*+Tko zaPD|1VRbh;8csJ$a)Vl$1U;e;va`%gX;TM}m4Fw#PazO$rP>6c1UqMM{X79H`JqRB zf>epC9k*qPjFyh?mZjcOZZ4Rv{5;x*UEeqVZ9*O8%SRkTZB}1mW*0-wZ z=?#Yl=BmHxjre$*g8EI*rOO|F5&rdX=yp|ZjG(xiE-`863XEU(E+|S$Yz%E=0X0gL zasVfw+F^>kUH%+0LZQo}Vi%d9pd%yxrX%Ge%a9J7%-Z_lxb!tCxq!+dNuo<@zHcKVDK~o6IPaHbWW_bc>$N+qDPCM%w+PKX6G}xHgL-kK9G!hmS~Jn{Ki(J0 za&IYAiYAKp{%#bAxn!chmadlrRF<2|AXdefVPbk6DnY{Q+*7mMg^P==x>_T-PRr>z zWJj%HKsL5Rh{0TRA5Li8DFMFm;%HOPR9W@b(wJ=G^Ip2E{x1PO3*u9i3Lt58Ow19} z0TBJ7!Z2aNr8GskJ;c#rIXNT4B<9t zqgs7?D)pl$|EdXA60-vs4+~iPFjDAgkB|?{ys+N~!9EV12TRkTofwOER6%+d*ufVN~tM|Vb+`WbibIC)>y`f&Ux2kmk*Y|vv11@dorKxL>5bL5{qf+S2St72= zy7-dRua_OO&!zfMPYJB0Pd7(Ezgs@oZ3Oe=jR!g<&xQIg#8%P7`A=~RAJ4;^S2G_T z^v+FPPWqh8kt2(psKG_)cLKwo8#X_0rjHh)OT-gCC`8=Qa04O_1ck-fmR)c~{MD|@ zjwUaF!1trpY~sI@xmyD!1IA$3HQC?1=wM@1+q6e<%fgA(k5NQ{q-N|}OF1Se6CeL9 z5I&6LlWSjkAF?RxC#q?y$oI~CR6!`imoGN)o0Hi>gE4dzW{wa$?cX9^UTowJ7`%!L zD?2E8cMOV&^z;m@Bn-S~tyq&r#Y^(`nCvxZeCQWGJ0vr~c|LMAq>(>Vz{h$nt@L6q z^!oQPrg^}Mc5Zor>9)7o+>9x-PjAu!Z=KjFeeCxKbtdKh$6^+VS}KDdscSA9<%;mRqIn%?XF8RTD(0$d7_NYXv^`u@)+{cII$;7s!?!> zC|n9ERN5yaKrV2oQT}iXlbv=r;ljv{S zkJh8i^EYQBP?=BM8U#w(} zVWH`>=oR#ma2Ql=DD8Ybwa{PlSFhi~OeiH5wk!+wiJOcV%w@JSk%vpszi`KKS`v>0 zdBx@4<9}1iO}~0pUwgC^Vp7Suw`R8mDq%#1iyr4rElmlEia!_gMn$$Dz-*uE-hGhT zYH6Q%s}054OO{>Pw`+xjJffet}yJ+etrLZm#|fSJ0LO z1b%W+8?$Teq3vtzYQ=O8`vt{#*h+Uu%N6YNUH8Es8Cz;bB;#7hQMs2hmIhH5ag5q& znC|Dv(s9`1=ml@%sLetH1u% zTo5#%E1*L%pVK?r$z(=}RGP8{zI*w2N?U{P<)+Tqi&5J)NZB@PKNSiq zk968GFv1>1^o30lJBI6J20aud+S?>NJ1J>o*efI=Se959ROz}B!NPoO`t{ugws%MF z=p;IjxfCWVR8nilaMC{-#7sLV!K&x#Y@SIh{RFlvE{8x#J5b)1{2V;7j+`85REeo- zu_GCK>h(SG#U9@Hdv}$Z?(+uTa*GVDG<4)BEqx2VO;|g@%Q)8ozx&o7KNkCyzG~~5 z%W~T6zB{YyHe6*)WH#o=4@<&9hAk74RrGy*9&JNKXLFEWJ-j~l%LsTP1(gUQyNrTm zw{<0yq&^`s0$R9s#lGN(XHT0reZD5%Its^L4nNv}%O~7}#sUo$p4eW+Z#}$`zuTrc z%q%=*&*5}PN2iFZk`c`9KKI|yWG$Dc2M60eS+Bu{y~_h@C%S;|1!w@Sn&)kf`X-Gj zf@#hD7dj8t?nKu-v}FNn;P^5c zgl!B54EH(pT#ZNaf*ry=Aidj<%R?sAhlp~|7Hr^ zif#V-VFp(Fw3FyxJy5v{+(dV4lt6|-zZ4U<^{mFH$c|29n(d0Al)3Ge$Wc~Tk+sD* zlr=FK8`7>ojI8zYMwh-rNRVSS9k~fG@MW>a$w|it0RT1&t=thS{BOw)gL?0yR=o&u zmDW2`j;w&WB{`4PTKl%T1Hn5qyn^SL;Gi%Kv}E{6UQUHesb*6CRs1qEo`xy$gZK~` zGxuiq2BAQp1wRh4=@S@@7{P-_++(Fx*qyzS!~#*95uYC@j-W0Ate)jQBrp4;;vho& zbUIamgf;uZmX)9@nuU*N@rP7T!?UiB@w39u0^fc%mX%;P_nqn0~<4^`2ok`PJ=Wx9J>%^KQEwfJ=+O>5Ly4%v1z}RK~EjeT(G!(NxXR z6#=W(vDJKw@4%7AIb-IO*UQ4#U5Y-U40q-yYteTzSv>A~MjQpxUI* zwz}=uGQ1+ay0H3*O+Kn6R{o;Y6p*@N`^rwb`4fjsa)@|ouTMw}K0M(S)+V>t)Rwe* zJin=?UV6_3{Zpdjw}<_DhWHn)e2eACK65NvH%XxBFNt8WAY$*5<08nDj30wnf@rkGzXr)?}&N>n69?b=SslL8AB2Igj zNCg#qaQ`G_6n{Nj1$A9QW~Y)PL#p7JKb#Q6hg^LD)f(QJBT$5*E*iZUTc^&Nm}Y22 zmy87J#@(zM0ka=l1n#UDS7-?WQ36mRV3yR%^)Y&OU5BEH<)LBHcUljG&iPmFH0|wq zl9pKisMXG^N7y9~eibMjI-FD4^kvzxKiG`9QQ5kzs!oG>QQ@g+9k#?8m+Y4~w22Az zhRJ4)feXo8h2z<^G@-588A42U6c1z8j1m)&a(!c7TbsU2Kz6omdxgCL2Hjem=xP%#hoYyOLkw z6)kK{B1S)4-AHO939t?L!H5Uu%VXbq<$V`~Ww>hIiwA@DN^ZUb>m_mn(pPaKyQFsV zXrBI%lEUs%I`Mq%x!hudH=ifY&G^Aw;?SZ(m+WTeMvgxE(VTqwmLW zqYsX}kp&Kr=-Y~U_XZ0dDk~EmKQw>8mS^WG&7736CM(U#DGw$^y*(#DMp}IKt1ed@ zay4nt>?LoKK`Oxdjf8xiD-4DePO$UlVB@HO%$!K!^M#V?4aSpuu=xdwk;Z};Y}+y6 zYn_hd*H0H9erwIbD3$g{4 zuuASXi+O>Sd(d9QkKQbwu3_|nz8qmiF6K~vDS4LbEpJu25RN7==EbPH@{b*yQ&qJIMA2_%qvU0%jF=dg zp~$@KpX9bxi}dn3fy*JcP`k#fI&I#fEnc6JP$3Q`s_`;|@ESPZ^WOxVB&3~j55xQ~ z5{c~JuLTF3ddkT~#GOAFl`zMnai@oDG?Vc#4ISbkiQ)+FXGmSeGg0U=+#lhN5{=2Z z2UzcqPu{9&=HQFy8ZuzIXZIwhoZhVcs-YMSrxHt8XhQ?oL%s?{iQAGDJrozo z5MR}`u7>0$#wlP6SV(x7q|$XVh=nB?7|X@nBX2igIhW36;x=P5Rv_UZeh;dKM<@)@ zeY3P4la-~ZWJqf{JNxGKN_Az)Ud874XAV_cr;DPiIdndzVZSmyODSC zhkzG>j+V|L>syrb}CwP9=uMq~ZPWC%H>>Lq^nEq(MXf^TU6C%C^b4XJ4g-7m6PCnt4gy|%IyNOGjC;eY!Y%`N*LA1OaGJn_ zliv(V?mc)--k-!J2n^YJVdQ~&Yh?I{s0yDUD?0heITy&D^NNUXK-aC;?y!zQx6UKm zYEXQSOAYKHd6J}jNSsCopvfO6Yayb;Zuuxh+Tm-4HLlB+DE&w~%HanQV0Kn$#Aa9V zu+g0HJ+1+b+;dIEtXes)6TaTjMgE``ixN>MbqGOJM;1w8jnbGCgJ-JOLubIKGy>Ji zI`>C^W^WWkLz>hSl0|)#eJk1Ff=#%h&J5qIP?%z`#x{oltuG__%6|0 z*mxYck|M@RRaqseEWm+)<|^O zMd{D+k8;~rthCMp4qZkA4gS(qDL(KeE{!n}kZe?nmsLUiYVx2d4VS!IAw?^-?o;oC zSOYoun2cl@u6g1Mj_Cnq5nU>2FRZT@8ZRB%o-_f8K{25C6U8mrLqlFD7qBBqLgm{k zWBeyWb_dD$+g8GZwf64zs!whggOEf2v*!%g>T9&qM)DmdnN=h_a&G&SLCS$W zlk$C5>y@2=6y1IDm-31NMXXhPnKQ}uk@*@=kaIGvLlVZf?z}%Zew<29$HG~Q4_<8p z4j&CHHw5BTL>Tnof)8!q!i6IlBLptrJl9R|8XH??sBeeN9WNSEwKpTkgjKDAHQXhRh4SrmY-5sq@-*YFXx@S4HMSWJ91A zE^S^bv*WGN$}_`(N47zfX8Bx5W)SUKxG3F-b>?}<%N*sk1D5xi|FWl>@EIIl)d|D- zigGds69Rb^`f39QZHg%4;#`o~CkNbiYiD@xpkI|pRfm+v#d%~de9t?gJfXWLmT&{SV`!Zk55m=H_>;fnGg;j8*q zyoYl-TzD~@c4d!stVe5fD`j?jrCgl9sApN&^L`X*1fB^Cp$@}!dZd|~Yb7Bh4j}}@ znrE*|8vaCx>E=GL`Hmz_S@q#&RGP;=OiNXJ~4 zBmHhf2-o5EZKF8#mZBlz@PBu!Kl{eEP^v1j~JcXJ@M3|JtiRmUv=IjPD z8DC&`2F()IN@7TkMw?2Dv!|6b(Q>0kpsa5vD;eJzQ(C!l+WSmE< zQdGG=vJkrS9$^b%FpttB*8zBxA-609H3K(;-w_JADB*pLJc< zBWDZcHRL^{{z6|w@7ZU@&%9Yv&b!ioM>u1%jT{!w*;*EDX5FmGc*3DSIWJj2Ru-8* z1P<&_Mh+7Euw%qyVoj0hFiCU~?nhq;r&jAgW6yLxs;qR{no79R6L zzjBbsr8gKixfIL1mNh{iXI}^!K$AQ-O6TT|r0X&#r}jG7ksVg(#mtp+#=ZPZ8Z122 zd)JS=dR&sf`>bD_y}Sq51v!JDzkcmHO?GUbNL?rRGuk*%p;KfEc1$jHKyEWPr|eqq zz&2uy$kcT96Fdppk)y1ZGUc)Z^I~TN=13`YMnoPuvCQOtbO`n(N91h-xtx*x!r8^U zK*Y!ogsJotJ7;t#bx~YK2c|2j% zC?kE(e!tcc53_2mYMMg!20FZqKtdRDANPkxJi_Sqx`twbzz(I*hu$r0P*yk;2ng2# zNciqhTQen38cf5UD;Sl%(*61`*1*QGl-I$QHrLTgNAw^Lih!Lb&b{&605h_8(I7-w zNOLa&i1Fg(iJF{iBKGXzu;&b+EQU36Qc+GDF-{e;_XmOF8UY`e04j?5;CyjFmNu^G zAiMSyWe1_i^O%ckQyn?V-*;+tAa{+4;8`mOk~(2CF2<;6BdKc@yda`!MCt~|{VNG-=3qcgMNKHE-ddprU&y&3l zXUDLduc_(&48hLYIRz%7;pF$1MyY7M#wYY1Ul_PB80N%zWu2XZ$31pj*jP5B=WpIu z_L=oFy`Ugs}}=Iq4c>M^)tjN_CphTJ#mITpA$7ZY*kf zF?LYM%-g&N>=kR9>yab+yR7fJMi+VjM4oK`03ZNKL_t)8=KcNbkVDaI0Xb^=PpWTM z%HUqqGRrtfHGS-X9DUO#l?{Tk5o0B1&A@v|Q_E4Q93{+rqODs7@F!Bftzfr?VHhdl zM7ypM2G^cKH#l~3D>K#+<^STs#b)e&X6#QG!fm>F8!NuSV?}#w?NnCK*h|)h=x26-IUO7Yfc<040>i6(5hsXi!jKKzgEHI9acsN{ z4B@HE_G_V;J7dc!_lzIDiF|CFg4ASg zT-BOp*#%F5Hkpr8)uQHVzll;i()z&K{T;m{Z~?mdMaaUa6-2Rgq#l_kr8U*bM%`*; zh56jFR(xM;IsmajW)(@s_BdrQldR0nxmt!JdZU-2grJvGh}#{A{&Q? zasaxNB+JprEb7kH>5x2AQQ+ZFhA8iKbX?$SWJXPrRTFxSBhttXp5bg5qC9}aq4e6R z!x$P}W_+@#)x#)6w%ZBhOc~W@C*9CGOTQ+O^Ms=xoeSrVjA;y}-8DJ*Glqk8Cg>aI zYh+5SHJMUgQ~019Uc=D;`gj-60JO$_LtkoRaTta;`{S}1&ZC{57-HzLoTaSbE8}U4 zjHh{h9vO5uR9kOc1ICREN9H0AvJ=YLWt?%|#h!#5-<2bxO=%}c0Z3P*@P{+tP{9P| zl6kouQ3OIPf1zvAvzNDTR9&CHtw|3)T{BBeXU>j8w==GZ`HZq703#)^Qq#?C^mv`y z)Lw!;EuBS)*^(Rp=zP#2d=`hU_fApDT5^;l(l+t{{evbm|MGfaU_*b+`klDc0H7(g zm2)$9zR~L(z2!UbarhqV0dI%*HKg2P2-~TL5ehHOkxFN15EvpeG%_NnPo9?3$k`Z-Qzetb z!%lXP$HutWPtKmRE!mSSi{MA->=@jQ4zjyZe)i2TEzkeNuPh^1*RKwL>s_xd&wA|V zs=thget)M?#yjzlEEIpV69x6!Jy>(Si?HAq%9kNTZO4a5QR=bGmaB zt5fVxs#Lp%IejCd^Z;peYq}hf!|R7ao0WfvPE0>aYnfiqTrqZeJ`v4+pJUSr49~*P zXNHI-g4Yq{aGtHG28p@*lCxv5rG05LLE1gZX~(Q5yk>T4PQ1`*-=uuD^-}@N6qylm zwxE6X^~&0n#<|8ixS2Hcm=z5RE7rV0j2#XoR5FU4_ldQ_V0C5)LY4b+Ei=yyhs(97 zb*fIIpx>5JrvN`wTEC*5ZSAURyef(y_mU~(=wt5R9gdO6D#=k*)}FnxL)W$7$Smf8;U3Pj z{U(jpdkKHUm_)W&Hai{MXx%(lKw(w!;N05a3MAI3Gs~&Qj_^A>14E`?Cd1mR{6wjt zHejMYn#>Q@9R&)73&jYTl55YH!*Pxg_L_ak7#6pR;t2CWsO7^3V?gP6`@8xq*HMX= zk5GaTB|XArINVc)L9PdcN3hoL0vi;h@e(aX7cqZlO^GV!XhTG{Zb;(5cdT0&WKT7X zRjEYDC4tzj?4YgepGjf{X=wjXafI$Xrgw8xy(;2c! z>j+&>EsDk>x)tc}NMlgjy03wZvNr9Arb#5y=Lqt2zd~PGkW&^QNCJ+3=kb0+h{;e8n4@JyAbxx|a|x|Hc> z2W*rPgf55fWpGW^-c~TAh~5d^>N7~2GY6DySI1?e zQCXWxaZSKtWOeSg;8<~H*cl$g`@SRFk-T^4jb^--to%vf~Qshqu0Fk-<4-R_H)al&U~D#;VUv4PIMGn z6c;=@48}|t<&*>FNF$pPXi9O|A-Jgf+&BXN8^An+Ci>%p*%x*OPwJy8Hqpa+5Lj&9 zBNVIYqn@nDoe$&7%p0anYKBv!LfP1jLq9sIL+Aq%9`XRG;ZWjPW<6YQV1oySXyh>n zfcsUsL znv?{d#ke3k8`X?0QlG*r^19R^kp-a>^-vZ=Y3guw&x9j;wTFH$ZGPPBgO0Mwb(z^H1|D1;T1jXAV?}A zw;3p{fjHeF>PFh|s_4x1UaV2yK)@J+dBZ6Ew@6#t?$q-+YM)be!fSk8kvW4pwZ>#1 z;enFIeWd*$WDrhvTr~OpH7(rx=IF+DLTE$SkV229g*TV;#F|3;8OVbOFNV3(wyZew zea6n&vao>m5b)HpwaBM|zz3s*E@1M2p|RGvmeYy?V}Mp%6KVwp=FOT!`iW@?6u353 zK58VR&O1jOILnNe{jyS$5#t1SL$rHpUT4Mpz>FUHayqyT@0?v>13~D-hl2(L$8&Ox zuTz~+a)1I@Ai z85GTY+Cr82leI#@R8F7D${Wv)bTYt`y0Gt_6Urv*hJ(ePZ9L*AyIH71r)pzW`M)B~ zswX}v`t;9AAMB+UdyjL99*%~qn^(n4taMvxNAMbf5!zI0Dm97~h)iG{a*722m63N@ zXM6mam&+cQ7YZ)xZl%gfHg$$hD}#>IPN1gZSzfUx@Z^X{2KbcI!2@dn^kUE}Hzd2^ z({{AQy7AQ5YZ>*NPc#tEIWx8{qi6Jy}}<}<+$+AKQrCO(Tgx1e#CspRY`8=^Y53E(pJ zD%uGeV1@bNAfYtH&fADGu1HtN*aDtIn=&581NXvjS&z{DLO#J~>`*-}^3C%&Q_v$a zGV4*C_sokdO9-U(BjPs5M5j}MMG+)A$(! zIWI9I;ovd!4Js>poLL5ydpaUhZP+fT3i!HWJBJyU`gx?@3(G@T!daT zsF&A???(E2)EJw_Ww#869S|y)$l0rS>t)?8 zvJei-3Hpuht_Fyj5Yrc$Y=B71CS&JPlO4n}T4Z~iE)mh^>_!G(i^y-Z>D)bq{SRAj zzP#owKUBWrDc>4ty03oA50}sU_%A58oxDqoj1Bph&P zl>6MK#|i}NkkgpGF4>Uh;9_vHei=xEdjq9)M~6Kt@2+ivCc*%Yh;x3glpnx#c4=>L zs`(px$G&vx`IPp!Awlf)A*YcFeX`c;v)`yryrIoLVyz-giZ<+bl!qowrlz1+SU?kj4%#9w+X%L|kaUv}yaOpZ{nRTV zvQ|10?0f|w$_h--(v@%=;Mq6kgMK&jv$j#jkF9JN`Yj7BcV3_O3fcF{gA%w^+L@J%nhHuj5)_I8qItvXSojvtG>Cz&AGhoF>*} zNF-bU-UWZ9HdlH~b=L41@(})N{epL2t9;W&w7^sJ-qpiE(Ih=VL z=ndUW%yb+k){mr%$-qCQxw#bvx-PWibH{TO4NvXeL>Ig3;#U|YoDrw@!fyqJR?nE7 z#HMjOvpG9WRH=YqeqGUgcoDQ}d6Uui?VNDyn;a2`A7_+h^kN*4GH&YF9i@bSz!%%L zKmnE%m?WV?TDC)D%KWQHuZ%%-RkMra_};kIv{3ZXu7$b zN;uTB!-{GgviT<2)8soY6K z`dZVyq3y-#Y#AHTb^@^G$OL$i*Wa|7GXZU>W-nxFIjV5Q0GZ{Scq%x>nikTfooMk?Tk7h?J zcA@Q`AAiHYEMNYVZwX`cXW#VF^4!OLSs5LRmK`~zPGMwVwddND2Nnp6o?>$gi?-N) ztns#EaP@oNnW=~8tWAG#EvoaeJqe!QM|oBBu+|pI17C}0k{ z%0@bZ;|K?9VNZ#TF`fhQGo~<34yB}KCB4}@ygY*Fk2J)7UoHb=a9~M2wug^M3rv!l zEh{F9fDAU}9Y$FaoVI$2Le#A{#SAJt0-ESG^(YlxEKn8c#f3o{%Dk^8dQ7i9m{@IJ zLsUBYkp^_Rypu$!lTfolV#es2F%BP=vl(q3XFng_x%}>JhEPOFAxfXunfqA7?9Jr4 zIRyvrAoI^kuixzywH%e>GdxcmV$-w*Xm+}=Ce(cFA9TIOR%}EgW8+P2APNU4f7l?b zX+%7hR6k>cUNPI+a~FCuO}Cy$)^Ae63E>QLC&kKw)+rqsowZ4m8J%cg?kx~dxEYTl zrB1VP+6YD>Oj3sVOe;LSe(J-v8+CP7)LrudFAE{jMLzU*9Z^OgX9pbXkMe?|Wx)iG zvjPJ@V4VCb4{hy(%5x1EmfZfRg=ueFLU~+K<4bBk=#|mi5ut+OlT)z0 zR&f?rwTGO!+zZpsWUp}&sP;9bkt3Llyv(^lxs6)?wsjVBWKE&*9C2Wb{dQoHHr8#0 zWdV-YAHitl4R5Rzs-vBdMBYhdM6qzBF-Jy1?gW}Lbdqa|)mBJywA+s| z(z3#7#)i3O(1w81w0NcfOR7TYbH;pWZNvQ$Z9q+Fkt)MDiXN;O4%7^BZg~#h%K&*O zBc#>Sax9k~z$4&?R>mzy7>~iWcs@Lrvk9%b2Xco$s{dmcosJ?|@igtSk89h}*V(kv z0O9C-M>L_$n(6ftt#w)E<*j}JYI8UtxS(hDig}VI32(zN=iKCe>b#rO@;>rzC~1LM zY-7eXY{QYEYLuaC&i;+9W$9X0{8%4>T20NTeuge-phX+VxnZ<6=cEEGA}3J#`u(sq zCwhr)UK4NVb_$3VU(h^bbT*rf5|mSZR>Yh%_oRpPvn!Z0#ua;?0}s644hnuY$O`M^ zly*CToE~WqO!3lfvR$YnKHboG%zgbxCRo1?*z4rlUF%|zopB@N7C>bcow*-nY!=#O z4YgL0y>GAckY2R`~e=DmLGY4j3}(jVX7ru+tg z8THLLz~Fn9ubdn9uir~l<$$$Ih65aK8Rhe0CxE+9^xG2xmS!2_x^^3e&Zy*B&{Nin z6+IoP$i~T87!i4TsS-qseZCbh4ZIHeo<{T^zRkJh_Y8vM8t2?!)#n*GuA0=krfxx* zOPR=1qI(K7YOJ3K5=3UEZ5@o!=RN+b!WjLT-~Ybyw8wl-Ilpj+(gl1)UD1*hO)DnR zC-iCuC5=VHqm}F6I2b74Ii)8IyCof-tk48{<*t+xh?VCZ*T<%R5bPyj6P&Z08HkMu z3{jpNsFr(``Lqa(t@mkICdXUv1q6%X7-(oSV#c{x*eMP6BpGp#ak|}uK>$21*S}_D z%YH9Wdwbh{UU7)56fs_YmlwVgCrqp#k;9vW*GCAuJL~Fy*ze2LdX_1Ij-qZyT6mtL z3j8e3XNB6fl7nXtBQ7`YZRdJJ0)w<5GsZxBJJB>!hYlyw3R5+id$rq-&@LV0gx%XS~P0xR1ZF zZXH00l!62Ouy$^O-4}8^m$6z=U_D@huDRxZ8-n}{U3jgy4@EJfPjZjzE*zO-dlG9}DFmMxkXupEeStvXSW5iMJWdFcN;Qw( zXYh!OH0ns1qYF;O40O4+{ZW8#(GrS!jn-pr#eg}Oe%UMdFr@f8kjnQp%U*^tP&Zx&yJZUL36#yH)?5N{BJMEMCM=fOanAV#S zxI`9^BdVzxY?kHCWkqoExo6){)E$*litYAIDQu3^WVB0oFsV(E;WFEE1O$q#oB|b* z)%DPvG5ARz@fz7i9eS37fzlai)b={Nb`?dB8eRBNL;ygaZH+$D6MRsuQc_RGTY&*8 z6}P?*rGfM5cNpBo4g_S6jVXg*2|>B`Pj;kU7~nRLWc#E&D@yo<_?qt~M>P zo1zBYL^i;zXeG-+_L}|UT#%m2Sq5d>DeOEqrzqxZ4kKE2z*GccwAumQkW+ShMelK+ zRYyVky+oVT#S>AF+q5^UNV=xyP;>!#DdHvQFHUibb}K>qk;SyskxhKwU_+>dOMv%@ z$JN?l&J{Eo324vAn4D;=?{T;q?t{rQbCllB z5%>@3gO0j(QB0%c0iK=dHk_>28nkx|Ro0^)eeoQu>;|8UsB53kAe-q=N`1EFYw)Hh z&&aa1&93V956M(KMy;MXEgTl)ThyI~Q_K27 z^b*B^7VQ?Ip_l(V@e66b>pbw``$CT50kdI6S&wN8D!zY^-6_G_x*SyPJ|* zb|5<49D4J4az-Nb;MfMdh;;V*yvi^^wy!k2_G`jc<`p7NP@e{s3{;uD%hR~^g7)ux%R|6pMO z_y?0{46j-T!KOqsjDq}Daf-=Z5mRyM3(u6WBYmVso0PV+K_8ngQYM=a2cfm7-9(*t z_FI7T8ztLQ5vZL3JmE_RWJnJ;3ae{cmW&BNHO57BFqJ44re|spp^+#NE^ZwVDQe5w zaM#fIJ;&8-C?8$0^$~6J!3?CajgA0UTFT+R7%Ifg{232MPOg7r4I?TYUNRS&^K)kE z_AI-Pl!1lh-J3qyi7K#u5YobQwC8XNf_jOnk#Xx?&ijfZKx-njJ9>%EMxi&YMQWeT z{$b_&5j}4EKW6k*4hZuIg=n)XL{V#G!^g$*j4NtiSC!5~s#pdl>PJ6);D}T^-Nl~q zz7vHt;JJ+DNDG?UcZ-N4hZlOz@8vxxs5F^|;kaj%6@SK^JzVyDv37Rk*pr@9dwH(w z6c`gU2ZKNman9T`3R;7{SsVJ;njty5!QWLdU(Z7Z-XPUiAPf6@M|z3+Oyq2aCM87m z#8H6n2I?>?l!!1;qL-)@d(I<&<6ZncrzkN`?hO>i@kY^zh;l^oGx{aWGb4bv9y*Na zbB%YLJyCm)3hred2fd>7vQJj7cxD#d5dmP$7NtZw71M&vQBA|!2S4fd678lsMNd?( zU+#tKwPIa}99* z+nO@BcFRb%-cNWBw8Gr8EMz_WZ1^4q5c6^hJKyJBN>Nl_!bnl%a_>TPi(LE4=kQ+Y zs`UMuA%ko-SQ$J8r_^!1L~*#;p?)j<0$E6_D52+1N1e2F7WUcvIrNYvW#p)CwWhg8 zJz^Kl*s`2);Mv>W6K!*Ncfannsk7^) z=vj92Y#f;a{Hv*|@ERO|&@FrBGB zx>o3#t>fG@20iy{5@n!Qa7i2J{TfsAyoi7<3mbuVF%E+baYmhmg(A(kj%%}~h~wJj zwwI`!SZli1>Avt6_jEU4k~2om%$!lWxi35PRbz`|Vt-e3&;FXm#CIwfXOuGqXdstT z^S1!Eq82@Xu@t!+9Z~jTs{`SPqkrh2L1qu0y`=i_4uDT>{e(`bk1edOLTwjShj8e03ZNKL_t(X`$X`8vn(BYcTI*@E`f8VA5nPptX!sr&cU+AH^4_`C4f?jx+W9VyJe=h@vZ!cbuQg>~*E~+PHS~tQ;-2pzI zDd-Kp5!qrx**yejj!TPn=MB@YGbT*yjKNOkjL6UZ{n~s!Lr)>A63{~PGv@WG-}~P3 zg`fOS%gEBk((o7G_OkL7Px%++Ol{ZVnwcE3=3(-zAAmX+#33VN3nh)iPO8w1g#7m2 zcBjcQ_XYZB7rnJ#hY=o%D>~?IGV6utAA|?JKBbj zk+4*gb71~Yi}{3yDU39G57p9Pc+dg%fe=wPQ3kR?4so#XxtAzHn)f>&-OokIKuGZY z44Oh(6_fy!*#m9Y|0ZoixJg&+@r zBOF^m-ghCwEtFdn#%Q+^w7#q{I11oe$gK2dUY6@m*%P73ru40r#|PF_gW)-C%M3y&2BIr#g;B&AL&&oS zxz@^iV1dCp+iB&sk~emII>01Gqo1J-fm;C*L{w|3so~*0%$IY@g#u~5mA&{VK;};w zq|Jgp`rQWlsLBs&YHL8?cYBF4UK9`L(=DxBSMRhy1SIcAb};ua2B?`OMX!r^Eyask zwS*R!m3A9xHZY8E%O3CiT23hoa>$clbBY5@QjCv`a<(kp_OalaB zFl6VJ43`wyl=49qgaD-GwI8NE0ep;4HHesPwovSy_p^^=%jc}8`3eRMiax(H7Na<$ z2iPHG11-x!lxg?}%Cn<=?o&=CiX%&o;>=HxHPSkd!w@s#dz6Oo8S>D|bl@yR>Ybdj zLbRs#?COzT=K)%Sq8mu-C|Tmqo7Y5#Sr>_(=Cx%>H4qvnic)(c`er2?=O;>?+Xtce zW^{3-kX8hH_w;nCF;oxDcn!k$xjrAw_}(HY5QSC-w;wkc}T*vH6% zT8WzI+K<+yJ*HcpDa?eLUBTL@-9@i0i1;)8S!??jwf>quCEDSgHsric*>P@Opp^0P z=}zk&8|d5vy)kCj0rz`}N)D@hr>#$CJh{Hv^lY?K_AaNP^Y@%l6Y0LBNd}Knwopw2 zb*(MmQ8a!1s^mpZS(Zb8>xO6y`Q-Y2cuOvG;VkPcshdL^5r?M8){36?0r({2=3rm? zcGiL1OVq|)@Ny%Tx7m-*HkqI&@Hl|5w*p%3^6Mq?kS%`yh8931&%8}J-xj_=z+ z55K@*w;mN)IMEjx2dV=~IU?`+T;`OGc=J~~Zv((C{>M&%SLYtGe7^w{Oo-dLM2r1k zPYwFWICG|JWb1WXxUf&qR5n^2@cgxRyrO*RlfS8qtnI7~U;XAEEHC)9Z!0Hf&(_+i z+D~!zbRzH-5o<=ZmEnaK76QRLP@BviqdA#8oag;90!Qau*XPgl@oJPoLCb_ zdthp+iJF)@QdfoYhUd!!c3eKXkrv%cumzrpM#nOyq^xg>(2by$*9t?F@e)Oedbp$g z80}exAw&%n-tFDS0Lc-wCMBuX2V22H$O$l_*FpyG7G4pQ@@_9tQa9R&1!HvN=(xSc zcyR430))k8zV;?U6EKY2%hN&yrU)|*5Dik9j-vc>IH9*FR*$*~gbVBE-m5SsqWS$a zR@MNaJTX3A&dkvFGx|kwF$N*OVu-?Q5|XR$iKyIlz0WDGw*nzLF6}YWcvqy1WCw#4 z4Fna3pK;|>ZWLJ71ZJ_Zvr#TCw&-XLKukr!vzN{F5q4Ox7kKeGTUIdnj1*LyDB0L= zod^dV#A?oCL}KFH>5SHBCTkn0vh#|LN9s|x{ZI&HP#D`@qOP&ceRG2;Zyc$0i`waK zl#uxe4SBdPkH49C>s$)dV9pEcXk*YusnLF+J@(xKH=-z!_G#b-_Y!5Tvhve+r0gB; z$-7M7Nuq^P@_=ryYh{#Gr?SFdb1EPAHv(gNp-B}Az7WXEC`-{FvRm68wa7o_ni34uHP4iMy3lXv)G{Y3`(k?u4?z8MIQMvqmq`sWAGuJkGYJnCy{R8SE&e zc&vSI@YFRuH`0#7Q=Wmtw3n)9j7XDv&GEU7cB1Skb^(5|-kg7UrX3yJ9{?YbS{o_R z-E5)bQd9Y!_#RmUq=wdXK$UGw&PhR*6SkIlFmLz*d_F5GDDTW61A;^Zmi~8VniNe% zCyt58yH+q-5dee}-g)+#?4%qW$#q#$vU*MJ`K$r0IT*)&fvPS}^oPQ&FvsbP=W6!LQSefT{=-z1Ww`%dkGvH;=BK*oF04^!Y7#jUj z9OEpo7P)kS&yV&JT`Q}*H_N5@+nN?8Sq`I%5Wx~SqI!vLE4uDAJ+8bg>ms?gz23jQ zEPBCd08KC-^o&4m4JXd6G63z+w-c_Z-ycSqi*-*K-1LY%q@N@PckmPTlE6;}Knw)) zEg4cdxT0R7wIc$1%Xj<0Z9LPNH1Hi~G$B7!W4v`uh9L6P`f$HY#zxY_C_Fl9G9BdL ze4?MB^T|<3^t6_^n0H6yA00H>(wNS;AK8O$X558-9k$9j2GK8>dmJfL)=G^mX7DoR z>vF)0YE4P)YS=W^HDjIP+?=1g(CBqOcW$c`SOnDflD)XqAP(C}$GL=8XQMmI804Yv zwaoK7;1`U|Y0|lr2^z7pP{!phEdojJ?V=GQ&(Syfz*M%$q8Iv>_?>kXN0h_X0vDyt zPHANaI6Kj<2pJn$ce4$DV~q_8hYjcycw`KQcVrN@=Oh4d=gZH%<%h}_fAZHyn(mLi z{=3W9{QVb|h3QlB1hI*^*3)RZxv!lJuR#T)n3`{TlgbE5j8Rdd{cS}AbE*MKzLBJu z1O(5ZZ(Hm(p^xa{x)`oeQ6J2cm5bPIbg_VJUQPkvT|^%V4BZ%+pA@pan+c4b;r>4pY}0n|_Xw!hs^e_?ZjOcB-L)l}6MC=3JxDz_4=j zU5}xy^^KzNNGql&nlz0-XybQ0!;T!8iE0gY*K|nj%&@W)j4e{}5DG*yN%@5)%*0)5 zXfTm@KWz&T5VR6#BR+kPxyRpW|07VTt4(fyt2h%qyDsH33lS-cweMD>MsG^7$h|@R z4Cl=o;KzzTQG54jw6IW}a`GlBjaO|s@EW(yB0CAJkRuda|BI5!nj3V7b1$}*^Jf{efj?ek8~ z1ZxD-&h=zjDDz&YTA9|l-zk<6onMyXmusm}!Z_b}oO6AH(2)0cI&F3ATw?5wyu#2W zXzIClWCD7_h;T1a?u#hOpg~@CJtyz!*MJ#_$f&GRK6>M~pm$$a3}enW=Nx{OQ}tP^ z9R0LHi~%qDm6Cj_wjzkWYuSN#TuY%4=#d@c^dF1>lq3UQSOCgl0K&C^)xwL9#}$JC zIpQlK&&$d%ac@JPdlWJFr=!OfiesY@d1CymuLUZfxiu8eNBNHw_^6`_#OvL1TH^^N zFMwojbkG8iD_^jIfg^%5NOS<2P()cypSF(M<7{h+M`e&j#?F;ayB*UH--oU+^r8-O zztikJBFvz`kI8UxHiI)E$WmbstSANAbvU2Q^Pv~>5<8zFVmfHn82TW3$ogbZB|hg& z!VCDExvN%td@7uVq~xlcC5&qB@29B2qmi%dhtD4J4aGBhiMFj66vd&ZWG@xg0D`O$ z$_+Aw{b0>0A%V|vpWCQ2M08(~Lz#}4cZnEQO)I=4yTN~*9&blNKf3}sz+UI|@R>GJDh_kT2VEYA`mFkF9CcN0 zL<;bA1qX8Jgq=X$UZU%&InOOP{C<`1s5FLp<`dE@kSoZy-1ifja6N985j-cS>__B$ zMTRk&^k<#i znJGLc8+V+gkV9>qUKokRE2SBGs{#^BCa9p-6)K@o;nhE`jLqdJfrO; zO6fp2f8*TIR_Q7Rx%`lGM=&hquo{GPJ0w?lS|=9(zTbq$IRW=#RV4lOx@e&0)bC zPgbvyw221h#)gt=Wuf4@uABm(x`Shy?dIAd2;0Tnc-I2TI~sXo2#`X+dhlG;MC}5N z95qqC_&&xx_jn^*Gm<}R45^Bsn2C<`N{B$-=i#A*K7^dTF1*jtW2Ym+>|nH+sdJx@ zDr??&qd>F9GpDqVL|d%<<{H=>_cI>r9H zzu*4HeN5 z-Zmm@hJ!MO!m0Gpite0yi9$P^CzzF^npU!@*`PH|u8VUD53~mjvOj#!DRYt5dOcDe z@$NS1zEM+$*V468;v1@OppN1|0$lyaD%xqJ14l#=#*IOc4Rf!dP#6b0Vy28mpbAZ@ z7)aD(Rq3b4=GjiffcX0YOZ-e2#4GGyds$`24q zN^MQ`Q|6ofmO>$vX%7)SqjS17f(qryPDtM4x_KOqjMM0msy|A`KtH=ipcmEK%o)n{ zQcjVJjEYlDRLcsl9RVmJ7$Zuttcosl6QEXYs&F@7?B>*~HnMrxC`yse z)hc7bivy^F^A!>Lqit&BeB1yzv#SFjN3LyMD+dQrwgUaT)Pk`<+s?)a`~jk<-Cm*? zE}R|Cy^X%M1foR%brgrS$-RUfg<)M-BS)Nxj&Nbfnx9f)LxzJLQ^EyM3zaSkx@hlk zPc02BbNfJ7JX>{s+bbPZO&KUVD^e(P3#1&S4H-9~vkcE?JdO(SJoY4~9kNEOiRF8i z8%o`zjY*AatJOvi0X)tqN_RIKq;;eOQmG?Rtf6bskdLe}4qo`YQ;T_~Ys)#y>Ycc^ zaZ5ls@wt&w2KyL9)2f%m=ng|}v5D67>$95_;Df!6-1OLUFHwvDbV#zI`n^P>KAn2z z8SSZmhi0vVLC?s+XqnM%UnN~it?NiLyiIcnc{C6&j!0droZATFdktVr#Z%!kWkJzS zDq)=<8=!~W)xZWf$^(5*v*Blbn|DJm%n5x3-sWgxE-5g;VDNHE0yf0s{Y=-qM?Lp? zQ$D~LaLBtHD>9yL=xk-+IvaiJMNE*V>T;Yjp5YdQ&>3~=2^KdWUUj4iVIu1R+Te9-cW z`A`y(k#{4lJ%B6OPvk!5oD}vfV=zXa{Rv+d#^}HO?Qbhz_Nm`mCdQ{aUTX%3H=75U zklVu^Ko?O1bma&<{c)2!ZXmZ>1VM$9Uten-!_!V(N4Jr*8Frt!v4}QAxyOts!rp7z zcn)$?LnXA!8_lK%7)2l%5(alFl%h?kT>#^Rm;?o17u;j&BY4Vlwoc7R8+o>eibIlX z(CjgX;5nS?L#5Q35qZWf)Z(zMYt!u|bL5RseNNj8!PEA03}fJCv$q)IP95~(|E z3Acch7K0GNa+`j~dz3;rEH(0apfJ7AQb}P=byZSa_V=WyVf5oQ_uLWWFg6=MYSVMD z8!+#cv9)!MGtnDw=A?`f3}I+91849qA`>u!>~Jw+8%_)vUB{#<@Lfk%a;;=2Uhca! zqXQR8Zx@Q5`!aH=g@{3j^vvq)32!1`9D$DJ)+7Om-Srxq;o$LNv6MDmqtGZ?j)btr zipI|@c2E_qWW!ADp|pqAju(L>fGR!S_HPTr{JQpvHb17b);k$}{|u9k@C~2=6vt@c z6Yn0c?Kp0R@=(DfoRXgvGUyyb1!KTb8>fm1Ay#Q&1NDepoC@SaUqoO~Kyo`O?+G-S zd%HOuk~z7yim2V@VB-kVC}$a`TzJay{$k|07CicH$}!Rd!ST2ZM1(gT+GgCBHy)^- z;clHAYvo!M6uW2|-35f>x#1*;+E)y63k>Rwb_UU}kNrUS8c4(AfqsqypvPY^}PSEvHBOgeDMD9n&##9H*^UcRhS4y!Q z(vOx%K(xNH7ua$Pc|xrkH9w9TThXD;PY9GXs%2TC$Wb*uA_CB+EqVRyz;R8EjpqB; z?vt#^(MF{*R=}a?eHT6Q`pw?qPfC-o5oX>6tw2`+G)8*rVp-d!Zt}1J-Qzy<;ta!Y z1%W-v*+R!T;G~>ylQpob@f(N)!!}9)R>aRaU(5j>l3Re7KMHMCN@hf6#BGK!_s*KmZvH_cD&*uyEy7*Q1A+c|BG_lKg}qR7Il*k@=J$6Bs= z#;KEAmK>kj8*A+-t!ubQvu8{htn0XP9%z)7I?hDsk*u2EN3&0xFZNDwx{)^d}MrxKB^Wo5PX0p%R+f(B98T_OTchELg9 zg>i}#febE3Zk+;*4&}9HPRg!Iy+knr(5r-Jk^}-bT?*uRzX9VX0MvswnCL>4{fRWg3BAADe-(!THQj-jZO58ZS<%6=vke)E11qAE;|kEQPB_3U?;8W_ zn230QB(608h|WIa-H!Y@lZ1If^Ok$ON5E~YY1J((pDkGpqB;v%r`Bj8(=Y-u>;<&IUbShofp-u(O$#K-eK^7ln&V6mT27(w`aJaM zf%n+C)(0<(bH1hX$9hA5ePm?Q7~@ASX4;E7SI#7D@J`j%jg$HveTg;9?W`DE?kdrj zG3+CIjd5!oI0F!&=jQSt=EJ&R;6=t?w9nzp*s;j?BfvsCvhH3*8u_T`7g}d66x1V= zL>Zy6Pf?b!Q~^(0Z6R$M~fIR`(&;3DR^hbM%ZtESS6v<-=qODpRkZu-6sg=LJP!ddhAMPYdt^8gb;! zTk+2zL^<_~&&?d=VA$X3wB-nfAI+4hLo{dz%m;(q^-9nYsp2^r&v)5p7z=A*1-SLl zLMM?9M*Rr)7+8ky+JMjKtOnrXd>NRCd!;zmC@&0)_4B(~C#StIch=u2`3*yVZ6y(?5uCfVaap{DojNjU;|UIr(zVB&A= zV@?rgPT?durFtTioVi|YJLk)1H7lBY&NFkLMfM3gQ~hG98;`WAZ3!l&c^#7m%Q&4% z=hQhzeo-X*eJ)!#`omP8v(iy`otB2;f!EhHFGjqE&J1cL2kJ%zdF%D}b2G zQDY#xh0DQyv|LCEu|4D&<{$otqplxqbXvAN?6n~~eBS-=q+}fvVdiri?a_NQBHNsU z@UBO@3+N3#NJ_ffDRDpVBOMh2EKvj59m)#MYe;%P7iA6T$-bX>%CTT z@J5URzR!8!>_W5Zqnjc~O`Ts4jn=8X)IeKN55o@NwIUwn`d?%tyvSozInUmv&a#aL zXw;cn89*%&+HF-#TvWwhh<6d=dR9SKt0YJDZi7WlLF6T&ix=) zZdJoGBdtAv<5EfO zbqW~pXcR0XQ0XVFH^^y_xm`sN+f^|@3%kaeXAx5E8xx^ckD3W9TA@hM^Qzl#Dl<1n z1>G#(lQqM4o_Q{;e)|XCSf2QZXH*oqDW#Nfu=uXwi&djpbM;vRTw*W->MSXq7Xn{J zATtr_ARY`l2&x=n=I>hEeR{KQFP9k!bG-eFW&bex4J|3kI8hdBUE6&(Kdi%cK)uu4 zdHv6IdG*5*4%>Tc<<3)gl@l{(q?By#tjIXIvijk2e&P0VY4K5t>a0@_yR%%b;{cdF zR~~cW@e+y%;rmzqs$5?EP&t3%j&kwjT@p5jhlBDLm)}`FeB=G)(#c1aCqMF860%!+ z>*X&Vct`orjrWza^S719UV4&JkYEcR-!AWd;O*tc z#+7o%&PAff001BWNklYadqv!a%1yyxqsyY<=lxo z%H6j;N#0QufcISfW6kU2+=X&s@sSc3tJ^oq`p(UA-^~w{>B$r26EA(T4(f-O?@?5X zx~&U~x0jPM;l;ncxl~h(=R~V-{p;5$>ht(Jp4#-?a>IMjYWq#Uj|2E=6#sO;>WJ_r z9v-R>n4|Wr;c*TI*G|JoxJMu>>LnVfYvBwSt92}0!^QQxFlHDQ&wyD&Lx^J#y(_#7`(ksE%cnMWY4KqFe3UyU|9FucRezn zx6#f;dGytmWPG+0IcDrmGtY`<3ue>Sw_jaMqT!T;w9W}+5%QwHQ)Lx>Ix|O2< z%)t@nP(;Ez&a=Zo8krzC24t|*G%tbG2v{dl$)Ix^%RD33ltn+pH5oFwj+%MuOirB$ zr))JiFxYrDik3Y6qJ;pw$yqPF#{e}rOMMZ!W}UNl9J#f++wCQ6<=F_Y&a&VfAfMqU z<_C-w!;`i!$OOiu^tg(o>vuP2oKm0K8Y9l_wFc)|kf?y3>a7y>Oc_zP?9tdV{TmjxT=WeLL}@#vf)|9N?|n;uUfy-@ z+sZQ@^Sp9#;SPOf-tHc(-Y1^P--trN`|Q-tPEOy8ZbXR$*a$=m73J3NfsSllFu={C z4`wz7c}|>{Ri#sMR(LmMEASa)8PO~voIDfyvdof0ks7>|nyI}T?C8Ake(sg=zeh`( z2n6JL;us<#3Gc`?zClybqms`VA2jAH6wa42h1f6pM%M2`d(aJQZyf>}A{api4t4xo zmYeVe_ScbCbVc-9-kT%z0j`Fz5$&fuFQScs{yp7bE1=WzcRQ6BE8i!=$5?r{pUoUd ztGB}jUdni#5y)6szvv}OCPe$)oED$K%XI!XaKK}@2k$3v##)(v*<)y$J;(8!^^K?j z4RmqVg0Zu2td(iZ0h|c(1fTVl+r^k~GIpHGIPeSvDH=^WkD`$WJLT{YoDPtU!zqWs z4E_eXSguFStz!IcbV$|~Lz?fi7A^sCmxKsFv~8+#reKuF;j9bfV9ttC*Y~z$)8zW< zBkA_F?H2nFA9PU0r4l*FW4`sP?|4P|yifX?GIHL)%SQ(vNv^{WMbk-Uk@qGu{nx@GruP1&w_9ZZAo{i%rI(!n<;v zAp#-Nnj+1O!%2#(ilwUngW10NEk9BoxcR{{jptynRbKr3SBm*?{hQzXdMW4_qTl_z zA1@QN$oczz^Ba`YkN5sNpZoGA51!8_X-+=aDc|wze_LiI=S2+P_gmjsrj%R1UB30R zeyE(Nsmq?N!_AyQMCNmh!C!sns}zohn7;C<-&Rh|o+~%Eu9yG&4}ZLD z4>rr()QR$yPx-boFT~-4@_)YRrDbhrr7X^zDPQ%p@6hu$c2~=$`tZ_n)1=RG#y=FV*L3+biWa{_Hin|J;e&%JU!pm3j_q!h5f+-Cxe0xKzI6 z$={?ywY<4he&b!Q(Z3iRU-~KkOve1m=JoQQ|M=hQc__&L_=#UzE-gMnbo7chzC?S- zxIh0%|D-(P^rOr5jVtBn-tr^z+#v+M{3-vU+;;L&<-VJLU4H(pFKf_uzwue$TNY=} zl+~>pg>h1`bSLx z;q2kKfgz0u3OqdC7)y9?i3$lKe2jkso_uU%LVXS~zVyHDj~Xx6dU0R=z5n-kC+`k~ z;$~d!Z!yl=-|r*6FP_L;>$CYyuc}YX&+gn8$e7|&&D}%&;?EIUT&$VVg5#5jKF3dd z2UOmD(VxCke@8(NVSiBT)dyh+S5Pwq5qv8mU?G^`$?@-j=ybZ)(b@y*`{6}=#(l#I zuA+PN|A8DJ?U)aBcJ#ky%g>&9tQ4Q)5PI^X{y}--BmTY&Hv~A!4#FSBmo{D5i_a76 z1i-K~Dy5_3R&p{RgPenvjskQ6MG22<)H^W_&L2twb^JD{5WooPe%piql8N?Y-Zw{| z0yrd6$l;wTEueqt9zb>UmLA9}&RSr6wWR`4BW;*}*9fJ3#Hu50gE<7xHS z1JtUmqYq^sq{eOp2cw-b19&7#KSCcl$U1aEwIXfYtwCIKiIPJ*tfuUyNn>m4$k``3 z%XU_zh${`ZBJW0RX!OD3d^=kOL#Chg0^fr^jTp{z1tc`smeFVUIoKx^%fyukCUk)lbzHBD|Y)b_Cd&0F6Rd(JF;@ zY26ksj1{~NvMVy^Bx{V53&kBHmgCF%2JlquD}U#m7!BEx057<)eOe>)!C5|EGL-`Tb>0sKgj%pEq9b&{fBqTYug~9mGoKl6Xr z=Q!+}0o?kT_UwjV2#^pZAt#ZI zHqN7kXBRC!XGH$on}4YM!%zCEGIDURKYZzHzq!2l`9Bq#wtl(E+ZM?Whf2|MR8L{* z0lnL-#(Mn8Gys#pvGb zAb3)1uQs(9-PEOknKsj8AygkT)22Q042--B3%8Yh`gcmn4%8~H&E0h|HH;k?js+)- zYh~+NS)4gt7N*ZMo(rON*ETPgGjkWp>DhBSK&;)pH~*?EVVuq1UQW-QEA!O@^Viq@ zd%6GS2g}99J7u`>JT4-69P-;w-BoT|d{jAA57VFC`xY?;jHXAOd8~|7u0Q&~@015t zKO|4%V=g>F@8^2cU%gh5(F+TAl*ixx6dAi*Z+!2sH=lp%U7soAjq7#){a3`iE-c(x zKI7v*uPNewEk@+}12Q5%`xCyX`TV#3?B`|FVN}8xKw{>?SY&-Leu;FtcP*da+`g{Q zpZYPMEu)!>=PYk6Y1~9oF^0MR>$`ucEUn+K@qGHn{o`hx-|(JaQ>63ulXsO*z3Vf| zTpjJ8Mt00H$MK855Kwm&R_nT80uYT?=H`O z!dH}S(rgA>WqW_K?CwQRE0lq~>Ye6al-~jW@9#;#pj^Nc_!j}odlPDayue8&$)xx8q&EhF%3^}5R;9sqg;~dc?N~uQWhx?7kS%&}w80T?AgX&pDn*M$W!;7T5kVe=@83 zxB&2O_Jg%E;7~;SQaWPQMWm$l0MrC1*K1GV7ABm*+!v6D3@6qOd1wTBxt>fcN(u*&r%J89-!t(NCDtoE81c-gCxX_nRFF zR&wbniIEg2qef$GQATr(H*>^5$I%1*z?BV+zWN zUhrw(uFpSsbt6?nRQ-7{ZY$8)9p+8_T+jcARR zuYXn;wdgUw@{XSp4}f3U2!>Yw!yo*B0xdWYzVRP~@p@(L-tzzc>8o{)kO^P+jF;$h z^wHmZ*K2eZ#>Xbh*F62Z^f|v{6tYgxBu;uR^yJ@v-*1-HofYY}U+|=VqR$B~{Lx?k zjxyLTo_s`k_9uLaK8Jt4<(~gm?z?eMx$FGh()YN~|H!gKUw!21$CkS==*WT&ycHRNs<1_w6jv3p)c0&dd<$O4Wn(;)d$!HHIpsI1O79!|i zd53|De0DYgGEZ4AYW37+3?ZK|{BpW`lc4~gm&0ycd%?JI)MkUd1#G&|MERX{!+0=G zx!)=D{j5|BOxBfh7&4r=q7C7moKVgh!B#{MMNZpR3}@YyGBG}(HhKi$p7!YHl##)~ z-tb3$``gODeBMtUscGZ|EH2(Fgd&R#?k3A8X@Fj0g!LK^R!fkvpmB;O(mz~g=&_}NJi03({;ruKIGIGN!@omeQ*Rw($M zBOxeM7?l}85|1bmVGQ*bJT(O6-{qx9T&;bGe!n-$?Bskz{!qph(W5pZevgP?{++bR zgR)0^8x)xwEp4KvF@uIbRAV+rI{7;e9#XzLkyL%LiLr(%+J8sWLv}e(m||M9IqTAuNk=PPafi=OALN)cN3y~kq*rPRJ0oxqXsa?V zW6E{lAa#?*%-@9?DU1OCJOa3=-%Aw5B&TFWU^B~=eotoJ#rOmcG&bI#x9c<7sa3#8o{NF@zN>#G zo$KN2;T8C3SKywdcPkS4*o#ll88QZipNsP!hdI0p{%Sy~OAFK~PDsuW<&P}S^PMQa zO2jINlz>XNS9Ja`I9=ADjvAw5;!FKVW6l7LwDQPKiJIqA4Kg!4!TedWv9{LZ2A@?v zx30&t;NLd5qa@*aZRZw_9LqA~6?zr68u}lOM$TlGF#&8vq_PXx)Io`!J}KVL`oTML z3Nqs&6D4;mFxV4gbs(@wgRXtPy+>rTvMw$&!Wezl$9-NI*%@pPf9&-yDqs7Imq>8s zI+}h@KA6pMeUvtK*JOF4bX(9U47+i;%#P1CU?Pn*oqBaKz&>D(Qmg>zsLi!=V|ebz z7={>}mZH?9kr62%*~6^xwxT!(isJs}pS`BM`@TOaU-!(HC}Q~V_3#S(ZLGjDh|{UB z7|(Q+-(Vb(VQ@qAXycUoTIANrrl7x7(zRP(X+VBMXhxYNdkAo~9*IZI6P%zHjWnH?uWi&~A$CHfY~lx-U#qMt$los7CF_!UYa@5sG`9VzD?1Ag@ZQe3Zx zLd5qSffPW--jS~Acpcq>}CU_iST9tSy}F~$u3W%`Boi2lOcg_7CB)!;rH3A~@|GM_W=cc9}& z`Gxynx(^~W?X*JoHn$_852(kwMH{wmPiD(E)eP=Odm7htDjhi0@xSc@zf!{Cwb zMO&k`9a+v$Fy;a>5Ca$)>pE4we;lwCpEqd86}6plNBhbaQ$u|F@IVeg&bWCO?*h}u zPC3^SBV*_^kTHRx2Xf7dt&aYez3#ipr+(~n%E;F4#_%WK_>%G!PkmvzbmF#@UQ2JS zKv=b~bJKF_JseLsPWZxv5fm^&=WIhH3@-Q1V{!mPfEea5t_@!PhG#ho6+Y`*)hwbT zFxmPi)d`OVV}Xz$kRN*Ox0FYn{rK{wpYlx~?OAyE`wy>xR^Z+DzrDQqp4T?@9()F4 z!|{^)S+*GlXPN?V!wl_>KE^N z+3Q|dp8JXaOL<~VXL@)GA6|ivb_IxzUR}SheEt*vH-U$(rnU%vwvn*uHAniFn|a&l z`~TQG4=_urGX0;P)YCoFlkV`P;`_Z{y`+Nu;F?HB zm|6Gwcaf1pNdu23!{`VrK^W?K*mrqG5`!MZft@BpS)=x_f<)Ok=b}OA5rLk_QdN*D zp34l%z@c&`YMca7+!usNu6@Kg!H}R1$JzKiqZsv!IFk)!`6_}GTDbHHLLK#k!D8#o znPJTsLpT$P!WShfCc47-%1JNGT$yJES_R9@)Xf~ZB^UpTb3||pS(Dc(wqjilB9S6< zU7$X4)JWb-IEc|A(@I9zy+nB~*9MzB!_4SaFVX0yXl8A%y{KP=R13nPASq#9_&jIr z6|1KDZ7)(ir3|meL^;>gaM=!uAUA!;E3zxHB#>p1k@XmHSa~L%qx>z5tU`K3w!}yc z>5Y+I1=O*dknONs)>$$&{-N!vW6s+w@wwku)R#q*dY*@8jcg2%@MxLDXYPT^Z%wF2 z)|h?5dSae(rgzUNPAZiLCcdMVGu9-%7U!32^B{wOik|c9&uPuT{XkjL^f5gHcXS3Q zLHpvRA1dot-N)G3J~?fD8`KNaB~I?ST5lVNt!BBye!+L3#DhX1%l0S{84aCK)Qh@r zYDLr+?RMA;xeg->+ROwT9U^Qi)_V)v))SFx*4mIg44+Tl&dmWR99;G`vWvYfV!MJ5 z#92+VgTsz%GC28QSqm3rB)R}yWESTfm3r&;TeO#rMByG$DiX*h*N(e%&Hf+vDLE7% zye%O6$kI>#=*{V*gHBFuw{E+s@uf>YC~_UcYwN6#)rFvbuZRa2G+r{1)4Y{J^pcs- zxjcv_v3K1Ly`juv$4fQCRS-;!C^DS0HZcZ&M-MSiB8Cm)$ZJ**tSA=@71OL!1NZ*( zU!GoZ5{27Q=sbN)&%hm>0oL|Azxx8!jmXiV4BUUZP-8)?@&Irsj|;IRk3_(JG9c{g)3PC1#|dM{DNgwu~fV%Z}iAu`t) zj8^w5h&Nzn%xgzWr(4;zh0zjfBzkKTSo6Ay4Cqi=y)bIP+)gRlGgQ5KgH&s~=AZY^ zJL5g`8NoVV4`VFYWrGEqgZBvxm30zHXh?*8+DeI&%}V<)|USB;LGgw{2P7Rp4h_rng_*wi<(>bbhKiLJlhRtY)HehCKe zknMSC6mk(XjL9S+`=XtkTf?vqk>{@KM?O>pd9a;V1VVKu*r*lu4l>q=AtN91RxzGC zojYTOf>>%1IW{PHV}eANeepLz$as;M= z1bG_dZ<}^NynwPr#*)Z%jVW`_x!<__W9h*MpOV_P4|X@s`pJ9JOHX)rsQ`l#xvC`* z^k%3>gUAJ-7;)7rtSSPwqEYkT0;)o>Dhf5P3kfLV=A!9!q@Wc+A03o1&J7yA3*pwM z?5+EPA>3W?Yatj4i~{;-P2ud&@7GDl*voyd5mkLelM88fhbtfW8^001BW zNklJ!mQEB$k)R;(TT=+VXCqRNVeN4~5&X|FXy*G;y@<~U(JT05Qs;RaFWrIv- z-Ma;cqsAD-IiUiInSFr~O;*gcE;4xOZ&?tppcja+vaePtFd76vz#$2WqC4bFG#WBU za&!)#vlmgK9IibyAsEUWhX^CxEoJz9-s%RY7m^0xOSwZ<55W3fM(v2v5(I;Kg9fy- zG$^QN92-u~9P_#BQMo_Yz=%Qrq2Gk0C~73pqsW|SN3>W*l*fp}l()$Vdi|>Pjqi_4 z!ErJi(~dd80|x+N&e~+m&_*K)JGNv$md3N5NYo1NK$b9&-s5_;GY{y>VoF9z0Fe1Z78yy7dEnKEV zmyOb6c0y~Nwdsr}>xSz_JEUkgBFb{_V<`4wkKUd<`;{ z_HEocOUbdKg-Zkqqqj2wC?j5~z*NWsCj!xr1kD1?QUz-BRx!EUW*-JJZmvigvH$oi z?-v}TPFtF~lyHq8Q48l8`HBoAc!~_piT^kkz6Z{SxtGJ)Taqc11(=)&S;BWwvm15& z$ROsQEVYAmh8q)nJ@b-xq>~POTx#nc*xZ1n>O~KDyObUVEz#ks7Z32-O;R2?bFK>Y zC&pA8lur&XjyeWUx{B;mLlJBru2~UHbK%IUUSVXrjF22&SPHknZh6(B-7os!keY@y z&q~M&455tj_u^!7ZrFNF`r73mOOHPMndxq;4&NF3Vfq@=GawpwYOZ0Pn>{r0Lw}{SbOce~5@1ou)THUyZFUlVn7>;R9dJzOdkv;I?I>CT82k8xCB%+QZ zN)~|YvBr2VvDXf6)gv16jMJ)~f^!y#Ro?~`>x6sf0rd(}7junq=Nhhx z5U8tYgSW0J0LXoqXY~>-h!>I9>JwP2r(_JA?>?izLpIi~g$IT<9M z<6xU$CF(?B;GHL(z&-&ba60Td)_pxIqJE%aO(tM4sr8|rt7C&@ z&t2vTormGf{>1PkgY`eZ{;Zf>-5-5t$ernH{BzI1=YIM=bz6Ai(XS}7k`dgi*O6B} zgy)y!kd_hbN#rD?X2@0KUG)7Pl#FIQvlq!UD$74(c2mF$*@LXcxA8t?@93KCUFBZp zI)<=vZ!)jkD<}H0exyDWWP{s-@i~YS&ZQRJ2YV5xk@N9&a7g)I_PvmEb1O%--lfE{ zF9O4DLX`sVHK$2V{KvTw{OwO5Qkkc4&1|`0!|~meMv00JY!Gn~?L2&Z z=}TXVNc@5Y>b19S-8%i7|Hj6~(xy$D(*5ptzqIeZ`?lQun>TMx=bwLmdc-3hq2JsU zj_ayDc8X1 ztT(d9$a3_}kt5D^wg~7U5q%q$^+=oRr+{v`2FXS?MxScwhPDdULMxX8R^PLH9M-^` zIdimDSnogl;ScriefHTW_4W0oOE0}Nopsh(=_yYMy8HTZ*=3idM?d<}>7t7+(r@kx z$AAC#f2WCwiFESGCnxs8D_-#m%?o>*=V5RB@BjX9dicX1{#S>)VZ(;>pa1!v=~JKj zRQlP^ewKFG{+~`Z%0Pea#3fK+?#s=4p7A_6d<8csFa>P16moYo5i*ZjI7FxLEQSV@xouQs_ ztqn~|0mncpVj#d%BhEH1GCwntVbm+#z5u-&2-n0Z2$gCKLw zGoNvd4ZZ7|YLWR|4&rFPKF1g)i_E$vd(GOw5#>D)q=;Uk1QNQm7CCIBx+Fww*OZ8; zmweTR#X)|qLjuCc0rmuT9BY@oUS)}^?g`=)*?zMEPb(Hg%MOldyX!Bjo@u-5FV7FH z7s=w$+OJ~Lj=q_8+VEdC_HSz1_gvM!0w^2;H)QtkDOjWKn~dXWG!FaEnM#i;+8vQ8 zTqAo9v|MQ?Ek zK{V7OIpc(ek{l!b(vL>9S|%}8JJ^&yAWuv%=xZtfNXwo16$zAK`N#EQ6G7R)wOW!^1u+4@qqsdv9rc^NKUmWA62QMXXV(2*)boiLj3zl^jHbRkP4l z)hwVa$;|K|R(2T744S$Q9@s~{=`}AD0Zg;dKDVdN z?@-`2%B?JOg_AGyAN=44>46V?pw34C{MUc|SGwmt@2USdZo28F)ZgEq4m|L{mb(K7 z@AAtpPe&hpbZT!8A^(p)a14$;_E$Qk-~To_qeDYO z>6&Y8PWQ`kSV+ySqCrSrV{sj@x^kzv-q0%|FVYwOJbD zGiD2#kY_nlTzn z)4-dauY)RN;87UcEZ~`@jEtdh?s3SJ`*J``vWojW?#}KmYkHr{tDf zZqfPgd*A!g;>D2x`$r#7fBMtYM?d;eIX{OSa!5M!%rmveIdDcF`p}1_&wcK5x5*i0 zzkL4lpHHuR*BqGC3RqnjC_n-)?}XfG()P_saOl!W~CW3+O(z(1r%IyEQnXw7etdG zMZgij_{ETbDG}p1XQvJ*YHw3ZBh|LlTC?PYVCtQj8VdHH+aQfW$-17==hFBb)Lp56E@yO&{&(BO z7vZsnj^9$CMk*Phb}0?yRY2l!K2^^vL#r}$n17(KWRA_Q409#Ft?P9hVcNU#{1|l# zSoCk!I%J*LE?_*|H&`{pJ`owmaG%zKA$7Jn{5xk#1D0KN9|+>P&B{#TOgb=uT>^BL z_nx=EF`F~*ns>-t1<@9cTx4#2@a)tl<0Sf!gIE}z7@ORWXC$D)TIYXx$DqWpt;~uH zN``}R;SA&4vzA%M7}a&I4zDXn}^#X}jyM zYanE`(Fg1Wi?UZ`3M}kc^+O(k`>Lh!tf1F;) z2O&tJ?PU-H1+s;|k-J8Lh#O$2TXKW@S{F>EAFEa|$kOmFjLu=dn|}bO8=1j98ArVq z9&*gQ?2)}su+AtO5UJ=jp<^=C4Dx_d7xbG^u`X3WKX^`<3+5k(7xWK@gM|u6XZ|Cw zX8gh2r=+#Z-FH1UwXNTFW8+&_el|Vg@MlJiLJ>(W`(mR1Z^Q7^K-sb3jF4hOSN zW`P0)lComnaw)c|USXD)b8}`n9%x)YqfKVy7+JpK5`KUOxEtPuZx>QkTEbmQOu z{`YDA{Q0-}nQp!H)^yG}=lorr(c3dqBO@bvUOOJQ=Nf6 z?%ohJgp&=$sRA*g8J~=r0h~$JGeX9ZHk?ZYX4UwZtW1z{Rfh9?85@qW{qn{irOR%( zC>_4rvFWHi!!hGH_uO-pCFf}6jPg0}{$US$*xx!e|B&+u4!!6_FH$!5?6c2KFL=QV z(v~e-n#S^pPkcg7J)$rjHD(Q?Tk_Hgl&6&{vYGwhnoX0eBRZSvyHx2&H&Fd6UDZX!#Dz3ytVA1 zox@l$_+9JCb$CvWyj=#*i9A6j*l}U(aYWrAx)fOiDv0NE{S;^9nQM#!%M9+}R%lVD zJ9RHng3qIqLD6qLj4>$ZJgW`LGnht=Fa{AU6;8KXAE=&pd_*X!-1w{a5+x&oEs{Hu zToZYSBW?ED9EM8v(slvPJ;oO{hu2QPW4B3`lRY$qoX-S?Q_F+M+(zcth_5z%&vT0b zIx92cc`zQiR$k9)HfI=bgV&-{&NhZyp5^74)U&q%8D!MIao9n`@B$}FAv17-@nhf?#4&D*QyP2)c&fFtr z_eDGKbWGb_e_cXP+g(%7(M{dgC}6dA(Vmheg0|0JRg#kutis_^?PAvdowbXM1wFv} zHS)%6)948GIZh4LQ1b7*c9Xx6wFFp@d&m+TMdTJf2{Hy}F9?Mo^a|oLjzGnYXusRJ zBLIfnGz!J~5&6DZy+mo38D$j?bgG@$R`tPrE?jl%S8A+GG|@ydIiwzH(`q+<6PIzn9ZQhv-|hReCz;p5OUXkT|lTS_WQWc zWcttruT4kp@qpC!#|^(}TzK_2(=(5KO&Q5F3^!Lab~>3vr)FDaPtB^wIqvDjO)-p# z3bOv%O{X(O;TI)v|Qy=Iir7FY}|Fu`17CttjN%wd+wS3^rt@wK8a(x-+ud*gT!Fp zx^?Sqc1FoAe&;*ixl22vIN`vhSyz8g$Ejy4u`UZPo~O~`}cZD~2ts6trfMmEL+5h$Er zjE`U4c(Jmh^m}8Rt&XXj(Ywy-{_7+8%2&Q3*zv#q>%S_a`Lw4!O^zwqQXgby z3zvE%n{(|j^Bu-Edl7xIp>Jagiv1wWL0Mw}*&)mw0Yi(K51h6V#yUPM9f`8W$WWd4 zP>&2MVEW$UI9mjCRg>6J)#9T6corK(7*jYh1ZeZ@A#=;;IH-1fB5T&E`Xe%(QKuWk zQ)DUYy+m!05ma`jEznV$WEuo3DbBkmv|&AW0h z(N=9)cuzR!WC(NiS{#0iwFrzvu#T}~OXO_2cE(k2NhYI^r_>NLuU@09V-qM5xG%Gx zL)+5e_>hb?XCN>pf$p&m+ymEpG8mDgmna4?ESdGXRnEm;QqSJ5s%Nhq#4to5vx=ZY zWUu?Q{!D5D(!i|9Iis)Z;CN5W8@~f>Q0MAkpP5XBdEwgI1|e8U+6R7C41eTK?l8NR z*}%xQ^zC1rnI3xgCpMLb)MZy4k@okJUpwnQ({|V2*Y5i4Pv4U^_pMJadcZpsaKnc% zw4J~ZK^lnD^1vYe05S%y8TN~N8pAuoK61GR!9(_fS;UR-K=yJknaOvnTiInSE=YFuM|FT_k_HG{;Adku|8FHv&_a3AzwPTt13_;m!KO*YGC zQA#$U;AMUgg!}3*K9r83&*)`0{-p7nn=cXD83zN#pw9bc@j2N~BDjux@mUn`PAVe7 zf%4%Y>aAXwJOmb#ZAC?jeQ11mhXtdDQB7$Dfe{%*(O^4|Fh{?yqHZB0RX|}NgiT67 z0Y5c2XJ7W=w8zr@)4$&1*)3(zRL&?cU1}z&VWc(`_#BX2GD?5^;~x{5#)mxQA!*T~ zSWG}HfbIepC98@N+tt;TmM&eIPCDr%opbHA*Cy&sJ32a47lt#na^=c&=%I(E-FM$z z(BR+w?ssW;cvzVovbRSZafGtBt;T{O%7Nj0+;PVVUrwfw>=5JGfB*djd7V2q+6MT* zVWk!hcqU_`PLT2NtkeQ7U%p&WSDaA{e4cCl`t=$s@L$)El7$7*h*IL3_qfMB1d-H2 z9vne4w|W)~e`-B(8Xo`n$Ll#f&nKREV!HCmD+L{0wrrWkuyEl* zy#pYM%p+NB{^Nb**YPt0P>GERpd zez^XtAJ=dBL;A)QpH8b5?3x~W=+m?bbKE@whqX==4-zof5w)sU%Atc8ysn#bEe{3( zhPLW(`U1Y5XZx#6(}axpyomnFn=Vd01Dn#at~E`KqMHOm3z#n7vwq1YQp5P8AN?pj z>QRr<+ydbR0?T*&`)+r;n=Z#3zVVH36kL?7D%saP_Si%7_l<9SL+6ma`^7JQkyfl& zk>2&LcWEu$=RWsIuX@$1w8z*tANtUT6g2teFMp~1_0D&`Q){o)Sb*Ph;Cz1alb_T& z=e;o|#`BD4JVTII)^mOU*L~T`UY72A-}|O-ed}B4`s=UPeRx*tVObY;Mp^rBdefV< zCKxNvZrCpSj4@Dm%Qbm^YE?OK^56Ehw`qOx%*PyaOnUEo->ZGq>RG<e)G;`C=Z)_~K~u?D=*4-0YJx&NxFd zi7^A|XMD3~&(`>WI5TJ5=h@GGw)Vs8UiUivS3frQtrMFrGIc@c^3uqU>`jj#xT>Qm zh+z1Akn==_4xQlsp^zG3NaJid8Z8~uXrvWgEA*WSck=#+CPcuP$oB&d6?=v3jcYO; z3CFN@G<&K@w$BwFwAfGRI0$=a7m`Db+-H$9T|2~hZRGIWRXyXl;E*|t6~iAH!Ef2) zhIi&sbTPyZ_oSI^$P!49X3Ciu8y{7m7GfYfU9Ou&U)$m3Jp|%uT)I(_{UL&65MRtJ zTYngmi`C-x27d2qW1_l7pj*KoAQ-Kq=!JvK=k+W(pYi)}I)j-Pna1A)%v>|H1%`1-h#E_v}OVHZsb6?2#Sl1qUXh zTws%Q363O*56fL-l^DA_78SMZJv;bxoQuvyme|)*_Ex`*_AfkZD?}{6jka5Z`mF;2 zF3nuMa7`&AIM)pHw061I9>=G)>$hCpxa3dgq^I2bw4wlgeUnG7ABhpSayq4G2DfSw z@_G@Jw6d95tCvU|fs3GM(c9i)IMsM92#i1qR zijts)l;>s4-1nQ`{H7d74xASp0i02sL%!o#aK<-o+?c-o?QhEf#$jyrEI2V3$v7Sm z=inIP;PTl42OJ=x92``f1Pp4%fFZ-*7~{^2nt;dGv4Z3N{Dwfl=;&zr+Sk6OvEan> zY}DCt9p(u#9~=UlX=-LWJ1ZtiuGc-VDV_C`)6;&d4oOGsd7>1*BkKWIfYq^~+EE)7 zQLhy6aT|(xRuh4tVsaP@Y3DFDTtdC35&|}y5s-Fbqlms+#{Bue`%=_6E!=HNqhPAc zD30Ojr=Kn-1;>%V2#(roU;EmG<3v3rb7W_fOgymGH@x8udQYqw)-LnT0Z9_U6Yj@5 z`0$56oL>6UmuimLQ>>>`PB|rg@rz%SQ^_7e2@Ws z>|-CRYd|nYed|kJ@)GSkA2@F84V+O9enU{G?u9c@r=EJMu7AlTmuQaIGh}&j)SvU5=cFe-@rh~M zwr$Gx61ZaC*w6e;0LPip8*aFv={k&!cgg)3H$fq;!#Zcr;KcJi>l}y}^F&QCpELJd zo1j&GfDHK958s#`e(2NFJ}VAV#>8x>s+laZb%vrwFHzW8$5qQbyC7S^aA1GnggNpW zbn+u&WJQLTggaU5q^WvYDndOzEJw=*fT{Pn7ka|cajuK8o!9F5T$~2)C!X63ibUNF zKO*qSa{`^3O%G8yq_fl~F0TV`MH1lv6l4@QnK%ZFohUrcRn9<&&Q)LHLY7o*Y63lx zlUB59;o^(|`WZ*qSu`K~^1zK_vn>^ar~ z^X)7>0R(4JOy0G6{^~@HG)MIN-7e>x@z94D=F|J%?NR9-yB*ggJN(DA-4zLnX}jyT z+g;!K)tTw4b(g0XJm8(BBNqLFd$jNJ8p*u93Niwj#oER95bB|*gBFS8+(pseCGRDw zB-=X45`NDf!=?jfj~pc<8yo=JwGXJ#w7v^=?I=g#bMx`ApP=(YSvc^D-X!UVui`eC z?sq(M=BzY2HWG~IW5HX1es%ewOAuVko}*365`?xS8Hc;lASeSX8e!VQ zgaE~f<@YH0KW?}(Et$U}EuY`I-_>7&=^FBi!H41M17q=j{^x(>h~b>!+k(8jh!_NQfK}69)pm~3bl?nKN!v!vt*Ne;7~yjLq>6`vG6;_hJl(NID}*q zar|(Oag538;s|h%xx$$JYtCp+V1(gKeI{8lvZJu$;mqMIaxh*DSI%R+&fM}H&xS*T zb1>DjU|@5eSzJBOI2I--;(2gTANj~fD!W;CM!8r0I*b_y!GQtJ;W}i5FuWNP&JvCd z*UjG#8N0eM&iA7wTjiqCP>L)_w_t7vFpM2tONI7>Y59C$ycOY?&BU_N>8c1HQ0bxQEW>z#SU!Q&hboGpSecHa0Lf-oSqoC{TpB?HXC=L8yfraaKacQ|41{O$|W$w#~> z?YrV&osSF$9_om%m5{SdIg6n)J=DL6TE7S^@^6f9P&X*@iUg-(r!IS03b9l5vcxE1 z4`CR%elmiZ!_qkfZrD#`s5lpgHSZ;Cw3R=qVTeWbhG6oR`>p#xt5L}>#bHo&mAk2z66t-%+HcNqps81b}gNfmm!#;QHB^qQ) zs<+SjvsUc2MHZlNsxg3Q*8t0~ID=T5g7G{sBMh;*DD zF`q%I1w*OZ=csmcAZ)-zwZ5g6Kht*CUv@^P?XK2#SI^Maw74T+r0g4HM4d4ln(|(|T#voC@{P2)hjbg6p^(!|M|V(LPKoXm6n3y44a1`EGq@`6Q@*=h9MVxZg1B zxdd&DkZILRG%~O=WJe-vkWcLUVEd(}AL6$lU^9z(o|SY$LZue%3v_PDK;OBn9239i z85A5V97l5?xD$$5i(AQj>780HQS}?nT5@_m(ZA@NXaPDWeey?dNe8UHS8BWTx(gb= zUw3(W=%GI^JUFAR%-luYV8M+(UdFua)-xX~ z4i<(hjxffv9kScwjC#yKYRT4eU7QLWMWBs#q;U{=c3_sRj;Wpn=NUL*-5Dig<`z0Y zIKTe&uj`q~QnhkM>({|a0vgJ=eHe!9U;x))uI$v{ypq`>dt_GP{8@t30YZq%N$VNx zDT>P%m338ynGqp#t(BDcNN)jKYnMXD;9@5VI3Q?2&BsghI8Ql=L<^VnlaWt zLXxN*hRXl``t#cO7+;S(G}c}H_)9gTIC{Jbo;5#kvhIEFdza2A&K?5VLvH1a)~{o@KI8TQ5`eYOe6zo}4$dh1fCG7f!_B-AWUC)< z|IYK$Gmm>sTC;Eu?E{QqWNqG$(u{%p7P*Z>=1dP+CHJ&MJ|o{T)L{=bOCf|gvuDjt z%Q|yL)XmC9Qc_~QLq?0}EQU5t0#0MJ!03~667_Li>U|wdzRgfdJ9%oC0pxz}qNtUV zbKEaoX5#^!heL~{gMK7{tNZ5;hIN$dBptzaJ*Xqr$P$s`WDKzw zPdqb*iJ_%Y4zpQKY~I2Jxj@vOpcv2PUZQ4T+wObfJ$UMWf z1tIR+AXHV(rb`fkpthNl8QWB?al#m#Ro2*Y9?o6fy2!ylz9V~^XJ*_>lxJmK1j*fw zEnFBY4nONNce(>UNKi5$eKJlbqpl4HSFpX2J_Q~54!w~ZxkloU5$Ah?D%eK##`b1Z zwj+uzVa;=Y+fn>)G_2pCOpg-;Cga1{b*mfRC;Oh@jDt6=WZ<;jb=#fMX}fF36{KKO z|0dZ$IXpJ{Fn34Id;5aaK0Bc1IGaGrkr6>cRI%Zj^vidNZX6B4=oO?K8xjhH{ezt4 z9uTSp+j*cdIrtvunDPmT((Evz2ap5o2la>|Cx$)Z`=>>F~^$Bu|(tsS6--<7w>^Dq( zZ6VurAINP7Hw!&$U+hyCzb&m@yiaQT!}=>4zr691bpHb$tA3z9tQ2?&hKiu9HuP^) z9R$U(9EOzO<>r~5dK5WeA{%9dIF1klk{ge5Q66I4O9BE4Ow zANKW#)ZW=bk>{b_l5B#V8S3PK#yP8o!H!`LWEO)K1C#$us8Y|I`khceYS?1kF(xC6 z6HAuL2L>e>!@N$E#f=e;6a8=h_HPOj+#Y9?XTa&Eh7%a3jaHl!vcSMCaV*HL;Ot@K z<_AzrYSiwCGioIU1Q-MTwmPFgdvo#{AjLp+{VacrGuj75{#bun+_5apDWKv6YuK;| zKo`{;W|kXi-ao8gu^JW-MZ-wi8f|GoM?lvMpU7eHHk=W{K+{|^#`?#AptdKPp7*DV zuKuP3dW=1 zk>ntA%9{u%34eu;3oiJk{hAeX1SsWYZCKTc~WROtIz=xcb;%~A$ zWQ&MsbGW5Z-pdlBgy<|7NepG~<&0GHFC}Z!q58;Zc-|)6V$wV77dJk~As_;ck|#)n z)8hcF`<5~mK0_hXrUi#Ik5;qqajaF(m<6kFgxU9Gxa6P|{V`Qrp6Mx!7myU_I?o3N z6^9W&{JYezwalekM?o^-$iE@V$O*Ru;WKB!awCUp=gr-{W?Id^p|HGP2aip-6Lq(= zT?^7B99FZ*T94Q5fI8Wd0}fmhqYB5*4chGt@h;p;6z2}-w7zy!KQ=m`jILSv-D-uk z!F`;S27-*CiSfl@M-s#p&YbND)(620o;@c5VvNA_xEBs0wo9~dS=7X^i_DMyd)4^4 zpB+SOF#hctHw;U|3M0EeM|(qo1X{%uNF3f1djPx0dW390Yb>v+GhCd{7&BuX8y}OA z>NXC}%HlBRESo0fGAULW7#bgr;1ncMUBL9J7Js=c+!@X&*PFJx{(0=Kb=z)8-2lYV(^Hun-8QNTz0qk#5u9*ng( zk@yz*eu`E}BhoMaJhH0e8e2|kN3fB7mc#XfCudBFCC28G7Y7jY-y_e^XNx))r+Kp@ zsK*gp2xL^T1G}bd-$bC3fE{BsnnW<-#-wzNWg(6|`Yb0@bFj~CwAsKU-ag*$FjSnw#%-+sB!g%E7QqGyrA^ntBX~ALtC-wqI{t1MJVS2IM{fB zSW(0}r|kKIAT~R$C#)hr=qjTcp=>KUb)o^>U+L|(Hbt{bW!GrP$&G$OE0m!n>JdsF z@_-pdkFC!1?JGZ%x(7F<=N}(E6zj*%5{ej!WGyg)f&bwUl8y60%@j@=862R!{0+R- zO>GgXeDAEIl;FgKV2xy6S~+mQU4h-YO%1<+R0yY!Y)F1U2!o+d%_;{O56-iL=Gp~d zl8n0*n=W;1X4qwHWDhx)jYgIff+lM0Tn|fD*zIw+7sffzzrWQP&1-XUPN+wH!V{jL zI^NsjjFJT+t3@`;b%VSwo`w0qasOMK(QUBl{`g(#z}5FuEwUTgvpJmwK`0SXie92Y za>e0nQO;h;dX+&qaYCdt|oOR@PIF3MG zAscGtzyXbCpBa6?Z*Z<~`p6pQ$6Ma=7CEgz$vJSqh&bCBcFiabE8}j(rb}%$K@hUK z1c}%qoXcJS3d;V+5 z$+plZIXj<&nmHpXNCH~8upjbXpcnv_`)+R$EY`E-_^_9Npl+?5C;3`r@Aw@KoU^*# zKPY*WeeAtaWg5|EK!J%^Luf<>%xy}vW~s{?>=sdv9V9+??V!jc3IZn@iz7RMLOF_V zSrTlA5&Y$O(1q?1$7eyRv{7}cd25hpKSN{qdAd*DOOyyT&I8V`9Z|+r?pv6vR&L9iJRdHzVcEf7F=2N@W&6zv=I6+?+(Bf1aa1uJF&HtdS!?`_vncjYvL&I@8+3XXHbF=DSC-=Z;WrAnfKv+M(rGH#E?C{XYB$b%-@rlLizs8 zOWvA}+2OO6E-F8IUZ*RRcedjk{NT(ciYMM8vtEq(ub1Cw=@eu_9 zvAfu#6BFZ6hEUXj8<~S_K+b#LOU@2$({J2M6rF=^fWM<^;Sx39Vxle>-1%)Qws)6) zVBZ1fHKHI&6MLIvlu6zkcv6{)TE{FZ>QzHuTE~QK+0|4F&)!FNiM(%a^s2|<%^B#e zJJ{2CA8N(~+c!K0t~qBuk^8wUjR0DpPTWg0{KO4vUz3-cY)*>Iia2Egj{+L4}4nPsIb_!O%d6qx=WP`V-*~w|_BPAgOg)a14y}rdK}bKbnkF z|IypqDj3`(3d2!6O0 z1{{Vs#x#FpoKr)JkfxRnqaBDL*;W4CYAmfFy6!WIfo^9QN07`Y&|0(I0*}PeSPW=bx`kFV|q+$mZG+0M>^gkCD&)fW~5^lOe+a=lVcvaUiFf zR}5|D$URa$&v`8_^?J+|*W%!BjBzqmILkQZ_3Mz8BU8;-%#O?0c}LXaa^SGyFt}#a z&={Nvv!{A(+}v|*I{UJZr{!I1)8p>-d<9H$R!5>{Kt1XaZ)b}Zwl7qD72gxMsT)q`J463`K)8s90x44Fuy|Z!*`s+{$RZk3}D?8 zoWWVdvBUWy=zwF#=dH#)c|qx9XRKGgde=M?k+=fC{rFW0HmOXBDPrN!w5 zu1a>7noWWq)GiYka?K=r1V}yW4#FhXGfp!5ioHy5hYTqYan=sc&2?eeW&a`{m;)Th zspgehPv!`SZ$8h+1!N5eFlgqAYjMzDm5egvL?9H{kM--Y&sqD7<@K+By?zH#5$}N- zR1RvC*hj7zHH?~T=e5>ai<9H389n8wm!_rjR>|>l4>cRpz@nHJ^hE9uv37A(ROeQ} zDRbluK^V9J>Wru;u%(bx%n7al>Y}L&LJ=bO4Lfx$B(*u*pM5}d7e(vy_`OLY&=Dwo zX9f-b;&+BkI)g?X4UVYW!{Ei($l;pdT&Jb+iJzq26`{=-xC6a*q6Qs4=aoG!VO|Y4H=Q){ULHx%CG}bzdxL$sP6N^0J znR22w81Qk1)k_qHodRYiM%u=N-aSSY&NTP0*Xh!yl0bo-c17VwhXmEOBNW%{6?D`+ zGNXOW7Rf|21an@rfN5SkC6PywrOXMRxDNkS4s)>C<^jOSGFGjNxDQ!Jj7b78Ig>N* zgJ*SHA&fl&Ed*q8f=8}lR>{2W0q+Z=P-vE-)|q>=Zh3yzIOBE0d$DcKY%h^GCRZ{N zN4-U-XyFnN>NeF!I}5_~Naqqf@;tSwX=~N*m%Z$sy%@=7T=3eodeQFbDM!DoNvHUa zX}fFM?qV(cEq2#0Z@M^L@cXZ)6AyYqI%Ms=6jbwplL}?$@aW&FFyS zj(a`xdt`o&lI8cU)^J~ACuHSlfdhr9^v4c}FwQL57c!YZ8-Y%8?o{*2yWo7j=Um3YXBhj8hdIV6 z!hyueaBzU@V=(iakTEfi`gQmXP7cO8=aEguDQ3I~D;#MuVZ0aSljp&yz}bS3itLwb zR++orp`P@Ki{FwC-}Sh3@Gke3F=>O!1YQ^*s#g+NtLi0+fQgMiTS5l~j^S)Wnf-(_ z$@TJv#8H6Xu4pu{GQM*=0Tt1AEYW?~U(qXSSvvQ3UrGJIfIF9_lMW1LCO?=DptNM_ zSog4}LKcOS!t>*F5%9n{1cJ)@2L{f+ao(tzr0od-3W$Ah1aZW8Ppog|mYPahg%IfQ z`(Y0;*BrcC)-msc%stK(fdU}d)K3EKZ8a9w1I`uW&kx36$Bis4?-DpKkZ}_YN#&mASZwfn_ZYpE7u}0LZAz$ znscX`R{}ZAC+G?sQvPiSKI7v#*bnSW97qQTs6_{Iyk^ZB)v>dd>(}8oIMq1IyhHXO zh=td@<~7<+?0cS{_riQK=VVuD1;boY3yl2mF*G`m-v9kqqz4^zO1j(Xdo=Z!w2|v< zlY=P02$9!r8-jcU)|1!eMSV3SI29wR3F^=d>=7SwJVpjn$DE2x218ygHQEANi2*=# z7Y7)JD@XD~KgH<%>v~o@bCCVySs((fWYvQGHhPNE-V6w$uW1L#Ou{zigOD%k!*K-J z^UM)O4$tX2a&#bBy*aaH2isxM(k6PuQFpkw%oM6c+SsrRg`An2y>Ge0ZzN}CM6DCq zGz=P^g@7@-wcbnAeT<|0CZN&$PMPbXy#b&3S#iFQafYpOKjc@`YXxkS&&<}F>v67$ zGel;M13lh1+MkwmEN-f;H&ZL`-T@D@`saO}sSk!=F<(0vo;dT$QqG=NI&FOBHd=;P zN5lEea_(&;QinV+(wte~eS%^^ev_rm1MPyyK{_&vdaDIxpS^kumz-5H|2^x1Ic3i% zSRfeng0dY&5Z%#dFtR25UDXZ`t1i^c!3t~)_oR8VflpWaMsp3jb;-<2FVSfCQ}4MN z%+{kNT-onQY@Qv9%XxB^89l}tXHUHEywlPVd)_}Czh5)4oOIN*-8F4@-445p1lrk` ze=I%iKCetGx~lR*Y$%WmcEs%5v91G|(wS(-DZyMC2tVE-Ts*xi->_Q0L+TkmRY^slXmlWh4PI?Z@2Z6Fty;UijnP2|agte5(*sc{v zP)c&*^TXUhIoAn#m_#Dw17t?mF5WY>{rtM`H@5a~Ob@;LlUlZLX@wK6_o3m&?)643 zsiVlQwLwYccxukCv+p`$j1bIe>bVBjMlk2iuq!C=DjB*M=z@sN>L?2P`(=c9K~XEz zOPdQOYeB^f+-#EH@xRE_;Y5-(afBFS9ES~q5+fGl6$i?-mQwViqcT2W_%xjLj*sU5 z&J~;)%?XU|Do=+327U#6JkNrtUoJiUx>l48-!XC#4hRMWrTY*f^hD2J7|PD9bj?}N zRBILi7TWRvW2XV}0vQPiL9T@(O2&pgitCG@LRkFZ4_{C8gj~_JHa+lwsByeA4gwoE zqhuBxB*57uFoFX_KmoEY96HxpGJiNfu(}d-aciDCV|@R=Ub7W}(OuzLdWU<`85g`h zJ^siSrG1wlSPn_Xv`Z}nMMXw$E1e7XLJVTAAiA@%a(#8)G6RPJr=>Y zb?u&w5-NajaCnZ0SoaB*Y?6n({tiXW_1&64+2!^H2;R_W>>BG8Mij z*x-6moDdvnWJJA}C{7NBLf%i)Fj|}ov&ZtRI4L941ZEB9F=%i)QMSO>aK?G3MBND% z^Lsna^z&x2!{2T8q23I2l;Aeh4WoMTcg=F|I$d1n8t zUa+QgxS2b~P|vp1>(nr+`R%NkbVH~J{&u$Pnzp-k_Ke2$?#gx-@;8@zcD&eQ1o6xj z1L6f62)Q9STrlS%3-huHzEeGS5p0VVE`k0r`YcK>wl=Y7%YL62Rlo^nHD}jm?+~ow z+9tJQPoT??IZcS0;ce0@JO^yx{UhNpBV)YZEoTUpA(N5u1VuFlf@AW7W@zt=Nq4YY zvLlDgaxR~%{&T@;0>%c?>aI#2xD6XJB0u;&x_#Ax z%4sca+x7)|C$xTA-nAyR{rH;iHTp-kt4AUO%1Mk+b_f>=R+}1_jt@7nDXC_qZ$ncN zF%OCmB*I`47Z1|p2NrH_;exW2qApssxc<}dnTnCBPeKzzfl0IB!@qgKuEpc!gOzqK zpnz0O{zVd_JG!OG?4b1TdCz+`T?&U3I4oIJpuoTc>#VnAX319MtuyZEc>b^a{;n(( z-AgKGCsa?rvF7H#tUVl2G9WHw$C(u2(AZEg-?n!t`vKe`hpq7*i9!QO#E8U*LclbU zbYT3>oKrTNCqiZ8=aOsAN!M@rW7>7e-s%4PKk80f7W5V+Q~%~SH`iqoYylPuB$iAk z5%Ij&Cj$Z&OR&Zn_d9Kn{~uoXuIh|ZGyTzv-jtqw>>JXGLJ{Sq7KUe4ZmWK3Eo5t zm$8uo3g6LGSL1W*4kbnfBo*`$_5P`PdM1$|@!L5w<|xya_pOZHk%LW{PG^Ks^mAv1 zk?+>sT*Zb*=Y~`ZZ_j;{?WS_B__x5?{TJZhWS0ZoNF>K+!L8)1JVYOo1wQNK*|k0 zJ6M*5WDQtfwlBDk)(-W(Sqm7~sA69@%dNVs(LrU-%{1w{ro4Wtl@lzcOzI>jCnDfb zWRAnZ?Nq!6hJ&kR-EfcUMv?tFY%dz# zZ;p(3=Q3qgahS=T78@=R;JPA$f>N$=dj zf;&s}PTO5~&dlDG?XLWZO`^(9uSmz*7V3J<0VY#%>Z0^p!#x*wWPUG#w(2z|&%b}8qIG#Aan7k6+~_e=G2}MW)FUhr>SRPw z*v_mX9C=8yEwZ?XToC=hC~yisAdvm#LgLX<-46-9AFS zQJ(};zSeAzhwupOzX*p$22^w8y@KIKv^wwE>i`Sq^$zuxL|_;SK%y}2QTQ&rcfAAm zV$WQ?{_=GB4Hu=omLHfNbkNCn+SEZ>1yq`vQ%G@G-yi{ic>?1lf(?9?3^&kU98=)D z{08_mu;1xp#~Cn*5^(t(V*ihxtDeCv>0>{9V|wBJ-EQ;T}P(g!$YM;>Ou)muR@ZsMjCs zY)e12v*U7bF~$RZHZEO}XKr1?HnXkj-_F>9BIffH?HPdRRRonWCtK3o+3jMt_Q4(r zR^RB^D`KMokU6B^upA2*NTx_OD3EincQjShYf%a^2`dJuZ37*lgasr^eoO!om{=1?!up>8>+CbRSNlg-VYRz9~(FuwtE z>oY%ok8Fpw^R7C(K_vG<2R*)w&>?Ub3_`^>4d--|AcLl7=i+ADb7VW(tZa~w&y|86 zrUw7PP*9I$)BWO5Lf6dU`cEqdlrYyuz#>5P;!rdqY#9^FA^$GxRf-x3l;0PB z{sA>!e!`K_|M1Q@Ft&l)Vt`|0g}k*rJfasJ+IsRN6s1R?0x6GEIsMyQ&oiR0`|PQJ>z4ovd-P(3gb7R5wNt)Esat$ z6XuSn11z+hh#DOX$S~$3lC~iFHjefyP!mpYkR1ghXK&itcWe6o@4uE#I_U9Y{=Ksf z>U3e!1&Rx6F?GWbKfz#Yre}zzAl4z8&H41>r9RYsckisR{r`GhYD<|f+Q{JS3opIqC(y1rBNAz+yayU zkk{Y^umMokRA#k$6}vS3b_0GTgM4s{ey676hBFlmzbH?U>vSxVld4{AqkVElav~v~ z0i{U^3VM)0?ASQ0qtVBd!-PY?Qu8_@6tc5h>|4VqaiVcjd>{w%`a8EoL7y@f>tT_S z^=;Szu8iY}Bk1-s&iY0xfapnwLB%-dx6dn`<~*xcClhR?-=)Xp42E;-I>kztr=soJ zg6JhW)RS#aqq8dXRS zgYYSD4~OGqC~ut?L)YxzB-4APLtP#jb;hV#=5gTL%hUVMJ1zao;m=41+=+T;+V0xF1~v*AlRNf7c(hf{d5-!pA~wnuA^?gm z`|fYQke1C`k=nj>Kd{5OV0C(yi@S#u&LRdy z?)h`wXpFkC$-$MPDqyo_h%zNOo;n7M1-@%m9JLJr8a?d{=Rz6t8x}!c2V>%c&;Rt@ zY1zD0=~>53XJ2-{==$fp;_&ET`tXIXO^-V4nd+59^bT!KU%K?e>8baA zMOw3H_kYfpHT~2(eFiA;_~7?nonCyxy9I4!J*zCDfI?wNFPKX!ir%vAM7@_NgAz2h z)*ixHerNhPudJy|ZF1&NYI1spo8ecCK}xkPH8mYq%{DBhGiJ+4wvz&zEcb&n$4(P_ z3P=+XZk#D}7#CFgi;VOl;GtWkc=LKnlrq60V3Kw`Fi6N8<_?Y_yLtVcome9H&e}S% zZl}#JlisETg^7w|6qHQe9Sc+caG&5_I1m^<=x_cv?*q$q*7e>h9iHoL^fN>sq2I%J z;9flg-KqukxSajX`_dVv#(V?yGWmr_+4?r7CG&!mEhl>-il1ljfWk7ju15_=esfbR z0c8Zq0M^!yYE(!2#H_!#GlF+sC)f;mdpOtly51?;l|)uAACm)n(YC810}(`!>_X8N zhG*E&zdm)&YVN5nZh=0CADgqcc98iU?+Hd~<{h?l>c#{$A0IB6d2@6D_hhXQyk||J zV_37SJ=S7w4Ep(5k0vRJdFofNW%1m_3MAMD%(K*jCNs}9)?(fd>jeFUy%^B&?Ybse zDx8D&o_A`x?|u(YN9}pSPM1H^7yRd(0oL97&p$1leB_JM{Psoai;K>|-a-C>DsV=U z;1Tv0fkTtodDf5}>_4ESu|Il*V8K3fV8-h?FGujcg8(VlPlos6Q0AzMifE2DRl)f0 zKrMTbv9T|K&a>YMs0v+FB-4b3>E9G}rUf}{IKIt&s9O=bab5|#70F)^T%zxIc908} zX9REQ!-~u|47u{X=9ftmJ_AJqhe3{h4K&3@1x0hxP2>?MKFUX&K{a2%5C8DrsUJQ2 zz2APhF@NsDbnHG4(Ey3&)s-C)(|Q3s=~=MMz<8a7sn`Gbg%b@}zkOXaO6~{(0F0Bd zNz&1g)#SlV?!x!&Oi%&qC~Hy+W>6lOqIjYl2wc-IGe)8wIqQ^bK2U~dT=44j#3Nst z_FR6qf6g5|{nR^s23VW#IOqB4WhcHjZ5yKZTeZezycM-M7-Sd>i#iqx?uT$ffupcd z;AN&L+pIPo$cVD0F)V`W8(Q&xMaK|MK^_(@TnzhD_GoZxFqC#KOF=aAy7cmsz~@(u zk$3upOkePyY6htHe9yTrNzb|8Tjk(Uqry6j7B1BEEtFwumRk3)&KX%9gn=-}nYzgG zZ!21aMV8-iq`aom8AKx4+!IAl0F#I{_hLUfFk~Vd;EC?1$o`04qFY58Q4+xv!6F<{ zY7ohwVu-UR35Z(f*+B}{>R`U*z`=|%kr_e~VQhrM-3*(IOkc%(%5O_2wm|&YC?I>t zIPw-QVWd%57gAHTN?;J`m%)AN?>FWJ)e+3j++Ir3I5{Edv} z-Z}fFWjtA3=8v^zf)(}v`vKA0ev4*=?Aiwb!r*y+DjZ!f(*%40;$jUgtEiZb$c^YkY+4+^jMg2PJc2 zTv(CYXLY2u@BHQqjU}Bc(!KXSsjM-`g=o!zfVSIZbsiuK5V2xY_9w z7riAt_2`$SWiU4tP@w63Jv{?=WCqT-@O6SFKH;d-$~G##UInk6C-@%<-w-AoQZk|_ zaMx!qr*~hmpKLs^zVjLfgqWBeVMv?1C>q|^$itemN5ROsrGI_;0yUF z<&He^^lztUpqzmlw)`=D=@%bL54rnO(mpE=lH8VoKD4dq@iwS{h!86+8egLnsjnte z=K8yE4!6k2$fK(m#Ox{8R5A#)aG5bv#)(;N*&p<%Ey1EZ4_rLuckKTmrJYQJF`KEW=_kOwfIdmunlQi<6eO0O7joojE#~RxMneW+XCZ zQBFfvl6OKI6b{K0)o#v8%jPdD4Z7yur?4hR2G#~(o;~GR^K6@&!!!20_A=V~Y%l9k zov9q3m{69}{mc11x}RR8{(aP_!YD~LJ8Gc9KH0AK1%}*hWteBd$>yynjW^CCh~TUq zzYSP8WFWNdqV726$%J$u0+?qEVE0r9R-W4!_3i=u-ZEZ;qNcWeL6PByAZtjr6>Bf* zkgNWpekSdc!L6#zX5YEB1i#C(Cw_hc8LVmPjWnrVia5vA%GtrLvm1MlF;}^f%UZ(` zbq`rHCNuY4bLN-ED5W7+-u%-kd%I7I(&-tvJu~p<%~z$fFaLOY+`V3y_E~;F$&!mM zU@fu-91vx{AitgI9^BPa&WhRc&Zd_MjFnYS|P4OqZ_&vwO6@;*cFUv`xLX9q_Fay7^p!m}GiQ zPK$h_oRK7l9bSIRXUs=lx>0Yt#Wh>?7ghGOcfFkAJXohh2?5BtRR9th%Y4JI%N(42 z*~jF(w|)D{vl^=w?3VUjb+{mcYZk06g{ax?)-0@Ap@{yte}e>|p|uFA?xC$|d1ocm zJrP6$i9{IwgR#=&5`WRR@K4A~?D#hxaZ)XL#Tmx-81twENF zm?vkQwG+#GadYsT3?d-A8_V9ThQ(rt@ts={R|ZYa^cr;j@I@>t zv&1<1LEh15BJXgmVcwU{L^jNav!vWh*|xTsWn|uDPrNe+;A~_eBjKiKj-n5zWm&5n zY>428sDAG(Bjd$3aG;#^z;nqFD+rs)8mNw?Wm!X9bDIn_6Ap1rY!ET=&Rf>R7KyzP z{Rca>E*LjX_XnJ+a5Mx4A~u z+M4U7j9&_%qX<%MK`E^6seN zfM{e#qaUx~vF5HJ2u1)%4Azt53TP7OavLS&YrT~ie#QE}4NW9(ajza_H?glwD#m@; z`;<3Q*5G}MF2V_8KXQMZGh_(aS+2u=wmxxiD9Dk5pTO;9&|%ntF7wC<-8@&=i;&`h z{9sSJ4=FX{B=ZOqv&WHLAbVV*!td>S!Mf|i96?;KY+WfP;`N$0#^ZzML++!K9BgH- z#Uf5U>8uD8p7oQ{-N=Q`$xZbQ z6+OSbcNS)StkYZl|K1E>d>N8~fyR+Di}5#~vo1s$p<0??x&=;$U~{&^_?_o0L74a>Y3|&uBXJmEMnT(EuFzg!|Y*RCbgXY7~KXgXf z+GK1{En#r>RA)1Hkql|>k8a43HLBw&oDoCaqgHXVbP>=c?|rwoKv}bYMfNgdw)SF9 zOvGMB_vCd%>{WCYNFsu@=qb+OvwGjmdixk>^l;ikHwMg#-xI}W&*zM+D1Wl2hU~Jx zqwZ*C*{&rBZ`u@fwsTs|X@5o{6h?ueuyq5hUc1S;WvyZ1;2|qbWP{N}mf12%{gxXO zC2Tdwo_J65n&4d696SfQ*_j1w0}L4EugnOJ4J#-|Hq!5;B77Rx+?B+O;+7azCeYb% z*Fbft?lmB{WH!kB;skr`L||{L){a~4c>aPpcUbjSoR1^P+N)<4%o<#0mE>6m#s&-K z-9>uOWGSQWc4oQukm2-koz(`}QW&&l5M|b!s)b8`ILte+XNn1WSdO^iz05s2E}til z6C<(Svz7gn2TFNI*mCSe0tO`k)l6E-EN{vP8|7ePt=l7OrhhX%1N9mB&x_xlx(7F< z=N$LO)K)ll*l_G|1?Gl&((GAtT33XyfmVdbCDCyXu3@m`@^!#$Q6P!?xp}@j_autLea9xWf4GG>5ZLtMhH7_vwnk4 za7&wxIUwZ%*6Sns7;i5!kaP6x%nN$Lth?eG5ixC*<>mM8jT~)R!Y<}ow8~twa7|g; zuQ}=6AVL7KKu*83`dq;ggxx44u zhM?Kdw^32hoG~tH395@vrM&boMPt-8U6E-u#XBz@C4i#lAnH6)Kz8#qdYQ`Y3fONL z31c#(Q9zM`->ykS>E?AX0p}XgL;J-V=gi*}%s%??XEjAHr?>lGo&h#E|Ht9QX-CdR z5Z`eQ?}-CP(69xB0_S5;qVexjQ_?*C209C z9CiM8JWWiDi7ZV2Zj6fsj`v2u2;-A+^Y2(Y{JSA1MeC?oPkiTfQ!KCIH3oDoKUD8k z2*y}l`6BsqrcY$#+UQmQp>2l#i_sU?;Boo8 zxW4bF9VO#)cED7Mx-s?>e{&r{0^5@ALAJ%8^WpH=K%(BC?_yrsbRXU`*YsE-43nh5 zxCWo!(sNzfWy#*!Pn-)>4<|w>lR5JgA?7oV$wpFrNavg`G09$X&3Dr!e>x{E>spoO z&YqtJM|;zQ4>~0+U$BeD!1Z(IryfmZKLc~hBdM$dnEBKoyK7bXstBwQ6wRT3Zp*^& z#Sb7R_3@U?$X&JP zT$Q?Ubf9ErG%T3CLj>JUXP_oFD*Kn$;85QRR1AX%C(s#Ubens)GDaLxjIeqyQJ#~G zv`K`t{~*^Mo{c}&4%u`L9638#>jW1DavN;MQ(aRK z=CL8M~roEOQpwG$f-Q0a`+GX)x>44SuD98DmTYi={^{q?G zxNpZ2kt1?kanmKKdtjsPw`$>TY3-st_4#Et{4m|z{byb0kX?>01I@HQ*<4&_wn}{}x8Ef4!~Iqs zT7J%W82|1|_e=Y)IxKY*2$$d8`irz~`weN=#rveC^H-)7U4gCyUc0IHR*j>xy-V}T zv9b4-)JqK}39*^&dT)B~W3<$oOzpEfq#t{Swx^Ma(bNIM_}qoEfj}oHk(Je}TL-aD zT|XI2)>Z2&>?=wOk@p}}9E4)cB45`o*rh43(yC<9y-XRCN$v9TKxYb@`3i!hh+vjv zlX?ellT5OG+p2|2RTk1v(1*WOK2UJ!=wij;5`<{s(jk3}&cmJ{0~*e=xkdtA;iGE5 zStTNocd(dKN@m|p@2zj6>>BiFenhzf{07lxia8;Gx^OP-%&L14>^t|jUyPvXSwDGi z1Iq2A_PoEYC9s^K#dzOy?^r#FY}qL^}{03q%u zUDYdWmR_Q-r|c+fg)?TB@F_9NjrI%DD;7G7{u#%- zTAP{UUEh0=&Yx_Ir-vN;#B}&>$LjMBoc{_b)R{A9rjrhQylU_`&iwJa($@Zs67omy zb)sr;Ie$rU%oDNuhFMUp1?p|C+4S2qFw&FO zEZ9AbO-`m&3wPH$UBCTC3DFd8bQ^J+`p}!{AVctIX)A#Bb z7{~LEf3wy!O6}tpy-5xf$7v_MUu&{^fL@Akkn+M=!cpUM&V#6o&v3F(-WY!vq>7vs*JC|QrinB$F_IS2%zbjAgsdPKP09h&C%?t8 zMF2w%fINe#4OtNFEy(Hs?Vm_n``1Z{HgKZTWEvYARltB}aHf24tY7SM+^3+| z(e)Z7^hoZ0V^Z&tYuWuq3F`CG(Qatn@!oMl?GXDs2b>gEasWyOW981{q%N4dIL)0s zFCD)7v1#As2d5bYJ1vSa0z}jgM&ofZTfll;1B2nqJI`xi3`gR#yafx{D(YhFxETJ9 z>{lxkk>4SYHp_6uajpSex>Ok%FrP;DGgu8r^_*p^l%hpiz3(Pj(!p_}a1mLElinPNS7(UPIH$}3d)(=Vgl{Ln*8cJ=b zIdX#Msb{ne4abgQPH~vgE&QG9q4N3L+Vt#h{e^=X2(;*r>oSqNjbD}NtV*1$OSl(0 z$Is+oLrx&Yxz+lwP;{`l-_(7LWTG7m?5=-1?)7O!*BU+VJI;B5)-~_*lp|i0c3-x? z=H~6^JU?Xn#ArI@s28VwmLH^7_0I3Uun3}!rN`a#xpIh*Rqy)l3k!pLJU!!>SIPN7 zZ$P%jyfKES9rLQRWZp{M@APwDT6{jCb|JGN!)$9y??3P55nOCcrYGO~G&zUN-+z4n zl@WSxr1XeGpOy|-eYnQ+-t%52xsE=(&)yG8$L#Z9eg6LQUtZ{~8R>)rACnH-^_Zs5 zx#qL)`^L1OaE{-9{ws7HWZ@$Ze|p+u>D@HukN)tD<@Fza$WzkZD-P0iKXT#gOPNmV zLYz8u!5J66w$KYR)Yk2wHTTlMQqmk2`4O{bo4y53p6qXzeLV2-)NzQ}{}LBtcN8^d_X z=y4b!VWO_Ql^EZ%$N7!nu6%|gOfWl2KZ4W_y{a}<5UtTWv*4z2-%<7(b}!>W)c9a$RIWy`2@~LiR9T?`hr#jwq-L#>Cw58Ryg;*{Y5n+cFY{ zO738b*RrS44y)OQE$6Bzt>m3x>k(*1Uz*9+dXM*Y>2>F(k+H$l_JyB)pmF$a$7zvr zps4E2PEEdGgM#yHJjglCvIiIlL~h+<#_$=U5N7|37ul!C9p5u)u5Cjw=c(MP2UbKr z!ocZ~5y6DAs7pL@3wnN!l?kO5!pDZ*b&BZkzGR;?G!6sTOfC31;Fud22%F`&(F%se zwtT^^id&zI@q7 zL>{wZ{u&u>`>#AqFYwGCzdO;R4`=Pf10IuhS+b9w>noRjNLecs$TN<8wG2L-{;yv8 zAEmMR;JZI5E$><@hwF?BUaL7_(?8)TXs(x}@y2-i%q4FRWi~#NPB`%K>Cj#8EyDp} z&*$S4qoT#$cZG#IpNFtN`G^7f5Z#Y;=-Bv+|S;hwheBUkbLA}PnW69y8F$|KTbUZo7284@2-BFI4!W? zHYUf?jJA}PcdZFWX0U3d;5Fr5q6lo>3GWBvg-8=~->kq#1cA4(vhje?;7o>%4fcsi zK3WyePt{rihc^0HMXi+g7{;&fp(e+`S_*h2#**P&hRKt;&B-{Tr{Q)Pvxd&u$jzBD zF)+!l${1}6p|9v<@45u6B!^;#aNMLQrCA)gCIXmuWAZ2Diww6sTabX|0H>U#sHx%l zf_>7L7~{3bg4k(bf936W%q+>3T22<%DTgN=01!~ z&KPSib8?&+Q7_LK5p1wC7d0s1%u%PWsBzJHh`r02CJN1(4o1!(0a9PLiE!BY&UI;w zi9Lbd@Y*xMOWteEtcE!pNycpdCjHKkC_V!w#M)u~GS_@BxNVAPvFBJlr-!yl*72F) zoIF1Yko}Ys!32Rt()_UpnCHpKs>U#s{Ep1G)@5Xucz*7~dtmH&jik?GOsqv48HRhZ z4h)6lSpwqJ%xH>J&s?!i6aW!>+uW@kK zX0?LMF9uQWbi0=*Mh$X`d+?c{$!bHeu*^QX*PMHasz#Q&)5(dZp0U~^>c3Ytjki3@ z;o23fx{(&oTcY+09Lk=Kupj4?>&`V?%!SEJ!nWCoSkdcYKQY# z7jDNTva3cz`@SA<7@ZtVn|e3yz^pDAPha)6q&}m(U)CK?Bx4S!`LOgQG6=bk0qAjs zJRL1tNwgwIu`V?Mm+M(sp9CgEjFpk2;M{YLgFRDaI)gZGyXKi^N6+#%W33ZVagBPw zNpS12fwZu_OSS<)VFG#^sLPw(k(L&L0PI8pzN~BJVvogpNgffjM(2VoV!bcuSgg6^ zbAp7+=dUdE+%jdqh6yIox=C<y2H)uTAA?>p}(?p{YcG75n+S0c^Et$U}4Udhau8t*=GuWPtXXeay^>SQWv~?pB zxxV*i*_ULF*Dl&k@09az=>D^kCwnd3S9Uh<{)VmBrqmeM^N@HzAMpM+^xl%@%$${$ z%6UX5wn^u-wZU4QicB({GA0!~B%_HPHFs905HB2{Ca?=lP6|wYWtaEpB;A>WjQhie zE7Im{{oAn_xW6-+cKVPf*aFr?6<@(bRc10u%cjMWU#w3DvfQH2s6N}4IZA`Esm)T0 zUZU(R%r z=Ap}8hfute1p!{0^~@2(Q3g#ks^zH2Tq3K+g2N!fSi+-L537-0MLSV6#$8)c)am*8 zJjeqErGRqma~`qvy?HJcMi}k^17Xr)6JabwRt=a8hHoB8<=k7h-=fHi;h=8Vob1xJ^6XpsH>QD649c}()XiP2hzk7$XSL0cQs5wBMeWx1!L7I)X-VgD z8AD{la3p|x_LDKy2JBB0jc9H^J~^7`)rk|2@xSZh-OEPk5iOq~<0W5X%pcA~4xMAu zVboxR69|FX3{owAn@5ZdbFyHv^5(aSW@Qm~Zx{@88?IWTv{HZ_ETgJ-FROrPQZp9p zhEdp#0uRC=3%1qsSIhC@a4i8w4Mu}WxLBhoW!k~;ysmZ1Tewt_{pQvZjFa_j0vYcy zHEkd1SGJ*A6We8^AY231LK~W1{k|@kgLDQX75G!sFmVL*Eeh&m-$bE0d&JPMeD3qw zrs~~6kP=2AdxHD0$D_VshMLOb1iHa>zMuKG9U?o}tW!R>5aikAG|cL#HKLCiU)BzU zHMIB;lyL~A&6Q>L+0GErRE%eg$6$zEr-*i5SH&DSYv4YKnwODavV)bAcZ%@FIm%g9 ztw8GJILryb!rYnQGvprgloM99fM0A#zn#hUK4ct`0c(a9TR-6Zp{yNUuSh4V=H@OP z$os?v*$=^$_9j_Y26{6_R@F4Bk1*T}^Go(f?un6)LBw@}IX7BC)q9E7%WN3Gd%5Pl zM5}t({`Ry)YZ7za_9dmL_MND8PqvVh7Czr#vB`AwvJ(&0oIm0_dw|o90@z89?&}R^bu-+=iZ7-1TJbNo*Bfryn zaKQls3~a9l8L1+*no*MP`S)t;Gtytm2|3b`h$UJFMX(L|Y+}GX09em_d+%=S0|ixO zsc~56%$O~i=_8zpt;#&&NahYnz2=>JgHjM1YgXUQvl`ZK8P_U<6y*bh1)FLGArE7I zyVmLdWA9C%G)=DZ%*d=QYwxP=>graDZ4d^;B32uV%?4qEU;qQ2L4z4Q*z86ao5MC< z0Etat#=rp&I}(dH7%(6#34;#R`p8uTZ-gqN!M8;QYusH`f z`P-aU{rP`ed=WS9eeZkU%kiVydhWLoGdz8{u#(twm}~5r26F80rR!_g&ECZfy$RWD zE!#D)(E?kwXDKsSOATs$weMrOrBDF%#AbkX0Z^&WsPqY70UHG%U&rZi>nhGc;0Tk2 zxyPR4z72saw%t2wRE1i6s<~z_#uhOqDu=SRQ+wOCKWM+ghVnjR%Q4w^Y!5!XSZFH! zVD91zFsD^tPC(u4_gSyNgVqHL*i9sD;Q?n@vGy|spFP~v(Jk<+)cC${u)m}2M$pY{ z&!CSnfFeO=1dKe8bnvf&x2}d8lLRABNj4i68veWDB)(TK(O7pLK>*DM0i9;MPM%9Y z`$mKorQ&9baN}-zx7gM;y_1HM<3uecF8`Cfl|qeS3!!a|9l{9WCv3Ni?# zVSz*k$eOmNS>a==tp`RjW|e%wx>M`fDpwg+bMsga$vb8O#^Vi%w`+MIhcTVXs*M~i z?u+vZT#%Rr1_x&;W}w()?-&JvoRlAMR47&zd_OAv(YigV#_ zn9~qjLvSsLYAG`##NCu4!#kDm0`EijuS{EygsYb*!6m3029o*feLflM2MwvS;C}s< z1;{dN(aGkTav=M9DSn4DseqYh5sFPFCL(cieE1FPR>2@BHUS;Aw-WGT&M=?7rP3+; z?Wl%G8zA?O^CQQb?|b=g1Etn(8YLt;3TiMNjUdOXrjU0cWyxB>+`@dtZMhgUg!c-s1XaovviqHjiS zz(S^=Nf2)&C}DO#gQ7Uf05<@AWW3HTc(Bcfy~&l?=No|*_DAlEd581B@nREW|#+k)b~fH21wk zZ7*G4OlOXJyBK|Ve-0|2Ec-j(;ZR}^WM@rnfAxlgbvclACdP)95JV9u-XA43Y8vk~ zP-MC1npQbDZ>*L0p4lq_b@)WhfRQS{dZseR3p*qSJP`!({blh`=9qcHe#E%5r*MwG zCQ9Sf13R+Qc3(4B{kLACTT50(K!B||YVVZ2JF^QE4D}*d9w6MxO1ib@sr(DBgVXCE zFs*Lx76)B(dQ>JNn}uyxfQxOwN$2CWW+!a!GH;l3Jpk7O@FhU$+RgO7jmFR4)m^hk z>J7;{!4Hzcw6l#o`yZ*%wvS-T0*J%f#TSTlck2T?mzs8k_(0fF?2ZCC-IMH*vOwD3 zEa{TLmZ*dsnSKiHBE3`P1MENe655~fp|}TZG~WvVQ|l((k5NGpGn}hphWw3pA|FzK zEJ637evlbhA<2X7)jU(rU6lYhJLRVBD`FOz?aHmUqHokIyy{-{{^MLR_9Q@c*k2u} z+-zD`+5Wz>W_~<-KI0_d9-l=3l(Cx7={R<>C}!8a)D^A)|6u~*@1UHEpLX^X+6c9y zLCgqpJnIa=hWQ{Lkngx3d_8Qo?3wDeW7{#FhqXdB4V&Tpo?T#1^n7JyJ@C7E2;3r> zgsmXfVUH~Bth(Aw?iZE=dz9)ojRmx`)|48swov947;gI;WfH453x!!@hb`XO-%Agl zucb5CD9-6DrV1*G(aN5oH6foIz(Jo8i|-}B_ae)%&wbx3zJB&W@BH`DxrGN!lAH_| zAJu2X;L__L4mDKJ71-_r$aETZ}IO9uvT8W`!32r@UNJCcTo@M+9!cJpRS+chqoX%cic}T@+M9~4Ef^di;iAfk zItn5vx(2B>-iZ)STRWkZ0QY82Hi9n)d&PlttjwKn@6?65gPR%mZ4x0Z0jz#7BJ z!@#fs%c*cm6~Ysz3*zszmL2;o=pxs1XOcqmHq+;#GdJy>##*z!FWrc)tBsQRAE}t` zJh>`qL=!QhtZ_tSFu(@ZB#Pi$utu~T5Ke+LJ*&-!y-mB8*Q#x$Z~u?4O}FoDrKdfW zx>>J@-94B~>l<6?;<x2zZy)Q>~VR|Px`Ov5ZtTFGH zQ*3@w_<_xyHGu8n85Eo|Z=I6cT@*0z`&gM^;^bnQAvmHAAku*346{n!nz?dRkHa8K;AZLq1Cg_ zyS%>aF&QxIG2ipz(;EHEyZ#LpQqcQ`}#xL6V z#QmjbXfWSLfPwGXUeiUHNi1E$e(hM@xo4DX{g}5#@fI!_NZ8%7XA(<5^mHP47r0P<8^oftZ&~@qxmu>e_t+wWEPOWBAAuoM&e$di+eF>*!U+-t6)X{3uVNgD@7eQN({kL| z%a}hr6Ypv&IEmmnYbV+c_IKuv*7HcXk^ATUV<*Ux3m9b2;=Zn&aUF^&Dktv*#dEL! zb5>kYcs+)%4DjyitJ=#LPx(=v;96{aaP~3gEbGR=Dav)}>tSRletWg2I>=CT- z2*4>3729w69^*_B?nnDD&k3tC9Bbz@0kEWY^@TT zs4@wRYB1ZkYcXkrd@up!s7a-jOeHTd)_h1jfL@M5&df>9^$~JN+z264PCaWCj}Rhd zS*^U_nFK7Z{za6)3F=ucyvLwMg;twbSrsw{7#I(bQ9e-(*p2$CQ6znlAvJy593|^@ zmK`G9KljCA=iHu=LtzWGK&OT>2~ffk#YhH><4pj;c=FzWwx<)xDH}Oj7z;!mjJB7v z+>tgKd-qieLN#Jsp9LRLOBMj{Kc@Qm-IQXW(OOJZ)(x49YC%1!^cyo6ThIYpN6|O1 z^+qYuGxXQZNNWS*cm)GoM-CnH#Osw#7#&8mE`mg(O`dVJOW(jyadRHOKC0)GqN>D> zxX&2Kn=?spb^ehOH1HeVTWrqGd4=Hf{v$0OW5xW`GpRPo#fMOEykJJ!>NyQ8sT;km z{pD*0G{mf2Pl5O2uiIRXNUF`9t>r^vPnuJ_YdK#o_OxoYh)sD4tPu#{LPLK4aXn~b z6TR+-e(ufb)QOYnxt~JKHtKzd`fR7;#{kT{C*t<*EWO~xuTGcF9Z&!4lU$HOo2u2P zAMBOvALHp6#ftiwVIE}um2FZm#2O*M=;=69wQ2&pBDy|BePiuQE}6r%xrfRl&C!-xqp?7@Qji6h~1$MIRcPQ zVP=Q4U#>I%Bg(@&9iKGOMP$55_2u=dpzFN3TvNk)ul7%)mv4JAr}^_^+#^^ zvO}C5GQKP2FtL}Yl{sX^@K8U=xp_8;1L0`$Z!(%>Tp~lF7c>;8h9lOnWA-*}{31JM z)GEj4gR6tR`~C>Z4fX* zEF3aD3?NjWh#JaCi#3@z&R&#XgC29pRopV zaTG)^HOgq2w?L1sAgq!ljq{uBl2VcniXb0Tnd|6C`=d@ycX9;x}I_7UfHZvlWOSl z`YofmMQ}hgfWEnW-w0i_a1gubWIAn;_5yI!D>Z;cL(P(9gio9{r*kju8%-yE3?lSXxaKpCmNp^Vz(UfIXma{b^+j>!Z{MZ^#2Nqn* zQ5#XQoy<_R0eeyHXtyR=ychZUDuC$6nJ)6y^w=Auv7yj&P(>q)}pZ@W)pKg!9Iaz1S zch)Guii|%@2p0kJj|X0hO}0mD#Dmf+p``U0zS?DuRrC6_lWN<%T&V-gNw) zfl1h>xHn0e9Y;g^gPoJi!v3Dw6Rv~f#s1jW8#$B4m2Y`os9|jA0J2<185mJpBMXW5 ziGzs9i`X%>Oa;Yar*{%4VN0qSYX!S-)I3vL8;tYLt}Q=d!CeHLMh=mIjiCFqw#lHf zQ#4&H%oJ^Nrq$aX9F+Qgr(@l=eLDhh+OtfACewJi2KG3XuITv4wqi^wpj}xX+$Vbh z88ptpSbJvUn(brCU;yaxPVfyFJAF7O4rK&p_?u-C5W8AUeA6vbA*R z_`W7sOb$T1Q`sRl^-pH)0X3c{N;y;!bi;0Bd#t|Fk-lzw2};o0>-H`L!eF0qz_C}F z)1xvG(dJmg@jZ!x&9VHA@f6j&57?bnnt`yxYV zM8Re+VEtoDppToS6?!rQ9g3pW-~_UAujE2Hl7S zr)+L4xwEyiby6OSbX(;nyKo3?sB^P@0dQ=n6%dO>9BBH$%7MGQ2slI;ep6$8##PTgiY%`8m z&2wZSu}3g3d0()G*h`pulnUT~mtNV~FE+m}w*-^jW)D$$g?z)FO~Cb?9$ouwi(x<# zFWPL4K`gZptB<`!2?2q(4hq)T%dWk>YWs_ro)+|Wwdj23Iw39i%R6PB$GUmdQscks z83iEX@8TCL@xXl%FFpR|SEQROZ%K3C@k{@D_KENFnWg`bs3uaJvzH?kywHY%?|lQ? zE``D7{8=D}LRGz}(|oq{kwegK@pMuce|EB(*|xCNotVJJ=_E+ z=6oG@S!I0~Fp30(=9mHBafx>59x@EEZh-qYK6#;*B6?AavN7~5Vw@)?w*_3*C#`k- zlqrnjI0^>5?_ce2#AZn_!lV%eLiIMiVqKqIDM9POuGKYZaxt;22T~A8ZK zF^je=T5xDer*rdVqm9`T3tHCi*gJ{>8=TLZs8?is9-mMD$49?c+T7hs$4;!I6It8_k*&8bty>`TgFo|!>2Eys zf%Ke@dRN=%Sr2>&kg+{h)3kBd40sgA^18k@@ET<@YoF8c}&p(`%ep26HB!2|&^PJ!MF&LsPeQ;j^3 zF9E`F)K@PB0EdiP1rSHnVvbjhF3Og?1KF)!uRsD|k#fttRc&pd#%7urfk*^@O@e#??(kv;hV*ja3^ zoGI%W8kCUrea{FOu>sU`v{(K00BgGev~{1HKi2B?84uMCa_`u(xW5o|VqfGu@wc9# zVSvF}u7wSLfYF^1YwCK5@;yMW`8*4*n#r7YrB8wp?@!9Ov5%1HmXqvz<}J&f3)GbY zH^Ex8JIo8HcL*a%F`avdp%H1-Vv9wf*H~2Rl>W3n3;r6mB-R2u(6xC85FP<=qjoQ- zg)gpo=066F%;8>?jd{nO!yc-P_$VXj8O7^|K%jol<~gl~J!Hsv$4>dZYxXksyk$)B z8KRAJ`^Ns}bDWQqun7`kGGoMoG72@|^Zb0N5%%?XvuSfRVu$#(+z*Ovmc%+ST6|`~ z8QpessiFGoc;;Yyr^Sb)oGMdJdG|)w?ON7p{G%UGk_0fovJQax92>XN-aZP)m1WS2 zr@88@D=Ej?bO$R@BA+iUOnfc5Vz%BB{tkc~V;F_n#DFBY#jjT&MDWZy)BdJ=k8C5x zN%LHNku`SAHKPG%yJvG}b15yLCzHocG-96}fTu1}gulevbQS)SB`e#PDsYskj+=hV zoY^V=H-c^%{0p5+00xQ81jNY3#TwtKlDW~fN58EK@@E^6oO@N0LIR_l6aNMPBC?BE zkN9W26ZyrJ?tUS?@(nLfZ@Tj*Y3|?u!k5jS^&X#+-s8~^ut|uDS#;=~JKU<#awC0e zSQ|CYAI_(OM&JC`Z7|h)j^BDPx#Dz}`IBboM0wPvDoPSr38-{Y@TRXp(%|6S$6#jE zf(BzlwlxY*=$Q~kQr&f&xp1*2X##bJEDr?RlWXm>IQUbJqf=%;prPZf-LU)7J9Ps{Eu+u< zZ~3v`Nym>LOP~CaPfy2>Q}@AGc^2jRJvO#kdhCHS>G?nSs`QL^xspEagK0g4lJ~qh zf6O6Q3%_xwg^OG&iaXbIR_uBKyueF075N-G|XLch_xvWVcO_VQ(|dr(*`96{?h!N<*gD)F*== zn)ZiYq+&E5a8z8d>SUo`d3%RN3pjE7qo^5c*A;%NAf78QwxTyRKscE$EnG6{JHLql z4)@6hjM&qKg%(LxZIIbxvPBsg?t?pJYa)n*ePC~m?ajEBvqRdRt5PMz7BTk(UNQ%{ zU$HP)3jkW!p{Tq%Rkz(c4|25n`etJ{ZQf0Dvt;&7tw*rsd?MpXB_-H6^^rApjAc;j zdm8OoBQ`*--K@?i=NgG2misIsMxHI|#d$_q9e(GO-8*InV~wo^$XOtVz0q{R6^8 z5hn*K)LU2D5b7NtH4s#LNbu0Kwb|J)KTNCvt|K+i2z2rN2!LbU0IVW-T$lp`#c`+g z*I;c|DGs+ua-u0d?O7c!>!7uZsX`1G}Zx_9h})nY^W%}&088T0M(-t59YYYnwn zpcd~lGFhC)+p6?3cenPpY;H22N}H>$PospYVt+}FF^c8JQlf4+3WdR(AloM&gx~Q@ zyw6DW=Uy4tm}D@paP?+0_R4Ta`n>xAl#NNW#z8&i9juGKoN5F_^tuvKeT{TqJE{56 zWYqU87-s#9v|F$nJd@L27n*1FvagzD=H9s;ub219F@QHJQHdfvwSxee!rD5DxhM7- z@7qC~+vX?68d=uu+&sNlXJ(@X7OGvC3FGDLyT+P(icF;V{Ok+Xj_9Ce_Gtd{toUKp zPE5c?sE=-Xo`x|MCYvp8oXqAE&u*{lzbzed-5(K{|8lfkUk@aK_k_q->@M!%K6H{-eeD#~Bul zR)IsI`OMAb_6#132=Qkk^Pu8KLuJJIViGE~ZOz~lHDR8{7aD})6{(yu;M8o$un@?o zm4LE37{=SEoT5aAM0>8kbgIyr1%uqbQ8qi_39dh?iyP5}^}<|WrXut1Oyj1_6@;u9 z)DJtf(tl zZqFo`?ELm}dhqmvB`d@CBj?-coy(RD7wyoUq*;SlOW=i#I|d`pQNNzf9CtKN*<>=| zeZcO*AKv6x3vQ$iSL#X0vS)U;xHeCn3dYMym>~4OvUS=03t&_bqkIsb`j1 z$k}Lj6mK+&f2?E19tTtJ?weoyJ8AydvGl2bpB6=XHg_27>nm$%Yv&+6bRMeyiS(7< z_3P<_-s9o)x8L`oi%c9lW#_1fYb%j2JHh?NRt`P5q48|QZ4k$yHfL|AohMn5l&qG( zs^UC${WMFx*GVXHZX>NuaC^lR1l2x>@2%-K8$hmiGV!-{+9$Qm?cHv#7z9Vqxxp=8_Jk^nTpz_F#b4+Qj@iPJo^W+ zeU@5-I6KD2)b}jUk?xc0j6j$XyF;KP zduwC^h$RrSWsE0`l}OuDEjCWS^&HI~(I%N!&@`FHRwp=@N@k{%NdORLP*BJB)Hwko ztnH{oTuKlQT-n>};!qg&pf?I*jo4zNwl)O40IKoXr|Q^?0%x!%4vO8g`50@?aXfpv zwfq?VEA>y-Cy5X18Jhz^_801gdjYJz#E0|n?pTvzOYz;Pyi9uz<765f86+PCxYpup zgBC882{TgB)*O%B5BSa~)D}2-Fr+mh8>wyqqF46)CH?*1wzU|kpaetQFLslC7V#SB zzI~~H`H@@qZ2WsxB6Ck{LHUJ#{Z`ka_XBty&dJ^ogWkRci}`?AB^SS30AgRutGRD} z^zNpW6);X-n}6E^NtFnxM29^KeAPT!v$i1Evu!l8) zZ(`Zk6Q}Dv<+)Q;{a3B*s`z#D^F=wAd**x5i$|pjvRyEFBoL~&BE}E4Z^EWoz0nB8 z6~<96@8WvQ8=gJ(-&P_DwRr7C?pyeLQaOtUr?;BE?~RQLnl^L=N~DQ zC|__}w$Ybt$AogL*V|E8?gA;6>R-8Lbt=)J7;SV7;vO3PTCLi~ou;1DGYe$ey53q) zt@d`THcHeGIWJK$&YZN4%4tsa=8~zaS+RXKjwXz?vuf>=R0lHJXoW5cF*KuefTN0n zmF2yMEUkni$|)Fcaqvod5O1EnJG@nGK`X zPG585)N*gg%==`$yK3#M$=q^0MvZl${+?R9J^hC{3i4?xpSiY#3l|}oY8AveREsUDlLr{I zF1l<%lRhJLZpH-XEsA={9`!xUYF%Dc0vy$a)%8$?a8%b7Hz0mzv`5}S?(NJt$Fc$f ziCCk{yo?*TY_Zw{_@03%nYYS`3$o; z4rh#AgXjuwX;mxi!72iWXwOV2>ew-}J5YfMXhomqTnK$d+U6+JssIO2v8n+Bw%xLE zl9M}9tMsv=)MMLhzNoB>iK)~EKfv}p1mVuKRMML1bE?0CActG!NWn2GqPl2_15gf( zcuObOE7&nREbw~-!l+$ERO^0(X z1uO(y2yCOiosrv8T2|~DjZ}cRz0N!j1InZeN+laDEmaG>ZWWQkTF_+ZmT*ouEC<-&q%tMavvs%W`*jj3Y zjiy*5BhWy)60uYPpo=jo@xEk4*G z?lt-gv;~7geW+7_eSgi$@D#A~o?TdM&Vp0+81_m^q+l^d{T7lr1d%WxBus>T61b1w zqH-cJf%>ilb>H-sDO0q3tv&omiCy6n!?IJBGR_fxBVUR6gkR5CMhyvUF=L}=GGBQe z781HamEFR5B~HX%jK8W3d(Q?C)0OoV6^^xUKIOt=Wj(+2wJ%O@SbS}o`ViH)5`!Dd$OaDkgDk@{8ll zrh;lzQKLfb&y*frU_%q6@BcQcG1Xh^vn`{|LdMdXhUbEKd;W6wIWHq)Fl?TH<=p`(KSW|4z;54gRKj-M^jYE{nQa?DC3}xiGgzh6op=^_o)V?;x>#wBx zcG1S#5XQ|V8&4sOrB_<+`^fW*D8#<0E!n0jkq5rB9$@r$Jyn?l1ZVVLV-6^@GL`AW z>BQ0Kdv5h0%oG(6BS!6@>cFc5;UZk|o%H=QaYk5QqAv?r09-($zhdlJ(~O_)Urq(i zh7^vOW7Z;p_D5mv^G?6DtkzUKRX zH9hNZK9ZjK-dBn}8woQt>%{75-AVRZ!y0&5T@&IqK_G(PxjHv8=@o?Fdk?PbMq}@P zYbkAPBj8n?{JOE6YLsh7?SmFqk&WLkjvwbFhz3oMDzVXSD|1|HZk(Zlo#Vd}>4Oob@tNEbbvT*}tJft-0Vo|3IgkWQjZF00JvdK&6j_+!H3m}r$_j~V3 zvU>X#Br&I8`{3k65g~p%lGh&v{G*l)9N#N}+F+&5hc=w`G}X31!rl7qxxRh;}K*l`)Qh zgHbHE*DW}!3ixW3gQ%3R8)MgOt(YBEz-uffsBd#~wwGzogf@yzKuuSyAqQb@n=MdF zqEh$EK6L!FUB~vp^_$izDl!>t-z`e9&d^XPkyPz9cdbWeR}RE^(aRtc1Hgf!#xoHR za4k7x+6S2D%KCHOUeK-VgJuhAeRQ1rj5E)#EHT1^*ctg8?BmRpp4o(N;{C{dOgvMF z@E~n%T&-XBrLWsH+krR{N~`C5f3=nk7BnNISi$pAJ1V!EUVo~#53E~+U?|z)zPwG6 z*GTpPSXG>dOq&Deb?u-x;NXJ&Zg(R+CAZttyR$uK$8D*6K(~jj09UMOE4Bo2OEO4V z%un-C@ysA5AoU~3x;C0Dt<&F^YgGOzM zIKF50SRlMg%M%yJ)HAWa;M2z%+Ytb0eXZAM(?h1w=h;Z~kni2b*Vcso{zy`^02t4X z9Y>)zQlm?2MOs&-Im>8rPAQ8s_F^>lRD0HKFLWjb8+J!6?=){&PxRdcq` z*czfzZR;xbGVG)QjrlzZta;dKek;3$b4u}ANjvuoE4zVvvsl5{Aha%{6w1$0%IQMC zXYT!1UiY)<^|xM|=3emgUp)Jy_xtSh&JVqto;On)T)tZ$S3HB>S$i*XQ4Ah0Oh&*( zjP90 zmCeZNbfC_Ufe;jBMGsD*LUvW9*R>(*;0MQ%Nwxe3zI4Yo=A-bg`q@ zL)q=#t&Ai))!&>f>xEbqYGq$hU>7p4b>mt8icS|QVW&R;vG%;=HK` zFo?afcV5Fp?IwF}?Rjc`L^mIyax!ERJgqFE)^X(=1*p!M zEf1QgJtW&wMI-wFLB>;=YD&B)ArS47YpNDmfP7z5=;dMeEUOkvN_sXx74fMpS!~a- z9?q-AP>B8CmHlSl6?1_(9{t*yIN3297h91rCZ-;G%xjj#SfYGDZE3XUVf&y>YCVn^ zc$WP#5u4QXV;uFM?&~qNM*I2fd)AVRexAQtN@^rn8bM;wK+hbn;zCm$5d;9nY?}*4 zT`z5V%x>mD#`QOx2Fu55CvTV5gnCb`Kh{!hEx78c;aPaDw&-&0839Jps|d+h0L*;5O;=55_!ldMZZX6xX$MQV0msu0J;TY{Z+ zKz03&u>m5(fZvK*FE);qSXn7po#$?|+kU}uFN$R@UV5@@8DZHC6L8u=sH_ERY9g|> z$#R{OHtFNZ#3f4{;Oj=^To+raT@|=KzyFOlyga>r@$oeGO)vlA*=K&pm#51aee=Zu z1)^<_!Qx~S)Mm?Xynh=iPu}R37YT~b1z3c!aX5h}tr(d z5^InwI9|PO23Zb?f}SWWBm<5SiVdCZ{&NFXiGi>%TqeA2L($U>jP8n)+0iN#48&fn zY!V=muKHCsi&6hKZPX8&^HPO)nBZ*8qPfM*LNeQ$a840w=_h?nYs^STm0fMXF{2!v zR3@x7AD%#$tzN1VlHtDkUZUH(+eYt<8Ft&yvqKdfLcaHG8+COA9>={7VQrd%c*C`f!6?&?+66R%wQ-bZZndomy_BD zsE#nNr>C5Mtc*#YCDlFgUYL(@qnB7f+yI%+AmJD*2?LQ;BkL`6k#iEj6HH<3*}P>> zeC;gT`&TbbZ{dM6>GWECBxLjhKl7G!>HI?ajAy@By1u-TPMz3IPq}z8?d*X}BH6xW z4%rKS@HOevpZ%`s{om!0$rdi|>{KL^YcW4DwtyR=iH*j2R0G8E#d!-zzB%cecT9~_ zn+0pvY&5M!0z%tUsNL?Z*nP(Jz#4b34c0==7D;*dV8=G5h-C8)_+XF4DCjB6{KjeR zZH;R$km2*>a8__6NTGA~ww$>`OD3nqdu@|tAlDYtF%v?0sDPCQK<;i9gjj-b%(2+U zp@`{)rt1VI1OyRD21H<mJ8GGnD zTJNGb%fE8+BO%b*;8%d$pmq<9IPHfEzKGbCud^H>U*QN~SMR)72^` zD%Ua}2{3q`NCjm*^kRr&VUZDz?;h%1Jbn@c83?k~eRI2LJGfrJO`A8d^rVynU3k=} z-1^|qZR~7XuR&}qYn(aChhUh!+`*PD+dE@>I_{PI5j!pohN;#b63wCRThGrL=lj^2 zgfYdTWgpetQ%xX%UaTD)wSyX|;`1yDBn7~^FjTAh>%UvJJ=c1dXBBJtVO&o&#@K7# zGk}A-FZkX{eQ|0if~D3k04w(HXy*p&Bm1jUB6B7VL^%;jf(&?Y{HX7#1JZ4_2fqTJ zLtq2P0tVk)ZIdBRb$1__u~yKjImNrzo?jSG0r=N^WbTuBE(-RD7;P@u^=shZS>8u4 zdPYzm_6PF=0|>_RV`s2CT4&0tMNp7)u*PG%4!(me#U<1;l<&O0ezBn!3#?*3M#?Mx za$nD?+R3KxsM(!+R;r-2$J*ik@dKc1SBA-&(PlNzC49)e;e#ldL}}Zev9;Qs;G-@f z%v~s}d?ZFFrsD%aoKp6fL18bFAH%(}zcByXUZSqX9O?c7(cBNd5cCRK#){9=T#AV8 znLlphAx#s#PcPY9PLzbi%&}+FTQNVtW7cA1gd&zo(xn$FbC$sMCJ{Nxu=6`?A% zO4Rr43dek$X}D=6D6e|MFQz}b{@Wgm{*w>=igfAB6`SlBHu$`9#yPM@o?^kPJAZDN zd65|67Y`AHqZ}KkdR^7^#_^wWrfW?lL9b^jJ(#=Yiz{ak zWvt`E;J0kbCRZG!+efrL)nmpih{>+gav&v}tQF;1F(*VZy8IR#aJij&)*8k z)VV|BW6!dy*qJ~+(ui?XyuWI#G3EE_v#DUF^xeGhXjAVYV;dDLp+a3ZaUHY!fPgFLk>?dDW%lZ#MPWMPTD3H88cMP;tmi z48;T42o5mLY)nqCyl4LW=THga-Dt)GBRBP^wRqXI!!;tstfy7m154eS%v2T#v220$3qDn9b<94QAlto$a_ddQR~pe3Q3<){2=w-B z2mwf-^4J~hu7SL!7@Um49fLM+?tZ7~-8e_sQC$l+uLtLO@}?Mg<1Y`i~-9I~DP^0YrO z4`Ztzr2)Ty5yuvPY~@)y=Ez zT=XqQ{ca899@P5v;y7X^#RLWSZ?<&fw)sy{3~~HSZHub%j<;4VK$3m*wlZz^1K*48 zm=BASuV8BA%wz8XEFwtm^AWaOtGHh3aZj;lx-Woz!*=w&an=1ImUJi(j;hZ^u{&f* zIWK-OKwPxjs!@%)9yKHG%E1bTdo^LRdn?xsIFCItWus#4r0h-%kkl!Fd&71J+;AY^ zW>L0Ry*twr!zLiSEUZ(hn4i23y%sdA? zT+C9jQa>lAT0?TLnx|rEj7q7*QtjIm5nK{vGIp{%RYAY1sxx%l5_U`-}tW2{AvSa1Go2omiK?!He?*nNORG9;{8Ws zt6H_b$0c(I3Pz-*6k1Q9|5Uohfd#$V1cV4hkq!DeVqBsSiwfW|(#qtXW^gv|dQIf%%LOnRQGIxKfCv~78Rk+0)v2tG+8>Ra+))ddskwte7WGc{ zKx>~3h&81)M+8z)-H0uTG~= zpG=?dcit(z!-E92b7^^VmeOoDt?g{3xw(V%@cFapUw+%KrRVtM>uCnJ6hl$`q?Il_%HOj^_ z#=VoxyNasY)BpjZ5aHtZ$^jUu$Bwe(qndMVN&qYB*X)5Ps=f1e4ZY`4M!5)w%pbS8 zuZ+RSAqE7&saEElV;Lu@wJVUBs%Q0@HW#InjqNjnZnq8tmD+Pyb1|bh+MisFcB!x- z6m-H4vc8d7*_`8Qp1~Tv2dE{r6z9YU$sXAg3E4!31?TMh$SQ-y z-y%C_MD;JgN+@aZ3<_;MPBgW09^9=N3a{}KiwW8$4vpSDa}N+J2D0oA{64nRG7x0L zGukmL#@sX7W~fu0+Mft!aK_^CyniwQs!<=+ZdR~uKGBa->=g4^a<)lovSiZgK4jB8>JD_l;bw9so;opZU$)i61Q~0$`3+FQuv@;d=-L=LCW}Osmi%etIKFoOZ^O3(r(Z^9e?npe0 zdomjG)~dJFIpILYs2pjkRDkhktwhGzsH9>ld+pR>O6h7J-%&lQK$ut$TeGay=drrm zjXS1f%{fEm@1lW>abZj`x?ecDyyX~8kQL=k{G?RB%7Cx8)Z z(Y8>#+GkN#KkPL>ljd@Oc|!v z#@9HhYAxtl`}gO*`cgV~;;f05>VpsMdIPkEbijnUXYFq0s=BxQV&VyY&wKriH~f71 z%{Ts1n)}9=J$Lq*AN&<*!wPdBY#hRoOgdRL7IG|(Wx%;f>rE9@*F-(j6yxwL@wPdX zGQd+51}0)JF+ZxwG<0`s*|NEj`o;5uLPuxbYPigCueGymKx{UVrlu@&?|jstm28P; zrGzd=0VuxLLc)j&Asf|b8ceB^y|4MA&en zFqIrit6dGX3>Xkl8&;AK9Vn;PAU)Khs&+8e<~W4|RoGN09Q^MQ$KISD=)xIwa_Up2 zDV@J!HIQ1^9B(Rqxn%&~kEqRV80Z;G4>UIntTAd-c}KCidqtN~Gxi!|a~=?z3id$l zm|~kJYM&72>F176Prg^(x$1zdCu7duVqbXP6Z7<|ts6b4F@4=|NFxQG_aFQ4I+|C5 z4y{L{+h-(P8`JY&^vZPp?8)>6pZMMuIIeEZ(%!*#TH8jcb3a`=K?Iy9>n)%B{+5bNV=9OSQ#X@3ScAfE^NhnyYRZn;{V=fh*qU@N%&y%m-7o z41#{zhXK13U{%%ynL^(m05+IAz0xSuLgqPiV+CU)!5Q|->ucB2`IFF%gWb%fJCSbh zc4x)bj>be{Q+><6zNU|RH5#(%P1L&WQezoxX0fI76)5y)^-d8nI3Bfdaq+S{=9fkQ zk3E|Yeyu+2Mfkz|Hu}IlDvupnqz~F%VU9+#T1x}w#t1WFv@KpML0lya>Fq^_h0G{fzoux`P+xIseZ*w;T zu%&HUDDlBR@#l25RArczs?B#>GVjD#fy=FpQ|ZoKt8Z6I%*vUg&+tHU$NTZrJG4 zcd|j3>jqpo+Ea#gl-UrX!Um#1+Mk~mC~bR+zNp$4Y_1u}{Pr?VyBp@X${C+>2r(oW zH#fK!T{(BqJFn9DP8NPYPAQX)P5)Sj4g)wbPF~WgfR4c^$b=^Ke9TU zwZko3Mwtoj71S6fO+h^0S^Zr~7Krlx89U}A1~ED>UKb^y0(WY(9-^|N&*$5=7NV0W zx(Wdf8#BQ?=lgd*`g`f&OJ~#Pe!?@-*6u8=Zy%)1y^S=RQO9vMojA6TZr=V1j;M=W5Vu zbn}h7&Du9`!0KgMCQH9rF@6HuV!cmk{}gI34T(0IsH*^Ug{SE#Zro*@mRAFt2Z133Zg6KWN$1r4xs?q z7=#;um*=>$EmJfrvR&M3Y^yR_V~ibhm-&R_%euhkGj|amiy3NnN?L&xz8i__jLH|h zXYnlylE{{EEqB~&22D<8p#uiih}bb+`cdn%`*Iw!&ucdiwaS^y(sp8q_Dt({tmZzl zu*%#E)Vor?k?Y8#-8dw&mwPwHz{l$}tHLYCi=x)|$dv6N`-B({AC&~SFqQ|M_&^AJ zus_GZp@05S&rXiFn#!yM&0fr2;@O7VMPXQK#6u7w_ZyDD5bKCK$H=;nL)uf5E0r(^ zl}V(n6BQd}B}-N_2;tNctqL?sz=^#!W*wG){WlOx*F0xF)W zY%{Mjh4NWJL4l{%mEi1y1!V8V{CH2k=iJSLN7V=JgR%QD@T^8Th;Dl6&7$p@Vjg%# z?OM}+T-WDX%&|Crqw+fI6wnD5TItLBZL{ynsE$f1+>c|Oz#6G*pFKn3o&td?fK}`0 zIewJ5;XMO}L{ODA4qGy6&zRj?y>3i3*=>n~TFbFh-lYP&c76GJ0%VOKLe1P)KZrd8 z-^{^2Z;9kWpsl(z*JghpbI&!@ss&~R!m9j#&T)vv)s-%JE4W(Y?B!{z37wc&Vl;|@ ztQ8szyZ{J~_BR1or}EsjdPMbn-9wy6{p=ARBf&9W5(M_cB9^pWfaY3a)FybmbY|HU zjvXvLZqLVe>~m^4$lPboXY2ss)fIvF_liGxX?pyvzn^Xnyi_<$k_|Ccy zm*BNNiM0Tp6CkDmts<&-GKpER5uuZl{_xp4xs}0j>XS#wya+zApP$njZdh%IvPJx6 zRKHdOjH~5Es;J(a#Ng1WMF7sEsH{`c?QEdDbU7g0tD{LR8dWldAsA2%4vt*kWVoj= zjGRPw9=$=hWl`plPWL`Ypq6sHh5A{hDX1Qc;u)3Dm=qXh>Vj01ZH9ruZfm#kNL45{ zYBPn+X9_iVs%Ar3!N`R#68j+oClx#b(bAlK!Xfkk6+=?#gi=zDHJ(0B$XvIQ=%a?p z%2q|1(TMKAIVBRooE9a{5g`{Ik+H8-8IVo;}e&$H|SUAE0`Id66uSlXNI84%Fd zQjg{i_d4oxs6JLwa%E5BbMVGvlt_#O*v1@=a_97F+2*m zkppI)Nwqm_e%Ni*7&FiMp0(NwOtCN5u(^F-YE&(iS?N{G`_0!j^-SsU+MJ8_p2Rxo z)l1oP5Ih6n7EQ~u0CyWYqv{VMU?2*2WbttQ5ePJ@r)AGt-C47JAR^YI-idn7xaY9G zR8OkFUI9+*Bg^|>Oqdr^TgOQJ0Xy*8@FWMNB)ssD7?67mpb1{KL zZH@|(1l*?U5L8OJCo))MOJd86k!VWsBSOmoKc1e}ZC3%eG4$$VFZCb=N1VBadcK@d zvP#%9{FvD5TN$WG#VjB|=oBD_5G82naLgZ5+s}J;RA^SO?g*G@f8af-L}!#Kobn?S zIQ4>fjA<`|G}Zd52gXDJk0O5pr2F=8eWwA&V-!eAq>XtW*QoYP?5@7AYp+s4E5o2> z&MOUdmPM32`!_06i4;j}l;&>VzQ+BPn|7W^W1V8$jF<8!&0{W z%!0C@sdhgg=l4V{XMZrCCo8*4h|+wUOwEqL?FiT@esP*vSpy#nBscFG zi-&zjC4(bs@KiaJWnYu`Ubi(iP?vUFxM4Qh!E>+KCP72{8NOrA2ym+P#5EbD^^A?x zI@LaA<#i{k!Z6ujSK+VoR7ta#c^yjH>IXc z_f!;W1G;Qfq4ishlRuLA=00ojzc;_NcarIyY|^y}{ia<%3P2UZ(ox?=8=$CHR%o6Z z#&i6r&T&LZn#z8TYQRP!5u(+^4cL@EbM`Q1zS$VPH(&h?EW% zF-~T5$VRn`+$VF7_sgcJx$h2@GX(Tueb8$!Dme1Dk@Gb|yhoV{y;I&{6lm!;8zGT^ zEV0dz>eoO$Be2!iDSCajH(Zxk6W4YUS%)k4H}C*ScO|0G>~;7t18p7r#!vbB{C zX4~oVxs&PCu`}u3=FDh!tDCpdfB5k?rmz3pXQs0Yp79ykqe|DW-~!qB`Ba6vv_`OV z-XqiPmd5$md|O{#n_gFXYf+R9z>I2id%8MK>h4~(TiR6EKmnW7rpXb1#>s2#O8>bH zde-h(eY)l!!3e*Ndw~Q}016eLRMD53LE-wMAF+YzI?QwCvr($DLa)>2Zd&H2W!HEQ zG;F*O`>Favr#9EkQWS22-3S)-r6b&@>S;}pHD_rhxWX94^*AaM@hkwMBX!Ra3J-`A zdoT8E0w{p9dQ7gR=Pv+YcqauY z?bt13mH1oiGpWEQQep8|pyNT6kMm^oo-5;u+SOWb#U2ICEs6-S7gz=*w?kq~T>Px1 z?Tz*u9tia9~tU#C)WjB#N~0{3CVjYIoZn&QlBn)^8MM zauB2{0dqd{t;`2bmN+SF0t2C1HQ|xg$jIN}Tq73MC?hKxZ~sn4Hf~fZPy)1&C9W)_ zDsIC)jr2!+J+^AXsQlxH#CB2~KPqv<4}#GUMVy@OyxgcmbG-aw%`@)PS`!{n(%^xl zen;{p2H|{fti-7_`&;S_yJFv&Zqpst+G& z&zR4$wQ8cBvBuSVn|dv<_HouDa~c3reU)8j<({o;7-?1Ud)4UH`v)#Y$^QZV-rZO- zYVWnBH>8)p_Q%rP*Z$|vpMB9senUEY>bxPNE(B9IpeZV;vKIA`o3W|>Obx|ke%rMM|m7qbwfnh`laNEpXL`w_KZRFpl+ z6jo=L8pCRsQPPEaA(boqO#W#ZiuZQ%$e_ka|OJx4kDdPlH##J`N+vM z!<<_(5%?6*m9-mb*40%_(L+b|Qlt4)K!{F-Prcgux@mqd3W_Q^yu8OX`8( zj*Syp|0uL2-zqW(Jge6V)>t5F8R4}oNa#*74mxYv#A&kQJyNa}Fw|!n`}S^eA3fAc zt)mk1TdR4WB?Daa8I^MJH4AW)`}y0&Pa3!ofYsf_>!&dGcxt3sBZk3hLzIadL{ z_p_`3ptAH4C>@n3K`$hO)YqYNedcIfk6t^uYoMswiHRBJ0kU7e)MIw7ZbsL)-)=9P zZ>LOOX+IMZ2O}{=u4QEbJFAUy>qysv-`ZZ%?JuLOqH8eRN|zTdTlSw%^?|*V%HE09 z4PQ5V9m`pY5M@aGSdB2i3{1tG6;z2$uLwIT3Bhh+=ec%aI&Lo8vjac@cIz|BNVA^U zqhsd}Y$1Db6hkzSfBm)z%DHdldlq{xffRF_Jzn67u{t}pqLL5tw;dEiRlijj_H{<7 z#DNJK@(~NEY5AAgi&0a9--;pOi3<;;4ZPjBl{FOnJ@Jg}g;D#2@1-je=dNhk)ErZ; z5Z69QzS!!BdFHL)<_a^9_l!*>m?de&-0ki1YaXg!cCak2I;VJXddo&3_g5oI5_6^Zs z(6w1ip-D_a79uFVUW5k|q`NE1GZH4M2BTHIa&@sSbB2WosD8}U-LjgL2A7E&gL8?# zsIL~+p;z7AbrfPNea4K4)mhfwiF~JwYIN}3acz+ceye8Q)Gx|W8u9y;xsD2BQ|f3V zs)qvkzRt4mC0eP7ZQsqQ4UBohiq~dm**oeKyS`$htl}v9$e7@$9PjAfrLHQ7u87`= z5n;1uPF98B7D=5l);M~Vnmt!G%cxN7!TGgxA%HbgbtERllKX;*`c;(qx-7Y#DN-4| zKj?;K_$7igq6oSXyJLo#HYEC}T}ni}tD14EPUlkJ>lTb@J+qG`njI5zy_Lm)TT+|cb=v9 zEP?_|f~J@iq~<#^aWwW&RwKo*2+5qSjq8lX*f&(=12*@9F2x8a z9ccr&ljr-(mE2!-iYh+>H96kE_uNtmd*IZyMXR^MsbgM8TgLONBxM93YTZA07A8zB z^I+|;m%tj(J2Ab2t+p)=JYc(C$(J* z^~ugS83AYo1X{Rc3=MroLO3qgR5M+2y!+bA=to70W3LWvPWsN8`H;~`p9*?Ms`>?d zw*It!|4t#lZ9#a;aJX%bdn}O}mEM@J(&nAgo3$B}{XJs<$~PV92uvN1EoEJ|f^^)| zUc+n}1)W~{veN$T6 zTs}kv9jSk^DX(m;8WI@kt)MIzdm8Za(FWGn2S^o>0hY100%~(!TBT1%ZdzK%=!KiO z&c>aFvOA)za$h5Q<`B)I4-|czx_*|UhQLN84TZsaVFZ)0D83@@HS?_Ba*mj(9M!WH zYH&v>8X0!z4+L(J0x`;5mqlPrmQhD@HLoh@P_vIh%=`L;QGhmXW#ERjf6pZYm1|cW zFu2x$7~GQz?PGt|Q8wS5k40;5fU(wx_kn0l-|xxj=2@)j zHH0jy%*JfXRB%3;&&rgdOc;BNS^+yfLPG}59lCYf6k^Q=Xkw&VFa{&%&5_i#CXgIu zkf!Q}D~M7lt7@e{-KS{rhC1%78j==ik5g@;yg7QUS+`8z=8_@fv3`#Ew7Ij{2r7(v zp+5hGuS%CL9#8-1qn~D(>*bAETHD@FdkKe*Y|Z)f#_KET-~HI{q_6ty_e&eQ07I3z zQ0U$PNEkU}H7n&cW%`Vq+^I2D{UOgUV2Nky=|`iIibCTJl+(JN+qMZ+OvHP>>eB}! zZZ{9t&q+Li^`!f(4p~(()TYkdB{QV=H>w4n3P!w-Zwrcw`o!j~y`-ochp}@24R%f2 za$;2KFcRe&^=uX6=3)R^&F=H9t(KdJA{W@Uop;YyOfbFFKuOlD4O<{$gGn19IT*di*eFe6Fut#8`Ueyj^-Zk z2|F9dUQB(k41O=J< z0%}z%A+V~i!*?a<+qUn?p%g8h_jEs1ex7sGdPxCJ%oLVDn39mFcaU30VfRY!_(7&k z6!ch*!}UuB&*<8@_k7M)nF4=y=1aCGuxk|Hphg=3hrXAnKc}-`VwQG_mR|3vf{LR| zp_D>nDHqooF;VcV@Pnh1UKvM~8Mb?{W92+OUAp*dA=5bm5J$pF+>_O#?rmCqb_0}V z%BKD1VPYIIf)$D{v~yK3b2X^)%YwM3s+ri*?L9CHqL0xs-J5K%rl3)}wcX zxM%AlYS$Pr(}@L*=&fdBH}55MDQe$KlxJ^S5EboiUC)wh|4}l%4_tuRq8NeA=Q#Q7qyC78~95w5Mi$HF+T+HxIlp)fz13?d)ax~zUAKa z_;C1UeVZx9kGX;^l09NQb3N=Ka}Ph%Y0S$8&;uaHKJly_wZr22zx$ToNH6>SA0`<6 z+}Z#6%r8p|C(bmj1XOI?x540{LB=BzJVNn}R?#^RR(!v=YsRLek#l{6^`;6E%)K(7 zFG4anRpF@&q%}mYbO8k;G2LxO%&2_(B?ZoRPnJq4V~;}>sUD6Vw86R566q5u%4wk# zg^ViaR1H?#Ks`8b>shC2#U|?yQNFdH)oDH~c&KBCjQ!@_v`)QKP)8e`vu5Sm%*2TP zGO8mPIjQxXl6|gqWu94Z6+3wN|ZdP_B$}L_$^bVVTxkA5iF>2mAJ(v;mK3 z#M;!Ja`7omyA_@vDj4ri#^K3kwMKotL=En1gsmoUf430`p*{nY>GByG8fSHDQwBUt zDe7gq8P_UQRux&jP7s8#I=)jGRg+0)o`%fG2uYOzgAOOeSk4P`J#Ok&!$r;cxra)| zV4M2z^;^b7kWu4!QIaAZa1>l~Phb0@-%5{MKAk@I6W%v%?99^27AW5BbbjGPVO>1_ zr%UO3e){*)zx<4MOII&kEVPuWDp}{5`UUp^&M;HB?c)^N>Uc15;}BJ6JolWo$9xvm zzdHW4FVpp+^gVs1%JoXI%CL=23 zsHQJ&-~^qK9?RS(z(JVJHgszkzu5#0Q%o4!OLn)?)zAjS?bc4yE@b3TO|cn7lOjtl z0L$9<7{jA#DDWNjgjP2aw-Gyoja#4=&r}p3gLkdp!IqZRSp+i~aHyg& ztuo>WY?CdI?3|I~U9+EOn;Ka^Cv&HQdN|Uk#FABrSqK1!*n3cWHs_9eZZEJ={eT+= z-o+X$)vm^R*3te{0E?~_#7H@K#5kh9l>j>mgm7QIA7uOJ8v9$T0U;VheUDE-`6!g(vPyvs&l+EgnciMR} zDu>dT(snKCO^g7K(R#wqc0s?hrOj1M5Vb1is&kCYCiZ;xQdm??pYpX^c212`VNG~*iKCTo&@!##-5s6>`_zFr5aB8WlXSBeDK*> z6U;pm-5B`eu)Cb<7IR2wzW2w;f zJ!VGo+oC|Ac&Az~1{~@1*fKyheLcE6qEHO$eX{D51z4eeZ&be~F^x!(Q-F7lnvq<4 zI)z$}5IT?#zK_9qk>3u~U~NhSE3tQ=ga%?=*{GgX=rW=O4HrL4a>qSRShGC3S;l;$hE#3=LH}q zQliSH8VtD5JW#t>AMULjPy?=x&WIMTwh7<;lW$6I_wdE^=^y>{bbIw6?al6`(b2ajxYiVooK!i^tT8=P&7Rg; z@ECN8ZY)p?z%bVGPT9?I4U{)mk2KqY`F5lzTIkMzzoAz(P9gwJq+*WP03&cg7%7>oH=$ehNR&K5qZ!}^=>OzgH`KyQoCIqOeA5#4ov=O{rNa=NL{+|0= z@>hGXtgnaUw<^7fne&=GtvK(9`ReN&JM1KG^B@!sRAA1{dIkM=NhTmPQ%@_@dHEzOkqA+ORK$I(^V1UO8cIYOdLbP zbA5L$9ZLu4`+xNt)7K5%Z5?!%3gJg>y&z(FyY*BzImwK z3k{-=b&I29wL%LOISP^TI%QaFqfV(vS}VY!waMi(4;AELidHeoij5pP1p|G9?@^QI zkwd43!hjG`*cCms&-AGVtI2GjAh<)FV-*OQI)1dN7sov~DkF!`0|#2GwEeOQl4|r& z&$bjnh0xx>f@U0z1H=owPhUM}+pA8_Pwb)PS>8npVk5&q!VgUbXq(#0r6vPp4juK~ z0ZH}sbj?ImB4A+-)%HqyGz9#mk84n%v;b@M3Cl)Cgl(kaH==t>$R-x=dtH@NMPmD* zqN*7(_aoY25yzQ7(I_}-?&4Hvvv5k&VZgyN6Laaie&S8(sSlq^AOGR+p4PWF(y0?j zmpg@fZ$G7*D|_kjH@qdi{MX)`zV(Yf+`hL>dG$t`pKt4iM+(KmOyPlxdPT5H&QmW2 zG9^?ndZrNwBLFV40Zegx{g#0Mk>Y2{vz>yaGP1FTNC8%)dlx~u&Pg3PUoMoe(oiu+ zA_+duC?vOS4@SXIL7aogo>SbsmN(K4M_FnC7IE_z-I?c%r6*68nmlrR1xiN5*_WI(`3bb&!vZRyB6Z0W?@NsOavcO}(~9m!CooBmOcYJq{YlyUsCry!^`Rf+-i|rW#vsdCUYk4X9yA^*6%eQz z+LbVOV=c1VVxGyBLiHK3YbvmFwon<}4_LI)nHWg>J+%xA+08i4Wj)QcD(oZQhWAe3 zVKu^mK{#TO4JqhWQ+dmP5zYMy{`NJxhwE8KeoQG-3H?d6zY(nVfh?@X2-Ff>6MV%I6TS{+X$urS@s8V)Ei9`kbk$!J>(*TEd z&t>cpmZdGHSV*!bFaVX1keV=dOYO%vr*sgokHwx?yO~?*J!dfDzr(V%YCEZ5uMH#QES*HvufG-k_sO8#XP}aN7XLP9X1s$ z_Uin!Z7@b-QtRhx-%t8Snc8A#y3IKOCYWncu}+(M6ijlu^>w3UMCupLleG`ZJ##td z6kVEm>hw&{3aN&ur{5?uff4HKKw?(yeokiZC9t_d8af#znmU>z-faAvy>KB_S4q>O8W0_T1r3rinpYH|6C77-9}NH}<-bca2$a%6h8f&c_zCY8oLvwHBJXJQph>dXAp(Go?oX|TRu>nQ_RsqXGrcGng z*C1&FjVkI>HS?pIKF#~LUmoVa_l z7_j-Fm_FZk&~FJ>W|voL9&_!4k+jlnLPk(mt*DwNL-doUFFN~omgj~5+dHv0==If7 ztD<4W9wQ%cb>;j#5&=}0R{Co$GjG3*QjFH8XE{Y{evs2tLOi{8ErWR;#(LDv4rTHH z6bL4{U+xQ=yEw!4n|~QIIBCt=QK^bzILIzhD8*Z+ehb&F=h-ZQzl|pYi^P|+dQcQW ztogG-;H%VVZRwvAV?sV?E_Jix_ZS|F&Sg(; zEyZPuqW1zX*$O*0f#rG!I;T;x)wSwwxV$euhjbaLTO~%|lIs1YwWAmom7$bR@s5_P4#hET=$$mU?L9bo$xN@oQ!>CuWhy{5XD$dW}*A7 z5r76-G35I#f0#-TPzIHE?yJ4NjVw>6clim9(d3uQdYOjbY+Kd47b3LjQPC|G_pzk9 z3{+-~V+J<-s5v3nZ}sdX5J$o7S$j2hkEJ-XM$h8!6~EELYP(vJjE@JhP6ry%?aZtK z1U+LpSoOp~sIv%J+C(!~(46Gp&T@a?5bnLX*Uot2`2lWIQrc;2*Qrv?3{K(ne*5my z`TUG+cDhd&h0;6s_|KEPT`QED%Uy)|OUW3FZ%0XqymGgxM2Z|hkRI##@&0T`o6{b7pj>hk;Qm_mM*0AM(;nG{)zvBQ_>n|4F5ZF;%$joN%U`We&b*E( zXaAs8Sv4N|?Y+n>f&<#nY8Ca2NY{RBoCx;Y`nBq^4?KCoEc~jXCC!`N%z*y0QpS&| znIld6-K_-W!w)f?Snug6^$sn?yVr9q538wnUQ+AvY*G)t%PGyft?}ut+GHC1(KDVr zAH#Dks~(JdmS}N$bx<`+J`qd0$}E(Q!6>U!H?GUT)nFy8){rKvQ-v>WqP}R}ip7d? z*#@TYH`o++pVL6PG~Lx61FyK#f1j0{;N3Lte752&9CQ229gq`|Ta{%v&Keq-OWr%} zZZBYdgANMmKG;W7b+312P5ON?YYki+>Fxw1jgyo4kNAG@wV#wggAIS*1aji(6^|+6 z88n=|I>AKLrf#^NB=4p3t7;lYwgg=m-)YQ{bIpqvbJEnRo3oDU?94AMYB(q>1bJV7 z6zp@^8f-9v1%DR73*6yFdhvn{CCK0oq?uqE^?54s^P48DFLS#5Uk#cQXWfvC_Vjr+ z15cHzEsQ)08=0OC;Mo?2FO;h-$`PG*;(mPK&8;J@jyPLdkcztgXks-FZT4pz^6K+( zrc@eYHm(|ZWo~uzIK4tP|rg^n1m%orcTzm@y||_bb{v6B-!}IdW4XJ*M&2Q znhyE{Js~!j6nN_*`MdkyAG(ReE+Eq;X6Z{iJ#hyzCdu_PtP9o>-_ycF}uy!=9X`L(wIB zp4hI>N<4)jhw)7#F>H)?>NF@{^JOb-^=Fo3C%GtUkvc}=DoY*VF}>Wa<|oAM#m+UJjB7@Dq!9%<8#=QphogrY5%Me%HNr&w9j<=IUS`oEiM5^luANN8?mC zaVzCQeUuKg3Ln(61+_*D*~PKt4k)*nTzg0wsK*KD!%VX-h!nLn)yFKB<@Obf$^2ev z&VNdyxunM_Fpbgdl}mJP+D@C}HxJ(Ai9P%NN{a_bwQfm-7GoutS-3pdUseX$&cpF_ z@%GF?pzg?OjoH~=mY=j{xOX=)*Om)nOKe9tRpGvt9r+~!)gI;}L&NpTit)=-6Sp$i zMn<`*Z>fYX%d`80e~@Hhayp)Uz^lrl;Ev8AmDb2cihO@=lFMAtkyfDt+i;KzPbQX; zmGaiC@opi=Ma!dDe@Zb{6oQXNM}g0qs?oH*L|o%{8QLxSUQjHbx9g}JictSd{w%F5 z1XXH_dUTL5x<@YTP+%%xynM0l+49i${YQRTAV&IdfD7A8Il^u91mN4Q@BJ1ar(dp* zM@J_Qy8W#xK`uL5I9|aViWfy`j}nEikm|C78Z<=zMI})JwQ%>DplTtjRha)C&+E?_ zA%;d0N_r!1=~Zjpj$ZgcFG)4*41F5n;I|s*$?tdiNyt; zFQxW)68ZcTFYl%V$ZY{A0$eHSc?6hlcC?;49&wiYbz{W)RE;b2h!z-J9zth3!i#6wOO2ZL7QklL<%wmkO zLYnenn)X5BDM!3gK6=##Rv`g&w1L^GGr>w15Fm=unuZ{W8&pIdXmSJS%GSKA>z#(Vav60 z;jDJ;py|Vvog}uWmro8xBh{45!hrRGMHkKctU2kKbzYY61M)Aa5pexOHIYBxFw7Hzt}$9HF);>F86=rxMl01p0TVK&lLh?}LdLpYC+6o(9{Q zWlW(IE)xfGcC#R*n+{zQQTPD@IH$FGd86|!xH=cs?gVbvA8k->v zj$bYpt0^=|w8C0Dx8_`dY3YO8ZEc1ku4^u2Op%h?C`EFJ)9F6LJUuD6h^!bnoas$g zXt>+><@WqvKAT(O;P^GEb>FN!r!_<*|5Vu`rm5PP;VvWz_8l27_uQ%3%bVwgNy^8C_yZAVH^~f@Pa+QwcX#?rItmslDMNF_>ApfQ?n%Zd zix7{{L7AvSSduzumSpGIBCbd*AR1qL>%Of}L8>cA?N!l(ZGqy1Go5T}xBLl^GH!oB zAM)lOSIrJ7BbFgCI`IIPTlOBqc@VyqD>D|&hQscUMPQdhiU81i6vf+fAl&>Qi`st ztafF4xMu~&8=lou?1JwnEM`+8U1W}C_JHLNZGBzp`epNqIzNRq7&{ZIu2Oo)O5s}{ zPpkuoek1N%K4qIG49|HTA~%fNlE9^jH7v)n5&3e4DKNW!Ggg;&dqY_oBI1BBEG4T)~$@P)pymLvib;_$l^qglNki+I-~OkA0!^wz}?*{v&Mq-Sz>S}n}$*W1rc z)iaPtz`7eE!6iz*u8X=H7J4yfX5~+Rp5yE5*MyZPM`+`8o31ir>nZx_7mJb_oD3Z; zj>`!Cl?h5_7>OE%>6eKq`7}B-`sr9%HMDt!F=|{{+cAmmQ{i1UibFeY?A-!K+K?vs z5lt?9e_FNKG5~i4R}w%!efw9}&w~k~S^jGL;jHjP_hQ^QCUd{pnUW&In%k1=v{Jo( zfj+yabAoFM1Qwsx1znX$8UgYK&;?9UA!Po)Z&y$gRD(a2oUHZM~y<+_}c{sDqUy=w}z1oEe5vd7S z*;IQDRXm|!I-7}JEulICq}CaA^B<(#h|c<4XCepQcc)po8AJ2$rmh)p?H0U&q88We zGZPhOg|k@0yZHyul#~Siwv)~mK0u!a>y}NO2k6q(cFHH}hv<7KneWk4cN9raA80MO z=b-gr(VP7!-PzcPFWoh|dN~3zbtkE)K?XqV3}5O`UP;F3Nj0 zeH6H|eO+eimU?=3k93`Ch!^+6m>H*ji2`OJ(eh63PLQyZ>6?+_cB%CSNh~C5G2QoY zeT~p*Dd4H^Q(j(GRZV_ss1=|8{k+!)N=7+_(}!LA8~x21&sPayUztpsEy*-+Dq6og z?+KdRUW@PEZVsO|-L`9R6&eZjY}|dLrT=+$r9WcUv;7>cqr)h1M>TK%p{8e+rGNbw zg3+0db73RSP(4|M^hC3=Ra6yL^@x#?{)I@rnWP=So;Q^(xS}|c2XzVXTO}Ft+^G2h zSQ}U>CN4J^Ahc6--4?+8v1+w=lnxccK`@fdwF9O zG9W0iiH*=&7YdrEnUYuq4&PXas>T2;ZEiYJ1%32I${Yj@d=6?Ro;G$kkFWKo|AP74 z%^du62X4?$Z1UQtLtC_93c5{K4qiLHH@|zUwfJw+dE{{+;rT% z`m#=8T6|}oGjjgM3Xf)Fv!&z==$(2($ou5!jOh9IlE6Epydkp(WYEM{&)M`tS3xpg zVMmof{PAU-gDxQW!BQXBD8jj(-G;{acIT4Q?cP!e;%x6&nRajznW-zSl%`vASshZz zFR7v7;F9*)_ct;M=x%?THJYZi!dFC(rsPhbSg>*W8Wn2;rLgl=>b=X%zI*1~yE-V@ z-Glvc-l_{o+-lG2&|o!>fU=VFLgAhjqM#wVv08v@e(P|gG#j|OUdd!^JCN?p^W*T? zK8Nw}e7V>ex#pK>(XginPjoZlC{w8IupX8YK!$A0|Kz~d1KD*SJJ?;_N&ckwp5s6g zsy9u={RM`3+yG@~G`OC>pSfATHM=ZBYnLaO`h+Ji88c*o9meu>NP&45htgptbpf{3 z6c?G)qgU+fo<8hbU`j-~cY6YO@#Gu;ZK|(|rxrR>l~^X!LoVD*akFPgykvu};n)=| z$!l?nP5I;^llkW_rFRkXMpz%{pDj{+^@SdawG^Ur1(-t*Th`~%C{DoM5>Np_`@ZK# zpnG6iUflXUDW)u>VVmmV#1c7LcEu7I8XnWC1%s1UQNyOM5?j*C{6izz=c6};>UF}3 z$)Xi5y9eI4DlPZ*=hyr8xg`%N76Q>KOP!#*&E8+W8cwDXOR9xt z^(X*v+Poqq_ElZNF#F^W>X4%X9I3jMQTCB5SLcf`my3H-T5ohMHox`NE^XiUkhx{kp;?k&L0!U;LF7>i7_8G2ON}Lh5#oEr&~n4;!E4*9 zEsqhKI|gFB1g1Tlc>4|zEwMEyZ3fIZ}%9Xm8gy*Q)_GM2~9Zbyy8tb z&c2vQ9MCb*0@?%n~uL(r7f@ef-%eehkEtb^Gb*NsW@q3U7e@inVBRZ%}2SR(hM zQKEq4;#U7Mf5`(HUZlk7%FX#pniIR-HfQQkJDZX5y-PN62QQ9P5$*(^>us3OLyaJ3 z_BL=D47HY|mc#YnLz1I+`16l1nd}NP>BGP=arDuDTIO^?h8|uuv532Edfy(z_|_X( zxYMZR2D(5e^+f>v_^ z#_bl(-C<=_Q$q6|FKjwaY=3Oz-xmJ;4=VSU3TVihK&CN&Io8`qzko3nXagkeLk-UO zrt{e@QU7jYc|#?)qU7yq&&1ZW@@=>ZthMGwNwlF-CrPm<`ZsW5L2P5^>HnqPzdkPg zWjKxhi~?@B`vS<##raO)_Ba##)fPE~J=^2b+hQ-?9x}JROdKPD-LHQJSV#hQbDLnm zo^=(lw;*ut%;?ARW-5&mY%3!DyK?HF+M&^%nwVEB2w#ZY|Ia_y>7tKnhb^9ni7fo3 z8KZXm>wJi>nOFaJ%v~Cv&ITO{5(&W5mqm77H0#c}TjTD~N$YWF8ym3CdD;FH-41M^ z0$T$&Gd!HYMwZ=M7v6uEE73E8K(epi`r%0-?&7OT$>j5)n3b;iYHD_qWeaP|^`MHd zym65sC8NLy=-nB89Y-L)^YshCw?;#INf>y3`^dQk;GBl^1k%=UHy9HpT$k&;e>W@) zIIJ3o(<^mxB;mMS8?&@GV?|lOLX>XB<3j%XVaS0bD{I8@@e%<4)}w<~ibupkmsjFg zxh2UiO@^<_Ff;ATg22q1b zH3tjV1~&r1p%#s-r=yJI9mqz4gV)EErHMPPh__-(AKLeFt8Q#4}* zG0>Fy+BZyFMpMlW=C)~sAJOH|tyb{s%5w9vwS#k|@T~X^OI%lCE+j%D=Iq(z>$VOv z7*LP{25G>HdgCzUuG~@hnLUnMsUe5f7>yJu*zd20Ju`A-WOHWDfZa5_OG9)d5`8zO zAA_H}0Juwtg*gKb`r|{>x9W&loX`zwzR4Gk)93}SIUS)h_U#vfB|TXvRM$|g=r?l7 zG--FUybH%+n7)B+vD}niD;O!hTMGf}A+i(lW==bn#d4a8SIyrLXSx6G`LBo4D|q+H zZ3kPK8H|h!RiCQ*46M7DW71fMrWKBT8gu(&4(T#p|139F@XgKscpnXQFP(aiDsDaRYe2er$HK7#-}zEEE!c20rvWyf?LY=osyJg8gryNDLVt;IrUK%?)kt>xqx!{uG3j@D ziw$msmkZYT&7RA#h=w!wChX0wT}EH?!dACve2Gr77Dayauaw5X@C-XUNF=?Gab{f| z9R|;qo?H*c_yksOiFhAIf<`s9csEaK5Xt|6B^(@h!G5u7dL;1wxHj>hk1d)QQYiZ@ zIFYeF%JWP$Au=OdTli{GaoTwGK!DP9g~x>m5ZiC>jB>v&+|mZbm5cyh=|{4?q_I@q@_*S?dmtA+n}psSkXcQOd#;Xq~omX+`$U?$j60#xNhxAo+0bHtw*JO zvAFtWObhntpHQI(RinZ!mcfFL$0O2$%|ug9S(inpn;a_dQEZofw@RhWQ}YBOX(ODK zP1j)TJ66F_OYAOLiVuL4;ejO}25sCk&=C>ui}B>x!m!mGMTu~kMMf%Q?}dt4&b z);WkcDP*yR=oT;oqHtJNDV7$aZo7h=Fbt-f*Zq25$80 zC}GoPJ7gU4Ct1VY1nZPn^wA8P@8cdrDH-fGJ$BBa% z2q|h-AJSXiI>~b0F2Xh8`TOJ1Zxa2mcY1(QNdBAacCrw9{42uuL6OjNkxoKfO0_qpX}E=mg_3zC#gz%LyA= zs=cpq|ELQfS9;=8BID~ScUk8Cxje?)vT*#GbNIH~epFm2atgrKbweY>mzSU1x5b_E z7F1Lw@w~)cgRH4sURKiTlS@CR1VzRlF`lf7|1scCMYMV*+zNx>pk+fa5jr$sThA*9p)AAW1s!=nk_F!#EBu`Kj1rmi|A8XhGjdT5g;rP0vVx<3i8HL@ z^N|1|dF;<4B%87A!OjvmOU}!+9;LoJ!r+G|M+PCu=Q7 zcYw`$(jr)o^SEa)Y?7nk!2-ZiqdLVU91Wp!G20&^mp*^Uo-{&jDz zY&B3EJGRzW_O}b4 z;d8k`uIh)BLq3%QF=YC8UFzf!8jTe8@d^yEN^vVjuzR?wD|gin^;@*g(6< z>1FT77U)8{!0e7Xj6OlhG^=T$XBPxMart^ipOnPd`kE&z9sQ4?JlCq5Kt3 zt~cPi{VGnfN(C4~?=m&^z%r`eFkgHaMcrsZ!b73s?gvTn5w{^Wuy+eXB#HVwuo$w^ zp{pe)A0Y^hc_C=N1K=)@rG2p+xEJkPA1Md)DLqKT=VT56`@huBSRYPH=GWi~@_!lQ zm(DxyPl%%%?v1!ZbD?_dR~?MDrY6s?|81-WQiT>0@>LCb*QK=-4y!-$p-megQSQLO z%mw8LL=VBU+&v&%a;%%2u?^l9!Rgc&@=fChl`Va6s`|wxoF#QQv!tJ+zDdddniZJNZMT(Z)`> zWMSI~%p3Q|aB6Ug?+Pj3)Kom8@6rSAIzSLg29NS2O%NFk*#dW+`QCqQ;-4?q8b6kA zgoFy`0~h$u$qWQas6r0vWLUPph4P$NyMI}&r>;-R654O5Sy{3-2mpTg!3w%x3X*KZ z_ia4muB@C~o3{r(&x@o8USxu;Yk639IC~5zV>+(>hRDP}n5G;;u}9YKjiAc;$A&IR zv17kmZf(B&;f~ag3C{L!hLrB>AX-09?y$vOpqg;rX9CU(ahdL@++voDG18 zIg5%ld)*Ax9#y+q+7!0gH#?$QeLHdFzB@2$>1tB3>ojB~UTMFg4%2?KpU`4A`vueI z0?_#pU;o_j|BuI3;eyDOmN6LBf{Q;l5hz3|V ztDO$La1Iz46Fc^@<=V#YUo9Aanw)-|IB0UhCkj4H9|rAv!k%(UGj1z**eMz?s4C1k zpC3d3dAvsLD)3mhvpmWy&~klOw@DSU%RKCupqmf&9p!ZfNS5%aN>hwvM9wYwLAe7l zwa1pHH#B#KPOEo)=?)SdcL^X&+Ovw~Bsy;Gwm7k$0W*Ae)oGRQwQP7lQMCO1Griz{ zV;2P+jRgRx?Rl`&`{!^t!jBh7UpXN1pP=dPKR7J840kw?*B+1SwOKXX6)#FCCA8e# zL|v_hv@}zNdgYaV>RbA1;^+S@YhnI6qrI(IK z1L0FhGuBzIt9+3DlG6Wk{}!dlU~9ytqc4OlPE75?ST>wDBk*|2gU3{WS3g=5Wpl+;1*HB} zCVT>n_c$9yt2XF|rz*y${+#+gBtM32J6_uB1$!fs_Ib#6(#e~N(Ppt}cUslUQI%p9 zxTkUp3x3vuPo(}E%QN7==Fv4HwCmtU&c}ajgz3kKb&o;_TgS>zrj58FgCr|@vmyf= zu=~s9`u#y;BmR$OrUHMoV4U@siPhv6TpzR2I9>)%y|*F7av4OONUZhD@0MKty@6fF zXWVV*@drxZQJ#Z_ikF}`0X4Tj=Jt6k@Qm_d%4NYA8@@TH6?ek6D-*yO*I(zVuodwm zbVs|pL(9iInK>75WcjI5L@O+6{@?t}NdBmZs9J-OM@3K~2JdqG+++n|4ZWum`DXsc zK!s@hjI-_;Q(4kc_({R8@^#b#%0GegQ4c@c;khHVJ@fQ`(fNjRUd3+)=iqx%rtWdA7;z#m*{k3VPrbtv-q;WHYSlKW~Qaf;h4 zjuY-~N=POVUc|Mnf%fRm1j$kW2uDBI>@3$r*IBdO)Aq5ye@*If2v_9oyot31T)qA? z=txPtUi}L{6s;4M@o{6(Ms-Q>&EgkwIqRR<`wo0OsIg)s|JE&I#H3+S^O*PkmPmsX zt_=+jCtFMS7c2B|?xoDC?0M(pf=lw{Yqg*Z{DR5CQov{&P%ug&WZeR zqF$Ey2Y*DSGydd))K;wsFMG6ZJa=f@bT|2+#k&mH!I)%Hyy8kRr=`b*6Rwmy(1OD` zVni9FUnkBv&h7ob%H%@M$AT;3y}+t~zH|mTz7VXufy>vN7rIKt8n9Z?va^yGGLJl} zPSa)4?9O^Q>&O@_ZmjTCQ8!9^?&rT_furNG1f)zf?nd{##7)89g0PEizaeL#t1ED--`FlB3=Wd%1prlCpm0zOPQ9A^(4bfENwMSdtwm zifL7&;FNhdbvd%*N-sJ|8=2h|Uj`(_i2GM5g(HB|pbYh{FeS|WsG^jdww(K4>HvY3y>50bVi*ccqbFTaFehUhEg%_*#2r@RF&89 z%3KSswg38ChAw>esawQrzb=5BkLK^&w8k-*x)rDPVd9X2J)?q_ywc$%!gafuy9wNz z8)3&(`DkPm|D(;g5V$t`I+lxV;EqE01>yUc@C5nEa)%oR1~LESbscEYD;Tr(Itftb zU>;ZLTQ>BECE<0gDml03}IuzgDp_mj6OCD_C8CPG_DwBOY<;WL#d*-5`t(R}SDhfxm6 zvOanP&|sIiE>6Yf`_nz(V3K+Slb=n(Ba!cW08XX~3Ec%d|7-wm2!zLEf>3VI{%92v#H~n< z)P?YlOG8u{zhT*yQ2Y*81sP03I=9SMc=}zO~{d^ zA`$v_?#YUTPFu}(SP0Zcp4|3e^lo@N-LCIXX9A3|VE4;{TD+P9ZhsmFJ}S5rs8t5N zk5XXzpK&x1Vp>$Kox304Ew;B>BAV)Cz@w=LQSI98g@@e&+OQ{>I?grO&EU^g@-ZGG zApeqpwseNbE}G3rqD&3dhIEg zC(PX{;ZK&3;q?d=ac5h4IL{#VcjnXy{2n3dcN;{6G%P$$=r_h$^8dW?Zq$&M5yw5ma9DQ6)5SrZc`oCN^)JVjP0aovt_e~0C~ zw4O9kjYKKB;8GL1k*ISEi%f6uqnrN|gjzcvU2l!Mh813vZAGSsuY3UDD<9{@sR3eR zP&Hf-naX@U!+I+_u0)KrJ%Aj1JqsoDc6Ss0ANvr(?K33|5wMcZ$j1}fmUB0*F`IB$ z+n$33kN!LTfj$|$Rj7p*s6f>(Oer`H$Kg&dsh#*3}~7?ad@TH{ZZ{fvvj)@Yja zNUvoRTvy>&rx>3}Jx&+qDd719C^ut&&;j4b`UT=W-fPKUj89SVuX2^d9-}g~b3@i+ zROUi@D|-b7#u9PvS+aGl^4M#h%E`%{EEz3EKzy7okin@2k74T{_j}}hy_T-S4RC4) zr-Smc?z*#KPr#L=74vUp_`Y9+Svnga|JEdbTm#_{8R)fq&yGX!82YNKSf2vess0muef>duRncGU4bD>$S?R; za{pVFJj2J_1X*0@#rDsC<=3C5IU(*)7Ac&1F)FyH@M0+hkbvR<+nwJUNpEA6?-Lec!i08t$mHHc` zQE`2#cVcuV4U5p-yPDNdAn{tOfrZM>!(7)t$aqZId9sg2Sub4piS7R~pf$nAOHfur zxHAjigIe`i?1tBf`8in(ZER>JBYszeI7rBNW=?1ep(TlS^Y0W z8L8m|A&jXr7=wRjh=S~N6Yyn97KC4@J07-m%Rq2K`mqcRHF#W}@gphu(DOLf=g9-> zrai?N#r>m;W04`l-OOv;zV0Iqh@37lD=qehA+cp_JavtDdY3PvWa#8OL8mlg#(b&L z@B@P!LhI}$?eYgi{{)=B$_h+yh!;37+fKsQp`?t5I+7hPhGI--vL}w4-3z5&QV{iS z{r-wn6?U4LQ%>zAC+5N@%OI1W2bM?Nr5v3jLb=)E>a(0?0x{GuWMX#_0&jA!dRu(q z+l-XZv25WhN`H70@uN3kdNvfpziVVc(|7OTtz9jS@_>oDcP9T(j&t6^Xsymf+9SlT zBszN)_z>t51HT2B4xj1*Ubo+|;t1L&#z3G$Yj^i#3)>a+JwXs?9*wC0pD|j)PV)!T zQak_EYd+Z{(8ccHDbP6lxkJ~*e%a-3J8!sHZ$0d;R1wFR8L+f!0=5Y?YmC)s!YqfS zwKT#)Pp`xzh*9Rr@7FyKUbN_iFbQ0&Ej?xLG87&DN!L5a^(T6Miaq)x^`)B`+@2oK z@Zs;LU5?Nc2;q$ZW5$N2@?&s1aFVqm`73nXa{cel;`A2#Xr$R?Yd?ct@D97-hEdD8-yg)F9o+u&O@0asH; zI$SBaKo!*v4APUDj+eO7FL5W5Ku%&|JCGThPAcp44xF=j$6I{X97=P6=l=sb%t!AD zYBZR61Rea6z`4-~2+WH;TCWMYz&)9Mn+f0Sr>z`_CS3H}Yh?xXI`L~w8jicAKzMEF z`F6en5ujD+)u4_1|DXx=5lv5A8@BeT{mb+bT@Ox92&(nlq*Ii(-!ICRqwq2Gm#AbP zy>A{Is5cF+Ypw^KPxT~-Fn;I-hG_(hz;Sf0yoMNPZEnAm; zN_{G9%&?wGOZG}Sss(nF#_fH#*OFDt80{;3F?71E*ff*ioX%;DwA?D`!=4tK@I=m6 zBxX8EYbNp7X&Ik$+YrXtGSyrQOK`q7il*u(8jbh<3>ixBN=>+3Jn;@pL`pK++;5q@ zOX&rhVNw%tUUc1%FV4yr`voW5^7w?!sBB{70l$yj5OCT`!da)kf-IcKGN||&_?+VZ zbRQn!itmSCQ2bgk95(X8WKj4VMtzSF&Z%gFzwMF5e>MHY>LdP~Tviv%a$~03)QJ){>^lJX3L}r}dT?q& z3+5HBoOGGGSGg+b$vRt>M4+E+88}fk?NZKL6Uukq-)(t% zri<^2nF}(ik!+v%9Bo&ZQJV8JAc@h9p{3CbuXV8p&Yo&Y=C}(O!&O!Q_oXNgW!%j#*#3 zJj^{1S|s_dr(Ewf0Uyup#d^e#Hwj)MvuaC=nVqJ|vnM3S8(e zEwA`6{l$&~)ziD&CW@c|JMi-XKZtf#B{14L{A|~5AE5DbCSC@#zT#mg6fqYS#`Cnp zA;&Klb$m9nNp|aP%`(w;bIRb!Ji{_&t{w1qihc`7z|igCX?0W|WN}||F1Rwy6H9k$R81V{JOA{AOG1{l}T)e*d$P{eAV- zpJ^1s#&#MvB7iJOc4x@Pe$V`03m4hY5liS1Hz_h<8dM4xg`+Q!! zr_@kkiI~GiClbRA3Sjbux(%Hv*}dMq^LR)&b8K7=c`2r-3;)+ZM2 z8s{8>?qMPnSUu0Y7R!8^mX6xGABT1(*!fLo@3#%2UU&J=K5oaBlt9Q(qZp=$tY=Hk zsm=3E$kn}bqtMUSiU#V-nTxsWhtvaEVGyMw&NaTD!vl@`9@k7%jHYt|DRDxcUCv^X zTmfW57fupgUVI4&xCw?4ru`e3r^&PrYDbw+iiN86(5cOH}_pu4cZl)$@9m9%%t zEZg5IT9QWu!TYPq49}<_ne|(6kH&C7G}h$nE$GtiqyjQQRkx!#f%Ay$lOZCZ|q6g4tpg{o+FDjqDObqd_voeKcXY{0jp{a__g!* zce?G1xA}$ST#G&LUMBmNKwB8I)DFgH!xQ;kJvjKoJeNEZ6)Mq3vbwVgO`(~Ey=vkhFD<>EVcPnc#^i-@R!3XT}KE#u{eQXhQ4 z!nq8xoc-RiE{=xFMqmzAX{*~YbT}*pLK#3PJ_?q^cLdxMJ{sr z)>^&=Gaph6v>(8?9{XDoxb-U7-j3eS+GcJ}zvq$1oJA>JcYG#nW$~+OuL-`f1Oc^;X+-mm8<9s zPot5*b=g%TzUy~0?gYd$DzTcU_G^=;G?M9`08%_#4ScRR6K|?isf_g(ydkG4E~wWy zO5m5fqM0Ap7FQ+GVjxZ;w>u8!sX?ul)6yfy%s*TN?r?f7W%9!Tg?xs|Ux6-P%rILm z(}ugh$e`aukL7(m%1IKMw^}ccfy^%}8K#6eCwX{lUPf(*gTp4&S&=2Fqx!`q1iy6* z1~cRcGJG-;Bkro`5GK1TuNJuxg}9$t;z-XSxus6`;$jk~xW7n)j(_HXevYo#wlAW( z6MW=Hrf}4sM{%pTC6wSJN$;|40ihN<(3-1(knb1-;^zRR65PmVUSl=U=4FZ&soq?5 z*yg7m=FbDo)nwnkZ3i{IyjeNgVMf%{^HTRb7=O>&jZsr%Dok56uwWH<{EA@AwdtkW z`<=3xs5GEgttW6P4^2HNvpi!pgwLCLQ6M}ze0}EP*C)1OkymDGH?eFV+$K?1dpqWk zrmrHycwVbC+i40|+SHlObH%@cXyX*r?*(}{(cA5N^~fA1Z857_H}rIxLRc&{Z!IT} zJ@_%g`ZOLiBdnfu1%;2!9}(rubPW(utPP&1&y7cg&sRw6%*j1ri(_38g%_5N+W0OF z_;EuHB%WTp(WW_6pjQv=2Ubtt$&ybEBtsUzJe?MgnE=-jx*3e4v&h3QWGZW{l683B z-r%N(K?D=}z^|K5Ca>^wWtghUzr4-Uw_Ngta^w$&?^GfPVr_}ti-Wfw8N_13Ux_W+ z)$@hkgmnBEE6n4H(6j1nlX?{VBazmYUc^y6ii# z@Ha*LrxKyESso^QA#F-HqOQkHyKlO2NFZ0bVKID#KHTrY(`V~IdLP*pqKuse%%&I_NlHH9NrIscw7+fgu!I%!!pxWe zXc&~}N6mEByC@pm>xcQF+Re*cE>IISWZoSgz6#nk@$mTGu=_?lotmL4q~kS$iCVIEE5YEO7`DpK&@-+_lGf z=YAJwf9;K;H5r$8mu_K>A$ji!X)C?=sNNChX>|$AEjmnijz{}a61wU>PsD>E@FXaT zv%a@hbkw3XSqcy4m^hd2doPUi@g4DaUrNX&9YNgmo+=%HVMLhD20DRU2cS=6Q?hPm zIctaOfuw$gL;ARO7_!TEIipUvRXV#AQ@$gZKk1H%&ja6+yLQ$Ekq5-+F*@+tYS3C7 z(|8WNzqR%_&-#5E@4dIa=+xZ7A@}+`aqZL=!}_Vl^8Oia?PB5+;qtKh5)o#&xKCxn zaNg8Aj8$L02KS%$p6${VUcqPI4lx7_f!7%VMn+#}6JobBu?V~{FoK;g`~~hm?-aaH zR1uh$$c@DE;a;j*C4xlbo`xUQFdB*a0rx$*B(3!1`XAMRAhp#7$_N!z8U-|(mEh3R zO@ofAtLw4mIr*`74LT|X{HRwN-eCku4KfSq{fB-v*e^s?64AP13SBAJ=pln?_(x4&h)ko2iaO$BIOPa5-^5@jlYuWSGt z9^ZlopX|oSSO%vYxeKyLptClP=}pXEW$tDk5572z-~Dba=FMovCyrkwgkd~#PQ%?L zNUCg5foUol$(&Of$(7_>jMNI!$8|%jskSgYTh`thXU@CpaNs=A0Cg3pU`!pgXew3_rfSPEk;J=Xf({QF^{z^-1|VSVK{>=BRO%FDVgX^lic$eEh&A(fY|$FqNJ+vo;a^OUUQuJj*z@#C+dU8^LgSu zy6UGA;awf2&?mAP?9^UTFG zM{3<^;RyC7&nmcgeXvkIl)L z6JP8o8#qMadbzWEYn(DC~8PPf)XrD%?Bs$SA~Qsak4vlvtz zEY9QaWhfNM3>7hkI_VbX#qS>T!%I0PEmEQi(2|xUy2^~FwB(Pu%7&_9yr*Q*@*XRa zArf)LgrtuIiFvbb=vJ7bOM=3XX;-BtL83ufN%|@c_pko!Uc?hIWb(kNhwp+J%`quj zM8ZOc!}ZrcjC{U;3qSA{Q6G6uR*Q5EXO4;Y;F5D1cvM?R;%UJBEhAU&iAJ(I2RKJ0 zPOjmuYE9*scpYC=D-k3b?VCq@1&N`Xx^_gtp%bL2604C|sl2P|ztv6E%k3Q& zzDn&DG2-*cd#hCCGz48qBiB9&D%WVGa^F-FmGD;G!W3CuJG>_i@8sGek!2WdnetAh zkjlHGKvAWpGU(1z5aHkue%=Gm$+h6BYGLG@1nJq~43@RjNZ2knox93t0KTK>%y7vB zLzqcOxE|G6MKVD(e?fDiOgRrzKf?%Cn8QFrPAl&z%-O|4V;d`+FfYe3^x|k19GC0F zDLG+ED)o3oR#P&l6sn@j=Sf0V9dgfiIiDv+7jXVd@AB;(OMFLg?QuP5N`@Xky&*1z zoOBCw;3>|0Z)#z)@j{cSTvvt`hY?wI)K(HDs zEVvO0Tsx0!?!y^Bz5%^oH!}KqwWaL741xa(0!BvvFX-8^Z+HZlZ@14keuH~Hf1>0u z=|;ofCy4$>mBt4N9?2s==xRJ_o+ZQK)W{7peyIL2hl$~3>M>?`qACl#PGHcH4D^+U z;g;0XXj%18C4Dp!^>|+`DdkS`{z(=e>`942>*lzIdAxmtl!kjkR4{I%IZu?4N(G2y zfFXshvY|$@8{$WTMIy|+Ne%HMmb^}7h~3kJX$+n!BXX3RXNRd>#U2Fsjp#5p;WFd=2GjJ=rAFfn(IUkjE4z{ zBy$*D2a>P0kW7>mU7y^i&{c6yG_w2C3_~u3)iY$44iAY&DCUlmG_LPs-g3Dj9EM34 zL1Huo*R(ixia3+t@Y$&(=V5DK36dMeJ6>43sA`4sTxvh$)eix82@>a?(H%+##&hiW z`Q62}S7hg$dn)=2*;M6So`<4J?2?J62Qy%$S1Q8lgpm+*sU}<^Sd2Je2ss^X`Yz>q z;PY6i##1%tT(5GRZ6&3zl&45iPn;{?5t@hZI);cTiOSdH9%&mE}2>)WfJKy}Hq{#LCO=yIjNK`OenoSt>dAjG;MEe*Ab53QrAWh6;R3}>qilnolbynnX{5YIs`yj1R66gk<~EX6>T*EnGyB0FC{r?u7Xra@JPf-+PIbHDf)R;D@o3aJtusFEG^ZI z-C`VJ3Y6dOgk*%6`UFb}QY4+hwKqK~#er7uHV2*aJMqG^1Gw%lkKowVOR;*_*?7D^ zB~^y0_NdBCFFuV=8jf1UQ54;tF)2>tD!NKWI43$!VL7tQt9qCruMG(yUb=;aQc8|4 z!?m5f<1jL!DlZ)dmCAw?dvc6S2@hqSqoaNXb6*jn7gk_oypUIt5y>5O!o9=DxvJbG zeQLP#`dlY|?r2Hv37coCDpcBCaxP?|HzjJe+gc@z-1~)W%1I{)mxPeFl|sn57I;qH zbCg3wlg2=V3 zIktQrNd_vF@35SAI%Y_4sRpa^?niBmp|!TW)s4O*Ttzqt*LLz*wJnURit!nFq<5_N z-f^8MSt%YzXP1Uc2a0ZU5;L8sjj**7<{0Wv^BrBx{d9}Bv9h}3l;m?N?}(gN7KTf5 zP2$8tWkG&-0eGNibh~#1qb_PH)O;4z;+!x#MjcCjh2a zwFSbS2Y#P8hi-%dqjMN_;}+Q)FXvs?t{XKHo=fdXXmO?b8s;ohM=Kq8cRsxt$6xYC zyzrIx1?d@8ZMfLr4S^|!fRWKDHla40mxsW;o3`Pwi?72o|N0&@)h48%1ikJwXf(u- zA7!dgbwwho>O$B@oxKlTm<^W)EgJA>H* zNcyxXIE^0?RECEtL1I-$_PDIf^%}pBi(i#eRV`kN*Z0YU?;WQXU-!A8kYV{k4CA8$ zR#^x}!&9kNsRE|T1WB`!HmU*}hSHKNrbcEEj#gh@$VC-po>Pz45J9SfE*WtRoo)SN zxa8W0!9U-A;4=LA_9wAuRtr9I^hz;sY5Y?`(sQa>GEXPC6mndb}vQMZ;Saq)L@K ztdNWrLE?2>^_50C@p8k6!<0fgdPvYXCbxH~Z)BHOFO?AViegn7@=CR(E}R|UY+uEV*pc+k zYKRAO&wJvSm~-knyZDaa+I2(F!>YvkO5v!GFnu0K#OMU5T#vjyi8!yLVeu?L#mco| zq54$%NrcM_%9U5s6=z$q_?zn()3wWYl)kqm@3$D?Q0kA$^_&)!PYad#4!~l#wBrEe zdSqC*o8KISHn$`sg@fC8q)&;k8!jE>$U23QR8eMsTQ?;m?0E>wIWG~}ig4?YYVlmV zJO}5bGK|>$7N`TVvNC%ZCj8!Vof3Pli$AP?7N=fuGj9CM3ER!{%lqQnuMGi1;Pr@r zkVeVNW=c5r(p9AsQNK3@xr~%cA$> z8f038$Sp1-9{-R^pJFIfsA|%}r6Qb;$A{$`Nd?JKU)9qBDO4^=vS^S6MN_neic?I3 zhARm_LmOSvrd498swp`y<-?Y%f?)*d@t!eUbHjRU**1jwngqW3(S1dEq*~`zh1A^9 zN-w_Vv-18`Jtd|jv#flp%7%tJyE%ajv7>S<;cy}C72GPV#F<9^yyiqu;6znww>^Ti zk?0=VPQBBdK88msxgJmD4kJim>g9M9QI)i^u#=KD38gIN*lMvU4Q;Lr16F0nbuLhC z(K*p-za2~MhFm7j!_F(@fo3GfoqWAol5%j`o6=WR2@64O01vvTOzXR1mLs9 za|Z2qm_9&7*l{?BqRX{kk>4Fw#E9gWYsXbDInTVlUlgnqo~o)G*Q3sTSS4nzXTG=T zta6Kjg|(GY2O5c_;xt~KWLSiR7Qk|&0sLpwFZQHiuyhEm?;R^6_qv`dtB{A~oCid< zJ`uEu@{iAm6UP0PXf@$^&N`8A!L~8^j=Jw{J>FgWVTvxlxpeBfg#&-};4}EpmH&&o zK7VpqwfPA%6zoEVfFbajB4A|nHHFts{(48?&yT-=6EC|7_kI2Z^kpDMJHzp4oY2sq z@j}DFt(+TH8Bj@=+l!QBpg)tBHW*4INy2Ev-Y+Inl7Yz-P9D24@ zLDGC9H}_JN0p>-yp8b-?yp*RH_Mzt-N$6VIZ%v{e|1jgJq!ezSKUY~LmLbENSRkd9 z-fcf$h-0UUM8i)*lY^>~+x5g76NA~!VWN6U1B%D1daB`_l}e+Ai0ulRXyZy z!&-y*s-Pe8>b688adAT_gX*IdVZfRz=NkS&HQtH>T66@EoVk^t!>YUnVS_BLQ>;*| z4ii=fb}M}f8Hz<@o$97eAm%r#bAi1S8H(z*9||LFblycbpm;O{bJg zX2R|%jG(Z6(8Cp#q{DLhNO~9s$`&dlqUyxaYPN1ZXIMTfpHaRKDxWc~XNHIK8BvGB zcsYe(Rbm-#ExkaC1*}MFA0J2|lk?=9>O_&YGVD=Vp$LaL1z8=~Z+?PC zs+WG%WdHiEV~GwkMwqC>gHDhQ%)NBp5#xn$hqc2Bi!jjlR%KB!k~YpONvqydshw7- zx-{Fmkn}RNSD#U0$#ug1yKaBfF!fY(#)*>~8qBp@InPR3-7wr>om4!}Ve6FdT{3ze-sf^e>i-hrjcv!&e0@zg`Av{bQZlu%*d7Di;p zBO_tqrP9Kt-*2U$VZ_9PJy&VqD<{ zYbmeH@7=gPL875Y!&8kfs?Id1-KvfpXPBa_4hQ0-RVl+TrIAL@ex+KoVJHJuY31>% z2=n?RvTn$zsN_8wZha> zZN(t1Ns2{Zf>6qe+)d`lQk8RikxKsIUU1O>=ZrWJV}+;f={G% z3yMuS1%t+OE`&t`&`9U=!!Z3))#rk!uWZ4g`M5zFjJkN)^Q;7m^Q>!^>yZXI=ULwo zyeF=Gw)1i4Ic!cDF3a$0xBX67Ymu-@&|HsPdvsb+rPu2V8IY)jQt>ms_qg`l9+z~= z@fqQobrn^87n1a7u_uyA66wkoE`G77^7cdej7jUM;^Z+UVIW(O@Jubp<~vdR)>kBm zx`jCfnX2$ae@2`Q`i>CwGNcHS7G`49M&MW~w%(%Br|&I^I^jFQsiaKoIZw?0cSE?f zmnd^DRn1o-=@vHPJn?z*oo#L(Tfbj1odbGLVHLNv!f<6DS^s(PB&9=%d{|o<)+*4P z@y=q!ZJ)@dk%&ZubnB-1tZp;{@1Kr;no5poFu<`Xn8nYm@=SwhHkDG)f$G#RaPtHwf+8m$soj#Mj8zmSLqth zm>0EYEGv!J)%c-OLNey&S+Zab&+F!z@touK#7pHRw6~O(M=WyeGENpg~B2qXseOl=Dy0pcPTW6j@d+W)pgDQ~}&vwaV(F z<5jK=BYhgq=Js!u;E zu8J|9vJqD0l@5z1`~5Ycg{eg4mzEc$9AU|ml)^^kEmV|DxH-OB>}sJ?37Yq-xu-7i z2|J#KKMiG$-z}CE7J?q85_6tN6!<*5m1}u@7LrlI&U*^Wm6N>X3_~GH^W>Ah9Cqz0 z6&mx2>{uCT)@n?o!r(@T%&xR zD%D57muYzqXCBYrx_OpieVs|f7)?M237_%OJ0b@bg>!S>`EKN#x;ft*lN1cf6~r;6 zVeP6^N+sx`V}{QN2_n}s+rV(s+5pfX%q73Dh~c^Y5(!+qFn zWVEX7H5>fYMZn1D)SX)!*-Jp+n){x{$FI2!Yd`mHbT#>g_6s99Y#q%?UX*^oX}k#; z5$~?A7OA1)R)D1OMuOQ^6AwZGX|yn8ksHZOV7!dwuxT(;7COe`SqO*90(&AVnR%+; z_c*)6BTSK0a>;vl8>xp?D^$gR_phY4yBMB1yCGSTFH|gqQ`X4cZ==D2H5zg&s$fO+ zQ9su#ElP!!@+TG~f|a?G&ktt=f08E6)snV2y=id@xcPG$=0(FWlkUG*DVA?gOEnCoBK&jIe#RrO7O;0Hp0Rd*|T-y5DiL()A@y9d{v9rkCio- zmyp>anNiXxeKRW*EXkW?-$|!cjFM}Tb=Qdzp~_LD%Z5G@3Q!RYEDd$IzCHNyu`gk?iKW`E$ztvgP491l>}q1g*{<_xr-aEzfV%}o3#ll zS{iB8jC=oKVfA#ta!vA`r;aV{%UszrHY^Wcs*tlqS$i#hc+121#-AR*^IthFP|;t) z=iPo{2p9ry5Cn{jzCk9+Zu7N4;L3ZRz}dfAgZuyG-I(57CzVHO6wGnRoaR3AgX;F= z^V?9AiZt-!&xY@A~8 zFfsOwV@Mah>!nZS6-F7J&BFKDJRlp<+HKu^V&k$8hRc0DrO0Ko+pKK7+Bukr7P z;nMIVQE>Ch#v^E94v(N+iBn;i2C>X(w0usb1q=|ZM_xzQF4w3!W>op-deCt1pr2$# zxVjQA;-?{kRA%VNS>jZQr2@2ZFfHwbNJdl{3abVj<^(F`GMCn)I#FnhyAF>MCZ%xg zuz8{b!f*Fc>QCwuG+#Y+$$eN(q9~%df~cpucC}3r9bInjq&gfl1f6S?>f>lOFD<4N zJI#4#)mJx!JB&z=yvO4X?)WVJsn&JKN^ zNIIz=x;eVMe?GT-F5G97&nM@U?|04FXEej3{b}$?VhB0sUJJ@qz9Tqyyazff6q7L0 zr)`$p7F`?@pIwqHm)xtf%#AP@ui|#tGZq#G%Zk0MP)xF|YflTENkKLz+&L_tlh^0> zt+J&NopoF*?t52r{<)^q;X!8~-|-CX<~M?By@s{(eeH%@`z^)_;#|;osX7d_*wmMA zxDVgEWgV_R>v(w=>F-_}tH91`2p9qrjewESiALP6_qsyh@->g*+~3`Udp~;|I-2T4 zS#k3hX?V~8VaT3-Xi2)L)Ww`O6#UTA3!jXZ!fkzVw(=Y1Ce* z{H<0mB@v|oOhuSPtg?EiRw-p+Az!ES!vRU;-6BB5na9&GqVc8%h$@u~Gjm(GP}v}1 zaaEAY99xc^^Hf=>Gc5O$`)K6Sx!_iXB=%evt|CjqMlwwzuSHKd?<7;5b+L*{o7=Y= zVHhw8rkhhp!}-bn6c&;27Zn`M2VLG;8-$N*-%94Oy19oW9$cq1Mpe;eAsZT*ECA#d z%+WAl*U%eG(>cK~=44PkRp(j5gSBUFSO_^W;(6T=MO}Mrb;SMZa0v?OI4x*M#0FA+ z2)q7Hh%_q1v2$Zn1|k&&f4KwT^2?2^ODws()NJ`i$|p+b~F_ zt9BanHzGIpD z$TS3Estyak1xsEc97<6Wock1-YRbuwD#~1sB(x-Ld`Ixy3>nrnPNyW-gIfjNcXo{y zt0wz-mg6a^J;ewKk~WQy;IqrTVYb>~p*wE8E(>K*(RC~QhJ|%&s~tu|xMBG`CkuDE zq%Z9K$T5*za^36PkLPUSdSK)RpFI{<`&_!;Nsj9Q}%OaXtzGQl9EwDghlxu z&iKl|_LVO7M|F!$o%j2DaOoY7;?HNly9|@pl`&yAV+a@muNVO%qpuh`J8&u>@Pk{| zbfd?e28ULA6oW|eZP<#yuf!{c}@gs4d$Cw)p8mbU9im6~InF$O1qVYxriK>vcmKe`?C{>OvE{W9pbGRT!=y(#2k?Za%G6UzHHS;{E&40AmtD zuWAwZk+^Wa_&beUpi;;Ca@!x3ih`A@w1$P@mW**Kzoqv z!+Oq=-10f2(XRxD&kd_9b8I9ITq^QC4(x;m^^#(Jb zdh7NJ4oel_dxz&0Czj*Lc!O_RhgOh z%<`BcmDhk{{2r6;?gq?$HMl; z;G@b9H4W018h#W@#)lRYp^>bfTvc#bVqaS((Bn)4hWSrwXwg6>k!3|x4PzzvGf`VVp8Ut~zD)xuAzj(618AGkBE)U;P+CY_Yt$3MQy>vb z=P;Dcqdp2G;USwZU^taWE|(YMPwpvSKqg!8Nmm4jcs>z~CE^$!PRZY8AFoe>S-f9i z%|MZ4MdYv1SPbzPNf*gjRQ7ohAQ_K|TFreVZp67E87uxSB9)Q3zcCq?<4N2|==z4z zNYo`ooe(M*0jR+7yxd2^P9uw?k;XR-tc2$wM$%pI2`1;gfrKvtIgS{USJJT{q!GYy zj^p>xQRm+$x10y`rE(H(tA-mx?6`JVWmQQlug%{v=d&SEB)0`mu0xXET2xMXqf{gY z(m602j^`x_7Sf&0lM$ny>Q8~>+(Rmxm$j4R?G%Z9K9@&2llMt|j^l_Rmh=g2As$72 zZ2~p52_%zo7&~_Ci~PNruxZemrfuheIzV&*0_1cTqh(*TqkaCVeQZA zMqO}Dc~1?=s2J|tv~>~-9kJk%ZrZbUzSDD-Ym~&t?FCBgcwf98$-YK2Ff2S7EA{f^ zc>{vsw3VTnO@*H%PSsOC!XX3tPZ-|mJ4}29@PTb(m`UQ`I4p=$wt%2ri-ynh8PRql zl26#@=YhK+%&OkHMTC?{yN*I$pAJBt$88tF_bx+*c}@-aRc9gJDJ$AbJw6#>LV~%t zwN!*j^Eut92USFwPwM6pSN0N>9>OGDQMOqsRio7iiOO*8uxh~COVkZn4O*adl!`q` zN=P4bTuZeHh)Gym8GfJm>@y{zRG6qpWa%7m9IatJoH@^u3tkfozK@E3Ww9!%tbA7Z z-01Tp#f~b7Fu!*s-AsK^N9}m6a)`+}zg>gdAAb%TE__c_+bcGBLtv^RU}SWv&a92= zB_Y7@pUc-ghM#}%9XMb?yBtH0Ge3YN2P`_{RzzhEpX+g_K|te`c}c3O@MFxdOOjQ7 zl=XNjnqx&pRSjpV5d1w26;&S@a>kG**LWG|9l_lXK8JkI5c2)Q=-o1i)Nl&g)1hse? z{#^*8k~t4z5DO8MV7m6F4(2k<`{uSrn={cAA9GM~<(wW*{S_+-$Nf*uTO z<8P_LFzlF)0ICkWTYq0cjC1{+%ypLJ9a6YN=ZOX`i2{$8B0`eyo8z~ajOs*g~fwj>H*ospe z5k>Wvb6!(ae(50KI!op9l2;e?d?L&9<#Gi-)SA~R{>R@7doQZV!3{?uqQsKOCTbFL zY$}z(;yo7Opm*&iKhpwWu2RSSQeoIDS9?@hA>ni@x@s?1x7|xv?kS7=kkCyS;fe%>k zN`^!!>=_fn=@MqHQJ%CZ5e*7cg@tzphQC9E8Fj(;8x=;9IT9C19~ks|aZ;(&mPYCv zs2smkC?@f7s@zugfhCb*sIsbu`q~NWp-c=!J!JTOF}I!jw4D~ovCchlC;n6(T{T_{ zE75_d$~*Ih+4_ldtfAFf1c?1+RZ*2(;-R$Pf4ZgAE+s7efoqI7?bzYxopKYL``ErG zS{5=Jmg5@~8gq)b`7Nsae!cpA;WJRwWiGWkTm4GZIjnLjJTsq^jtn{{G_;#)I@iN4o%J$@a(!*J zv+&%x`ZB@*HW9QJEO77H9V(1y?NGs3MsG*WW<4^a|K;%A>NVo6>6$=tn8ngOahL=&D zAvx5!BQa$g3Z9c>k{i!S!;9ym(itxrpCm{mvowg+;XuMm1#ea(6&T;h<9*VgBU$E} zQiEI#GR^h!b1cV15p|1>kVsM4ajOpVyd+{Am#c#CI$UdR^-JC(jm*j_ubMyi_xf2% zA)KC+tbI3EZMVdu;M)aZ`0_i zFSUsZiYPVL1aqgk#Jnz@3rfV;E17f6XH0vEDmit-g*9B8&MxAt?;chSrXugQ&f>d- zs;ui+;WJD8s3vR0Yo3#Hn#mU=+*tb+^LX}XWmq}aDmU#f%6rne3y5sgSIN}@$NsEr zv&4D@O3wA!P0+${>gCsqHmPXm))l!US3^$eSa6*%ynoI$6)=)cDpe$MoHD+ng1p&c5hI2x>w8NHN@Xuqs*)s` z<+-aFNk7nbR7#}iK+OLgsz(tAzSH-=#A{quZuPOyNEjZ@YP>(dG4I#&FgYkpr!Rgc|#Ogc(+p0u*Ln`0{lu=@PGTU9BEKM7~HP>^tQ zb+(1|XVqt~o4L1brKlgCm(PjY7Kryx=NO|yG~`-|Bzu-J=bl?o_%8x1FZQwJepS=y z*wJTH>lKKzt1gZcFZ&bjf36$9`hQ2u`^_!PRE3`a8?qrVz~%)g{QY-r~Q`WwqM?jWxFrLUhmk&4{x>25ST&;kTC!0 z`iHRT)<VKs&A!YM_K97NcAeLzbh5AKvf#aN=00f0SyK9^U(cP zEv{0iYMa})lca@VmULFpfkg+{rs1rRC6YNtSWtD;KB_x8?SD8f;>mV5djC9zq?N>* zd7Ap(q648foky2be2vFz*k@TE;A{b`TFq;#$}H`mMsq?g>2Txui7~^X-Ts^|8F5?H zNY&usa+Otyq}w`+<0mEz|93-H`QBx9?^%td;yfB!?N;|Dk)`^|!aSNIOJ@slqSJ%p zQ724TJ1Z91Vkjx+Qx!?YncosBjjBpYAK(g{{9e_pOr8wLbx^E{_vGXa6Ay+LyZM+} z{EY>{SW%ao6u|27+t=tfheTHMNnQNMtNgoljD_a>>fpL2q-H^Pv1UOr&y@I4J!eQi zi6hr9v8SV!Va>!$E!dl%N{lgpa@aA6p_8*T495Yks6=*{- z1gahZBcoNn1gaZ=&tH2tesSMZ_|Jbh6p7l}vZm_{4`ZHZWnNTRuQwVB!c%|n>B%(pps<0lJtSCy-$CgHJ&NzuINvs;qB*9cVC5*bo@2AL(d8Sn0sIr#& zoBAza_}puuGQYJ2Nmm`}i#dHl`i3&tEM%^vo|3eZ;O*AshZ~call0XmVxqv2q|mXY zEp_PVa>IqG-Z2MJ4Szb&s5}!tR_0a(jbr40yl*8lyr-}hFuVt<$8JAMUp>rVr}k3M zRT5s3IhUOAoI;v8{*F>;Z_smhco4%+ai@Wt}Ig;B2cxa;_?`hLyYd#Y&EeKi94n3L7u) zSBU(epL?slXv6Y(IVTJmX8Hv2v2`0?L3n3X(5w|XZH!WV{1;e`*~ z_Bfu~unoP>^36JQ#2hEzQ&d&8g$os05_T3Bax2I38YI_L>fGW$Y~jLjYo4c89bVE}EB$qq zaB{39%c?R8VK3$cGF;dt_smD-we>nmI!P$0K$3{7(n^N`odD|8qf+{4e_BG8-JZKa zo2X(aC2aq~N~K3V!3>3?QNWM4 z8b5#d$!!=)=PUw=2P;wB&byIczq2;CApQBL@_^SU4F+RMnhSt_RRN@ z68`aWbQvB?GD}sH?>&ZxKHQTQHBxaR2_iWo;m~&;uf_Kud#Um|N;)}DBv@4A<`nNq zN#{tWAmma>CzaO0YytC}zRXgXDWtFzm1h!PVoHZ0-_KOtIafk%i%gV7fJl;<-|P~x z`?rotizHo7(h{eay)esjmZcroa2Bm>i{pgXN)PG+aVj}5bsyKQR^H{ja}4h9Sc#Tl zz|G0>7Gsr#p@=C7BT1z`3*1MXxX!sAT_*y`aW?PgBC8W+yw)n}1k$2reBS8DAP#(X zH20N?raX7W{AwZ6QZIp(s7pouNaX1NA~AJIt6%k*_f*1(MY*VQfA;E|(KnjH+RvX* zHSaQBbZJ zCLVm0HF?uV9oe4O@~qG23$Z%Q#3C#tF9u~)U4;#+i6)tR=&wBIPU~9MVMl)d5UU?t z8;@EXfej`C|M~YD_V`WD*h%Le;iZ1qcg9VX zN^$^?vO3e6I(mUdnef2sAzKxY<9X&-B#vxynFR<^ueVnTm&Ki)A1X)Jh=I#a(g#I= z8FyM3#X`^s7-K>|th&te{UXp7)iUMUm?N4**ebW1*-l34H;G>Rk@# z10c#kiZNobV?brGjm;V$MdK6!EEXkT$;Grrbwi`v*<5}ywVu0roRO4YfbxT7_M~%C zeugn-Oa)rq9Xi=#+XSXqD0cABMeZ$E0q$oO9e8HKTG@S>f&tJ0^29N8h~~Lt5hzp% zz;v>3K|JN8%{|IMck8@AmJj;*?hyl-m)1y2qM3 zlQ!*#pWR^Ig>gsY2y93Zh{5QFG}>`r-xq;z-uSrv;U2SZmG8 zSS(36t003CR+0IrBEe#!AkfN3l@D$xiDFeAhJXp7R?L}v&1mZM98*nlX&e*EC(gUW zHk~lcK6>09@rcC{*x(}Y$5XDi{XVyg%hQ{2vM$ISB_Ms}c`7e$B4sFWmd#380TVDr zVGiE(riABcO3KMI3o940dQ66So&gw4oCPodSWL7FU1ncu>U4uKm2gpwMu0H#Mkd*` zh3fzi0Dao@JMv+H#=dHa0+;}}h%I>cFv;)kiOT5hZ3Ys@h<_UvEx&`!Vg2l1BN!7&A#7vyl(c? znKgULT3-7(Te`gdFZZoLEB7AYx-gfRylWUyU59TLeWfp9t!(1QxFD+z4VP#?3@YtX z?k(*kca(8fOg$wfnYQ|}lH9kDXM}~;?Ki6KwFtt!=Q*<3MI7!kt^?rREO4vW;x7!l z+OOKWQW)%h!BlJSO53$3ecVO{GW!kgztA7#r>h+J=&tWbi1dp^J;DR%(dKgBbjHU+<%a;>)b`~)EO{y8PWc>I>QIJ^ zF%#@Li-nSm5_c9S=#RiK$Fkq3`h4!H=MuMNbBSy6EH^+BR#8sKVh%A4Vm!rCa(@BF zh$Hn`bLG6qhb_nley6?5-fmC(cfS(U3-tacW< z8#|CK##ktS?*bSZQvkP2!59O;;G)jR;aRGm<+)R<-ZC)-pgWN4jKHyKuJY`_D2Fv) zS$qZDlVdtMC`+To-w+&oKJDU!15+sscKOw<)}HLPt55ovv$XLRM<9;C`W1l~jILkf z8TaM`M&QJ2AGN3FEVN6H*~hG++U@bhe#&hS)-yE2U;+SRLvE8+?7i07vXmR6XhO?G z2ha+m!sJgY(S4PS;Nwkk`pqkg?3%N0v%^n5$cBuFWT9;m7XSbt07*naRKxKWM_@yW zz&~$!*5%-|dwy37^=muQ0D<@+P~m040>d4BAx8ly-Y1#$pw zp=&Vj7r+=mtR;zQOqnyS%59%KB!4V@Mly=KH}4`?SmeGg?=6b*W&!c+M>~lr@39b| zz^cKb71nnp_T+P_{}GVv$;m?_Q>Vz7hj(UZG^Kt5n#HmLP^kGzo}k!2`U(4rqpIY} z0BPdPyO=(SrDk7#CwEbjQCM!;02tB&AY%dO<6cldk=)K}OSv>T%q3=D+8UZ#&03o9 z{9M&$)q(*)o?P9LHDx)M+DKkXjnML(8!hc8?-%D=G4wKf8b7Ea_Z=Z;l6C^vcC5C%lxH+7DnSei$HWQATdZHL{xqF;ri5=q$kc5qgapr#F`!>8bzYxHO7Tcj=N;x+JAb zIt8Rdy1N^emRdx*dufpFUK&N3!pTs3y$8zgU5r6{B37bwgS9(@-@{Bgu~7 zqC@1drKl@nVf<5QGzpE_=<&BiLE`&;(+K>0^k3O6V}-xTi3piKhcg-{`SVy{{3QcP zF!iadI(Bs(#qhZ`ay=fpv(-=R8q`+$4Zch$HbCkB?Kqt*tYkj_x)Ql0f_|jM+cx;@ zp&`$OMudjG9%{`0e)4T(;walXyGOKm*on95P@f z%)A~K9n3(_$6#JkA9tf(@e8#o2=5f=|?))hA6(Pv-}Gn1F+YhW=*EE*CbZW zq7t8e(_}M<5ppW|l~!9?6{r&GXI+T&0H)rEi^ktp0^~J(KQ~Inb?$)bJHo$`!l&I*qgmqCAAXO3V=geE+uMZlaHZs;Tx(eJgXocz_PQE2?jYCu61KF=CYmGk z2}?f)xy*1RoLqsSctIl??Op4T1#=EBq^t5&Wy%WAD56-37OhsXXi=ANo3fqivuXz- zUPnMRJi*Cd&CV&43x+jvE?Pwe?%vwC%TR<*=zD}Di(=#Jiuy|=|AAU9lT-jn?O^Xc zu*UOG4?PkcRobB-d4t^PAnE90WX{}!>xbs@;Lk37`5S+S38Ls5$m#IIe$L^~-lRPy z0%+QQCr}4$u6Vs)TxcJ3tUgPHJQX->Up@5e;4OK&2`v7QXw3-%ZTwqSOlsFCq@t}# zq)R0qqhE(tDx%VS-qH_@V(FYhPgVR*!NKxZ!FOq|u#SSAh3z(#qN-NxO#T#;mBxF4 zMq+lHxNV7lch$m7_<1D#@25a*%1}Iil+T?3huLP!4)Ra`rcK!~20!^*WI9tVv z6%_sJxxfGZDmLuHuf4;N@)<6pn~cf;gC&ine)x#kJkGepH#O zN<26UW_?NNA$Agc(hr2(C(qT}>zKhh6^Nd6UG)s`C&uxU$HHMP$UHv{D2lzk0lvX? z2WD=GBlT}X4m$>2OfrrIs#)2_8oN#FeR$wX{+Y%wa{uZJ(f3tf7`Ikl1+a0C`gh0= zbk4@nocIzmTC<}z*cI`488b2E5+#iyeL1GOix>42k8|`PpfwwBo_!;Tcvw9;@F=dv zr$wq`i#b1@IaGhJMa67P12!!?*PR0t{P zBQ09-X;9;Dx+EpL!`dN-fc4w2Cf5pGI%zpnU2e5U!lh#oxa?3(M*LbhF}3%QjDX!K z@BLkV>R|=d@O}Cnh$0QUP`R&(?aI`rkddtM9Wv|Z?W$I$t^if6ZW za-u!$nUMcUbpW_6&Z=|eLgkpwEx~uZ@jx6HF;6nyczpM9>Zw8#TZYb5+hO^r*gDGk zAcJUTd6b2UQ>H5E@)9P5vPYPMB~ueiNcJ`?Ej=2*bVzlA<0vu13FgPPP?@$Ugj^_R zOxUxQr}U;e!oHD85lhLC>ikCiG~T<-I3z4+lCVpKZiH(8sS2qtwLn>IfAG7`l=kPK z>5P)yHYMs9BCeBe?nnuwVGXMJ(+@_)s6wOq^kpf&@8-XwU_cYE*{voTD^=hEm6Loy zgTcCgPb;D9LMmNHEerG@RHTyU@^&U%k{53rN;u9(+G*xp^ba`fD2$oeFl98?&s{gQYm~j#-YW}O57(-NHcjL|95c_akmxNp2_bo)=!zim zkecjI524pNqul&!Yq?&y=rHk_ltdhMEdI1ke3f;apUQR=C0^~aQE@gml|t>m7$y*) z5&L*s(c|2u8nLzPm0ZDMHf*Cd`)Rz>t%@_xm_Mt1A32v#sB&y+wYh1k#C-g_|F6XD z?P7_`3Ce)eo$@2L-JyxSu~oBE51M0)Zo!bomu2oBM0euU^}S6>!-UWNCPDd%j>k)h z*MTtEVC)-w$RG+Dl+E~`#l{a|f9j#!PGx(#qi14#qNU8kV-E+{kvO2SH0{JCQ0os0 zO-Aw>pwU7tmrohBBlE(|=jCf*2$d$POgZ35#h+30b`vQTNiiJ?6#HVW`(`_?Y|g_DusxBtsjdF<^jBNrn*17 zHkia@gDVPgp925U)7yMUT4%^uicd#EW`Vo9D$m@%R?^>Rp8q4Er4pSAN;Y5ziV^zO z;rSse9EgO==@`l;@!;RK8-~Td#0oaIMsV{O%10c2igk!j_;p=dCI9~IP>bR`b6sHU zf_)|^?fiIFN7rC%gAjRmIXa-sjiQhG|vl7fX*XZ~ho9g(Ej#(D?A_qJ%B4(f_3M zsE9=L2q7<0BOWUG=f3TG>yXbws5f+}1dHP5C&y9)gTGbBTYoZF-8?hdni5WgU#+mbL941GmgI`-QXUEi#m@Q=f0Mky^VHp>EL z6dh{y;*Xs@mx*LP8(fL{b0+aWNaWXL2ttLQ4a~2fk1$1#C)5`;*?iVVz8cQ_kj^xO z;ehm*meY7J4SM=V`DSLbl)F9)+s1zX@LRY_pa2hx6y@QReL%sH?LBQQSbgSuoa6hm zW%`e@Q#3n++Xta&w*j|JyxSe02iU!Uul=7(_{iMCa(l8GQi&>5t6tsJ^U{L(q`az_ zdEGaRFScu;3TI<(G0cE)2_Wg#&UlAK3^2QWzsZd*uaV4@rgip10T>^L&YbbRRLTJ| ze%%ap98n<`yBYlz@$~4aWi(LwBKEo#Mtf8Sw++xs`%ygvT=;j5NamKmms9IEK?{o! zPAcgEGg;zq6J~CMYmCFTXRx|rz6KOmt>SoCZ=^yuzO72-H`1YTBgRrM1Kwv{<=UCh zxMv;idtgEZh|x*eEY))vHWM79HFe8GhVA>i>DuJr+4YRsS3{_RK3JeE9V8~N#qDg~ zZmf6+F>|MQdHR~PucMSGOgrwgMKJ#^vKOyzTu#2|MjN2H=8LBAVA_qRqyxcM9yH2k z^S4)N9&&I>a&$GJzi1SnOe``f0}53gYNmi!cthA6uGar0Dz>OL_-o>GMDKF7@i#fIR{+Lz|F3aQ*Vx#)ORb`T{<^Ahw0OM6m47QG_(1)7@ym`+ z*UgA{O?wlZS;t}#00HV|j$RYQB58rYqtlp&s!709va@Je1S{RW^&Zcp_ZnWwu$uG_ zF+t0m5ENHq^ju4reK&nN1Xnkd9w-uC1b*uW%!l!0*oO@#A6Bcl6u2 z$N7lt3r+snnXNn&Ei`1zYB|ZC*DBfF^J&N|uo@}!-6VQW+7HKV-J3#O9XS_a!Bh4J zCN$|of-qJWyjMwk%!T|Dd0T#PWF}7bzjT6Yp>O;h-Z!GR01O9mW%a%>xLZ&1l|FI0 zj`zkk@5l;G5DISfBGqhhXwszKqmp<%PJKa+B@lYxy#mv3s1!((*k#?|*W-^MyBk2h z?rU`r-^r@EjdcHFqFi7J{YJX0di<@48>u$AkqDbxM;KNkQfO)FfF4J8F9%n<4agKY zjSs!m&RLLT{gZNK*uwf}CjS6R7Mm&{Vve{ae(NvK%W*aT!MStzJioOOZ^qsc&PtPU zpRjgQ6@DpY10AxAB>wPD^a7!I@VKMg?ta|6ydx-jE<&Mg}j#}=&+&l05j_7z9Caw{1*|Bm%d@p{0MsV|)D{Wcyk`Kr4Mj2*X) zJNP2{8k3z3P4=xPCd>*Lrzl?d3XCa*GV&7_Al9TOg*QQUHuC+Azn}?%QGPi(jBPnE zKK>Dy0QR|*MBmcf~6z z#EDlo5l^s&bLJ%sl=^h->O`Vq)xSwF7MuR8WYmfe3=`{N`EwmTmfVOh-B&^Jw{G&K z!W*`OSaJNW_=<;9-s?Y@2nC&Z92p;A;RJ}@{`7aBXw@KU;3_n@mNnZBX)kYkIXx)Q zSu{m0emjjf*TwGY{NLO382b`V_axe+hIpnXAi5+6>7pIy@S0T z`gz_ApAS>IG8UVrR?X8NZ-kDydzTXsCkgClRLQtKOVh@Oj1OZevxz;llhRY3vhDedvc+ zeO0C@v5*mY4ZaGoD25o7{491+DR%eQHoR28MU0W~Ds(9&4$kJwWMwvrRDa^4k-VDm z-&8hVUfF+yzaw)q)09i_<(F;h(t9%f)2q@6Bx?Wx%u3q9IGMh-ADr89p~hqHUfUJqzc0gitdW&ctklfOoMw z6P;;GNeBmx$sc0>1Gz|van^&?V8V~g`2gxr_qut#AiahCMUE|u%_fR%Yb1T3%Rp7J zUju>qf{aR_$LgD;OY(wAOhMfZ6C5GBsX%{ecLt(LY1)EJmEFnRi%E>UGzX%`HNuP( zcoX+bSfh3(m&&JO#=hyr%?ba#DHVfM)NylDHqUFSHJsO?fo3wamlX9LR)GhF6Am zAAuFb^tiYI1;>BjhApb}cMn{8B$-6L^)w#&Fw`yRVc_{oYykd$bnyPaF8`)X--W>M zXfkc(Iu6XrQ>kz|l*X?JWxHRr z+VGMom(ypoz8p{e&Q8(SyuXJ2bj;~=tbiz$Kd~`NwEx$~lVz#N4-w07c1_a-6_bCy z%_ZT&OFlTAvrsH(>8z$?2+|&vXT(zsUlwMLdq?BR5bT_|e9Q&=+3Osl2F9ZCAA6{-+k)^ufSdv#Mfk3jsb{-gLYN^lC@;@oV ztZd`cONF@s4OY^xy2zD$vL=uzv;45P+^NP|Kgr1eb;gFR?whkry9ru074<9-`6@*i0&OYidgZZ?=JVcL^l$fv&56&?!6Yjd zwb5xNJ{P6}HnL&r?q((_EeE`Z7w0?D8dGX*%^3b@OetpJQ(aYz4`??4?{kOi4s2(F^0Pa3G|=o+}F|*m-WP8^ZLjBA2tXsAYzS|?^LMD)%f2|~YR>J@)EU;KlUPWU2 zLlyb$Oml0UUmE@~Tbhn3ud0!0u}b4wSo9)nJ_Spk*w~1C3)F%%;DHQcvb>v5#UYV`Tap0)>ru`r zfBTlQrhtn2T&rP&_+-_VvXaU3NG}*&Ks9=#6_O%ineYNj{q^}_jJxhurB@1|m~P!d z{+g4q06tLVkg6c-pZ@!-pq?jBidI>cW+I+GiK%hT<0;Nv<0r|n-6Iaw@Qy7?c7Z)a zu8b75IprP3>z(&VuE6HF98F%j;jL>5eGj!KxOab`{)=?y*J>`c)`2_!s&r$-ob2So zo1XZ*yA%&Atf4j>GCux>*2+Guro+}_nhj-&?$uTbckfO^X6s+k4$694x$IKENXj4MCWbCGocvzg+8 zYNGeWq8fN_!NLamERgQA@!k7m30>e~MwzSi{DS- zsH>@I$<_DJl%AfxXiBo`N>$ln;xoG{V6i}30BESfyRRIjNR?;Otr3ds5MTJiXD}_F zF2>JfXdzLtW!91t$hLUJS7ezofnww@8(8w}aY^)hW!6#t`CkLSfZA#J21boCLHq7m zh~fD+-KF!WyxP(_xL(1QCN{<&GGu*C0cj!|Frl0jSh*uasZKee40HgQ7*Gnw!EKUR zRyH8DlvuH)4_EhLHmxI6 z{uZZVG@fL!fR7SBV|H7|T%2 z_y+B}{RTevKkKkp47zb{q;~M=KwW?##@2RC0zKz^N-FP(_ng>vuqCi~8ipm%#Xq-s z5^${1xU11Yk{een@YDA-Ur}Xxo3}7rEoiho9Z$(@fRNL2pBXPY9}_0LCP>WFE)N)K zp+RQV7AsoLw6ajPux9Momas974&Pw6q9fB+Jm4H)OCa%F%diBpIOP1!yhQ4`D1eS~ zJKW$s*``JaF8p|Qa}x}W`M%eA0Z&*WlwS`?d@0YKuSwx{`f4a6(H+mXYF+31YB@Y@ z<07d&1P)UJ>CxvhaC}aFkyw%nSzqi4jaCVdCFP7`rN#h#wIrfRDz(;8=FLNXNqY{0+n!N* z@Gv2dZb#WBF5&$1CCybIOC+tTCqA@6llgCX+z1WKj1kh9SKKIt7Qin-Hs6q==*oEK zizIVXc~Dg_+biB1S>#(Nbx2BUv0H*e(@9;3k&@U4q{b9Gs+le6 zWtc5YV%w2KI`R=Q=)mFP5{u#=4Y_Z}$4-{V!S3iyivgKy;xvNM9U80Jv1rGR3ivm# zA$N*v8Vs|UZ+0hAF5C%hLoIr#Hcf{K^d;$E zs<}%~`>|dnOm2T0Y1Oyx ziu2YHK%;*b+ll($#2pHrKOB;`Pc096$o#fPalO0j(bd*;j_-1HSaRc=VTPM3dl_UZ zZvh3059rs2&_>LqRUHTgAmnGV2Cq}B(?`YF;}~+X83ywE>wvD(>yg%PpgLvZrqZRT z#k`)QRt#K6KFtNHVNImQ1*5_fglGD|f?Vh3x{0OIyKIH)TO*Y2F)HoPw^@ZpxkQzc zQlz(Z?9}Gr&}NN%WH6EfdINxb!Mvbki&mmR)w$?{dRk(R?>kOs=6hr$f485<_$~g& z)6wHvvkb29)M;k#jpF=zxT{x0mmL#T}=6 zp~(~DRg00NpgwaiMp`ysn{+v#bAMA49-~LgsVGlTP(vn2%2T9eLJ>(RC*zH2QDk?~4~}x1 z*m|qeGnNO)1|9*dTWLBv(vZh`P@|BkdDgU!Ii(=Otn7U<_ZBuRY$e%^KZ7!wRA3;s z>x>f%dzC>tti~@M@~*FF^;S7}m#1A`V7+vQsFm;ox*j5-I1;g9Ch8a88@mxZ^q){@ z`(F#ePqZt6V`lPyUVv9mtfSg+>a64j(forJGSAK$j^rPhRKg{Lz4!Y-xP+a_k~0-B zOr$~1**-qV`W(cTKGjP5t@1SuJdP^hu<>faDsl0sZOzrlr8QmI(?Y8C&6l54!MDE3 z-o8uwk%!I&`Av%T^ zxoqYCp-WK-OVb+W8*^*FLJ|X-0dR>6$*ade{xRg74Aqo;EZ7NI|B$&Yo>5Q$U>(LG zi4XFG%*WnY^b;N!$9z(Y<}S)Ime6U=JfTUp7yidpmO{CX zoU|WB^_uYjHQ@al#-4K?ph62@&B@E2Tl1*k0ajMG*WhC&5rdsX58DTzw}R`yndBh0 zKeLN@ftu2IDw$jyq4H-B@_8L>diV$Mq_NPa_Zt8 zCsQQqQJVl{#RYf$nTCf~Ru`POZCQZ{9P{P%7r>52V*Xq4svN{op?ZqlM)v6EM0@zSM^fQ?%4)fm9iC{W#V2{R$D-z5?nGrPwp#IrgCpy%haVMd};&%{$1` zpZWW|=&IhA(IR{z3##gcy<;0Pieqm!Vb<+r&phLLcIi6ly|3x$STy)4xav31d%tpm z`1faEMe&-iU^G*a1*LfDX~R~z?>3uC&;}Cp=ih+yNYY!0x8~BK6};K6p-?D7{Cd@i z%ElY|%k=(6)@gNF`06C&c_~A`^r-bmuRu|wz`Ph!dvlKAQF=LbYn95_Wa>c#j`uAA z6MYenW)T^hd5eulPLM>#ex25}>oSC&B(#!5a*uuHYhqk0hcD&d2`b@ml`j?|Lsx)l zNSfQ6{x+ku`6qxvQ6P0$EQp}n4v_oSJ+$`4dF6eZ>n(*BM~`C&u^VHcpdA_v@UOuo zNa;u*6$&1RLY?N9$RWbO2mS+y0Pz|Mxog{tnhKO$-fbKrccGA4pW!KE*zfI+3UQ-p zpH4}80RPGcO0O$~m|t1n4EV2@mkGc05p?9IWqDx!Z7sS1lx58vJ};SVKXlH0YP;>h z^^W)N=QaVz=99ue-oaQO%$uJfQdSHG;ViMA5%U{hke9_Y_pd*s5G^>eK?8sUocs&~ zN0;g!3%1LP%s_|ME8vVr#cOXp$6JA_+%bW^02fPeG+&&hy*aAT3!CvXLB~f8z)7tO zC%hXGb|4xfZ%w}^@Sgno0WfO+9UMR=KtxONJ75TcspKy!Fq{#zFN(v8P0#8%_;Sq7 z(&0V&f z89!%ZY8W}W{kwMdH@_Zl1w+d6jzQpLHdDZo2EDm1idNkuiCD~p&+V-@^f`n6u#9Wi z+-tHYdXsI4K;QGf9wj^0JFwIl#aybuPuQXDxq6^%QqeHT+k?xtrRv)Pl*-7pV6_$j zr7^Q0rFv|8C3kVNnbGsG;%a_S^MZNJw3p@>|lCgIz(xd-0IQ z38UttogBBO+P0M`D&c`#s;PkW59o`wL~Tu?<*OSsSNp%pm*#tKU7TDT8YLf|+Mr9W zUAO$ppNbhBen^~wP5ge734Fe=7d@HpYn(0o^Yd$(<-y`;=9uURPME~%-EL&9m0}K+ zw;}tlcpAtnKBSPxQ4RsGS^Oo-NFH5&S1a@s1ulLMCf1jrK%rP)CzOvfkD=G)%x;md zAxz8})A`q>0tUPS@HFakE46>7(|GL;$Ze9G&(JOiXN6gh9JsHxAvzCTxLm%l7^Ic& z`p1xsHPL|{yc$ZA0_5GJ3aeH<2iW`sc* zO+?FYJ!Z{~yg>X9WtlcP-HK-(1!Z%Pys4#y4TO{E7_G!h9@-e?|0XI@+&UDtUFmH@ zZFiTb#ddO-^hdXYMCuzcdK!_^+CKBkU16~GcD!S5@-ET_0BYG`^y2*e$w1A{0JBB* z8;ePf*cmqIsLsWfQ2!GjgO)bGR0`BJu5#Y=^#o+Gx4d8RlZa^{oW#^Ven4Kt>fdh)zN0U{`s`wJvJaW<@@#TW zI{T7`!acs~PV#vA;qB{xN=-~ZMX$Rl_ZDnh((stti`~`zrX^t&Sl?2O~EYRxP z*rhPqj*@FvgQFv#3)Z4M&Wg44!0CvIncHy_K`US}aFj^JQz7NkaYdbafqgmXfmJD1 zjE2{l2Azp^ouk7Dg88>`|48Xgp{JT7 zokZ41C)<3o!ZFANw)|4JZUb9@8Lr>2b$$9RTF<}jEP4$IW}e#0j9?dB&sg&p7&sFI z8=Zw(%w5Kfjrz_cDV-owlt!8w5%OHbu=F8M14o~7Z9Y4v{;G$rz+bif!d;phe;@8T zRsHnpbpcO;6lEws)ql)zKWcdX?;D{0Oy+KB%{Q^LE#^dApo=g$a$0Hp<1o4vd+V~)b?e^$?J!16PH_D}XQXoH;H8p(l zZ_FWyU4hHIX+SNN=OM|V7IW|~5ki)(E5Y4`$Lm!q=6tV|ptGBLvMe17VH759Pe?oN zl=`ZEtz59c{cpP(D~njFpwGq#8ymQ!#LfUsC|mG@FNJ^)Jw?N<`;v9F1_3f8{ptIH z%8NNordr7pHbC`}Xum>5)1i^iTqP+B%y&wx6;YG6tPVy`QCGFUN5afav@<*V^o^Cp z%7Q}!cFJZztGtLMu$8`r<=BV`8yciCM*)~4m;B>=%SGg04j>E(1AfH9GDmF(2wk{k zQQemGaBQ!m0vL$M3%2aY-UA4O=FtA3IFFf^HAt||17S!?$tsSgahr^#gTn1^v2%%i zeU`cfRB{1U1dxqKI6pvrFkk3Ac+*#4tnVF7Dk*`J8Rdx52XXl}Mv#!M+PlKUKs9|i zAbff@<^-)HF;4hYYK5)?s?-BhN}x#+yo`pkSh`tgQ;pc^kz(153=%P7TMc&Q{+*V$ zE`bnYx`Wh?#X_T!)`x0=#{|O!v`pk5IciUlxx_3_?4w{lsn%8j&_ouBH{_DKx#eJP;X!nP`UE2@< zlUZ|8JwHdo4{8uN?5A>l*U%2Ta%Z|k-1rw%>_gGD+k_q=m+YX+78)amrb*7bxm)P< zYQWN{-P3YR6?*%AlnUn=(Y#poKuJV2?#%k4Rzc%OH_k?@shdIceV=Z(m->_mDf4;n zM8LVZNWkxbd&&B*MhB*Fs@@s7)7UwqF@%Bd)OG_afR*L#31RvUE%yVi7K#GKBK2!> zp*1>=^lD~WU{Yiysd-eipvtSh@Q#w)`S`dBH$x&GcV|=S;+MjR;v0FM!aHC}gHMB2 zUYbQEhi?NGX?VIOC)@COf_?-0_C99uU)J15uTf_xXC*^@F40x8z*o4+!~Gm1rZ05{ zPUblXSBjIJa-PUMYZi>tJotg~}Wns;Yt5{v>driBiamR*~B4 z_pH*k8}0brJSqd=UULk zf0|q`Hk~DO)Z(0ckN7v@ULB=7eU5@_pz5QhUkSkmW|yY9|M0wrMbDkrg05RfwV+Tw z&Yo3+@P@(fE_h;=c6q^7I=X2_---v&UXfed<$CtMB5y8LUmiT*uJpIih@{9+P(w44 z>BW&_t$|1eUZ!3hcYpj(-00w4NlbjvWQ!7EHg?O-^lhZJmsXJo&MudXzj&!3QWz5q z6#lWEM#;Z*h5ivF0g{r+S*GD9V0NbM5o(d zpY??n%wU8t;tmd8we*BJKn&&grrhNW ziH>nst@2lO{RU!|2J}0vZQX?U>RkZk2AjdGr_|;cB3`hWf65?|uIgds1{NvOL<7xm zmvuY;KAKKd?bzi|;JI&O{evk6!n`f$Z6UNKvy0nmj1G8|l*2x}YcrCL8|+}VRkFM} zuXk)+R1X+#!uSqxe-6KG02pi(cB_KfRqnuNt8sKkB~1LQ$bWjUh2-;J1=NWt*A1Tx z9t1HO6Z?wLQ)J*1+LHuK`89p&7cYy4a0jzD#r*u*iZ=3#IeqMpDExfzT7A}70>gG}6 z;-sw|*#l(*qg(Q&g^fRnX(bM=(}o}4`IftgwGa9%HucY}kOlk;{~GVi-Z&YNZt!A9 zpTWbDd$CEo>E0#w86HgPxg5+^UL_|64l=(BtZ6+E54dthFV0cTw$xh-bmH27eFzsl zGVvKzS8weqTis|B`{T6MFwh5T8n0ns@zgB`hn|X+?UZ=GZLE&3xjE^)AaF8`3;j7f zk7yqxNuX~KpaUq?BK4DzYKQ4kS*&3qF(tmeXa ztJ@y_MJr^sSkI0K5$4@Lx!gjO=>Ps0*zn>8V8Eo&MrAu2S}-FN!4g1&x>G~XepP*a z_Y@x7!q;H5t}%bVV}m^`13ARN6TspL7Xo0vK@kXlBNAdEg-+?&1xA-n>2lu(Mzi+Q9%+_9s;(N!idWO(d>)f zN1RCC%`N7gex5X>jB<=F19{7v@GgJJsp;rW4F|?EE2nR1_vd1byu27-nKhdl8KV~3 zk<&rEBvjaj?{)`LnfYHhy-ZyUu^?b#*|#CkIP%nXStcX(F^Xrm1eXJ*R|Ar8Yet;# zSV|w7Q(K(3ZYdd&X*IT_IMb`z9=b2S%5nsOZm$3cEamopZdqy`?3b=G(+N&|yqnW= zdA*)$@T?&WxJoQ`3&FgZB?l%ym>gF55kH?kpU-maq~Yu${hpFBjMypa4X-&d)h9B0 z75^Rc#13Dtf<~@Gmv3w~1-Ao7(BXCqAJrG1bcv_A52W7VI3_`U}(H?f&ZG~MSlf$d$1 z1`bMs8HYYTHCpEgJ3(K#U9W&eHH*))iSG{QFv_5fLF`&Hc5q--&&@_`hElmpx%hSK z$+bFE=O*fALBJ_9kiYXK??B8~xP!JF+3 zvsgTIYy4s~yJ=~J{_iNvQQXx6Y{0U)Nk8e#!flwQ9;jf^nXZEu>APSOO>Ikbz6xVy z7{0k~t1OVWA(z_uOW`eO1NhhlaA_x_pR`%qCj0C6V1B~RT1&qkzf3mGA*WGD z0-osq0`M%-AigKCI+ldTG^V~Ly~2yM04jnFU;l_}(}I5jf2xxykel7PAA>Zke+d+; zAshF#dul2UVwmb#hoA($kMCxuFnH?ocWIG#zv`=@zuq`!rYY z=T9cl61Y5o2veDbaPuf)Gdd=&+_ZR4AjbuN{%8{aOf7HT69+R3_DhXl`JDEOLVS=M zikP)YNyD)q#NrOi!a9H3<4V^NlJ$;R;|EcyzjauHcmp_l3yD%_x8(bl+Rk>5N>%a% z?g{uND#4)Wavi6R*h%(cHsw*w^3Sv$HTAQfS)3)ipoCC{HvUxsf9lc3PQg>GMw89SAb6#soZ)UCi6w)M0Wj#-j)dR~~Cx1B{T>a-BoI6?cX@w^y7Ge3_zf;alq0O9~gFc8|fSqW|+xei=O6J3h zdTO^9WLDd?e+IM*@92JK^^3au*VNN~mVkdX%T+o}p4DiA&;4YgdSm!WkJD~`K%FYW z#jK#+lHpr4+Ou3jgtID*n{LDP_#Nk;?eXjGqKlmaZAk2%|S<*auzHiscZ`#5A8e|zy6jBp$<6Y z5&U&`(EVc*Z%u~RD9{uAydh&YIN)pB7=FJ2!%`hFo!Bza4bl}3}Z70d{W zBc%l30un*YDorw;Bny=u$ZRHbV>`U7by1bbLR+ftG0UeS%K#RY17~oM$f*!$ftjoTqQs$gPF1m=#oNyH#Qh=ZqKX*Feqf+U zf(_D4fA1Q0qPKfP!|m-179#y975w&GxoaPt(AH6@30O7Cza7|+Xep_Y3`<~DPw7^U z`?lrI#=;bf22djX@G^>b${Exnyf0jumR$71m|~r`rR@E6@Yb4fS0_7C4^jnpO@*2{ z7n$gkd>=3%=T%hQ_p%!gmpX#Z*%XNnfrIa6!KZsutwmlpBQ4$ifb&#()^?e_gQby9Y{o~@ zWj6=p*M0iF&yN9Q@B&f|Y%4rhw58!h-ttGC373K;$aDc;Qg=^Var z%N}P;qAuS|AEQmMW!K5=*T>BvwVZB;tfLm2Qg0s{pB3|)N=2}QfTn1z)Fdg07 zJeCZb|8f_!*~&ata)U}jstdfPpD z`vd8I!=S*R_IhAD)66yGVUvbR<)~?#^Y`?$`T6dT>n0)agfdspEOfyV+bs;Xx6o+i z32Q7bA2u{Hq8i~e?Oyo6POI>e#Bo1$4d9Bhw{Ze4j?c7L1G4YYPm1 ztfIF7%aWocZ*vJ<8T}jAemn`El zxY{ol!&0o;(6p70)D2?P7a2KM7X8J%^F}W22GFZ5m}Ye=sHsi1>aGUhJAKEClS0Sx zu5f%MAb^+iW9bj>awF_V8? zg{rtU(-QrP+3GSK+TX;-SwzI!n7x>L(XACsGQwo4V6AhV{t;&)VbC3pV_~Hwb8*;?Xz7Tb0bnPs^9&(n zw8>@w+t?S?ppPy37jnONm!5rn5kAG_M>|}#exc2MCs}@d|2g)5=l#dSSIA;7>lgzo zfRN0Uwu#WKRU^GcA}&T3cy39UGDuDyhozNAM)_sljJLqv!%InTWoq&a!(%fL zOZ8I?p_kr1*DJoFq&<6Xg7*gjHs2Pf?*3GwQCy}!`^E%4cn%}v=6=fa=cz4q?3$Tp zKAjSZuCL1+>h0!RA*177MB}0{=J%zi>whG^$D}aU*-%SQTz!a}%okYe^}6~~eH7gO zl8p}KCGV1(?IfRXf7I61ar)N&e?jPq|M}=YtbcZPMoId3Q7(BzE4oY={q=E+S+WtG zCU9C!WS>Fw&sU;{A4tVC&o{%5Cx177udE!=-t8499+Qxon3@4foE zy948M!b9ufSK@y#&mGN)nlO9qm#z748HLHX(B!yNS^pLZ@f1ZEp!|zjd@Fx?d*zC&?_o z!|rE=!NyXIh1p1jEQdA#jlkJ<0=3_z8Eb&-I4<+AJgJMx%YI~n2&SuaeV{u)8sPdA zUqcFxVe^M*wTq25Y&3c6MjWb*)e`(tGzK)cP%%*<7dNnDTJ?8P$fftOgntddd0FmX~P`#iB0$O_c(n{4+j; zK6igZ6ogPx!1tSJ$_qhgsJ)&vwO(t#d%NU)_^In`A?WwEp58L_e{-0;|7Dg@*idAx z5E5SRv_qFlMN2^bQ3JD?8Uhlp?6TysE%2>qFh6V220N##wxee_Yl@3n-)Y~qIkMbW zpQ9ArFyOFfr-j2LqcJ0anu4cf@Cu^sptB93w3tY0R6jO6@0APOW;1JiiPNdNo-0EN z$>4|kr{41^QPF_w5&A@ZRxRtz5Kx|rwwA>`qgku`Nyk8_p8v=2^tAM)y`MRV(EB61 zt|Mqpv*{)@*S_4$FWSY}#L;)fuhs-K`u}LU>bEHWuDMG$(p^e-Nk}S6cgND*-L-sC z6j-E7Qc}9RR=Sa{rCGXD`dy#vdVktKVCO!cIp@sGVQL(c^J(M>J@ulRP0y| zPj_8{cRiMjrQbybp9Zegh2uRHjJYVtewwKBS3aR{7BPnx`lJ62eSTUKI{e~)QlOiKi>)E#?jl0FZZnC(4m~~Y}ok74x^}AdPs2R#o z7q(Inu_9mkUk_CmmjT%2l)1ia?Wcf1k| z(nx=y%C&oF)5BIY&@su!7|eIh7E}1uXqgdA$^g^q05HAc_&2tUuN*G?$I-@M!b+7c zGygKB==Lmf)Eag2cQaFJLo$(BPzk^*+18pU*cgT&D_wl^ACt||klxQeXBkiwuyy6A zbLnL?@-`+?ni;V@3-sVv=-$*KV@__g5atIg1sK;pvvE^9^!QphVMW zSho^yZ4Iowb;&OL(&435PA`{wI4OLh2dF$@z)5W`7UkiyGDiYKU}QGwo!!WFv9PS` zk5j(-3Y(0w!dCUx09m7EmKHtjoxy>wH^+BlL0y1$Sn-v&u4ih@FSfB@^hGiu;q>p2 zNUMe3V6;6PGL3Ii(%CnkYc?qY;T<+&*Zp!%11iF`UHxWWaMSYhc*GO2@$ZSCq0Ph( zoDKia4le&X#eF~9%JSA2@hybzbBS$`k!Wl zGAB{!1&E4@D!9Ds5zZrqVPp9-3>7@W-8Nd;vO_7;iG@+@H1YBf`Z8htTfla_ej@bw zvZL}#7|C7E7o$+{b!_OPr7O{~_OpHH(r`nb7M9?xFtRS;=cl ztZ-fm*_XkWuqw_DC{?PNka`JS6^U=vPchfMbYbY8^jfefREm zDnXTl??Ud44T}Xnk-<$hCkq)GRN)zeeEl5&GuwYy-2Tw`Lj*s)1}53XmPnH{*%No; zYxI0`OrmjQEwsHa&V*WMx!@9}Vm#@6kL8_$rVPnXN9I!$HDhSntxlR58B}k*Tdllc z&^^)rIsz)v1JdrOKk;<}q*pC_4VWc)|NB{!0A&Q=d(tWJ=_nEJB=ezuM9O2RF`pHw zT9DZudCamzK|BJF@G0N7X?u%M-Miz$?ffCZ@lmD!Z zZ(MAbhBYz8?xWD1zp79j`^udpC%#l(kf{ZA|Bt~LqFC^@&VA^5HudYzOpbe${YeKTCzCGkK})8sbtx_%sfDVT6iu{!`}^^uJXRLc3M>ryMU4#qTT3fg z4egn3^qXt*fu-kw(zz?n$iXXpWTsAJ#$NFPollGR$g*_7R~io|zFmiA_;K@e05TIQ z`?E|@&!ft=6AwT+uDX!lnHjp{c1g&?@>*kYPRJ5&IJ0t^Syji)kJRn3^XDTCvk_3*dQbi{LG za=X^{7*G4ze>4GmKZWe47z3a0c4^X(s?F~o0xLft=j%{tg-yN>NAu5gaC8j*8Szqa z@W0p}u0}d%T@9Pr<(N7K9e;Z#Q*YrG$;2Q4mKnR1ZkoDW?ee$uurP)JyvPz|qcms_ zl(;p>!z9Gk;^Z#>)1&~FT_QpBcDDxvbsGtdKmB!;sG)uiG5zoBj?c>8y;!Z2nl%Qt zr7SG|$(XpVqU0(-(Ipgl`01clU(%$UvV)%-LT1Kwm$U_Pp&IJPcC?Au>JN;@MN>M> zOCL+ZinOW*qiyzjpWA(6ANB6lB%|cOR7N`R%Nd5D@%9EL`V6~aKyi9-ADA)uj~I3t zZ+*P^MKzDkkQCDSjhCgr7TD}iUgTj!YW&#a=>7-0%CBS{;-vS zH1fQz_c35ktcfYT@V52uB=s(kI8Vtm*(?oGC&lf)&rOqvpHLi|bDIpOHirf^fBRs> zSB-U;O~`Sgr~h)N!sT;Cg1?v)FLUIGe)3n6;3-@8+dE=CJemNb!&c~aDB++Q1~OpPlxBzUqpIa&4dYYNNU zL>xz2Z8Hm9CJGCcL>#c>i_jI)1}3L@(-nsX5^JB4NOXfd)*touANoTtfjjx%rs)95 zDymt^y4tBRYu7)&gvC3J>y2tj2!%+8Yz}^czv#2s@^ahd zQ#G*_dR=DP63)$UvrzZ!^aRYG(MJ{E=#6HJ1Hkqs^PLB1e2*^qtK+Ieop_@L|1;Nf z=dwYzqxGKAxCy6wgr++ImiCKtPF@~niZ8tNPunk5CzK=*Kh%C$5Yin#Bs)Im|7hrh zT{7zm=@@N^@0|BEN6xFy5RYNkBM20VXx(lbZ<{K%m$H49?8mp+Pm{KQH@vO*;%8vs z)x-4Z2i{h8OLpFXKkw1~v(FD;mG2x&W72CQ8;Fw^dOKLQv&FXK#joWFWr}z`?2m6i z65A#GTa%tenW}KBqJV%P5BxKLGLq_`u@-I9Jt@3IRyrk83~GI!r&`7pTX2J90bp?8 ztCgxOtyWEf?;U0$Nrsobz9HmAGCjBjFZJE^W{*&R3o;|W?>wmXP+gFN zd=ZgMG9n_9ez8GjZ#Q0wgV&m2iZI<8WKd~%?~XOtNlDX!%k&w@(0E7Qiay$$uYpba zQFHO7tuuko^-9qg0sX{*wp~LsT>Q4bR;YfmY>kSV^44T#=D2SdkW1utr<*%NXlzss z<=1^@-VYwI3FpTI#`FU=H7(sA|?$i%4{<*oyV`V@&>v#(lF01?ENq34%)q5-qc)o-^V&vfIkt}iU z(VgWRyKwm=n)jk4z2Vca#8J*e<9DI?OQ~%H35&H0S z8tSTN8r*;^rY~oe2jG_0wYLx1j4&sLCW00OCd38MW!;k{&Y;MiDzDCv<2KI_19Lmm z;NN?ZK5zK&Jd+-lb(gT$QKXe@M!moJ+u9b7L;$y*_I(-1jg$FE$aQGlLr*f2S9T9P zU79vB@S7^5_{G+@w1Uj##_N?^&67}mnH?g6xn46@@o)WBhR5s_lo0?bEud*&rGD(R zk0$a8WL$zJV;*c-Gtv}^b{|xp>7~gUasGtW6YaA=dt<&uMLl-q2Q>$|G>=oj53WV* z!VJRiK44*|sk5bhvsV%2%^x$TzyXZGQVP`iQL7i|con*UgPFF5TE#la+tz(xR_W=u z(gbRm5+R@qz)&kf8xBrAFn8f&^=M9xe6`-hMMAL!n1bO79Xgc3-j6FCEwu(vQNJujhfdG`1^|=1QxE@8BOtMS-@QH!3B?K7;@38B(;Kv+OZIi7um1R?u~aFmC=)6)ygSsux@CK^OSt8myl zvhom$B(z!J;>F{@DxsIXmYF2T4w#l^kKxtot{^uoJNw!*3Y?fp5pVp3<4#%AoZweZ z^VQ<~@nT@{vfg+s%s}tjXI4kgf0Zslr^b(?RW=m5hggN2s~dz>O?Xtg&`E8&z6Ax(QW)#}gYuEC*Tf@FXxB-5n^XQ|jIQvnB_DA!kMZ<5mhn$1 z8Qa~tfN$E}sOts0qv^@_wXja`CjeozoOo#b2umTq+uf0|QvIL8Bu`n0c7NmW@M%k> zbPY~$TET9XOkhr;FA9CkEiynQLQeU_Jl`(S!Q8_H`X5L!U-FZtMH)W^W~9MKjSnVo z21qF1{tlY-UDaWzhG(8O6pQN-u@zgDg9*~O$aTqiD}U!vI_*qZsg0w2^CXmkc$uBl zvkufKwY65T5+$pLxodH0Sa2b9$+L4-O?3n271sAdEh4g_F<=3!swGy4U(s&9R}y9FqbDFB2*%PWN4{)n* z`*=boU*uHHO{tjQ@n$9sF_6_tnO${b^LW+Kr>T-pBm?u))XdF#MF&@U=~=9VMS7?6yk3&`VjLAXCHYN zrMb&@Ok|O52}V~kR4xJ<4s!HRW+WUB7bf`tgVaTGf0%t3|7e(-W=pdZeQEI_9EIG! zSQ=$uI)wQi{z-!(){FVwSH`M*hY=d}9_n~8bODmu_A75gt#0cM@W+mPR+(_d)J*Sj z9en`-p0yZ<$kIoQ0py5yPb7<>7t6#;o_W~@1_5SGOp*CNrJ7xM55HN90!Gu#`HZiK zc%zQUp*X+1phpcK-^l5PSq9RAJ4Y1;F*y;fvnAD8zxlJQFg zY1#aLDqhP%F&e8pyK)EAqHJlY?{6VS|l#Cyxb{7>ljA5U1A z+&vmTw(%|JX)DL;q>{i%Wku+2e|ac+pE`zpzQtmKBz;vTrgANzGU-?~T%=AeeGd7RhR4TM$Y^wlmCvqh)qSE^v^u1KT`u+Mg5 zuW6AcZ$a7z5=zP6&zc!zx+c-cgUSB7R`l>w&D0}i>VmHm_?(A{uI-Lpf$Ij#0UyJS zDG`C4cLy;Do?=$x$~;ONrDw&-cSNU0E0HlQmSS3%~mL1MNdnJLX}|14l+} z!|8vzze$N-I*V<6w?)|WYQ;Kzs$(d%58I&9)k}~WMNKa9@WB#+93w^n1d4SbS-=V>;9nqnS=puP@D(N| zH~%7^Wq&yz@9-Z^gWBHrVsPg;sl+!Ub8C$W*jQ$aJc8wF@0^zeA0F0TPFxyzdk~Dn z)XYn#&r9XM$u3i`99+tG&{DK{gRSowciXgcpKwSgh(;NAM3Tnn*VGbSJ>K?U@+EpP zUnW4hEBQrt4Dcuzzw2>njy+I}JdCkXGY%DMP=Ii{b%daEkIt+l1 zzeA%7>qG#nKm4g%Qo|s%7Q`(YY@MK1No&Ta^c;`@(2-{YerJDqAHpH6e_;$pi#8n& zF371)7a;Y$_h#%vk?+nm7c2<)(MvAF05hcs|K%jVv^-cut@oS}Ldfy%_roi+v`-x^ zcxm}H`4jPB8cPGp^Jvw7LIFxd>!m{cx96F?g$n5M+l++Rz-5Al4y9W^E?u?!!Dh-& zga*ltKl|CcNVj z^T?_LHzQd<4o0S?r%uKyDr2G6vOqDZhs6ny;R9j-Gu?Uig~v}z4-Mi$z1yvl;(W0^ z5#l*eaHQJJ_DCt?TOxD5}1mK)=1HMI~TE{Cy2yH*`Mefl24l(DN zG&yoMZrOE5m|H#YunSvLtBaKPfEebOiL5+48yD-mJh4ya7kgr(7M+p~$pV9!=*%&m zNJuE7d&Le#Q*=NV(m!Uo05Xdzz-zGKIM8#j;Ty}Ttft*abhKwF{yiqS%3+xT?uwWVPA{5+K`!h7*md<;BDBxj_T{(B0Sa?((2jf5>iM0tn(mQ3I=z{ zd(?2bHTB|A;}j2D#>^z(0ANF}cGQ@a3!Zru9YbvlU@}T#Nq5)c5Td~4!!utk76*tx z9zIE@+~j^{D`#T&7p%1`40shts;7PNv84?ZjY`T`#d|%Sk!P6qlQaEB3%kBmkOy%k z(Pk3-ponG$k>KQOb%6d%Q$<3gDbc+s~ z^o@OvYdZ8cLdI;+hmWBp?MgEf9tfKSpzAGQU#`~C!EWkR7W}HSyr6iUys!ELbV8`M zJpbpS_W9>aXdt@%TlyZwa4FE~9>!f(#obsjuzhK(>l=~fsL^_Qxg zq3C_4?`pgMcy71+W{T4C1GcOvU!kd;!0ww{&-@sn08=eJ6xm4B+Fc3(8xhvR6Z_C* zEE$!YI5n+)w6B(#}l1q+hA}<0w52&M21l%C{fw?Mb#c_N4_$lt&*TIqnK)$WW{K_HCz5 zl(kbBWIE+tj40U9oY{Ow@FvnZVu681T04oMm0Y%lj7`;I;3z!mRsOlM&zQ%AM#MYt z8YyoUQ92@zSwgr(?==v(jYo)0t^pLdCh}*MCPa(I1tYK9NXMG-;6=+TTA%^Dx_ds9rRl;Nnw@4PIi-3FxN zV@M?*SorgCNCMCrDDD#^fMTUF;AXmENIge*eP8X&W-AKkfnFolKGh?cWV!gPR^=1| z2Qf(XJ?&a2T2@0aM@=F-2B7+=J7<8K>WO7G**Hg0;wjNFioAoeM{ot_elk8*hAP)2 zuUbmu)=y|!Euid_Ha8u0wc3RP8x2NwWgJZo5m=k&yS6q-+50)aT1&Tf=Sn4M2hIxp z>(X)G=v>S5|5||7)?JMAyDbbv?2^F${IHRpLCGW^!6b7!j%xLraTA6M7IIJ542OG) z%Q~jwe>D5xorGnx8-q1`a5{B;oSGlic=8vGw3^2p(?9FzJ@{1wlZ?W{bFDt{vzcFf zW{B7}vUt7IDKb%nIAcfi)FV^TDtUU;wz(Q~Ch>eX5&A9;`SWYx!U)E7e6zP6+k-Gn zRM{R5^>C6oVsKP6mo%1tr4X>0q#-JECQ(gNv?;@?7f>B|+R>yprjaA=>$7B?YP@5H zyOr}VpUQJW!g&0h+q$&W1UfLE9Nm1l$DgNp{Xdfkxi7(NoFqgyxR!;M-$nZ^S!G+K zoZ-|oG&Hi@%$2RZxB#^ZU56Zp!-G7nEAweFgdp^^eRd>yd$=NA*l~ABe|G{(D+&(kV8_p0$0# z3hh=L=I#pQ$LCCCa&!2{4|b}q2X1aMnS!)emeQX}c%ILnQ9sxH-m^b{bwdjN3?Y5> z-JQtDs(Bjj{S(f6B${CGif%Q!Ah$q(Ae>`}<9uCm+2Yk!f?m5D{#hVv>`s77T5^SJ z*^PkeRkD5}+LYcZ8|PEr__tZz)tcd2ZBjA=fBU4i($iPRJM9;Iuk1eIsV+zQnqrei zVLl;YI1+%@TI49CI=>j=oZm0oh|U5Z++UCkTOx?%s>iRe?>ZDIS6+sZ#Gb}&ogZb9 zkC%9kI`Y&MA8-Hll#-wSLHeuPpH1ef9~h$`1e9N{8H`et7kOeA=6&eiiZs0&MW@zH z1aU|e=Svum47lUSXIh)5jP;w4Ncbvy9y&VJjDM`l^ho zJs@pThp6K(Cn6SG4dtX|lTXR_b|J2YYLWXv7XB6XR4;H0#%ol>mN{*ZV|v5d^g)z_ z&kVrGJgDpilu5G2^lY2;fDD7q zM1JP-p_VO0;mPZZth#LYExr@KXyhQP{a0vB1_l!#PXiNwf@Unm4|B{J5DqXjWCfQd za8wtx3nP@<6rP@RY^qjBU((g~;*Rc8E7+C`I!A$I!LMn-xA0lQFa9_$Xh!m525>f{ z?|wNW3I=BQ)nmc=w<1n^%g6TUW9FDCnINk9jp1+Bs0(CNw1B%AZ1DONO0AoxkS=x{ zz<$)fANSW)yS}pp6~&f%BNjGJ?$`H)uDy#YR{>`j-=+B>+@pnza3tT}>*dJsLe)yttBy2gB5B1*TC=GM_{a>&>owuBMX-{hd%(fS-Y3E^Q!;n|V z;k+!QyGt6U-O0=u*82f{qC_fiQIM?C`?-f_(R-rZMl8mmUP-cP;J|;s*EZ%~U^T)p zhUn4WKA!i@+o0HRJ2hH9-{U(f6&>9Z;WbtWRo?FKhFRqG4`d@9w#+&!GSnA3b?4e` zjzqK{tc=&kpT0(u@&BkC(xX6_h!xf2>ua02X#O9RU7U$14Zts|IALt}(tKj-^Ve6> z0h#J>&c<)k5s?wZLD2l-s-~Y;H`1?6ZEkej*;4juHEf^r{^e)|v%XNzpLQ>}xK*dH zRI{WY0f5Q)Iql0UG&OK>uSqZR0(mu1OvJ=z;3kSFw#JOP*;fK5?!I<(Nj$DS zbgcbJI_fPnS8x@r2N}z<^#WCi-OMJJ>QWq6CR)-jKCiHZ%MN+Ch&Jm371FXKPXtFz z)0Ac3U|nWA3p8*-95*W|-;3@-ryQ&afPw(jL15l{Oy^SNt;v2jB(#o)P^F?bM7LI_ zP-P$r;r>D_Ajz?h&}RZY?dTJXa_c5X2#5O-N38A4d)!~Bn{07VgBF|_7ToJs77!8!o0I)96$q`J`l7-`&6r=&fL3a8h z=_2Y8mQ&^oUJwzxH1OOCbYMvz=T>1_W2FIlhSxdXnp>ES;w6=3c^y12}ONufJemPcy+#XCcZO80e&8P?db zTqsz7mUw=Z-+kiDjbataA9wDNmEOcn!k81kec3$1c=KuBMzFTAN3jGs-Kn&t*b_WC zyn2#Z2H{-)!lW&UWrt)#Q<5dUB@6(! z?d86KD!26(t$FNOL1QEiS2(n=iN5_=Wh8j5=2V$Bm*j1KtIcj3yj?3M>|@ji2Fk!9 z_*@!N_AU&qV~Mcs>1IvJfAV4EV=1%U63}Cv0VW+Hm*f%wteCM!IiPo1E+5+l_s^yR zxHb}eD2eDLAuirP$<>2jH%$5fK{>kH;T1j2GRci`n^&hlQlKUNlY4rg$e8P5Rf6gC zqdF^&F6n;L9IEi8+RcPINq*9}jLy~I@|v{{Th$7tcTvlI%)7<~YGBTAWspx|TI2>Z zf2432`Cf=>c4-xau=Y8@_$6fI?=@#tgWF+zp#wRF63!mKNSY_8$8ry~x`;zUH=EDqYk5C()uQfty>-+hY% z@ZKX=g}RE?R)bcbhl-casst*Fuwrg*dgG&}=?}A!F`2vn%IknlaAAxAOxl%lR%M)!N*PErlT7;gG2J z9mn6MsK+|^*T+w9IvC3t)SghZHRrxOW+JcKXOQdRWP0)%FEll8B1!0PSUq|>CrD=r zoEmUZ5XroW_qzMdWU*okZ8Pk)lSJD;+ zw2ZE?`#M^8cRq{3s>TR7?bEJ)AgnkBh7h>IN%sR8yIa82iGnE4EfdEnF<)|I&Rew> zGD}Jd4&|25UTQp_xhcDFMBj=rUNAOIlCv@TPdE$O*mB8^sss#wdp zr2mWY{O4H_8Z%SYf8QyP(C!0~NV9i;;mllVw`?tVaGigC@5Pl14_HS(+f$0mEX9#U z)lch7Ztyq>;@C*QDJ)^a>eX17H9lIQG0tFA?%2$>5>+6#oai<|$^}~_U=+T98$u%X zm5g<2zP9Zyo5=3mpR{2&Hc^fimov4tnuIk6Uk}PNL*s-1wjjrx_CUv{lANh-;5=JZ zp&H4cnwn1a56W~&;b&M{pBhpm_`o<{c^H-@QTIiaQ%875Qj+X}t0d`ercEis65wmW z?+DqhNyZ}HqSy-D;tU}(lPpQu``vdhDkC4NO}5e3Kv_&xm7&{h{WIlntJi#xXS#`g zMQ-$RW%Fo?lS2)tH82FH;0=+i`mJJD>A7bE-+ZLE4SC#x;$Gy#&XbT$mt2EYR?bmp zu&G2>M5UA9{L<))d(0#^X37od0XlR(y5x`*pC3?ZFp*@)%DvT?}%CsWS^qf0W^d5ROk|J56|fAuDFiZ1)9T5-K75I>pj@#!`toF!%0 zDCBB+=tLRvJ6%BW;7eTUk47>=6V%vg zv0aKidLu5-{GynbC}Mbv{3{Q5tB#`q+00Y4Yop( zH_KiTb}xbA^pE>*f1T{sMB0Rv(wt0K&vcfm0i<}dJCTdG@wJr@BMh^ct)+c&%hFH! z&7CL^iOYzmL_+Zr|I%aWH$r#V5vrN`Yy+wDj%$Iw`;>_-?Izix9=Ef;mWGy$a>sMb z!M3mL8a`4{oh~>D4#LEeqpMHbEt8`7nh4u|)Jj;r6BE#>3^n`tA3WQii3keQX98-z z4dJestw9#KmU>(9*7Y_elFHS(OIT?5V5wiEr|w)p_x^`1FjpKY344<-=`K_=W>SNY z^OCUVa1r#=Q(r8bB`nc@2bw)Bi+jayvHgUVmchY?P>n}Sq?!gj=)e`oj@Y_hN?rX# z8Vfek!%@&M#d`_Kp?fl%>l-(*AWWFw>F*1fu9waWXieWmSMW$dZvo9?d2<9FY#gvS@*dZ#$33?tB`)i>nk`J&g=&+zVGSJM2Ec$5^4I6VEc=-AuF znKW5Pd?n_7ZHu3sHu)JSR-hVRBb_<63s`X2LT8E%II`g&8<4YW=9=(%;3N1cqCS%Dd}rfIOjC_j6@A^ zSCF2;@3Vo%WOY2rD{&^B0iWD^RY=QHol2n=ip?U$RZLh{%%Zq%z}$Y4)bryT4K58# z2)J$#qxvfN^rGw(opjEj_D!&`%gratcogaE9H%WDykN|<$hK<`YL$EXbxU~@xiqKX zyyo%TErCh-G1?ON;H% zI;GRjv(9o46@jM#_O(_{2OYGqEve8)Pk7VX_0UB_>JeAhWyeJ5H=nGH#{VHE^B-b* z*q$~P@yk$9;;SlaBJ+~jD;3TATZsPi8+E4zM znuS-)olI~X0IXmywlmmE1yX!>-u91pkc4eML-_t`!iWzh?QN<-3 zx_NVv%+s7Fem*=fD+EwWqgM<(5J$qBE2^cN%WfEQPTnZCjYHyR3@L&0JETKWGG%d^ z$e~t5a6(KJ014#N^t2Ydv1deQaJA6F$b;S0g0?o~Fgp07hynMDpc@4;hlOp6{ zii*};n!r+2uZEM9HvA6b4ccTj8tcVr?V4+$&ET_O=^y<-{y_ULv+N%u*k{n%OX2F#?31Yw?;Dw}GW-aFc|8hdt`PC|L z8`yAo`{K<*%^#1sWPUWNHQy|GN?@7bXLibPnj$X76a?Cp&>nCl4s>!(cib;~{#)r= zaSc+)9lh=Bw_8o0)3->iP{>B!$?~%}{=&5I zB!gLR=ZC+4w$F1y7rbVYuWyKDL&0FZPkKC}fs%uf7IU&bB^PYbq@L9Gg`CI{34gP)QoF+QKx0@K*Ps* zqqd$iv`q9gly8=pz=MwE>)^(l0SO9{&2EMMG^w|;VeiwO)uM)A+O~-`|6y0%*t7T} z56I~yx!I%P$ZaajV)PN-$O5u?`P-3t?yZh!c8n8P?Gx{;+<4QrJWL30j!ess{9Wq- zc6_t_4gz&im^KS25kp!Q^r!fj%YHefGm*P%EH};L#VN+`4&Sd`XPgs7bCMGM($U;= zKag8pq0lT>-1vX`Yxa~4AN~3d};U0$0GwlKu3fv=0Nrd(eg%+jP zb*(nBt5r=j2Bk;tILzLUsXrKYzCYX~uLaDr413ZxH9eN4iu(q=e04&mbP@kYR#HI- zpgbi+2l=hP`Gf?_zoj!~rMq7wOYIPA)Mbk7TT|kj3numCF^Y^Fr)8^4LK;S~F47BO zb0r4Ot+9H8{0s)z0F_&sa{w2u0GhY&vHDKW&M$VmF3I4Zq~3ui<%Y#6md*>4q26@u zEug1ts^R(2ThHMZwIDBRjdG^p(1d;f3yxTl&#*{emIiv-9zH$#;QBaaoEs6nfJc{_ zkOo4gEiZ}-$+>I}bg5)IpdMueTW|@mn-4cms3s>9*kN(>&FVrN9mE}|;!4$|T>zvu zH=e_ukcD^an6D}*!sTjw-};;ndUTv<k3#N(B=_k+q}3BaZBS1*ah1o=ii4HSNZ<>zs^9fIYzX9+bx-E};?ZtqO71HEtA zc$X8VHp-UYZCb_@5L9^51k(?^1Byr&HJeM5?afyD{RGHte>Aa56#|wmdd9dygT}1d zy7&(6rMRVPYfUI-0R|J*T_X{YF%`_@zS$U$d{U%KdU={{(_s8$s;&aWP zA3pq8Fje?6nn>LM`4bPvTCk+IXVOnO6cdQRaCXn$wd@i=!$FZl%t}W5A*~Ps2qrlk zR3)Kr-XBSI+FI4VqgKUk>VLj^aoc&$aX@*x)!0?vHhotA9w{7!77G*cRQ!xPaGT)4 z#sq~<{JwbO>Sx+=I{4x4Oe)0PAS0#5qr|X`hzdl#NV{~!56f^3nbEz}K5 zErJx5GAR=D)B2;ut>>)OSU|avwL|}!L}*R?_R?q#!+by`EwAyYD38`}|Du7J!0UK} zww~tkoy$Ye#;35q2#JFHLsYXPQYFyD868Y$DU61p*o^qDaZEs<7RainQ{ga|LQs7o zXSMP8G}^^SRgLE!oVKcts7yeemDQ{d-*-G5vkImFuR_WNnD9EMhjON!G(PWcfb@qV z5Pj0m3CSM;`6tJsh_eY5mF;3pkh-RReT;7&4;6@Jc+^EOoEB^ubQOQAu%s=3PG`*K z!5!VBjKpkqlK7B>`GYnU6Dd!8{x90czGm>JxvC`fbI?h5#ps{U@wS4$4=RRv{_ue_ z!m50cZ4!*C*M^2gD7r>&ooG^@BbC8ok+nz#F*$rl-?Z5Gw5^Q^)kZ{K(JSf}ACz@Q zKdnd#=+LgU9J#3eXI*aibli_otO6YD&&VWdb3U5sczc?di8V5O7-nuc!Rl@%9YpBX zaabfaBK0y|Hf$Zcr1iYm6zZ+A@Rs@?YsobE$6EH^X3MzJenzS6+LgYW6n@lc*&U3$ z7!SSb_IU9a`H_J_lt_GCH_J5q-u>^@&y>b4p7U35Tn@@Y?sNh+cKxqOZ*n=C@vTMS zZ&<_AvK~&w)g>QuR`pE&=F14Jpz|g5loZFKNCuA4z=L0oE#b9fA=WKt3S`>hvEeme zqwN)&&7i%TG$tlon7f);UhP6B;&?6cZjZp1Z&XCRWfnMW+20w-XH5jO#katuD zt??v3IEw7=x$8%6K7+X5r6yk=$R1E0e^aK6GcNbmx3+2!UP7lJ0e3=-hsWY5;uZxO zpp?APTsYH?Yj5Ys1;OKMI5^L$wY0&n@dGO#5@fy~-sEKRe)S!GW`b)oOQ%5C<5ukE zZ_fuaswRRH%?{WCnbW@ur@C#VL}6Zc^4WqFhKfe{(!GV}3E`Vqy{Ph3Qk9MOv#IEp zCcr(5kMesMXZ!wlkJ`b`HC-cb_p{x<6BMeUBva-$po~2C4cobn^N+4%=)GTh$M?OS ze50IY6}?}C|80tNd#9wg+Q|G_WyT4+)a?Krmma9T>2dWoc*VYc8rPVDkyoDnA2@i) z#`Q5lzPDi)mZ5+3;FU51BV7-_yR^8aLU;cb`jrx2N6K6fo)D4tJ;l(ob(u60qnxJ&P4IOX(o)>8&?_7f9@B3C6PWL-|rayhyh@N~VDg@Q~Tx7IYrLyy#LuOL~Owr&Hi zUFRnkWG`?T_(f`n%H0nRp3(#irF5GI<$8jQ^2`K4A*sE$r34Id1M(tq zBZco<9^wcB7`4ZF_V-uSl(F7H{ zJ)P1uTy2hiZZ7s~6H*_!Zyta8?_^QPsP2>!Jy&bZQrv5z6GhQfDXEOJD88HqKt%6s zdJ^X35U&U(j#$0RL98;~n?leiY%iyRmO+LX%VV#Ac119(Kb+>tPJduOT}5a3-{&N` z-|cx=M-Q=8){uYVKU4i-*d2@hfjX9x&CeY&P5d8}%bE zq%_%$f`dY_nX_V+e3G$KefK-kbn$dCV^n?~4z-a<8K#H>Zf9Y`FsVrUXM?O$@m9^y zTk`)Tp8sD9fYkrGoQFGg?SU**`+p07U1Ps--iUCNaS=?I_ed~&;(6;~r0M0!l{2=* z>hxENU75hpCjzmL@kLg*>2_~e6>GOBb{iTTooBZN-&B2N?8mHze$;s8bBBBac_tz< zY2D93CZ<)p1|!n=))dfamXFbiuwQ6Jv^dS^ymD-z2iXecnUZ!HM^$r@sUwD@R@?u* ztK4cvJYg_Cr+pSTWI;5yrlYE861Q*hxNl@l?q8AqEpRHOvK}Qaq9)Kwal&50ZEn{T;!_T)p1@%*V4UJIF+2FpMdPh$D2%x0E0JZUCVm-XyaLe37VmcW^WkJx1mpI;d` z()~H^40b`4CVlg+i>-h8uVo<5Av^+U~zoaI4HVXSnR+|kNw}|{-_nSvAoxIYEM(ZMG8O&(6zk3#U;ie&uciB02bG5q~ zw)k&^<<}vJ&?ny`9@i(SHRFHv2GnR=-Bu~~3TY1;S@!)7((*hiZFpzltVf^!vLhQw zl$72FCo)t~3YRBU3bc=j@!Fbn<;2pnbmq}MV`_T06JTb?A5-5AYRLd~X;pXo3KDX+ zlOgls_P4#)37gyxzoz&gMhC@6A_xklFbyu~{BF5a_!;*UTfveVK!uh}kWX7OQ0RH#a46g9XmGQA2J+}G` z3*w|icSoj{5;5;+_I`lb-cm3&35vT0A_1yplMZNO8Fa}2m-*pnuWwsxNpHtwzjJU0 z?6}#ph4AOklMlTaX~5gr@>SU+Fb;I{uMoxIGnKS^U zCJAg8#YhC9XG-HQYb6)5iR zUW$8yw|KBpAQT8vAi<$%il031xz4xq1M(sJT5In)$GGR1(T^aVGXfbI{$m*&?B?ed z@y#b)K}K<$D7}a{d!v@wc`-8uEPLcXhaE9Eu(_MEcK6fRn<-KTS)Kc#qVQVT2ZAJ? zhMW3^I)T9f;s08qUH1Quj^(D*IqId#`cfB3I&;J(K8z7RF|#J(PsNjXB_HdPM7`I~ zir+L%j7)MNS-9R)RW$PP?NV_GE@Gq=_9ELL_`!QAuN!y&tFlp@PuIUOcS_#0{`#;Z zE9(K#k+l-Ssd4ym2kyOxF&f+m7$9hG(5zQaS@#ZexVls@+~mnRFw946=pLxl!|Mnp zMQf`mG=8G39dl@(c;_Ik>P%sUuVdZWsOlPHY5ekypT`6cV)L2nI%7<_$#g-CQCcG{ zH!k&uPA4}a?3UqY3@w((6eIA(O$?6AQZzpfmHk4-9H(bfA(0R;GtVuibM5=kys7$} z{HDBOau}ZaH%6Pm15MR`PgAQcnBtp*O!>9ae=vJ@h=Zz;{cNX`dK;M^g{hm+}MJ@7gkinjXS0NA)tE z{bb6ry5YeFv$E^llF;}~XF#9OXa!iiGiAz6Y?nXXRqBynG^1sXlv4bLKRcF8{0XZ} zN+=9me>pxi^*QV1TXRlp$8O=$JkggUKdV0xU7GZXM6}J{iZYLwV@LLcG`Htf6;gs@!#L>O_>Pss(5pDSf=i3AN$0Ey z=rEzWmnCKi3wHfh(e$my-34th?Mrh(?#20z6(h?#cv5CV*MTn5z$(JQV);nw|5ms1 z|Eq3AGhb^nmE*|!FWjG!uKoM&dlOlPOncaJaB#8f>`b=kb?QB!F^NojnY=MGG8}Z} zJF+QFgRV~hT>L)h<&A9dd`9{#;ETs=zzVB?*E+mdJz`QINDA8sLLy1#z5a<~|G$aSLN z1_16IIZt@alesXCaXENy>K+3%0Ba6i9q~D{Y%Ql!?IQ6kIgi!=nIS(>@`|GEQe*9{ zc76oZ$HaD(x6`ntU|i24`9|YytVZcmmii{>V-@XrP>GdlDbB2vf=S+_iv!5@aIe5@ zFEojo1mI#Z_m|YCt1Pz&VU7JJQvU2M^Ual)1`X}?8y%6+HGg*~2NBUugLTjg0egqA ziWejUAGd6LKoa=itJTNyw3%u7H82mKI>%8Cb?dvHB4}6lbsaPJbkM;S(#i5K#`yh1 zgDHa7&r|yWO4SjH70vch#k!#G#>qI4TUj481}(+&3WcEzdTZ z!?yqa3L_hk$`8&}Ss$DkI=!~KFFW;rSjTl(fXWOjF&;(2iwA{F;yN`-dOROq8FXSt z*>?|T4vA5al_}a;{TRHmSmf|LlcV1*gp2m?Ng6zu`#{;7nKZOJe~423pzCw>%uQOb z)#bB(KoHs5p5Gx(sBn@^)Jhs>bXdKhGVX+p;@CbxSNl67+ZYGPy2$8-gOpJ1RE@QB z`lJ!_kz})8TDwok&@UKAA)97S(ENeOb}~keC@5oA z3hY%9LxNz0Lv8dwsWW|M5*Kp?*RwwvZo4zKOw{We4s~M>f@PGwgjAwzMNSiKSX8r> z$JcxHzKg79q0>&xOsyI=$-SNBp(FJvC1O79V&rovNS;|tnyQMILbG1s`$P~tUQYOL z^0WS;z#O-E3S7_G`={zPpT=*qb+xKlH0secO%fyZYis6zMIRncQC;KOy;lRs#Vm83 z`vKm#_-FF{b8Mgm$Pc%-6c4sz=Hd%A% zv;SUcKggc&N)1?Ar_;+tO+zN=7Eg?Z&JEEoykTH3T2I_EorsnF0$S8-?)g*%4K&MH zJcB_{kNRf_Fq+?%BNo6IIQE^g_k20$I4? z#6p^k8a|LN#%#g$*|eY=lT-~wP$s{SN5nB^I~{Vc#>9vyfw`UvH}%VF=dcu2M=vs0 z!IIr?6ZjXCU#dLd(hQI%v{T9ZrBQja_l7$#AXdiz#FhNnZ zOB^>#3#hw2$*#O3X8V0ZG`)d`u=iNS9_^Q)g+|L;b`=4g9J@0MZid~CxcW{nlQO7f zFMgcn3Et<5dMYqT%c`tvBx7Df)1P#iu7lJFLQgR#s0wp}PIGQZvjXqu;>M97f$`I2 zKlKbD*u#th?y8z!n#zVw1~s*5v0#jE2jU7!U-~$BT+;FiRlFij%JM{9g(?B{)SlB4 zKO9cqzr0F`xax5TPWQH>>3xail!_xRE)F}s-&EjhxE(s?aVqNZ$d7^3#r$FbdHW2d z;+_L71DT50s(|*ja+U zc(3bzBq+@8TP9w0$ZAYRvxDom%ul;+F-vE%M)ZySW8XrYL3N?1em%{^Es(7&sX(p4 zC9Mj6Wjr@puRq8yOx?~s=}_T#Q)`S;oxnWAletT}{_RpE@3z;JX+Bi>o*2u#a`SRe zCSDTi%lVk7FYv}3dbZ>1LCulYgjuQNRJY=cStG9JOFB^G-g%UTz`9Pnkf0hlW_h(5nlh%pR|W_+MpmTD`MGTUdp0 zczk|sg-?(#{9g@3D?0aDSwek1El^%3d~cFjKw>T8Yv{F@prF&FL=8U&c%S|=9}LSH zMlq3E%Mu)S=OSQ}ooHEI3f6hVXxWbd6;vTU{;N!&N&QHD4ykIC|SWNstbdz|& zIKJwhzHc$dkXan9f)_Z^Wo%L;iX*w^zsrjqDQVV%!^)7gPe(aHslq?gVn)G-#;TRz zB#sSCmdcQvkB@^|o5#yw6ErX@MayTx|4FUU4Y=n~+WHI)Tvp668ROVfkKbcQ!`xOc zQ%)zfpH-^%7IZgQw*}`$CYI^# zpUOKrK8tyhvv#TtO0~8)y#3}_bx(tzt6gN@?X3DNA zuxTC(Ij(i6KW8A`pdj@2t{zc)OFk`Er@v-4e)RIYQz#Z2wlwx%zR5zD_epfyU$r)* z&csOOfVa+ORDrRw>oX$vh50t`PAdv+{Ca}k^gjdBTW>b!OJ0Iyib;YV5g`zE^OA); zHT(P~sjN9Y>?YW!!Duy)&1Qn`{BQF1>chi#9m2VouD$tGgCG{1HAm5ge<@~0DMN6} z^+4`Ok!`>%Uf)>t4fIWOm>d(>o^}P#{;QUg=Xt?@c7>YQnM%9Lu6<4_qDt_@S|vog z{%xmeA;{7XJq0WeVK(oKBlpo;su28B8quRJknA`?!+3y}^K+Zp$=l{g^ZD(>$8PuN zCyK$tgGq{hlg*MlY|vkJQ=18;0IF=DRnU+zl=Nvw=^)l4hvTW076apDcIB~?LPU$% zv<$kIOkFnhM0xY7q5%_`ihS(m<~5{n%cZv*TNmeYbtpGt4haV1Z~d2|fycZGcPP>f zFVNmw$5`S^bEFTZKEA zm==AD$2Nl4tDj?48T-U-=uv^yO3qL5-}U_EW~X{Y$W6vAKTNcsp8Ndu*yEO0C#jH6 zAM%KMoa!x5syTO-&pH z>5ty}7V=K5SdKfWn0}ONb&QmF?97<~dz#j)+Fva0)Ce35?h0<1Re~b9qvUCj5Dcg)MmmzmCS3N8kVVX_5Ws6ui)Ie~Xdw`j7+2>kyL6yzt!&q^RrT0QRS&(dvxs z85`uhl5dqUP`^TVs0o^z41o}bDH-T-+gx;CWCEK5x66X&2f4R3Tq`ghq%3r|=TFf? z$Ep9?UH<9Tw(PwIb7{$g(^s7Pvxa+BsqK^Ptm7c$7=b$18kI$i71w|)m3&)7i6ivM z8e{(xc;e}PqZapyIY$WDmW;K|0jr^2Y5}%-&68wckPk?sn;VP=IiH{__B;Di5$q9f z42Zmu=9*W`@MlKBx37N$%{$Q)0FE*U$)G5uoMZGCwkDso7Sw?lZ<#MMe*oFPk}b|Z z+O~v1KnR6*ZG>XEI3N{ZNW*`JV*HTf_i5(6M-i^9&xc_w=S~dWS?9)WqAge^1gp+k zjKKegWjq#oz|`+h2kNw|uk}nP{(~eh~7=t5sublo(*dXB>t$qJRsw!7nm8>EZn-r8L)6QY-RFHMC|yRY{#Ub$+eRf zpfuZBDVm}FEOFhn-U?-?`QE>kmcrHZgD$^;oogazWTrgeSAYE==!cr=%6#Tyn($1i zj=(4Q0%M+{ylzJ{H}*`Z)3CLZdBQi?g9GnGe*|So8LbT#!bOy2P{T^uxr**Cb?{Nm zUR%lL6AZovw2YbFFiTa-7s|gFtxjFxHYM>qT{z}2}5^)kN`MP7c zWceeGmim7tbt?nBL_dO(AoMmd47q*3!;0+eB28Dgs?JI$YWI>FbJYY6cmlF~ILqGY zzH2I?5{r$Z{`&q_poxmEBMfw z|M1&yT%zyP?SW&3W{Q^0dr5VD?d~>$-|B|ZD3iDMXl%3BzzBgI*M|7=Nhnd?M5DRd z^tCzJ0G)2(Q2p4iMNS)^p5JX@M3Y0w8(toMUPF*hW_CvXG`bX3`KRp!qHL>^OwVRr z6e*?&wuP(<+8io{<-}st)v>U@07j^fB%w!@$6Pxb=)nRke-h%o`_FAKdG>+Y02?Tn zRPj+-RLbUki1Ry39)hCAP+L;k$yT5cmX>|pikO7OOW$#p)l1H(W~&64*8`zcG->qL&4+A())?;6|Re@fGiq1!3cB(+b2-iG;??> z0(91cH0b+R;I#gg*g}4m{ci~xVeI+e6pC5I-~I72!4-|%5Ysi| zXCBaYJ5LMzFV2*T17GL7DGI)U87kT4IC-chZ`a6*58BPz`5&H08JQ0i)uZ zN}K)GIC4^Kr_jbvzm=Id0jbjmbxV8Kb4?my>Yl~dv@G_w^`P}Pnz9bEK$S4x!T>Kk zBZMmZlh_jSnt#=Iah$Y|f00f&Cah%a22m|MDzEk;dQU6pSIz!8mu`gDjuvR{lVt-D zRYr6*I1mcQfy&R%adhZs`0wh$;L*tAT{DUbFXEIhSW+339v z-&*Q|i3KhHZp%JcJ+GF5c|BYiAm2_yAh$50zEh1grs#W83Q7L|6qi|F<7llrO*Zd& z#v548+V#xynxmeEo5-g5T-*8PHLX2Zg`!M_$NmA^2|jKyw>rO_4I+n)#D+P^R%xcV zyGfGMa?%fSsYj;$Ehcch_w@T(m=OqB(`WaE{w|Mr%X`X&HBx&mGy-(|a8bAi`a95f z-7F$1WAXC2qb}$PVJ+*JZ6Rp2z0=cyq(ah6ee8$pA$tmmArBtQf>~86i;W=nrs5kl z$d{tBEb;ou}Muz7p);-WH_RqCs~3VTN&G{@z1# zMko2Onos0sJ#uf&r4`fI#1-E&Pv@AHW{YpzkVO{ckqQ`OsR9^Pu%6SbLy9ijxX?+d z>)tI}B5{lkLHo3l&4Y!u8>1q%!hd7uWdp-2n~P%p%nLTPb}*RpX|Jnw`L{Q}AJ)vH z_*JY~<;yRo1^#)YTUtFzDrA4#G6Mg%&N`0#{YCdNgajf&qG;cDY}qo+AR~2F6H>$z zF2ctYXzY`c6JbwXnR{?|7KSjm32p({6>49ivXAYAMziS}2Kn7O?nPmr4$qIEo1<#D z7);ZOQag^jr#voN4l`4*m^RTtbHDn#>=@84H6$$EX5Y5ILwFpinqY{R+Nw^$t8Cjk z=@x}MOo=p?w*WQ-t`0i?k%Q%ZsR@XGf?7<#&x9SKj|CgTmX%?F=HWh|LyV4_*Au=o z$`Wabajh9q1DKw*#&gXm{7;gC>0si~O#<`R6C2Ap5u#?uh%JMX_ zDbM$-%q?L&=bMV3#gmRhQ;oE3Z*`CQFD-WMV{%}rB3@F;1S;4XAx=oZX6g_C1j?EL0o3(a>G7{@uIsr46NmY0 zPivs8`k9<(qte%G{_Ufc?RDab?m>T#RaMXTX?NvA{3d!3x zHnbFBL!YGi-@4`RD>?W_a%~d3FK%BLFdxgenGHAtA{3ZV zeeWfnZ2c{%p&iGZHsbJ?wE;Qtrl)jfqJG7f4zSo zsQ}y`a@_y@^xMOB4>E_kz%2Z*VohhQWr{KJKcr5J`M+xAoOZl~lT;6jxhu@-iZkML z1}mNE-y}1i`ab_l+zO9WWIH!mx`5z3+iEefxT7sawEi@`Ll5!tE1UI7Ug~lsCLT54`U-zwhSE+KyN-k{vC4Tt!Op?=-bv`F`Wt_b|kZYx;V) zDm|(1ChD|D;l{%Oy;?AD{kloJKxJRc97At-)pVp8Usg z6vlCSLYz^3nl9&|0HDhaInlsZ= z?o(0a@N4YG3--$Vkvn~6u((KkXxro+0^N>ztz%)wQrKa7tM!?q!M}Ud$*}+e)wcD^B=eo*tQg<8Zk(YL%!Z##D{`wD&v3S|b z2#B`W^Fme=I9r+LFms%fXKD!=OUJX``J-te>Sa+IoZ*?aqI8=^q|y=0I7FafRZjSM zGAFnoP;0Lx)eEC>6Xs*1<8x_rH>oOb=GxxOLoB{dNBA23_o| zq(vz#38_UuGmLXkJz(6F0myPn+DKz{vV#e2$z=zazLsFN{k{0rr`>2JAmXY?AvEGD zic_Kec6~vi#T<&>^0_`;+KqyfP+&9<9?YqEpH1yliz6R!bB8Rt9~*%gbgWq&JtXuQ z)h|CR)D2J>tfycN{K(IZYL+Y%S}>j{X*$>dGsbN|_3S3mI$`mU$u!q@yb z%Aka;I+AnjwFqzc!OB8bQs3ENr?QdJrMb_9F>}7nfTaiNc@e;JE_lOA5A>VMt*Q@} zt9el0hHiF~R!r+b4^`ureu3%gg+VW`b|N0$T~!`mee+$+pf+Lwqyq?!YRX41EId{R zSve9#>o3OlSq)v$Y%yw2Ngd-;-8Fq{Iy~D_N)uCl9N`e}Sf!>TgNaF!<2*Dk4TTH3 zX=}r3*^S;bC1(}!<~ge?zWGxR2$&wLcoiD`6894}WMv!mG0tCWk#$0~zGz7aZWF1m zZXg5h4)Q%O!IIaOt!ZY!49v`h@l|{U5H#r_T%PQ)H zK(kUN+OBQZh*?BEXl_D>GsKxVFV)VlcU%?K7{?QqDglU3FTSXTA?j86bvIo!(yhrK z)P@z=a@@7xv#u#x2`iZ8HrbQBQ_Gg3KT&`|p)X6`BE{zX8;Zhy=0y&r?C7mWfNu%g zxXUOlTg%9LfIE6Fac?-ZwFw4S+1qsOgJLe%qQ3uP0na=@QAvI~qwH|?HEqZljdPn} z;-`}K&^ z3IgV`O<&XKMv*fCrDTnma6OJ!Dxlyq9dB*ltH0Yvybt3Mpa{@vngGuOirvb>LFoU3 zl-`ecptB+_+moKe#NT81^N!xFYhPX}13^c^6x+Ym)Ue5fSICMZTn(UaVV2iM*o%)F z8QG;T#>caoM>q1Y(CH)u+?AE$JfezMZUTMd4iA&)bnUybk@2NdQxHO*SzjRH$U$uO zD6=jth~CAU~$D8hz?d;CTig!wU{Yz&B z9YI@f7Tes+aFI2`_WpGr&P@O46~W=-r+cP%ByYw*t)~6Gz)QRx-W?|3{37{R{@Gav z?7u_LC#TXwdxhl;yve54L?kRw+m5hiWi8E&#l_ubyYP0td}D!qv+eQxUu>Aagl=CH zk+Hk2gl!DJBd3Je?Ym1kEt~gTHfsD7oke!HU+YGUwGE(eTXSj&rL(gss2Hkq;=%ha7uDZ{RoMhY|<_flv%I z*nSq6@%e@%%Pv|weYJLg!^EalW=f)&>IpajE;a&QWoUa{5~;-n1=YIO{q- zl@j^%QrQ+-HDF_v=$ux2J6g9DH91yj(lXWLZQRdh`F-xl%CzoGi{miEU!XfKLsR{L zi3KR6TMxxSkJLqHj(qXcOPNyyys|;*v~vBVjh8WLqphP`953T6mgFvwAL3 z-}+?KqjgXR&hR!ekdjYJBlAdnUedWdPe7QnWbBVr|l*xgZf z6!6Ve`7X9ioeOL17OeyYUhPVR6?gxGjbvFx%p~{ky!8!EoAwU2oC0^+tmYg*Q+{k^i=?Qf>wlB7Ky1@)IHfEu-sH!sqR~- zwC*FlQt-yQUo333E;Xe!n_2JyAgZzJf814q_&Z}ZK65w1lZ|bDD;r}{J7_b)l&DyA z#sjD&r-8VD6NbZf}`E)@7)(*}2_7`%v5o|ZcHL;92^4IVDy8M_G zdsox);S#YMdotTjuuuoNO4#tb@#m(%JF*E_!wXY`Q zk-L63cTSDlJ~BJR^F_Prw5*j>$y?tQXO@t}TizYZ2EgyNwgMtve%fUBpJi@gB>Cf( zFg_jNY4DAVud`%l=@kboB~)qB{U9Lmgc}-uIuCE@$f{r^nlBda^Qfnjhr`8TC$BkS zZ?g)l1VZ3LNNy{TOAq+@R7gMFz=RZ=Q0ZUa?YQU64hz@VcmQ_mKew8->H8!5puy)U zJ=@l9=XvB@)&SleTDca-0}M}ZEP#+QqUBUhC5RE@bfUEa8JTzcd76)>n^jV<$#Q|? z?}fC7mM)sM%oQW68jY%t3B0k}o|waZnd^?q#o5kW)s|cT&J3sL9?w5P@Az7fDr#R$ zNw&TlA#o-tL*8HOxy2;H454YD24+ClHn#T`F#EjL24<2o5{9xs_Xq4!FTmNNPNj4X z3YVTQrd-&WV{au8V1w^AQwuN(mm4L@w`tfO*6rqH^NA&IuIYW@bW0XbORC6oMcy3m z9IaPU+a1KvIOM_AuJ3NW>Z8wM;Valg83r86>&9yZ$Fz#`k8h|ku9qlMl@TH#U+sTG zGtJy)l{aB>3V)bz3Hbt|UHF|V1#+l6lCphG%P5;h51GPR@sFTor+?mXwOH+g#aCp; zjG^{yrG#&LBH1*=th+SZ|FxK|ESjSI%jWK6g{z0tfJFODnHlk5%gd*JX`$&{zJ-Bq z6qI2lY?e#a6BH(nmMKGK^*t@OaG3{X&~8SOVBh)Sw3N%^#}UN;Rh7Xin3$ES5lNDs ze?`gt%3fW4w`Uz;wV@kR_^`W&Q~cq;;uqBsMixB*ZO!;p(PqXU7ECut361KC0^UPS z(cId=RQ}4Htsvogr*w*=&Zd7Hctn(31bP%6I*RPCOpHBZIsPKwM%>+h{`P2^S>7;_ zQQ9(c;BH?OnLlz^O_rn8_)F9{+M~#HBdR7Zvo569C#6Zo6CEoAR3{o~)k~i!YLc z1S-s}XdgAwEN_3qf=&hZ;K)rnG zc%sV*!8%`sm*&5eW}+}j4_gPr@j)CQgs(jmV+r-rKrec6EGw zb(vk-wHa53X0VK`0wda029(tL7=V>K8@mO|jMGKcHJpQpS4a_rBz#0R%r1|9(E!QT zYYwYAglFI96q*z0t2Y6whv$YK(^@xQf(4`4loR|JGE$r5>mJ-Np7!CRFGJZeUSf%I z>d0V#Za$ZGJdGw~#G(BZeXH|#XhHSC61Z)ia@;=$VSrt0sycfWA^drszm zyPde5kaT1`;~78Dmsa9E$dk_-u=x}T3{gv1L$pQ&n1*TvHhuz-$+4rD#`NR^rFGy%k*aa z^VL3#X8W9rpIG&ae~O`=<^=Z+wC(b;ILZGOOf?>rx_rHG+4hF^&3sl*(01rb62sW3 zo0A`D{Q^kgYSAfKV)|fPE@YR{k@({Cv!4*xDyiF60byOu4R)f7_kN2Bx;ipI$9)OE zX}V2|^ZxIzk@H?x)}XN#CM(M`56qlqk&b_qIwmz><3GVs`IhYQS?$WcxEp3@gg1gsqz)pE$A+kLz$D4_mn<@($iakaO&fr&cI8mf7 zlJ|eH-9}ohyk4OH`vhDz6ucve* z-=z2Q97Puh5V{nPkp+vwq!z@&5;W2d@NQByD$-0-!76b`f1P(;Qr*UpiW_yIB#*Fg zkJPUMF{vsaH7bKxE|!sk`e|oZEf?j4tK~%+`nwm$dd&I{@tE0GIWq6R?)7`) zZu~x)C=h~vGTP@?hF#&Btu{AAv3gqsM@Q*~uj44>5IgS4Z+y&%`bC`Vx!4(e2@rcJ z2(WL-AV=oL?(T2u*Evn(PEUwUlV-Djgf!VkpzLQYJ=irwv|9RIg)YZ(1cHw%aCZV^LHH!d8wl+0ML4;xqTWK(Q5lqwlbCQ9OZ( zr}+7aj`iG^@%Af^+Dp&8n&LWzgBt`!bb;O5gbBTwNKzZ#sp_S5^PEP-7GWlG}$gculXH43Fm99h{YxgMZOU)-H-o{~_#Ie1bbXdVAc zQT2G`2=FFW1j$J#ts7KrcdM5-?UeqCQ2a3Il~zoNY!jQ^E66)!f3NgIY>%d@*P=ug z59LTtlS22-UD>S;@ec^#=@@M1_N2x2Lkg;x{DCi`s$mGNN0LKq!~kCLlp2wKa#aoC}bHw@e^ zy1n|bfN>sddy>QAQ0!$OnLX}kT%g*st3Bx;`yX0^7m24zCGHNSrV683&z{wqQltba zAq2`GcE$36@1gMW_)?R&@uUs(^}ivmh^;-7tu6B=)6}YRS)9w54eiJ{H%K242c00p zWg=Kxmj$xx^i#)GRIEHvb2q194x^Td`y8tw#JWdi+qN>BLfqnU(DAPEk7;~6G)OOV zSvS5-DhK4r$95r7X`deSCN`+K(XutHzLOkFlxj^rk|GBYY!CflBcgX>WOc5)W=As< z7(E?aIpahuin^W!BdQGxhvZyU&Ydl#@PlIWBH+4+*qgQ;OIWV)a*o}WO=1o!2G_$~ ztnp`{`7laAwFzO< z3`xs1pplD(i%TWXQQ=<(5>sX4{#JnEG>}mjg7mMjw$R6T-)p4+RO)@I9Qd6&Pn~NrXG~Q!l93&eH|*@(ZhY9afchD)q6382(#M zY(1!$wCEUW#wz{&dnDiA7ld7GVRj+vF=U7cFK<#=DtQ?GH;bRSw`OB?@r3eYMup_? zh2Vvau$L-F*&$-$$G4#;slPOGG|jUwZPn_R``#@sbLFCP0%Cy6=6%|Irsk{WjDhPj zz@KR3v-70VHPO?hBw;MF$=ykTa5STrgBVv`bso)6)su9bogXcxN`}!;>|~IkTAEIB z0;LYskXbw(t&a4~Qrr=+wN*NWe|QO$?oy1MOrrmF5~z4YR2-a1!K3RvTe+O1hV#N^ zVh|CNq6uGirJ;rX2o6B7wj^ZlZ%xZdvUGH&dA`tb)u6z?KOkyP((`ER)tPEi$gzS} z1q}|bi}!mbo_Vt*_0ACtC%B1sD7%dmeuvnaPc(reYjw{|C<+11d$CiJYr7*WZ@9YyGWBXf-ZsYc z!M-7ZWIBr|?P0Jnqx~zQ$G6ofL`kW2_ z;A|28>70;@FMJLWr~Q3+yjV6-_B74xTYhaw` zCsb=8O&dtXr}f*x2NwO-b4dklf?63R;yzu4<6r4ea*Dxcl4HRS*bNWkrx)5F^Q+0@ z+ixcqq^JH0`SSnGeX$y2?nD?4>D13wOneHkY+)56OWZhF87@9CT;@s!`i8k{7XAK` z`W7l_K#&DXWMJSf?4qyPpc!eH-=dtPV5lJTd(#xhUL-Oxq(7lqB+i_@u|XrGm{alf zk~UZ_4r`R3N7xP64YryzhLp*zkq^;lCzG+7JQ;|xkp&1$mtZE+TA%#vzVaTwkC}-p zHQj8}dVy4zEpHE&$JHigKvHIRUJ0Q`pYA^qnrWt#U|GTzk0q^8$-^$?o=NA!1G9Aj zzq5!;~iHw5cArr^L`hOm0U0ZyANb_DiCU z!dTu3Wxvt=P8-saK3-ZrAnWoZt8(XkBmWVEKvZK>Sk3-Erk!2X1%0`oi>P4kSDz+s zGmWl!LhKx|79cWD>Pwv$?{nbhp4zvK{mQ2Tt_|aqu%0Mxqr`jUECNs8%ALH(Zhr3P zuW`*~u#2xytF*S#GJpU5(&S0rr& zell^gxj0WF2h1i|aIn@IO*>*+Tzeem-NG9OLh;@t5O}4sMZwwtrhCS|&m=gTr-h`2 z?hmnom4pY5Xs4r{j#dnTozNWwqZtR@%k7J(-UD*^HDY^FZJ~@ydA}WdMX335WX3|c zo%J;KS2naTDJ>3jkDX`!+=$#E=<;Ar#lLXBfcJ&8Kqaky+gssLp9D>DJG2@BvtnYG z2(82IFgoAW@`Z`MeM1APQwo=C8N-rH3Wl6-Su`8o7*LLSc*J+MExTGsynbT~9{W-v z$X9cjlcr2VDXwO*iIO>fbW+_z^uj1O>RA)gyoJ%$5o!~X_uFka=E2qSW9C1>s4?`a zuh&&dO5RbjCc0!kCaQ~+A_($d4Hd0^I^f3~KoGhEzkvxpEE*v71DUyw|LtZO;;|`G zd1IY|qq)xHYsOx??t(GdAt(v~%cG246Sv)ivs3Nc+(f%&F6uEumG7nfgQ`K-U(al+8bwcb1%{LhupX4_g#jJb7QcflDnbf?KoL=ZP46sRsln;fq zzu_UNHv(uJ2hhHC2}n17#G=9{kYxxDhW+A?&T`Yxv#mljz#(So0#(4A#u+MYK;5ul zg5nFfx-B`({rJa{`8oXC2TCbuAg)}TTSi8#Eiu_Y^N>;Qlm0D@XGfy0Q8CqGJj(SE zR->9)zi6z#=l=@y;8ZSl7X7=(;HC1c++7Cp#_^VW3H%lz3^d(*Ge&jnY?-fiGW}{6 z51rA9Bb3t`R>reLL$Xf1QwE5$Q@_-Rt@#rAu=IMBu*Zqq z`-oA8Ol0UWPlyh4Si{~OZ4=O%7-_G{S#5*uL_d~WT;HF|fxTt$y8_mJs2ThV`3Z-Q z=^313rguUTzE9qw(>RqB+oilF9T>oRXNkIC^5={1^~+L)u|(xhD2(g;_-MN}3ud|; zMZ^KhC~1~Ypy_NnqOATu5YH&p`f=HHS)21L zH4+G*#@>5BZ5z~j|Lu>hXD4jP_#)ojR${Z)!*jP!N?l;dvvBBV7LK{F_0VUlK3A74 zMn5DF>}3y*6XsANn*LK?038?N5>B~6x4k*^g6}w@jqUoa?X{1_=~ArVo^~c?vh6`T zqk>VIb`3qKVKGcnC!2Om-c+{Qt`NX!d@jx;KH)}RjqBdF=f}Tu0>;$*N9u2N4@J*id2t`{j>x5%y)!0LlVq>bwr35g za<76t1DNQ(bJN9;_v+9RNV%u=(tDncaV{(FpIR{&p(by+rNEq@qxisL9!Vm{USar> z`kPu29R65l+}OqJ?(dmHjGipiGuc|PCa2c9gPY=b|43eq?Qxk^VUV>s98Tk*Ud0dx z+e|jE93f$!9#M~A2`LyS?o+a%+aU3Z#r&PLw=RNs$>x+^DlfH&%d)=@LZeixkFr^j zGrzHU6%$%)+m6$ zR*a+Huiba7+DB-2SBrDzdDe3}t>VP^or4mPM>OTqp7>A4DZ4Zv@lvU-x`SyK{(PMK zSHFF6^@TUAa{(_`iN}&_0U}hT0 z_D9$a(+3G}cyG`Xc zEi8HYT20&Z`v{1OX^5_Kd+OgrDuhIWoCJlH7Na*;lHVBEm}1-0syAo0iZ&ro;YIOd z=0?2dsV$RIKDn;&_ASl&rnQ|iVO96mn;a*&?8oTZ0Z{LWC<$>kiWLg2y4p4AajOlZ z_^Qq)HB9Gc*0P+4$i6w1v!C03hMDG&AFmUemSjy*yfkS(C2p=Slw9U?NLX4z;;o8k z7-jm~4K^n>TXy)b+QJf=&}=ybn=iCtP;8>BFMp%i2I2wkeDhxCMD%nE3TZpI`RUE8PeU#8FvM4ernFz(uTUm#<-qGT2Y zfaPM$#TA;a8yf**>@UlfM71`gfp{+C{lopDEMa1}{nMPsISsH^2F}VyK{iq6PlWtQ zYgG^e+&GDqx9x-Mfk_*wT&H1pBa@z4x-YoM(_IPEdpm0T(l&O|b#vag$<_Pl{>rTg z+b|9GE$D|fz4{E*xSZ2aQxkCrUN*03p=OD488Y3~h8>sJrK{LcRM3zKPti0$4E4V> zg^5@wosiy`tt87xNX65w$1u`_gXI7gVr-&;3>KbKvMh_gX@s7 zL-a#xdX91t=1i}mHgyjd=ao2U6jS^l%r|buua?TV&yPr)I&$wG zKr?BzKO0u|9=oKUYe=Duiu>1CWnMr554|_@_~Qu(+8Jt%*?$RW5HOyog@W%5Z zOitYzr(cu9Wj)rs4Z{hp+7Li%N9dpZAGW^xoz4G!JEBTU?b=1vtWAxW(P59;TM;v{ zW6vn6T6=F=t40vSC?Qpi){5GjQq-=Q+K>0=IKIC<|G|A9$Lm_>bzbLrXp(pQO>$7u zJvkk^*PN59F>S|T_8`dFVeav{Ni;+LfXkcl{?Kkp3z@i`#C#;EOTWJs)HN5}(e4umCR();4Bl}8he!@4kB1pz!Yb}sT z2X45mc*qT+|K7=~Icr3ovHza6&3hBWw!Oa_u>I%fLDgheOULqbRz}x(M}P0`QbmS@ zgs;=hy_(2>CojL~mb7=TNR>l8Ps>_f8N)oU#`Pkc!-x#uVq8${AcLj6ekU^(%>qV6 z!c)!8C@$4$gZA2p%3z{u!5{a9ienErwI01tbEA)$eqRI=b}ZJr0=p7?x_msfc2k+e z`t+$hLe<2n8`HDV^_;1%$adon%(U{@ENb3qDUI?{xK~$zOu0oiRkYIC`uM4}_IKwY z<}F#9aElX5P3MM+a&F2K@N2d>o$l}B54q4LLl$ZDa3Uwl^9kuC?@Pl zW)?7d+}*p3mqoviI9c22CBB@AS2ZKmqQA>6z3OG+N~AbDDZ^IB!^wInb5VeNOc71D z-gaoV$a-|fCd@~UkuFKG)P)!*0JqZy-tOuAHr~G24pmNi67X~jAKIJRV)4;^q5paC zBx<}XQ)e=ac74j3nAaJXz|ybS?-*43nQM0!ngiU!qL`N1v)d~C0_P)Ra*z1nJr`XS z607$(x$~;R95s=bwej&n`~sM3QmqH&Pj8B&A9w*kb{o=#5$ zs{`!O3xs8BxL<^L7IS^@-s_%E_Ips_pETH-^Pz_@XS9;u`SJUXn8)hLza8c7s}%L#GszqODmY0P+N;Zrg0Bz+Cpu9wNF z+x@~higlMPzBPAtwUp{MpGIpQwC7gK1KsviY_c-%-wrXanE6e}y{KvO_dZV4r-$j3 zPq0nLZX`YIv2j_jTo=9_hEzcIC&RY4eAM-`~T|MW+tVo8;5f@J*qYTsuxEVggm z<~*#z$Y9rDr`O(>8EoFrR&c^&#ebhZz~n;dYJfbOR(=2N)4NRu46RdT^uQ$&vWi>k zavweT{eRunJTvMqt_uH9^A3}jeF$@-H}Uu_9p^|S5_$ifYC7#Zj!7BK#ME2HA5xI; zwz7kYKQA7h$do;CuZZ4sZipx^NH=F@Dj9x>h&0^!F#IwdHup;$WzuM@3un zHKxA&P3Vpox%VYZiyFc|6RMI`%_}Gb%Tl7%;@s1%-UuG8&AfMb8+Jdf738Yz@E~h_ z;ep}wEgsueFBZMN!?jXX@$8pN%myYCT8?6tIhk>@oSZohnt-Q{t36IbPZ$sS;%jP6 z8N0+D;YcLECnr;MA*4vspK_RvWDfda9`9n7vp*Mv>FBNl!4&c{DN~@WPq^YjGo+8y zNuH!M>74yU4d3OhP}U_8Ki#7rb~TOs%dT06k4Kdxtuxl=8gXatO|1$m@nv6iD~>2^ zyI-c~W?im9wh;oV>EGi5qTAjFN#Zn$qwhex)C~kL^;l~fnd~Hnc6F{0vuoVyzYVpP z^UZ|ycI-`w|0F>AyA>+sU3GF-W>yy_B&NBQ(64JZbK4BQ6e=At*9O4>N=dUZ`ffPd zExVuxhYQPZ1|@NnYDH$>Lx0z5cVdW=YO3|U2p8Ery?MS)AERFhCR^y=h-wz0>!j}0$J}qhd)EzyJ1J}O&O>SETsS4Y zFV-pop1;z(Gd4bn*fQaQA#w9SLdus)Xq?GP&zCZvp_?J~hfDske%CgB>gTqa5~Kzt zB2hlG8MJJ7epc%soT$=1c;D8qkuiDQVTYj6p{si^aguGw;{gv7u4w#hQz(8Qd)Bkg z!C&`JZ%<_Ls7b4@uIn!dl9WPv+`ysB{+|>Gjqpv$Q2H3_>@xREAd)Kdr0_=W`rq@@ zqnmh;4?k-cte$kKEd`rNEwVRTRfOvaJEZk&w^boCfS2**7mOyv6QQQ&M7`R~4CR$3LPWKsBy<3KouK3t-q5+Yp;ICg!%WaBj`XR#^hX!fwB7q$ah_7Ke;XQXB66VI)MP`) z9}^>SU8|d#dLtq3_SrdEg=so>(65r&i>qZ|V^9iYX!5nA1=qch5@i2UTvj0Kr?Uz> z;n1sEp4Ca%(L-8r%5L+l6tt^vK0Tg^o(Wc;^Yt68r5MQ!*2UvkIl{atSMc1zx?8S( z)h&f;J`%eWT3~X*Tu+1j+nW8F_M=6`?!wb~S%}3BYbCSgw6hKH!Fhbj`9;d=K{R}= zTHa+X|I$vfgn0sk3YJ9gQP5HVF##&X*7l~B1E9ZbE6+PXp*UWIRO zz|;EQH^&m=Hv6$>4ER`Y>t8x|ei%&jc5GnSxv_G_36m@)s3~aNiMFE2^uk^cLG;NZ z)jm;k!;{cLvM?d1iSKKQBeGkfo|NK)4o=zy&iFo?eA(~=yPiiOmv8Nc%t)+?s-BxX zFx6|z6|LjD4aJO zREvfVJ*%XpAp9=??Ecfj;o$v3l@#`m=dWqYoMHG*LD8pyKbBX&0*teMIE9h0D z{-U(Jzj&N*@Zags{TjmST9kMrAF;*~d9^CD-g2grt2R0~iFVDXtXc5)uDQ+C9Ob!N zffc>LRQlrBZ+LB%q7xa@RJ;2}>T)-*)knk&lP#7m(BrQ+Ji2$Z1VK%8+LhAich1~7 z-<(>sE=&JFl~-eEjpqZCM6wRmDEJ+R-~y9iGb`I;nzx)^`JWZ~RatzTxkFvw%$I49 zXK*-re42j{&s^ME;Z${QuxWO1OlMjBAkMmHGx}%ZM-pF~dYyb%!%YFtbc4y&;B}w# zv?pZb*%lwuwQGB8?`4-DfC8Oc)+Oie%0I}+t#~W- zO)}u~SyoLSBqsZj@y`YmJEkODf#=?Q?2|tgA8zgTX`q^FXBG4k;zEEof<^n%jQr_L zIfceQMMQr0s`<%B2Dyug4!nR7Em5@3;J_5W-HlIQT%LDjS=qg0LzP+4nT5= zFJaoZ%@~sDlU+fo>YeEQY>i9X+@E8mr`XHO8?CT)u>&Da_9wOvn=YH9%Qj&7YUS5M z7x^K2xq!)b1#A1Q6)UW?UDig;s59xD|AH8RB)Wt9%0@E0qddW7%R>%3sR0DrHafY? zPp4i*j}v|U$0k59TuQJ%y?`dL>D6lWYoKigeDm1>?|!L1hmOYwM8mo%2g z)6d?+Lg#33R7T*|aMvrO!e;D0Ng_H|;{GDnq~}$=J72Q%Z6d*YBZ7QMC1g3N2yr` zjNc0kFK1bfe{r*i7b-nUUT>W^9E?r>-j~13qBB;>109?qTs*l!hf~p@*!#v;@5H}4 zcd&nd9Ip^`Hn%Vm`>K>`q9!DFHvaWo**R)ObsN4QJ$;DNSdb&mJ;`fNtfA@BTOQ^E zrxUFqWfrV$&L^lcO~a1q`js!`p8-o^U%^={ZtBC09Tic0_`aju+uRdEbCs`*yW<}1yNBaf`X!5SWJ4X1(D{jlabC>+q)AxZTe5R4z zgn0xjl`%hKS)(N`PRed}(9^j{y*gPXisx8MF)-b#O~gHMFQ;N%R7L$aQFhmA#$tkt)%yB*NIeKOPJu zZcf*J_vD+@J7rsyhr1b1-vu=Anu_t^d@I}j@ubzB=ZSjr?WPq1x_`3;*tyRr=pBzU zWeOa&2`sFwTdSE`0JCe2-fZ10^r43)z!Ilh#Z40Q0Q`7C;H}$Zq8P#yw9S{m?Jqn_ zzRF1c$cc59i6rkQzh(gKE@1nxFT*V_{ck-xn$hdd`)B@ZZcM9d^Ti9LQ~k}#fISIG z%SJ_)Lu)8;b?gSfi7BOCZ^9am@c?r$eU~l0p0V5I^^n^#ch}kyq9_jeBiiDiir{|5 z)z9q@G)mx!Vgl26748q?dsb&yTQe*U<7O%TG$@PN9_IuMT87Z)Y?{(O%Q>9*EM+^G z^9cLi!OdI}GC6XZmiBUgdnva_77Cs?UJKlt(K1<9`?1j4i;$&s{R1`Hj0#athA8U* zC5u8BhJ#KEk$wZ{_uHYnIe_BRmqdsBTh&{LXV`H#-K&CZ&+{k@Ug`w6zA67mr;qO2 zy{Y^fREvDe7zVrWM7b}23pD+zMO)8w+F9q6tsh1aNbf-TITkb9&R-N0Imw7iPPaH{ zBV?c%@b?Sp^KQhlN!K^>#JT$!mc{p%QC->3&S)VT6c2yoD~SC1DB|z;)%`YUZ%W4T z!3Obrzx>9%R-5^eu-K&ZqN}fjjJ@-!n*hl9Wbz;Eq~P)&2CMSkt#!#a1-o~#>bHt4 z`iz|OUNSo!5XE%(lZO~LZg>cg)|PY=lKo9~q^?Awv(W3+y{86Gyme)9|~f<;JHd#W0w=y+r_ zZKU)ip?Px)6})n?~QZSn`DNm*27 zWg6|nvL_U{vH&EnyaaqvOfX%!wg*cg(=$d(LVIO#Crd{gV9pn$gGHT?9KECaHqhf& zCrb4z2f-R+etym^iR}pSV!my~Uty*zUXCN<{Kjo>Cyoh|7nqt7$5Swk@V={a>z;ay z*XGJ|KuCqt`g;E))|BBp_^G!NgM2tCSAOHx_1<%VhyCXiKys}L6%er!w?Qm&{)_`% z^pT4Hmakl|BqC8PnI3-Ed#}&6#-RvZUc;z%L$Zrvbb}o-6W{f{tzIVDLC0;dNrhb? zVAK7mtZw!2rD#>R$g#wx`~nUWi=ad7e(%l!Y$36*f@ytPUi=|N2++TR(+Y?pN^{MQ* zsPe;pTyb?Osxm|D=Z|X3Qo=Hh+bjj)qzc47fHVx}d3D=snjWQ1*pyqmSk~xwr4{>~ zS!EHWkj{oYPz}dzr5XjjI}v#;sbbUZgNi=(F5+tNsS@Y|haX@4(Nk(GZutXS>4F-k zbRlU$-&!G|21VlvjHa78;i+1}za%v8-j}i2876GMU^d+v4DPeJwPZnOw$qApzG}CT zU!fIR%cptBT)tEC+gba26JBKSul)s+^T5NyX~}c1RPM3S-t8AZX0$xQQd@E-Z9gDW zZU#oD>`g`0fiN7UguMTeS?YC%1zR2hA!$~*dTAyz$%!14D zh#P+(A(M_4ipazRgT)pMhfY-{_eM<-NC($$YjmpyW@dpu;@E;S; zw)GpMjvJB;Qldd~USIo4Yb}cIry1a^O*JTM{XyN@FQ4%95M|knsAW#*`B0UWzBEC! z@yF1I<6)?9%c}NQ#_7^xscG3_@9M%&R`qD{WK*_cVHJw>8M#5n`KOzz+c{|8yF3A7 z{_m3TZI}A0KA%7rQ}Iz#zX*GLU_|fyg8Hol*>~;! z2$v_F*C7GckGZHhU3Y(E)m3{GgbXRc_TWQjb=MZx#zd3bpRyd>x>aOs;@u2%^SC@= za*KiowPl}vXmszs==kPs2|W(|sh{+8_mi+5#9P(RUFV|r%5A2CUQ^F+o~@pZj{Fv9 zgAQBu!}l#V7+c6bZc72B&Gx+6ly<7(QZ(Gb~U0b zj&^c`c79A{S#p^t0S!tc|1Qd$E+ZQC6l-9&rg6F=kOpz@~s%%X6ZJdr1Z zL0#{L{M3jFWsQ9|c>k78f>{WjiTTm)d193* z)w!O%+gofz_F!Kt`r4rg5Rp1M$GRkGOU#6>n_~u)ypNufGo9(Q{~Lq`8B82F9EXECtPS7zS$li z9XT6_Asg}Yk+TS&>4CAuQbAE?hr){AwRvYN;pOQcNe+EOk1WkfzuakA7U+`2*RwSz zwJG&ri)(|UhBY&4pMDyhMH{AOiB@bd_Do2S!EH(Q(D>9zBjUN7PG@9DPTYJ zOOB|u@Ph+YF;BPHkg%g*71}M`<=VpU1$uoQyd&w_F&N~rJ^N!;?b4jsSIn9XD_f;M zc8hz(h^Xb2+*oj&=7ZJme1q}NzW*Rk?xm%T`_` z!eN5$uw%}_>;aJ1*PJ01x=++S8n&ek7}gmpGdj#v+OeZ<6Ym}DJ2Jx^9=T74+VZ^X z^+WDLtVbUDHd1dU5L82?682>zI1AfG$r_%tQP*iXj&yw-Pt@ao{ zjf-MG4VAr)3O*U*fdox=H}>TQP+7dPvq@vwf+K>+Ze>Uf2#>cRH@`+XyBbsw9pr+< z{@`;9+qMUJUq1uh4ZDjzw+(7Leyzh&zfTN5*$asSw%7i8V<|o1Z;nETe5Bosa#n*C zjhmg67PD^go!I%RDHcQcdY|}X=Z|xpDZ)iLrRl#~zUpIs{W9vsvi0xm!bh8)jxFRT zfmt+hS}(_sH3oNHVDrBo<^aZWdYhb62sg`If)ZiuK#+0H!}xmVSF~PuwwbMcu+vAmgtVM)zwvmauXZd7>ZjbPVy=)41VAC+vzZ(@KD&V zrtUpC^^SR4=b8Z5laB*7ePQnLFiwRpC|wpWtuF=El9H4EY7cWz5~fV;BL{f-loF~?t6(6CjnB=h z$mT|9h>y=%Iq|mGBdM{|FlB#ATZ%lF?RagB(?ZU@#hC=6_#SCSu$jb6Rr&>@34#&Ig%rT&5a2Z;d-km}=p4lg> znnB-L3TE~fE;d!%H~={0@<}H=yBjJMD~4pYh|p(sGU%%u`^HN>o*e?|)wXjP-~sRE zT3%YP@-e8+K<=YA!N6fsTa6T{3Y4>jVX4{&bYP%eWx4#xaT+cNMSswj-89osiiZ8N zFE|mlGML5bqjg8NTAa--XWX=qx^f@3YJdX|qM9;uYY+LP+8J53LheQK!lu#TUNy}D zNcPe;#z-`kwG?zCErfyzP&?qgi$9{(>2q?=5Puo1n^3(7o8L4LAQwai@FG}fN}cfj zqIrh+PfCNzJND4rzr``?yAKXM;6>RSi+6#$Zlf+Lw z<(cN#k5ykNXR>5>!EEj0BO*d|&;i z{=i{K=oPZayF3@ENQ%puw4+)=olkTmLe*w3(~F~E5Jr5-t=#xgwm_45PwVTbVxtl4 z>|9+s$UXJ;Wko^(GOWdvG3jaJxg0*=JeSxKXtIWPMtkmbToohh{Q4*!!xzi)Ewf&0 z!QUr{FUq&KYQnInK~yRQeC;y3ID6mnS*_rghAMDZNb~Kwvtl)%0EV;3873SyC3V-V zgFxQiPq_M#*H1O~>u6@iu|Y>j424Z`j=aO9c(CT{^Wyp$dB=LHVE=W{xP1RAsZ*a; z__9j%rdjDz>yD6Gxp11nN=1eMI%yVhUfpjR2MvUS)qk_kUswAGdgl^(Ei1Ulj7;LD z0u=6L)0Jd>VhlZFUrUwM$_f~GZqcePoXGSp3{(dY>18z}Z;9Doa`6Iyp65F)5b;5c9*n*qf9o3>F3m)|Q^XkY%RbbyBNI`wA}z$0n%>UH4|xd3{n>HAC)i)(G3 zzi4BA`3aUaYrcze(~Zmg=dsw$TZCMl<$A$vR6AO7uM*#uk@dM-Gc@yf!2i8_1GIG#hrd9yE zLDDoaXwmr*p4nfwz}c~Q^ALPDluomHV-&KiHMA3oh*@aRxG&Rnd?kof7I0+;_enn6 zDy+v zlxCW4T5N6^BJaD^;A!bCs!JaphU#FRpKHH=Xz2dno+c9l^URZopVR9ufTQ;Z|Kn7!+(az!e_yGs2Qm5%q0zvjflIZo=pnR>I z7KE0pPjZG${g)@kVODYmeJ1}h8>~J~lxU6L32`TE(SQ^QT~ zGbux^js0`%j^kayObGq$#J@5QKUnn?HRUK2+&gRAdmy(08)wnDBz_(uHFjGr6N;f# z<8B4~wQsm3^9w-i}k8#1QCvC#iEzeUC47#d4G9!YCE7(ZD(D;IJ z#r|LW9Ciuc!56?jSW`qLTI|mYnR?OZPnSc1GewHv?+*Q9<88+mZks7=9b;zY6*kCy zl3Y@DW;IsgVIyc>qk9ds1hMt@SG{54Y|9&S^6zqt74I~~m%cDGA3fU65neirGL;%; z0oR+f=Z=}=a3H>*+f=cUX+x1|RWs3LrH9CB0S~*n9l_PfQ!z0>n|F?3-bxPDkT`X6 zdQYb_l+HAVrPjK))Yd%2fiieuqRB%z@HV>s3Wo#S2Y?p3Ur{OV0-Ck|R?K}vO`1?lbxO~geGDKR+i=}yzCH^VQP{!jpd%_Ws4^g$7!LPlw z4!PYIv@ObCN@<>#T_0`tMBJQ+i$(>yF{7h?o0uZ>)LL)Ofz(0xvvX({=`%NAG9MXZ z%($FdFgXVrRZ9Z#(mU>U#iHAMIF9;8HgAFkmpWzIto7*Sr@!Y|;Nbzk;NG?QuwU!yB=YT@|9pTUZ}_ zTbE){cOt8y=r&{*mREGV1)X><@f;fARJolV70^`7C0{-3r$BgC_|rARkrF63-`+>c z&t}OAd^qvZHcR}3;9)_YV~Quj^Wc&DZHAwhuNdjy6&KomT{!*5qOMuzI{EKP&{9<2 zoN>D8$Q$2|KNM8|;M z?4?q>J5!ub*=z5(bhDqVuLt@BMdmxwdHZvQkGlS zXHRSrmj}9iNYd>bVJrt1Bab;}vp0D^5m6u26he-KMG>*N!JlX@5yD#SY>Rta8j(X{ z47dzmIZ8ghL4{c40rUBBVgsCjbg$u)CcyzXhssvq+G(jw>!Y1)?$R4cAdzi{D=2wk z#_f)TerGm=-Upt)44Bi}$}*i=i2hm$adcTsfXOG06s4^V^Zir`1gS(#GAs6oUD*q? zbVS!^srB~y3VC)d&7SMX5Om$Y`2>DwXd-%*Q0YmO`uI28Op#q`Lci~qg}^+>iNsJ# za5Xb3JQMMm^X9tZs31?!wjNjgRPcB_Qp~i0Zi-iG=4$QimUbvdt9oX)EU{y!qSh3b z)RJA`v~awYL4EAT4C{pPY-MZ{uY<%$|hGCV02)u8Q%E9b+~+E zN~fgrv+)DVdg$z?w92ltz@PO8izDcH__joNL@NWH9$l@W<0RSczev-3y7E;*$HFs47%ZdLuQDpugaAa?CeC)i*YhyMPg+|RN6pccE1Xrpgsq9pR z$b2cX*%qkm0jBk2PhF75uEB~{--d#kgW98u3&G#P&s~^4jfn>Ie=77x21)2H&B&K{ z@;P3j^pqfykq^G44E7(c+H{>0R=op2jTck%o@i)dXWVZ0ZzDQ#ZK1#Sny|Ox!-*5* zK}UYGK#opdy;D@y1uVzhOo&kt8ToT&7ZRrRpkJD{V_KpnaffoY>${Qc@ zv-u^t?+T@M|C#WLn8=C*__=QC7j$Wo>I^*GH}ntcOzGf`H%t zEnhrGPdL+DdJRzR6e9Ki+0?|Pb(^eUo*T-{Rx`lgfsT8W5jB~$Q=5JM?zt8j(iCq& z9*Zn*N}8RWD$Cp`pF?sFVY=h0?p2iy`FKF~ekS8i6qt+DDg8(4u_`Zoc5b zD-OLu!6vGAEA9y>=bkX1B3UXNw=kbXMZO122B|qv*G6hobAPBUT@5C!lEXG?VJ8UA zEC5&^x=9wA%uXRVEXow(cRUqU9I2FxIR51L@DIrG zGEkZ|7Uow+oQ$(6X!NR)dxRLV5UlaxEf`6=??q2LJDoKUka#DjQ*W^5AFtxCKLcoZhY<@44 z+*JmTDZOTxpv*ghXMy}`9Eiq?U63oU9thDLsaF?tyqb#CL}lut(1+$(ZqrEuc&q9A zS-XlxyC)r!>1vDn@jh2OLl)x^=bv}%v{hwL*dE}u;eQ3;ddwj0GEtV?Ds*~$Ra`U} zW^QI7!Vx$_Fj?2=EBV~)mhk{ovk|uSz-7fPwUJQR`#W&jK9OwScII)EjEmz(Ve*^K z-MVB?ix}6r>6q;+qRR}9CHlkK2-iGP^i#k}ZTPZ*dUfP7y(?4sM1nKlOwN6;FZ4X z>X@Bn+Q(SC{s53$K1iB)_iLy31t>UOS8qz%cr>y=ZRR28Fag+9blIYZ^gOBI(h*#J z_bdUmM6V+%nstv=#%R4YGJUlHK58^wbzKAk$(ok;pZS!Os4CtDf!PEpYjX!y%T^x` z6Dg!D$lCS4`5>FRb>lmp2o-4Rtme7JH?X$`UBhZmH-u^VNrSe7Sxj&@8cPlKf@rlB z+}$U##Zy{fBlhF+gst25Vp`+PtdlMD&_VXveAkWUzxsF^mZ%^=WD^0k9=%T!Ajk_wRjLPI^l$l-+e-5?Pv@nw7x%Vr=R={$^2ZRyl~qG;A+jdBm=}CciTxmce1IE+m5sI++#IK7{8=&05somd*aRKcU&U3X8h5j*Nxrj zEkJuBsLpL+;>h6iyT?cSn-Vh@GG>on7oT(kSOradX8$6);weynk8MVQ^ai3vbPhDa zL)hyofwMf3bmmB7!gv!B8>C^Y7DS0B>hJus!m@<^I4TpfrrOo2^0+VN25|W@{y|}{75S{3`uj5f`=Jw{ zFl^k{=Pm{Tf_vM7=JHvDz+AKWG};BhA4+cw9MpuJ4E7%Xv35PaF}yFEn_)})+7J3O zY6Hr^Mtu)9-~&B{@tA}qb2Gca1?BZO1?RQ)q6f*_NQgv z7fkG|@!#udUoXY*s>z?zIhT;PpV$9R{#>tKhgjzC8ukY5 zjocy99IBV{mQ{v%B`SU-J+`)auOp+HS6!dBhkCy(o38Bbbot58K^yl*!*97K(U0<^0+;=Nw07Z#Yw?NlO4_~8{X@1?rg zi3kfMSR~rH@NDVs`I(ii*5?*@D-|N(oaH^1jJ2W+Uw=HZ6g1URNy~J%zd$<@J>z!o z%l6r^vBsW6PUm zUs+aie;(Rj!+P1SEBl!To%b(V`xn-i%&n@l2*@a`wl;VN_t2YEczApe8W7HmiTT#> zJ*D845c!q0nUEx@Q~%k$t^Sb_AM5e z^)Jz%KB*T%HG77+MylE!*kP2Vv{8zHw!0bgBxU|Cc43@uj9JW20k{#H z={pJcbfM+2P2=}r9+yKxwG0HJ;mF*X*O26H#hPb(BbJJA#9>p9_b%C5DL%soOF?XFQT~ck6#W!U05KY6IK>xWq_99;EeZBuKsmt)H}3sJa!hKyE1$vEf|Onalb1V)Qh# z_++OjPgj*;z{dIZZs^Iqs0TEBU!rfhEVD zmM(+$HloFyvA3l@SM252s*thfS+pl+DK#OF9BPNG7oyw_e}o-Mos%V_d8f>IDe?ll zoC?$#yN-tK?~RwMtwYdg4qcXf(wGX2+tv{C6xYnBgx}Q>X zq9{vr-f-b$IYQ7famFhA&j!^Mj`@%^^!Hs_`FhziP*H3O1sw>GeLdLPT{{s$TI@f6 zcH1d(0r84+Y;SRM=Y3H}N5{G_N9~II@myMe$koQ9)uTP7mVBQr!#A7XnYbuFrsK#e znPeD%VqZ32Fjb$>j$hYld0LS#-KnzO!dbQg?gM$5GD;II-m}?ZM2UKvq<__$yzwY3 z!JrM>nbxF({z&?wy+V;&y}`j$xy5->gq9(%5{MkEiVtRQd~NffPCy%#Ynv zLMQFVY}l1}`^^myWU~)Iz1DIMhXF@CQfZeVnHfhE8qHiPljVC7D+LN+cI(Q;XC%p%?3exFErA{G3BO zS1^zK82Cwt$_B~@dYEYGCHB^Os*$Eq4n#=|YPCLp^gi?fH>X2zdpXHX0Sqx+Vo zlVob&SPY@;sjs&S2b_m^_$Q(hOe%2Xn$~_U%?cNUSC)l=gvNf!n~uoxk|j4k!amaT z?SK6dtNp|el{zYhRtJ3K0hX}?P|jP{z@G z?&sD{qxJOy(JMlOSeKcHcV1p5eAnmf*v^6%a&ed8-*&9m4|a$&=k#VV=u(BiI3CmQ=?26?N75g?LzBq~9t2v5xyGC{j_x z4bGIqe~JaNZZ9vQ`)&cAfqV9?^dufyY?WtrCk@_e8sw|roKAPvt)|JZ+j6*`^C6)k z(pUjXX{-#g5$$6|@^a~1>ri1M8H%xIsc-g=>`#b#N}W%%-Q82rdQ@vE2y;yq+_*0* zbwQ=;cYt%3-R$@g`Lek@lgi|#Gfa=A>NB3MMVe>M4d-byEfU#T9`BJL!}{3-|93_( z@H3jWp)l2_Un$%5#3w)V=|Zp^VcC5M(mAR&!Ble}l0M&EE4_aDo7083l|&oZc*V<< z27c4#FH%(IZ!G=Q0+~9}{Q}U4jvP6Iq8@iU3(IyPGT|?h2b>q8CW>)j^hXj%swszL(0jL>-gIkPsu5W)67t1r4O={goR!WUS2Y&>bc4DT@zt<4 zymW4d*#C0nndg7G@(Ta!_uWoa^3bczsMSt7P=QCG9C0 z$2+5^Vj1~+{KylGWSKCl77&bK*^)Xg_oWnghvQh18@gSAjD^6*PlsfIR?_aC2~v1lOvKtk548qm&e z%~jfpH+q(xc? z&~==B)w;GqPP!f&->}k7a2gw|dqN{l_%PcLg+$3rz-J6EQihTfpW>qzV|R zZ_CY>*yRoqt&O5zv`u1Q9n#Hy?ypNtheT?DsaJ(ZZpEgvJZ|gbuW2Ff?)hr-Vl*Z3 zbhZofEmqSh#na_z-XX~@9>aQJZOR(4(f&lcZcZWo!w8A71b5tnKugfZE=rNK%! z2&dJz(sh{c^X0+NW0_fTYeVG!mzQ%xD(zE@Sl{axx0J~UxE%NjWf86rN|<`EI~=;T zHA(pNn=?e8?(T1)cV>qqE9voC|HlRRwBV6zF~1})OscCK3`ZI^1_@N}Q$(fPRpekG znuc2BjFhJE@8jD|@XDa&xwjT-UoxK&Ye)P2`_n5Tx_8-rUBmS->Ee{UQ*%q(zpK`A zDeT(U`}B8g*URSJ855DfBWppy$(A)2#mlu$q2q+Z??LyfOVPN(wsNstqY?Dxm_5~o zZ=&!$2Fu^!fEfUT_A4-5J>5S0kl@;m7PQ+xapVzP8^IX{0-b!F=~dAT4tAL#B`){Yn!o)0;GZUaZeTsxiIda1#Ht8E|)TF z4EH!bS{!&5SuILoWPz%&1B~|Tw^MVed5;j+axpZS$+Y0VC)b47E1? zdbQozrXswqj^M*TxIPPC)Ebi{j=GbrZmFwN(MJC0UQekfa$UzwnZ8aA3e6VTW`nwl zDmR%;X0NZ*UyFXItW_Opi+ig7TG8750{hP(oO>7LM*4+Mkw(z(gr3X zFk1VA2~lX{&5S*0YuX))%6$c!3#H{TcuhmSo((oJ8$4o`rdoJV_*3byW1-b93~7#b z+`XiD%ZpuVEnFS*8W$k7f{@IM-YV*TVp<;TUs+Ql8IkZaak({k;*%4x&vq$~Hr{|w z(ekcLeP!}29BXx3jI~JIoN6IRgDAkG@|T&>9!ji0M@_lloOIT71+EG9XS(P0D;9<>=Gw5V)2P1;uo`72r4-jPR)u@F z$sOkRlAUuGBtvrLq`-8on_mEG`6YRU#W!{?g3{%2pPqQrQOev{k6ElwHQ^s*SA(M^ z=REWE7R7blsCqGR)#-PqWIH$79`B5_o-uGEgc!EAb&pwGR$U;OP*%#1(&uZ?>!mr# zk_pk0W|5VpH4~^5>5hQIQ!?GMShtZ63Bq89YzBpK3x*eSJg!ZM27ksJJ^~V!U`BmT zWWPPx7!7`+`goegPCjfmpEoXdpYg_e!$>C*p|mQoodY={dOv1X6*r+a`DUD0dyp8> z+&W^WgJ&q_YbNErC5_8)Lsb3W$6FCz`xT%` zd*u8_YzGTMzURxCOnINT7o~nnZL6?wyG96{2Qf|sKP=+4zj^#SFMC{G@@=;QCEeIh z3f?us$C{-icgxy*MpXtqC*T&X+jC<*2?)<_li6}<`gs3lvdv?R+vsCeT(Vz|_#Hqi zJ{VPnJE+RBRt|M;$ieoU=&-(7nhPrBtd0oSxk>N2+h5z)puG#e;@Ok2WiTlFA#7x*d^HOzGx6m_(>36-<>fqgt%)s z9xd;|lt=xsY=gE>VF+5uFglC@A~A06c`V+pXa=q=1fzp4PXd7hb@|p zB^O>F#opT@C8j+qMBH;2Fzr>em(`i7I2K$zB4&2|)$Q7hYb*@wio~_~j5Kdpz+4iv z%Er>f(DoY~cb}^&yeT=2y8%%*f7!ciQ^n4O0b64*aVuN0-ldWD*m~#Ynvfc|qM=Qe z|3}tahBf*Aal_k4K|oYOT0jtxl5Y5^AT8Z3Oc>qGC`BoiZj_GEqdO&s#OM$tN5hDX zxaa>q?ibJTyxp7a+Hqdz_dGutTAy!ko$;O*!0P52steEUpA1Js>E)SdRp?wD+RFe_ ziTb=Su!B4q%TKfKH&A-}E=nI|I^K*La3?V*BVHi|WS6Gk3U6^NfozsgU{pPaY3Fo` zx%qJV6_atVXKZT22>lO6Z`VDhUwA%9h52Gj;r)bj_I4X4*thmbQh?f1hlCeErDl12>vp*Xl4)yFNg?ly!S4*KO!>8C3-G$_xr(Ded*=e83vW;3z^g6 zv)9cH!UqEBA}wHq+FWaJklr$UV{tan2yLIEiwD4N4nJv8bU2RNPxnu5IDakM_)h4f z#@ufeHDi*KKy^s{!S}GmYL6`wn`L2&$VO;ItzW z9R6zs2Lg0Mp z2<))$trkDe{zkpQh3z-PM$&vOO(W^A0&iYknzEt6zEX2x2Tk}I+%`KOyTV@FznV>qt>-?>!5z%E5nL; z5(mG6`BBLq($Tbv?I6~j&)fjZ1Gf6Vrpo*p@ko5?S$aV7LAn#K8-q&w?8}mFnKG%} zXU)|$@pIinc;;{oca}vj*Wi-*VN;`8vf`dGKb%Cz z>Y@FH#74e(eT~7tV3Q&`iaWSTo}JMb4pw(pkQEZsO}S zQAbP5y~o7H=)~T?_Qs5UiUObUr)cUq;Z0|MAM=Dt=s>e=PqUR-ny|oFg+J_dtOQOr zC*_CrRQKwhaA5nvX_{vCod3GO09SWCeOM;L!@2Mc3=A^8yWF}h96SEFQ?lE7@9n#> z{eaIZg6h2PneWLh{XZLTF?i;Bv__KlzltVURcGm^?qY;2`u$`W7CczU1Z2Dp1jNWL z(X0X=Te9yFD+RP}&iPeo$aAu9%rhHP=NwU(r(PAx%1Eu)eZfD zc!$G@ZUWkElyK-fz~n~-8&yZ9qglLfQx!w!Z%6$$0a2o&5D;y&O1VwpC&353CwtxJ zS{~}94NVjtve`HckuoM3IbU0C&zz_DvVbHaPL@^1W1v_=(5K9@+xH_$#>0%^(+3|2 zErZC*fy$ID-GM}l9I*`B;Fk9DX$;=a@({>#`^E}EUej{HdZLkXg045BB6p&>;-M<% za1EXHg_)O1x-ViHvE&PUNf(6+OD(*`_G-aV59{P(Zvb|v9ueX%Rei?5oH|z^zF>>h z>|8rI+a%X(>N^*L_>N8$IsF_U0BYN8K7VR%$}P4s7iNYO$1c=CK39Z}-0M~rn-^_U z8TB>wN?Ve)VK8yHAq%;EvvJQys^xm*#<}H-ncPYCb^=ej;p)QVzr)_X#9=}i2e)9$ zyD`iL>2S%w{`0%@#80{zQ&ZIvBwyKz1ju&=7m9}NnHayn)gD_6jT|bsWUH|XZ9NKr zj~Qz=*JwY-J2zqQ=d#Z{uIpxLlv*3Q%&=o7a<>J4S z3)~$Z%F8+a>OS?`gwrD!-+1*4;*hWMdPyvWQ~H7k!tx&!R7*KP^Hq29vla=S80am` z>&tAc8e=go zppyRdba1E0-cuzy()DF!`p;^Ad~?R9Hta*{+Us;@=^h*NC6SHk&kYEEdl{liPsyq% zMh|cviGvX9Pz^Ax0;ayphN$m7gIb$9%KuUnATfLh-37WELguKnXf^0Kv{=L513gMs zgeahmVBi9fT{--IRRynUA<{q~KUh$HnL)W)+CHG{_dX7>)JJ|szk@i_7?gfh*XAmy zPY)2?M@bZnO9lgOjYA36zxQ*?1A94b(}Nu1hj_~Zbmv20=0BlnXRbTrP!;WWqf$@~ z!ze4yr69Amb>J%~KQMQ8iUEiVofYuiq$9pyP$#7+nQ2Eb0q^z>grH=rWLVNYRRW*; zog$qsu$QC?cu(%dQ7TB=;Or?kc%C~=D4A6$`F56VrONCw(7XAkXcOZ`U$I6dnA;%{ z(|qfbN!6kId1skmr_MD24KkynnvL+^YN$r#&LEl zA9E$WYNLDX{@O=|{yw(Y9ZJue+8r0?X1J(x{qw@w;Ppkp;(nG>oMIyR%?%>tz-8#- z_UvZJO-$16<&IJ=0WLSUXlTLWX8EKCakYH%r_AmXR|=4Q!Y}|>VGM3;l>R_gQ~gq5 zW~#fO`q8QF54_j|iWrv84B5!wtt$6hw!dL*U1yY3Dj5F}iv_w-QKd(hYkNhT5_?ut zo>x7Yi&J1JLTIs!^*ju>zqLKhdfBEXu{vd%H!-IR$>@fJ@avD)W~2^1-=Ov2sCq0a z?j!?XoFk5K6Q7d_u#cg90&x;BCZ)4Pu81GdvXsPV+r*ZU#F{Pb>hvtX!5{RISbNo# zQJ^(cXskZaTP#WbAPMk#R&KS=Za`J=Re8H?!&-sB4;R*D0S}J6@AgZRW!7zox<9szZ=AI2 z+qlX<0m|zv+?=$Eyn}P-UsakzDhR%ngSjVxH}ISy`TpEz-@G2^FVks~ro2Z2HjK9X zT&ygzh6DQNUDey3f4^A-=QK7?UlP8>W(Q>u>*%;vUi>mNZbtw%1?u*aaNp;!gnyJl z56?SD%Wj)tRTAizNjo*1+#JO6Dd>%CUu|XSXQMk0X&nR@LgP>W@3MpZZ`oyG1|t!C zFQ#v88ydTQZ@7e9U+>N;%S4|}ClVMG$@vXh+j`?r6+Jv9>AylaeBWrmkz0zeo5Sz7 zd!hKvoMMnt#;Y7U7L9<3tJYhIx9{%)lm-Q>$mL77Wr?EJ*RC02#d|VoHM)6n&|gk+ z2UhYjJuzgQkN)j(j3IZoC!a4Yw3*INDM}4e;KN+K`sk8Bz_*!yiT}7_#OIK;@`@d9 z6M_kp4S(`IG7I`tH188TdfA{pq7%k!Vr>TfA3WJYe@RPbawyOI^G|V@TevwV1C_~h zC+T%{ePnukgYN@+nV>=ZVuTE1)l9=DQ)d|d-^3%Qu-7@yVrn5eKV;`!n160JgVdZ# zw(y6h5LdfTT0|SnJ3bjZeSqNoj2zM>Fx9KFcYqH$I)(or7*N6Ucyj0Kk23x#4gB5@ zegS6&+uMLJPV$B8>CC5&vY13w8~5oj@|`EB0GP9x90E<{YjrTvCUH^=4ZBMI@f(1| zJe3Eg7g(!I9+>R<+Bu|oEVCrA^P0XqFU}`%G{u<@#*}*9V(ei|NwS)&tF7zxNO{wG z|MoeKZriMC8Z2)0Rh#I@q85^-sQEt83@0nd6r*Z487e_IF5iT>_aUXV#p-YATHXbz zLa>*EC4~QXk~UsSNzwgb25g@`S8eC}LZ<22f&oz0ro>KL3DLQaCHXiR4@E>F5?(6B z|6;~RpI>?ETKNl4PD*7Fn# zy@S)@mcTUV?~xI;t2{YO-pQs|N7LfbN3j?5qK?mXbaXb_FWOxEP$nzJ*>~4l7AVx3 z=Ivk2AtgD??-R^SNBiQYXam>j>FGv(f(CcT9kwF`mV?5Li@iNZiLFeJA&>0S%#(1r z%W#XsKkWyH^az*hewRf4;N$2GG8f-hev9i&2H7`z;FN}I^uq8n8Vlp#OM`YF!^wu^ z1VmTsi9n&o?xL=lX6IKCa7fR9Z*?&9A|3I5k;s9u&;|Cs2-Cg=2lBPtm>m5%7|NF6VKB~k?o_GP_8@csWC}! zk2wiIme!(-+1+w={Yx#{{`0=$3XyeHo}{*3^5BEj{|LNx3C+a5K04Pn77R@iaLN;< zEerS|NzorCblBb-5p-1Alk}{0P~NF!uB||+`7YtV{Zo#$DThGKWl=NiK#kX(V-@q} z=tV37PPj_^Q`v;jxbB%sN`ZAyaTMMTY| zNOLh2Tc!TvfCl7$1SYdJs^53BgcnE3VrbAB<~ zm2J)kS>HY^C*f&Iew*WAg4pC-ofql}TF;a(LU|rM2a=}a|I(+-m#N)I%q#fPz+yPz z3u|drg4rA*u`-8L8{Zl_{QM3s7Ozmj$r|K16B15`F7rPfx{C$}8-~LOn&%gugDrEP zzb7>e$+_&*+t+vK4PKRgHhSNr8~6wCnwXuJ_3Tn=rZ;Imv+rV|uvMrILvDA5;!*t#{L98%a%YjTplW{d{iIN=t)%s`kDo8+vX^s6 z=FksuBC~QTvqA3D_{#4rk2%OGdlw>!Y!AYIxpQ$($e22`foEU;$T~mHH;HehMpFKR|kloaB#sMV(|9t_GW_p0T~WX zD-SuwDw`n#_rvKo$v%LLp^hcVJ4Qns_gJQ-;5xtB3eAfrOgdcUnMX!@>U!W2N#E0- z=yM}LqTiC|0j1P@(Mf(XJH?byf{*3bj=m#VM}teI%S4*t!8DT#{*sEBQTww5uCB14 zQ5eq70dl=r#F}=z|EUjmL9tX>W};@&qN}O-u$!e}Ws;Ku1vH0gJVK>@}B8J)S6CLp42;-mpLcTfSJt!0voI;VnUilMQh(qWV`+eI(Sy*&r|$&#|j zba;xtQuFoi-{ji05TPo>(6u0{WghHi@^F2u{3S8|f@bctpY}S+pKm%0Y=&zKls8k& zr}$u-!n8;~*)H*foGfaH$ufZMK5uL**B&mxrFhhYbFlv?Xao*V#7<@UD#FTnHf}p^ zzMKR#$iSoz|M*<#%YEV8%K7I-b%Fkm{kEJMd|D|-ExuV2Vl*bTGkd}>ceAQD*7{hC zAN$(9Y<^==8x}nT&Qyfw1w}{IJ^k7|JJauqiSj&~z_NB}r?b`xK5i0c*DINp?$e@V zY>)$!q8^B7muT)B8!|fnzHKVljdI7_?b-A5`!wG1ehN}dNlD>(u-FlTD{l{2F+o-y zy04x|XJwS_ZFk(FI?T%wd~u(*EMATI@O7NfybS zR?9;S1Q?Kq&fp9lI4}Ox6y~IBNhrzob2xpZfqmWUM9k>T*>M|8pRfF}K;K|LgLULb zoGrplaDYG<;5O4q*m-ZR7k74ZWa> zJowJ>=qCRYx7W<1Ag|c9IyZZ=n&f*2imVW4tAa4i`=wrZj|q=JF2NOZPjyhcl7q-Z z7w{(;xyk5<+eeE=)7=}niS}NXY+Y;!K?Q(Ejm_lt6`PF7czF7YdI5Su#3RiUw-x)Xt7LhwAJrG-fHrm&eyxP7H(Hz%as};dct=y z693R`?|saHM|s1=7l}$Ir#NR|l;b+9d77Mp!D$M%tBFyE<5lX=d_`op3(>)n>O2X0 z=Wg`;bXpV{944cOZ+{_=Z(mhtO@WQDb%M8^ihSU(*@*$Sl}qon>I}OCA+pLOFWzVT zTg+_3IPk##{pi+ThjtZG2CNYOiw0?XgR7Jr2TM;=!(U)^C)_LxSWF&LvBP^U@zXq6 zRD-NjVp)YXh)ht@KKA!xaTAN?V)y>R&EmI$i4W~-b94o7BhHjG@F*!l?MglY2mDH; zG_`APuW2l_#;_Ga!~2IG&N4{cx?9mxJVD&}ks?N!&m;;(-h*bm+XUkHtf z=M}cxPVnDM!2K5?>y|Eo>-59n%-5^w*@0&Gc`0VzMoqtCoplF@1TGes@Ag&_ounEP znf>R(AtsMdVrn^F;3fBmf}%#6xGP{}!oEx9p?IV`^nO^aH(XbxGc0fWP#*ZeAw(_3 zBZkM{UB&jv+pSm?Cx`6m5{}t5rk?yMk>ImJzSG=kToXn*&^%C^ydAsMX24J}7UYkv z(Ryq!VA5zAyVSCaugS1zV=wmoY)$+em*M-)IO9H*I}r&SNLz7Fysx;=drDreG-bO! z_SFL39>d9L96kD>*>q_EgbXAMtliYKlpp3;w?1Sl=M*u_${x@`sHkS)mqKYgaC@Ag zkUY7ou(wLxX?XfVesz5l^Sw9KJH=aIop!PZCefqbe9-Q6;z{Z*h9Fz)<2?w;njSTb z@JV@6torK@5Y@E)+rhWWq?GITwyV$O8Y~cV8xHYRMapS`~`%mPF(@@q5tH-6kV;XyPUP>l3Yu@ z+B6ePG@6{b*!Fw(;vc4eJ%%Dac?c6G=&y+!1rU4;7Zm z!HlFNla967`|ZiNn8-;rLkhf|TJbmr{+A8l0{gcgn?UXc=Q{eRFUMAb)orD2(OeWv zVPm!NXpkc-XQnQ>{KW5f* zDn*9(09VK7TFZe;baNGy>sqAo$Y8q)CPeVPh`T-^3!|~yxQrwzGgp*<%;DYbAwPe} z)$s6u94=@Uvr`oE24$l?&28>At+#P9j59Box-0t~c;uKI_zp-R>y|q(WgXlhm!Com zgAXr)E5i!B*|$#rpB4aj7?*o4)_xqz6V17Smb*KZ8)m*cW}fj_-m??qX=vMb8t!4f zJ*u%CPHsNj9L>O0^wy`e?b&X~-LA_G-Q&!B7ko1l(#9a^S-iNx=fkDx+x=(=EQg&t zIV+NDyY9HVxEs>EnbJ)1X+xQ9fP*)|L)ewOTlb^Yu9GW7NIS9%G@rWkN&4?o+pV#z zjitk2pR1IRs}#vNoOKW0y20yGvU>Ui;j1W97;=XTylFnb#q#(BZ}|-ISX>RAgweF- zULR51xn3RPezs(5KekAcdmp4JRpdo*mrbef83aVw#;O*uu#b!7Uk zecrIw3^111ubUhi>6$yKS@8{;3!ExEIV#GwkagWq+dt)mP4$1)C;GM1`?mjBA1uAR zMe!hU8M0qc!3$Efr%Fgvh;yTAG9qGkVwl2<13)SsMHM`T?CWIJbA)p3F%bzt9e72| z28z9sS}0O%3X2?6+2~gzZ&IGJjE);Z%`)8VR2SI)Q@ZKDB6OYHbUt)-(wH1aM8_ESa)PR-459DOmOOC*;@snD-o4?$Cbx&aHR+OT%6N%F)4>cn}>?ZrMfggUzQb4PpgKFuiDULdW zr<0kZVVk0>&0{y+?l6Q}6$ECvAOd%F;{yu))P4NHsYZQv*{@%x5XVA|tJc|AV)a=o zp1zR&N-$3RA8~uC&M7jS39{l3*QB*aXrn-@LYx)Rv4I^fe^@v4$GZee(AIIGyj@JE zPvN3lFE9G<(O#Su9 z!spZTBT18~8*63hiIFQF>`2>+ZtZ}MNJ=}+Qe@hr4!l@LR`@LS`0h#_L^&2#-6RM4 zY8DSc2Qa%{*67=vs_GSwi08i}Eo6s&q$)IJTv*yO;^*}dN8^C|Pm8v+*Ee7ID+kH{ zS^Qkvs&N)SbC*Jgm*XxG1XD5DUOhHLJlU?nFwGqWPNjGu-iJ#?v7dcC>WlyOYvIvK z$T{Tt3zBP8qy)%Ab}vLLc=V=)b~M|0(nkj4#=~hkgoR>=IStsG&lR%FN*!NmU*$Wy z2{$tC>aVj)%?yX2r#I}jmhu<(tzZYo$cA>WrtP26++U@4i}TulDu-Z-LYmbyH4Wq) z@LpGEFkf~O4G9h~=-l3{+_g!c{h;8D_n*q+j%w~AbAET=-Ow_PfHpabbzF@OQ{0SG zkfr^m2)XRpP@wRCM*ycW_qAFgOGUTw2kod*m4h1Pt`cwp#*6j~y)L!|B+O*E@@BqL zPr#v;!j&*47`JiobX;Y07%A|vkUqxi=?}g>9xxaub!|U~SHkW>y zwjT52&_gw+=NEw!K_BhiK<Q03e=k}TC}?dJ&EsmJbnIwAM|T44dz&~(Vd@fv!hdZV9E&gf7y?+Z(VsSX*am)7g5D(ojSWH_ zGv8Zomd+JOYLpu~@xPM5;T)oA~ zuc^MCdwo(SBg7Q&am3D6n-S#}D$=-;2he@v@E~$6d4tXz^uqA5aDEtXSU9?BJaJm- zE-1Yv|E?%~`0#ZnbRJ0p`YUV6Q@#g_H(4TmB2@IHQ)n(#;E1_ zOV<8;omDa3>U9{e<40cnz`gK$FkVwa1)>zd+nRVuJr92Mxs~c7fW?@tMvwe?*FA5_ z#;T7sl~^cUwa9ZRj#EpE(EE1_zO#ahtD1ULNa_KwthA?hh}^$}mm(mdupfEl59FV**$4ix zGRoq4qSQNJn&I|IYfNgmN$@J$Bab6yw{_Ez(m~TMhOX0C~f#OR7lmBsmt-#IpgGeKqMtmSqrw7>Y{tlvM5+goor4edK=}fQm(Q+h2 z_D+3+1DtJma1|wmL{ul_+@2MYdLfBv%o28p8G#V!6UEwW7rVmDz>~oZTxhkW-|uL1 z-S~~vyEDx@-L4F>sP3P)r?}a8G`?;*#XR+m$!F2+l>mvQ_C?#}S~Tk7`C)d@`5gK% z-nW-+7YwMwj6t~6))T%E57YDpb%t4+v_w%l7Lzg2o_v1v-%(V8+S|Y1!%wH}Q!sS;5k149 zM8pE(2Y7d?q;Vcu(GP^XCNkk=(?b#+0r-{#7zY)0{Ub}88;QXndfM{z5j^zn68vb}i#8iY82;OJPc z#e}rFL!_v|$)fb@ybiqO9_W3RDK3)x>!0RwUYmwAP84w}C?BYN`sXSYmdwpyUJl?Z zAjvK;exJ6IA7q^!o3jLb?(H2YiWWMugBjg96r0t8A!7uNH90omEZT4zI+KWRHQsHc z<$sJXBrSQ8Y{V6_67q~q*idm~P6tAvY%Dc|?+7d%5Tp-?5}-d}<2(7&e3ew*elCM+@|PP<=VGAL=t&&o*jO)-m-D_0lwijN$7 zWO^0_fBDqo#a4RM>EUW%6V|1zCh&q+gF6IM+;S0*7)1PUSVb6Gf)wMwe$F)QpRo%~ z$Ua|lpAcLaE(>0}-hBX0c-Z%3CsK;Lr8;L~ebcIpir;ciZ6!yT|0wz4wDw6pgMW$p zoj92ri8#ruW}KJ+15vZ+qa2e`e$+g_vt9K|pe|(sa=7V_uT4oETT}uYh9Y;jogc9oVH|Dg#q396)dj zA^z)+ByT(sbF`?3cW&PthTNqq(%U^Y3|v0VHt;@NHtXQn7qv{?t=Q)Y)v||8`IY>M zbCDO}aCdX7epzhzR;6hMU$NkU>KuV$rMk&`(-MN4e{bT+?0~Gd_##;LG)-@NaHW9E z;t}o52u^{zjE!gJ(xDei{3N@xjKS`*^ws!uapD-?GHUix4N$CE{kIX% zb>|t~){JC>m0PK#i!GhfZgT}=*?RVV+RGK?5be496YPwii@#%jpT@0dhyG{VTklj3 zSC*>>%aR_~R<@0l89=X2>HH)z>dgHSZ|U zpJ|%?g{jlX-;U=o(s3qa@6pDa7)z>K#eX;v{7WVY{XSO8nN0G&_Dx$x%ph$7*{c5@ zY1PVE@s3r-^R1KM$5G#$52VmC;@cGT3lfEX)l67wVf)DQRJmL1NtT#g_4Qm{J8C!^ zl|b?TQ|yzIE?(}0m^u6Jou3?P`u#e3zN=8p&oJcZHYM)s7wZ02kf~^Yu}-DUop*dl z>$`c2?Rqnbqy&ZeFIslWgLVr`)f*Fr!ZZnr!dF9PIHqnp(|*jg(lX6cZR`-0jm5ZM z4-O<^Wj3AB+W8UI4?jOH;B#9Hgl67_zTRnY3BfKvmh42miVTM-g0^4HaMQM7cFW3) z_iD4z<>`t%FzUwZPq_QppQa9dfiKEQAGt>jA!)T^lBhCJ-oHazrHIL2>na$g9P~#! zwpQ5%+59H!pn8BQAlCBC=I~1GYU)i+89a~TZV;>I+FeoxaLGNhcLJtB;I2SAiC#`8 zNRXVwNGE=ggna;ryOSO~hcGOOOhSrH$VPZ!Vo#%f56D|BaKDl(_Csn;x~;uMWpE|c z5XB8j1L!76SiNGQ$!;pjFtzou-)+AJH#{$RlV4WkXMuF=Qzj;&Qy>rSefUO=nq{z- z$EWoO(HD40Enhpe8@0_6Z4>$L<;xAB^P5j$#2DZHn8&5xxjb7jT?oJR%Vug z?>4_M1{BtFIU@8eeK3NZhN}GV0~t;M%Zkr31i#8ZOKawTu@)YHJQVzp%?Unq0KHWK z2^6hL)1&uxh>u*JfE2oU9+ zcL2ufD6MSvAOLFmng;*3sJ(RK#wq1yv{R~4QwO2Scr)JGlwQ$Ay>-g8>$KGf&GWK0ClF_xlzdda z*Wk8cXJds;q6$;UqqBNKP+`Er>9K2m9$1{~l}nd3GnbIM7ih1EI|NO7@ZSxS!-a+7lf9fvlAwZYt%_y>`YTdkMO{nLAyG`{MX(5Q-6wa ze-;I^tZ9fv^pie(n}~uF=Y@J$O}z}Qo|OL(SJ8clqDPjD5J{)GN&WUdj5_hFZq7su z)wHUvQ{{eo>TimUoAr(8oaUbl^8t<0mxC8iO1~7!yut;|9k*VMX=SC`AaSv>^^{0Y zU6+79u!bDiROVS#|MBLBW*R_5asQ^jc)x-cM z-%S$}LXT2G{!@VvQjfD-Gi8|HUc_+By~aJAEWC7qK|{eOkH?-(Q%A8k+~v%mvU57XRNB*mUH+^lulr7RS7##JSikMPrFJbq?6l#daNJm`~jRwaD_ z_;Y7QnqpFNk0DBkEF3W4T(LD$*ss4bDdgj1+*isu{5tkI!1L-y{bo92Vd>}`?Sp4W zcD%DAl;^QzF>N9*rd}Ldl8fx*d)5~ zVr#wqxqAYV9mmA_gyNDF!p{32PL_|PiQX}$J$U$)WVJ;Kl6{{~|tDF;3YlxCX~E2l>w?=0^EL{Gl&@Cx zYVnSvC|$Af!xVZ-KPx%SNbCBqgw0o9YNVwI6qxg)pvq&?V1+M<#6A)4#DCFdI$EiT z_q1_u7^7AAuVQDC@_ZQe_y}K?G~NVYpxsV)nAR)jFmOxilTAH;vYx-As7T)Hug~}A z^UFYuog9E>tDcV-pLO7UC;ucqUf!gR>*0=aR+U+uksYb!<2dfIzlO9c?HuRRmBC(q zvpr1u|M+=|H=n1%O8G^+XEay0HF0+t6r%S#U@ewj3@L2(Vgq;82;RT#v$%dku<8=9 zuu$sz5Kxh=2Uraw&-R~G9T07$ zl&&ue8D@IQLuQi6M0lqqv6V9F=<^se^*Z+dWILhF8VVHU>WM#eeA232pWnb--n;PH zKw!sE(Kz9L{Ic58l;X#~t6zj8Z;Piz3i%Fyili!n#B(*KN`*Ks9=WlWbTthuO7$9Q zQ=qa3*dNiaO$~EEGXS4ok*bo#+;?E*NtGCPxQpok_d#9NG%Iv?xmSOeU6C-k9ffju zeAj(@|FJxXr6~ueA#3~0CRh4NO`RwABLV8k#@WMZyCFBm)1x&N^_l+c^bi{w{C6R= z(-!sG3B{EEA!&rKrsw5ndV*KbO@3W}tz4!j=~AGYvw@HqV<8%mHZQX$^$@qVetUJrL{-2b zw$trm3@&WFQ?u@c(7K~?1SE$lq7;(l4MPT)5rk2O`a0_7up=I`rJxKJwc)CF!)+CI zbiRd+Ddk+}wZSoMXwb8&2JL_zMR9)aU;f$FjZW%r{!KM!)n+RkgOaK;o@IjBCH1{W z3u9P#N{UXrT;VmQr^6%3!Tat-*7g5n?K2ktd!2j^IM_OE){yaM@|X85=p-_@LIGzx~w!Iti)?T09O3YSt0$tcPZm zTSoR8-ih22n&xZfi(2d=eAa@7fZu3wD%K;Hn{cs|eI*wzirdc|e2KB*acA$s6e5D5 z0^P4QgHI9+;DJvKBmD4_q3kS&ch@<0I%!&7d5GZiS{~?4DD!1#x;Zut5m;E07I3~- zvdZ_R?z~4;lv%$GJzBxQR!YBg^hW2iN*$~--(8ZtH|x2> zSlpF`jayvzS-jY_sjl40@-e4!!T38;dMzH?4hQQ75D*FIYbS<+Gju>p!IZYP}#dL|eoIPAR>7@-;!WeA-)Q)SGwO4_9FTA#nx%oU;J% z(Q{zgTHv35F3*EpJHMd`Sk4q8NcemZ`m40#17pne(9`#y-fM7|wR@G0Db(X1OG|}% zZcS+PNuKT5^6+XU8_`&PZzbCrPe7UN>B>*}C@`B15$CHs_Q!V!z z`^3fc;h$-zWlN*go5Vy`WSL8k$w9@uRg=c7ecmF|fo@GN_=j6ljj5^(%QVgxErR?c z(2aS+D|eSc1I#%IE1du07Kp2G5Hk}nLA)uVatTx|w3Fu& zrD9X*@~Me^adaSNu4_jzno`EUVsLQV7;r!Qxz#U;;vkZX=UETN?YV*`CSX+M$zCbC zYUG^nY+@x8%W&m%5F;POFy3CZ^B~W>(m@3>@%n?x;v3QS~J^|VGjhgmaEV{O+1RX6r0y_e!U%Wd4E@MZxboll)?9b{I1^re6FvnEpXNB_>> z13hAHJaP3Z)TE!q(ZM7i@*`F1@&y&6nv|ceKlecnC=q5dD)XzZp z3v9O&EymvS{k$(7y=s;_Jv$lJd&;XIsBmw$Y>Vu5mbDx_uaq`5liBVb& zgj*(forIRzaeqzzn8B+c4JklBbb^2FEiI2ldfWb}4;C~C+TRmsd5@ZU5R>-E^4GlG zD^xi*5ruK*rABXBK7?M1<;#s%`%q$vHsVpFRgOeOv$3csIX2ikL}%L;E4{+Dw}Cn9 zC&TVH?Jv&@KPXojm9yNX1(Xu&$1TrWt2mJDtmTS!b1f$4Z)kt&b_R@_?MR#ZN&Oad2eK!8KFOra3lZ}i|2N#<=zqQth%BeUDK6Zf z8qr?G5HOW|QZpcD`RjvZ#2MSzPr71anf@zS>G!PD;U^8xl8~gPP6;WzU~Wq1+~ZoJ zO^7OO+?N!15WrN!be`OmsonSOk^>&G=vW;M+Se)Wu!O3|GeT?QtE+=JxeKY$ho8#Rz|5Sw~%m^!B|A zZh3W^U(-1-eL9$zSHM>3tn$P?iMdRb7x(prN>UwO!*~Ec3wHRX?mm;)%Jjd05e)pg z!j}wf$u22%Xbz|5ORc}9HH0U#N?O__8^^21q+-MI=nJdE#uO|GiIYBZnbCSIxJ<|& z$0;umurKCW4T*PGv;g6eB<}<*DLLFBcnrYU%&p=gavg8gl2z))WOXam*k=#$bLYkX z#OmdFN~-X~f>bH^k&s^Tg2-sVV^NpZ$Y@9u#y(qV=h?30)NAYJ%rf-4BfN4}7(jpN zCSz6g5%gcUw`|W1*3kaU);jQ{ZVlL8BSsT z5$2^$YX2pV!$c>V#(-OVS0_AHbx0`V{HL?X2O!Hq?#beWDugrzMn7!(iH5rqG{rdM z1C;W3whCUV7KA2xLRR2>i}bRpbX8a@oL^ePe&Mb3SSnE0W9)p625`=|Ls0hprK4FR zbGckS3rW6r?aBm6r2BD_5KOZY5P>?-fw%bxAY@f@C#4~$5l{E=VD^7l1uQl4FeqAN z9*g$uVm?0j))rkAz4aO~uEaPevvVt=C@;rr3h+j7LRMswJy%T2Mwq;t(8ng9;Ca2c zTAJ+3Zn31vxCQguO}C3Ca=CAuul}bDshs|2D}ft3pR}=cgTS{ZksE{y4ap%lJ46(f zpI&`Z-^PBdn66u;d5-(f6Pc}j^k$9J6`bdCAFm-@>2wNx0P;>f-h8yObqbo z|Bwhqf}W&4={AP09i$ZuA?-sInx?6rGP69Ur5XWr=f~ru@(mW%as%|UPiwlZ2qX)1 ztV5t0ER$~HC88y}B|N8CU;f|FKcy5xA6~7sdt}#2jqd~l`DPsctOdJLWVVzMd^1&5 zr)MC(SD;5~X|q@ICU$7oclh%+%=WG%Lh^hF;8gNLPg^~7t3A%dQhvYWwAW43p93>3 zgOYL#K`**D?VQJ!O}q=mDIw8oV0g-Q`&IfpX)AY;?T7!T1;{V_wm+*i+H?xS1Ms(e z(!;NawTS(YLqeAo#%rKBD5m=DA-?7Jm-}08uCn-z0briS){W{sUCR(5 z{&vo&6yvw6)X;KP*-s|e^s|PM;}}wtt*h;(w9(qfvs!ZYu|&PVkDUp)Df5bAM9kKb zq;8U)yU_+L79(#ZZvt&y$4jnG0@qRVP3ZIp_uqCt>!h!z_&_aOrTFmI+o3A#Wb;{h z@~&B=AK^|-Q(?Km28{vgnIynZJ1c?>rVqb<(d>=OUk|OBn;k8K@k2KQK(T!dL$z4XgTuMb4iFy6)fLgsiX*^A98Q zJt>1XnPv9IM(2{FtaLX_?>#n zU)fK_>EG%kOfpy6lOhm3v-x+~h<|OT5-LG#0rqjUPsU8N8(!~Lvt??Mj*G z>xz`mOoeS`G-*^sZ~6bT8zmc%B4y;+4jXR$EZMv3xJ(Q4xrkJoTmI zVI$$DyPVMsvi0m0j1j;9lXRDJ9TRk450VP%keK6*N<>lM;U8JXE!E14OzU>Cai!>` zez1oNXzfbJ#;<2$x}H1RKm{E1{_YK>&0D+_N$$r}+s`tqkgw9T_2gR-WO7UZ13v06 z+2(vCdHX@m#$sQPHJI>y8U(<#TEKmstnEa8hR*6{u}MSka&X zqp!Q?kVcD3sdOmm4n!d&L7A~n!3iVa3^2g0`kg1im)e5+Kza0{5c6iA$c*srT*1(G zwadiMAhD9o3T5U0;_Pqyy=yzxU!!RS-uIlvq5}yVq3ePAIC6AB`pt$&OzG5|z|0th z8qg>VAT#;vcJmFL6TpGs^b<{)yL07R6x~Px+Rn^00br1-yl)Kvv-ZVF@HyI=mTZyd zkpVIgybksaniN~T>8*RK))G!z&*8JQW-cc2^pFQ7Bu>034oc@|A^7LBvipOX3z@+0 zFZoPEX#EEsiQ7`FyBHJE4}rXJJuDNg7O^=GUw+L(I0Rjs6J8#kEE=THAIusDU;Xi6 zE{wOJ$r(%#{9kEFZ}%r=wpqCUrE1;YQR5kdGEk@ryI+)^SsRO@bG&5!+HX9V3WoK#C@V} z-38z6@FYi~%ZU&XQ+{+a1LtGqj~Z*wAL0W) z#w>{^&^ej{NUC^Nza!=lfD@D%GIwSBk7X{mX$#>NLU6m>Dsg!%@@x;s&Vii;2sdluE96TB96DvQio>gA@l1!u)GJ!1n+lmcaprivGVB7$rfB4f z*8bj7_C((p4k(t$^9w zeS72AY8Yc4@+U;y7p%>c<7MQ7e%~bt@4rom>5TDkC6v4DZqOI-53*FOL_s#1McaMa z4{mIo?S3#U1~g`#Mzu_NF0@BR3yYN#3H++YdmrVFE(t__zROtSR)WKe0Iv%st)5}k zEnm~qju_91$}7f?nE#4Q&^(I5o3AvB<16ykqyMTPr}$HX!S-UDs3NoE;??7jSSwyC z)aJY4=O64_l;b@Q0grbTLn8o`W5QDS!d05I;#(SwK9KPL{?y+?&c>Ko-Xo4_RM*Qh z!*$q&k$C;qqUs50j1GFf7aGZbha!k zmvY8H;K-Ql4+IEU33eH~ebd)COr>BKz@0Qs*OXQ(SSj_2VN{LLTI%aGjo)(yxYuXW zR>Aqfg$jg{@!@j-)4J&AdAPqI-f=Bp2DnhIwZC-&q`P+DsBeFh7A~_3%eCD{&Sm_b z#l(7u5ZP)yrn=dIsM02eD)T25l2GM@jF5uM!d**Aaps7I%9LHp1HP=|uo{^1M z*tV&4<&;5cJm5yWt`M)=+60CoELBK%a5yubC1L z`&p0rwrZi`+MHYZw(<9UKU-S&T%F_Csfl$pTPNTVVXxMrW@V`QTZ2tYD>Vxzwg;#M zVq__#=PFGELPx-66pO77Yd9GfX@8TpXOM6(pY{MQsHIPNQH~t) zIB(Pn!>o9zbE-s(eICbxLm>sP7n;pI2>T(i;z%i4#Ku5YT?pEh-~Amq`Kd|bBon+2ME#@X5G4#vU9qrzhdds%+^$Atm5Fn zRT+F`B(moC*ibV8t?bSIsWg_8v*k%&nl#)*J#(eajKH zHjhMefI8PHc;GtN8py(MLS3G3ePD&HjlnZB*(HF>#e3$eosu4%po8%@@H1WKGV2k5 z0-TJ|XLwW3ed9>IzqxDnOE1xug6>|hPB5D`Ko+wtl~;2K@#f)PzCwLE*=%a8uEH8b0y zn(p;tv0TRn`5*uAp>kmN!7?{9U(SErcMV6^_Yx&!!>O~L)x}B0OVyxKPb{$J~{I0jw?RFq;_$(f@xpGa(E-}wQirVD# zfKJfCK1nxcY^Jvng=b_g6LlM5IpM-hw06oOJ1=!De6AQftZA zudC-Xr|Bacg=O!PJP*7>(yqqZl3id-?uCriI>lc4djdv+rvfgvDzvq(^?-F9*1vPa z&h{DaZ_7^ZeJrqJ=Gha4-k-hjpKDt98=iFjb?hlT8P3E46AN4$7MOt1Yr~3@V_a`7 zaJ&Ee%Ccp8s{H#?9x}WJskK+m4Eh%iJTfnP&RgHRFp+5ga{A+ZR<*|i^Mm#p&3W~* z#e{GIIW-uI`l6j%tSNqZ`C?W?yG4vCpC%=%iI&W*ibNCU_!x(Tg6Dw!62(@B!#S5; z{I}10W7)K2x;*3w*Zn@D*V{$(EgJZH|M4Sb&t-ed!opHH|FL(kqlmx@&<410LaiH4 zKSqjk7|>H4^m(l!nvl;mrCd5LR;=$O3fNiW7@1+6oLaSmjVZ!Z^}tcuZQo1OI641n zE!|Vj|GE7Qa7CFqfS2R0rY`EzK6f8UtJjL7Z>c1`SRJdt5Jt$oEY()PMgS?PjP5<) zuxH?aIRKlDBCx_%<4UKawBV5%t^FJmfRK_OFwhiT=j%Lh#$9Jksh4g#-ooWzYh&X4 zz0zn^Z#}e7L612L)8?7s`2gT}=CB>R04HG&E0C|fSpPqJ?*V36Ri*v!s_N>T1Cl|4 zfI^F6*1<6$=m>%V6jTgj`1Efa6AXx-;-@q?!00GAA|NJE0gAFNKsi}X zwS)`Lv&Q5u4T*vXqb%Ha_5@o45FX|aqWj3&9DB+-6zR1Ly_4I`>dKnPwM284S1vGS zy+9P1dz2Hj!+8oh^A=eWGNEYX9X>;Jv*dNO&m6Jd*(*!|R^w^{Df%D<18axp`9@$( z2REPC3jEoR;2}>Q<~f&pDKq&pcer);4Q7JJe$?J)tTT)758Wei6|tvsmB%f6NjIgB z+Ur^2=_lltZyt&*<_~PK$b%Pnuzs0O_8N1*R|M1OxI6OzC2BuGCsZOL$BJTlXLgo zcc%+3xWG!XOrAVBz3Nr3N^Naz>8`u(O0Rj%YtmP~@|84g+O$p5r=Fgk^ql8B$1?T4 z;~nqVByDbrM&|$ijSw9Oiad|>$`j`}&XC#1l6eNg2XR1= zBez>4ZLWj~!ZrI2OI1TQ)iwP_>=}!QgUZFwXDrJ6jk!R`_eo^JZq?WWEp-XLmit) zoU_IuGqUolgbPFrWdhHGw-LdD5JAux2d=3DLnP}eEzj9iyk;)DSie1y=Woo1EV9h0 zln&fixg#a7Get&`=#KS75-A8S35@6y7Iu~0^4Q^84M_$k)&cKfPtKXp-ayW29}BaO z`=)J_r>tl17L5{$WK34VrPx#Kefooy(a3pG(g~u9D=uCJV1vTt;k8-W)PQ}Fn?TsB zbQ3yT-2M3us)j1(ixMDdtV#fea%mFg(;^EtL>gs_T(fQMcIKF4?!DpLmzl-?KaYCt zI_~D1;;fA}0)aqa<024bbmQV1Z{N%jc=1UWrt$5qMn(~S_|Rjy#GS4bd~qKt3&C@r z4=&ar1Rx2Ye3)@RLQvRsdRcY=;g^p)i9@W$V-GQHl&mP-v>Gfc)Epg~6NH#{du31R zBWX#Y-A2HJ9A_(S7W}e6GGKy>YMb)hPv%{gX3U(F{^ei)d01v*haGlEyY9Mcy7t;@ zt^Gg!=}&3@{r69=c*QH~_cnINAZwI}dGCAQn_lpO7i{e2Hre}c`_rOy|H6k;+nBa= zz)6_tg7g!8xT7Tj&tGz4c|5IOcV z7|XR*8C?g+Dq7SM#d62F0nXJDE}Rb}-BCtY-VG_iiV7i-TR!80h~-3S?Fq#dW5UYG zd7yb-Z#gQnK9}>!++&f3-9oOtE2T*5-jv@d6mUu+C2Ms3j9ghL2WFP;)hO)9l&Yjj za-)T4fjL%H%R1acnVp>QMp=jXJNPTMUhP2Gu-4H&7^s8`b3zQL$T*}6OFm~Z*@IPI z6sxkgJcBXH0q-iV^OSZ__W3ef;E(5tPizHgs;tgexy=mEU9G_q9C16RRZkruUke*JO5;@3%2}4b6ycXRLq69_lI^XnWUk8+E$XFfib{?k6cRpKRRrm`4o?uaetyN5zo3KL?4iO1#~ zkd>P6Fv=!y683NU&J}58cVGJUyI$8&QfQMMw$V@^5D08k1cHoiRCwd%n>zw8op)hs zZ);0eef(d{;!!PHuXro!5{Qq{kydTW+g?i!d>#V zN+J}V!%B+#muimIg}fC#scUd3?NwM*xo<9$tt6t!f?rNnlaqmXEjB{xwcoxf&E9Hi z-Hmfo&&Qs7?wPjUdg}(_dB`D$q+k8&S5{ASB$2~SjqRO(zc1bKw|mq0iR04VZ+Wqi zI!Ft`EJ7!)jJVi|$S5%iLMMNRO*qwJeNk2ph2?!*FY(u{~?`NyRg(U zPO_mw>^U#|a|qs?5$xxkrZl?cleKup_%fp~WP)Ti5KxQDYt3$`%m*Y#W1`(#&5gFb zAqi2oK2we=XBZZdgWQNrl%%iEhz>523L#K!P_pUDa?JDfGjjHXI+^6YN=-o=@KLR}HmTv3?izP<3CKlYJQ)NH=3t@+jt^YGLiPvRZ z#3QrzQTF(nty03sDoNW$8Y@|+ao1*_v7Ti4XPrWH!AzNhS&#G^(vFe|C6Mq7;+vlb7K&K(eWwr?gv~E?0H~F0*}euZ%fvT)VIP z)@5l`Pha}eXAWtoSG%dt+-NTl2n03`0zpPM4zBUmEd+s=pK_6X+)jVj0qc~K;A2aI z6%$DLVi&~kfz`dHv6VX(A9xaycsE?0l~BOPU)c^3va4=d2xKdI2kjXjFU7}yNmsum zIYC(BQi2x*%AAZM3nUaq_i+NTx*T4G}!!jey$moYZ{NZ%Q8E2#` zuDBw-{`IdPmVS+dM(@4lp>*>#3)94D6VfgRztEHsN=Ab4i_j=najS9IJ7_V-5JXu< zaJfWi_O6w-c8k&+WNwvJQRRbBwurPrSRsN4?h@wty=qJn7p9D|tV!Gk*>AK@rfOU` zA+X*8gH;6bhtTaW_QHLu`qN%BGa2EcecEC_Ai&datY7R6xghf#f-;sf#e;GWD=h+f z@4%2*DjqqC%ncj6`DIrIkFjf`1xBFe%PWoZ}(M}E&O&OoGM`0#QQi&dc?{B8C<4@;tjfg0(?>|8G8=Oq%3YfNVvUv? zDRY7~9k*-Nq_2?)83Sio%j6Di!V?}7Hm;C_q(6@2*?;fjpHmBdQLC)3_r^>UB`)x3y`b*dz3Rcko$xksJ#o7B_W zm;UE7Wp0O&aE8Yi0)apvBM@XXR>G)8;Ga&pIQ0(=rE}hYP(3psfbao)a8*v6qQpde zZ28b5sQ9As2yT4b(HiSn;;@KqLLlIO2!A&`)@9aFU*}Jj72fGfDIok%_YpxuWPsSQ z72N|Cy9YVWg~-vW=OXa3Rv;uH=pt17^*dLkZFZiWUh~eE4$C}O$tdob`|Y=1y8ZUs z(*qAYkha=tt9rj4eDJ|^+G(ey<;$0+8*aEE9dyt^>1$v6nq@oYI`6#m(jWftht$>8 zWwEC``;wQu#QwIv-_~k1i(UP%|N5`=?svaCedt3UNCMYV?B_U$6oGYdf zWrt$ma2?GxGKZ{gq_@CSYfmz$ht~9^<=ulu9DH0C${MUM-bD~=2WuZPBZ4QvU6v`< zFNuMCMo!w1^=IEX6B@8Y$i8D`ua!%gQN3m{ zMxUJ;f<^o*eU}9ZVtuF8EX|~i3&P6&hMf9DV~}&&@^vSbRh0cs2@hN%!I{0uzL$V5 zi!3CHeJ@N!#(Y*$B`4w#f%Nk%=L5t?1WOsWtMR$?pZVuLE}xnwNIYi*WX7L6w1q1u z1VN=hIqBsb!p3cpZNE)<6-6i^VbZ&>@Xu=_>L7_d$==fp{)Fd!z` zXYJ*A+=U_Y%n9ED)(&K!e(=qa1(x>j?C4Fi_&ybGYBb>B8k4S2O*;B6Z5}dX}94l<&xZhv09^qk;hS9yJe{t z#?E=gzMpr=|Dn}>ii)nK{zM1XW>Eby*_}`?|GE9- zfCCON;`rEOkEO@^?I%C^$@JI1{?!QQcfRwTgjJU7-~avJ)2XMPnwBkFX6x62>q-N)(wIp!Y+w$5Hv*?q}Wi$ zo0TtuT$0riLEMuz);>hS$F()9F$qD0I8yjws|h)Ssl}4kNQzWiKV?lNJ{97q3xS_l zP2#i3*2#sCjP(~w7cP^yTvCRDjJv#7*>HJ|u|fiUc4`E4GFcOkS;mfL7y2q`qG$FIov#8THnLR#DY-_c(hg&!VM2Us4Jc0@JO?{SCYEnY_u-=OFGWQFY zH^%AGHr6-1L2!R&zQ{t%`XMRKP|5@o>|}XnJ?Nd;g?h*`mUCa^a#06$FI$X^N$J2@ zjIxorR4rPpx+n(CqCPn%?O{zox;e|c2XcK=;)owGg(l<4iVa<6NyK{I(qi)f_RJ~Y z5l_xpQ@BUtg@Ymji!uL=wHfUFn&cZJ*LKzh?}WrMKGqoXr{rPuIb%20)~}RJd^1G& zRiBhOlIMcl%FQi#>R3Bpz>~yBj0rr{C&sE6V-ZoGR{lnl>J~_>mupE7gOHvDGCuZvfN{B!n_RP)s$9aQ*EGlo$r65~iT1I6kV^!R zUA?uYC=Wq#bGh&mr-U$!fHQqutM%!e|9er|ai1O1s}9|7SY`lXhb8migAYzW{NWGH z;)tb^`~Je}`K@n#E4}&6rLciza__zOPT%;(H;n9^efHVuzylAopWS@(&FQ9_ZnC6A zkM~1Xh0>T)u7?C~Imta9ahRk76lM6ZTf>6)~!n3S$%J8fjpS)9LANcoeC*^WO zs%84z*%Rv)S*$G(X_PHw6xEfJb@eoqRAP@&Dn_M6p5dI;!=o&(p@$m3quQ zafTDd83%1L_mDd7W2Ie&qH%R!+RdHWTGOh1%kz-mmX;Qq6NsF?BRp$y z-z$0yC%Iu`rN{c{y>ObjHZy+6F-i<&a#r%NoG7VQS4@@4rm}s0f78+~OQOX3RexC1 z5MA~Y-x;t_@+j7bx13kAHuFyQIGyrt$SS3_@0^JZuDv9`;@yzmqt5ONn0#6?TK}MfGEaOdEAOf#G?UK|#STiz;RpFLpJ(gfWY3~^l763HB zST__qiiQ}$U>lNL6bTvl*pqYw;gM(gCsvhQ=dX-AwGteiy{T5ivQieOM`&9}Y?+Jo zLm)vI_kthR2ZUCHE(yu}mXA8ZA0KK7dfz|(muZ(5JTtxO;O7m??0C!QXFvN{vx@%q zx4*SgFaG-c=Ra?*wmsojp@3(px)=w;!f`Ua7A(;%VB60}u)S;wSuaBAL9lVn=6vT;g zvB&7APi}-jj8ISJTwG&CO783IvptR5pxlKm&T~z+=(4A{s##x6@Gde8o8{FdR)X|F zCVUwR&IZUi@4>ZKSw$iJ-eZFIau#4gVlI4g9NdVhkIB41oJ4T=Cu2n!kjrTFrL=mWopV1cPFDK$~vD5g?gIIKN|Zt#57nl9I9<_dh|hRwRiwbn|w zjBm4bCd)5tTTgK`wy38H(g{2dP2Ys?Q z;{KY&0tT?Aim6=EpFq;>QRnlP*nD1r+@Ixc?RMUi_55fB1C zz$9GZ_o|g9VHzQs4>dxbteR-&`G6zbtCnfAQWB8R#cK!BGbW9xyBDf70KyG|pWLjl zLR|Xwi_`O8_3ZS5*F1YzX2z3I+-YC-vX`aBix-=VE$*(maHl1q5wV$A3UuK{+t=5Z zw%cyIbndz5niW&m;NYPB?TcUh;(C8Od-iO5ycrpV6u<6uuQLlP36+RJ9XmF=f$qES zzD7v7?=SkpJ2wY1O25wd+)vZ&?PsN(k9fHeA6Zrq{A)wRqm^VJyJ2>ltEuZ_E894jw|!^D6y)scJ-{>gAr(P;mh%=#C`TyW@uTNh})aL ztjnx~p4?cUET%QPooYq+46QtafX+C{!U@3;nSh*Ofs^%$XW6${I@!l~BPf2e>Ozm3 zFPU?z8HU+UkQrZhlJOD$NC_8|NGO4@K5`G7J-K4 z8iH4^k6IhDeXn_zyDZj7@9vA6|Em7M^jxsB7)OX~w(|KHRdC74nQ9gv56(J^yhWAg zAQV_yal7@&k-(mH#hRk8a-)UZs=No@9jr+ukkWiM%lb@PN(jf<$yqAvHi?=t&MVl(wBbwjSduBIlI`8SDPkha2^zGD9?ThgB9L zCj|wH02BtaPoG#@RSUDu54rNPPZ&RAfe4ep%O}91mMjV*9Mz@NWZgmj_}+LW68n*L zwYzg|#-*OUJ_a}J$+=vPO0Iw-bHF>mo_)`F{N95!ve!`p&{veE_pHj6W9AqlEK4*o zt|)r^+LOYGzRMz=y&=l-W_eC(=7No@yWb~OB?`~J`HU;m?T>Y&>p%CFb?P7w%ZDu* z4Fm##rxk%9qfaZG@v0rB>gy$zX488bre z%DzD(o@k>LJBQHT=!%z%+anOF42J5*Ap{{*V%=0JiL4#Y1VNb|v8pI`j{68CB=g8w zN;8>4K*3sb<7t=Q0b6Q+z$|McP4)(NIE zih43&ZkWrlT#|LUv~)2p6BK&}a|xD~OhzCm{5#~5b;WwTr?bbNL&)@25T4~X#Kv*S zJs46~Culu`W*H%d+FO8bS^~K#6)>6rb35%FNMvJ`D=A5lAe2}Dv4lYk5V|SLB1;dy zNAM=ulCS%j>!VW2qS2xYX@j(4nPI$;HLSE)V||8U_7lVx;o2uJ@N@6|rN+ihf!)yBuca4cYGF~pZA+yF_>i{xNSImhV_J8VCde8yA5fqZ=3Bc>89Kz(L=>EG=Ez zYuR)qOw(nAA>6bONcExj)=T2Lq}{KQRwaSi+9g~uAsP4DoRYGX`)mJV``yaMn+T(@049iRqBf8Bt z+n9^3E|L@xclqTne>ok0{PA|1_)Lf)R@0As8IQMlTSW5;pR*1DT$7V z)x?7O^{;>Z34hD`+uPgCP4}Z8{b&OY-23#WKW*80ciU~Z`rokJlJyr7{PB-}+{i4h zybx&q9T#4#xVZQZ=k?Qhm!-jh!F1#o-(=lTX$gc}mIY)0VICrZl4Fkb{cT z>`f9J{DEBw5d?Is{}3o8@qq}+T7)nR5%YCFEhezDFAda)=PLzb+9!U{NL#_WEV0sH zCe|Vdw1tq4(CsankVX_l^bxBj#0aYn@sYUO>cRqrWr;RO+9EQ>p2qr2UsaZg{uB2L zaS)lvWi)bqRFM&RO+eN>rX&DDpodIIVPKX*;xs3e-W2qWxhH`dm}>5o&6wXSBP!1} zOE6P)Z&*G zJrpx6PZ2WCY{uymNNEk=ii?GjadY;gDCGOWcSP%fXCcjugKq)v)f(|hgm_M2A|$!n zYCc-pzU||C|I*@SWlb>cp}_i#!dQOUQ_q_-(Qwtp+40RQ{+bs2V`;iM z$mno>Zldi#V51=rWOSoJ8!z4x5IFcdSEOZYyVIZk?a+F6`OqVjB6z5bgjp|F^q2(_ z_a%fyF0|`dCb58uwBqiIfJ|8yU3`@J&>}SZG8lY-AM5V7cgp&T8!tix89dQIBZSc( znna5&;YC>?5wsLPh44k~NCXrFk~6<>etPXYUy^p2yW=LE4lJNpEXi7n>npLMha7T9 z+J5`(tsn1s&wI=Y`j)r6#jK1ZCW72ias}%r#1NwRn%BI>o~K012`8Lj8F3+@BoaFD z#1oBVa;@*Tlx*QW^ke`1_cwC;+~+>Goa>Gbd)Gx5U9=89mt1m5`ob5!knX?#{`At9 zzSJ`6lJw}(OE0z9Q?lqnhUv51dp9Y_DW!|Q^Sji!Y;}6~ac{22)J+_dV-8h@LNy<& zbq-mR{0+fZYd2@v9ZY-9EZuMsKp_dZCVC|bWh4;XefC?PLwH9JR?-zLZB=U#ZmbCO zBrPeOva|3Dd10N)^^ZMfbuVXTAz2w_A$PP>w-ojcn&3;q7GJj%f`y>$lYOCVLJ0&x zlFM*C!!YsP#r`%T+1Y3N+1K&4@)q5>+=pECA-7z-Q%Qs@KD?vXtYMU(QF0vaLtG&V zvP?m2A=1Qj;n(1vK5mwF`8^4TaG}+?#hKI5Q%h6FWyL`KJnA7i z6X(`gv$k?US|KB<*{Wy3o;C3Nts0Xfd6#Lq(N1VIzX~%|R}iH?Wge0B18w0$)p&vlT_-%n5DvTG6ym zTM$9|>C3%9?jgY_0U=;mbg{~^rXf@ivRwWrTk@6QPWXW-*?#$UuvR#?`NlxFedbxn zAp3`J35o<+FY&bTR{DCFh_fm(etye$N{PbC4AW%$&2z%CW<0pa(!Mf5<4HjMY(ht5 zIR_{55Kx<#vjp-@JB&NGQ?4h~67@B-d6x490_@|Xn<+NH6AW<`_ho`q-}lU`Z%EhP z^+;N9?Atc=5gY9V0)fCLKp@EICIC5_*nAN zmx~~RyH8@ohZVtBLOQ}=YicoJUKhd>u3uBfQC^|^fb#)HfI<^3D~8HjV6DMLmyiDK z%d^JaCw@SfK|n;y&Bq=q0?*vMw9AA`1RAb0KL4}y@}pj!_TDFxz_>;h0>AmupVC8j zKAPTj!lAat5N;7x5frV2OA%8B5tZNx0v4~eqC4#}bzGgyAv68r z2x1l8ecE`73FTrvVm+lD)h=vS!X+o%=`#zGk2^)khu}aaWO2zvw6|XO62%NwDg=J^ zq58zW#pTnJ1`#Ys4#Knuw@4fA@3V`(Gj93>5u^4d7laWD5-z)7B7$kav-t18|$Sm2q5mVK9jMx z6#AGza3)TccH}b6oIpl7i{whlyUj|yrr%Wb;qLl;2K=6vjwqky&THQ4b8oUiLB@~<$^q9%0ywg4lV0k`-C+|GA`O?zmQOm zapGz%<)=s^*>Ja+n7>bq6C%hnv;%JZj{i1NU6feTI8nfw*G}=>p-=pNW+fihyokE` z)4sDy(oRl>J34wzS>s)PSwFbyqpSI?-b^fxzfQAjs(G zoc9=Yfxz3p|C{vSiZ$u_&mL-VZwrca^4_w-M{!xtK!YY5;TH>}7yifqNE{-Wb9H6Q zN=}-B03v}FEi?CNM;~AW7w%ytl|YD)r}}Mrj(74=M+j6QbJ|l)w>@T#H^GbxGP?Jn zFG??e$unclM<4=!zT~EK+x2&+*MH#0%QZ0M6Ll1vLiHcB8! zsH|$Ldr7@sh=^hbv5;Zm5y8TO1QA7mhcrNhM2;a@>{0cTchZjExAbXIXJdw8-UVqP z&JtHj5qXhD`a%p`&W75bmUi`ZY5L~Qv5Ldh$AWV=>JRIm3&*suk zWqnkQ$r2MeuL;Jfk~~g24ACeIu+q}@?$gGZ1>3jJZn9dU z-2=Avn0ue$ma%efqX@w&4z}z&+VS;zHCNyaX_wcGVkaSuntL!tiNIVwYkH37l|`EM zN)7_>W+p&V#8rH|ziSk-5QQGHeU7%b^p4~!im$$NI6F)r0m02P^Y!B8F- zI!;+ntX+NgAi^jXd?sL?ML9xQBowtG;*eIJWiDln=2zPJ0Ym2psu?-=#%MJJVl3ci1{L`FIAQ3IPg%Oo9#{ zWRjc^gCrpxciSc1#NL$_C~4Lagb)C{K#MSsCR&yq1R`qcA>hjGkPkA#G?pSIJ5udI z`i47|+}SMqB(7Jp$`~Y)V4Qc%`RRcF^SZR_Gt11iG5aG2fm{A~SNij>Z%PLqd#Di{ z))VVguI4B}ytM%mRm~c$+O|H44&)Gl6k#5Mr$jbZ@}!cH7vcaRW1X`f_zmk8ftV65 zvNR%iLOQUjcvp3+B}%NNi-)c!#v$QS5r4^E#N81k420VfeHGS6-i-xEWDsSKl>wQE zfS=t^5!g{S;j*cBikxCO^Oj#r?9-FWQ0SfPJ=HBmAV=6nfyCYiXHQ13oD#pudwup( z2qxs0^8}pe6Qq?n*ltqJlB+TrWa#zvQL#{SCMYqHR&li?kGB+Z#;9Kq7Zd>y6S)T0 zl>n2*G+4WofQ@s@lS$%>A6i?MkzxE08s-Z{0xqr@lRhID4X(kI@mSU98VvD)%&hI`>jk6@AlyhUeANvgN z0wu;`JyE|JtFu>b)Ju%vol~rR`oy}NHV${;Y}JIELtr7*{14)XvIv69-jmk>zhgaM zCH8p;_&xK#=ZtaI4s&5v;lkCo8cWO=6f@3#5%n1rz_Pq~j zQLS(KB#)y{{Nnob>jn3vTaP=u!9qWBPVyK@ATYWS2r@dl=YQ0X{ypbjlNK&sk$(8E zZ!`_IPX?m+HC*&mNSv1KA$yhmM6+(Ex z9T9;}!b7txrA#0K36=n5pX8o|%)iaMIKA@=Z%Wfg{c9vHWg;Wi$!#lgc?T(05E2obWf_t1NkXIr%estQsT2jo0pS&bh~N(q zezYs^2ZUMe8``Hn<&1Gy>Pi=OC0A-~ZLtiTx*)AN&NRECLU2&num@;IWP-I1@%Gk7 z$T20A$b9NcX7EnN1eudC%suK};;yU<(u+$X0esgiU24CV6g<@f+follVZmTFf1jd&~t%k%-&% z*vtCL-1($85EuFaIoF(Ick?zY&mxy!u)|6XX@pRr9Dx{P{RDd{T$p=#jqHrOaN%-I zm<7r?2$BdVxPd8ii?UA&5|uV#P5CUfy=2Z!#C>K=D04%*KD#paA!m?r)-+^_*k%${ zdBVwa&EkexAM_t$uC>RrS&7kDVvMyzTiy+sb;9?AF{!pN?GV1f_+`ehe<^pNyi=U$6| zNNmo|Qz3(8oF^YpE|FH;ps1C$ZV8t{NG6?qk(rQ>GQamk7U2^jitx7U^ep6HC4o#p z5G43;--M5WnhB4xIAAG3ctb$+HA@jP5mJ8hm0za!eCe<>aY|zr)zLlcBWLt0A6u1v zI`7hS#8=;Lad}zr>rU-$t?4-~bFB%A9X$ncDajbtc;erDDGJ3u`s}Cto^|TiF2slA zHvALI6eLNmwOH+aEy`@YTQ{4pVh@Scl<=Cfl9pLkAvg%x>=oQdWi7HY9$ozn)k~*-OY-o02!h27yV6nIXHFq5 z-gBZE8Gytrpj3;M04m4D96)AwDJ-S5f%O~LR_2|)s*Wp3eXugtU4siZT(4|XpTN=2 zJ!e@?5|oK3#E}?7`p#T(FV}F+H9v{@)%k3SkySZMtrR1)qfiGQr>Xj|C3#^{056W0B*Q=9zhd zYoK0j9CeWzz>Xg2Ytqqp;|K*S8={wK8rRMWpmY^HqMj_ z0h(QC001BWNkltRRnuHCJBqBo6SC`*KK@ujAk5$Sx1XesoE#tUk-EqS2M5z{e|&v< z-H|V~`m2^ei&~J5U@>+wry^)Sf2)aBYm*CsT2?8!;Uc(W+1qVeDfl)MC=qgTWkpy; z=+!!>3`5ldlCx(HS%MdTSuN3?0n4B%ODAN4486)EO>FjqYcj!LKPuJ?!C9`Lva~^p zA+nHKNP@^vGt!38&;9`qjU56+U)j$hhx8Y6LgE=nBV(l|l>GM-Wbp2@4jn=+(2RUj7C$P)w-$iG{UV+n5jnNP;X|MotHcnys$L zC1e1y)#zfG6&xrWa69IVQoL5K>Zix^u7v#@KX7~!3`%7PU{UWAkTSRYwu%x69Bxp3`%#w4=8=JS-c z=mYCr@v!SF;esLvD_(zLY304SL>Fak8cVn+ZkT-vaZ~Ih$_}3#h{Q%@xy4Ga{CD{{uMas%%<&)TBorRTEmSent?q8kj-SR*7CDv>dKq$Gq3p#jU z0p1ap3%opeh%xn~wW=&b*}!{I>YVk*ThkeTSeWklzwaEW zM|q4Z5E#`61Q{LG(;tKX`F-G7wmF(*x=1pI)Cn^o_&o8J}6BvNB5WhNy6# z(i>b^NTj?(DG*|5G{JppWBen;1!37I=Bm4w76grVLWF78*D^)$M5x4-&({vbN=PXR zpU6g~MTomb=>oyP$^=1yT&d&)q>jvR zKeUE1m9WeTVzm$49TiS3?SrGHCwe47#C*{ z;Rd>LQnwz%8aHnK&hJTT!`Vj|0rzm#2161k$pzWg1PTw7ZO%$>*_2o35;C%K(|^_& zwJ>Q5l7p3*HJM9SjkRZ)d)%cbjcrNKoHDMi)PvljxbTV*2o-&WKznk|y2AnvS=1TL zoG=C~+9HFr#eTrdiKUu(FvUib5-zMi))jH2^xew6bY@E-341(2Q!P=IcFFUcV>kUg zH!F>zWJ|0W)(-0&+!^Pjv8^^Q^|Cre>?dnq-yCxlU)!HZa;JHcH^sOyZRRSkQq3J8@fpwzq=&4sP zNT*$MOSjPVyKjLt_bhck z!aRk@3oAr3*CX7l_^2X`_)-eW#)}0=Lb8N(1bk_X5wH;ihzpa(8jZJEAzE{$M=VHn z!d!8svznz{Ik|{_|KI=q^R(?NpOX%J?Os7fN8oC|_`iOa)~@PK`+w{JvjSC<+o*ou zvuBLA*vJNQ>Z}+D%?RV$Pa$@(bW5*hPUZIy1PGCjvuj3Jl@XJ5?+Hqd#l{tOTs@gd zJ(Kjz@pZR$);+>K(MK#e2+1O{ioJwLN}yGi(wuZ9 z$5V2F3Bo%hPH};dKuD9X(P(8jIf=hvrC3__y|;1`_efYkPMVYFDfhF_Vg!AhX0wdltcM3y=eousr@TX@t5`p>6w?P3 zX5MWQJeUK>mCB_M+uli{A(t$PcM>XqWz^TVWlmTtyE7-ndc@;{F|-UND_H`ehQwp3 z8`F}E@Dl2Pq5;b__zFAPsb}tWijhn%d(-R*jb1CPJxcgMa_VJ)SW_#qYqH27Z9#g$ z0%FPEM50mZ_>x5WMsRjRlu!m(>}6MfqI{6YneWI$mfwopr+6^$Hgy zc4EDv7_c%cMW$OY$>n3RvXb`gn>BlaWgg~Y?K5`oD$aerWz=rwyCbVN>yj~gg=$XN z)Sa*#(+-!yS)MtS_~`Q7fLLOI-F0eNFPJ%optEkg8!|XOxGIxY&I#sdao2#kIctu- z{rlU}H-2+dy5M7nrDx9?XKOvKKp+qpIS2$99XWFuBl%w-aNMu|md?N7o^nWnh;2^1ot3=6D(M8cMC3q2Y2^D z0wK7&4iO~4;O>Fo8eD<~cXzvIvb(?C|9$Sqn=fQ$PFGh~RabYPu6m2~nqHnfklPe9 zaB1F=!0j}L>rUKCOREu!{likzkMZ)e*{~`X>4a%{y?Mwp=O|@xEbasHR{Ly-0LF|( zHa68Z$AB0ug(dY~EVZ_bs+^Jsu5q}FKmCr8=@V?$Kl)2Bc74d&HN#ZzR0H2>hHn!Z#gux{K=*O2qvUgC5=oURxJ9b*84|P_oug>F@`a1cQ z8$?=^?M158X;IcbCsGJ>*CHZCw3hzFNF+&zTqB+vEVqNB+XIghWMsl|*I(?R^d^;s zvcH(kFNJk`+s(HlW!ct1kzavvPzRDF*5@+W2nk%XQNU^6(&Q&<&7jH)*VrmL2@|$Q z100iTxY`CP{h2?XRp2LdMAWa&9fcDuT#-*Lq`z(1UO%lh!Eo4|TK5r>UIaF9Mn8b# zX~VL1X95*wK&gSB3E#~%{}^62pDn3Yhxh0UI%*RdNoCr+=e1xIPUNbd$hvbmis}aI zEZh^8%J6WC*nz+p))dr$lgyxJdW$`uQa?tjUMknLH(RV5pMbxIxUQz>8ps4!E%;t3 z7Mwt(#~>}Po5-2XBZ4`M!&fHWm;2qLE<)bQg*vpDJ!$@v(Lr*^l;zf@M7bptDSiAR z*QQA;LT5M!IbEyhOe9y}9#DI!2Wz#$C~32lw%Owf?d{y1$rp(>yvZzJP3=Wf``oz? z*!L8%lyypE5&foCc5zFQxyo#L{b2>VV;S!0s=(o)*yDbb<(FZFrJUorCTSP-#f`-< zQ!^Gtas;1DPJ%o;=)DWR(TIsZq_#5?FS$|4I;T`a`VI~-EW^tHv>Bv>!>ll4ep z5Q^QqEi?NvnA3n`GFEFS(%VVy{dWN$<}RrnuCivHYlU-NTNC}zCk0;zK^VfhdR|bc z)k7YQYV@PLmvAhfP0%Nx%y;VoU&|15s9meG1+v-Ge-@hDzu2x^MrP5GONtiI&-M?VZWl6s}CtES1Qa+FI6>SPf2um{0yiL zh1U5ZEz&GEKO0kJGE$iP*lScjsD3raOIw$V&LF^=WtY)ez?Jrhnwq5S#OznE$*8sn zJ+Ag*(|OHlvyH=B4F5g-uQxwqMxG&1;Q~hqDpz9@ZIa;cy{&24_a_ayV;>(DKbt>} zb=Pqlxs-{o`+*ok8%Bc3uGlE3%|Re|V9+0e4-!o##j#F4)0R?3;i_{NH63B;-;1ij z9HmIBVqT`AGbVcdSf!+y)^vq$t*<@xb(mSMraXrxOfDtU$&H$Awrs7eQ{Zf>pCE^% z)FAbo*R!?iM+-j}at!i445cTIbxm0@=m}A~_p_~v;}@Nqh%3idhm9OIsat zmK3CTJK6X~>j#2B{aNl;=dOJNm%*SV=YlG!XhCL{3nd2%l7gI)z~ zS>~6ZmAUn-ObDjVWLTNSJ&y@PdArVpuUVA&J)Tg2MzprZklv8#LT}oh&DeJA_vXtu zE?+BENX_}Om~S^KvInGD0ed*y)r+#F#VaqHUc79yD7!vL@oi0x?^Bdu&+F@w@m&3~ zs>aVj=oXK2RkgDVSLCu++gqk!M^Z1r{V*liVWi}uD6}(u=w9QBVqc}mb1pSL(-~uq z$bTq3DjNZqgn1ne zkMubr^d&sh^QFPjDYE#Iu+ziU-mU8m%7LY0x$b+jcY0t5n{GO>N%eb#z#i#2w8V;b zOmQlY*NE&wEiI;j@p}hGqcDqB9_5ek+SE@In>2A3Pfzw`P=12(4D z2Ow1Ejjz_kKG%Iqm>!g3oTI;Jp1>sD6;AC;y|`R4qhRmnMw_ySZ5763 zR2p2&rgv}==VF%+bQD*(b9(GHXC%9)eSGMGkjas^E-6_ZJ)re(Cf`4gxPOK)h>6Tj zyko3R<+x5xkXNebXL8*gCOzRKlG?2ylWrPh6&?(!6($R&IL4BsP`k~->R8*skKZ5* zO!?idVA9mY9aTK;nYcq@pNK6q5I8boGHdP-V5LciImHYsv@AChZP>epjJma6>dr3L z^XGDtU18sBTC@?hx%40hBeKi0mlqBjdr}MZC`M+3Zu@mm8)b;r z=f$ML;Z$b&nTvu6_Gk0*@hUU0j!kdSZpFTZ`;#P*qEwMk)|!GbNm#gO>P@#k zM1ET+MH!MjS2nJncp-uMPB+)s^R0b^C+Q_N3-Zve#qXNx>@9x6OLz6)C-O-i7V3MF z4ii<_oHp0Cto?lh_eL?4p8b>z+&VDz3d_+c^ROXDv`)N998RbPtsP81e5|U1??d(K z{PhfXES3ZB#>Lg{X62E~kO(nTmm7UIOk8MZwThfIsw0CLuv8l+6Tx{h!!h?ygPf-{-ZbW?x{rkIO%DoVjCd|!Pnz*2smg_-B z@@yRqxiIvD9E^rUP^#?_Wo4hvE_1_r`oc)c^$~SC+rlJHAMI}ql}DVW#Og2Ym0>s(TF{Uxj0MYcI2M#QG}#M{h~@g%{mP@?>?l@e`z=*pRoReH zDLtIy#DDGLScpjNx1QHjU3Nj>XaSsF*BzX`8^xokcIG+0&}PMSL9UDHfpK1zshR$! zA-%bZ9qoc6&0;>}U@&cPd{QEKdL+T!(LSNWO|YhhwOS?FTyD#+I#63&=Af!P?`pjr z_5JJJgx3XrAZLupSF>U=!PFG13|pabaT?85W)94QZn@}~w+vJW_0wKDw4=9VqEV{I z9ZJris&@rnNXbiq81w^rMfuD$RQJUFSsT&% z#XnQ;YOj6&$W_?Qp&s%eG;Y#gM!uhAu#Lis#7Xkqca4H+~J4oECC#ir=}q!aJ^Q$5Q>g!=wI_s5xPG zJ>I6!GIudmi6IpQ*YoE&&E{_{d+2{Lp?R@fiGP%x1jVXMw5QVg3r?~Lzu=_eDRAIlaNXFT_{>r=n@A`@?LTRf#v zF06iCe!Cnzz`+-jKGC0B3L6Xf3_8JHy0RUiv2jS#2Txbt%MNt#w&glJhKQ!6@}i|d zYOrQZlR`rmo!<%$(~LKka!id#&aAFP&#dr*$9U8#4u7?@y^H|RSzEloQ}2DdIWOp~ z32nIe-`oV>ZOqT($?p^oOp^6JT-!_v?Lax693ZoM%3t+fDwadfP_o_kY8+9To7!f5PllC zI{5&3qU+a`eIhqY^o7)e%cjs<>7h9LbM92aurFAN=CnaE;6(Z7NV`(l#9BI=Se9TJ^0P1Bf*{RfTfEBkFq z!BpTY>OGI$Pu!i6puYp-K{=w#YY`>!tzdWOA zYCvx267)8fF)DjnaZa{2LoeQCh}6++@6uHIHd%k8xI5jV=s?F3o#I@Ze8!Mp(XQ4- z@hGz{MT{1lpJ&_tMLU+Z*kS>!Pv@M{Rk)r&AAr)w%ua5jSiJpl$yq8{HfZ}Or$i5Z z2W2!0t<-SXEoG6C1SpLq7rUy;yypGX0#?{j?QCd6PJ@iU>bs!;BS#kak$Js4I+>r; zY!z5PYvHV*|LaC;!&HNw)|518fKAIUOO8!#565J9u>uBDm3_&yDzyF!`=VH)fai^! zmMN+EzH5^X9J4aUY$Xie@FEbf)(QJ=c2DIBle^Se z#bd4Cb>l2QTNXvY3Pd0`Gj3?&Pq)g4gjT;o@<&0M%TP95pm9R7hZrdLBsV}M;+zaC z5Z=AiqIV!t&XSmGqsG)k8$;_bPeus}*WEWrr*+$4=fug6RI02=gWBg?UZ-lh43iQQ zSL|jZgORIE)k&4|dOw4x2?et%ZG(e#{ABHY3?&V7sY0x@dXk&;5M(&G?tndXTrL!wyH>YF=INp zD+j-^HaImO&t~im2koTI_Gh>JRm7>?qq?USH!H^_ZR5h~@-AH#J2ZA6*Ol-d&zzT! z)XIVt6moChwh1JkneJ?5hV9LaPK&V@A!b5h6yr zHC5J`S4g6hl6LQ4#|u9|jn3{Q^%}d>nr!Q22+yn%BvWDC$FDJoVs(WLp2$&3Ks4Cf z1-q04O3lKV*$KEK##YHLS7euZi}gNi@J(4(>>CS81kg&p-wqbb^NCVe4{DY(tiB+m zE9uCDI6nzK{q*v^>-DrskK2U)Y!gWH;#cZzWe4GKnoRI|Q+6udY-#;D-h~|bo%b7$ zvmpbj;mi?C+a{s9{0i!HHK5=$1`4F=tyKu`Dm0O>#$EH2lRCT7K~$PHtBQ)Uzt(h5 zWN^r`v+~#u!GGvU_PZ1d70c_`7rtnTiE=dQ)4vQp%kdzheAh;ko0AqUpSywR@XL+n z`gq)ZYD2+mnAm^QNPLiN>p z?!472H`E9}Vxp~qTwZmLIEX5XXHjA&ZhGvD{r*IQGf}MHPQo0EOY(F;u)+`wCrBDm zKo06CDXq%ju@076BCS1WO_-(%)8G}F6Ah??$wilJ94j$bH(4XTOX7Z)IF|9b#-2qLo3c@ z$bRsf;U%u639?W|sBV{6d+krqz1A;-_0Mrtlfw{YrIiXNf+KtS`UYn=1St5q?OTDI z0-u=%GVD6(FPukVmbQwR{M*KcUYl{k#^HScQL33&X|b&8018@RP~-x z;)baItk930I%RU~C4|SaJcW|I31{>L@A&L9NY}o}%@(5#fwO@xevv7QVd609daoSP z+0?*nH>Bs1&!0DWqpMB}8ghDMf895$8oajcN8L4=7`1!!Wx<651BnLj3EGeg3#=a> z!WVm!b9BN?xr{HN-V4otD>aokpV;A-N1n>*(c>3 zpOHe1qEVH_R(59ot<7s*tOsl$?*xc&176!%u$WLkpdtGCU;I8z<|tLT@Hv~e(g6vG zG?d|s@c4o*toKCH#YH5QMP*WA2f7zvTthlRu@Orluh-=3LMcEweSse*Q>kf?qtAc? z-;6xT4%?`Z7z>LY^1d6pa)-YcTH)&*Uyj6b55t7goTC09efQW&X9Aq^~b;E$RLW5oWxNoNcC&#&(wLKG@YGNAy3=?Br|8yY_59wptlu7Z6I?v39mIK6N)q&FZGJi?8-JUbeFvjVz?3l4His7W73yg<3}d(V z?x}NW`HJx_%m@@{XUDxEhlC}Oz<9f-`L$;4y1CP|~|}4ta=Dt~avUJH>4Q<1BIdu&8d;=WOO#Bhhs2>(5nAe#R@cb>?PlC=1O^;g1| z6r@J1M{%nzk@-6c!zj{ooxPOAvpUVW$cl#y5^_MaJ{lE#$IDWlA2@phjbx?ir&O@! zGIHmoEhSB!TdAPqP2!`*#n{*tTbv}tevH`Gn-fP1duwXm4Qv-O+U+owpKvp?`+9@) z)8w$KsK<@AykPu|V^`CZL9B=jk|3sT=)8x8{b_ptF; zCI?>$nU2m;I`?=aWP&AYE3}BBbp7}=CgpP)HFaYKq2@xk7A zJ6GGRQ%X}x+*j|=ee?B$gl7*CBRo_e^pQ5aH1U^7^COFN%Tnnk?UOROf25s*vY3U7H&OFUelfYOjg&J|b6yr09U-md z*(a4(7fa~0Qm^%VHHV%L@jIA3RqMp)`|*RFjrHJ7io0PyZYS{#fipv3kASeM${Q}m zYAPjM0TN>U3>Rk-$5AjkZ~lYET5!DnmBLUamZ#tQtk+<}dTfTLzU%tdw%8c5V%++w zsh$L$bIlp`6O0&-UA|Oj<2gpHMQGF2CtF81j}z$%UR3B_HlUXINS$)h=be(8EZzX& z3%)HlEy>?1P#{W}5g7&xCi}O~z0fCDV^QNddYg&NNTF1_NVwoz?u{3y6!*F&&%~3| zRljgBkh__)=ryt5jd8QSt@XR2N9#OvS|U*s3iWsfY$5VQfh|N{8?Vlc0+#k+&+%#D zLmf3UD`$yjMf-$h&M#V1_X|3qM7RDRW1CmWL*|GDX|eqwL>}zfm!d}wmVwQ&)~y>W z2Qb02-Ont0eqgGK5y8ZCpSn*VflE^g?QLhuOj`z+%^ahBiuU6Q5gk-Re5F|~cQ!BrAR{Py05osq|o4h;p;XIf^Bpw1u184ST;}`f$!vl48|*p z{_Q$S>1n7D%K2qxsSN%*0pz&-M)(UNvv#80Pg0oz%D) zuXC%7P&VMfL3R;Z6)&;r6gD+vR&POXyy>84o0wyX+ z|F6GHIof^&&B+DEd&8zoVb)hBx~K(FIYkCLLlawSL{GCR5TnilbLWBkSIM+kn_jD@ z%#(_mLEZv8kxo|L%fY&+_fhrSz{!yaeqt04IU6+&kD5^cR{O&am)f9Y*)Y4}E6s=?P+bWd8F_vf(kp@# zR%Ye(zA1jAvzNXKlwvhXWyVfm`9{S}+i%^LPCufMR#XCw+CaRKrMcEeup}=jLMfip z{aNSXAS2mJUGli*tZG9QZBu7OW@QH&G8qimJ{L{UTvl3wIZO1Qv28hLxu1_SK_~Au zH6NwoZ6#ZRtD!fHALrRS1S^xQue-6_qVvy_Jb%hDIdj!3G&4P)Db{G|{;dKTs2*W_ zIUPf<-$M&KTIuFT}X@8Q~!pOoI0Enn^b9jhGPtabL(GH)8I?J-VvYFPCS^9EGG zv(~3`GqAENN3hTD=PYPFVRvEu>CWpxVA8~k$x$MHjztrYBV;NR!g}i)qxHKoO^Lm< z;%!xSVk)Zhc5xGBF@5B?KQ3*ofPa@rtabwRYwX?;upIw=mghI+{Z5Oll5E|MOMH=x zsh$clwf6C5lyL9niGvT@?iC(o`%dqcX|6~tB5@s?a1^fa%ipf<&+pE0biSZbHcweq zMx2;>9Q?3p0{!4cqcTBtG}Ps+sF`B2~5?U0<|UrJs3=r5wd7@!3%aTAkki~ zC$ws5-Mi*XcX+>=aGbo8nJL*BTht(;Sf}!p?f0FcyJ?uY%{)S|h&r+>B}XDi`Kb)m zhITz;pns(VJK*Vxl@6s2*Bqdy1?Ztk<@D@Rebs3^rll{xHAn{Ewu zoRZ}mU9zN5N+MB4_lrYRca3t7bCd$Pb7WDUbjB{TFn7k*H?bVZc5p*%nmQZG$%&1n zE75rHsox>Q1ub1&T2oE+J9gT-VoV6!ET(9#kLvT|B-;0P>~xzR&5IYbJtt5gEMko? zA$!r^NKyeaXMf*sV=_NvZffjXKCY^uVlGF9TBy{=7dI6`!>T*K7#l>Fts-c3o0@r~ zt5rFwQ9mb_%`m&#UgA=^ttcWBFk$ANe8CRVOPlU7jvK5_JLWf2eO*?0h@vGXnU<5y zVWXEWLAy&?je`ySrYb7uNJ4B0RfRC@W-3Ck#gty3GN zoivxZ6(#~#nbID%jmMBc2N22t04ZaDPKdr7>a<$xJs_PpmO~f9BrJf(Y!z^jtjtm%CYSEXHu`SSZS@Ve%vWt* zUz+5KDHqVbR7D@fL0K>j(o;_?SN4erN_n-FSpB1WCv|Bag@~b7f(U2Y9?amjrd2&mch2$_-gh^kH>PgUMzPAFE(j!Qvc<l2yP~e}3EN2HX51FKJ*g&RC_0q% z9<4}@i%qS%%bWv^(5ZEt^E54IN^3#1+`vdRo33+usL$R*5BV!{I=E+W;gQ~MxwV2Z zM~d#;BUy=+gm5gwu%wxawg%g#K_;2-MJjx){m(PrGdXV@RCIs>U0ZaTZzgl-iYa}C zzJBX6m6!w%6`!g(m^8n`700ADCXmdTA~0kD5;4SbguF0NW}o4Z-}DNa;jBl3PTr&# zyYiY4ZxnRn();akM)2E91syrQj}+Zs)l?E-IMEZl*hYPJUMEL~XXeF2RT$P+STe|4 zj(Jm0Et8m3VByTNT{KHn-t=qkxE$SiBtIj?9lS+TiaUVXvn$0UPs79J?jJ#bjpC=P~V1VU=bo*0D*|&D7@~3r^^KgQ--rDu7qK z1e4{0%t4^D-Dw=+R@Qn2wd`eqT#DcILGp%zSXjv_T|pkGn$G7$;k?(fVe}Q7*S;9_ z&$O6;D4V{@o)Ctf2um>=W?-wx0>o*FswxWLBHMbwk21&WOy0Mgls_l9V{7==L##%$ z7R-oebeO@E&-xgRd_i#-`>M!c7w+e&_|S$7WYFA?@b|xdSLUgxm2^ULHRpkphvNNJ zriHLWH4=7bS@dy^{OSyO>KvpgWx1z^N9!+IYcYH+O0A9xe8DTMRf}lI zch)XBQ=x2TO=n??!eU;*VI~Sa;|JxaAkJ80!@JhCks(gIQO`>Hb-Bzm9;5Qlq|gnr zgO8uy+UDcaCkM>=%dq;3J5C%F+=Pj6Ss;AeJJGK?LDm@SuF=W9WPbSIdg5@qu$_@- zdZvT*txmd^XkT@G{rXvQ9>E^xFYB7*)_g~Ad8~&de%U_)JS)n6MOYWzU(+cnGCuTp!Oi$?5Dz`T0l>^lL zE#@d@SxB&)!gt~TT(Pc7j1ujHJOyHh-aPeqY10>(%s38y1z=DaDiy`6$%yKH@9#Qa zXKTD}xqc9EYhFuXTnerRq$+IB9KS@xa10!%BA^{9X}RZ&)hT}dJEHjNv#Co^XT&)N zE$==djJCRVocYUXhDU|FnZ`1ZCGKCDqb$zg=6aEbvNCH|Qf`Tt$#4+Xk{(B2A8Gxz zfIPzldO{}3AWpvN-_q|l4=sl{X-h!$YSr*8X*@WYp*Fi__-V&OOpPr?IDl zF$`r0O4n>7+uQ54*sa~y`Pl%V{#+zE5&}NW^$(qAY9(PNvyq>Up58&(*p%kR4?v#5 zvPVq5#++V)wEz?`i6kz*Ak$(KPNX(}WP%sNh2P*|5B|MRwnyM&r=pHqrx=ew2Ge#u z&4~17da+A~_+nY!$4BqTBK7d^Om_$Hl1G1U6!=^A=(*fHyB>2_<4F6;HMclJu3fp8 z#mpQ`dPms{CR2-8?wAqHhIMGRby2_s#Bb^^cw4dX+RFI+S6iJ+dl?FxXMkhm)i$s32Q*hTc*~`s$p?Tg!|C zq&)|&uu6d`dGnZroaei?3e3#z*)2Fl;n?qwoG}P=)=@9CC;2X}ZK_WXXCGJ2i67Q? z^ONa~S%iv5r{U~#(BhicL5i3YMaF$dflP6hVVJ023{s-APOSVS-Y^z$G)w1rym7vT zVZhyII=BE5sx=tRC#2hXT#D8dS_A!QzPMEuDHPSN)bt8-IuZyAX&_RRay1*HdLLVL z;v_6r)NqCAa7pv{%Y6hb_hkK=0qf_kP|+i!duduEY{%1t>*m|g`(fm#?-@L24Y`((}i+o#$wk(WBzozInoD}77g(1*whhh+KiS?y!!$0QHM^77H zX6nW312mMZUsXSR5$R&c4|d66xhN(TBK;aYdr~?!`(ypX=9sf-H+Ieg`W;lDFSwQA{pLCHw-ZjOWBD%t~N)U)0Wr zbh-*$e-BbWiQI89Hhq=wn2Npg^auj9t6vVx=vwt(6f#%X-Y5Tdkx=_yjf&Qb2=x9- z;UgU8qJYl|u|DSm0>f!NTVGm?4G;@?vc_WR3y2zZuJIloYjyq9 zEUTtH?KhoauU6odUFq3Dj$oJ7_<&nDL~m}c;>6c*>!M7 zW-+)X>SE~IhhcM&EVCv^X`FInut^_2W%@Bd9dyR5rbW%Uf7#&ogG=SM=J?aE`!knM z+Nx{yYy5@&4m>N)5VB$XvsUNx0xwdMH?ZISvAq6C8|IH&D2!q>rMiHF)~1q9>6w*z zRH5+x1z2C%Smz*tzrWvO9qY1OZfhNqy-{?FpLj5^^Vuo0lOOHnww=Z`wWMC<*0+VC z6+JHtzmf{%!U&5jjY<%+(3ORIDjP2|&$*q_eaKM+9Hny?9+^9%q~hwRM)|4gX2Glm zY!!2cC+M(_o%{PxC{97}K6>{vj$Cc0`HT-9&SqtZu~$bHI)R|sNA=7VKCl7v6XO#J z&ILR*lfnjCZWk|_Cp0CRE*42Bkk#Xcv2iCWl8x{grhY~uu5yas3k<)%PAdx2h7xLS zTaPB1n+dGGUDr35fr5@ss&4wJ1yd%`F9 zcb?M^N!eU$O5*xhh}M8W-mZOd-Ma|0yxSO>SB&%98Kuo`HfT1&%R1pHfhFc=8g_eU zlT7RS<47s4*lNqOOewnc#+oLR8G~cjLxSsJcY8Pk^x~!LeqRxn=5#A+7GJAiQ`XaN zzdC?@vM1NU|QK9UZ znWg>NYDuIUd5Z2jxHTm9w`R0)dt)tj!{PL-pUadczVmrP{jz4?GnIoB%x4oLxfpdd zziG<2%cmvt4@)TE2P?fE-hK!0NRoLJR7ELw&tSc5*oIAG@rrTFsjyzjFxIlCbcs}TDvV)j(R8G*Gx4my&w|v& zk6?MMxh1Yx{m=7Mr`ayFqt?U}`7u1s@=LJWS+OiogQ%q`52cax+10Uc4~M9M4!uM9aM%; zt^)836bXkN{8r=vl1_?q;ys<$>o}2)>TEak@I6w;+39XKl>jSF%ORt(4@9j14F9=rAjLvmRncb_ zj@IUPvRYq)VZ-SIe025;DZ`?lJ@aXnUg7W`LAr*y&1%$m9QWx9QZM3-gl}A8Je<4Y zaKmz>{|ZWjU!?YAuMjS)Nj%y~hmk6szJeJnoH_aqQw3dO9IrGJ*aQ;zLBC;;9AE6# z%wAFxk^4%i-c8J*1IgWl8XvRG_xj9gueo7F3xY|lIKtZrdIAePn2{3KWC!(U)iIyc ziBxqK1b-UkE?~aQ-b`!JDYiHB{bIrGs-SdA_Hbdo_jTzIaqVc~*$9a05Jw+*y8`#h zB4dyP(U8qc>2%@wypqz>#^VMCp6ondQ;&o0j{G9}8$6=?+4o=vVBD82`|D#zL*@tXW5GV2Yt}VG zDyEl_GcgddH@p|w+k|hr{JhysybJGQ7U3_54}l^Au9q7W-ar5nkir4X*nj_g|0WK| z?OVn%q2vGg{;#Kg!~nRT%h?|`MgKp3{Q3fT-}lwN&*c06izd7+x-bw!9peAu%d`KF zA0y!oBf5bh<}twD|K&%7;`J^3hCtO-en_Cr#Sho;MsW4 z+Nr$Zb^IMGJX`F4;;J!)d+Xjx0$&VZ3|L{0s9j?O&t)9^PBO-#`S(*<>XrhlJdb`? z?UXeB!H3^MGrVjMed&Sz>R%#K1b}*_r+m6Cp8z>QXrfE-$_))?le%Lh02ntMj5Tj^ za?*9dYa{muhOiGBk*F&?{Ox~Z=>}%2B`o$2UvI<_*N3yS4UXeeQn^k69Q;Z|DL8x? z-~Hvv81S)?=$xkk_dkulC%|ns;RhoW9-$;+lmHTeZMJ_z8v{!GSZS*2xw1BFQdTD4 zFFg}3qyFO^{x|-zTsXRmd{+IY2OyG2PsC&(gpK*OXpDGOMBeexu5^nS_!DI?F%uA&i4lj~gTY z0H;3k{?VBXC?|nV=}ql?r{`V-Dp8`#E2h=5{0R>WET1J1DrOQfexoAGfg_joiQ_7<= zj?8Ub<+0X(j0Yiu3s5}w&KCH|?9)e&(CB0(MAgHFfT&;*in4deJ{OIPiru6hnVr#4 z=RSrl0I1z2o!em{_>Kn(AIv`@G$MpgWAsnb34gw_MMoSGez>}xd&|$P51?3E ztq-Ja&AALmdFPNk+4Z#emk9wgz<`C!kXMlYYAl4T=X*9GB@-ijf9VQzo&(e)X+z$E zgZy5(vU|g$4*u7%97B&K(}zE7ND(5S5wKKUjsR6nepc-It&l9f7Q4QlYV`|>;ta<5 zx0NnCFyz|RnTVD@-l~iYk&mCBISk9pFqB;Idh;tzShUb_TnwW5|9SyHcoGsf2a(xf-)1nI;ObH7mLF1 zni(&nOC&P><@dE593MxHPAHi4k6_6kE~Q<5(b%5?`hE-e+${j%Uw)-K2E*|m$-vuA zZ^G5FiTRhcBipthGa0tbVUxtY^MKpgq^^Ua@byT{sD0yJ&6PW!_kZUu{9233nAimK z4-*1hh>kPOr=#-4FSYN+&L@!jlJGRuwv?&4SeY0IV4zbdx9g7b5{@mlH+`R`JqOUM1J z+>BNb2*mrU-w-+k)aap`AJX@jPlBGoEOLPbD4ol7-g4R@bz~E0C7w=f$ zwI4{vX8<4CAG-1Lr?Ph!2Q)64cRkhhxR)-U3#cJQ>M_Tr?{m~?b$@%cwVvVd7I6I+ zPn$W&{^Psi0szyEV~b%6|1)LZ@FDnL{vaP!ktR)&5pg}6(8>qA?E%WKric5RF=@c4 z;4Vp9EN6RSem<*a#+;;oK^~m;e`EsZ{dB-B@~`=qANdIEj={J22@d1miTx5w?b>sS zPUtAiwG&S(M;t?t)Aw%25U4rrb+VodR6x41%Fl9_(=zZ{Q`9KF z7@wI*ix$53j1U%FiR9QlfbY`(@p8a^62SRO+aa|2!|#v4N0VbkB@M6O3vZZ&%s5MD zCjlb^+t=992$lx==H=%Ogvs}kU;k+jEOG*XRg#j;eVzD2^8Vp`pEU9Qb@a+*$PX!5 zmii!5M-pm2vt@dsv>;j95Amj=p#h?AK1hOls8djgqT`t4i1fnSXwuM2?jX?R#ny-1 zlh#XNzl{rsuv^{<|Hh4v;V@VzYw^Gffy(HO!1nfbMdLOtE$#N!maLhX*|}MC#Mb_P zO?UHaOp!;A5ivz5v=M?vjEcGEDc?Urc+g+EyPFRlatJ}mxw*NKlb2WHd6_(ucCovw zfQN_oCX|+jh5-Z;?d|Oq_Bn4=N<~1X0Gc6F95Mh@l-}jj1OHz#43MGzV##U!B#+mS zlZ$Ht%4q$Djy(gnxw&~}z4bY4o$sW@%fZu=XT3}2e&Q_c z?}&0PrxCnbr`y|d3=9nChDtbc5fKq)Z#dI4GAe8L)8CbFXAq=)vPQ6VcdwZ*NC|+m z0q}B4DK-VeLbFsi;LRe;2<=E1V`-8h#x)nKnPOtm{kAsF%}o~V^wo= zaaWg=z&|4S4h-fIt57i&K(7R8ptueU2B$-zngF)>&hfbT-&8PAFr@^m2o;dvJvDy6 zyK8oKcCKn^vCk$o`%5bCMI4ckzqaW^_@se0nP_@?debX<$;rv%qoco@gpjcQQo(nA zfS&^x5{D@8ln<-X5I!?2>r_uqs4v?;9Mu6FEtLpn!8sa2vUhMu%FcG+eqC5v>S2%_ z__q?4NFTR<^Oy`wgZJJ-;OXO2wGox>FB1_S?z71H9IjyC$?v5APq%!3C}*M!3=LTu z8GT>)!q3aQ1!MX6cZc60aF&WuIN&n!VJIsr`virOX=rKfEG>!P;NTDw6CazEa(?_< z=;Z*(@~AolxIrzEBjFPe?A3p%uCAV)pVzRk$k)`;a&vXfiI0!>zjYUi{=3l;y$E4c zw}#0Oz?8^K6kA){Z^gxmL_|b<0s`vh=6PAZii%PDKy9Rxub-9aqxp;r{~qTd79fon zo#=C`h{F1@!=I{)<63pZ_pM}2VF`{8YF zZvLE|O&{oz+}qo0wRLfHROaB|I0ui)Q2*9?as9W61sos(LZ<%1ppc%CpP#|q-CcTm zx~id};lM#D3^qPE7!@58(<-D!d?K#*mu4OzI57hv*;z9=2Ks(~f#~k;z8fs5sHk{; zKDS83%F6nRo?h9&04jL?@qgw{0GPXf)D|XuOs|Zfj|Bw1$R`Aag|)1#3Yv4L zULyVY%g`P@_D92%x@&H64FN>LgXih#sqF22Z3q Date: Wed, 13 Mar 2024 20:14:40 +0200 Subject: [PATCH 750/818] Improve the RFC specifications Signed-off-by: Stefan Prodan --- .../CDEvents-Flux-RFC-Broker.png | Bin 748787 -> 0 bytes rfcs/0006-cdevents/README.md | 102 +++++++----------- 2 files changed, 38 insertions(+), 64 deletions(-) delete mode 100644 rfcs/0006-cdevents/CDEvents-Flux-RFC-Broker.png diff --git a/rfcs/0006-cdevents/CDEvents-Flux-RFC-Broker.png b/rfcs/0006-cdevents/CDEvents-Flux-RFC-Broker.png deleted file mode 100644 index 2d1ab50ebe5d8c4daeb348f197e1226f6a3948f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 748787 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 z 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%0D4LuGhJejn zDqiB|?u|~P3!;VOcbRyHhxYi-1JBqqfBu#NM(H80EGP6ASz0J0)umbui7+6?9~3eb1XW3 zt%UkgbTrOiFeyCXP7(M7lW6ro5Bnl+mar|`?D$nGW3T7w|gZ(MnVslYZk&_s%D= zD+`Tf$yn)dkh8scnu`rQfTvbh()sos@X6m^VuoIhzE(2-YNmtyyYdQ{++edY_ut*s)ME3z>bHdXB<~sh+At@a4GZ6M@=$ob-6=;DTuOc z@PxN*_>K_BS56jOE5-32PtGKFA_rIaY;E#cRp9E;{FDYzir}CNvh(EL*J!oKQ6*`T z0b-$VaI)wO@4^+4482KxRhx9mF(}yHAckiFHj1?6;sW?MpGrz!qL6=BB}H_jhy>J` zTb>m*=-SP|Lt^jpcc>V7e=xCE{~Dv2A~Jb^4}{=_2~F2`WJ@ zK(&}j>EcjJA$EiR(aHUW{%k*?vT~3gHngep~boj=mY14sUF&OCF4p`t^T$^ z1Q;k86|XZbFC;G`2qovr>8Z8l-eU0A%#xCyxRb-n8|C|H-g<@KVAWoWExgksv1D+j zTVN)-73JDT;}Y14O?779fbsWxX$uph38Kqu2W@h2ZQ3PYiM*K)NX5yWnWvOJr-f@w z4l6{&il&d1C2l6B+(a(3alKkuw*KJ7S)tCuRpH!YXRwMu!eRr=l>EH956%F;s3sFo zGZw@mLdNyb9UezVkOc4l05hx^5?h$FWE9`0{ke9QgvY~!h@+NO)dcRR=;?&YJGX|n zrQ4LyI%9Wulb3UvYb!0l5*S^Mjf5)e63IXfw90~0w;7Rp?Q(9RK-Rx6A(=ibcgs}K znD4SM-Zv+i8v)e}ZP&CfdahxVXwV_R?zr_fow__Uez(O0+MC$im>4bn5e34bVD5M! zda$mfVB#I4`*;0e?J+^LK^lGlaw+k>>o7^3;DG|Pfzt`9ZE|(CMJ^D|Qy|Nsyqk8V z(n%+eJH&8y@ZpsaYY3>SN1YC;qrUqbyrubp2NixG&1@w}7}?UyYD+EnP!WI_5TXZj zzgaoQGKgB(cZhmq{b3ZwygMWCst)<;8eL}4S9Tg4Y3@4bt*>kjYA;H`m_}WjzbME+ zt-8Ue0y5#Q^qIZAtvno5c&%bcvaFR!4Mk00sc8uYapMcI9EV&%gYhVrou2bkJQ`pTFv}eUz1&yBz3?B!1>r_ag z2$IWFnPR(wI=XtBD;x2@sjOkj&q_KbB+ME^IupTqN~?dgdEK{F;m%TdN8c33LPEJjlqdy1yGI| zo{)yW{$<&)N#SENr7xM3WSy~A`DwA>WpxjG^AFN&8Ce;XIUF39@NF@`CQfc8<30br z4m4Sg%DkBs%j$CA_@ZfdeRX9SNKYKpw+SLa`RlHiv?S+ca-W{q{=GIMj<3-3R|;iB zEflOg9&hgcy37@7E;cy7?bT7&96Q1+YBAW(R{6#0uXaWeqtKJQmAl9+W#cJzE4QF1 z8+`-zTb$_hnKMq(_Ep%AhR*K&rQRU`pc7JTPTJTq4!^=Sk7)M>{MtiRXJjwp*Q)?g zIQ192A)AC?0!Ic`EE{wW;q#`S@hl{(z(j7poE2(8z9=8gG;HEkFP1=|ZDWjDwCh!= z_TVSwtLv|)L zUH`>~tHR2#4UY48eVcFJBwO!9W2kwyKX@a))acQM;JqmGzK}IHtP{~GFm_MUSp9iM zND|JkM{%0=Y+mBPah+>sfQOMOZk;&G&vX6cLZR@aiEn+?44_dhce5PMrVS7Ed87Rm zKAq6+667P_mz8zAF0rcrgL%uf^hWuKK!_s}%- zbdOe{1PliSk)`iGfua-?$e8ps$%uAJB7Ri_#QbnYiM}i>;?csWw1*6ZmsL?ggUl_{$sc+<+4zjUFvysJC4s_22Va4O zD(Y4J_$+>A>=}s$oMt~gp0*+Cw|^=Ug{)UY*Z9t@IP!u z=v)h33U3+U@98`xMKVZ@aiAT|h9I^K3j!L|u~m>MyV3q!D!QOz-BeiY0&6VP zKf7+93!hxdWkV{VwOdPGZQa&vljR)@4v|#YG`~(3<+N{kz<9gMtF0YsZ8H~%FHSVg zEUsczUFHPdc3!f%P^FMX3rkcE^LoBsBbN>GPzk?7W5Eo$oNhDvuX$ix;DR+h0#GNd(rZ_)EYUxqM{kVLSYy%d6i_N9x z+BB$I!0~;zU%WuRgpox={z3CHmA&VDZ#xq&{jz8-vdII1bSs@b=ugfty%Gy1(Wk4? zU8l|=QY*Bxc+Dxe0=%@j#malxCBe!t23HoUr$NCNU01cLjgEF0vnK>#vm)Adve%(g z7^e{t3T(7o4o&0`&!}@C{OQBS>2O@Stye+L&zlDjUAd!D?$Or@*GZFQVLz)7XB@|0 z`p>m_$X7xtjO13?a&-?+QWC5f*1r=6k-DNsN)`dPjSy83sj+3N^3}AjShg5VT%@nH z-qCkNMw1+^4U*rt+R!%5DdPO4u|&3Sv+0x~0~tjZ?{^7uJpr-~jJ3M@qC!tqOG^vT z_lTVZ_z%zPXP|a*{}$)jO++dV%G9?*TiulIr3^eBAO&7Zt^^B8Y?nbjbyG>Hav%CS zG3iQTopTZ_itS&dmh$*;*7chcV=*Ce?;IW*=y3XA_-z02=}ofP^2DFwrhP+J`dhxy zq=-Tqpyem9$pjGaO@(0U24&(iprVt8a6*C|Wxm;>AQ2YnP|3Oo>B zxVplti|i=)4gRKI7*cAx9l<{X4hRz*hdK5({M<+7r*GdW@rN2pQ?^&k#hfs190Nn{ znCVO#dyLsLr+IJ^V!#G>XZ19FmQh@p0Vo2AGk-NN9@$8V4E?PHJ_;hPb+*aLwiX8P zRs$suY@71rWBQuK5HPE>x=T;q2N(5bhV7&deVrM72gC7o0GEhWWlLkwzCYG)%rrF; zm{J8|2x~c&Xk zcFh@MZXv!X933CuY1~?OH71t}OPsKfC%?O2384uu6rhJvj6K6~RW6D4IoTFHxdi-P z=T4jzw*%Y$^cz#W=-}|(g43AVgEPexRJ;d?{Z{E=TbCa(dd+eKu?w`^!`zmOidwD> zfYfrP8&#~roL+hUwIuJfnBN1-Ta09R692DhkN;y`avf-ABc~oyw{02F^GjF#aC|S& zTY-$W?kEuk}&sLpaO|-Rf zx|x=(&n;thr1eLwX}wKQXAZIjFX|99?FH_xzoCT(vq~YIlE?<`Z2Q{(Ya0B46}JMS zIHPQFmyZK4uzWq8#rKW+wF{&?JihOL+UxqUHdT;(ue&VAQ%JcKmwaov7Z+xFFyI*E zS-03beA|ucjk}PJ<5Y&TIo)iN<#GiTe)yb>U2#~K^X)wri@Qoqn^mX;<02d9j3jlhmzt01>D%P?ix?M@E+0ejqS z=}AhqgcH04X^PiY9P!HY7tdEf9r98=LO;fm6Uv_hn{A@J%lT>nZ%ZDP5n?}#&Z?y6 zF#X@+Cw!#y9};9!7W))k_3d~3+*lq0^t3jqdMcwfS|QCWW@T7LPFM^+1zWtLH&+Tb z7IW4s>!q*U?CWS-f@2Xl zMUJOW99Z$+605>Zx_C&>fPZugdjW&qBeM8$b{Wp8E)Q0bg4E+y<%bGApR#n#BF2PXMGv`~yUQ+AEdOoA0L6s%Eodcf z5PsJlpVV z@Tle(D1zjn7^?jztVp?>v;J6m>hnK`1<|SJA+6mS#{mUm(Kpb4ub;B5wl4 zlYpMHY5{f^TEG@mp_{P19-XKHIwk=Hv^L9$tR2OEnf48UrE(rjL$4&Lz^s$CG9>ww zpsCTz#L>*4>_irebBZ?R3No;PUZ3~RyNJ-=Elp1iR)-B%8K*yR)y?4Qr5-6`-6mX0 z{%ZJu>0=DHt^H6U1g30QL1e||b$;zJsz&(1$#QE3TQ#^q+jFVqby9&&)ix5ZE2wx` z>w^`=)JKEiU#1Q6v(FgLZ9_%G?Prz>=R$qj;Hkn`9lB}QKP#qkH}L6UJvTEzA_*ZB zzkN29zb5@H3aT{8u5dgxM|6}FA$X$IVV&h6C4+hyorkzjnwM$ETQR?bK)AJu$MbF4 zof(x2*M()Io_-wY;7*32ep_Bn&Tjq;0z;%`*SmA80{-xczcZW4+05v|PADN?-C(6p zfeE#&hPD|os=5Y)9$x^&BY_9~l(|yBs{^6aSsuuFCA12|?UOv4#4dvgKrzMT=6vSO zHC5gqly-4o{1!a*)vwt}-pruIlPs-fw`=EHbtu|(VRZz%RwQ*VCN$-W+(Un)RhI%y z?bS?mGxqtAq9DIg`}nroaLGqSe1T4%{ND4Q*WlW(T*w#aLon&b*DlBmRSK+O^e&e- zLIJJ7PTcTXtuVV)G?0=0rrs6IZ}axNKV58U5YN;#UhH0bE_>yq;?7-FHyMIQ8wB29gj@JBJNf~xQlr!S}&AnBwn|TzH02= z!i8njhO;wL%KA)usIptx|EFlJ9tcOoE^Nf0YU~?mlp6 zqk5w&5(X!ne!hO!;@~8evJ=-y`?Vod{q2;S&w-g_K3K6@d4BmrmtuY+ejdyrbbI(A zou;%=)S!+E?{%D5niG1pv$A?tFUp@X*|^MHlDZWqP69GC1;!)TQ`f9d%$o&V)?h## zQ~LBGJcm4LEq9vX6tA*T5QC8~t=IODw5t#wt3bsjRDlhFIb3wc9MR=MJpW2qAFIFu zo&y`iU^wwfXs2dg?mv2aUglkcn(M6@M^q)0lZyw=(Zl1?X!S z13uZv&HfgjBZ4iX2pOj0KeK-hX*ogS;ThBA#7L+70&ArjL6-Cg1p!*fA*9*h_Z^^$AEX}u1x%N2=# z`Ha~o%Q>JIb`ssLth$8*Jadz7;3;-B99?X|jIjCd9MCAQqRZFV)B?9W{ToP=Y>}ge z*vK(8CQ;>eezW(KlaFEbB7~oSPLzv9U$0$i)a(&}PPzg9yN`n`;#rnBG$)DiD z|G|-+3bS8~Hx!%M{qELM(6ut+Z7A4W+wuO!rx>^!#_SbD#Oe~UAO8#;_47Bh=))F^ zn?>)%u2?w9Nm4pDP&=xsd;v`-D+xM8Pjx6>m)=kdHgQVrFhAI8!F-)PtrJXqC1VW( zp?J^lhND{y3qey~`B=B(@askM8H{?nipN=`2Er``Q{2u-Tmi(=%-gzPPx!xPmPSTE zt868~3nxh(tLP2k&`?@SnHq;zS-qI=dtV9MjS1UQcjloY) zYwK|Ouz4wkabqpVto-IU9bLiNLP0$h?`MyIPcQFIV_Vii?TG;tY>ja)K@S^%ijs_7 zs6!Cfb?Qu{t!h&{wBDwm3vC!yiW)3Uy^HRDE`+|G4C~2JTkR?f{HTalmej>ehY3bO z#~KO=n`!`N;ND-+)iAjA`(77Z_8>APAa<#P>axo7cY<5V3)XA4ZZhm5)O9lFqXryF zJUORdPl^LcPoEfo%k)Y|_wW+)?gOdQLBgK~3SPS+XsPO&>iGtbm;Z2UaJZC~Fmb#! zygOjPFRc1@28E$5)Yn$4lCsm0!_q}h;x%DSm+pZ=PR@P7Ii`2)c|Zi=hMZ#Y^qw?i zBySud8cR%&pgxzfoKok3D`N&b#)$z>_T-!M^J084CWG5=h!xMQH=NfTF^qU{g=3Ex z@svw+Gr{vhSOpp49+iQvKEN4u724EQJUvP00c3&Ex z7jWYiBG-S(vbeR}A>3;v3dBPvh7RG_OeBV;2&CxgAoE7Ciqn}@6(g`1A$m3PB*#i7 zGft^*_;af1_UsP@z+U#2rO2Ykaeidzg$3`ZaCy5?B+Uk#u|t<)j>V6*&mMKGCGbdL z=M4)9?TzEo>J;DfcgMESL<-AU1BYi4Z!#z;pm;iQ5qpOIuA=-IDo72JfT<=Z`mc^$ zM}4($DKA|YodCLTqF3RAiV5}9LYm-@M0qM{UIzTDN4M=&7DnJSTIe;ySUn7$LO}wX zOd=?9ixW=D{KJ0bZwLbOUbgm0lG#`aVV{uxjYw6%`rVL!6WWgmO zUeP}y+hd2l*7sMb0a@D!(7B0$0$SXHV_XhXAB)`#{P&EMYzh;lS+9Hq5m znErfYe|P>aY7Md1;*Ie?cRrAreEGl89kF)X`x(d|Mf}Zud$$D3A9#hjE%#&h;mT{h z+6D1iNtH2W3W=fWPe;7FkN5>jOjw1smsuFKGfGe=Cfig5IMbf+&|V_gUBIC%t)n!( z8^pG<(L*9AOl}RewDcWiZW5uiYNeOFyW?gXw(dEC!xGGpv{E#u(OkLUA2)gOeX9vc zZ8PXzFf@}_M()6-p$mKbLBqs+dMWigfNV}VPcAaD)!cj4ut4LBTr@8Wx(u__M7K-p(WB@y!NeTL&n`wda&DyZ`$gaTL6F{I9;gnpPGp5l}1^ zD(0`Pl=+q5PvH5%@#ty&O8mOgGGn-(`s-RfoF!_~LV25!HijhFFyr{6G;YpIR4BO_ zi6Rujhi#=rIDYZ`A542N_vw7bM6K@z0`N%h9reZMGv{94W6ByWb zk~Iw!ww|Id#Y#1h=|+&i-9f&7EqmQPmyVvHJZIjm^Cm!|#!(_@Dh1Q~N4Qj|Iq20g z+H6$7HM!`a{ywc%J*{?WS)h7#DpT`gXlhz)T3Gyst^d~_c7;`12nvFN^-18UGv{u6 z9o6sZO?~ZaGtDpYWqiHO=}>_4h;IwYflT8?AF@t!!;eS%)0YS8Nb-irvXg94Q2ii@ z{=E~dhCp!=R;1J6=p3~=k>9ExW8?{+IWaK2oL0C!8O$o&K2Rbl4#r6ZK~s(2B@J2J z`X%zjseWlL;&QfCAq5;&5p{EdNL4eBKiyaFxq?;UILpBB(7jnyZvO~d3Wy{YhaTKx znMK%z8GWj+PP!xSO0uBB-ebwt;hMPE!5gVl<3Kn0qU=7!M98>d(J~I)x*JR}>9s%Q zA+!9k*T6T_QVzGz!;97| zUMrYD-#9-RzVgBh5UeWAa{W49la?g&fFe5&)O9C>IizMT))a}s4gN{Ur)nqfKZvLX zJ!q#Qrm*Co%jJuPpb&;?tID}1%ZItt5N~2Wm%%=kLh3%3>jw)T)uf*j%YnMyw3Io& z6P6janLZ;^@EN*9TE6!IL-f=2ML4s99!h$8W>JO2EIucWz# zKC*_mYn-^v5g>51%6b*cttETX#6xK*V<@x%sOQV^gpW@f?x#>2xQH_)pB z5qHlrw%<9j-0DESBsBYj+jC2WkY~bXT#2*=Rc~#Wg>hvP8{+ zb>Hg=KSxj~m+)X!}XS81ByyTe8~Kby0SOgjqDD7b8ou z1{@yws*R-8t!FI@DRHM&5>^emKZ*a_^6gntLkT~TPOPSiPZ?=zg|pgB1`31ktDC>` zcworg7k%H4=uP@jcBnS^ecHGRV2^UZI@9Zw3d2+OZ>Uc}+Uspfg{uf?eDVE@6PE)g z%csqQiQDwPi+&xMEA~FNw*2a0af;UBAtVsd9~7i5kIW3E6#)}7M*X8^$tG!K^;GCx z>?L&lF{)(Sm^JYc31xDqv8BgClaY0d$8`jZFbe>_#lWwuE6K#QXb-#6gS&!y3qEC> zk@0r=z>PqG&y2D6f#pY{i5RFmPbQjA3(cxs*ztK+&&B#PYNy0eCI8r%rjKBMm(&rX zjh2TqLU4uyt*h?GPbJ zXw1!0>JqC?*5dEwZLc4t!;tI~+?Zm%LKHp97=Npid>X3a`=c<~SZsMI^3&UmC_GWj zfJSldX_nRtS;`cdGTT2Qp`YV<=pHZ)1Vt?ADrhWEZ7<(qpk8oEyV%eZ5{|h;5if=o z#UHpDrD4?2>5UCs`hTM?SIMPsm8z(Zv7y9s!iuT~Csy>=3IE0<@2o6sA3i~09ij_Z zw9f~8MKckxK*~hj5Yc9_51!DFj~0^Np*p3hFI_hlQ$VAQsgG6fR zEWyV@8$}+tiYVG}j*Hx-tjCjZ5xksh{YG%bpg+)$doD`8l=W-0x8oNe%Ithr>Zzh1 z5SSS#6w2@p?OmD_=i?H+uvc#Jm&^v&#+4fN4n4EJBz2lYBBt_Z5Q=iy+069ogHM&) zc#fc;wG71>nlWm;>r6V7$0op(BPX`W*uffCF(GdC7w7UK5)AGX8(xTlXPX{(+v+6vS&cSC_xgD5? zqP1wYCBv6)LE`;O_2NDly*ow228E`NeXwJwq2M3f)udjpAG5ZWS+G0i=&eR#Z)Faw zQW;9_iokKpwdqwhpVP`TNcR}16Ies-%O&

f?&H1$t`)P3`#ax<)(aeV_Cl`jw;v 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

rftjb32ziJA&hegPV!35p-F2KQ;(^Y< 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 Ohwh6*;v8?>#&ohyj`UirIMN_TI z+FAaqE&F!&^P4CfX0qEY!pG13!~2mJ1RDr;;!oZ~HWgECc8%r_-l2~zf?KN2()G}0 zOsR^`e*+ZpZ|e|p!RVfJV0S$4@w1l#%d<1{r#M6m_XS{3z56o-0~9H1F>d)&hrc;I z!hZSuYLTfaVffv99q){3i~@F~Qh#)OWwMwo+MLj5mkO&N5u>dx>5+;ba!Nk7{$rgm z!E>^Wc?b&JetSE@YJW4yUCWYDEj_STnH0_{+gZ&GQywj&po;EDBR*V#(M4c~qh{Dj zRCAA+%CEwxwz#9Dpq{-i1SAwU5!!0lLPKF~4=j*3Y4h;v@o3=xV&fBU!=V3d5Ld`N zWS$QndrwF>*!>LFyZS>BLyaLx$|-FZnTDlZ8DO@HBi#->){R?DkYWdDkd)s-IpqK^ zBuvIImdFy76J~EP;YbpwE1_{SbMww~xx>u@Ki3%@wFi&R;t<0qk`csOddd#A_8~Ka z9dh=Pr|9AgKL~2Ks0t~olIH8e3n(?%zFCIz54b`5$q(yAw9{Lf@l?E{Rm*@`A@R9o{J)02q>5}EfkM^yFg7eHLkEBRGhy-B&%=es|IYesuY?~nnx;fm{ zfp}#0>U#2tZ*Qq!opY8m(+Gm$y2lyM?Q89ieDE^ygyR~5HYb&W6B6x0xQ-=LK_sX4 zkI`CIgvYr#6w9J11;-l(9wP2Wa7~d+>RBxVu(cC~vk-t;^n)q*xK+{~Km0ZE$d@BmI$w0IbqoOUN98g93O+X&IA(n`Enj0~PoJ`AST$WfMDGcYhG{yj&31h<4 zB&FwgVpc?1iFg*iewODXh7BA>Q3}qw73Vhv)-7W?Kso2q3nFcD*ZGe6XK($o zcD7>6H9K)}fy8#ThN10UJgUmlA7!#mcDn`|YXkLO`UA<_gaJ;Dx zLmln~ulXbS3f0r~mQXi_BZAe4PMwosSXP?;0>M(sc9lCj)d%z!r}H~&`bBxN<$bJNMfmelc%MjI)!mwqujqI}t9E{D5oDa&!7 zqL4O<#$jW44;@Xl=7&q_J-LHf+u0+^wln7a*nuZn=FyaarggVm6@NCUl|we3 z<~r%#cB+BMWwU!&UGJaL^)CzEa|%^;J<6!k3%jbh3(H+uY@bnBJieuz2{(eKs^j~l zmwsMKRKv>G@*J1g@)AeQrpl3R@6?s4v=cW>&0iLk51C)KNmUE~^e|h?q#qb5_xAaw zK~mtcYIC@A=@8CRNVnuO?GwGLk9^|lJ{3`CJOCT}KDXiP;t`R!xlnz0bff(7&2Q^T zR8?C#cll3(!M9g#@k}wm#b{G8{JEr&-1W^HE6<=RCHR!N>p>burtW>xVU!+kJg)4% zhlw1Gd+Plu#yN#(vskW)M`<_R+Cd9Sz}WtIY2Jz3g=CSZ+`_uA{4&OC2{2ay}msY)k5PM*mnc2Y|ImpIsxn!WobiXIWx-$ z+(k8IvourSGX0BFpxt>|;stPZrOC;GSLORUDhWqI##Lk?GzO<1UY77b2h~K!xo_ld zyB!wRWPN=mk=idKTC)>pjBmmZ2IEQ{7U(vQQJHhKUonfkE4fV0RWUtEmvcwHTyB?J z^Z<)|)#=W1=9Aw>*>LhchF~gOY`{jYOzNC2nc&2hd>Ccd zEU=@&&)?tZDsj+KXhs)NE)`cjc^yo$HcwY>sqp={wU_t$4&#-6Lt9VOyvjsexuaF@ zAh_T7fY+Is>Pot4L8BxD-0=P`;YeHHOA+yh4Groy0+qB#rEB2f6kfWiOVk0TdGpD6 z{6hQq>mg@ItBja0XNbb>YxvWTLx8~%FI)*&zK9x7eAhEM+|$Gi@n_v){l}6c^}BFc zSxI4A4*yR7KZqgirKE^vZuf}(TuOm40N=Gj|C}?f>xBHaWk~BN*P*^11*X@Ep0H-^ zr0WKdKQu!3?l6mVH$FIn%pPMjZY{639sOK0UB@mi-gUBi*VoIDHJO>3~ZhQopl%)c92O?po$9 zV5jm&loz7IudhX6^oXy2m(DoX6jD)Bh5EiUf&UY#gmVIyOq+Rgv`wMIty4BjkINg6tEep6mzS&ZwSP}_iejMAA|ZT=QPY% zHqRu2x1VTV?VrOo2v2YN$%PEXPuOn0xZA*-j)iDzNSeP-Nb9~`mxYJ*@UF>-d+75_ z{GM)o@M-7*Q8cNKmXynX*0y>xD=^jQk?r~1$M5Ky za6Y^v^eJ_T3(2URv%q=}nDM_SKNUAb?eajQwR;M?ULxXrOzur5uj;RH>p*ePt(Wi0_mjc`1S=Z z5>ByQyoN#D7x-Et;~n9*=GC9>>FPdqyi?a!537$)5t0itiC@C>UCkA?`|^) zs$qKEWnOLqUObDmVa{gWnM%*s3bxQCS2H+${kDHIiS03HjOv+&88%X6o<;!LK%9cj zHp5g=Ejy$|C87c`@7`VNkQ^30lpt>mO}}Tg=(a z7NGXFuR8)H=C;y;$|*2`1iC8b1+;5tF>1{?i&k|loHOFq`+Y8oQ?JFiheOoneOBNZ zJ_j6!ttD13o`0HU(m%SiZ)cG%@nsf_Z&tf^ewBmZ!w5_+NnvvsV&b$Z&V6kzU3^k# zn|+$QjI#y3hl6>)h;n!3`~V%3^K#@YH-%i6EyA#vbM5AG?k?Rkl%&T~-d@1!*~9qt z)JH4el(@ol3fE;{G~$Hz!{pGXsSXR*X)}aB;?IY9Q+b8qKw)FCoTYf+t_Wn2Z>@Q--Y}qR^ z;acNEdrBLjOOlrlW-O7@PDhO1nqb$;b=2Z*XYyN|JZ<&?JS z{V?az&}z)hOblr~Z}X4wZ|~SFzdf@T!QBZ%Ut>a_iyGSle7@$#vFyvS7Rsi22|fSn z-g)rc%cnjB4SPegZD^2p>dOU>r`==5JHwiJW(2=qST zf6u2S&U>)8fPVRvhlrgPU6b`&pQc-e{>F=!``c0ROZ-PF>RX55&8b?$fbl$pp?mu4 zjZD6mjWMKBz%WO0^1V~^IbbEf%I;Ou@a!4ncy5c_?q1iMl&|RV?p}DGWeQ{9tL>#+ zUH(9NbVH{K36(9K9TXTwg#rdgu>*DpvhisMdAs4&LKgJlR(vYpId8AC4fOT(H zH$tD%^c2~*uB7o6Xg62Vlcr?;9JeCLlTf`t`1D41YJeTp;@}^1i0s#O_$b)8HCJWeq4M8 zNpAd1kHZAaK0UzOZXN$-?EKsD_wjysdR6dPX*xyh51JEunfZdt4Xa#3zx{KE!o52H(UX(#+K6d({xmDkQ@)kB z^+H8T(_VS4AF+So-l^ymq1&3tZ0KC^^e;GD~vo>v4`^Z z&iqK{*y)2m>Dv4hXM^Oh$AK%M_v=>o>OE|`{9$yPe?(c!sGv-T`A}MYsGh&QwDQ!L z2URnZfTvy9*M5GO!fGZXWiD-c?M_rbzCS~Lg`T1qe0PwlSjTzfrGImk>|_-#7ho^C z*-KyCa)DY1pNAwviHB+`b9TYULh zsNXT+6g$DYOp~?T=QmMEe%L9;DT3E~$@}hPzo~tVPstY$i6pfV>3k@0mwLKrh|+%YcC)*w8tcI!_<4NMZB-}V^^fw;=xvI5^f)!~(&vfb z`JD^kl>K!dO8`>v1JCt*!t|W_NQ3D z{_PyR7H|eUg}FbS`4spe!KDU{YFzHT?J$KM=9$a=`CVUX_o4H)l9* zCwHD?-{w2tXzAJMmveq*WBA3QHhBNrGA^3D51F*Ovs6L3y$ZY4L2DW%1>qq0K4T5E zTfTJv_!aujFS+g<2rEN$%C?&Oe5>g=%n=fnv*7bru#VQ!?BhilB;muSN07~djd=F_ zve@V<>yzHNp}DvYpi{kCtdd(hLqT^Oz5L~MS0yZdF}u$_3%DP#bR2$`e@Jw_M7_Rw zniBN69=M4>^ZJnQvs{-)WLyK}8Lx6?1LB!?NB^NjGrFY0A$Gk*_MZaKUq>UnLC55d z%flnn{(7IT_(OcZRw3sC=SrFdUpLH@RT-P`r!slLrM<{9k3CO1?U@|0UnhwltVlC21IPFT*su(f%n`ORCRAo=shZPu%1@($I1%tt?tkT z84TQ`fp;!m9V0w=z()ft*d?v}KR}0+n}{2D`I)*7U8%U9&;-`m9p+=N3G^C6pLkKm)a+{F)Y65qB6y6u3k-p=D zTAp_{+{Y!$F!ywn|JQ2VTnvJ&G#jB`T->C13_?&~o|?x4$K}0;(yKSwlYBpMJfwr> zO=bjr3szt+axh)r&7Xni9knZ5p~az%6aV$P9X5(?Lb)S@*d7k(cVV9%N|jZMm}#7A zaSd%IhIobbG45_O3{S4FRc6-JjWaHlRwG-+@h)#%$Z#zRifRCUG0`2 zUBqY)V|K61WKorX8kEAc^>Oi84yiKliMrnz#Y<<4V2Gd9fK-aS^<~f(#0RQNzQs#c zfKF80uxbACRhFG3E?_RK^?y`0Ea;}6wBzEu(w`x$1+e7AR14)##tGhhRRL2f+EIjC zVbnSJ)ld^gg5A~df!aEdh##zaxPEgy961q{;z}8!AG_MQng4qhAPz~b-v?$_)9tFN z)UCzB=Sz(E+IM^A;n;LMN`S*kUvAhz<1fIRacR=xsb>C^*ju~m zJ-H)9@xAt+CLd<5q?mfVkXf0Vo}cVHbi}_e4QelAfL4&6F{PTYUoubt2u0>Ti>Ek5 zL>(ha9yn}v`liL>PL9S0hG;2HOU_~~$3_VQUa-)=eeYzx41;(5wLNCXhE zG5O7b&Vn*A>?KqNv*bc)11GhN5xUo$6d(l?NM%DSkRnh=6kw0?+V}96z%fEm>~H<= zk1Nr%W`7&$b2%|B85lnNW9(5P?dUMr-Fc&&9nXy8c#(;U`hgH&Z z9 zt1r7Fo;U#-v{2>c+b!G0H zrWp=R=lVx>$fNQSCY#@8422WW!5^rGJG?^)wQD%L*+<5#BAp^ETDB89G@zPv^fyX0 z;INp|rXZ#veZ|8h$AC&LEM`w6Yj*1hS<1oI2o6hB>U4nlAOD$dtQQBn^YU(ix1XFw zLx0z%It|S|`Rig_U6O2&UnMu{dDAm{z#SnQJ86bca=NeY4-n#SB^UYKucw;W?N3j| zr@YmcUw1~Gc6bXLEpdb|;{;jCb+MX~Jeu~PeL4jkU?;;@_l%}@e+AL=%YdwNF5sHx81)^QR zBOjOiD#tS7>Yoo;Wo-vBC%h-NUl$Q+dU0g0NP+2+e*opds8m*ck*7I#W5?-zU;CrQ z-uz8|uHh+0GeoPm#p_N9J-ZDP*9klDl`=r(?K+Y03<-2|Uz04|N49sYNSofK%)S)8 z*d)`?3IEd+!6cR5wJWT&F>kw3ht8{7WzK0Zdsl-ZKt~oMuBlpybKnXa)(R>aM|cTh z!L{aEnI1a&xk$ck*!OXzc;=WJ!w*X^)*IOSmLx@0MfG>2B5eXbB@<*Vsp{7_=@b$% z8Y}TE!tpedkn!Zc%PV+hHHSgsFVR+Kz6+H_!Wv9?OxVa{p2`}GDQtMhWRh!i11f!j z8C>3sV=^1M5#wP_cl95{`b>ev-W3_yvkhx-RsM6>@`nldzvuJ(Gsz!o^cXi+^?1Y!%?dvL$_hf5ePp;dI(XDT&}I zZp+t6_{pon8+sDwqiuXOb|T~I?|nPLnLG{sr%~$HkF(fSC=;^uG^nV_5%rTqn_3Mt zWM1UUl10~6^^%(VKcmyc2+Sh7LpTKR8d$qIDYF*LX8(-Lr*mA<8Qe^Jlu~Ks{QTAS ze{gr7=j-R_xmvK|K8d%KeXXYG<$1WqhhEV(6|z_xjEffyD7DvaKh;DuK)ET;&GMm# zU(z@d=*iQC2G`d6aW(hAD@{p6v4?HW>!MoGq6x?o7*%T`z|cDHN7d2sf#y1kgd!Uw zaJHm^gyVg66=iY%6ZjM*8`4_vB0=%3{`{zkXp`}gE~>VYR5EHhqX9c)pAGFOhCHCp zFR4I#CQupuGQ112VcqCXC%Sr&NHILADGBVpMvxwzzII^lI$X$!k+4WQ9vCj{QH&Ok zIO_s!E#HWa{~q~FgVG_%L7h=7m-bUwrS4kojZDZhf@>lYYMdkd8JgRktS9!rqhVlM z`hp#Z^R-G24w(juDyqJ;iXXo2ZsL_^J_lK2ORSh}6Rp=~zTDt$5)dKR^Kr98J3=5` z-8Jf5{$0D$h$X@@{6g9jS{Pr`Y2xG-z3s*?+bG8c&Irv@t@V3~8G$?z`0Q3*8~<_y zk_u!`>>orE{nQz}QN$NyI9;e8qJt?`v@Nr-Lo5$(g*v`dFtpg!VjDw88(CfmwyUc; zs<*whk0>))g0`{&HD)Icw>20ihPO2qTxjl43kOO_y6l?yU=$ zdE2XB&_B5U_0Z}?HH7~n^0ICF6KbX5`|9L@7M2z@GFx(t!$bN_ibv7)m zrJpRzA-3(f1d4KrTuPZ6PcH0v25Ivg#YQ7XrBFl-v*Y}Osp`{>_qX_ig6z>O+Ve!SHDt&h&|uXiZ}Dm> z3siE30cQ^U6QrsKHx+Y}9)9%zx%OJh=thYK5G42k_9#aCzy@346hvLA-Hw9PA;X|t z97Rh^nb`Fd?}_tED+X9BCv?pY*Rhg53@;P{x33VFE=BD?qJYvKcn~$LNRkgjt(oD4 z`8BQ&9}F*TNZW-2^vMdK-z4Zp0~VQvPJBZ`ln!Nbr{D-Mcg6(o!2c%ZZ;XWVtN_Nm z8;g+;ZgC#gvlGE6Nk*5Dj%daK-kSpKj*IF~tlbA&Ms=sqx_^TT~BOTG&6+oOHbwSNSjz%u z@F2sVy{W8-vQZpPZT>v_ugTo^>$^I;SZNKv%x`eX$xsb639uI|TFw2Otb`3p>iuT^ z{hb*m9x;$Oq ze775V(v8l!Itp^*$13;X9JTwuqtb-`GQlJxM1Ceq2%m^OJpFbgj5&|H@Nv@l?4eWW z>c_u-6m11atoc5bByGv@(@5tlI<6(5ELvi_CGqi?4S)aUVoo;ZL`v3$Q--J={QE02 z%nTIOZ=toJ?$uGrgoi8mN+QL0e{xvYgIPlyaq+VB$W5L;E*cjCj$j0u>@V|oLU|7#OgU-{jdb?s>{ zi2h@qu;TR6g~m3Zmf=rCTy~Z%i?vy&fmi3V@Zi;U1MlQ3gYl`90--vQ;>(GgrDsd; zvR^;X9Cw#u{~;#6fAR|?*{09dbD<+9%8$*Sz+9Pad8#~C1v5ptrW1brx#+`_JV69+ z(hKXbhCsQH)R7*KUUlP4!kEY|6fOK4Nus(G*`? zLa3l0_ft$p*ZUmtQ|o}7U;msRmdbeCVCtJFvNB3OyIW?P6G~s=Z<#|;gOHKptVH!Rj zyj%TfOkl?DM`PCMi+d+KLXc6Pg!)A$+zUfJgC{#+@iQpHiR2}Z@NwL1mr|jD;ww}p zzh>@nVmkb)CeP~@dsmhu!#51b3Jrybf6a1+{q8u8WLk7DXUGXSXJU?6g6#A7Lh;IV z1T<){g*ZVobmVC1b1cYfMu)588Gq$cJGLUcFdU-_iT>OW-#;D|KGrn$?2udpH zm)(i`W(ds-7M8)Y3}Gso=krZRpSF$@DzFz<&MS(10dF7lZ4z&1yo-hsbpRMmJT*a*U-LEN4S!b`n2hK*7CF8;f% z(PG8piqhwlwHhMJ+?GWR#9-5vD>3U8%%Ve5b*E$GhAF9sGMuP=-8|uio-9oPU}NM8 zy=2)fVJ*&;u#rVN>=Ow>!Q&EQo^*R@uILl1Hj_I}{ny#M4A+wJpq5``??=JksElXg zY=CGubcnw-#0bsOQ|1>TuOQ=vqUGl~*sSYYMacWQj>O6ZwLqmn%n2e5Zn+q0;S@~f zDHyUhQ4a!C0C*q<^$Moq(3jNUDc6m)vY{GUWo=(A$=Hre%$*EdF3E^<$|8po@|Fj6 ztf?aEPCyM{Ol>^z2NDAkwo9MqU}4)~^ck;8!q8S>_pO`Cp^nL2u~gx2H96`7utQN1 zPQkBm*NPKpVfk8Y(@hDFLJfJ^C6-`L)FHhE= z%S2U()%74@T8>!oTiAEw%#vtoP&3-}1_469l73m07_>Pn?2GO^adLT6q`d56cW?=C zZ=Fc-T1{^o7{+yli&aZeg9%*?4{U0t0fTnYYWWHAUKu0(R!FwGEcq+h+qs!Y~RP#}K_ zPCEZgu&Z0sNApyI;z@Nnp5!Z@%8I4Aq9ND*I-`>CB)Q7j#kQWZB{WE&iht-4%3Qw$!a(&;o>Yhme!?1<)eDN|cAMQeWMc67O zt>m};eiy+t3=-pUrlJ1eYPD8qXl@<+*F?DXf^~moC&UAdUuYs5+}ErdC2jLaI=g^7 zDvz6pJ<;|2kxARU)=2bi6Ao6cquK3J!%a|w%FGu?tX;}z$W#u*gKFBy2!MKWYMm3dKc5bzI(pzM~8?O7z+ytvF__e_)*2Hql1c_!*$nz`n=H#|pw({{TdXgQy}c zbS-_^uNuf7MoP?-(AUsHXps`i^`9E9WXv>JY51(^B{RO^l9eHp4S(I4!1RmTqi_pe zV^Y|GXm1#;9ArC&y@5dxn2H1b`FSoitJt(PPeJ!kY4SW1v3Idj2;#d!CQvO;v_dc8 z^_K&QwT(a-o;{S6(e{*zT!@~@s|HM*HowwAQu{dFa@wk;GP*KKC+xt=62MG(|52ut zIk@MLYVAON4)+nl8oZLJEJ(`%M;6$3yF;srnldUS`^LVfb%+=h^oRU!qOsu}H{G(; zNSiKLvJZxeg%)zSy-yPoJtKpTsApL|zAiE%Z*NynzHVwoySVWFBx8Z?!Lq-pIp23P z^oVP*21XrqoY-qMU-a)=n8+AO(QmxCbSA;jF6coa)F2iVEctq{^iq}jd*GGBF!p;P zxt0KQKje;(Fn@HR$Ci}`@?%|c$O5<~#AVqYV|y+oBNb?Fuwm~oUsB$G5nrH$ zdc!M&X+HWTX-6{5h>Q@}=bAD~kFk<(acQwv!?33`Ny#hkY2d7ROVhx-9(Tj8SC?bq70M=-(d_3}fhP<*kxSP`osOd_vNI za#k?n$=3d!H7BC`N6IFgCKdtmwb^@Rz^ML_ux_CO8-N$0#TJv~)48O*t~TO(JM%$p z(XxEhj-Nq+)oP9ZLB6V+yxU=WS{)GoXE#1gdIW;WVV^cS3lt6Ddk^-zpqk<=z* zXlq)c+0!LjY6tlpKE4!J3?54O9~xyhH&lm>E8_5l0}L* z37U$TjkmvMJP4~$;*FezHNgE)AH?nNRZGB}B5oLWsmSy}G&C7J9pid;r5CSlz+IIT z*5t}&H49bnAZ%2vQQSwld-SQ(fmc2on#-afF~#p;mgIpzHQk$-^7~J5Xek>-h~I$< z+c{R!QKZ>e&f9eK+aLFTs$rAL2FkfH;rO0EJ~6Kp2CJd+tf4}lC;CwvB*2?md1B>( zQubCc)zHYV?K=Sn{d4Qv5NqRc2w`cAd351(avRf!F&CUVF|fBEt1w_6ovg>Qe@zp= zFQ=cw@(|a4DVN3$;lh`>((ee-vn}?icj1BKiGBd>_vdF<>k;#c6LDr|S0|*Lsv!o) zPkdQwK0W=an-tcA5jRh*M8@Af>e*G;Rm+FN)}|H*#n)QMa;O zkqK%A%l3_nQu3FmpUGWn`eNedxGYWoPJAq83*om3TuspbERqz+e$5R^e~rE;UJ(4T zA>A>B;mj#3EsHNpd-JzGSBE&-Ec(lV89#{Ok)qI4qfJKG9`D*Qw(m009N=N>-}@-i z1u>Fqr9giG> zX~PN&Zn#W_MhN}xAI@MPFk03JHNM^>y-2QteNoqlXcKXJ_J@-wziJWmUy7OuaKDax z`40zEq`GwyOE9^`>YIe4sHt~I;DjK`j_=%7BW%uIm$eSCaIjK?->EheT^&~Ik-xi# z`9X_ow&ej~xR|X(c{pMqeG-1@SWG}eFyZMLj-}nW*N|E1Cf;6Tpi%GS6*lmKZF8_# zg^F+Qci-}eyor8gks;-%Tn!L*MTkYUTA_g>l7!OHXR7gG`UHRt(ZIiRXc>>b*O3=Dw8CjEtgiBG z)xo4`VER8OyZfGaVIE4GiuGD(Kicz3gGM2jKkpoh@B#v;%&WguQYZB}lW>hyjK! zT>0TuZRQKka<&6CiNugm18#8ShArO|WN$jgsm|k3tqQkUS22>Xv2cF~79vl3msM%R zZuZo7F(_ z!?UvrkJa`yZ8XSTQ1oD;sym8=H zn{bLWUa9mP%3M*lZs5p=c6hG+w5ZRi^Xw=2o(RWy2_4CZ#QK^jQ z&>8eM!a@5nET%#}F)>SGH+vnI2xYCnC$*lI2ML&`3e7MvO%Iy-p{K7;Sds!_u4O_c zLBV!!+v5FQx%ihqDr(Tb8utn1%KKK(9veNSFc~XjwYg1-%w9%dgoQbQfI8F z>V7un==*T5T_9^fj84lG zO1Pb=>#p^0Rr6u&40HLD=a%-k)@1R20>Y&^U)8l37DQ7@ng(taWhFEA9Ug9TKKSi% zurkpu5$O=o8NUS=sXfqz44D7yvw|24NkWtAIsDf1eW(4j1f+= zP#wkg>~(VR^a+JK+C+Fc@JX#|+H|H%S)2N+frBI2kB!%FSd&oo###xM=U$9X8Lzp( z1*sdjnjC{P=A;!p>~9v|z3Xwk$#a~dF0>pykAcMt##KMIbzfs&i#}yG%_hp3QQJF4h&KlBu=#GU)e1WTJ*@TeT&sE2F%6^ z)F^_{gXOm@^D}9iNG?dn{{fyrVZWq1aF=RLmU1&r3!Em^nueD8)5&1MowUp%kL7nx z#TVl#Dz|C3*3S(4qjpI~zD#9-g8Z3aJ{A)#VDaW#g@ydPutO1!HN_?>i09?UAYE9nOzJkDbE$lBij`EgQ!>Ovtaw23`v0`;{u-tUZNy0#sFM#rr zRc4ZJ(XffHxwJh&U42c)I>B1a`BcxTcNjJ4%wryHjt@?IzqlFqI? zfhNc*5sPhijI@UWPT@q4MXSv5wBxXLhOXlh1nl-qW}CVz@77$T=k#f|L&7Ah9!1Vx z4ON+rA(05XKv~T}lJquVV3Pba(wUq~vI^*iZrF%4H>GIPsj6B$6`KdZ{7wZ*kjIG1 z-8vYvEcJ0mTC3FoUILD5oJ4Er#nX9C)ZN7&HBOF=p?vy*)d++BO5h@55D5>BJEj`1bUzn-Q=s=uisdDNQED&heB; zYxfe-H5?0ZOFF}h+*(ejIPj!W$VAze?cftueQxL%5W|U<)j#%qY?$J~<($LoR@s-S z=*E78sC?6%q>s%2z-Y(8u1OX#RClmYY|z3003ZNKL_t*UVpUb=@@(d*=)f_u97qy? z%CVKmc{j^!EU!{Kzf&R|yN5Vl*Qs_*A6qe2me#8eEY-5fm?M3lBd!khZ*NDKNgisc7s?1IGHxR>zRFxhd zl_%*%-1dbkMTykzu+NdJq_l?+@PZS$6OULfETOyu(p}7>%(PTy(=o)?0P$ai12wV~ zO^gQxm1QS7j~x3j_Nymx@q3T94XLPEao1T>WTqaIAPuf&$Z|UI9}Bff`0IheR7TKc zAiX5^2|H6J)A%~c8kFUEnO`O1Zyi26xIb#iq*A*3ScEjCPRnUb4F7wRjeVUT}uFWk%2FT z`0eI3Wty|vZB6rb5D?y7l#qT7A-$FXrEQbK8+{+g+WIL_e8mTHJ z@;1bdsdaFI-48rCtyok3@ZPis#g z#~~qqXtHI66oAmJx>h0ZO;&wFW8^c@X z0im*t3_2LDaNJM=C2V;(+(7a$pfr-_c>Q{l%-Cn9CwP%?Ey+V%q z1fjGMz=dw`&a|ytyLNdpWtj~KRPSWN8q)E{IOoH|f#@Wwox<`;MA1H2G2QR?OEq8A zk+>9fr4GhxHF=;Rz7wS3B?a-gv%Vpb(jFqj3kk^%_L5lA^$kwj;+Nlj=_@NPTT7(> zG2*O2O2!@o6v}%+xzF3`7okI~X-I3Aa}Ez7vXz#FTYjf>d^rMjt2Jv#HC#i$C!)e; z2P@3_J7G@+6<$W-zX|(mBuJHZ>2ziT0L7eyg#`Ybrg)imre!^o#2gxH8S8gEAg&FkwDG!I}TGd(~TF`y#C1zmy9caf5>3t~IYnHDqSq2ChrV@vJXc{mo#>99~Cwxv2ysAblY_0KY7y_|$a zeM|l6DrZY{&X-ufPUD+h-&A>SwE*| zUnJl^jrePA8?Tm@jCnVUUMyKRiGg~Kku_$BIu!9urIW|4ip1eR!};ge4t(AlT;*as z{59;byb23B0-T;#DrGVwNL696!(wHs1)RlPBuGsJMI^$uolV&3^7ZAmy;Rz80cy#I z6D`JCetUy21=F?RNba?zjG-Q?>{hF`fQa|nvhl6iR*Vr&7FAJ}GNvrCfW|-f{WIwG zx|bs=Lix5GKe9}O(BE~aYqkZROtl9l=M^kjW+GKJcaK*Y(WgPjdJ9^z{uzd>PtX?@ z$-P^SvR)QkPDsC7n7>Az+s|xjR!WJ*q8Vva&qI^Nt&*h2Ug&g^F(R_(i>`-ig zqTm`1@TRl$CDs(1t}s^H(cU@RQFDJQBHU@X`1EKW({7z;PK*G~R}r91ILLS?>cbJ- zAzz^;(IU$fFP|~0r)iCrF@}^CjKRynyjoL#yuKIfVz2y*@$>`%4T<<8Q!Pcf{y_az ziknSymIKK#s;X;2?OwiMCL=^nQnI00`=P<<3Z6MWsbW{GzhE+v8&EW9QX6y|0tPpxH6q!V*E@F5WgSyta% zKVISNaUxi3DUHHLt0PVYf_EeN?=0}5meNEiR;QEvjVJ5xC&0_080|VoX)7m~%yoJ) zI-u|?sD!FUoP@)|uD_G+8pQK@8HGCjhGfG9obhM%oc?ref0I1kabSBt-L0+xIK`^p ztW6<~rx*K*Cl5ih^hS&)ApQX4*zC{%vwT6!ZylMARSH6VH$q=H5RtNBf7GtAm8EE$ zu2vM+%<772d)4toTG+kW{_geZ(!tmnbkr1Tro&-SxH2sIj)|@Et`8lJITnWe-#Ww6 z@yCRNu%)wQh7}_k(hWCpGJeRBW(o3F_IuNb@)9Wg>qupdz1D};BuX;qs1q+Xq#Ewz zXxvCxaI!R{>Z2UlGD29>ZB3P?*kV*rj3-+WHs?1S-`d(b#S-FT2V++=1*bApp0FGa z`MTj1fJ`KPcBw!jnV3Uh3=R1sQ|xz=j9o3t4-71*pCZN>y0L_iwm6mZL`s`Ql2nx? zQl`q?q|F9Kp&q`T(*~gVtJY*JMmCqYz9iCbv|K+#?w93#q=o{8H6(U4$FI~4n#NRR zriHB1CrF!hf)dV0^ zE!*a#CF`F+z#-0LK-S0tKBG7mG13lc*CNsbpt40)!Y?KOrArYOgioE*{Y!u z&y+}Oi-DN?%}sAUX#q;xqSpn}B124zo?zkKF4v1>z#7W}o(BqZ5ul&5hDu9n!sgt~ z#w#qN$mn*%v^mLOn?GN$Y26lNNHoRnAqLkly<>7PuX1b6+7FTARm5nzWgC=M6I5SD zqHc>sBvOg_1V&}Cuk;CP0u$f`i5@{knPt`Ai9-MORJ*V%3Kc>I`}`Q+%mB1*>ZPgH zT%(eEie>$3Jl;6O=+f7qBk8M4)t&7EWd>vL^X>~r#ODD}w^}pVcXeYiSLvl_g;`r8 zRdPjNhKMoe{YAo$3U;?9i`d8EMR4H?%kG^g7evzfl~v;_)t>6gb;$5L=S17k9G}KH zjP5)rZBi0sip2}SpbZR_Eg`>IJ1U-O<6Eh;$IT8cpM1ffhC^MKsj50N2mALEbhV3x zV0JcTf}ki*612j)*X!;b;A1yEdFOb!@P>@r3am60D97Rh%|byUw^MBq$+1xCIuCX} zZa&tnoQaloZg&hdDtRR1POx#8^ORgBmK&QC(hIH&EPWVF)^UfY#Ib7Ba?>bV~KbKRM z17jbAD!V0pi;1Yaoy}AMx-E_)#$&PST}yy<&KjzQbbJ%%e0SKf7>Bi3mB;0sW-0H& zVh4l|FvWP>S|G%n2O$6CxfKlUhd1qS5dE@tuRotVm17ddH5v~ib zs3$e(FX4WUdQ!1anF8Z5$7WehntTn^vw&=4$X8fw>R&CgCl)&6jGs$hnqJe>Ozs6) zN6dHzfX%m5YC+6!G*$!A>sAetu-L^@k{Id;ITlTcH`m{fq)f=>a*Hj;kW{JloKUNT z%50V&$VAffG6xVuslCc;ys7>!Kz3udk_^*sJs(k781$LSx4B+L;(0_;gO%aA)|?+t z#uoykQs-iZf;>mwePJa>A}dM-3V=|~PpAi-^>d~b@_d$KGpzS4z&ruJ3tjBFP;b*+ zBNwo0*Vi)zJ_uD7YVs1P#O)l6+f~Ii)dKE&j%oulIb6#P`lXf3aaq_o8$Krr^}!SrdSKf$ZIOfQpo8`!~IQ%g;>}rJU;ju zBm5@ltnU`?9)O`vY$S0IgGnm!*`xAKm{>YCjuFgJ2-jBU>#OA$O~zLOP+PZkDblgW zk#J{ zyp5=12ytNp5y8e+mHvGm@sDU8R0}WsA1I-G-jRq?1ObDvk(A> z#p{5u3G>ASCTEUp92o!}#bfK!W&+yn;Gnk2--(a0;VK_}Fu{U5OsruM%B{sxvBAl$ zWulxaq}It0sA?)#$SxoR@v}yNN820#{34-Q+1wbgI_zg9H3RaXxa~|1okTDq{`*eB z7oW)5#ti7C#_+}})kjh653*-hLyQpdN`q#)8&K_Q&wa8?yhNc|;ec{`_wMcQpWv@T zh7YRlla7q20jtz*q7)^-*<7~3RBKZac24O?&n~3@umg!V_e@=@=eTvVwY~LvMf9bb zy4u;N4Gi`-tJncvrx?~m_pYp)#mw5{IW<;7j{G@41pdhH+lB|>BJ}kx_dJDlfLy2l ziNitL0$#)CYx>nrI=z1YLE77y`=U1Hav#hz*A)E6!GARSetFY>C>%O7GmOD>O+(Gp ziu$u{v}V0YYrSb~_&jG1Wm8y!&Byz@#W&1`yVAp|*aGu``IHlR@Z2Z=y6Qw${ytpw z!uWPTTD0`a-OsiabJGn%6Knpq5Gds!DimOpWP8HzryJ6H#2b+-cKEq2Sm$?I$9J(1u{BAF}LvLsR-x`+@hm(oT$QG;=QS?F?^Jn7| zS@B6KqRmwYq|Vk)8I98caF^@a1qZSBw==^(;}kmaWf9XH!)A%|H;8xA)AS%4+!{aN zWZE-}={RF?_CWSF^zdS%&6AEk>Yyue351=9`@Ih;RBtxdH%CVM%z?}<-(|>@OJ` zN;yTAakTfSK#YFsbn|U*wT;#ZE%KM+yR)*ejcBg7-kMmEO7}2vM9Q=qdm$&?;bQzV z4difUP`YtUBrnZ&w9Y4@k6`)eLU-sAT4JI%Au`}!JF2Bj%8+nK!_8D=V|Nc2Jq z-owcJ11Ddx3r0uoiyHa*QcZc>S%X3%tCjKcEyr~CjB|&d8%S1#3Q2SyAZ&3(V(>f# zlSV#>)1!m9kf;IYDNM|DO&t540PX>XCCg#KVJPu5Mc88$=Ud9i|a~B76 z2<;F7K9TSaPd$BbKnAqZWWRPNA$;5YY)F+{9l{GLfRlhcJ2(}iv^q!y8udbISY@i0 z>&R^eFh^RN;(pq!G$Bl!<6!P_MFD-&C=X+LT~x4!B2d<G2F!^T7ua_Qt6!kG%aP44%@^<3n1RZW zpcPEK*iEIv=SkE4gepB4`ZpmF2RYb>@h`vmQ@m8x?~X2|z295yz>^HzMF&2~Ny)zaL1Gl}yzl*i_&r)k3SUYP5#bIU=eQ{xx-pM>w_?TjF(B?MAKn{n4>!ETCGNX+XHbHDv=?JPS~+ zYA?wbGBX%pEcNjoh$hTQG2V)*d#R&4!1VL1Ln;WX=ofi|~ zd_}x;)Xun z6KETl$hVa|f0|<>*n-x>ZNT`wmQdOp)@Hkb%s;FAcmJh%EK@yTmVv;$Nb>sDtHaAl z?;+yKS{yv1*{#g{eq7cbcsKF0y~*CmZjIXW_MY=RPpu_ZtD2hvpP@9A327}5d?Q^& zSaxR8B{6u#VC&0BaB5&oHKs1Qlpx-wTAUk<{_ zIU|P!(3PMeFC=IFV@pVhwKQ6fW)jkyx|6rKJvZNxnZ!t+@QgRhHCkJXt>-Jom7002 zYsl|Ew7;cXE^TDckH_WCflUN2N+yz%U1LfVL&&^>5SBZ*s0=>9W0_J{fix{d$R;{e z4g&$j9Ov61M|kfCG+nh3k-qHM0^zzh7l=+zddUZ(zu%r6FV>aLg9j&GlD@<$Nvxj~ z)Er3A<8jqTu8L6#uf3l=t+!hg zc=3QwY04L z^<#&PwXBX{@{a$J2odaWoT{tsGsnFqx4)PK%ypIwAq=Ad;oL;EjkOP`@(QVo<948s z%dvnwT9g`^vc&NG!Tj~?n=cu|^W8IQ3BQJSFw@WD_PDHo)|hXiUNtp!N?>IZFx26m z!vcEyiBmjSxXM%@rn#KqsM^7H`jV%omZOIZ_*~{?UD>0;-${1F76$!)?tzgvtN=cSgmp)|d!9JwltB9& zY+&AUMEXUlA<*s1L6ntQioxHBjKTSi)+-tC5`*x2H?0cgrJqwuJ?f;CQe@WowGRVU z7E3WjBja>nYyPj0GK;ypkl|WnnioM=n51;KBd~-8u-_amKaQ=aS_OZoQq! zJfChH8<8#@BES1+_f#k82?$s4IRN^hJ6u~F{U@y-E9$06BO+hSt!4xz-c2XJ2|6;k zlMFx8JZyB7>z3`vK0?6%cBtuK@{ZdW^pE56%xob$ULk%;mw0-5M1bU$B2|%^Pe7~V zMW&;VrWz|CnS4if3Im+OKFo2ypKH%dlm)z(%L|>~Mx+641tFnTAV@O(lSm%T`ei3q zwhyfMNC>CI!A!aKJ)ZXgnrEP*hvKq&>-%L$rW(`pB3VZu!M{;?W|i|2 z1o1)ekY@AsF`*a0F1Q_;2NdBc$Lf1#M!qsZpC4Z+$N@8fn>@yiBg0r4`}ucfw}F8} zZUePYD};sd!)aI~-OR{$=@^+WJoG(8M441$Dw?cFLCK7#>K?r?Y7R&=2hm3d)DN8O zng~{|J{YziA9>+Ax!K?6XE-l+_`MG`*S83L+4{RhwLuKC;|hyl1O89xnb4&Xsdx7` zijt-L^3>ZdeBHniW8i?7;N(>8ot9AAOf}s55g*?k{O-Xc4}I&G?|&DW&b|GX#NL6) z{;P$Z2tuc}Q?bB4 zaCEsyf|5sSmsH}wvf~VLmDg9zF5eeci3G`NEzwqqmWncgOvpb|Q>?b{I<&P-5F#KWd0J7{zPcm6E)k$7$7yoF_1_W%4s{y2mBaPk<{0}BNzmJV@A(+X^t`S!8 z6j03dZUp?D^XP`tM|rj+zNZpbVnH(cJnn-t-Bip%h}hgr1mAbf>+so?|MOp|rb?`g z_}3V5VAs&D2i)Xbe8+$+`_AKTjdKw!K=hmV|ShrWR1>~CX&uel+EL<4G&C^P;|df1rC^irn0$Y=Yk zWzVzIPnjGe((PfQgKZWC&(nVbeY5?r<){`=;num_D2jOfs+Yg7Z_;x!T zq1ZNiP|svWzXoeII-86%EEwQcCWsVEau~rRh}`=bcaRp zrPTdpzdYNi3G88naXVoJNEfaVqG}NddBh(H;hqv_Rf*>4%$`ODw#DVzqUwWMv&9(m zV*E1|Pa`m1g{&4->X^)phOkQVDwYo4$E60~M^zGXnJO~ONSKT`f&xW1DYq3 zQnOtolE^z*(_BQo)_Iw2Lsgy&%(qb7fDZNCVXBV3m9L`}E z;&J|Nsn<|lpinJ$sRFt7++Cpfy6*0t>F)dzsF+|U9!DXUJ)04G;x%{>`G@ywpLdNp zDd1u_I}aFm#wi@Sy1M!o%SCA_{ysgd!Vd|&qi_v@7oAnI9odfo@-krD>V{GF(5PX9 zMt*5@V*m~epeBc0(!%3^dbvQH4{q!03ZNKL_t*0tUpFfuS6c4j_kR>`V-)(4=JObj%lAojwX4G zZ@?kgCS9UHYQoPD;{Gb6w=9glxdI9P>HJo5=re|HkZ2G$y|g-GF-s#v-Qj?`OS7b# zm95WjaUG4e_O{EI^f*v@b82XiAtq$P_Y?0uOaPHDtnKap9jv{+50i%9riNEC?ZRo% zrC{KBM;{HmEqECRlg`JTzr%K78OC(i^v-s09+^xqLUYg2-Z}2jx3436u8+KinAgT7 z7}<`@BOp_NrZM*7+O8kr3PSv8oVXU6jV)o<6`mGTZjS9lq93^~g(X!MyB;5f&1Ep6eA@DU?&h49d5<#>ggp8_y1rJE|cdrP1M zu5%JWfmxKHceCV+#*OMu%OCHCNoH#j6B|t|LM2>mCou3QTIy{^rjLv|(o_f_+J%Vh$-!iQ7`tybSVgn|MM6%g^ z=r3i%ZE-b#Y+zdB9Q1IF>+afn_rFZQ0$B=Qs(Z~+7Y||m;bd;|%X*rdK!t_M3NX|! z4we!Cm)3lR>g!E$)0VbE*7`d8)byR=I=(J40%EESy8##Svj9wUTqY(81w?G>InXof zD}OlrO8>q!_2aHf|3c%NgTdeftWs~(uo($1c0Akp+ay5;1D`qdu7+!k zHYe*kUKB|wgRHi@4Vtx%N+~i_1h~cX5{umi5Zt@cvF6VVh9Tp{BOJh8lG4~1j-*z) ziSFKa_KwkIy^(>pRV!ICQs8`q58(_q1&}BM0{Zmf#NkQjg;VOFu?br+mi1xa;e$Z-%Sq>nthq}zc&+E z@8*+LlZF41B^r8s*D%4O&Tka%FH?zmSA2i?Z%{CSEfGThI6Td+2cVV%(%0RdZ3`9l zR-xi!*`fIrZhy=l%-_I1-{XTH#VhPRuxF%J-YRDPc09wmt&n@z7}H+md6&Fk=Gu51 zmXOU!!Oh5Oc2u|usgg--KK~n!m61G1lt9VqxRaSeHjhi(LeIHO(1bQ`^Y84GczBIS zu>T!j5A2j2=}S!fxSJHpT5PnLXuvFT>$AJgVcbY86R-77WV*@_EURQdXKrAHcly3w z>|&a%r9veZBhXhIq|P30!JCiBzl!hK0)#`vf$@W6V6!2~S^sU^cPs}yW29k{njT4u zW!*$PJLw&n;Zz?YVec)ewd%ON)Ozv|-b&S1va-dutO!RJk9JLU{<$!_aT@?W{LO00>wiiq^BwughRnGwK@5i7 z$E~`C&3Xg8(oG7j)E;Yh$8&7O=SOw0S~LHn8Yb8(KIR*hpO`*!M9^%@A85UlJ({4) zW~)0O1kY(^kw?{WCpJorxjs%?w~8qxIqh^@{ej9-0Ds-l45p z^S{RouS5z72^tvgjyInz?|{{2h4@_uDig&{sejK7WcX)Q?q)H6z0vw=mGE}E0hiFJ z0eFU?3dz~paY*d|Q{B)OHUIz&i{}js7^-Ywwt$&j4Q=D;YVaXr;LoE&>q}UhNVaYj zA=sXEn8u;@x41@cD7k$I0lt+Asmc2f{dGX8+*b(2@49+1nDFOkGw^6O_L^9=TzE}) z8rFYGhtNz}qYSE5=;Jdj!-Is9ko5l`8aNuaRP5>6Gt$#)1A~4l-8eQrId zhdxK?ni(`=RzA#S-sBEQ!3|F{M8XlD7TLI$nAtj%ISD;eAO|sTNanL3x^n}+bsYuU zr2x1F3ANAuZZ~ZbV30!kG#Z-aHefNOBdRO3Hgnv~5loPHha&pMsQL;Fl>{f zRyDMm86prcA! zA}E7^g#Ovm(DGC?*=cWGLLLoC)mOsh#ehu&pGI9?*c_7mf`==!5rMknp|&zbVBoWR z8+#|nR4hF7NpN#}9Od8I@$y9qld}x+#t70N5Fi5&Y2craiDkAr-Mt1g(?OgBLWIcE znQ^_7b=wCU@OA?AczmKNWJ3Tmc90o7O?V62A z1bSl0vk|5{h~KFM0vGb<88#Ein6IUV2a`^rj{>Sm8u;r@))7cvQF75<8Z&%M?3!kz za6CEphurvR(iRlNI}nvfAZ$VWTH&?&Ug+M*Y+gt=jkVtk3JO?x{08u^uDv6>wcdz? zkHtgNrBE>j-g21qKq><3jD}y19v;sX+cOS8T}`z#H#I0AQOh%mo;Slt=4?z7m2DSF ztf?~k=MLsR17(=a#EV4MA2t#01mGJKdDGow!A{;km3owbv&RvR#}nd(@0H%4ARE2) z4*E(mjNfCz2OR}Z3U5Yly;A&moY>t~%*^!}PV3iwaOSCDWJSI!bCvP&X7cDEHx;-H$6i93xJDYG6F4*6cX*38#Un3e^E{nNkw+v`8S@}dE&KQydn6frG!>(0J|`#z@q@+<&)+O5Ue z_E#@MQeVtOeLezdgk@j zUf*PtmmEM(a6BnB#}#C)Z~SqPS2IY6;Sz>zpPi5@xs4I`RY{8jUzX%{u6KWbZ~NYJ zH2DuI_SQP;u{01l(NFxaZ^R|!ZavV3*Ep*}wj+BJ5#HtZR5B`UmT0MWEfRD(X>yp& z`#6HB0(8ivQ6gMCPAnMNG}4CCTbb9Sn;(PNy=!xovG+f-Ks$5OL7TD9H-6`SC;60v zaM>?!Bf~#$86M1E4-Mg0tJ&;7GRTlulIxLZlW1>;l(!bYv-d6 z)}zc~KpbXDu+;63ZHL;(U7xQ;Bm}}XG*$!|h z(3I|;?v14AwJI-mA-7I5Q#uCI5VAZPo}!t5IXcYGleL&ZEmT|~W(OqZvK+*!q|Ld) zp3eZ&I0k$;B2gd6UPub38C`zZ!8`=qM+Vm#{^V?Xb`}w|GzW(P ztD3M4$j;n$h46Nj1YUf{20vrUW{Oj7;2=!#DQ9zEe-FKh?4c0?)kJ25kP~nlScS6*97qo>c=i^I}xaJH%>G z)2DWdi|UCyw!LPSYwFn?Tu5vtg@23tSwo*>eVq86>&)GP%(opo(lhg%j|354R>jq8 zb}+-&j%$MKkm;kV8G`rTvkV!!i*21N-2EiAsi=rb+F$0Pa`t!bKdYpB78-zO9MH|a ze`z2he`=79#|LGmG2+=R^)@To9*%8PPa*fDA^2Omp%Q(S@5oMO#Pd<%JZaVii4ri5 zfd?a~7otq`;@&a7@fQNZH{F!n@)8Q!hZW*mE~`4Uy=^Dtj(DEDQydwezv1$~!*yb( zQq}iPsLrX1G;&t3xNkRzJE_}(V2bW>uHj7*{0&8j}^l;4=?$Tnum9!7$s0JBwV z{e;VDm)fLNL>eYh_PjmFYmtXq z;&xP9iQ)#)Qj4QR22pV#;}XB@uW)-=Kz+hU_jbkf0?}glYHVo-u>4>HqFj?SM zB=tRK?~}S7Q2>{?zKTxWk(12SWAQky*7nv3iqwVixJDcEl*GlT@c&XnQbOr=mWry+ z*Ux%<@mv%5)b7ZLH>?oXZBCBQJaHrZ!sRGV~U?-AP+0PTpU zKV%D8;irhK-$rQ4fYD%bvjOwdcwH^Y8xqTsY)H+=4S1%pmZdb6#d)iX1B*+t~izKh^*2f8l1__RIP2 z)FkWvck;z6t_U^-i%&j*nLlta47mx|@Qs3$e(sUyz9t}+S2|ufB}vI~%=`~DhT@YA zi6KFQ=NmLDqfp$Ujj`xgWnh+t9blX>0G{%`CIw7*=o`m|Ux^pVl557yL!3rD=$MwL zN;HN7waty&t@l#l0xLI&!#s-Fd0^m_V+VR>RPwqqn~%@wvzbE%KM%@eTk3;CK{9`c z=_XP@i0Z3O{u7S8C!xVzZhG3*)poV<{kyf#s~zIr`aC;7c!Ui{AeZpwoJ9c5&oz8| zq7*72I(vm8{8w{*OO*GNYtKzU;)`@Z0<+VC(DNX9O~+EPjLUpS_CbTd>3GLEAm465 z!(VX|uweS9ZzO`lx|bh|1AaJ8mkTzl zN@%)B9%(47mK9F210!i~kR>YkZGlbME=_p2mWQY+96l?wMt}!d*^af97Kl+FeOOCM zJ>@dQLJ!TC6z~rmVb}h@(y{m8CL(WIMP?;9bU0b}awORl|K0#^!0xzTM<7T;i$fp% z58#gNgwt$e;Kk8l=2DPRiL;F6-;55?<>7VS4t(69O%BJ%XO)uWSQNgL_QjLK>A)FR0W!49T4(&eEaN4w8%ioV3FeQS<7}IZbDAft4LTdmicids% z3O43$Al%?4s+Iuh>xBsXw|F>xAhY7Z>BiAQx3pia2U|xeUy0m(=cxKoKbP{*{2{a>HGx8+`8%1InrG$C7aQp?5#H|C>L3<+59@9`wCI1JxRL;19BS zaR~ta#5D`$xgn&P%>Gwf!uK9NXJ-~(YRau>BD2Li+9LGa<3^zcCP>jLlNxtU>8R3JWs z#1rb88~H+Zn?ZQDD)PYsO7u1Ye9RSO_C5>Z9b^h&U%$xq;6&aIfcbd5L9Q!zC-{7Q zAJuo7I}8NTS>=sL>ffn`RG@^h`PsOZ7+#Kd@%I+8*J?T3`!u`xq<{n+7MY(bacP1Ya3hA7t|in8;{<0wBOK-LvkTVdor- zz5dVkttn4(stZfX1h`vaVvX~$+jxayZVez%SH5d;L>v#Zvg1B@d+m*x7jJCsduQK; ze%YUEjQNH;oCf)%sf`HLQvfTsRx}kDf8h2a39M((i@?xxsbMJ#3JZZZVqbXG$(`lU zKqZj-;LYZS7V&OdIa&zuxh#I2?Dr+ki@0w~Lq#?zlYfOcQJKU8&Xc(B;J!vdMCN2Y6ys&2}Dbr$5sv_wZ)oE!1zwOsS<5s z?NB~n?)EgF0%CPi_H#r*Zme4mOn1?|08%q^GN zKL3aO+^G32Nde$+anE~k&*#CYaRy_|k!vj_HEi=KCj zom8F_Oh)z=@-u`C$b>W8&$YeNHd>eTRf+&Kz@Oxh5qLw)L}ScbaENxL)9C=Q-&1+UNM1pvC&-`d8haeWMN^=cafrA*8CecffJ2<$w!Gec;0og?Nm%ipB_FjYDgtR zEbLNL6*`uv%H~@Ch?zR}w6UH0J6;}I#>8S{uv?Q}<2(;yibjCjl2{W#62i}95o;a> zjW9ck4JhOmYBndu1AV2SPlC5q14pt9`#BTe#tb!NXjes2WewzCh!@E+88F&>NqOqa z@hs83#oV2m;abml5&blb;aEnXmpd3pRswMuhV>llSs2NcZC+Jr3j_RWbQptSGgmur z*`S%LwD|Ubt|ixvrE_E_l{T7#Kr;P);u;R2UuU90_)|P&cyHIp#)0W!mE2B=BtpO&w8t|Yc0YJstrB6<=lMs!GtZHC+lskO@y{fD_7(sDmU{d( zF27ES^zJ@KH#6gbmc~jWL$c;%Ix(stC0$?N8r`Y91PBfv8``rfDqe!l)l5R~tIZ9~ zHe@--`zFa_)BMicU?yf=D{(cN7ilv zL1XAcsaU3;$g~i66%(#$sc-pX7?m=OnTMnAZ%vIj%Od85blInGtswIERmK0b@3|b6 zx|hqPHR+Siw(E}dk^`;)13z+$;QmAVPwFl8?m))x#y#scxSHW+<*A3E|3P|S=#z}uH#$U`Odn}!YO#?>Asu=%FdT_@(FN#-3T86EeAh6LXSS`7 zd&(dj>dbd8l)X$Q3neJ6)vT*!heBIKUa7T_CWeifvXoZldp+aLb%&O4$}C=NI+0IY z;b`w|2itCBt*=!8+guYUkk!*pZS?<+ZW=9=YdH*fLq-i*Oo&xQen4P^n>?@5zzZTL zctRQU{4+zjbpEYZPKQKdHN;>Rp_*ZuVMs9Yt|&_3K=xWBoS<3Hal8Zp2O7{b5$K7k z$%Kt(FwM&M=0}v;fLeU1^3_!Ly_a5psj0TMWfNU$KFM30khC>Bl|qu>ty8tw1wsalE{c3lg~slSIdm6<1tNE-ss^90Dd>s*s@Y=GIo71Fdq=grpK&z z#eAkca|03Ft394OCd}!xdv<75P)f~klLgxtQ)&f(-r;h5LvZABM0}!(0}xO(FYr9x zaz>ahYh&M-Zv+KX-Sc20Cji%L=3TAB*Y z&)G<)GH!*KtlmCP1e=g>*KyC290CT%!F}PO?Ji1|W;PEB@=*g79c%)FJ5x=mC^PoI zkv0Pr6O3(XY`NDxj}qx)7|yCm)+}~=w$yu|SV+##IY?a~t;MyV&EHyv2cA0l5|9je zv@Sug)TKWNn1~Hc_F2z&67Fz+vQV#hbd{*cfZ=|v^^*dk2`ppzy8+B#U~X?27DR+e zqu1BI!~pJ#PxA$42ta4N@xdF@uRQ%qn@68(&n#kuli(0Wkw8HcCL_?xstjiVaf+(l zG{6+M56gXqgkP$q+F6c59!w8mnE_tmXt?2fvf03<1hd`XAusvcT7M2%&2uqL4qnI1 z2YL?ltgj4ia=Q^Kxta1hvxV#|k#H+Wtaiho;6BeSG;Er%5$C$sDn3gfl0&17rLmy0 zV(kWV+`759n475CT$t=zJIj$@t&*kOyE`74XV>!f>=Hs~>g_2nuH^VyHo~W|kD3<2 z%Y;pUI1!QGHeIk?o_%TZcNdO61|&+5U@Z)<$wVNyfa`FE^Stlt-1kXemltX>tDO(u z%B7j-fPqHz)GF7=$aZF@f`*TpIy2i@XRJ*GR8@48z(JL#mMMaN#T63LFQU?&r6f=^6d=HmcDSW^1z7V!POl1BjS$$Ui0s?F?B_eOTySSP5%ohmp zTJ(a>mB4=LN;Lu`7{b6WI@I&N5B3ew$I6Qsu$PI~MjdbQjQB?I>kFitWgpCrte~sM zcAK92qt5zU`P11m6PZB!C4Yx_$mE9cJnwEcEEzn~^|nQN@O@ezM<|OgiV&7);2$2B z@3X`J42jd-L?Wo!7fB^7-*%noz!S(TLMfunrm`et#2Mhx z&s&C8U{f}ulVAb+{(_d_XWA^+5b?hQk-icg&WrhZ#^`gsa(Viwlh3w!Q-PMAB-g8o z1}ukGBOLg!001BWNkls-Jb6XG!!VCn; z$ALB3H(pL*O=1%P>~@n%Ijni z3?_BSg-r0CHu^!=NRSu{0ys0oX9qxq&fFEid~ezJ*E&g&y(bIV)rMgN^nuwi@P~~n z$u;C>iianZ`_3k$5n4>;p+CU>zoO*_7|>bYIX{xhgu&M?vO;LGr9x>fv+fU?7RF@l zGNoR`jK4}Z1zp3?^Y8!?_9+{^&fSwijxgSZOwm-&cH9d!+ezV@&adPSCZgi z$d}e7`%ZFFlRby_oaB{BA}hWjUUZpIpOEN3UfcD7zT!IjHmavEWIZ4WWFn&Bicgaj zFE!ficJV<0((HJ1{>d%iwg_j>VP=l$fjA6&1H2XCKs$$KI7 zcNt6Z(%7>a@tks)0lX3r{}_*cvXZP+{Z7{UAL%gr(SlgOTtldS7xy{Z=MivdTw)je zEq@mx|HO5d3xz#>-$5mw_o_`jTWp<;phl+ZQzFH*(ywgCp2uS5m zXd`>X`tJ9B6;m_wOd~o^{28ef{ks-7@dSA%7w}1i zTvOhlklu=`i^MuY0$J2brp$-r?*v(*Y6%jyn=aTO#g`?UYrUEn_PIu*Rm>y?NTYE; zsoP&JYrecsua{;q;85e6b#5(|&t7Z2Od&6Ilv8`1tQtb!=KE%v%N@0AgzrBDWWMhj zLt&$JD+mZCT#Lhd{|YeXIzsPR7h#hxv|h?gbHU(3H@yrSGtv}%A^!U=$JZdwu4J;e zjRr8YH1IDSbjC`fOWltuf?qhcKrmS;?Ih-(#-C9O4n#hW2_J~2v_Y(l5HuG$U)b9p zygm5+qwfkeS)`cJGcJuQ4R0C$pmojvBsYJU8B~*Bmrg` z!#{HkacR~V!Xe14i^sa2mfBd-1CI3^T?&Y$0p$U!MvMru8wF-a2$y3Y74Zi0owgx< zZe6nP496P?pHaCV>-iu@4HJRuF!FVMh^IOl@ZNW_7w9qymt(m*bV@Ww+3(#P0&6O{ z%pqOd2Q%9pJo0vWYHlVl4?6O!coNIy0S^E{e^&fN%itCZQ2THG?tt`fKF&Tq>f%o9 zXWiL0j*Y%7o^_t@$j&zaC#Pf0XGuRm<{`<3+6Q8gxmyw7Rs%fODU+PE84%x!TQUS< z#EhQ;4GY|)FyEfJ!4Q5?DK$6B6c3aOvl;LR6Yq=?06Hzmvd~grfv*Y8S2Nt5fW$1f z?)*0zuYI07vXc!#3mSaHB@hHLO{R)p62#~5of^z+_n!X!?kgvB_a+uFVnX-mHBrh( zF+Yic&rkMA&T$8E*`EQ-9gO(2yUuOJ*7LQ7Y04vcMx*B`P}1;tq##}|gpe*r=7Bz$ zMX|c{Y6WE&ed$zVsBp-?cW5b5WQVo?1WT`D0nuqQ-0omOu z_$+J*U;zLgDI0&i`}=Jj*{KHkJkLwc7u(XB7w-QA0DavaMoH1p8$LQ^FA()7rf-SY zPCl?>-QG$dI&%2%;SG@lppd!M0CroI00g*?^!xFyatwg{ZS2;I$4QmBl7Ni_tzarv?_7(^Fz>+bRHfM}<$ z9&bccHkKyTO-n&^nh(BAL~WPCW@s6ljYy9=|CfB4kwhi#Q?{#{UeRma%lg*sw`8Hu4%IaJ&HP{ zp}h1FqDuCn(7_C&fJc_P+({?dWd@UKXc2fz;7_mwMm~@Ga717X7V*qR0_<_dYAfsL zJ+?#+BgwMX?qKRv4a(FjwbXLRV~E0O1OO}2fNi6*bzV6+lP?goNnDSC2CF- z@-q#XbXP+q57AOq2bo!<=p$v&@^Jmz=91N@IlwsB)8#eMp}W2HPC~rV^AeFXID0Vr zF(|`4B6_?k=dYNb$6(GSQahW61{6Y(x)aj{rJB+-ktBtZ$tgmz28JE3u@ZcKHXrum zJ=`x&C(Pnr3q+wAu zJWqpO>j;we{X&Lv33=Cqp7BSG@&9LZ)7Yr%7z9_tBrlN^qN_#Zhxh*@Nc?y4 z8wE1T{5UxvfPx>%lr(yt3YkU7coH0fc}_K9C!OVCF%C{a5$9zx(UaIY-{-zEdakr#e+9krO9+##<>;oA4Q50R;QwAd_&NSPQ`9 zpfR$>AmdF4oNZ~WWK?GD0R=u@bEIZ`G(nMjqR0;cQWdT7zr_YPGN9KtIXTLOwh9lt zl{oIL7l0N_1T=4Szty`V>cST@%Ms*opPn6E`>xE@=;P--&)elBe)irkWELCdCXGB_ zHoGte<8e}yi(~i2QsE(e0f?S;GGdz@X!tT^5>uT_$?g$BW2b*}LrX-U6fe4FoTEU^ zjUattY*;c`$pX#1_O}t(ua8h>pRb}yN>i2K8V$U_t=lrG0yM+1td_b1QW&YU%gV{Z zB0H3f3TRE%=Sp0MObQu3PI!CX1YVS&4o7l zijcx?i;@6}rZyt0U2cNqfH#Wa*-=gD@7R6FHWigbOT0I#KDA2ZXm))Z0{0-pa6tUM z+jDJq9B3P}{%X2uto?oK6D;vMHvDIIn2_)9Y2S0XM|2lzvo)$MECdM`prOt2=qO7A zW*%vb`I;PhT`UVDdU4u&uF!f11Kp&!JlpXO!lw2E(!i^Mx-~*S4Lpg*mI6~rsbI=# zKNA7L0FKrkFBK(Ac#Wn2@F~pjusa~xi6qhnpS3V0qU&V6YKSwLLFAo(vo*)wKlS%d z7`PP#$`&?;tm?%x8|8Vdk}bCH`6MeP%8j49>o4jiM&6{5ceuP|=fy^Zz0D03s%2ZD z?Ha@W7c}!ScaXRASJHBr`%7F!W(oMj|8~(P;X(W%0?1cM{0?MpMTOUUO0RG^ysnNo zK2|1I%s$2%_EkyP?YaqPrW#TLF|u_)NSB_=eraC%q_gb(X!ENPZ(zfZI3-B{TC3d{ z_gPwt55rP4NUV5eR0nW2NdNuH5DF_1#q zdmnHKFuv^MrJ453jh>>R%w`Dm^gb<3AlWmi2=f^5Bqm*Y^I9BLL{q6&)WiMo{~Y1yiS)lYzTgyu8(;yWumKL zmLjz|%GfOKy+9j1!Fc9rM*$Cg@Y5NfnS8ay*#az34(P+FPze&OC0S8?d;|@BJN`UM zy-!FJC`pT5zHa8go_kTL&v@^>H(}JM3xnrL{K<%CCv-v-9#$SIiXq`|ppTncMg%cS z_GjBOYZx(^Zc5K{-wPTEe7y#appjud>RgXtb2RyWyKOKe^c2l7$Wz{QLH*TL3+tA9N4;@V{0_i^N${5R;9z;f^w&ay-4sG-VfJ^X z8iP!_kUqH*KtJa;Z~1=Eb@gW`pEos!_-IQ4BbWg`MBUNwbGG@a?BiVN;>$#jx?vn5 zDmIvRg~neG{dGXU-hPh~@oyZ-IGFsZr3moWv4)-vu0t3Q&fa|-fq$23tVq|g9a)j{ zMd8D8=um(HU)bcPTH(U75C}e0>h>2nSw*(6=XL~jD;k>N4oLRB7ISm8F&~akCi0zm zA>NJZ*4;DZ(3OAvr6#Vao6Tqvq|^p?!v_ROk`AGGFE<3&2B%RGU~6kG>(lH>uh`W^AcPw zntUgRlY@^3YP&J~%;+#`M-&Py@)g!wqWetX3rSdF82S$^51bzFc8Pl1Z)= z0*}_re;U&?CX#dIJF~0Vz=u)MTz8#q7r(cAJ0id0CYtupsBsP;4`U5$BY%bU%h>6q zWUmI#Xf~U~Ap(Ii)V23e+?O_q4V|Bab z5(YdvpgdrWyPo#Fwr6Joa0|SHQ)B`pP%82gcd;>rGMYy!Q3$zP0O58tI5Yk{+Nd8O zYH4hVfDmEigpfj`Lu0l*dl?YSW@M}SkiQ)i8hR1{Zm4Y3drsA$W;4Li5|_3_#aGZZ zJ(~~WL?;un5;-FqFhB30V8Q>Jy$=9BQ}*=(t^t|r$jEblJb2=x9(hs#{wCF!dd@!g zg}v8l(D!RkS4knx z`l>Vk#DA~>irLH1@R!i24US5gFJ>kg&7Y(?Z=nN)h3}~ z*D~Xy5pYKoA_OzoKx?`wy(?O`3R#)@ezJ6|G%Z?p17Ona%q*Tt+W?cvcbQ5%kt;cc zVjn4Cjriwe${xsAg;Y79cM&iS(!F|l47elD!-ttTH#+pAx-3$y&0ic<(nif3E3HDt zx8p!N+dM{^j)32C`_umS_J5?*)4Pokq8N;DkCZ0L$2Ie-V?q*lwj(z4fdHQ%>n8yMNP$AXYNa&&4mDZi;$dO zCc&XqKaEJ=jZ>e6BCZhq=K6|iB#i!=i#EG*Y|xMw z0GQW*F&op%o{jLaP5EpgyBZLZ>4xX6LEZ0KGDdc+-Y_V3?6ptrx! z+N%rq07O%r?d!4&s~WYP*)zfL28FQ2#s7p^nBx@C*W>nqTp_nsUT3O4B@H|sLU`s8 zz=t$(Q4mM*K-j9Hd#aG~!PffUmfFTKwqb;?H&s3u{j^e7zr&hgvJ3hl_ylD{<&z2mnhZ4%bYL zB&(K~jrS&0^2w3)BWg9sD(%5}6}0f3(dUc z8}m@Sj>&dprO|#a8G6d?1-1qRl!3wyM<}-Z5ymM9@PDq>4!!YH0HC`TYPY%gAZf^# z$~~eii=dlfqxG{@WN_KXz$`StKZ>h21#U_RlMTZoRo+vHbYf08KXa&>*v-JdarQd< znFJo+;pwKdjd=ps8k;|ox8L{Px!D*PWte{v72}pXi#y`RVu>L@!X`HSfe-%E zvHZK+44VrTnXkKiA}girMghUR>VnwC`v}G?CiGT0Z-mXAEVkXltVa-ee{uL}d*~n- zK?tRUu6f!W#;swO`IClVr4)a5s-pBFLcn9mo|P`v#dc{lEYaGmbkwhK!FU9Wg@F}ipVc1PY&WQe<{M*bRKLU;C#SPFU3+GS zB~UhwUK=ZP79ikohq?|n5H&%A{&L(W*jC7j?DCS@1kXEdaDboA7xSN$BGpr{&K-K} z=OTJ`hAaEl^qm+L6@@+b0n=wRTDd_mk*rHh1%}4Z=U2%PE9BN7a(gm6-r(a91$q?yk`#!O4-54N9uF>|9~xXssQsiUlhkc7>Qwh2=4g>`19qUII= z+Uevo)~HV~R;fhf)e7&k*~r+EB?xC;w1i&?LOK2tv2@Zn-G!B7*#(jajw?rQws^|En;nZiuoQ*x8+yg;f@zg1$CZRFEtBU{W%3sCW+!2?VSx+46hIl+f_+IBQVYa0{@Y4os6fI}% zFL#tw`&t7)$(=P`&Ggd-pJvx6Sr4g(b`wGrvz4=J1l)rqe`)IEpn({C&YA6iSS2kE zJJ}0;HqW}EB-ddN{MR7hhAIMLd#gzFhB`=}&3&v*Y%|EOj&7_>aKb6?odEQ_Q_Waj zg5re)+^!L}M%3v-?m7m(56UnrJtCk!2VQOzkjwAfULeI=L!bI>U@E?_K=D$u8Ij(q z@}bLQg!ydb^3v3>vjgI`6dGV!WPfp4*%q=_%=pXh&ue5PlpKv0 z!%vQC3Yuzxk^~-$PtWB0!F`U~NYQUoLv3ca{mOJ?<`U8ANVp=J7_?`XfPzLMZ=svW z%2ZAP&X!E`A;?=T!y{;*Jq$qtK$IsbQ9mN@98elCJ8CMvl|2nSUL)C+j)X0BNKLV3 z9wDAwF8Qn6b0!cZ08EGE-$1cc$Sh{Y#$01y6S42LGkYd7&PG5XlG#a`{k`{%%kby!9?4x zr%ZE+pz;5)b>{I=mDm42=R9{N0Yp$C32~`QRgy^nm$oj|YFjPtT6eADhJx&%vdIoA z0sr< zJ?Hazf4aL%OHMrE#O7#y{krMm$e^^^5Ii@$B32W$HJoaM zW{bdTpBovE6IH=YOK1D~=qRxGO0K$>V(yX>2>;_V9^II1(fFLcIkpj{)~*1gzxZ=N z40%%pVIM-Ub~Fu|(EyO-%&X*+6`p3p8D4ea{M~G?0mOIG&iu@#(0$J)A(gJ(~!M^4jd2zhn(g4k~ z$H((2R-)Vkfd6UlY+tPs@EBS-0T9X%@iDJfi!(;o3CY{udK5{p<#HiekV|0K_^wKxd@M(x|%IbB&VG5BvilKFSq3tiAcC*T=r!f<1A z;|*Z=E6DHPf!uFpp zRQ~v_t6HzPf)Pdmz#H{dQSh|t?mN5os?6!{UZ&L8+;AySPzS(3CV0wMq8r;A&j;pn zncVFi4D*;xaRDI@<5XBv+KQMx;wkq5cLftc9K(r-L-Kze5_AD15=k9 zofyoa#%*l&7gj&ujlmTH@*6Lw+q7-dvDr*!mGeQw8?yiY#L6v(`2jC;io8xZh(Nl6 z%Chez)UVdOWF4_DD>EuY5vOn~qAacae_FE}_g0>U{+^yfaCzXFpi+%E=R z@MAan{Dp@E@v~fIP8S|sEKfs&w~)|})8L4FbAB8Wo*bB9g_o~5nH0deg7~KYoNlUe`M~IH8t*E`zR~?;CwY~c>Vfa^{sG|L3rfMlJQ-?(ue8~r=Cci!dYoqCxO;L{2D2fi@nHYJctySsZP z>wzM**j|SSqt(0XFSz=wjKPU0W@BR1kDk*RlJZ))O_5l(2^ArBFN3uU&flTZ61B|$M2SJ#W>Y!Ysk|LYo$s-RL z=>TBPrzvJVko+`PS^s?eZ$||fJcul>)yDoe*D151f=Q}a-1~Q(r6_|8XQDMTeZ|;c zBmtzD?kLBe%&BC9=lt_8v=yA!E3>=o4qru&eY>*(@H1n~ay{fn{&KgLY7ltZSM^n5 zoG$?Ld|@ztejA8Lqpw`_m#z^)JdMb#NmGNptUI0i8CeMI148nPy4c&}4z$8IxxC)W zUhij7$C;tib_aVVYCdap>A)3A;m!@~rIg0jld%9!2J4_H&Of&=RQOW=_;b2(t_%l2 zm;(qaz1%&bF2fW6YV?KL`2Q|LKvP>)t8g^;Q*6%PhX#Y1irmaZ@zYWmqks%V^H8Ef z(yVH*UlPEsQfKMuRQGi;g7nYD6z^CA0Ymc>B}-%p zzjzy>BILT%%->=QcO~$#*5Y-lju4V{Y5!Xc!a2Kt=K*7mI_jt{_jg+h4}rj* zx?yz=qN6`CC{MdRze`&cRJkAwBjTu^MrWI{FaivHE>=GAd%o_^WZ*&(e8m@U9oHh@ zH5U1=^_BIH>Fel4P?%Tk-{EiC{?2h67(It2_BNG956TQug`tvXT>&kA&iA2UpGYHj z;kG=yu6l%?o7_)qDY;*S+v|pnaGrbTkItBRD(}oyfsn2Hs!xe<|dQD}`%kFz> zYdDn!7X#5^zi#OMpezGI*|E=dulGgSIL~v1#z1;;jy~LJtq^)MxwWBD{Gzg$I*P*J}CR=qecL+ zlZ0`TKgSeyY`zG|j2Gy+t8UndZrnR5X?NKJf*KJvLSwO_*KaA@Lxe}wRJgp~CoRm7msNtH#T%Dv+HoXVwn~u zkYynYf8>jTZanE(fM^+kD6b)j98~*;<Gts&QN6 zv5@8E2xg;SEOb%p2D%jjYJ?DuFvdKS%DKD=SVs5D_P;|HEa#OPJZLEhhPh#N37Jqg z29w2WnYo=2wrhph$rTt*Lo%DabV{WjrGeeL>3{6KR;rl?ks}#Z9!#73gx5osA-q@* z&VA$tt;IRoG9H3M?$Lnr2vQKNL6TQ%E9;+223%|5A_5vIV4Gj8eCZjDR#6Fth#3rq z4;03?d$TK}cnBo(Bk%Q#e6RK!2xg_fV7bX*OKQ~rb9%A%IZz(8tOsufxQY<}?5i>E zaw0I#0JPOq_F~sR+V#;vd%N~52ch?Bht;mo_y5MWHx3@0Iq(q|UsF9IsRl)dG;@!j zsM**iAe z3?>rslRhL_pFOgiWw`jUcVQ%dBDE&`;JNKvHmsbFnT!GWoO|%T?SNA0z{Pa^0F* zi*p#b(sx$2wB<*Hf|GTl+3)wiO+x1agim|PZ$wpui&5Zxf5>wSS!-blB9;%YaDGrX zPTV0IHS&VL=M@r#9h+|hW4=DHoF{x?@Q9s$o)z1QTD46i-0p9-H=ZxT69b!>u2fJ3 zaWK-U8YfkrDS!IdLyq08|Ifh#$Se|;7yYKw@zT&=h+dGHaAb401 zU-p*)_cwPGPNx9IBAciEMOI}-XkdiwOL;b0n!d(p7ZCDXe_{T|mMzCW_siDC@-qDB zrYp}pJz$nsKK!4>N{(9*Ww0^uW3NVtNZw_SfZ)$-heg@8?(@6s#b7!ZNa7*3I3Enp zV1@-=_84RPHAlC}7tvfcu5@VuaI*&*xM+>GoW_A2DJ*}kKQxk_>Aa^bJ}4H}_(PsT ztxRZU1H-4EfByN(gjo>9tthZb$>uJXuCSwU4H&ozEKK#X>^m6HTn1?RcJt9rikE=(`!sb$>p2-WGL&r6X;)C<>CP%Pn|1P$y5Sttf{Pf zSm$Hx&sKQdk=Dw3Zxx7Qak?M2%s=$r(f2>iAKujivk39OnM~OVKhJz_=sxaJ`@=r> znc9kXiO6wfnXXLOQrp#VPBD=$Gc~s|q6t4z%5W!=$ z6%lnfULTj!ezJH~W&!hsR_#QwVoTR@G?|Hw-zHQr6YTn7SwsjaI0QMBeXo&&`gw&bVSYk1-O+Ff z1m-*xd?xAiM%}*IP)7IU4$3(gp=N;s%XK|cn(7N%5!i_rBFIOzm34Z7@OGr>AUwRT zYDA*?a7rHLTgy!^<<)0pBf@LxbC`O~5U|s8A)L1!%p4*7x3tSDFV&Aa?{K|{EKIzY zEyeRt3uSDdOBatF>638`meb@UD?5%gNt3I*wOSIT7L9356_Brq#TOJ7rt_AK zITHl73ySgT9*y`CvR8=U>%JinDGY`x)joknZf*YO5KH9`1CVyeJ0W)=gNnXq%I zk6_UY7Bk;$&@}lAUK}&EMi8FyQv3KEHBAM8OstU|PS)+lWNX0zI(L_L&(;_g{rnaE zD%JzRJ3ez)_wj&e0ULO=ZfIng)9m?y0|zWo@Lsw&@NWCNqe`}0Z7wQVb%kD6RAf6( zSeoI}2sGw8buGnZXn<-eac zfXf}5Ps{{nGPBh@dZ!rC^|iczcCKX+FtFGwQFKgXx`TxvxVxjOW3h)`YSG0o%s`Tr z{(RD?aas&V7ps~kCJG6c!3^^(y0y&h1qxe2kP84^GO^n(D~|&d%_00#1&{sQH$wwdEdn`4;I$m9D%v zNsqV8+ao`ru_9~TW`3Bzm}eVL-@Tta0=74V-YtUd zTShbUxq`A=dgNjC-o~A}^B8$sT}9m!x`@SDq$^P5vvibzo5TXc(U^PF8D=g+P3$13 zq?vk9h^3q>5%~iTj&M;YDBlKxmVrYCZ9E(!GM_tWm;>$uq}}O7ys4vUEZgwR{*?!e zJqnNN(gQXy%r)3ITguHnkt>AdCw{S4|DXiHHJWV|c7~7k`gt8rzHZ;%t{F)zk4D3o z@F8G+)8~$Ag$x95L1SikiCeT$<>v~}{-Nits|WzAbYa!!DPX>aD8>YtC%oz*&fL|m z+MoM`v+F@Aln~s&~XgpD@Ob9vr z#mMTBt`h7D0sY~ALP{#MI!_UCJY{Hg%^@{!#+%|mD|Rg~Xi+R#Pkg?tgz)RSL!&vZ zQgZ?r&FHdmojmfLmUnUi1S?!OxvIt~LG<8kOK|^pU+fs8@mZ6vKl3qRsb|^IAhc(= zMft@5s{6PUmL>s&2mbzFg=3oD-+SW2Q_t=fKjW(f@arO=5;5m>(w~@yyiNd>=KDkp zBDn$8?=FzQWz=sqv}TCye*yxbj{Rkt!=I6bVN==uUp$Dpr$=t7UXa9EzXpxBg z$CDLR_9tLxT9#Q}vEn4$9mVm&cs!T*NmWz$oI3_6_{*{W%}C}%kL_PT)OZO29?`YE zd%Oc!?I;{UPMre3PTMD%I*QlXP`-UYK$DIfTHB(3^TQASP~O>p=wcBJ+bi4W>qhT< zO(EY4hW}JsQST&P`V)c1SYx^pN^VnIafTHc{`sEIXZTCFd;I`r>g9ajzOGe%KB_uJ zP)1m=FL=qR9yGE&nbm1Ef<}`-2Bs;&QW*8M+}u&s3;T00SB{Kl5aEmDpL9OPFM$C!$6aZqWFpr2DArW@YQp83J+~ zGb~KHT`fiZ?uU2n?Yb*jcUrd|%@}H&4g&W)q9CFzZCmtn-$Ot@uBohXnW=GB^-_bl zt0pDiZ|Z0|N!VTu0?nB{WgE16?$#cpYenFZ*AK;(sF4&3q0JoRL zb91^ae}gcM5SE{M`$e&(;bufSmrF3glbjul1nBONd98<*MDsL%mmm%ol)3)-H#Rq% zX$h}G##j97YgRXv@S(uq!=CP~1tuxER0|4VbFdrjDl-1{v)ya05ieCfEIR&%RZ&M71~(!Exf8 zaLx67-|y}E?|ShNu}iIp%KB9~6@B;7o>^HNoq^qjKlcCi`R-k`9>`^;JD5EDh{&_9 zKZTZtiA2GdpmX0W2Ub!$&LJ=j1dg@jz=IBu8Fy+Y6GBH2l&#SsP^505b%LmVP19hyfzM z;5)S%F@}i8X1Ht4@jgRYGlT&SNH^l*F8?h6^tpu588W)C519`_*$~48dfr#~TFqB$ z^mz^snV<7}ndW~B$T4Ci@7Jh!oZKovU$@J(-0nP2m-^v8vEOmwB6W?%q!Xtnr&_S+Sd83YAtAoBGVuPOVl^L=+&{8BhnOH^3$=ig>c;ECr^F` z5Hq=|+?-@$wG^*p;&KE$642#&x23@#_1!FJze)%U*jlfsumE9V0sg(drhf-juOAMq3- z+Ab{F+_0QG&^nnD@EwTIMX}35*W<3hLR$E>FT(nUgp#ETB?5(`G#m-ulg(Q+5^$UFhpQxvBSFW-*|1Emf zg^j|!#Jwmp)-DslH~pcYv8C~RKt5FvxA?_Me>ciibBO+D)d25FiHJBDI=hzn$b8PX`qn+OhBf((QsIE?d|0bC~xU1eCl-W%29_df?wsx!go zbB;aa6xTs4wl-WMLbsJs+0=I;hwI<;y^*B@H-nkwOU5O^{i9{E*`#d1rIO zNfgixB=BxcMbx=|yZP-eWGSm&tru&DMx7160R!_)ElzpwZWNr|Z!s9?YA?1g)PqKx z!#j^T{Jxjt#U9mF5{+Faf!3d>OB~KOh?|DToUzIu+uM-j$V{i zws7A*q3`|V({nPJpl95br{yiT|C8y{qg2vUM!ABuJjO~-6;liS>h;#cKHS!G!n)~a z9TG{nQ9Xew@k*dj5qY`sAxsslw5!)!^s3=6BUiKIbcp$KFJNseb-T!qpZ0{`{3YpKDL9# za2yjDdBm^fu3MDZJr_~>XM(bYdeGRkebcB+kXa54tJ9vqd~05*y%l)NIRWB+{ zMv~w8;;D9@Yg=no>Z-Y?PLAmI;R+lFAs@pAzMI|)5K!X;G#|02K8tswAZdYo=)E#4A> zoI*ekC;53T#hU^6ywLJ=52cDAftnMD<%0NvzE_Pef)Ew~f%;y1y<$rCHgu3)M*P@Q zn~|`+jfG2$uvRZ5u>hpx|K4+HJ z!tDZb=AP1?vD#6KB6-58AbdDvX=(C0(PeNxh<(X_&Zyghw=j!-oQV@ry0r22BsB$&xpIX zHvy7DQ~%dXmL1^I%6SGev-}*_%vC*B`r@UV%TXS^LVb`4Hh3wk^Nb_apuwa`p*iP> za9*`Ww{gMjRYND3NJ+*%4_2=RO@qnQfai6{F-*2;&36nI&TlXn8C z(Ox7Y4|)1&>|dK?jM?ZbXHkWU`^ab90C7N$zuyH=Nf#Q*d|xM#lRjyVslf(fIed6! z?kVkdx$1l;&Sj8;!!A4BWs60!!Mg?IZ|M!tM}r*LGw4na4`@)cI?#duGs~3vrIW>= zxtW>U0^{Nd9OgQTQQ$8lo3%bGEP8egO91GLV&$IX@X=P7Pf-}NR{El690O87c&9&T zxl6Ce$$~?dELks-E;=GfYV1WRB=>0y@}^g^-qldZ$Uu;)euLl*55 ziAFxYTylADK4{}7jh9I%7c%pPbcBpMBqLsFh41lxT$OMm%29E3@pI>s3yfy)q6OLL zUnl;qT%fbHGBf3w`3fQ|H7JYJQ|YqzEZhS`2Q#uRHhzxP0>K2Z`rYN$>SaK?k2WkR zcHR)s50mUg2bSXT*4m{b4;|@11JPJ*m@kNj>?!S;r3Z*4*NpL}b=6TN)xFQQ#>-gj z&4Q4438K#2z=vbv-x@a`#9So8Sp<2@2RAQ}1$1@$)#`6JU{Gn$TtA;&5ei{B7~J3w zX>P%@RH55Dt#(mV{vw@r6|=%kBC>ZpPpZ(WQ6F~hvt17)Afnd7ER{G)Kb)fn zjp#rVKF9zHyGn5GN{&Ti2GRzah-tAQ1Ksx%DW4J=>ms zxnn?A4_-Xs+JmpPKvxGr@T=iNhbR8E==m31XnRd%Zn|zvQRmudjLJv;Fzn`;hLeL- z=c?*7W+8e`&a3DmT;BIS$w+Q~;2IWruYOp4qQ=mQy|A2H>MZqEO%;S9cw$$nXSVm~ z#@POo1cb3aemBX{Rf!&9r}y^9W9LQ@dlCTsAno0ZyG-P;{+SC@s^he5qs zDZqy+IS}w`0m5H~$DUBl;1v-q6grSedOQ=-LFsV&rjCZMG1F|ea<9(aI4(oG9eeyC zO@BZ34J#?sMRX-&zoYRsw){0yS#Kyqra5& zS+e%E)TMD0Ff5Ec-%bway0mPkQNWMX3?1<&_it`KXi<e$!3-7dtNgmIsM z>ry-DOYG%cj9{E%#(kgB{&KTH_>K2UMPo02p%pkE7=Pfqe|izKVy`n`7W>Po^WSCc z)xubb2LD%Ob_xh7&t^5B_5IqImhQfj*8F4?JSjc)9QdOroFGPmfP(MpAzk-;V^Eq#mBc=;$}*h~7OkGYI1^-6 zC5;z%>6P=1$xKa{CJIyoscNrmpXOzd@tn|qA07lj(zuBfUvQ%Zo|cM!It4%$hhmo{ zaUFUQN6-kx2h%V^1#}AY9fY#ppZ6m0A%6o2Urb%34gkv&07?CtPxfYH7ME%>sLj5cWIjO+uPqBnKhYtn4t~1A<_4r-;uu+4Su5(lXqQ_7s}^>fvh2SIgZY| z?S(POaBe9K7mZ3?keb?xE39ZVNNy4u-s-*pEF3lu{MMZ0* zUNGfCGQmb4k><|v!-uH!zRQ!mn?7wim3!=bFnFIIJ9;*|vi-_+gplOPyP_b=L_*U| zr1BRA{uZcjDS*Fv1hqE|D^#GiqBinXeNz0olw^z{e#~o(-QQ?0Ue#mm00bO@ zfIlZgB@rISp)dsSm_KAUcH}P*i`QicRvcGR_m2A@#EQ+|Oi0xoT~VNL-0r>#$azzq z@dHjV<2D4n>Hj3r^0zhKEh5L%R=U9Ts7jzRrwokME{w1XU;anozl9@A32rJ0zd=GL z^+3;4dV_ZXuEU2;2ZZCGjF#x(Co+Hs^AY6Zw#rYI`^ClOej;7Z8JXlS$6H$)jt-Gl zi;Y5-qY!$TtVUx-S(8X-IvTGLYcB+`_xlCdz1IkEas>!1@e@vIcOo#dQ+o3Z-SclN zE(GC&4uPR_)FbP_*`4r9(oz?^fsxNDN{XcpV@df^@9X?yzn&I@o@xrS69&J2IhDwU2C=;5&_#$tf4 z`pF%~kX)5EdMluU1r$v6!?eENd7FSHS+py?oUYJXxD5d>MT2AYBCoGQA&k{$CxkEc z2_%k;;n#}bQa|?97uMyF-tfG7R$>^$6otS6(Sr$mE0Xx#BZ8mVa=UWG;1N4xYVsIC z94w*y&L0R>TETz|2>XJi91sHFGzQkljy8Ac+h^B{@UL^jMm+5g8c}v7EC9sCePvpO z2T;p=RrPaKvS`E7)p`*@G;gIrFi{pNjAZH^ClSrJXFXAGS56OUpoJv_QOrHR^vMj&LX<6ivqbZg0P)1m z&%362*`Qv~24@G~B_P#ExLCix2m)khDv3BvtS+|YSL(q%Em@6ZprRM@rCObxwC0aJ zRRlrW(fc z=?-K#J?yblRKDY6XBO4gu=8N)db&FH1m>GJPc~%EDuKPhUy$6PqBVaX0iw?$b#qFg zDTrDuN>nqhTf;ITV|a$|UOIW9;Ak>tkyit_@xb_11nd`J@SG15-ya9>Ub{JenUeX) z$S?PcU%E16J{JhJ>iUkekF*sY2ck{hm!!WR&$082fhJ#A(?}a6sqd`p9_LjH(H>VE z#~`Qdvt4)k!o&yd9~|4wU8@1gatmZUiX)(nu=8d(vh$cTx^$}0ycaoP59OI1O!e% z>b#BNTN4oBz>s;P=HKN%%^!{> zRC*->!?S)L-rTzR8wSjrjKJ*UQ?mF7j3o=m1kcwDt#OxgcX(^P{C-4Z{oIM@oux$p z_<@(2N8i)tuK=4%wb9@-1V;P-td z`Ie8jREL>xond&X=FrIh7q1cP0byJEGifS=!mirslW}KPob7lCQ68i$UAx>l>$IrXu;k>J$AmQYiol7K)zg-EuZAOobI!>7q8T46A@UJ zob7Zz3(rC!Ey6fzbDW>Ph7i8zFGx`~ENjfs4|5ffdM|$e^#K|s6#uw(NaWRX`J@6D zXhR@vOUSowzLkWAGr=o~*RQQO14NE%uk4tR@(wCj;zVZtS6UwG=6Qgt*mAOV0-+Sj_c~_neU5|dg;<)JP@wg?}9WNQ4ZZ#(KRilEW1e0JHYgq?^MQI ziwTzHanA~g<9BWm#Eb#+TQAKn#`)dpeM}2ufHFY@o=L-|I0)CO&(Yfx-S^Z|yo!;( zNGKn9+gnT_pMuEG`u!=sNRAJC!n;R(VN_9nH-a|y+yu;3h~}?JVa`Ds@rrb`NldUm z2N4^6p;&DJCA~-rWlCY`NpF>Kb1z$Z1OQ!zwToKBPcDvr+S~j$IAYs1%g716lMs$V?m+zmUtQYyMt^XLeWyf2)@a4Ck`Ag%DH&2;& z(Z(QN)T%9qcOcVVknnG{)e#iHdF}dl&jkYqc64^k(hH)K$RSN4qMz(X`ur*~oWVY$SZy*i44GiQ0 zlxO{>tQ!V}vlvl6dprX?ma1ZpK}MwjPEMQ0x3m{0v&e}Y0ajX_ zbcf}7EfxslXCC?zMc5QK#_)wG-oQ!3jAjq+%?>Dg$X9gS_tM@NUpjlMWLk9wfsrBd zWIen#w&$wyBzEeQ0NJ{>3}!DWK`Eb#Lq;*e^G-v<6pU^4e=7eqHY5*nk2 zb~N}0UyX8$OUtG&5oV?dpk{o!tT>T>W*XbeA4i~n)K=C$>OPZ7w8Wn7<38N)YL;jK zQyJh817?L@eDv9wAuz@=R8l~1dr4MASHp*p6f%*LKQ-sSZ4s^~V`k|bi37eL**{!; z%dRa)*)FSH*QdRKJzCfmzCd5hR%WMk@9eIGZWyC}Z4h~{HkBpn{1L(zIlobC3DAYT zyRCB_3U2jL271Wc*RyXT3Vsm)RwRc4_2PmYSW}TxKZyepM2m2KoEWSpp$!QER3S=i zuagj0>OmudO7&YVBG6IQkyNsatqs=+;1!u5JIRk{{hRrg{CGkf#Vl(S9OC8^(-Ji9 zyLYrdx1P2)&J~u5nyQ=@3EWS9NB(LATUBSO4+z%0n`(mz+E3XT&|L4UIV0 zpd4u7vk^VEWrrAfO=EeM|6tPxpMAcs`a2g7nq7Fkaa|t|R9nNP%yhGqWP1G(^&iCK z(X$1Rg+!~XQI}l(dxGB~>5b%x#&7;U1gzLq+C51--|?7o8&&_#1E%^;Ta*WhOH2R{ z4j&rHgJW;`HDrP{Nfo%gFp31u)zJ!M{x?;`aX5G(8K07HpG!dJh?T#kVO32XO=mHO z*BHVV{A(3j3#!c7m8Q(bd(o8uurmmPM|D$eYAK9ikPEnT@1**pPjQzs_gGM$y^$X+ zg*%Dh%Z!l7p`!UvT%dl~|Jm?AGn99r-JT4ZMMUuI@S(kgU%i|Y!s$ZzTMwj*y=s>M zz+MW2jWvhWe5!xb#Rdr6#KLp^flxbb0Q?P%0446y=`Ltp`&I$Ch%rZ5b^h$0(hBX= zrL#o459q!J5e^GOyF?|ku>|`jLJ5Q*J2;Gr8&1x4zyWIkQHh!^hc@s|<@TnBxUt00KRmt;)XN-O@QGFjNc~jwM6? z)?%qspaI?j3{_5U9bXz7TQ{EqV(um1>U~Yv3R~NY=aoRdjf{Ut z!?v`eZy8Pk;n#D+JO`lRW8#ET3wF} z(IO#uBv%p52`xfsr_Thv7NzJS$m1=DTKf_uiEAF9oJpl%ihq5l$^=j<{cn6nve@!Y z4l$T3!moJVKwM4luX}NPbZ}G~znAJIw)I z4;iHGHB~uR@NoY(Ivb4C;{AZG0Z-}piz(!D0p*weavJ&l!-Ys@X}X~9K$@Cws?TXy z6qgb~l+10yqHs?4K3$WA!!TpQasbR{2#X zD4VNY2p1F^_RI#PzosRtdU-&L-$2A&BGLi_;4SKu8(6R!q9}rBVQ(vp1cs?DB)Ky8 zedien!!d^BT`PE^we}TX;dJy=k>eTRFMd;w03Ajpc(Z^E)ncIzZg;s22HwPm3mHpw45)c!kq51%;rxK;f{^*eL>kf7FdfC@ z449?9<@|no;fp;CtK$no;vFrv7S=IHOMO-SeIM@JH2CxGV1hwBBox-%O?L@*8*)gK z8TbWX8FsI&ol2ltgz~blNVsrwqB|gqcjpetxyp+h$j$lhAmN2f;12FFnN4K{3j4tH zBI0~ujGc9dMlg{WA~YF*2TBRo`TV(ff~aI~l#opE2Sx32v&c2ZWZZ$=$$SkCa%zvtjX<`xTI+%h&N@jaK9{V?cJ#7-}bK^tlZ=qQ8m%<-`=EV}f`;Q;WFr%I|cd2jb#h3ho+i2~S>KaB~e z3HN517Tby|WIsvG-?#t$kO8LuBY>!RUx{QllKRMnA@IZjFaUa_Q!fbn5KMboUKk_6 zudyr-rKQb{Z3Vp`hT2h$=d&raXbv(RgBZSCTQ$;ElAUq@V5IGq8J@7K|E?DgBsh~; ze(VctPEKgdR04X=D+lyI!vcqLkIePI?_|}0*N4_FOv{y<+M2#?*?z+iKd*(cs5*;_ zRT9((;H5$61Yi2kzdpX>{PWN6j_23cLEr`=dcs3X)UWZ_%bnXQ4+;K#**6clHh^P~ z5|QJD_SA*awq3aA&vn%!fAwx#*MmR#ec_HzckSJG+f~)a_o=u$e>=>wY*%X$OE({} zqLLg#CV0*l+T0-%adru;f)m`ci{`}U8xeyG7$<8J_AOa?PkeU~(@cweH?9yOKD zPwLbxk+09(CIWx5$lz&POW?zHN} zMKl1;BQQ(S(3oOtUN`t84|7X<@#c{ETN%jC@$WNUBUWpdISn0&BbnwA$WJ|8TMJ+! z_FKSqUGC6Pj#3)0JrjW7OQn6KscQX*!AL7vMAbUIhXj?%vpq+PO@5xl2cjE5AY(A| zXeul3a({(=(| zPCL(9cTbDD!tY%9(Xk<)ExC+kJt<*~O7xyJ|| zCRtqX_i`V#glfxRdDicn+UY|vyK=*#h^}btHB3V=b>-Re>7JFb<>R-jZ6-4hjro+@ zd9kO@Mi&A(0ip;Y=Lc?TEnde6moabxmTGKmyq6`c1Vgiv{a(AQ98O3VI`#LXJWJV= z_FWe=-cDe6T{=U#t#CRDEHMUO96mIH`*d_{8Q5-1TI_K^HTNBB>=eScEz9rIK6a&q zBEnJK+;gug)nelEBnGG=B#l&hFL@@-4YzCbRtP*!$N1kq_}j4q2Mky$B7KP2TX$_e zI_xezNCYp}#6(vuK=wCfV?azbA^%DX*!kxC4Tek$APi*TP$lSYoOCpf0f8gM${R_H zpv!TE1x6 z#c7?0G}ou*s20lY-qK<~Zmy}UU*<^v+Y6&GfLn#(-`Q z@sNr;(F>M{J&yrC4UChuJ9({J6SOlXk}dnZY@QbIqs~}%9f$BzUEC#aYA#&P0iI7t z3OjOGzEI-!CJN+@r8KdakwtX(B6PkX<=dq!;ymjVRGq43UpW#dy?@Ntnw5Ka}rKY5R{ zQ&9n5uXfT>sr0CJKb7C1mIP+#b_ob^!6W*+g$IG5%UeZUL=@m@7~so3(>tcMYXpqO zY96mpY)#Sy0m8JjmR>T4gAB$X6e}7(q5d$0z-`n<|H!WxG*FoSpM>+ zwQ5T{9+$j!`=tQze0jFB^1Ksfo<|HPYvm+;AZ}=BxS3Q&LHMZp=X7CK6DtC~@nYqR z%QY6oEp{rgg>Xzj=HDSpw@%PP%jPivloNno_}02UbPmFq4A7uq-p;68Gh_?}^dBzq zaR{iHgznNBBfY-~2!HpIAeB<~JG^WT0uJSJn6DlrM^!|gZb;^*jn=M8MR=42c;Cx- z^?)28ZVy2!3F#BxvQ`NRSh$9Sf9IhB`DL*-9RS*c0?NJ9D_FF$dS_}g^%Ol27i;W7mHV@-URcWre8 zv(efI{6X4H*yh4$AQ{6fdQkY6Tdey9>Ua255C;W8@Vz8ByE#9bh!SF5RHew=E-2L) zhClRKq|s(myb_SF>)uzIdg9S>n0b3qbExhL0$Fzakh-@t!U7E{mGf8ob;GY9#`8=d z8}DBC%TYgpnFjG<9?k7tnwYCXtOJS(26TgI9Yq-JI2Mr z_=0wT+*m%WpLR5d5aLJvFzcS5QeMkhWyqUrtLj_^TQn!~b97^_ud1Ky7OM8fGg(+k zk-zf(E%*8L@F8%51^Y8!Sc$Rw$06Zo+1=S^bW?Fe)!{?#6NIq7sy>lo#@SxWNZ?0) z18r>2&lRT1Tvg7!w*JK7_75|#E5i7HZ`zSRmkmxdDEFG6{69UVt})C|3Ign^8Cv%& zAVd=S?S)Y)BWB=+blz8^W*8G3(bm{8MZrSu|F#ycA%IcV%I^~zu!~ue%gVDd)d$|Y z%}y6v!qK3cSXCrli!S%9-es-aIrxRb2T)*yFf8!Cu&p}_Bg1Z3#4In>r-G|BhDL-g z0pMR~bvXua%+sCAA}{ii*T#;*HEiXovP}784}j7jcT1#^4GJ=G5FrPJI=DM^_#)kC1?>z0{B06gAI;sH910(8qc5y!)mD`x1ZI(!Q$@sWxn3_#`}TA_=4H^0 z+cq65*{sHcy;oaN`;g0%Y|T&B@4mLO?smVSx=g!JyI5iv;RRR3a%+^#wjwLilu-{j zAvDjX$%^iRD=^q+gu47Rz$?slsYu2rB~THz3_ zuW&swPEkLp!~5?IR|sN0Esu<%Meq_7^FeE6>r*P7bMiRE+mST%2VVAjk?tEIhATib zTjRKrh(Zq6YiFrc3Lo(@FXvAuJW^2Z){BQ*d#cM9qXCoI9UU;^ec&oVIY(GF`od5o z#e>0!rk^q4t18KIW3RPvukORGP3<#uj=Jti|FUU-IE=(39XUNSluF%7$qgA`r5^GW zG*{kTb{`d>rg?MtPTnZqlW#*szF`>mK6wDFv+qJP`#r;2kFCe03Ji0X_j_Y`g(H*i} z9-x~K^3TkGwtl*nWXt#UpVymbx%naxb7RStmYs0e3C{YIZ_AG}LSG_d9`tY-M?LP! z-l|=40{ipc!dl^8EuO!);iYLw-m>N;vs@ZlJJo}o;&aF>02-K;>{2bt#_QR|2yhOh zyn+fT42-!)Y-y%1jx@FuCNRL4A%tlj%#`xeendo%`E$hoMMjS@Q{{qyvx)aIvLwMn zi1Ktg{;1GWctlWkc*$)fd4wA^9xZ(lYiMq`!w{WmAh=hHEl$N#fp=JtV-VbYN(wv0 z9mPw~$Zbq8P0s;|0!(nHr`g8)6KR&I0JitB8bs9MqZ#>M+N4k*m_g`fz}xWyNST#;FD1?j=PBC;>I&jhfT$raO+^Ny1jOV2_9N0fC17iWcP@Aoh= z{@bhi+}v{#YRJ|Nt5^A@`zbaTmkDwv{cqa&?(DbkUIrP^mF-%1^1&y6=8E?grYnK} z^WC4XO)OH8H2Qo%`nYpj=XX`suN_?$TwoycKoUi^y)Y63RCNgiL9n5Z5~w*pnFvOO zz?$~Z9`6O~04d2rb#WaC=Yrt({dvuujhGgQk-w+sPJE8MJ0Mx<^TQ)ryNuJKZZ@`! zIe90BOAvXxkHL$c_2w&t=qME2m5Vqp*4aD=Zy_p8uZ=Ia5&X<7K$7;_iaNcpN9TyP zhUp~K2R0QKw$z@OC2N16*0Z=suQ5rx`|TTWpU&}*b~PNdw~N*Tk$Tt@GP<4(EaO)Q zp{rB6pH(|p!$%EAn=-r?go?RgIp-PQ(z^L5Ml%is#228Pw>=Cs!+BpEk(M-6RPxLK zU&vMDCaGN}^4sJ2Wavk}BOBQ)0`)R~(7CO1t+#II=g)wdjeuR{Wj)J}I_QL5@mQ?| z6y5ipORN%cv7v5QT{8AulZVVivUZ+7M<^&u0CR?9v+nKc`Ocj&{6;ZUi55TDk6|zg z1-{hNQ<|M3vsV(JM#*V5?++HgI`&RLJOh`!I`%?AeD>_xtHvDEzhX2X{U#j-uHGI5 zsSt3Ui~o(l3p7g)8eQ3*WuEe?RUXXZ%?#X*f@O`BjZfFK)LcS_P8F2@^*3cl^dz{A zfZiW$2S1_}PnAYmhMh=wFk9~M`Ez$U)(x}5I%koKGRozDYBDFGa2zo3*2>}QCj8Y{+K?c<0P{_qW#jd&^&}D%5 z!#)A$t@*VK(C#l7@usX&$XwU-Xb7<~2+A?R(FuQ}y}0KY#L50hRM4F<4}X-u2{7{n^;t zu?RuFOnZMs`v?1n7%T>$`?kxZ>uTKxEMLn6kLxw{l1nhK)rPQhZ(r}@`|Y}4q#bvj zL^*Oh&xVsA!x$F%b9qLmPA5?0T1L3jdkNmlzqfk@r|u>)PFAB50x)J0l6iN#hcNH5 zolXa#Klo|-#~U*B#SrHZz)SUUk>svZ*L!smR;UU3Isf(O(2A1;> zK<%(@fE%=9tsOQK;O#7q0O_WOdhe@hKu|WPYg$($POxsXiVFXQN+Im2>6>5jQn*gA z`NB zCX=&DIe#jPvi43C_@|F>$+ovB^y2_9FvWM#qlG=YQ02wjbr?HZnh0<)Fy9Y#=5@%! zMP$^44i#YF(K30aW<1^k1b=QE(LWiA{6=tOMY6Kg;f%70@lZ1Gp7+scmM9Wk#zk1z zI4YU|_|Fs&&L)wM{e9tV00N6e;G?FxCYRY89T4Pn0=~@yI!g3Q%P%T1y8L$%!FeM5 zp2`Lz!fy6P2HaUt=K6_ZG!>+4izd8b{O||>6-~8BCG4s=DP_&+lp0yaJoLYlE7VLoqm{D$6mpekrV@#X7MN23uh?V9 z@!z^@&R}4p9 z$NS0wCvH7z&!{EhAd5U%8woDr3-NL?!NcXM4C#C#!2ZVtE1Dapb+)-*DjGYueymY>l{p*~L(&{>H1 zWU2VlCV(-waFkWLHvICUj{%a9%rZNCDsI6*jHkt~rPUGsA|C)bHRfy2c2~v7oUou>#A> zh*1G4;-u-W_{`)pR}#a)6{)IeezN1sY)#MaV=_d0Hi~5VQ$id(Gw#1 zetYYQ0z3@>uPp&%q9*-=1h^f&R3rO@rP61yD*uB*m@I%_c6N8(>mwf=9h&e|3#`ow zm&2-)O0`3P!56l(uIL1<2n($6t$r{6|0QPs*SZz|-ZKng+D+AJ(!X(XVMEm>jQ z0hFliCu-LC1 zYddmFEC@E%Hab~*bf07tjyEP>(>2+DUoM}yRza3M-}FrL2aNdhyP6Qj+dytsR!QrZ z@6}1F;#xsQGC@hk98XHm5#b(Fow%=lhx&~U_yfgzK4dvLAc$Y9d;Vl^s z3>Gpyg$^(@z!n@s>C5}aC~Ye^h; zc`q}6=4%LdJ+y%)d<242Fo8;uKZ_57vvt7n{ie;gYJ`n`ElEbBqpH}zOUmO>1!YfP za1jeyG?@2i5_g}j&s<^*9$lHLp1j+T-8MzBl%f>%S3LAl53(G(;oep$%2MB0((Cs_ zV)Hf3vI|t;B2TDx4b;Hg2_UaE)J8F5{@$zXslLiL)z)oTca*i^^~T^GV~0idF!!7g z?I)~Ys5s}lBl`=tj-l9eO0)FA`v zCgFmYEYFU+Whc~ ztw2Fx0ewBiM-!=p#-eEE&l`SIjuH79p1T{F;2OOV;;}XY+X50+_##ugOvd2p8tsxw zq#i0Q%uYH7$05LM%Z~63_xEp@VIm&3A1r` z`8os8VbO)nZq=Jhz&0bAKbQO8vhCTqg#BG~y_hanP54xmB5K!YZ9b#YlLG-sp$iUX zpwS3L=$kJjoju?5E%6JBj<+`j-^~Rb!P%kn^>FT{XNU{M;6KW{N%2%iCCM-QDY4V1 z8*P`%?qJ}zezEXfLm-;zWi63s0QVA*f0s8LoG~8lGDLXNUw?m?1ET*^X@u*%m_RYx zpLLJuzNd6JTAw|X0{VrpeZyxwIuK6*7qiH}e72Nc1Lt$hr=E0v+S+uidspxSsux6y z^k3^l+2lc`oRx_1eR)8(^CuXbCWud~Kf%Fv1TWF-xNhma*MmqR08^z(C^{QQMjiKf zBDoaNJW@W<)oz@SoT=YqgkR7DiGmw|p#gy_!%$YMmfjVQi5)aU~G=`)M2|t(k-$_pR@{r#}cicNC+XjRGI|gP4;-vK%5nRZK3D z$$58MJ6bOV;-iZNd)0eKbKJ${k&$lQM#MEr~B(4 zLj_g{;VX?J8XwbwLaEwDaF``GC3pV4xCygFL`sLlXrpr!z)Pv@-qpZ*TeKQw^05!I zR=GQec%w05=u3%y)%G``RO!_%Z=eZ@7!4 z`D)WwLw@M};ZA059XE2E^VCI)wN9IOl4cFcMqHuI1(h<2$iV@~Jdd4^d`WVf1-Yvf zd*$FRG7kYiuCMJ!uPYhQ7_%1=uDkz<{L;}igT6lFXJa=owYOU7-9SZJ9R#~y$WXX2 zl#UMr>b+;>Z@N|^!q+Qj{`B-HBXsy<1n{|1@Emr%(08GLROof`&v-P!sd|h>{^Pr| z`kub%{GxW7-FBY|;8`zSi`G-Q#|l5~l_c){cjUBa8X4!`aU2hDGZN;d%Z1Z#jV2S> zW{z?ghZU2>RobkKlpBfrEy!P+;>}Nia6vM-lmG@ZyT}hmVUP1rr-Q)GLhc%Vmfe^= z4vH`{fr;zK)QoWrhqw`Nu>kD_U|-V%uJgN8CGSJT*UOt_?w)GTKFY+OH`YXe6L+8F zvolfP2uhjhN^#eNIT)VF41Xw>UTNV@0%sQz;Z=JL+skF1I_X|VcCHe)E0R?=>;4oG zpXF-H;d@OZ_bO!%uI>78Pg@M`K;qT@Af9!NDjB>vCR6M0bXn0rSE2~@NpZ#Ab$fs5 zyh6!Ast_5hAA{dd9ND}R7qbluO(VxU3A<~SnSw^CRcfK(shZjK*;6op3xRRIKRCE> zcfezem>ayGP@kvJ;uV1KYGX|-C3K)LJ`fD)=i64grz79-`6Om$DZ(V0p6*8&Jnbjn zPM+E^OatQ&0)Tt{VN8o30B8u2Z}gEHj%bT~DI)eDphgG06E{gOuqc1>etT_*Q;OyR z!4J?0i@Y>7^3#%%z*EK;J-B`nHL&O)B*}V-U{uiYkpR@$E4`~7ET}zml0n!@5H==9 zRIK(ezg$N~|6MuIuC*g` z4gl^Ugddd};+@&Ek>LV=KgRdycobMD3=fpY7sXA?!zrLgyc|;F@FGP*|Fkh)&mJ%W zuhz%0F45r@Co{_}e)1g;6Lc?AOVP3t?Y%8~77|<-f}P=N4W{}Mss zEYB)Y&ou)dsFcy_Wc4aN45%!9LVm(RK&eb_NzGO@L3B8^_X~jIg!uKv9R`w{Zxq2n z6w*R3SJ#Y6L-Zpqqxx%H2rwMqySaDjeq;9Apua<(QG@uiu$QNlTTgV*0W3d*Bra9C zcWm>~>s$v>{pt>k4#*eCL?;19c|bo?H;wNL?gf-L(>3GVYjyiI!lhy{g@~_|Q_P*M zL0me)@}`}lL!L&s0OOwZH4T$=(&%a^loOYU(-#h8YrfU3;oc_MTAjd8C(8m z)5s>bM(VjBfr;q^I4FR`-M)@e&ou~+0Yf*J;5_TIhXH}AG^>c|QC+*DI>;;y!9HB> z5!UG^FpV={=KD1+_Jdwd$zX2%&gO=A}f;6{9@nm zaGzg$_97%aht>SBxVZB@bdgzkzj~X<)BEdO=ZYtx5YwOm% zH831B_)0_>C4vuX@!^PH>gBZZH4yFLb9$^{LIRaC-CPpQ?AXht|+V)>Kne27um z!@nA0`Gb47qD|>^Vd<@)iib3(F`5*~a8BUcP=J$rrFWHfgB4^{VJfa8JrES_N-fCM zEDe;H=B5qtlr+9MRAP5XRZrDrrS3sn_IQghgV0>3FcLSZK{`U^Cth+H2dnEex1ulE z|6sb`*^#}00DfdqZq_2*eXr1p|IVa~_4!Lc=!1sZsH5OO9EK_hq$UJ;&36+WnK0m6 zfN?>3Wcp2aV|M0FK#_w5@MC|F)vvqFs^^D$2;2?sBuFl+E3MjE~83VMIXZpkcJDn z?%>u~qIHE89t(hv`XVb{oX%mf69P!e055(jh&5Onr#xY^O6ozxn}62d?m%A-E2 z#a*W;bpB|9;3i+_sV~ofSsWKXZ$%q&-z*U64KVpY$$#fO7jT9!clJWz3BAWv3h6*H z3@8Tw;-yZ`k8JRKW|+5KC)7n@@Q@fJwAEq80cViql2jvF?A)e!n)Jf7#@!+~j?x}C z?aBHhUX&-yjSJrfEwD}a)#DMWj(FQB}~xC-Sa zrJ8CZBNUuP%)j@N{5ThRF$naf%QhQru3(7QinTo{s9fr%Egdf*=Q zw9AqD4|gu6$k^Ee5T=r;#lKqhx!qzZxcuCjL#rxre*o(EYRgxTzWP$-7klo!WAD!n zt$qfurw|H1T7l^^g?ldnYJamB_CBui^{LDLwpK*`bKf;b{ZbniAf(UG!u0TTXRa%E zA%{HFs2r_aTAa_`u8Pg_4ZwAsgH895p%3auq#cMSyE!|QdO;&2-t}uiyhdHF(OZ4p zg^RUeqKDo>vF}Emb{Gy8`64UMN(+Qh;b@O*0pNTn4Z~Le!x~Txg2llGn>!lb1Ge>O_zFX}6j!L}|uE&I#RZf6h+n$}uCnW!;C%M?o1Fg%)wJ7P58xS%Sy-cO(06v1kirc@x9C(B}% zE)cLa0MuUID0aR&kzIPa`)<$zzyWKjx|_8iN5M5dmpi*5yFV7?I-OLGuZ<>k>pF6$ zg&^k`Ft?VnrX%}+LU7a$*}lks}SlH-l=1KB?qgpS29Yc_Gy3tbCMTEQf%~ z+9kQ#ACPo%tnjXMZPOLLE^_b5O$Fs#D|Wf(7&z~5fQuRB9p6BXbILCUk-vJIi2r#; z-iH7>@-J&`jHca+90<+kA#UkDSt`G@dYOEVy%F~SChjv_$>#c!9?2u_lIGhXoSjmpGKKlzaaH&PU z*-Q1^`dXxwK(O5eFx!z`1PH0dntq92wmqwIzXPO4rYHeF8b+k1Bgzou2&U(*$NJWN zAmFQPM0bAPJtI*u`%__Upf#1qv2iW6QV8GovUrv6>pj+3Cf|>rvxx}ulO2kKC;Esm z2hsuiGek;|DL!n&41~7 z^gfAv*tvTZvQ*=%+I>EE(RjO3b4v5mnUCTsn4-|hwe0|DK$gEB>?)X; zV?jR04Y*VrLs2$u?m9u)lP%2mwM_)!8FU8%cKG~oXJw+QNdP>WLwLOO`lEyR;aHZ_ zu62wa*aZYJ#8*@a<=~|1yS4JaO*{2Rv8lz%G8`r-D@)cBZLA@vWL4FMZY_+UVtvgP ztOOW*>+Ks(8E550FtFUG8f455!J_~GAOJ~3K~&l@Hw8qs^|k3z6q>Vw6<9%>KN!aM z>+6~vm!!2bJB2lyHU=EJd#63yY!K@J`6F*#aS8>-9mq&^v6ol-rh`5c637z6uxe~w z`Wa=CkdQVCKS|f5SLzT=*TRZ?#Z(aaF#_H18;x$?%4bwvaukQ~l-3P?{qkzP%9`rg z8jtvKSL;ckl`BPxv%HGN$^Wg~UoI<;p@pZYmo_lrLz+mSX9{NC6A^c?MZ4M$GhD2t z7|nHlzMP4ZS)aMi1h`v6P2*($dRn`(m#z8ott&t4%;fNu?6c2izIpSAp0MX9^G|um z`9RinWq)eb>@MSWJj~pBAG|3y%2Hgu&N}EGG)#GtO(MnUs0Zkn3Gp;3556 zF`-v;pw@3GY+35%Lk_$_aAAQ9S1ID&-Edv4`-qj>0pK<#Vb)C==>%m2)kivZ=cSFZ zByrC$4Cna|%olkGc({-(D9Il>vddWD2On6j-xr7PE&{<#4Ylb7vE2B0F*2O2RFO%v z_)c`}i&7-`6Mo9s+SYP7BOMI@orA(bzxE5W(|R9~b^+<>ntrL6>m~};$ws(l+u&^j z2LuDI2H_q1qCK6FFed(s_$Y?=W<2#hD6B~#U zirG|~J9PTzx-0;-A~aY?R(twqoLjnp1vWO;HO_LKEL*%vL@EMEE-#-*<~nm%f#toD z$%+~J_nqITa`+0t{+u^`P0ov8!e)&K0I{E_ zNSy@Q$*@KC)rH>2qPRsM>hNml^POcr;p>&qTadzR?L4^%3WZCcNkNqBR?6meoqV8k zB@{<_b@!R`1oCo;BV5*exn?(0VJ<a=_Kb0*?V1BN#LNB!T}J_4KA)^{hED*jQUuXmrLN+=GPu4!qXV#CJ)Gn zH{d1e_0ssCND8M1co`yP&64QeZ&9z)ZVB$aY0Su|6YTs(R+b~-%MCS=w?+>M4B@3( zVkQ!a73yR8wByqe1?;`UhVq}Lo%)HUQI{}vxwUqPNtkC#^wxa#LIgR6C|INtL5*H2 z0^LFYuQ$ZxRQK9Db2lp3DWG6hiFEl*cBo0>G!`C;MRRY%=!Q?S`K&54&L!Z7d@&v$ zWPfGZ{%2gAZ>sm+tFO@4R-~#>P~EJXSTO=JAOxUxXr#>o@*N27yvxYs`zIbb=tVU6 zCu8?G7NK}t2;Y2bZQ%*;kDamNjcqoxn=31^JDH%tTeop8w46$%%!ukr+`6@!>xx$X z#TE>JWG0_i^Sxs8>m$F3lh3&K`d=^-=W)-=9Vn!Js}eNDQJ>jfhM~Dy-@A(|>8P10 zXvdO-3+wClb_J#SSQufj=9>!P8>J1rBeTQ+QbTQ{0(PS4q>&Zcg&u{7Z~6mDydIv4 zf=3|npA?<%qKm@b3}nC;yj%oN|J&B$`J2rkiQHYIdr1aaKjp!{J&&8l<)xwaGYzi7`sPeWK*UR$hbf2}1CHzG#hK z=g9}1QcYWb*ulmqPBmmyO zAmPnAIo7`u%g&mWFbqH$y{DX=1K_9_;N;X8PBBr$^RzZV!vEE&o&r;-p!@-;Bnck& zpUK*e?By2V$lh(elYO^8`uws7kovv>pYn~$I15$58J!+%h?bKt!%->a*vtkj4! zVRAN`DAuPlw-{K+$6LfUk$VL2`SQkwHr4>(ARzd?m%_UJJqYe%fmeN_Sz(ZCJ97^M z)4v<)B7(bnPaUl@7&x7-NnfG&j(f)PYme2;+EDBgjaJe3lfu-MO82!OI>Cxzj%&t* zp_vT|r;Ncyj)7pqlL+aP-#zgARo*x2-cvra6c|fZ0oM=(ISq-fDktn}F^+=G3Frr< zDYe>&IYSF-EA|g2GzN_vZFWdJ6>bTYouW}$?|ziejt@mn(upEM@S<GlBb$xu`-+i{@%amM*yPoDSw=i zS*LKDa*DYgW)0vS%+BiJh7>IwEvFf97KWL+kH&QB8-S3dLT)X|VB1vlZ-JXI|I#@A-L=G%f@Mncat)HXPpZmcY727;6hB)rYZDJL{NfcbIHYH4lH zs;vAVF*4c9h22CK63v03US|8XSG{PX6jX78^q8*!)dGM(KVk#<^ziiKu7>Z(o@xMU zS+K4Eg~$AQ_FmU}b(LJPQeqB(i;5Jy4hTC7-Nn1Tf=(x=Y8@#+_*6NJFrui#=^)l| zElT@Ydv>bA^Pn4M>F^+mOyrvd@UHEcESixX|{5IZnWGKuN_7x9PzVOmH3`=nd2V=GJEqLxVpNkX|JGJ0Wee#qfGU z_-J4__})@reLiLQmx{ zVTjig;5#L_PiJm1iUdCMQZKlZewkn@7=1kOaXnnd^2{@+DtJzM!qdpY-^Pw?a#0)+ zT~78Dfamo=b{+ea;-9ISk(ZRHk}7cooQGiN`Pbxe{JMZEDmuZYYyH;+YZO_aT#3AXLw8~*!;TXxmTIVwI(27LG96ey^ zVr|*(VbByT*bd*#dgYT>Qo9b=`5`F_e%1psSUy8UY$d@1KI<-C2yYVLop%H~vo;Q6 z&$MUmC&WQXNzLdAyS5Gr22KIQT|n?b-x!Ew4aIBpq)moO{)8yP0~(A;%<)?Mcmuft z0T1rBy;tg_Qww((1~Y+WcY}d0!e1($Ur>Ie9Xc|>b3UigO<@YXH){dU1{OgdBr$ zx(2dumrEG5`ve3t3_>Z#N{jcZ(G?F{a9zs>Vp)d&*R}8O}ySH|zD!e*XS=tWMqx z7N1X#>?cUZ9_vbCdiIshM(NNk-{C=S#d&|Ls+f}p=y;$CZ8%jHD$)AGr$ z%P(a96)^q1ab!eW{Ak06I~5DTR5C!;%A>jn#@PEMgtAem_I{!5_h88=M0u;BHu68Z zPBPf@fg_1vbdW8mbo{rdY~t+{H|^WWWL2tT!9IY@q#0gag$-vNJM@uMg?T67J@>WTcd}sHCoJ8s`Kijs9fhmbeAIs0ySXpx5(%i= z*3J1agzpnc9EE^Yfq~whK3lKiOJh#^0l?hF=U39$IYny08w^K z{!nqf2ia)wwG{1aLvXu?OsJQa0QL{d)G@j-83Q|8s~Ilxb${`by@vrRduw{9dRc!Y zFO)r5AX6@d)$B$Z zS3JeCb`LnwuQ{J-p>HKb){_U~4BNQ^xVgHgdT|Lt^F_86t6(Kt`D3|%F!$}6qa$+U=<@{%azqEb4*iX}=xRgvY0PX^Y{#A-c z(8&s-qK= z7XItXz0eUUm5yOhX>_ADW+k@1Otm17mQT6k!_Y9TBf4t3Rt^1bXl+mkW&y$vrouct zcJNpizZ0$R_87uosekXW1iaa0P+Qxf9ymP+g75@J*dd;be5OQBDas@eDME-Z=$@D1OaT4W~@sd>6T$1uVh0qCpB zp2`x?E{<22Ac83yt2SK3991kA0Hu(ZyyQv|2gG8-i1eJ&{iN>;`AUP-I%Y(JJ0Q6A zkZHOgj&!-HF=M&(<(X6W;z$p?mLngN+LHujjh zwcOREuz(Ugr+&u>zUDsvf;1y=HzU4HKzU$3$69%e0y-Q-N!sbZ##X3v5T#c_e5Z7n z>C9fl0w+rmZt-k_NST5=r)wLv`RoP{?r&*x2IOp3t3%xUb%np?(2}{`d(l7nIlaAz*qN7sI7wGtYVZ5@R1HQg391-X8vtcnespt4k%dR0bmYR8}?md z5K|fpqvxb}^0^-XBLMxY#1M$!kh2UzYkf@=8|MDD^Z3Ga;C_F31Pqng0QRQm-o5V# z02qx6U%Y&O0lXhUCZBQORedC?^A!R^kGScff_(y*f-GO8M@Hep?hkyM9WO?XMZqE% zc(*!Po!eH}HW38}52&zrmToxp92h-88}0D@&e3E6PO%~{62eIU^r}DPtnJJy_+mGR zI;>7YqFqlD&^!b5`PiC(FR?R#S zG;7=i6KF8ID;%Peznn-c_jwYPTNom$)K~RK^6j0B0MB9$65?2-0?#c(nKK zy3e#LdkR^+M3V4OdT9F9Tu0^-1Z)CulL;3C5d*BI3gWP^7~Wrs-|5I*0>Vcc=EY-o z8vjx0^|!bD9MGIkQkdbVC<;~rfCIV6E5?l;mr;r_Ss158Ok?0}PeWGe-OsN)>v{s( zolGzt;7SN_fj`_U=}|;RG}JauFP{o&9w#sl6hcmp zNUkn)6n;zu$1CUxL3+F_NH-PNi45RwHJa;tQfWB=9b?(~VV^BM50RuwgX|SfNp`a-x`Ib8Kt{@GAmB{?8pSHOBRAsBcXN!gD2)HvMH%g$^H(Bq2WYPDv zoCbhDmk{qP2M%T1Gxq_?H=d@ee%#7p*n$e;mz18(pK2lu{|45<=D z)I8F(%l6Vn42L|O0(wR_us9@ofdJa--s<`O=UelwXRz=D5Li?`rFLL7fbpoL*xK}8 z*LJitG15$7`?qr0oJwDSq&i*GbgjQ1oF`1^$Y=lZU3cfkaOQ5KcD(qcpALB2+8&+K zRte$bL0>~BCO0<}`J3^K4yg7;0>;(|6whYJe*^f#Kl~>5Q9ir?1&$B7?e}7~oDYHz zxXF%^5=9Qu4J3i`)E+fWpG{r%`a_7={EJhDzCK_8PWBQpcm3NkI=wiUf?#Til&RiV z#)JBx?;7tJQ3_z9!rToY{h{mmwP!Mi$2h=6>>rAoa0j441=kh*dgSAixDqCpI_A28 z3XBH>U#pk6bgfij658{W_NbY;>O)%FnOknzc6mUETYEIun&=o+3fVxOYZ}(HHrLiN z3CJ8)o>>~-kFM(rhHm#AcPDAf=az9C%@Rxg)C;=EYaa-6H8*#VvrawV|d_;Ybp% z2TMrgO+Tq~krDaaEMWO@BAJ}0s)I=GyS3R!qRmQiZ-U@4Z5FDWt+%iHHb(fmL`2oN z3eo5-$b%u>_uRgv((2HLXCdI0>QwPTB{(|k3no+|r^S<-Ot@>>kv&ydb~VPNuo73< z%~miWGZAqpE4*r_M(0nDiaa@oP#*RTVL#c>aCkslsIO^U)sk=7HGn|(7YR^)uj{Uh z!053T13-nK{9W${2XVpTMJU*-@T(Ht*#UrH4gk(BmyfH53QTf=EAVUjz2x4PmP)3y zQT(koyZWT(dM#3ukh;x7;?xh^C#W*L(1N_6Y7&=oxI^DEBilzQw6a22=aD@i=T%gU$BkyRp8{zs_IkwlPqU&*CpNcZnOLk^QoHBHZ#yn{qr z#G=amT~yGzwsrei6JAYXp02O0cMOnRKBxSE!_21dCyyO_SSkL*H7k)WBEZ*5%CzVp zyxgGtX6%TlW{64150>XSY7@wITa9|re9clche}}?gPVo$uY% zhBMvcl_c)(oXAnZkp4YlDbBq-58Wx$eUF4jCwG35SvEMAYnyru=*m5v05w%KT2j;iSRU0Zn zCxNluHN8``dF;L~g%>JkL{&XlCvXU4S4_U&_WmwOlbE7|&WdE!Vn>te$W8=+BQ}{$ zR~$CHe-Y4w698#Q@t?Hwr2Z%9h2{W)*Q^wFLk!RtN=_z8bP`%#lO8$F73rGWDFzP@ zD0s*RXGfv9eGj3?+v(VB9W6xJyMUv-E!PD_o~GD|BS9WIIGTkrAHq2Y4S> zqwxTS%+vllsrQhG&M<*l>0t`)^+(l>}B)$gTJ9V;*k3_a;Pajx*!>_&uj<-Rgk`~?;FtJK9y z#^db7iL6tN;f;TD*mZ&P6t)z{3At#Gc)`^m?ZpyG&Ii%Eg-kQxzz%DyZBk^ni#b9> z?IOKeiX(C$6TX-kH5B} zep(|A;;5E;1Z6{Gd8r)#5t@c4b*f+z{Ea!}85W4^Ijkay-#-YU_xJ9A4wq^^$(*ZV`0yH4#b zC!#UqIkew(ezft|x(Ms_CP95B{?RZZCdO$HyYMbSWpYl*tEXM`K)rhSQ2BGJYnLHB z$cCa}+RtUa&g_l}oU4VK#!;0%ySD7r8X3`8+jzPEn)CY@R2ipc68?3{U9Z0!7<0rG z=MG!U;An^c95!t1``_imrv$caV`+Z_NVX)TeltsPB17lKP`123pl-mg)YtLR`od%k zsL8_C*BHK4n9g$p6X`d9D15oQ#cc-@5=$umt4)~IfBNKw|FnL4+Wt*dYY*CcaPyd9 z(Q_BA5o^vyG`}%T&;%x~^J`Z;MOj`Ru&&-o4DfUV=8ry`H7*`cmXJRZ zq9LXDqpsGIghdZ&*ZD@HZlEIe5M$_j#Ne^gW);b=RQA}Dl;k~HEIBzBNL9M7|8TF( z8nNH=mG{0Atx<4+?d!gJ+%5;WTxtEM^4>lNIKd~&G4rjRtv4adh_N*dx<*QC zzICyPj3l9XzDUxaUz^V@RWf0^CS77EL|JV#pRIkflozaEBgDfE%c?OkB{jaE&l8lh zC`mILhBSN?DSONU5c_PochLFxS@zW?X}Tu;r~)ip1BJsQ5ey2;8{Uhq6B}SyASep2 zb9LJ8b&$KV&mGxw z5pj@!RC6z{u1r=2MJhH6*eVI}uR7II5Bm?Do0>&v2#WnsBkSC>LDzi5kV9_q5_mUJ zMY+RZaPOEAV@jE&PKKM5Il{KPhx-b=;85>P;I_~uBiBXF zxOc$8d@PG>i+}F`?34#l@bBJ!;cB>necCWdf-9_(KFeijg);Lh1V;fG-}{} z{~!?j(|gIaE=7ccndCR#OB~1eT^jkL`#rw;`6J^b4*1q_!^gSYQ8)brb0PqK*;CiE zO7Fe6*))L&Kd2wkSZb0x88Kl6ic}rN7(b+D$C>H_*Wc;jVV15!7KQnh zvNUt~+ z$!MA=cyRAsj#$6Tu*Qvv1h3Q#G1s~3B_%*^6_VS^b7Xh($^zAwX>A4?2}XxQrSYMx!Kxur3o_gV{Z za799Zlc)xsGFK$=O;@N%Huv7B9dal zL_m7EoW$!SAlA+y0w)o38*O{$BmtOg2yQHwnmAd7@ZJRpm+xJ-_q(n;C3KPE(2+2e z9Fcs~6aSR@1XNpi-mg-%+or( zcCrGZBdwKp%B6HpCIxmJiurRX#D4vUhZ&Q&gaMu`zjhyQ__)4UEZoI`+}|`jDj*aN zWI-k{!5>te=H$Yf%`*V7LyO7KzC6 z3oRUXl<)yBYjzKEKDR)`4($E5FlWF0_Um?P0wXigz{}bpQ~7uzVJ;NHHWK3UeAyUS zwLsw+$-0UKC5mG{cZGl)3|(-!7JvFY5yFW8{7-LwkN@`h0`emP$@#@WCwfRhCEIX# zIlXpmJ~vOjk3x7;36mZ{q;59=ultS7P5J-_r0XJ|oBnekn)=~)D&4x=Q~1foPa67) zy|)11YGL^l2~QJ}FGwiZ4!9EK>)yyBFZ)iYdv@EhGgXe5eWUeC4}H<8A|j1d|5php z(3MlE?dfQ7Wy8pZH~i~z8!O7`h`1ps$w%B_rZZbh0y-66??DYwCtD5=!Ormogifjv za25&uvHZ{y7s*EhXmg}#RV0;>xd@b(5pt`aRye|}@ZKRt6m9o@RML;o%tg>**mZoh zAin$F&(Z9Wt+}HjPh*TzHIOiw!CNS3-JE57Mu^(?0jrw?CS{>&Qgg35O4v zR4yaVe3Lnn5^yVmx!Omr)4ub^-o}r&qdb68ZR#K*DY+(xZCt@RkxG`~lgn^#_d4^PkuB zV$Tw0$@&-*4U#utj?;ZOVc;#F?X2$;g^sXRX6d1&6ptX7_eI_OX2Cj6moV zooJTA>Dw}ACI~}IxTAhNr9)FbbBzep_j2D2THvnx`u&k%GC7R^QiU*l&?|0Y@988! zBocl`_cQ0G#iIHt^Xc03EoB^q{XzIJg%nbP{;vLR1-EJQT4QCr#7_^1R_sg!)PuQO zi{pJ*DY-k5ks4t0_%_+rS!F7kL1YLM{-zm|TU z&(!n?tQ5hQe68T_CzZ{0^vxoIT1HstRZp33Gbft>PYXj{HEvWa1#Qn3DonlMo+%B6!YIxZP*cp3&URzI1JqlNPJL)e22uC6t!MNws#i zP7${IQfO~e1=^<_Yep0_`y6Z)ntrdp`yCO$Y%Ul1v8K^Y&&SiE2So7m#=6G2{(f-J zR6ctz3w&D+5{f``c8IFOxDuW;-7tX-W)N^2i5#i1ZDyD$6gmq!k!3`ro)OUjDI$i4 zw~`4y@G%rxTc9zT@qSY|v`_~pDU;M8MJ7aE>hq>^?U@ybChvhgZqM$>EJiY>VMK%T z(YvqZGk1c}cHlg{_X_#mYXsm&MG0?FPvN?*HDj2~bY}Rfy0_Yas^aJQ5VCZV80jUV zN8ABF-*Pa6xq+CLm9j)5kLhkAs1~JX%auT}?DrxNT3FUZT*1uwrr1BI6V;GG<2}|j z#8UB?B0k+JXQM8vYxSQ(0xjdsfk~_yGh&Rh_i6ntEaxD|7AfL`dboD$JBM?$u~pqu zePhWg(Vjh9M22a@DFua9d(`dI6`ujlFK?(uP%YF$^mYd^^_PptJ_RUT=bP7Rg$e>Z zNGvcBtkFqfd{5mVfK?Xkt-6;xKxCnJ8A!k1KDx&;$5@6R8-qI(i}nR=07i{(n4!wL zie$wy-3Mc9q1qQhK>LPf2*(YVW)}FAh}chg<9p%~0X({xDo)mEbPNOBPZ(eJeohB5 z0=kqC+PZB7VAY?ER4Y9*0dNEX-R^zw?m0~)Zo|mx;$;1;?b(GwQdO?visFm#ir&7y z>-O0tZdi2YCZOeA1Zab%7eu74&a6{h|8^Z1)a_@E#E*;s2I65@D z#+36iqqz?d-YwsoAAa-J|4EqSuDIycDJKq03|zT;&0ej04sV#QzP5-EmYG99HAS=< ziX)mw{~gb3GKqc~vJOnA`o7EsBwV!`z39_Avp;8!^p^1pM0;Wds|nY>ed! z>QN00ouDV}LU;IxH|IKlfX1VwaG7=;qs}^C2Y_?Swdh(Dkb$4YMr$X5h;%Cy=k}YZ`BJa^uLnK1TqSl@~N?+gkQzLd}tS zUN_6wOny-a{ILPEyDwhcdyQnU=ZO`U7Zy=oE1IpqP$K%MT*e#uCU_|Tzu-F+5z-y* z0+ILAwM{EELPOY|=z@34Hh8bX&V>IJ00E3!gN6R^L7Ueol1Ah{b2APNJGJ!DD zSUX-N%8nWgmZyqw2QCKy(tmnSYStXF1R={?O?6H0w|2EQgH`ASH=q<(H;mlpD|e7# zTx^9~o9ddJDc)s7B3%Xuy_Lu-%6+#P4TCngHx;*CTR-Z+jV_*nwTUC|Xm?bvFD2*# z%XXtKU;{@CTCMq@{&lVG%-+C^yY@-n&3?hmwyik}&|GN1OxJ}ax=(llTWHQtN$6n)rOHVTg?CJDt9;aZ50x~DMivtV z|EeER-{1A@%wD8n+&$bk#V@RJb7ns=_*LmW<+H~L%cT{DZr!6S^jy1<6wpbC5?GLT z^pN6^>Xg!u=~ObATo50S&elUR3Ekmg6sl;jP+TO4Y6<9vapW@>=t0<8*;1LRe6VX{ zmkb;@@J2*Tae;5~Bx%RYU89IDeYpr`(j(KQXb+v}Z`j1UKli7Nvqfap zwDS%hBGQ9azIY7@hlvb(A&En8DZ-`!09{#>;&PR=f816)91WcYBDoMhYH*$zn_eMQ zSQW8a+FvU&f36L|cRty4?9;ETd1c4Ji7jUxKX^t%O+!C@vn^9^h?cUI2OD>aqNW@@ zmhCM@;5TDqe{-~+#8Z^Iv}WG1d&UJWgJ?Z)8`{6V{nw5IOjR?Ad?tu{3F9hVd$OOs zw=-6!mIKjKK5Nf;v60VI8$@7&-}njK7xG0#cYfq#f>ablnTzUY3cxEVweCP*yMiSD|5_Rx^!d_$n|DXu#lJv*(905TVZ zAJapJn`rf-Mi+fqULZ$}Ek2n=Dnj6gwK?Kshk-c`h4U(T_VO$J`_-m$L1?+ySJyYs z$){AAg!D^b_|A}g?EPY{fB`rK1ecT*lZ#on)&yowX?mH@9%>mb1B*|1iDNWX;T?sk zPe}Uw1kzC{t(?FpvsLc>*>~>^>glVPL6VuAegq@1gfiV@=~~MI7Yvxn^OhMxB1edr2%;ei#_CjUyY~K2rKj z+p|*yai3yXyxkwVwE+eMzXX97(sdC-L$gfL;2{#?bDm)D?umTs1$PKp3ePgawrM*I@BqTY-OF2Jm`|!9V1vC4?;;g+# z?d|r`DB^6;y#l;ObB+CV%Cu!}GzLf2k4RsowT*l3AynV*hds9Mem_liF-ZVNfuRTV z-tjU_t+fE@wQ_Ze9tetI-|})|dbT}#KLLEz5PM8Z`}_X~&DRy#0;4U;5M#_LTeL?T zGVMhuerC{IU<12KuS>Qqdo>2K8O7{qZ1-vf>ctF$MF6z5^^Ml~+9=ii1_D?ZPnk+} zh^wIzcr5@AC|bMPXTj=J4p_F6Hao5c(T^KOG-xt|JMc%fCe}98q-S^ll-o}_S|%dm z-dunObjlq|A!mt5x2ZOFdRu{mWr;lth|rLEO4r!Trp)ftN6SJEpBP^^-qpo!7$Tu& zLRJ9KAGedCtD42ig>3oPUMb*SKfr)=P1@N{)IK0qCIIx;$|@nY7-*jS7m1pRrM{US z$;x@DXqIMd$#7PrFjR#D8Zp{b{z})4-eT_!hOjDOQ;SR4=TVmEu3AeZu;S@GYWC3F z&Z7b_vqfOGKLfb>DyeD&9)@i0C=r@FS}zlnpIWgudz(r;B~(z=1`=v35y$oOCuw4Y z#V$&$GdqBU^jX^O(4>d^B7?$EF%W!5)iAD6ZPivl6>RxVZ2&rZV1P(2VyJurjVKz`)5oUS-_e7(paW`t*x2S+S zsGx{KT-aOy5m8Z*XaM)PBu0IsG0|vZeBBjhx@W*8F2GFB3@Ga?-S<@eK6UOrO_Sd{ zf6k|8>Av@#Q>W^AzE5_=DI~#!KoXOO4H~w}4Pp?E0C7++=lON)r;*Q zWzJHf+0H;i8Ts)7Ian#lyMS6XHl=D(Gb7Kw#_&M{ncxPmOmfs{31=hA9R*lZNAt-b zkOHx}&0DrDE9+ZUns9?K`W_IfW4NfZWW;3jQ3Ckf4pjVXW)1)=P|(GWxivQ1w1@=T zJQ&H{Q`yXgUwrqE+gdk$`xgG|>%T2p@%=v)Eq&|6WABQ>YTMEiK=Vb*=oXb3`3GJn zV=8kKz;AV7ZEkNqPQYp>Ws(0!oP@y8F-CwafgVOy=%`(Tq>a*;0<(9jGPN8K#Ca_> zU>ne|7rtXPE_{Ls?g zqB!Th0O)Ohkc^9jDJ0NZSDm`c`xGNcME9)-#^kzkcj|##GoUa5_X)w1{$TEIy3Uou zLW|Q01NB!t<-B_mjzLzuKJSN;U#^EHcO$I%{7921xm`pG52xF_ga+?4FIrH3@zs7IK?{oQMOXDPwa=M zbEAVW=|R@w3u`ejO7192mB0cUKn|7i9plx0AKx!}m4s%6+Em zl%gg_S>{{4l+S&BE_9wtL*yCyxkfT*JVj;aezA+zgT`w$=os_nM&CtunOSJmhqRUv zmLlUABKe8|_k>bd?tOx8N}mL!=xwO4YS5@3M_W|l9b3K*i$c>~juqiiAn=nh372E# zlnl(%2yv;#Jrs(cADZ^21gKHJR|GZ6A@cNgrZp#W1cx$RH-?tBmLnO%%Yo>3e$u1O z1!M49?f9l@Miizsac--2F8cw)+~%K}v-MT=wP9zlXP>#Cy3QZ#7{Rf?+66z6YtpPj~)5FD6G=5NsMtS4qO zKo$@d>I6q+Z@GTCv1src3GKmb;Zv1S>jrKB7m1ZmeHYfPhd|>1As1MA!-M18{j0VJ z!eOWf_uAA8j=YRC!GPSQ-D2K2msT>vw;{P;MHxv%s(KDf0 zs4}Q~ZO>#+UyYzSJPjBZ=piAd`W+qsJ?CRF+|PD2oeK;XND?Rc{A~CAwv0mA>WneB zJ6KY5IKR>qW%$O=*bp>09|-=cR7UL>=R5MVL0EV_O!rxs5hXT%5t6Y6_+_0Q#<`ga z8Z%;~v)E7TB3uyn2yFLlS|mH^6VfFbKcrqwFNs^RZpGn=z$k70v5~bSU30{(FG5F} zz&z+J6^;;`fE$SMb&U*g_k$j;1?que4HE9+JNDWHWaQrf!F=7vb-!q7&y2M!dj*N$ zO%Gym1yN_S9`XhmkQH^Yl(wZcJ=qc*VnaK{D^xuBmVrBju~XGBG2r4j5d4>iwnP#y zx)p%7gb?bq!mWEQYnt!~Vd=)eH0$A|MJ+zyI`iv0y4OGJqq7WwW@>kLZR=gGa^)D5 zG(aa{7VUEXJJZ?5`%uj0RPA?2k-`{rCrYx)Ex7%w3_(6DPnF;9P!9)cCJLleh6j}f8zC}jDE%8R4F zrLi*hL`G;&n1o)}EwOiYv09w!YwF$J?%+O1SLVX}On;D6u123e<>Qe|rA9A#_+R6i z#*IMHjm3t%NQIeDEoQ%}j zxM;EhZ~);cKYfepMLFBDeOB+$7|u8b2!zc-59=w1-hk)16fBG)3MYEtU+ zE_`WJ5&@*@YZ}zT<-m_FuE#(<2vmfYUrm@qy%ifm9{z2TFqT7nM{Nx*6JBt40;n*+ z&-%RRbX()?L{#0|mA_5vwbg4@4-S+02T1Twbuq0vTBANqG-t~uBFSE%j1JPd30ec^A^)`Qahm2(cSPL{C^%d~nd4>cQL_*B(_lxi=DqsC^`AHY z*xVp_p3l6!0jYaYey99+v7%PF-xm&I>Mv)x%n01$_Z+|Opuif7kn@e9mTZg01s)x< zUR=W^lWo#y#SX6wik`*B5iEE-h-^iIZ?wL2hgJ*MFiI^7J*Evn7d2yetPtjru~i3l zPMwn6thvNL3do)%eM*)N?K`y7uV-Xvwy?~1b!ikwrFrTr{5l*d2ZD*BoRh$%Bshh_ z_B9F)1;Up!ny~Opwx(|*12rXyvRf6H)^K0;aUo2s#5=TOas*SMCF zl9Em8uLiMgNWm~PxXd>-9juD&FNnm^@3*fJ3d@3hikUtw*^CZ&5)HK@H15fL#fsDk zZ#F%Z?dtt;E#CR&gxw^xI*NaC#;K3Jtkfm2a&|HSvplZX-OQTPiEtt_eDva@FFtk7 zHRp^ZhMPg?87~KO;kV9M3%$hjxytDxq;b$CoNHxcMsM4)ZJ83%;;F{@I;G5`eZf;f zUDs1kiHk33k)vG(3UDD?`ExPVP|1J-!IgmU{ifWeN0boey1T#wOc=h)$;3E68CtXE zf6F!}`d+S^C6ZAo?nllPPRXe%)ih-8D|nbX)2Cr5SN4Rt>%A-`)6sYiFpX!F+cfUO zNk2&HK(W^~(WF78RNc~jD-vub+-~4?nM<85H!<^2o3Jyr6XzxiLB)fj9j2Ow-}#H9 z4{Scn&vy`(>Xd?7Omk=R7+||WgoXitN{F29KLXyUQD2t$|G~jw&C7a4vknqo2p5l{->Y;g(Qo_A_he`om+yX)$KpbFE)O%ZekUbSq&K1N3eu5i^md}i($*;uIyBk!> z$Kc{~92hH;UHLOXJRX=5*4p1`p%>@p9RvuWF=n+d6w_@hjwTGQV1$Qvh-At(-Hkxi zOrjIyY;#-luLNZR0ZsGML$_eKX$zi5lDokJsN8jKZ=TJ}6Ba%Vs z@_h#EvqoQ|Qv1qmLv+cDrJkr}qIT7X<19uItj0&$L=()c$~KJZZjOsg-*-w)Bc(|oxAA5GXcfZ!Hm%rt*!bDv3D<5;CWhnDAPk=eZFi=mPTZWNO5N-E11 z`YC`OCQS*=MIhyGNRyj`|mX5V3y#XK%kK)5@96Ems3hJcJ@fOryP6VgtL;H}=!i->iI12?o zDDt#vcAv&kHL~!qK0SSwX#-Y4c~&W{AWwTAemvExcVzD(?`GtogS|Ctu>eYIZ@yT` zw=7V2cJzSJo$DTlgqy_*tMW!;EDX}G9mu3MI^4Ckep>!hPzZ2|PZyw{VE`Mgh>LoO*0J>M zEHI#i$ac7pi)JyX^4`Ar z(9SB5HQO5JA)373+asww-ohb2;{En92VfkE3}XYY`RCSMXNz;g(9RjPYm`IlWw;>x zr&P^I7ZVgcV>`yP#rweNA}*F^ijsU|pP1%;_6s1mzmOx_-gKA+RKVrSzTx1qf)R%y z;wrDC(BG+tl!hbg=ZHwoOMW#T4+wT|D9R{w>x_bA0MF`{o{0wyKFGnY6!c}q9;Ur! zwW(>e7%}WrSDkt>)1JB1ph+vQqNP230wWGm2{nRrcnd;vd((KaA^>qbl zIx`tVKNPDuT!KVdV%`pGSGMH>MtfFoZ*HR2W~!nI!%!#QYeNVh)Vfml(JhHBlNoHK zk>Gwmk&L(^awj5%_0{#a=`-@hPhaem%q1^#8ORa9%)u}fSjsFv7s5w<4HQR%XlzIi zQLw76vhLlew%)b~(Y#h{af)JLV3aVt?5W2ZMF%FB%271nU-j>J;o1eX|qAB1?5`}_p3r9FLxlHrNukIKH$_iox@ ztQ8v=W4eaN5iaf?4K)6R_r)T$TC7r7!~!qs+M(WfKy#*^X}AL((*|bT^uG#O1}VS9 zXT-ZTK4K0W2SRTZH^E$j2f$HmVVVy3^mW2~g$2IHN5Fjg&8Pj#DoP(gLxucn<+lWe z6fA{o@#W4{onH>D8#qQ#Hjt=V%)VTJ>8V`X!Y@JKqhi~fUK0>Fne#BgtH>0{rb!vy z)xFpGv%>1O^dTY2Z-c-*{D%+kKZ+Q-@vgsKS!+YQADI7m*3YkP18XJ{nT2)Lb^q%x zMkc#bH|t{&@SDVz#M9k*63!HX=^-515wq(K}_f6 z^10<&WJcZkV1j^DJA`v}3mz7k!w6%Au$_@TKDxM5QvRxU*nq{SaBb86};*G%4F9;HIz2P?9w&D=PU`{|d zb68c%5w1R4^VvS7iIV#ef4zcpwmE{O02dJkH$)Och|@PQQ8T&!<}(uSCM1 zGsAo>Xr0u#v}&PFii>G=@kTw15H@$M>6z=ihfd#*T}lmO2HmXO^e37&(c^^jx(Dev zkFM|m8dp-B(dqt&Y~wT(v-_5_W0K3KKFgYKK$f1&uTO#BBr{zCl>7@j45EDFB ze2|M4=ltD(_=L(R;*jSl0y10}XFAEElZZh=pj#Z20F&aW)G3tD->$z`54T7PFp>qn@N$dr`phrc$~A@)bBEOq`=qcqcVs47 zhW)~da9Uzp;#8f`A<1wXy3q0#|2pliGVmc{@zw$rGm`A?Fa^+@y}$$)>-@`5;u)pJ z#U8FX!qU_*X#1p3<(=IfTgS1*5=30*i|?51c#a?})rL`=u{bM+T@@NWPO5^iAK2~C z8eN#nD@w)+!p?%Ixyt``q1VhO1PqV*?rLY}s=n;1J(^^ohGLZ=?Ws6ap@k}?)tU3~95TLIxAB=}{vrE^(js&WsoumB7^Rjd$kS#ct} zAxITT@U#M#RDw%{Tk49yLawOkY&n&!y*#w`X1`fR@-0xje7l0NRAFFH*Esumv3FCS zCjhw@fff~S=*=CCCyUTIfq_Sc4Q%*CDb#FvDv0C~lDtR#y!yAbP^@aNy2AkCusJpC!`!VVpf`sPOg$a#A&!Ks%`Wu-6%O(`6%@fyh`4EExOrLJ6h4s* zT)+$u`#sAYFhy zaiu3ux_vD2IA6jVVH4YlqKr;6Rm5&8O_txI(*~_qkmNT&^i8TVwb-jZbUkIJV+^9I zPBg~mKU#Q(Hk^+rZxn+Eo3rWr5Mg6+OqH9y>gQr$4Oik~Eu3Sr1azng%r!+4zr$GU%|N(7i+OhtGRdm}X*Up9?(?TzZYRJ57WvrQnRM!F z1vPKARVCEL(I_sL9dM5j!zoU&lTBZVAft^*jNc)mYD4-24B-X_x!F&}yc83WeRfx!z zhMI;aRF$Z&jT;nq3QD49P0y`50bQM4eT>C$YCa67Y5nZHlf6ARp}}4YvY;@eXiHB( zLRA(%;vo2GzXH-jvtF>LD7w|$7X?0%3 zn$#=0Zq$#iUqT>F^+n)7^}MU+pG4OA?<*lYgxp+Ucr`U>gj=^<@2Rmb(ZSg&FFUQJdc^{DE%_Mqd8S4-vqMx|-A?w?7H0&1o}~(?bOUy^BPm z;h}_Yc*RS+$Le|KOjRb<6*pGbHU1imITr!vsBJPjQ#oq&L&Xs=nYO0IPT^YH;NtC^ z($U%rg|M3>_PA!#7vzDvNNCp}kdJ)IMMQFzE7$rzINq619*SGvVor;+i>A%Mt)*M z^$2H(cW=5aeJ~*Cq3Bx;7%wd^EepGH_XuE-esLmJj&dfrId zXrCYlS$-li^AeP8Ywjk*dH6tE$A@T#|UP0&gC;)`ihtk!vRWq!t z1Ts%IdzJDb^XQUf`SR|t`wX`Ht-o;EAqJ5H7^PX?cpSQZ9Uv&N?-9S?L{rJ!A|(2Q z@6suJU~~KC-wDWjI>A)As<1s=41Sk+H}iyU=sI;wb)>EbfuR7ftXMZ4WiEv$gW!@P z8rEC^mg10PM=Q*xZzse7eM)({cG7jq$x0+->>B|5puQS^O`6-AA0mP5@Hp=)-aJRE zHz&-8&lg9ytm?>I8ZsYmLoP_A+<{v75+a&v#cno8D#;+o!;3x^#mR;9W-K6U%+F(b zK#eC|HzLZuVsVx~V8k1^n@nukvUR*3c%wz2`WlTbz=+V>ti`NlOd5az45(d3cesuy zeB~NhFa$Vvm!ZIfWG)vgA&~RRtlWM-DiJjJ4d-}@$~t1e#6n}>hq|hUx&C$Wq;jl5 z_$g%Rzl-!N`w>f1WZ)1WT4zIB;xjfiOB7g67KV96F+*e2sP4kJi{zm(iSa&Qey3s3 z$SA@k+cb#*H2`>_{(LOk>Q5Ts!Te=0x;uuH+y+3e?`U98F9Hyi_s-FS>86e!uV#=z zVaU(=rb>+Wzm$=CC6sp*oT2%m*el~u;6Fm76X_`MUVRHjL#z3nk%LAS4r5L0Rvd4F z5(X+U?ekq)|_zHXAiy{bNTU6rJEmS6y{#MscB%X>YoS zgmzY0QmQufdpDhEZ#)zkZwL^ds;g;uEpBY+n(?1vub!h*6CBNXc%Uffky_f*<5*;n z0Di9THI_SHpdgiE|5m!)`IWw_uZ|XQmu;HOTnz|A$=W9ivS>Gvg%f~9tiU@e@zbdq zB!Y7R%?}$l=XZVfe}257B!NAboi%W|Ab#ej1*_Wf^9hK%?bm+`OztWIcqE{@U9IFV z4ej@DBIUKfeX=i(>{{}t|NS%!ZPjJx4taa0s^r;TR`2e~wk8e9-m|`FlAz)AB6egT zy*I1mGhW~80p(5uuvF!hnpM1e-`%zNI~180_(&?3orhA5z#8E)&~Jdv3Qq$#gb}V) z8E=%E**um=c4k1O#5(Ioya_3cKEqbl9-N))lXN2F(OyZuGGS zo@Of|yObtnj=~i6z@88DS8H5~&B=pBst=7PIg3S?Gk8t+t`9eS*so8%k2XfMfnAW$ z|6i~y*B}rWufD*fBp=YiIkwYWrj%hr=FdKcCex7_C(Or}CCjgN`LIg;P1yT1`%fd1 z3VUX2TI0lyB%l=vD0I(_W_=F;-4{M7p2+IqSWq^lsz=N!ssSCf+CXr(`_rqAefOtQEt2YI}xX2s-RO*+~+3w*~~8y!P9}R9r@qcn_=8|>DE1zoM;S%4Sha+;sYI9p`VU(^3=O`-c^)Ms{dLdR zhJ_e8To0^P;3q%jZ|-OuEsR$RqEh*z|Ns9Wdq-rvDa5aMbr)zD`LwYz={~!V= z#7^T1x7UE#rt?H-S3vlwzPery^P+xKLEJYm!HxdV?w&isN@T<>i7ik3e8BeH*5;0; zNdPpmE9{;clXpk3*!d!GzvicZzp-)Wt-WRvf(+yw+^>H7xYj!lkVl7ke%iykqVK0K zXOLsT;?2G`jB=$>CxWVAa_5SeOQMaozj$f3+URutui;WuL*3 zvP%_}TY|o-j@it@1JysNwXNflu#9%80zO7gYg>yohRlFOBBAP*wJ}M$N?45ky5j5C z)Yfz_5p7FVr)KE>6kwo{EV__B;HTuPI?`u{Asi?q?-wgk;-rVM1oYk3>aIt2oHoKF zBk;JM7qr>blY{w0@E32dbN89^bAqI5Qn$G4rl79Ua10>jB$TvzhV_g9U=hIdi9nDM zq)(L;Z1HR`w1I%0@ss}usE6~lv0G@&v^AYeh`(X%nLMKUAg2m+5m}U+BZ&X>FCr^EJ=N*C6Xq6X z=(K2cl&sybJ3yekp(xkNZR$s+ZUB*?5J{5Wh^8uZmNALtA%}+=kzVgvS=E_7It<|` zgRm}J-MRE=JX*Wfzp<7NLE4_v=x)Yr`f&tNQ+}Zvm~KliLX2-IL9KP+B=Cu)$qpCGyHIDl#a z>{iOEpL9k4XX70TXKAQyaN29vQ30cJ9yY>n73Z0{?mE!L2zZC@RKz~p8v)?~gJy-w z#ss9wO_{1A=t?XHQVFyO;>(53d=z;9Gl>sfezS5D6QRq1XtM8Qx2TjEvs*)}Tb_(t(Y{=R49F=x9 z)HD>xbgm#)IFUdOgog;>vLwmQxjdd`P%@UWHdPx*+?v*XaU4=YV~Q4g`G_O75i|%$ zV?(^r=-=0A=|)p}kLYI=Q#Dge)Ps837Dpp!sx=cHIZpz-fK7sgb*leBCv6dbch@#J2kC=zem4U#BerED+odABY#RUjo8-F>()C z8f>k_z|dY{$W0!4ps!n*U3p9b&BY<`60dr23z5sgrS(2E-9t|-b00(ak)IN$v+3Ii zxBDIZ|K%D>07C$wL~^oJr}7arh9?5ZN2(HtiEYz?RNHN5d#QRX$vGDYo+$QK=-~kv z_92jO^?;>P83uEiQymmF<#fuZ?PM=Qjo*)g&kiQwSL;51fQyE7FD48&n2C0o?PM&NiNtoz;mI`ta z#KDNty(zcl2_LW?t3VJ&fmqCH%_O~iJUey-|SMluIV zm0acFS?)bKiXuFS7N4(=$;HtcnZ8XYs>v;-H(_7wpTizq8}gikdBsYObZgUNK-gS- zKuB*$*JB7bA<#Q|Ky|*R!|Sd=gZmmWOLma3w>4@!$Vnu@RF$d4`EQqn$cu{a`&f=R z*m>yI!xJ$bTfIR;kfbyeUg70a>Yvo9B3OE>eo(!Wrn|`=(O@xBL3#VX+VpS}husvc z1bsJe**e2nU)H4ep(NbK2%j_*lY|wTf>58&+uNP|eM8f3CJ$#~BKVl|;X!E3`wEkZ z{l(KQOIK-a>1`#v?&)MF-JTw&N)|M- zr$#9lH2uPS?i`|k5yE$rROzVdq|H;vnZSIk@;*JV7{nuyOeiE@6eQ*C=@STGvVp|S z!>WfB8l7>T;xrLh+rOs&y$YIh&CZVAYmi}2NaCZen2nTKmxFrCE!^jyz33n>&La&( z|JJ|f_M(nv%}4K1|9N38Q(8L9p*_+wz5w@eS=BNT0ZW{#b?Up0s*c}l4HQ2k_Y=|j`l@=DN$$SarV580 zCCl0v0v08e-s$&8^$M0k$pVJ(!-m>X?$GOG(8e4tHhilgK8U$>&&qEBcx$dZyhkTx zuF)fWVw8PuAJhAB`+d^%D?l2PhfvpTjoUcd+VKC&e2w?fMF!y|-xSka>XKZE#(-=j zhJ*-yfJRPXfG3Rbo*>kqN{rfu+P$r{XQGjBSv?f-RLMbrK&CPBpFEX5-P$;rC>Y+} z(mtVha_*+OfX9%?m%d>U<;(Uw475F8b=9g>ePw667)1W*l{Bsi#P&h3{AWMCi$1^R z-P!QXB={4T$$i?`imC2r67ZY8rj4Jylh|@f>zA@**-~BOU9_Rl2_`TKr*X7$2Loi- ziw*Qk26p+df!jap$bKWrtC*&ZtynqnFcQ3`2N#u`QoD?|0BYaTMw9bXY6J@boN7aP z<-ha85$Jpoywf-IU9(M9NDMl;bf5I-=`L@mTb!@jCMkjVam{00v%nGri;a>Nd)$`NpY~Ns0O8z5a65Vt6yBI$sbXp z*6t&W{gVlKRqc%~#!eeEAnVz(^|{pXvp0jJb6IemPS_(x3=h;ngGwcRqud?h0mkULzyyg!UQzn_SD#mw^hsz`QDGwO zJ`<7a1@f~SYWH(PCv6yz;A{Z-uGk{<@VhhqGN7VnH=Oapgg&)ZwIBAY81U7F2TwS| zFAVXtQ{gxr5W23&kLmWt+fk@01UpTOJk225Xf})qt!y^N)F|Z@1MJ5bUX%z*mi6X( zkBP&RT}Q`FjDS?S_SJ~k0~Tr4lQ-#jTL|yg?yBZmiE!Q4ZQCY$S!w(bUaA4_oQFsB z;1`*a6JsC`FW98rGY}l$7bgcgKs=2M^W7t4+s@X5{v1!XS&V-$`UWb)toP3IbO*5YFsBxzgD$29TXy7gMe>%|DuzY0{lX9 zGO4&Ail7R7k_gUml1rt&T22|lRsrneeGJh}yz+VglS);ml(HtyQz-dMw7bm0D|YC- zM4*Q$0Q7hvY&P4tmqnT{%zwzdx9U%+(b}!&-O!i2`k@Seft+-F1quiB35C*Vi;SA4{Rg1gsR6FMWiN!qbrOuw;;& zrrpKD&ueZkKm&sGBM6?+!%Rf-OX$JloBHYo^;(Atd?A3nEXwU(QltftfLw+F{v{RP zJAOT~i2D)Jk4m=-`*!auL=%DK!{QuS=T`#Qy`i?jE#T3;mp&B*M-%cteWBo}*N9`; z!d4<)rx~k}Uni#o@^)q(R90HHv^TfyU=cdv{V%rGHm>gZ4T$_{;>AZi4_2;Z{P8x1 z&dDP38JdQdjO~4xWivChe;|Y(_M_Cd&;9+2Kdi}aI^u#;_WsX+impqB4<24vd$a%` zz$^16ym3_JsMYR$wl^Qg!k3j8x@Tx*y@OhPwc*2lxqRPy5amC9((7^yg>@?UzHfjz zDyD?ThnC+@B+Td@&MnjX%z35(Zi0|!r*<3lk$-j&abFS%5`9XSdq{&Tz{2nm!%gr*SUAhB>)@qs<9)LoD=zbU(G8XYobAxJt^9g(zkebxqCi2S_Dzy0-h za3A1{1Clu|!X$#Esjuz1;^v_PbqNpGpEG&$gp=0l3vbneUKJZ?Wrh&8^;GrDDNHZdHI4&gei_>E zPL(h_OF?^j9FYMQ&Lf#0^xzh+2TH!JwPI%~LBDBD(@2w`bAd46d=X$UmUKBVmEc>R zDoG3r<8`B;WO92X%Ff6_O8rjQ#OgfuYOZWQM6=vCNnQ3J(uIWhx~dxr&%H(rAd-R; z34=fP^z>{s2{TqBL{N-Q`rh(UX8JlefvahF&C#N*J(HP#B9!mF9m9Fk3FpT2|3X7l zi}7CSy@`MV3wBG>qAW2^?|m_pF37Mu z($lQKZkuzPr}(wFr8Rw)CAh?bz1~mRv)PpuKSJWln0)+#kK2j%QqpX}Ca>gK)w=2+ zHsM{dtUiJuwWjYtg!0UL%{TjqEREJ+#)}wXGic4UTZ4n0$Ml-&q=f+I6$5MZby37v)e>>feUx?WrKlnj z>J-p``FjZA=?USd^9d@&P)?RoTv`&Al;`ukV?}s1A?-Z8I;9iE{1`{V=y9Kw$ zFDWIIkWNT&&$V7fqJJxj#o_TF+}pLa=WbOQIE74mdI^zf@)0o6x|@C&7=G~NUp+9F zUhETkUWo1|GYJU3?x^Z` zz&A#m_Y+VZzC*AFm(}l4-`3obzD6t@RA1A11;!1ONcDjivE`r2OUobjjn*i#PBT9p z|H4sTbtnJ^cV|JX+3wmDj;#{YR7Tqiy>oRRTbW(?^FYk>|E5?wd98s8VyFSIZ>TI@ z{isalTvZN)-Qi+wuDJLjrUTF*1tcG7#8zwxIbP2>gs_tbokgE>^Q{70pX<(Flc-39 z#BjL|o1=ulFt7GX8mC$?W)=}VJiN%a8A>&~C%7yjG{P?~u?OuE?Y>FgO;Em8 zEH$zyKK_GZz>Uh;lmJ>>XlAmR>i}Rssh07{4YGGW#7jiL2+0!fU5uk<&H}+#iVwDq z)EVH7Ao7{d5_P0Tp$mvED_@$SP`FvIo z9>4&NUK-#IT>|GL@r%Wj+OIpl-lrFO?_*&l7CQ+>T%_v3T`9w_=%x|?9-9m8S0-Tw z__&Vv{U1jHr)X|zT}|DaE$!*CAUKf0e$x=+$m7>l8^MKO=pXf!^^ZpzYU5QRG&;eF zN#4KZ?%l|1wu`XrWQ0EePJ95LbaK7j5 zw8f|>ZJH>8`$IY0s9nq0_j#FsI2ek{tQ0&k2!a;2Vbu$ZUs~=1!sEsMHbAJwyqR8< z>vjPmYzGB&q))UgqjmCG+=OuXu2w36V5<^E_0a0RC&DTbW#Om&v`eKo!Za#`P#Z=r zlF9iVFsVR@mQ);9)11xR$s$QVVRx^KNU3*$aL)^iUz+a!|Jd)efGoVNq1-|;%mB2r zVA&4Ol9QP6Z6NTT4;_y`JAIz^e_`=Um;2x8;51@(N5kztvnrmdoelzb7U!SER)ND& zkift{bW*QHA#V$(i69v^ce^5Ay+tbD$;m7)DROWZ;p>6$lVVtyt_Q$;1Pa;&lq~JZ z_w=Jux&;JU>Z|G(coO#iF4`Q%hA^-X#QWnn$+B`Z1)Vt z{E>p~FEi#EOF8xVyPtmfz>2S0&pT|t>J10hS4eki6 zErsf{)JdT`IOua95FWrReJ#pUMbp>5*5=2F;7%qm|5Pch9;6s}M9S&&)%8~l&`U0@YHOvGqP9jXv|5Ia^0z>td z#n}Y>&qvf<7?i3>>3!+G;!d*5x(gw^ON*yWTV|Y)90?Yl+o5@>WJ$|YOhh64o6jX? zfj4)E!%}Yz%E1tFU)>*Fk+~sVPa*vZMb-gIub23#zrHk=yp2Wj-Q07BZq|D302Km+ zS!V9`N+NysQRI9R@J*Tt?quyOwwtS^dbVtM!dbegOITmFn6z;FKjg#g<$FisO{bG)AgHCHk0HovGup}1LL3Vrv?1XpFQxl>!`Hj@j93H;hxiuv}RZCTTJJV)m6tRI3-)%xlD`qmS_|f@q`%WnP2kvqx)OYv}cY%cy)Mn>KW(HW`0ntV-OV9H@BClY?Eb6s&<6Nj<_%9 z@3&G0z5?bkDNm&!BiW5rhN@x0d{{8;P{ zj(8)X5@iQ)o`0|Q5uHFG$aM;`O#iESQE_u2FQ95SuwY+PuV&-AFMdrFsD%2Vy4t#T z-8E`$Iw+AahqGl=8hddbs@BE{6U;V<&kd`tcN_^fj1kFuSd>$Hf&2m({^6BfQH-Bl z$s#L94vON0+_hW3dbr-pI(YCBa8(xx1)9*2W8g=%Ue)_H2+UNK-1aH$Gk^D;c6SO3 zea4J|3P2pB%_dE`$YdKYM4_|tTkWJ#Lr1xWbiBq+5JVdW;R8OZD5}fgKrlFUJLs(G zAQt?YSnfc=P!&#*LLogFgi^NG-l+$<)f-pumG92o55Q0EP;ahlIt~eIHEF;YXi_+l zqoA|ZY-*BF9@Hj)*0u+9;MS!T}C#tM|f{oXqoMSPWBEkOHmp6@HpG2WEjq=^9C9W5O* z^}NvB*?ha??ZEol290Nnln|}yvw%QhM4AQ?NoJj0FTV$X0nG^yd%K4+;V(#_Q3&h% z=K3#FU}?-Rxyya?gzCQfNb$0=Qo+zvOG9Z@>Mvw7Y!UO(HV53}J?k zM$}kOV`%cDH$EU;g~zqzE@pKlOJHDc!HEqht;W?VOP0G-vkhXgo(O zoiF5!;_i*8L`%B?*4o_+n!k3f?OI*BYw0)wYGma8dfN8mWhG>Rzy%<@O+h&R@Sr+v z^&1h>*_ zOBT(qE5!u9Qa_;n!x$Vg774x{UYUBtd(dmjqUta7gUTT-)-@ymd-gLE2(TwD8@kH8)n8(x5nyK#I*TYdLCtJhcZK&E%kW=Y1!N7YU zqTwE1ruV7JqLC8i*4k=GqskUs|p*m3XtL z0fyOz;6KIQUGx7_m`^+kBcmTrXV)GA=7`%UB0#(Qc6VQ%l zMyLM{>E1toJu~mkz;pHBqZ4*v`)f8Xf+Ug@xrLE#6O`|yL+&k1qobzJuK+p82r3`i zYQWJax0pm?Zh@@r{YpjmnS(u{Im?ROi0jRR4GmEz)~#g-Nf1sB#HwW)Rpg{l+AvUQ zG0+=^*jRz{0EkKw{D^wb^k=WT@9h@_=;+iwr5_w|aK-mvXj+2zK3^n%5yMX(3vB*W zOvCHz)~%oNmv=Ka52>x_J>}@VpBrAiOJP#$;;#&AZt5~GEpPd$We@J)C`4l*gg5;C=>4OJJcuL4z^f7DK~67&@@x01-pdh9=^ysLQ8!EXJv2~R-qy3 zVkJQog%BR6&n-dlnyx!hghFDh27wb$MdrQClUitMp*pZ`;LXUm2PJ5RqVv7#1wfhw zsKT#_&Fh=2Z9JDza=cE@!l+T{;#%~xVv#d@^AROA-ZPZk`dcz)s-MP2dq&kl z1o^f;2AsH`??_*3EgWnr%w&}ZI!SvTuM)6rK=jb|sZ@H51<>igK6{_&{nW*%1bss$ z_)N3I{b#Ra^xU?dxfl_$7sf!aCC;-uXoQP&DLi`}&9@3mRjMX6$$w8FnPjLc)aG+& zK7s`7uLNRaOmp7mFU1i5S<+q7lB?)ebxMaIj3fx2aQk?~C7A)DpeZ}u*~8pAf-?nS zwg>Cz--;D3*Ju=-1*->)w0^%S+oXGDZ9{ECp|RD})^rmg?47C^p=vnyrJ0?o>Pi2z z`6hq3jK6=8h$tBBMOD|uncUh~>P#d`=KFovA99$v3)z04Dm0bFTecd__ohD}7WPYm zt;pD1oL}!IXpHj#;eBt(iYdiI8e-_AvxqUM9qp45wIiG#Gl~F_DGc!ami(6c3)YJb zD|Zd@G{+4%Vq1V?O#q$C!U-XC;7LcbElo@olqzI1$9p23bw&@NR?0m?L<#f)=0-u8 z=Ivqe8hZ^Om9XWdekzw~RTw6pmJ7q%_KyLNF2k7V*F?A~%*)P&byM?xg-1gO59$6C z5zuiF@b>r{_l!E?x{NXaTUBDKO(0@9}k(5|)vS+_xlI z<~{tsR(k<3AFg$THWA_+;4uWS3m|<^Y_Dr+Pfu2wu)oiBKp@+AA-I9pcF(#~{{f6b zGIO`v_!>trnrVRW%AY=d@Nj1SO8aIo>$R)y*U;MAPhIkW3%4gzo0m|t2RmHmroai7 zctN3)*_JuUlHJ9C>0|S@QQu&5NAr0c@nt4=mhcEHwak*6DyO+X9e;4CBgm$k@OnOuN)j&x6>$@tu>X(dmN@(rvLb4_Rx?BWH3F&p; z1=WK!TDckxH2TS>{+}+#vm0*#Ae3^s+iCt|qdE&eGO~803&(b^Rk?yOw-CzPIu(lL zVPgp7JC!Qr^43v@qYXquj0Po=q3gl zso|(;O1o6(NNIKX)b92zhXdfx0B~DxNq)KJ3A(?d#XQK~EWAlKb(MK#+E%0lX%Yyj z1h@c1h=1q9EWD5qk(4^M>E-qF5f%hQar; z0T;nQI1vO?%GNay?XsG+uYpqZpM_}mEka*e1$|z$|;R{>3Nf*0BqC9c8 zMk~1cN#i+!#6{Z20t0Ul&{x*xrvgxaA-T(USJP|LM^gfSo6m>SN9`IF;}Llk#u335 z$kRiG3Ae^!g}e(A4n$*I4ws_^f~jEO{*2tDg^&@vLO_@qo+_5PTz%i$gZq{wKF;O2 zYQRqBvI|Z;bQ43*b%5JeS?Tyf8#`ZS^A|07@xwW#rDms#PuuJFbv3oRz`L(F$7~4* ze446BIr*2{7`p8o%kq_PxVSZ>{R$Xv)b6e$cUn0|Shg89i}gKiZ+5}QL{R6Y zoDSRH0rx97p}xA_L7cu^|7Be+%>5cg@+u?V!LHDeKHIVkMTE6F>C`9%D=--_cXLDa z0j`1K{oNWzMId{DF-sG@dDELP4}ic+#eNxg4LUNHisI}EZt&MCj)a;IjL+x+$szBp zoFZudAA9c|CRtVO4X?HL302iqU7h3P8D^%_3^__ryh;%CDxl&O27v*TtDt~@5=4|N zpd#TS!GH<~2$Dq<5s)}D9VX8(v2*T9=bXLQ_pE*DG!1g^`##_Mz0c<#Rrk3LeX34c zXP>>-`mMEozu&htEH}gp;k~au0YQE_!1u}{i|^>!mJs`c6xVX^qtVJ1;>$p4LtDc# z?n?@_3&T>_9}-a)mn4Oy_W=_JO%2u$elH577)2))Ftc-k0(_OFqoV$9W>FVJvkGo- z|Mc8DxR#j-4^&#+z$AaBl0n2)D5W+b;9S?8x@V7SL!7Y}5}c1ha2e+xjXg}S7#sp1 zeiW@^T%98Xutw)JNg4wVT8PE0>&ncWS(U$!v#&+6E@mx%fO~|C&IgylRwzaPnAsQB zHPE#JHKlm&YisD>o>1x;=sBIV{+I>&vT2RRu=nva5_+RhqSl^@-Qy*5$8#V+8sCXZ z@{3Y87jsXcD$otn^PbTbhC_9r`%s|bXBvW)x|+R+xEud91GPQTv!srRCFE!8QGBz9b1xVCkO-C}-fgK2iS_ zA~lN?KFMRx%m=$VKS36LOCxXw$$)jCZ=tUT4L_dAZD4d3iE{6|P9~%S`m6$Fdd>~d zXTvu&fhThLn_K7Y+Z!IU>o`U52@Bv6_P<_U_j0NtUBRW!2_)*7+4~rl{HCwcsQvc( zcJ^0PS6|o7Ec?cw`ON3k)7yCt2t3f9a91**T6`Zr0veV|0fDddRv`s5b8lzB(lF3U zv4!o=eeei01tjJxq!(uBQGOGN+A&}F4qv|s22^k(p!j*T*6?{)_U-fMocI+$u?K?s zLrbw--vC}HR(eI&p6ye5vQ@%vJhfDSGa`lPH+Pt{w)eDxy;{`A!`}}A$n&59-$P= z_%(`Xw4-R-?!NA;0cgII*4eyfvkxvn{5zK}J3KxB03ZNKL_t)SK2-nE-KHPXu!yT~ z1EJ@EcSGbe6x$^30)+0?y7sH4+s1UTk^}^R@Gz5ig+!J$T-Lsb0Pl>-@}r;+fpS1% zHwQVPrZ`+T6M%GmQ*@?LkZo++w#^PZwr$&;j%};|*tTukwrx9^+_mn^x|n%8Pv6U_ zZ`ZDUYFELH?%$b%7{Md|!U2wi!vOAup+1a`*S9nQ>+G{cIphWF?UV4$OoR+kk?Cb5 z;jUZ}yugsG$uHdHn;Xy5f0CS8^Bbtx#Y-qAmz&p8mzI>jug?b1gKkdWBdZHxC$#ue zL)dRO7U~SW?dmidZG~4_AD^~#4K~~_HVRBs8lc<&vFGc?dusCOXY}6&f;^_D!VO-e zThDxprD@1}<6vE`HNL?SAI5{_t|L>zD8+&448@Zh|g;|1I+x z-h)au%leBOdk>VP=1STfPa2j>-5TK9>f z2a^kH_kP{N8Cs;3$g%$cbk8s01Om+68|~D22i#!OFUPm6&@CMIkE9`deQDi+u;U#o z6tdrno}Rvsb5Mmdk_5YpKbTGqeoMsYFF4-n>u;=JA2OPMhsG6VY@>2qeW;bb&a0(K_Zy=iPGT?Y8%n|D5k2OZ=O@Y zIe~aE3?tOF5>l^ zZGXYe!{VN>!jqZ`3WUF{$z?<6(n#g70N zQ|zbLXtN>Cyr;YHi@p2&vQ2`N4&h@b0!qZttk=&=kIomZ78z4ofq!)Ju4@hvXEpe1 zDi|ZYTw*S=a*&0Q-;DWwDlG`R5(GUS-v#%~={Lcx=WjdX6_!&Ql1~j4E7YfM@~M3m z7va4xM&(IllKz3nHVCBZ=a0(c!kGT`Ddhrf!JS5A!!YC(h7(+*0r~tc-Fa63GhCf$ zqR}pPkVULiN)#C#CHj9pCYJYikD@@v2+xg{@c9P4Rzd;q>^8rdX0Yb&#R>InIIbtW zA6L6$2*bi|Uh{c5)C%u?De*Q{MqZ!EjqoA2zhBM;MvgjT>gBW^&H+Q38StrJF3*3y zu>_x)XVY5c^B*C$F@ch7NAxis5ks7dwQ@mQ(uS2K6d;Qo7X$ouiWQf#dKn50+9@&t zdwd|E0C+)>$U>zFcd@o32|_iCJm$F;e{8J$NEYV^a8DX=<&4uPWiM!{7P;J6LvMMa zb%~QWawM~Qu1*UyZ3mz$5j6XzrN%9ed;UnEBTIlw7q03Q)*k%Cw*+d(-0X^@r(#3; zBW$*({!{7S$z7bmLm;t3?6A0t6{?O-dvki>FL&cFOh|aB=+mOR+3f6p~=HCWKsQKX|1B^ri%xODz zt_>?f)ecIuEy-vSSEcygh{>QB^{DDo6E10b%zpb|VcFsarH)o0=b>p2=@U}=c+Z}~ zK;jlNzNo?uMD|cHMic-D3;`;1u4NP%1Pcp3}Bkx2lwbki={YND}OgVIY)Z_j+Q)YIkZEgvshb-&M z{+-3%OHX{Jb=Ft0bB14zSYzWJF6wriFw|t3lWy8B*rNo)`gY{amUhLVQw-8ZUB<#x z_?OHlV()V;db4vAGj0a*Sk=&Uz`;h)14>OQfRNtO#y9g=n4ayOZjtJSQn4w}A71v2 zb>vP1{xa4X>F?YsWhM+rS!(=!U{AuX7f^<{V@Fc&`_$GHZDG&d(p#LmfrpRDk+A~h zE*xe12-Tb7o(<&;T7oOPQOt6;(Y0sK6elP~j-Tas8L40!7loYAfP7d__t=PCunu%{ ze9!UvS)WwE396bA^i{SOwU%?_oNe(+&UCC`ii2%}xfHrrTr5JaMYTadQcx$_6#@N~a-JMy2o7AdUAl`DC{wsebL zrtBxfDm8cyfn%_1W8Do@SP1UCEG88n)9eiJ{{Q@h0h#wqD%GOgJ z;UhkT>2g=YlU5Z<%UL+9eYS2RnOT5h(Nd;vV~g!KxHvq|j&6ha{#M}mQfG$JPe&Mq zZArJRT7~CwS*L>3QVO<+r71Qaja^;63s*{eB^bsR7yr8G6xD_ldAIWcRGefK^VJTF>^CkdNilzgrVlOw0;WDF9-cN z?V4($9vPD47LOHt4CvD=9I%GjgcUL24mRb5rgHm9-5kSBwm~2J=UFNT0@8u8{OySX zo?|!;U@w_f7sZ9~nx^h^XRUrr$-Y4jp;SbNU#wV4irFl93)YB~h5T}0T7JHayam6) zypi7-NWf!abU9gf*h}60$Pt(LTo6djiJh%uR%LJtm6}t+JDbl{P!?#>=zxf~!ZW&! zT>YRuY1q%S>2r8Q_Z;#&k9Vu{_yxME9zXdehCDiu66(?I(a9k-1TJe+QR$!U%7FMs zQLJ%t?1*?>^nd3aG0EnIuth@&ot97nq)mY=7>FGpY?PT3eQ-D%%7OI4C=~8V;Gfup zbE+3Dq-w7@sH!sg5&e!V3(nWi*P5#@^*tkm8v~`M$;Q-44~C4eHU;lnr_t|@p4wAS@iBj|#5Fymb_N+E!F0KprY`N^8tqzf^@#oX-}|6)=TjEU{Q z7N*6bO3WPB8bhR2yGj)FC&@)~pNMqx!m485pd%CecVQM+QBEmm+fABS$$9(C8}rV= z`jEpKU{WN0_t@v>Om<9zX6nboAi_%M*pQ!Vm@!I*?Z?hL$4uA$B z{gq=Ca(+?+uBUGktQmb^eg2bWH&TY=gTXx?-_sO)7f$|2oNkG%!YdAxL>=pcKiZda zr$)U7mRE@O5f~_=d_`}d4>T*yQ&VvGD?e#EQXL(*lP%FCD%KWi9BN85TA=-t(;MDz zk8_lz{5xq{Wh)n?Z911+Rld9F>qvGzl>cp2o=xDr_GxfJg!}XK>iR2d>CIb2P|P## zfq*40S!8v6>N4{k29iM}>92D*nK?(nKs~z!;4nqZsNMB%CL_45N)R^jK!t=!M|t;o zdVqnY+VM2&XVgZ0`aG>f`7eoCf%#ho7PmW3dZDoP`#5n*2Okne{*AdAmP*CdNpy~a zvVtT@h<&%LldJQNe{mse=gG2(J7~wH-YPi^qHLd!L)5!^Nj5eSrb7_xxa-~129V|> zsUMa{?KOtaAsC3A=}@QU*PzyL$|YZQ6mEXm(zSzuqxm-ICAg%M^7s7DfAq%Q!uv1> zVFK;4hM(Y794sH&OEyxxC6MwMJ;Y^WDY10-MGFR%6(JJK!N5QgpMK%}^RBy>5U7NecAVCr8KY@wbjVsIkzTAlB`ezsYgPvXPTwPXDDwu`i=wEpBbf55tk57H;| zmk(GHXU)Zx_Qf8+^JnEKFJ69*gLd~9T;WS}3G@dS)EFo*MT>*}5Prq|%mzO3Z2d!l z6PFQBBDDWYO<^STpVB1CjWLdapAa+wuV_HDbL#*skT1^T{Zq%g8R_8O#MKlT9c)YN z=zXVmaE@AGj*{ggQJ}ZX85tNJ7!@ATw__HkrnoXG2NaS_$Md@cZt^fIl!dLmg@E&s zXMaV8$Qf94O@xrpm)&O7qI3hfyt>F?$xWzNwl($u(p|owN03*&7&b~y&0}Z^l43we z=qo{yKXQ=z7AN83Ush^0FA8J#XNSMIFAglI$~2xVbNi2Bzo7rLm-V)^uQ)eRQSm1AzelHRWuv2`?o1dG1Vf?O^LY}nq zK9><(DreGSmZ0=wp)%YyXA8Pu!w_#WtRIYGEd;b_Clk1r#qVijA!XBsU)SUJt=2V;3nSs!eIp|GE=MISdDRROy(L0 zz+3#BQj(wN}u4$oh+mxlR{bw1i(nTrqRRjy$<)R*9O$jRn~CspYvM{->?FT@ zROO!w#B}%2p3=Os_mpVYx6F(4z1nX@X)R2LMF4RU*{!$qiaJB7_MMZW&#|@O0i=K1 zzd$okvJB_BWh6^W!MB*y)V8e6%x$1>Piag2v8Xad@@T=51w2N!#`M>bxDR3i=?H@8 zA6#+yQ8Q=yD`DU`QvE!0-WlfJ=fBQFO3ZiQR6=HUmNTMJVMf1SH&O*d6WfCmBjo0tnPglUx{ES&H!FB0 zJ%*4%W3zTE<|t@P3P-$id;W|@LXsSAji9v>qFVDSmkUkVZIiGWvuXHbaR2L+VM+$D z@*{`BMe7mRq9nCQsX5g^X&A?k-Nsi1tH9N1u2$>iguXe>prVxm`9vb$TGU#9Bg<}< zFmW$l^5F4dO1;l%iWw5XIVe;6m_ssmB%6eZIp`vGNDs}fLJ?UY0_7n6ssSh~+J z%W7H_V`gLCz%en`i3UreDe?l?d?jz6;kcb`znelRG=yb!Z(!*yMG)CXs%ziz?5@v+ zi!%T>1y<*MAt8UZi}Iqh8R0`X6#V(wWd{M!{blrJ2oZ@55k~fM4rhH18*i!@F52KN z0hs)n1tFuV0Sl;^(ZLpx(UbIJU)0e?A;{pe;tqyzTmQeR7ot8^J|xKYD$?My-Z#kZ zaiLhDXFA6g+x2IRk3Qxi`+}11k%i~EKF}3v>=A^GVV6nW_V%uDlppM?wQ$;jY_Q8Y zb_H6SQ8IyH7Ya#i!xpr$Dz|Ts5BL6YY6ICsNSMe-3Qz2cR_bx>tpUaWr&?EeDG$TI z3w%)_Sh7q@XEZz#v!5w~1=UBqWHnPU>*@}xIj5TN$TzK8r>6aunL zDvuy4gKlbR#OI2U`Qf8Gso)>UE%p5#*u#R1X2u`lc*OjEb*8YM!bX$%Y4Dy%R?QPQ zoRbLj4RJ$a0Be2)X~v-73{8VZb+8_b2AR*!&eHOm#DW{Gb!nG+48@$*Ij1>F6563q z6=h$hExawnD2HF*(zwu0CSFU5o#_eP=AbY(GM>OZD#_OEHx$ zHM6jKA)nvKo1@Evs}Plsu|eclmX*+rT@xv1+VjMMI#$46uBS3b+GbVc-c6!Y@?H#T%dFy0>AJ7&2m@n)B}Q>#f>(IQ^m(KmBQ%hMTMatoV*UR&2mT1nNHktC5C-c zDUej*Rn?~!M%beI{HT{Q7jdo(#V5hsp(s(YT9Z8c=qSBn-|Mx{*Q>*&sDD36eiTr= zeZI2^_t$Du$Az?*B#G9OhsmG#`JnqF8Op1DnM2i3%+b&SvTGI;@`XKUXnsdGM6(+p z0CTr|)>B(Uo@MbF0=Zgvb5VA^+k(BM%VOPnbaOm_R)lzl=Zn;I(10 zBL)XZ^}jZ9&Fwbl-p7yi)^AP=?@@4LHTBvv!ncc#NAkLCJ%7Jrvt|_A=N5Q-SGKg7 z(%K_}qTK!#cFXYR>4)Mu&5i+3%>(nT&*Ie$H~}zcX%Jm%By+edAO`u(k@*W1zbSc3 z4JDP99x4Jcf|o*;-t+mr5|Nh)Kp}*wjVecF`9Asnf>@Y!W_Gt~upV|y=wPWSe}qB#e)HRI{gk~>xhQA1B-THJY?FNXb5@ep zinfxc&~uRQRaz1Pxk)ui4!Jixv2Ve##Ads)&J`0(rJtRqY(&<)sREBBG(#n5!6y2; z*j^B%R#L}`?GL)N8SsA(ATS73LzP`cXRI0>0-w9^z?^FSPBU7Q888*O8BSegn8JuR zVrQ~3_>}6R^zV_$&Wb&o3R9R&!U$YJ1@gh4^b|!Ynoo&BM0(oGQJ2^x3#u1TM1n>8 zOqH~kkre1tv@irRDFb{d(s`Cs6tKl#MbnV=5vcME5r6BreiSV;_Z#-2(6wwfdC^MZcCp6KxSE^C1)8=}jU7RqajB9Jjx|&+s|~t6GF_t{=?z z6nof0Lf(I0GinG~OlX^{=(|WmF#Euuvow~9*X>%4H%20$G^`%- zK|B5y1qiw^+`0?5jaooGyJiM}#H6o^+gg0mk95p8Ui`L}i zRyJLJJ$CB8TZF&Ix}!b=BJaEfg(JaM%OxpE^7sH4vou`tFdu&g9#%Kk-9e=QTb9{? zt=;=-!jm_NoLelr?1%zj(hx(#UHn;ABa-2cscjjFXAzN@iIB*?E-)w`9Mz>%^Jy?M z{*2zY93j2$Bx(0ma}*SQ3Lt_MYSU%b73YdO?CB5u1odj6jD+_3Ep2ZCWeeG61k_>`0{WX(#g#DlBe;)u&%9cd<{DTHIG z*|d(HA@_?jy`x(E-k1BWhXQ*eJ#|w1OdGCRYFTg@S_13$ zoO7oj-#`w5d5dBs#S?g{pq&}^<=R)(cz8|#I#^$AR54IqFidtB&0)$qkmSTN$dWhE zjBZSjJ`$9>G^P)Ru02|mG*WCcTLYf~kT<*l21>RaHQ+VW+Wi@RBLV~YBNZ$)d4IwY zNa^9WH4lc0noQd6RS~;-7MNlKQh}RweF}~czD)pD=n;wSLm@2qDV$>D?)=LWEWJH#q*j_!WD9J$gT_|YP5 zy74htGs^T~7-R8d$}z(6*H%71l?vj;2}SNl^S9)~&I@9YN@3Buz1*aKIIHYk=TNaQ z@2e*r9JG9q^ZiFH+QUsg(%@2bWts!tF=p$4U0JbgC!xnY!Vcb!*F+o(YEn$tG7RQ` z>blj6#q{$-f++VUhwDsj_Ma+#vMW7=1HUTi8(X_Amaat8V58<&Z)u?5ifM6t0#0paopWP}A9Bb^SPxpurficjJTP;6y1DX%ve2 zxX3zan9@u5n~7|E!N6BZ2pJV@2SR?x}#K86Sy>#o!!NWGt-p`Fp zqdC%#qmB~zO#b8RW~KL-S5_De>BV?$uKzhcG)&kK)YqfFvexl@aTGC#Y0^=uuD|*5 z&_B0eC6%Gy?xpB_m{%Pm3(rSQ&#MdN^c$LTi!Bv*y{+k)&^jq$q+3^|d-<;I;bMQd z=uQ9R)O-JrKTcyp%XMEYYkc72Q`52UgpE(Bo2rwK?eMH$P%sg1jomSBwFO$sb4F|i z8GW<6^Yxj&+(GCtoARMmA9v&Bdy86y7)-eh*?N1Kz0G<|+rq^v{AsKB>looCOUs$1 zzY<;9_PYyw?*PDmO59nm$WP0_`0)b}Au{Qc*jk&F*?+EH3mIPGsCKyLjgM{o=G5tI za!;!|8UlW*@z{m>x~uAqy1q;-y$!OHw`Q8HTym%V-kyEf9lx4EgK>4NVKiM;QIC^zd#rt)G^uBjt>gyKYzG&laO{K$wIezKdE>)GCnWvmIOYb>qs*%8S z6};Q%De*66Kmf7yp1f>XDc@<)^9la?T?giYCJ9)%GCXXeov3vYQ>!D{e0xkYw^~I- zmDkj+UL4^`_R1F^xUWo#y;0kO-04f@TEpx`cgci4R&~wX!EAY(^>vi^3okHi^FMn5Y-Kf#BY_M-^YBI=9;wjXIyM`}=Fr2_)Ijh} zU=n%jUvIlY9ya>f;+6%vCMBS5*#8ZVS)<6kR`_*L6Ajc(^c1D3+&hW4Eqd>3f9Hiw z@RGL3Nomxs-El*{3)z`a%{Qk#b3SL=*!;b8+uV7HQ5TZXOte{%w!Dm%d8~RGJ#HMh z(AVdGX3~c=?niCsnS=le(+qb})!g@Y7pS*po4-b$DH;>`L|J#DDS|Q9W_^W5ZE-mD zaHc`B1iHan@Y=yf^#;$295W+_5U6)4qM^rEidV)C|jwW!bQk#0Q| zqpsviY=fksGJ(l2s-9{@Jv_WUYZ7$dH%y>^cK8vHjq7Mq z@oUD1Lpud4Y0h{$U$&oyS z@L<@<$806RwSz=){;It1#Ldoxl~(Z{d?2&V!+(zXpt1l)3i355(MXtQ0%K_V(S>-t zTY6;_VmW--y^9k-9pz{baL*dm@Mu~Zt1n2LaK|?OPSI6^tgu8yqqy^N4eFNWI)vX) zLbk9cIW~tdmeXt`zu@}jSMZ^jekV~#Ro;pVD}3dydCK>ms!G*(LXkN zOblHpQ50ogFFp(7T)$VEx> z2ZYc$E)`AOnI(4QbHTeZ*V?On2VC3d9c?l4mgon~@YS9Ge^UPMk2U})y~`LUe1%U6 zC70b~sTBK!B~|u&c<$(?FLv5mYmD#lT6mp%qjW4Hh`q^tPg?Pdj_e}rnzEhhxr$GN z=kW=ET_SDH^bh;wKiC+h0v6toWr55|Sy^_qN$s=<^-1w0yX_G`cZ@kCq$HGZ&Rfw~ zt0{YFt9Z2RV`qb{+h-YgBfh8lzeW5`W0(8SK-BdnOW{4K^A=^rrUu9D`eK;jEeNR$mT5if?d7G$JQ~30^E%&Cpil(+Mqp#fc&}F`Vbu{I)7jc&t{Q@0*h}^@k}%5;xl{Ptd^`plq9vN ziTS;uPRwPpbnf=VRj#`ydkFF7*uwF2Wlv5*5BII{kIzL}c|N=oKOAM}ah@aZgR+in z&&NgC*pDIggf;VPUTas?@xxZ(qgwT*Uw4r5ng?J6jnjM$rMXVKnkeL#INKiY#zPx4rZF78!P{7yZRp(}l>(lAl$2j5S3>UJAmuf)mOGzBjO zM20TW?i)dHm30U}IQ$xoDoJD=P=ecoi)6$jcAIhrP*GQOPsUYb0CiH2uywST6j6-x ze6}-6vnCa^N6J>Gz|~Rs6%!CP*+}e`*anfvi)TvGJs$qpS6yaMC@px*^?tSMGNh9K5|Rt9kj(3rmL8 zN%vG~`1(A^WejgYWdL2H_ijSbvsMyZjRae`(gdc2uURUC@*iOrFw3!0uFnipAb15@ z5&HVRd=b=h5fojEeI6(SJ!@}T$jbQc;a}YE6lY^oiloYo;Dl4V>I%{Z;Y|DLn4{F| z!AR}vR_j;$?vc&72w>6X@f2XNDbZXutY_ZsKYLnoN}3#C>r-MQ;?sdGjkUdpqi3}i z=9gdbL4HjCGiGk&B;1UGF5!U5Ywr(ceIS)TCRt|^1msN|P0XJlvr&*Icj)Q0)mLD~#*l~?>01k5s4~V^D zNS~UqCa~mWyD*S~#z5;>1tEthC7)%&t**dSO+*xn(%9xKjn?mv{#c;BJ|-hje@E^Y zeOAS^Z+KdGGn@VH#-nXCU;PhTN9o(HCDIxU9p>mGl%PY{c5mM~^{Ax;PKs&K-0G5|%7TqK4eD zhBUn8bNUZB%X;wK>oOMogASE6l@jakxEXBRQj$Q|XwIu3nllP} zQ_a{1(a1rdjKDTT{z4U<^+JyGM|lNj<2Z=r@TQ4!PKTs)3*O9uvFk5J(~1lig%OOQ zza=x)oYRtV4a&D=g2tIxE+4=tvKy*_^JW~B{xB8!GWPUP$(rFR7e1`_q z-Tv;?MFHixvfW_b?S_MT?=&_wK_NrCksEgr98;yuNCf?ZoUs1<_OzAH&)gnFaw;V_3OY$E7KMnY|b znaKD*kW3jnqx5Rn2{YWpz9N=pCjtRW#*x_Lj?u3O5${OB-58ViEoghfo?2s5=wdGp zNFyi!Zz`cXCwg@XYW-N6IE%NvvjZW08AxymRk`)CpNUD`wu!YH1&#B3{l2Tyl!l!F zJ0#O#cp5oKFkcq7-Z3pBrCSq--8bP+_9;0m3HFsf zIbsRVGNvcH92m`INi}X3wNck2b+a-iI|*hR!{PC9D{Z$e>}hx>rh``3vY~&qFbG)O zIq753IO446)mli-dymGexl;kz=}tDB0J()G%SxF2RR6{ZMLQs>SoKNgN|AdvJB#RQ z7*sR;W+x#*AGH9(%A(Pa7r87b+Py~ULYD+XqO{DY)zPw+bgP3FUmAg?!TWoin8pFe zz4in-kFGqT>XB&^r~P)ILfyoQZDs4bkor#RC>A1+fee#M(tY%Z06YO=#u2#W;d0FS z!JqWKey6uI!j;ro8q$)OmWf#Bo%(U&3QA|;r;_KvFfICl@J=Ie2C2t@U9BTh;MDb0 zTy$s5i~UP-uDb0qpAti3cX4&`|#kTL*2H0t`sBvfe=XNBY8gGZi z(h82S6dPs5{Tg;pt>Com30A4F%B8=A@ge+&FwuryKW>#+8zGAN8sC_eow?J=ZN(T_ zXs+ESdmLEmuVZKxSNzKjOgVaJ&vGn#sesfaU}~3^dT}|rQQ~Own&_Y;3vd~uyeCZ$OI9hmL{qDn zkY&6H*f8K9fxqPdrb4l^;^+p~^mXEu4{16qut6?I7|EsqTQ!8ZQP6PRkYcNWzxOGU zPrRcuOuprI+kFW9XmQW(FGMJ4P^ywqx&L)q`cXoDS(l=^6!**u3P+amr=W$2BEuxH z7zUv972|+@^ryelU|AY!_r^1pN+(O)?b5XX`k?qlMQMe)G9Um6uwULsM$AkeYzic) z)b(?z9c7w*yN$hv$98IWdwr2%P2?41jAQ@~stsejQ=h;SJm&FH0XpZ%ZQ z2@cq`pc=;9Y!|d{lP>R9dS{v)U-Vwu_ugoJZ;Ra5hutI~9h>P#T(7rSc*BYVYQ0+XfNn`@YW@~`AJ9>Qxq7Q+f zANLbLnXFCgEI5eH`-8ywf1Eguq$tOcdq` z&SBz6C0tE)p)E_S9Sg2lU{1hxqr5gBnhReu8;((BA?oKJcC&MkPE}S^POZ?*xTR>K zyl|QC8EEo#^G`ONE^PJKtxM8woQ~OjM6|*`z@fn;uz@{=lfB&H&cJ_xw6>ip(^^P# zp~bM6S;YtC^PPfhrQXsbsHV%-op((Vp$=u~^xb6daOAVnU$2w7YQ4#yaL{{-ot)Oc z^bFp)X_Eh@j8pL4x*L$4`wh-g9INpWoVc%M^y3}KZZ)v*;!^jk;PI)hk8!q9q@Jlm zliNH$8v_kC`KAv;4S$K5i1CbF-B0OT>te@;8K~7+C}{jTf7dv9Z>s_p-27o*H0;wBgF3#7!X`1zX+>*33}p2b zlrTZxTl;h0?&qF`slbTYHHhH|&LU>DS`^7dGav>~GvDhe7wNY{cj8+d<#=L`3d7 zXy_sV!meWh-Px#Y?m2M%)R&##{E8NLy|`~X$mV!61GI#8{@CKQUnkz$5y!sY-2K?o zbSd-O-PbXbnAhFch`iJ9zU=!j<`>`c$4t+6-TY6G&z{$*6Ac59wruw;tk+vHRs9Tr3y_E^jyA^Dmz}>>u|&g#0)HCOTh;`zA-=pYvISZd>18 z2Z*ghr|+=cP;E$Z#r86Zgf;b_l8V30g|E@RbdV_U)YQ@cp}a-xI@rXG7<A z-yxZZU$QBkyL9v{ZvEYcz06`dP%1AtP|Ikupy>YONh1w3L%Dk>qH`Beul|&H5ct9t z>Zlg-H(gMGIU3Rlj(fw3Q2b0k_EJ9;1SH!ZpTk8W99z(Jm}Ae1CJm^dwxw^BKXMn7 z$PX_npkS9QNM)j@)_9UAmvn7gF*oj($@?b;AvQwD(M!(gV1s0+$|NFMAoh|49s!mo zVKK+OXB^}P-_KJ;UO_{`hkjy!2dqndnHG>duBilvuB$$DH5P=#3^6DHiHbutEmtQJ zKPTZ%RFecFY>uh8GH1Cne&4t}{sI#aCT;nT^@c=YAn6W*J)kZ~nOITn{<=X8TLcB* zl8zj76YwGDTDE$dV4++){O{|^Z^1Ks$lL)kt=Ws#a-{eJ5^`|BC(u82J=@2 zLi@8AN*2dt4hp*e_J5*W_1RzTef@LF4M*_`XYuCKl^l&yKaN2HLwPJ~M>NB~t|CEe zD%~71JvqGr3-eippFLUhq+&RO2tx|Dr!iO6U}^&>GWd0Ex<&7?Vj`W)TILFMW5uWt zJe!i4F+Oa*!>XOK5kqt#(&5Fx>!D)?n3V6b)|Ojq+=q{F2?=!_N_T69;z%moQ++?^ zoLH*hY^4vV0f$L-n3JX_{+X(HaCG|-cCJ;sDcNk4i=?KR(-B_!@uG$>m2mq&!Z7jZ z(j|~ccpc3Wb{Kvp`k~`>7%g`c%9*ef_alBtagDx`u6C(&2aXe&Oh~Gzl35{U(M45e zjYZoY_YTL{xaV0RO1Du9P|3s`LU7(Rv2ZTp)hFW3>}t5ytRuo~lwU3sAA7M~AG^ZK zUtS%&moeC{tpn^9cMh7m!Thgrhjm*<&s6%ILL?~bey6j19oS73EfktxV%MX>A_lk7^zHXQ5NYn8Rs#Z$J2)H`>i{P1jrS+ z*h`N-{RH9Vt~`{Lb7;rTFv%|#`g%t*tKHg|RO!-ys5eDKJDUCpEspk`991M^?_OIe zO}^iAVWq4X)`i-1x7}&J-+l0~wT{~uZ>FW0psMp8im`N-v-c24G=x|4=&IGP2=k`i zQZ^mKDhF0&me9qj(?5dRyRfZyZ}oJH0Hvf$4bmQ4D*0o&<-^4=wIoES)2Grz*-fDr zY2XVET$(f*50(j$y!zOY9LvKyQVSrmQPUTb=rvEMZyku(jja4AFjc{z+p`yfoS`44 za_;r?nJz+y;?BX6%Hca&;Vu&l>67<@MNGA*5|q$H=Mu#gbZWIZNC#p+dNrm5>~c)8 zEq3|ABgwujyi;BPa3%}o>cBml`X<$+tsw+e3EL5{Avn^(N6+|Bg+`-k>*){w!rU(J zZJCW|ccq);c>LH%0l8$Im?8@J5pjBrCnX`o1cH7N&6?k8hWrz}e+K;~8cfuy|L}RB zK3pCx$e}s5Mr2kdxlJ-6>eTN6Y{%Hk{{6^hSO{J=M_~|pR)JLXa8}N=a#VM+whHhu zFJ!YUHUo(5z$CaHmY3=GnqO*AbPg1OTszGz!Qg(UOcRSi!GaxR>BI(2>5reC2a(t~ z87@E30w$O8AjS-A3YavSBL#Wx2OIJIMyB!ts#R6KSs4cS>|&xH{;9C%VGyn>uq5!y z^3O^SSE;D%+Q;M9IyN}&D!EIMt2*W6&0wOZQ#B%ia&MO%5~$GH2- zBBZX|!;i*4)_Hsx(+AnDKQik69{!iy>e_L)62p3wIG``e^JiiyR9HO_054T8&TVR~ zaRFq-m1kZMa6a{lC5EO}TK#4FnGcC5cd?QTrsp|W`&Vy_{RrhIE_gArW#i=Ldz7p2 zS_*?oGsna~0sOxXU;3H`Vv-1EHG(?ig@3T0mmI-=woZD>D5vFf6YbI^QQIQAC`=dV zDM?T;r`nmrxG0P>2b0rPkuj~agHsQp&k^+*QOqE){yg!o`UO}42TXGwT6a&OEScm4 zCZRcLdrvfUFC`t0|aVmU0*9 zhOB2EzI<7qwRiThg9iRbegS44Jn^N;*q(8zbClG{K0ozJ)GcVKYAI>mOuLyWRc^vC zLVs+{;5>!}wsYJEtXP4B2C$mx1F_~h8sK;xs~&q@{lqu4kKl%8NF~#EUkvWi?s;ZZ zkQuzdGVjj!^b7x3LB{(|8Xn_@Eu@4^427U6k))i9g+}rj8mEJ9*tUVT&Y6(BdmV-C zNc$loB1ln%D3%nY?AVHoH%iK12eV2eTMgQVTC+}ic53`1jkGhTcN(v(F%BVYFSoZB z1LEk4nyuPj=EF`{VL79H2PmRtIMCdviL%4<)|}wFCZ5VcoikW$xx)Rwh$PV_q_TE0Y&clcz`KcS8K!3D`VxQ02qRKH6h)pPeL% zz5ig?((p3{0EC?*jvJ6^iIa?1SnG}%b5?+cgQC^L`qbOBH;OmFQQ$}S?Kv81xB#09 z8nsqd5>skL>NQ_IgMYaB$+RFZIn%L zGM(@4f*&nF;nC>#S$r0;##h#r*C|Kn;ciAEQW@J?OKa^`Kh6NU@ivtNFESF+i;b;T z1+E)(qFrhw--9h5pW)Q^exz++1QD&}-6!^BSZW&W^R?;Y?rIOC!|G!d##MZX{MhP` zsf#r7>~-HQ%B$F*kkl4Is9HFMRieY~mZ@bVN+@?Esf~aF>lCN~Jg=N`A*vS|V%1-F zNAgn;J>y-T7x;Jz-{)P@w^hNU=O^ni-}0P`U_P|iweO)gBN*C%yud+T z;Oq6{Z)?CCzgJqiE^`849MQvJNykmFythel1)xTp3&;z|@xHHM7dUDmJdj8>m-o;4f)wT9&S^x!-^!Ni^|BuX(c=gcL=4L4Wru(&{roFHulhweHBqxl}rY*c-fpvpJ3Q?dz z4B^Q;Y5et77kf5D4{7*~qTICJ<1lMCNKo_la4+Vkna^SXBT$aE$KHPzcmF#Qznw7L z&LQQq9#Lg)E|-o#LjhB3-@Q+5uKDC^jnYsmqGrlhx7OXkpnnNjdbH)&?n`dD zZkKZs28eLt&)&5*I@280#2B9{|4+YC65UO;xxebRp6{FCX!O#6IEMFIQ*0xiXB9LV zB#-n5VNcY>`#M`kdUdT^82egU+o=Y*n=}_l-}dOSmci+S}6V}gC*CGXZ?I#vqP2D zFy1ztG*v(r)~l+s%e%3)N4NZ$Lb?LXFM0ip*Jp5DZ~aB9^)MnbTg&^IoEEWrFX~NY ze)HSoi9uKKzXyo_bx}aW(e{^am$k)e+wYq)2sBl^r&YIEUs=;gv&VD=xXB{5`o72A z$U?BlMUpe1_>cJMyzji2F!0~NL@kIeWtFv;#He8iF66{H=|X#JPj63zqH0&C*Kahy z7ssZb_s?nF%PXq#6(9Qh3Ylc@$;Q` zOU1VQUsUG*zzQnO9sSMQx4i%C1(*g&Q`xRR|C)I{Ix>$%6281m<(tli$H;&Nxw5W? z$98IW{eusJ@??Ce3gVHKn0OAc%uaon9RbBF30vNn`^dkvf0$D9)6CA}f6}RMB0!E^amj{n(D%OS*cVu3DK~A2Y{O%QG6xYt zNB-)p%#D7GFfhIzS_46=63OYk%h_vNtv9a+pjk)x#Ixbo+2))Fb8dak|E5Lgy1}e3 z$H;uDHou!g|Mx%RJs8i($6X^~+(C@$4l{%dXrDMUzU~ih1(2R9;mLTR3GU- zn53ks^B*%|b;W8^ky6W^$^sVZvM9cZyS}jaG+(GtFnscohc}t*yOW_VC1}t=+|nKI1oEG8nET4JJC@S9jOZdDj}C+FPFvW!oO>#}U&{Ewh0q!t743Tn-;G>h*qSl6Kg`F58&4JG<82H zqrE)&!A05$<22 z$<o)z#K^43186)ns#dVIZPa9+7Xlk20%bnrPGQi!xR z4PSX{=#ie!Ke&tXHhWT*UtDlQD*0-|wN`gkdt=xcKaxwk*O9LJ4Y*g7D>p+d77eI& z$@^-*ZI28)XLfqzw1uXQI)70N>z(BP$DDk5!=10Uq1kr7m@T(Dkj>A}`yqqPp0MG& zE`Oii*g!}%_(fyATnp;+I+xQA$JA-m{IT`g`T2Tgzh=|Yce&BA^Kz6E%DL$de%bTo z(@<4ah48rHwsoTV^zhKvFeL!DVvV_b^ZZpM`}(!tT2N4MeOwURFOH=T7#J9^AOAMo zd%n`}-N*=p!)_CPn7|ER&+BF|PLA>`cJk?VjA?+tZ5_13^&$YvkgXHFNbz4qy8fzl zqnK94(09`Vh@op`D&2#= z{Jadr1CwR~6-Mzd27C5UaFsA|zHv*NA$p@Sj;GRqA$}Ij;vu}Avll;}0XxR<#Qn%%V5$qr7@dW(t#P@x_vEPg4>|Zg@ z*_g>T9ZTs$k;DfjlZdhp+rB**+X0?+=#;=4{O`_BLkPyFDAq}kDt7w~E;e>{VM|LI zJ=Yae`?rghufpR<#&&2*`Sks`-#yyJH*^QPs(jF$(W$> za@yx3!LJj1$oG=(z;Q12yWv#*L(zCUcT)sVFShn5|H^U*3h`{2?q=unSd_w3hV%Zw zM}GJ*O+cv-nJatJHz)g-?S=S|zfvH_p?(aw&Q_sfqA%?IxG$=(Hj_BCUAoE6=<|QU=GWBessQcT-a+>h)R6De!Apfv-Ehm50>)3 zfU3q+Se33BvqI`ihq*MKoF*qCX2-smhU0SxC=ay zN-;!|&}08ADaw(1ZzwuYi+)j9g41RdATBPhOI{$?+Pr4VOU=ae<$DsTDDVOh_Dnye05uQfa-kO^sN2*{Mtak9;#_>UZg1aQbuYcYJ+YC z%6lC$asFbNUFIDEii@DnQY7O7tSoXFAHw4}iK%FJ?2whKXaX-?Jzim4wx8fV7@1N> zcXNkz;vC2WlCZDEFT`Xm(S2tK=OEA_jAYZ~Ni@cI_4o^=X&aE;DkE+C5VR%in;zXe zHIv+)S37JgXrgYTmr%FCjMN_Q72y`czc48^hMV5TYeOBv{hAtO4@)s%>7=O^c;&+V zY8CT3I!nledB_Ul4B5~rP=akvmqjlbi;az$ygyhTPj|nJA5zwEu|R?1Zv*Wg$<&Q~ z+4W?g)$U9KkI!Wv$&kbCL>YxMu*e6(x#65>4EE|bzi_bs)~en%uV>Qj@tov7pA z!~2eGk#+m}{F~;sov3ZDb&Wy<#owJw3o~kH_giEf;!GiyG>G9JO-?7a7>#(TKj8fL zCSsQE@7ZUNJGtlu%BiKizol}@;)`!|3%O@$SO2Jq>BN&&A;!y(t{K*N-20_CuffEa z-EThCc>WNT-E%{W^>V+Byw8WHq`d+lAk!o1X9lL{_zC~QBisbzb(P`NT!!zgH?z@RCdp=UA$$uAU^xwClWq#CM(+zTS;w;z^gI%taD-CRWqX z=%3CL-ARyT^sldHIZ|NAfbo6a3026}+sc6xl$3bsJ_bkP+g>NSSZSad&*oqI7Hh`$ zqCo%kxSy!lKO;$m&=celGk)~ff;QRlvVen)t=Hoy>&T+-Mc`VJ$Qw}8c^ffjYs<7{ z%Kvc>oZ#N+q0m;z{&ko0b#76XM$TIN|Jt8tebTt>&mjmpgcFod1pYI``O^yE&^V9d?i2Wx0lXCQ|Da1oVn`*+6&$V~#?$QGo?$wAI zI^=Ab#$ zAW&69JTD#IyWuiP0?&xm(A0E`n^~yP9Ec+kHJZ%iR`7CiVg-PKF8jP)d<93jx*Gj4 z2`9k6(bu3Xz+e9J&3CuG2oKu480pS$p&XY*ZCx@_+kY(z(57q=g1sKLFd7&` z8xMS6Fpoxh4ZI3P`%d%|9~@A*fp7L}94F8d!BwF+t3&`Mgr+c@#PC=*l!{{r(z3`_ zOt>MiyWHGSzS1g8FW29-DY?72UGZTQ=@@(==;LYM!S47UPx-74(5TefS#L7A9Z(2wrnFX&nBsrZldKpOqrtN6 zdeCSED);xB-ND)cL|!h1IQW5M;sQDNm+YSktfS;nFle496Tz7wcS~#qM>)Vz`x-G( zw@(-t7>L@Q=XJxG=ga6Gr}JeosXB`Z^^!)5jE7)W&}l*qhp{ktiHt>Rp=czOzUvCE z34gvjv5cOy$v2oyI9{7vQ1g1fw#Cgw5dxi)lAhkV1;xu|MG|TZ_aSyDcKu<(fFCIM zc4}`L_7*B5paLACT#B{qi0LopPGuKe8b4jgE38tQ;JVmz*@Wx{9iYOprI@O;qOSGYuFe zPwSek2dAVo!C%%(ZEDkNVSwOxGexj8S8S0hZ6jEBMa)Q4Uc9g8a2*Iih#5+frpplg z(pyeQV?62;i)+ez=gk0f+OAK--?Se_K7BKD~S>0uT zu!YLtWvz1!jP(02>AfQIFRRIEQI5~9IC??C^Zq<$4J##NgD1_O5TeTFxoV!{)`)7OyRw9^fBoRt7wG z@9WxiL7e|CG3@ct73*uZk!(1jr_JDI{&A;9X@1qYr$^ub=GkZJv><{}F6J{9He@l}bjkuWF>}`5pA@E)_CMG6bxjTAl!^velfkEK0Y0ot}fANb!tYoXV<%-??jysnnNV@-%CWhh0UDm8Z2 z)9+{UEDl+TLPm^*U1#MAK3gM(NqO({#BFmXdw>gq?p5AZ`~)rzox~97#-c{x%62P= zo|(zLN73oMICl%%t1dYcPjyRQg5U7j7yT>ubau7n=_Bemv4$1(`y4-b^3By?DS&bF zM68kJ7)gGw^<1>*)+BG3zU8 zeU16w_)U-p%sP8aM|u&m-sAYtKb+d?gt2qlq5qS~B&o^u>v>oZA3^U@fON}uza!=x zyQHx24@sdlm8M(W}(@l;0D!PKP}unT`>A)8S`h`>6wN zTi!?OAEt`kj5r?!v0g3S|LFA^E*R$oPEQ?k&Dj!E=n!9S@Fhi~76Con+L#38a?_-f{ag)R~*~`%TpQKM}6-R9gfP2xyIye=2WJJF=SW)Srn-w#iYSe;+h_ zrVVhUhiwX&e-0S0o;PtE2QtJ64?A=Elj? zeoXpzZ0zj1dz7+4?s1uw0Zou2-gI~D2`BCOdPCXO{f}=$adlAXa9&W!O}^HzV~3?}y-(yTm8o}!9jVs0qqy3xdVg-X>sMbU zsRca-Trvds-~QlkF`0(SzS~WP@=vk6>~*x@KX;!7!Jzp#GBq{yGQ%8pRAkBfuhgM# z`5wI1lTj^dIc@V6P-VOSkX+G?Phhya_5(Dm$Vi+}tB>fEYD`ak}L z7oZh5beQR79)A^APe%A?F(#Ijb#8A|g_DR+$s(ts?Wv)pv~5A0=5^C0-%U5Nb<0X2 z_lv7`F)0W0yW;?^_+o!OW&8;7QJ-0roXE;}vNR4a*6v%SoKPCI!;73=&aYFNP(EP& zeKKPNKT-HGckIEee}UVchXdn~#}!cziE>NMNc--u%?@vMCB^>jb2d4eZZ)1Kh*`p< z7BkEi(AyD^PFx(kzntK9pN){mvZr`KrLHBC9cGQ0sv0N^ta}LWPdy{nv*jL$|-|RzK~42p1IHW5_w=e;KHM!a*i5)h#Y2?QNRZ>)h#+8gfla zb3{B2`T@mSsRT{ZA8v|y=A*g!!oVb0j#+t|i`bo9i}1ZLs}VEZ$UsKQTe+whVlqPN81Sx*;%%U=!Oj}0z(v@tM2rXof~MLXCZFxtdQm0^e~$oHf77s4a@j7yWq@9T z#O*TqCkPF!V>sPKPV8ESwF(@=DNLH8+d#)c(v&wX<^->@7wx>-n})0^xI68PkC4&D zgz!V+KfhgIv>g6>)BpRYuRWl+%V%?_I+&u)I|SdCnvS%st4@mScsAkh4zI@Qjziw{{skcha?-)ghhxsT75PJtJt0>(t1i1Y8%EZ9)^AwXh; z{jpf4GFd#=6B4q$CCo>T&u`pPUCx$FpAjWr5Lg(A^aPe2cJO4yo_~xzdYFAKw1p~= zMaPRyhj=T81%vuN{-Eu6fGC=jGuO%3f)@0+3L}v0BLoLV-)>oJeE+$Pf0F+Hk$>)n zv&TajF7ImitRC>EO!)|JS<_o_v6J^f!K;orRce?H&)P+DIm;55zDX!%b5N+KE; zkx^rd3o#v5e>b~|i5MXsgr&_}V`!X3)QpmhB~^JN9*qtB+!jo!)SjivQZN96E*`$$ z5x%5_x}OG^-)HZ7x*MFw_k#=!eg;03{U0xf4|q8)-{prU8wp$PJTy@w5`*HdAiexG+ji+J#C@E8e7J}mCzqS* znC5IO+IzXHyDOr*vk=eg_?+zwPDFZ|uCg4#B5yP;#_E`AM9mE@4!)iwb<6s>lb9=? z{TU|n&2G4^P5T~>PZ++N&HcHXE@i*R1VK7Mk^u=*9=*0SkoajaOYy0z2ealHZiuLt~}tNHhr zbp`bL<75$$>G{2@Bm)1FyybTPDC$`}K4!f8z6v=k$;gQRt)DRso&icVDxm`|b=PF# z(T9~x5!M!%{=PxepxEw0*acaVedA_DgRJ}QB;yw2r6{% z(2Mn}CD3_j;0f6%@u0MaB6z+ao?b+t8AsCQ`?u_Ko$j=75E ztUM+P80rWi13*~=iuxe%4Y6wAR!oS3P!qw#xRh}14R$t@biST9t_;{86*~-|!DYby z?^n{veATyVhesADiNFg47qMiR5$nXxg{mHC!k&$Qe%DP>K4}~d4r8|AeaM2IkQYYz z>hF5fthtN(ax|M5C7DpFQJRZ36pFs~oFwk9EBP;8Ee&?#(Q}6_%m~KNW-Ezd{@EJM z-j2IRDC*$T_n*Elkpp2bKWJzD!=6QI+1^s*=n2=dqzFWWDp0o9jI@>YXNCSe~9vAO+oI=3C(%Bf) z6~6-a@I#wsc_D?KVNUc9gX_dDW`wZG{X%k?*uath?nFH7L`n;(PZRObEj@c|O`e@H z0M}WEJtTi_v&ERR@Z>w*4{O`CUm3h;^kgR=1pd16lKYGGnzBb)fq6+0u1ydVwMZS?A(siEF|~ZGT**tw3r@qO8|N~%|Oj)E9$j=sU4?mS?OM=wru?GKJq^?k_Ui;V(H55h*$G+t;cf^iWf=1 z0zRR%>Rx>_Ff5(UFcq4pA`C3-_AQs`*}3vtGg91U76{zm;^C^zMI=O`${KDlXpged z=^&*oC7bFUmz(wmVB%RiSU6fgdc`dOgbBFJ`^Z#DrW)WRa7h(Ai9BsXT{6-MyFW`q zbBsKVfS4dLeVx~0Ra+FWR1}*cqH#ON7{X>yN?o?RoW1fX=G+eX;jXT|AUS6sD5$No z&U;naRsA^;c%?D@UqR|Wb%+0v&F*&m|K}DV!QEH?VhT0oA`}pT z<-=7L(9%{p;lt9wip{P>iSa(Dcyk4{iM1bhw#($dl$O80EF>fHp-c(efCdmIuyL12 zR9Tg;X<9WAfsy}de^69cJ3m04krFl0M7L)|?jDWJa$L8u(|-j;iT-W>SAWeur(NFd zKLFQ%mxTWPezqaIo`&MY?U&-r|kFq8GsT-omh5nY!KTL zO6ko-TqxX^s$qAQlUZ$MDo-?!1Bc{*mkHF{eBi10$?oj2Fu7xVNg;bWE(z%NaMqxJZA%O z^CU?k)Fv5O-%XBg+p<39}{GrmK_T z*@=Fg1H=C)0Io zPcV&lBp^q!@;JT4)ssvH&)JinqY>K@=f3Vo>`wrZurV%cPLwWq7_hiMX9loa-igD1 zc`cqmpNBQXjaIxFTSc3eKnbNQsYYiP=3zxcB8oKkfQ5N7IvUX4UrQ<}E2vKji8JGqw$VpBFltm2hou3K)*= z@0t#&Jnb8XwwW3kGE^mfzEswyk{g46eH1R|e0FQoe1W-EhsdlE2j5f>T*ED_pX&nT zaRCuI$wh{j6;;no{L+{&hF33!sHZs}pI8kW@58P*&k${srEI?)WkaBQ48C$?cla5DzdjN^FPI!z=Gs119LO#oRGdqln3ByZ;IU`lUAQ>M_J@5xb@+Kc zJ{!E>tOo5ke467jrOc1s85lRebVBtoR}7o;1&^0j+dPVz2}u}pRIRFn!XCLD&LHv% zwi%Y}>CWWabl!Cgty8KC6g{jzR^jiijAq*ibuqgQ?N*pdfMfX%FiaZ4_o%+;$LRu6 zlJs*tPp*$7H4!Vx5RvQh;fq84;m62dbxcsp>4LxfM2Fs6ya!s=v|=DCjxq zPbF7$r@iPK7uH(tMI2u0%ea`X)Q0qRlYoaaFILIUtW8ugc$TO;iq(~Dg9=UY#DUOe zac~rKWadM|!NOlP_>EfXNvPID$z%oOrs5GgDNtsi$eisEJ1E8%mk62R8?mgWMEn5> zKl~K>nJ1t20`dcy6n+{YV(}0?`-tR+%Wg5BuJpHa55kBt*)nawh54JWo64g^Tz;y` zPt#R}Prp(WA@qz8H%>5SwxXW8i+Lm+D>ivMLEs`qGqqPb5c=J4Y3P{=g(e2+iv6E+ z*S1uJ+6g0#43EDd)MY4Ai_V)V=l-4l&PkYpG-Lab~nb| zCgd-(CS7z9O-SZzG-~^SsJx$Mknmd=*)Ht&#r)-~F#{9u^ma}2TsnV=~C(^lw@;v}#tu8zTrX^ZR4gK=i@ zlE2=l>ofePzb8bTKgbkuIvcFPpFGHZ$2320hAd*u_#NmT<&{G+Zfn_LQ$*TfYV0U# z+0vga4L(urN6eDuoJh$VF7oTv zA3t&smOl$kvNcQ4%pkIdY4ao-ZPw=Yd=|3&06l~Vg_1if?LwiDIk|Mr_uu^f(;7U9 zV1sCcA&?kG^%8LiZ;sk0hrz?(zl4L7nsb@(3`t`FaakcNaOnmJK^EhE9qfN;!e(VKH_Qaa1HFUx9qHDvVD=TSw z@%?jHT)rT-F*%kaB5Lm$cPjJyRiDyH%BL<06e}`UZL#aO_bAkof>d12;>% zBBf(q$QJ3&BP^6BT;h0O4<+>-(?W?5loZ0x1CYe#kzL1X#lFJOw$VruU0vvsPLwZ^ zWFX%@fo{g6yM||-WqHyGEgMJqL=>;EO1rVCA*T9!12i~Ktz8?o00g9H_t8(m%#>!$ zmBu8Mo>0L&_s{icsBiK9+;v(YCrX~4h6(0nEX$&_~x~Pa%3SX04n~}fz)@`oo@r8 z!cqm18jqBdTg>Ctoi&Z>A;USC7MQU99y)XeL8=NA5KDqJP&6It{*Kpsb>tLJbutZl zR!SLCRt!ODQ@XaU??SnAh0+c@v+1cYO#*Eam&>%ENUZBbrrY)qf194`Y z^5ww?n>3NW==E@xqt{pP4QBozvwYfgMQfSdk<;6sMk+4jZ)w_T#4(~m;gH4|J1@$K8!`YsS7q1&E7@Ox*XhAlPPe_K(CEP+ zM#xGLH)ta1f9qv9jbsI3R{8i|pt_Wz3}f_{zPcN245aLu!oXiJfgPB!91H08tx zQG0%epYcWrflE&tr0{FP@jS|Ec7h&j9RoU_m`YY?e_j`wjEGGWp6zJF;Y>#Z%bAJZ zGEw9ZGIvJ*EB7&5jHm z0?d6~32#YoO+&fYxT-6A@~_ji^P|ZhV`YbtOjeS8IKnFEh?^rs6zT|QVhEu&ZmOjU zO0I`J1`-PG`L>*f+XmEiVye+}<;_jl^Y=S) zRVAhcj(|g1@?WzdBOYtpXFwue4j8jZWzB90V@8Uz&dz`)+1nT1-bo|v0JDElIFmOg znz)dtRi%Y7NV79B7tGFbmmV*2F-d+Z<|`|PARa3d^Is=&#Y9X2cVr`tqPWtn-#uzf zb{KJ`ARfb+!r=3-Pt{6+i!tUtnt&VQIy$KoSI`B;!P51c?uF8(<{}zN5y@%fUtNtos zZ8}HMy%b!GTCDl{Y$94@m||jv`!c^0hT2HLiv_X(aX^&FkrTq(i_?nyXVJ2_VT^JS zURP*+7u+(N{|f(}eFAo?QMu z+&Zd}_<8dHj&Tx27z4!khBUi7IsL$L(%k=u*34Iz^N+^uipA|d3P~IJR0sTnq9b54 z_qMk68`f2Jv3Od{rpiboX(VY8*{|1|j&<5VFw89%b8Rpj7444%|e)hoHLK)|yAgu_V*` zfqOXL*9GaD_V!P(4=h+4B0zsNzAuu^xI6nI*U~MC)2NRrPC1YJP2zFxRDjm<9Z!{~ zl0C%l2?^;CyO7O32>U*Kaot46Gv*pa2^|;5b??iz;1k(sVFTEzXM}1%g(COGQOoEO z^wF+0eF^oO?4hNNx9*4TS+hx}z7)lua{z~izOt;~C52GfQHI3P1qZ^Mlnkr?Rpw5Bp#d@FSSHWvwP zs**@Zi*g&pX0Dc`#TPXKnxVqx zJ%xRb9bzIWew6sn@+ap;r%a`z*hFALiysB_qKbGiYT@ejp7hi8t5e^A5I?I(EmH{A z*h}b^+hCKtWJ(99@oj(2Fu1T0W+CR%93$z^eIrEOnS=gAjqZ-JRTNVd@vbe)Lp(K~ zigc>oRZpfLcqesj3&K1{+t58a7>c&zk7}P!sZTa7MWeET@W&%r;Ot@&Tl|zP6q-f> zENB?K$UnBh5sM!k5DnSi^AE_px)(tGF!QH`UZ#iOSfAf_bJat?%kpZ$TI0Kjn#c^Bb(crn&W7^y%gT!RE{}Tjbb$ z&_|esYbl=^mSxnl@BlXWAS41Z7C9zrIUUAyxk2IO{aZy=v}YxWW3~h~qqIRrMlUwp zygLgrd13CWjITw^T=CHHX6Zu=AOOA0&f|Ru*O=<3t{t+BmnJ<>ko1_} z_*ge&QG})2Ri#*Pb378ZjD8KVS*5M*)XBF04R-z>i1d=rBID2i?oCxFkTo@%r?@AV z^$AwgO)Si9c9;4wJ+VV>6jl`!A^fm-xAyF7!McRkUOh?v%mm$skax;Jd$r`>54-Z* zSq~&6uoY8+_N@+?%-zR-Nb=w{+w*x*f?ZZ8oZ1y@B2wgDgkSqs)}MP_&6}&6FeTYD z!rmw;NI2by^uPGsy904{x66pOmqCdeE&pjznpc*2Uf$T|DM>1l8RqZUPPDSLf>D(H zM<9I$D(RZe*)9DKJ9F4rG}jpsDrXcayz^X(kZ<1LgPR;DE!cvSPRhpn$W^6166exV zQ%!6wY(RcjG$?3}QbbBY=+U>g3y{4H>^4~T`z5JFk#41cVQdlta;YA?f3WB~GE%Zd zY)=6D1YDB#lhb;ORnJAbOjC^U3p%wZ>O&&N=c#G@>)$@&+)$$x@g_`^BS(G@w4!8N znB>sx)A>hbFlkyp04ijLmpp3(ZUmpfy#NHXoi4EE6Vtd7-H$|F%88;Q(hIA5Vj6#|~t&|;d ztRh>#-OO^!q}_!cwEiwyJ!NaxWlftiY(Adj7_R(dAsWaWg${RT_fJQ^*W|scU?mzX zcte}bM*W^8&lY)L0<`qsW!5xF!h0azL62y_hnGU;-K6~5fCgbQ<_c{_6~u^o<=&0( zD<+DPbfBr2Ush(vbS&2ews2 zG{l-g0IDZ#aA)W%ts3F0r;WEwu#iKNWW*GUSVvgY@3KN%V!-)qc>-%_GLqFlsBc;l zu42F@TuO*RWmV0_3i2*X^mS0v%WFy)eiW={e(!sX$2XL2c<5$Tsj0iplSV-l{$w@+ zbz)dX>}|X_`(4}u^MH`9#>JK!+<6Z^P$40(N_7GIOe+yELXfHg4UYxIY!9u>FtxRy z0)l?V9bwS?FgAVixOAQIeg1)8@N3)K@nKOI)a__H<$i+G4w{pF%qTc909CfxKXFWK zsX2X0L7^zqo+Q2&3i^CrL6G14-n39AOxi|%7`!Ejk~mNoPXC+S6RkBnDkY&u}=Erp2+xRsVQxf*&qw2x*0ji9%qrI=xkB z@j1evq9-CZwY3EU2Utuz+kQ$o1l*oiGWk>swS5!@{OBpoA# zU5zA$h-X2CegNsI*auwMfK%Lp7G&XWnG@+rkv2-yUU<1Bq1bDospJm(!T!w<8Y=Le zgj_*)t44uUEChTwofhK1TDkPw*3>)*%MCWU-t5OW|1i-XVG60N=7W%Vp46gQQ3j2T zLGt9Rx~SE%A-L*k>$BMG(`VUI{eJM3B7ci6&2ZmqvOnl2D2k(^E;7R{u8S4Z8NdVT z0>m0xI@X;-D7lB?5n8alsCxkV520QxKF+02AaOz_@4FF?@fNVuo~0pvX7va;fNcUc z(bBZs(p2O^i8hav;=RqlaLgVOrf4f37PNLTS*@A-u~2;f!Z@ zt-YWi_C{TFxh+i^s@y?U^?|YjCBE&yaLsZb@D0_43+cK;qrXn)Of$`W2=_;*<+Pm2 z=V)Q1G&&4zDsg1vG?8}EV*li`B-+fF^a*hNsEdM4ese#u10Nj($ToyHB};U`|MR(i%gY4~4=kqAd2en6wvz-76U_tjqyQFkzZY~*XG$tnKNF+6oK9>q2LtcBt7 z@Sy@p(3!Gy3zZ}BZ|lecda!(IR_<+g?mD=JI_ZVYc!j;KB3g`W_u@%)GKNKDx&&yt zq%3+M*%8E>75C~qky31grayQ$k(sURJE$78KHhy~(v2zpVs0)w=!Q#);gY4opki<= zbE*U5G;s0~`J3x-k!{E|KWq~tISKP@wxSg%_KN`>E|TbBg!uR}csZ*4sjB+&9#^k5 zY+iUJEL91&CWr;Kw+g{4u1b_YC8rs37v8{*2s&ixQ;t^lqcq;}162HK>-MU0yJTbW z_(9SUxR0L#O$e_IsjCGQ`J#>UZ&C?o=%ws=_0wl{A=f(qwe6LpFP(NS{vmE1%Jtqm zNSPOqLK zY@8kgQ#{?kvh-8>P>9GWZ(gCGQ$$N+t2uKWw9}>i@ zKiIfA#%iL}Sq<+K+E_LSEwdayXClW?K)}&V?ih4!8rJ2cV{=rBhwdJOSJ={ksE4W} zT!`^QKD+TJI?99P@Wq%+4?FLZcO%KD$?i`8KkqhD*EDx_ST#Gmd$6=I=G$>uy0aj- zgK`m52hC3+U3tj@ujBmtZ7cNy7nY^WI!v>3Eqh=3H4tJsKM5a`Sfu*TN8~ z{~_?%J^+cC4ZlXnTlwPa2AL8SX$v9Ds`3$mKen!2%%qZ(m$A1LS?WsdwW7b18)A2& zHmX3$1JTkpEQ&O|OALpa}K^H4J^a=v`CRgw; zREGjIRsS$<5YB}KT^SS6J&qCmT>oV<8Q6NNjl7L{yhay9f2NF~1*7j+1`?9{kW65= z8qPW#ygQIYE;{={E=E*uNl64^jwD@G*`4n>8VE9;cTch^X7Jk*dX$BMvbE&!2(UG%k2DAcG}p$;kj zXgeLnHiH4#3l4zP1qJ#;D7SHx+iQQo9Hg#;R40M=k5N4hv}?Vx=fnhJx<|B7E}7pS z30@mP(ym)lz&Y+U#OJKXI(qqWaN# z^40iIcV|J6Wdf;^QV?@3{i-G)Wp-Q-Xp}kcTjE=CQysbI@{X z(_h$=woE6bO;xzw4?d|x_sNr_EgYdnBAV8;gS7B2l~Xn3Ynxi~XJk^Ir+clppr9_$ z`E(;~^eXz;r(9w9n?8ruB?y08!B;8g!hK+ zd89W%wBsX4bHda2Ek97+>vueABrm-sHBJ%Jc?FR$5r%uXk%WCmyZ*5^kP+OKH%Zj<5eD?lF z3=-GfUHP@JNCYhLMi$$ok@#Eo1Ya8*jWCN^&|)eo^GdX_OC1PzNzlDA3o` z5WyO04?+ru$^%(pyEpi4F5NY;7vKSivqD=?-hIPb!iV^+;P^#KhKY$EQslGXveyRk zuYqxb_sdBu=Ds!7Y2N0}Kw{U|a`nRW5L@W=Qdof)=m? zA9i0~<}9{iv;rU0jfae|TMHHO8_Aeo8gY6tUk(;3;KRhf=d7hFTs{_BXw#W5;f?VP zG1{Au*bDbQ*nN8+^7TckwWGPIfaXA426a<3$j)uih+ey)kSk3=L4>%;NAym9Q>BJl z%5#{dwzQN+3)2x&Lz4e&V3>F}&8UR2>GiU6o?BVjf}3g*)$>pxC-ae0OcK0bh*W0~ zt$q%tQu+p@XL!|5rMt|!2?~@w03?GmX5H3u^xLRL1N;CsJT9LX>7e2kbs9GjXe9b< zV(0V0DY^}OPB=MIZQ|pLTswC*r*zN{F4#;BZIu@U!3J;u8LR7|sA{?-ZIPL?+;3oW zwbZg~plz_)YtHrqeykWy)y{^}OYG`V`jyqIY)$7H@-@0$!jI@W@5WhU1m^5Y>WbrO z*J}}A7Y~H61V-8a1ED}(zaBwfaOR>!^aNYc8ZGrdCE-{i{G9XVg<1$WUn_XdIWb!m z*$Yqyq!6S8)LEt3Q{WE#SB1|+i3hIpt~;+M^(=-Ioz12*n&2I7?NZn4rIyf)iMwTEiN9g(m&hY4@oB;l@#=o2O~oQ^fe3e#hC9?lgR z+EZ(E;swy*8gLm3ofq^~IVX=!zKzkbr0Jk_sdeY=-EVKFPr^;%VM4(T2y{1VPn|cI zG+rtU`Pa&l$_~vt;|iolYg@fz^{#eK;5n?I75N*Rny=MbcR?+_BuTuO@yVtmTOAlB z!c~Isd@1mYiqfE?`OQwua5-xFAkaw`8863>17%&HG<)d68%RRjlQM8$ZrpNwtTA>N zDJo2R)9)Hd<7|oYO-(u5YlqzaG*5!BI8MlQrl@)MyI!hKQTSVZ+UfU%!c_AA;j$7|5*EuS@| zqwS0p&_J)@eI=D{9is()gqlXPgs>GtXF21)>l&jMYDGhJhHeUNm)#g~Uz5a>3Gr3O z*oUu0fQaQb@!2%7ejxPp_A%xx)DBK-Bio6LxEX;ys%+l?btaOXH&3+vJ)6E0*G&T z=r9xfXhZD@8nBh;f=E1a5^J~E3W2pyB;Z)G@eZqxwUGN5iOv$Nc`XS(@Z$kg_a+GadOuBikr1LX_EGGfz`lW_0l+7K3X?kXqxP>M zvI}dJY^mRu89a$M_kr@ja!1<;SY(x1mv!`MB6c7Vl>k5-L5DPAu>|@;X&j3O6Z%jjmn4FWM-iTNR1U-r9HQxA!>%+r@0eg}{O@ijL zmWQodgdy6l(Es zNHn9wrJ!Ln5xq*J4kn2X>E-WvPRN(}6A-{}8lI`F8FFMT5u2b%57J(JC6iN*b2es( z;{f6Qoa05_O!5H*YqkhQpG}!fGYi)jZsbE${>Cx%YoBMrKZJ)#kC;vdOb_-7zF!;v za)6-xX;R`_m8Dizqn35hQ7H{^3Te%IjvA#cfP zo}K-Lq%ok?EUSE{4ojjeF5)22IuCUE(Lnjo<*|6=Isz&Q`a>6YE}tzyQX+MZB=nN9 zUlyLcB}%Cag#e!r#{ZJ_-SKgh$KNya?4C|?#n>vgDULC=PA8j=A%xIO51|tvfJIC% zN$A~x=_IBmkPwgvAqfNs9a7nxLHV}gGAl`#Haero=nWbeQewaFV< zG4hKsn~j+(9Pbgc5Lx<*?l0~&S1vmU4IL>l{>=YQf8W{Lxjz9N2>`#;2HUaFM2iWa zI655Nx%G^#UDMFj*L9!~Xcj{w=JPK)=FHi}G2*JkqagSmi)1XweJZE?Ca9&&6|%H3 zzyKmngEDmFH_3m#tZ&(j0BDH_>a}-GhkMQ5&Nc%0P)s0VWoE81*O4|EX9K`i!nw7CZ1jdgt*6T1D~ zop%8$$o@A0yH_mypqGdi`?^jPz`X_K$Htm08)Ye7*v{{~nxNEQI)nfk8F*YIw!?p} zV&Aeo1* z1cPrQOCW$xGx0Q)r9ueHs4NE<$+X+@P$=1&g~sw@5mHM)7*zwi%9I1qrul~a87b+o zBMWCjffwgYZGE#eSlUKeM*>)FSsFaprR=GpOvZ}c7$ts3Rhe$j>?`fX!1ERVwCv6Z zr%qGm9TDf4AiT1oBuUQQZBQ`F#D7J^@xn6Ovi-u4i9B(rEceLB`a1#SrIxDRPssx? za5$loGEiE3fN*_;SLZCTAC8l?dqpa{&@H1BYx+a(QBSL z?YXTt-K}=h$+;J+&84~!(aMR|$}MxJCvpj;gC_(NmZFi5bM^U(&bZWDI$nqmDsyz6 zChw*V;>m%bjhNv{rIJeng4URHfj8DIV!@$Rqu~7nT`dfY|V}CdNZiFlKNEWu?K? zdr~f!?_}UtTbo+%(s@53a(005jAt+O^)%EfM6(dVydO)vNnNI{W4JuLYo)0kD4YOR zK2eEcf+W+$Ncgv0L+$~Uy;y=Q=ujI=2c8sbsU=+VURyT%eUtEzxO^ zFbWlklKY-o6j?ss`7}o0W@ToR29OT}gHPq_^Uu43WuR~&32d5c$e-aqlkO)+oqp80 z%$y@BU#SI+{(lP27@!M*<&%NYRZCUI`u0a}Pt4Q?rz?7iNbSr#+k{Y#V;S=6-d($% z;&+&M%SY~dr2U9fkJt_Xwwus6p?#=#sGcFdUJU-bwW0McJ$$ve1CUkBi264kVOClC zy3uuQ2KhA>vzWHOZY;~;O^1;IHaSXd4;#VsF_C;}NWoa7;_*fSCG&_{NJDLz}%9gJ)1b?h%PPKRm zkiKUX+akJ0W$~UR6l9mwl53djq>E1eE_gHo3*v{S5tS(%t;);k_o~RpuquE z!*us_Z)?%+FC?#_U_Kg-+Jm}a2NIY~h#O%Q`}gju!uB?j-C~iaj4=mz8$x$);Y>!^ zW}so!$-861z;v$Y+{uJyE(P4hG3|sb2Fbi5V0SbUJ~+E^w)60m`b!6k*zE}M?dt2N zs5t=*SZg;643yZi0m7|;FlHTE-jx5(^1)@ZV`~lx5Wf`Q51oo9ZA=toB}>D(rkn%s zmJcr9-CBEE4DrwBRmoUYi9iC!SSw$QtsQ&Ux@cVtmKOrh>jXT-0*(!X@Fi=bh0&;e zBB%*=HfV~~dsK0tc$UOGF9^e%Ju9x~IRNY<7SH#Lhgw}2_!2_-Q}r3qJy1A7m_|fw zGiFVDZll~Mip~qjSVSDBvQk$l=~^>*8(aHue%ic0DjU|_UsOiq%Uo0b0>4faYzhN& zigTD6{IeF$+VBPtTrXl*<(uYi0D<}nm$7go7`iB5pI__NLju&E4h(NJH#%m^`ty|q z%A#zi0wjst{ALt+HJ3I6%T_MiCNOk3f>|HR$ggHKZ8P}ps?Ir4M9K!o@C~3@3uQ2H zIs#gR_zwcXTtqp{nDA_0bn0i)Fp={3vd#khU$q*x75g`0C-;iIHG&y(?0FRG>uQ6oS6VufIyspqty7EXoGWFfM z`eH^#M@BG|)YkM!!z1lS^c}G+ARL1%@3u@$2#I$;duN&rg4+?{k>*rJs`W)Aa+WZ> z*gCbf!n7(|g@i|{cLV?*R&`yWw{QjlY~MdJc&fJ@=<9lLh7qT-@ZVb-=l-kITRd4v z=77NOy`9EMs6}>DCtzTL`>O2%ZoTyu?qq}&`NsSWDhmfICllcam*G}Rc1mDK&%zN1 z=nW6Z>or!8836BVX>4&eF!xA(!DDN^CLix48UV^oT8y{6#(j9cbpC!Im}vscGQj;>!za?-(Kbf@4+(6~ z2ruY!mY!J$p_m_yLiyrMoav(gPGW?y2>5ixw$xYLlbKu4;DoShk1X~r+YyDf0W=C! zeo$Q>7ki6W0m#^v6a-XI5QxULG_*KS(4B1=xlTkr&Nt4z!CzB-_6)*7?7YFoO(PME z=kX~19c%E|K}Rv2r}}KwEz`ab#GyJ0JZaoXxNZ{raJpOcOs^}oMARd&dlVDC>#$0`=K$5mEdyU zOGz#Zdr&}S0qG>9^=#vBGr)(0G|?*>l;v*SwPmUHaJj~u+JfBAd;MKAM;T92@39cv zs|18=oY|g(XnyYr5_dlLc3nw8W2>LZ>z_GeaJQDDUUSXpt$)90<=E^-#YMYZxOe3O zuYCL4K;b!tGkA-zbSS;9@*#`%U;-+L*sX?T)D^_(A+kH7?BwMRUby_QuA>b$TEIaGnretiGO3s>1QL zR``l}Q|CGDxfZWtEkz>BwKrP!sfSB*!=Dl?`+9| z(M9+H5Atokcu$|H2uR^yrQ223;{1C79tQ}IdpVffgjO!w28{VGncz3pmcOSy zM7th4p*CR*K;U)VmI?rWwY&FHzmMRSif9tV9oB@~ zA;Wit;30qbrXHh<1B3tP8Qx@5EFB_f)q^wLihV$3#L2Ta)Ml++LqwB?!l91wc6@_w z!g}!5WoqUy@-#s6npnOBLEiAv8GrrK#BXiRngC&`?g@_ZG4LY*(tG8Y?_y8kdN8<& zA#+;w9#QHmEE2$-B$S`$H%|OosRvK}JrHo_M%@dXY;d5oNLXeXGJm$#?nnfEXv}-b zy0`7>lXV3;(|5x#Y!?}s7DxEK2yKUnOiTeRQGac|DZj)wn}qZ+GtW|qmEUt-c;SVh zp?S(ewy+!tXDLIKp+Ez*cC4)*bE^01sdd7J_DC%n;<&uGh996YXl=Y7)ZytWS@YM) zT?1{KFJal*S^c`2b!$;n$iTle}FhbUl zxzb-h1?pfjT%`dO-U z1zxGXrz-oiHflqSWFS)C^n1x?q$vn?Ko}ca(xP-(-?Ds2<^X0`O`2KInE#_Ptt8Ow zf*58`+6gFd9{W;XNu^d7gYc6If~HK#dCHWO$AFiYkC9Pl&}nok-uB>23yO6b060<*A2;IUDJUDWpASk=D5 z4*=xIFv^@Ydy~Zb=$Lb%eJ#n$M$B%)b~Fg66f-nK4F6P{K=OB;djXl<*vk9WOqXM% z(NUeXfbcoSH~pO}R{71djem!fUEP*omE{N%QZN6FfEHZRub@qq* zT>XU`l|^c4Y<0>a{ptLyvo*}ng19Uyn?6pHZv^qzy55{R&IL%BiGn=XU%%>wDg9Hl z5iNN}y3|+tiGXcogzKCSzrS!f0W^%Rk1q3!UgdmKb&}wRL^NG(M&l-oYl`FeGz1)2 zGqmQ8`LpJ)(R)-oz4ljN`R$fzt#_n*(@Z0D3A3mKy27-kY}H8sG%6r}(}u*arJ68% zwrAJxEh;)QkUH z9f4u8^b=v23LLenTf3iVdqMOE-%M!DP^R+9s6l@*{3Aat|FUMh0AMSxg42Bs zqTf^ZqF7`)0X?hh$yqe|*IuEG&(NB+SLwBP->+xczCdOo5&c)sUsE3KP`{#+q6TZYYW34|JHTL6 z6@Olxq3^$ZRq^{A%c4<=k)@0_H>?N2=^EoT6dCv*cF{xpIvvY zAgupW!=Dykg^3hUrHF!Z83O*%U))k};Q}F?F}^(hoUbuR1BJuM!hvkyRz>x@R(34_ zf_ZLH5_I^)U$;1xCdn$~-S5><&RXEI{MQ@E^)tOcP}pKrwbv}| zxv2>QsGA@IpDP?ctx_EqliZs*5lNN_(iR|nD;ul;03ZNKL_t*4TeawRFoY_}t3_*` zwP;%iq(P8YR--QNy7m{Z6cH^d&PkagofZ3OcSH9L)u?5mw{X0$OHrFe0X-DQ@%S*H zoi^gh?O))adJ$TbnRDSdBQ;l1fI~b5mdJo?grf3VT%ieRxrV$8Rq~7dqu%b#*Aw4t zP##hiwy3gVmT8Qj5`bIO52$_wu%KH1?K~6h|9w|~*C8lyVid*aY`w|W?8F!-r@q2lMP!vW4vCLIZWM%`*2dNfLZsIftz4vOsu0snDu1aQfW4jj0pbx6 z+ov-o*u@1WX7F}J?)~2=VjWEwIS&{&V++?P3*hwqeIv>|PY&y9u9`J2F@QTXQD8Sh z`gC~R@crr=F03fb1A;RlfS2<1`TPCrI{8;%4mahfLo(qumazr`_=^kWBB@15fD0EA zA+o3@(X$z(sVsD$kUZ;|M@4rdTfPb` zFV8i#-t0fm^1;GEEYQph9V^0I%BNDXQcvj+CVL_fUS92GF0CpZ zELM&cmYY4;;~4eY`kw;uW{hyNmn4?@N=E_k)`;>?8{73@f;lx|&8y|8tX?L!?mbIq zg0Q`eWx}$wF~aZ44du^j`)d~?$XGJL<-L=8hxJeul-0!0YB2n*-*eK!=LZ@ZfdP(F zUx<1I3F+vp&Hi}iw3&%FCcRIw<;Q|B_!d|ghrsKE@C;!%&r6r83LphTP8PP$wNBkC z@xdqH;AJXrjlkY(z?|p?C^6lp^3e^?a@V}#QDy`2{T(yX$SFVP^H1O*R{ z17@%wzw^GFRL=Jk1gXtrvUd-zAN*)sFz!YKU0+p9lL9`q*;CagD1eWptknDfgL!~) z31VvTN|rR3YN1%DCxjJq8d}=l9e6hvOT6cpnlbI=^196;f!#;ejkIU8*$K|?5AsUB zA^%I~v+P@UHUn%LhT)xFqF3rKEdY@7L(E(_tA3UXZs_dmY$c=x1pJ|FQ<>n&z zt^zq4ill#w5PXjj%1()rdN+07tSi?z>9k>Jj!{-?AfB?v*21M+E??BT={8Q%yHKi8`?{=0FmGKgOB_O@T@?EaQ2VfWuMYiuU(F7FE=9}hi2wmy#-dn^TAyvSL zld1`y6C?j>UgJC$rt)Ubo0Ds)_8MmXq;+cR_5L$x=0j|uL4$A%nl1&g6M3wvW=O-& zD*)sy2N6>* z{9$O!rM_u#4N?F<(G-8Mu(ZPHCSgev32;Q8QB}QELZF7nT%?7st`D$$x+Z3F1P`gr z!rv!V5sAqEstakY5ytdqU9N?-@VW`j2wVG8A-LP`#g%*2*Le{LZrakAKim6m-E)Sv z%@8~mSvY_Q$D^S?X%m}TU^L}=SXBTD;ych7p#mi6xq%|PGQlr(KP~hZPDhcQ*}}y> zh*IC*on-^%HnB2D1kD;6Q&(FDqtU1`PZ9?4&pqH%=qucUC||ZTv|gqE*3GvUyi9<< zoYXM+`l&e8709lRTQBo4Cw<{wwRheG2pi=a^Cvm*)5fZ-X&|uot{EEsG!049EM8TH zIR%jm_!GDh1>dX=!%NjLOW1N}e(Kz%B5#Jp{_L3sa7K*$8!umX%$T*u0#ca_{l(`a zIHlec=l`rHf!hfX1pS%rl6kfzoBFsv9kj zUhY}e1i+)_D2|>Fg5Wqkf8Cl+f_GG%rLy?HB#k8Nb9bKyGxfa^_8N8vf;Wk2+x40C z9b@fSR!~t0EitTi%Cf=IHf(usVQT`yC)IE7_A}>Mw(Gnd1N<6=vJ^szmMAI z20YeCYD*nuI753E@p8+1_8>waI8q`i!h>sc*T=ubJfog~Kh&u{9x_ zy~V~!IIV(p1hC}sw|=>c9bUf+Y61L*gHgM$^CA@7tUMB5 z>|f8xOi0tY%-?g3IfoqSzc+w;MPPqitwnco1)w$(x=*Qo7chXbCkWJt!QXi_sZv1o z748s$0X={eb<0k7@!N6PqSdS=MA{mz~ zm^3_0MB(d-{+P%-oZBS#o*K2;+I@&%xyp4bH%FF_i~Hld3E&0YK++9&CIRW@`)_YH z*Nq=hK4+0yP2u*7?tiPgnxhyFL5;W;^Y57B#sFzc(E=d##8eJy{p`$J$G~URm>Ocs zmx|aRTT{2hOVQFz_)r4M3P=MmykKg~dbhAi+C}7BfndwJ6(b$nZo925_7yK9f_jY1 z;&M&MRtX-qUhFpa$c5)ZOv0koG>?>Xa2w54FOMElr ziUqcMs5VL{*Qxwv!?U++M-g)>Aw6$ZJ_a}rGH|bF-YS3BUp!SrRJVVdX90?RU0O73 z6ANEmiPY9-pJ^vFLMi*-qcTzyxQxIQTbecm@l+?_MRC+bKr>2>r3Z3-x#JLUG9ak5 z+)xR|7YUX7z@vrX6(8i$`DN!u z!3bThQTj1h4Nyw_3L35^MSQo z`^OP8a*9fVp%#{Wlj+mLi2&vc+ecfb&il99Y#A>D1Rc?Hqi&+9C-F+La-}ck^>e9r zkx)Hc4g{;nrwVT0w)0Y9TxZx7M5L+vo`4AlcOgImzaU%uv`e`#dKmwNv;-$V} z?(6Ftvr1OAX)2!;Tk8<%0K4KCt}_DH&Z&~>yJBJ0yK~~Gd_IW0;e8(pun@zA0yt4b z?n1yL0C+4S->+%2{_}M9b}kIa>_KF%tqvDT_vr-@*o&3rcHvQ0zOQoyG9f-QdvcN_ z?cT?NCMq{dBpq647yF$bbE7e7F|L1?N+C}~ktt&EZ(8gqvdv)j&lr3)wlbf_1nte^ zlfppdnFs+{8%>fJ+d1TkB%}$P?HMCsgmkP8Y&)*SbwQStk?!{_l%{g3FU(reA}9Hr zi9cV9&ZVBc^F=!#y^Y9IHK|fn3JTy6QV#>q5R{^^(Mm0RSoli<8uY-RDycL?31WDU zh$kp0q~K&CF@&En%P+jYy;5XT@QM|?qe?GDq&KlNK!XQX^t?in<3%tM5|vu};$a5` zZ(@!=CZH)6?OO)$Kx1gNSXtvG{cc9Mjx0dXX0-zW8{BmxdCds6#A(8=^9q$mw3t># z<0k(+=zSug(=|a73_O_lzm^@Oera2VWe{o*RoouM8sZ0^L!ua(@eTG?19whBW1eW9 z((KrZwD`Uj5gzrQ)ipDNqgS$(U??8C!Yf3&R(9=-2J^x)92n@=qA0Bg=Ia<27Jk=z zo{Ig&#Ue66LD>!Uh1ruMKJ)9~Vetq7X(p6+{rhX`E;AoQ!gqLU^n3E{Bx8|m& z;aQ&*CIum#Zc!!zL%ZM0HT_nTF+n(^m%p|@}*fNWoe=sX2*lIEto2-$2*hM)ER zdX-lKnMs;c@lBvP_1kR$h7>$_2?XvCk>^^|lzD%z64eLnZb$h{pG%R->f0i=|Ew{= zb_}u^3;bO@_=z_Y=C~pnd8)D;3W6$&=4Ife{;mZ8=D66#zfo^?sjsw%f%gD`YrYA9 zDFE$4ku1y%!|;iW$@Hx&uRBX?hA;^4-T(p>E@zRAz5T%L1!yinfQ=d9n#waSg$(v` zn-HnTwOh#xW$w`6xxld0d!{#>!y0bHdjio1xhc7h;$U%Sv~UQDyyH_=m1T@fbQ%ax z0!xqj^U1%4Tk8f7h&aAzZo}M>|?Fe7uA3kLu+9VWuAu;<^4Bk$ z8(Jze7S+;KGa4=yz;y$|1J@|aUg+&yh-kJ(z(4rV##Dvn0{he_?i1YIKBdYHgjryr zsC$V5Xd?D}A-uo?tqDs>vsoe?r=sC+PVJ>h>4dO5MZuEh>8WH>0qp?xNb*kT5Mp_y zdFtH%x;i4}JAmYI4Q5h*Dh9!i5zLd-gq2ethIkAZcmZPA%}-iz`wU5~5s0*gtlPA1 zbFuaqB|fZ?7c0SY{e^u%U?UM3B13gvU8m=10JIbsUeX#e3CxV=i(nLAVU{>Aj7R2kp-AF7gUo6nkk}Q zSg|rRQZw@BY&olHffqD1l9|8K{FEf@lE+&ce?~!O0Wsb0LrdTO?Cn{ZF#LId;eA8( zL(gP;vuzk)j3U`_^@&ACWwq>vZpn0C>-q1gji?5bd3%|Y|BG3uBPY=q1wC9HqlzgB z?6nN`k=CZI9Kn**cGzYN4QX!?NBndU21i-8ZxYf@*4jUNFS-kf1NmW1rsj-lm4O4H zK&FDoC%Q+vOq?LT92wTtjgDQSz?!Q!1`4~x3|GfVZQ#<$HOQ4Qb0dg-{*gEDypl;4 zBmqWGpY#%tx$xkY(@Q3cw+rKI`82vdZBl+{3?7oTbk4U@gj}UPv5l94g}>*gCC!uz zy&&9&89vLd%eF^#QHum}Ei&He{U%94+I6C6oHoPB9x-(OtGdkf8d{RC&pSQ#^1kH< z#SkwFIaCzV8OqawW*1~RRXu3B0JSN$adfl>k%RTbg^%*n*r5QyB)EcIOJULZ$NOkjuP-qms>OmyP_$l_vm4xl2sn& zg(&isWf@iUC_$)3&SHQmnE-yZ<>bUmo2HU(4-B2kn5*QV4l}y};l|83ArN^@jp6#Y zp8Z6SK}}KHaDbP7EMn&l%jj7uSI`-}RwR#gc)o9j(&+cIlo1;Vl~=31G+|!gWw*5c)ORHsN9x~*`!n+b zOvbZ3r>NaVnF%^tW(pBq@@ zD`Dmu3-XZqbgK747q}D#m!t5f>sO54Col~ zBD(YIfds|x3&;-`_&N<`^C1~1*er;TRyX$!oJ5)E$*v8hr07!d!$)!8k`U{7}A`?kq6Ab|x!IAZv918$X*Fbr26f$j@ zP@bB#asGeZ{lzN*VGL_#Kz)9#0%Od)2N6BtM;W-oUf>P``1qVu*8RzspKP>tc+H7O z<^upbE99s{J$%|=u%LD76vD5@W%%`>QBu`KL-a`QfCKlt_@i# z&%O)9q1Y}oN1H=cZU8}v7*ui=>liSVV|m}cTW6maHZ>8R<%$)PNGjd=psEpr-$Q_9 zngos!J}jX<%33>}D0p9e*c!~F*9`<`yQEK&jx0y4*GgF4!2suH18G+jJCRIguhvm> zDq~G%=OsVR&*{Qc@CjuhI#+h?6$C+3B+=X2{4&GiM6{(r37AP|@-?Q)fy7g}x{!l1 zoR7f&^1)W6k4sIEm3x5XxmMizp`Wi__eGC_nDHcj2#ipisptw2jY=79jA6eXyp1W(`0zZ zk^`yK^+C^6>fRSjp&zlpW--Q3`1Pzc0)TB14F^hts@#Yy#3SPoK7a0Jb5)+GV1@3v zGYpxRDgkjlg~J4828j$w6S7GjRwRIwp(ROJ>&3 zbkE5P@#y%`bIS$g}S~TeI1iP1?ku28F%x|Bay;EF6R}oQ6o}s{~xbEs@OZ&pcyrYi6k4i^jTSXscud zF0W?9U1B=X_QLX^OFK>&$(yPhac>i0!vn-LT*V-MkK_0V49u;*>GGkKsuV*)ZOT4& zpoIE?t=xvjbmr=Fw>jI6D9{|g($cUYz|?!84Ti5o9PJXA;Li$Js`nIBwE&V;5C&=> zqlzb;p(hDb>{Jgb!3D8-41y1ARNgGt*y_TPobm*-Hw&UF{;o@!8{8KWd%i4x=@N2N z`TL1#5d?%@uWHk*792oT9gPsn#F|W9$A&BbolGE?0^qIs8FW2|Xl{zw-aa>#R+n5F zEgc15udN1U3%$z@Ck&?vSZ4>c*6Jv$_f)+kHXfs@Mn|IP-p83I*hI$z$jAOXNE!9J zf#F3Lex>QiAhiNmFDUKG(5f0x8*^lwN|qi{a?2A0fS`5RRBtcq>FKHa(tN2kQ!N62 z=za7q^cCplIJU3Poi?|!mn!Iy&M<8ph3MfL2=+4uyR1m7G5Dqjk2?oCcQs7sN&wgT z(NF1mT8Jc@vvoG3dq4j8W3#?){e{BZkj2_7HCbE#uJe=5ZB4CN3=H>rrE4-qZbZYf zKFT-cZ@l`clRrV^eO)uUzqidP$05rHxu$#t`EDCux{ z_~$6t?O7N#+lMAR(t=%swRpD~GROhn1z;afwr+*Hv@vNiUgnLWZppoF? zHJ@I-|E&E-)6j;CEZe2k^Fej~7>2T#Oz=|kl;&S4YQ#0!MWTaal7iVumnsLCn~w^u zEe(0q)N_Sth`GiGPw3yKOosaBFijG439hO1QyP%))vk#mb21=~2+1AQlHqhV68Tx8&QM=Fd?mZ&g^??@=}FD=b69K_K(M{n zZhLQ;8)Z!RAsJdBZ1)$DY+2%aG(2jIkVE9Hqq9@q|I(Gu0 zR!eqNBI?C3nTe;(HreQl7|n4ILx%zf%Lj_8kKY{xZ_*7p39ykmMSQ)S<7?NyzjU>Z zG-zpPJzrTd2HuN+YDvn!i77A|HWG$4kByEF?^~U!sIQ>_MNMt^OSjoKw%+Uf4Fl^J z>fmMlzFx{(?CCrOjM-9H9`a3|pND41{9Dj|N9TJP!S4y7(+o23N7V_eDwQIlam}e& z-94)+Hv-sQ5YE#3SLp4$5rDQJDWBtmZS?Pwd6BZS2tMHDFYeh{*|iA;cr^iZG0O@7 z+))6Yt~Sl53tRokMZFb08=GGIxOETcBUS5&s5BPPJYJTkaPELKBPDomYwew8UkIv53C^^x?c=VL1* zbAuKzy7>#+yF}z`g;KIk=|Tk5*^!kLK}~i>uk2F4z5+47_RqD>8zz?NfTma-{jLW% z0PO(6|IAOF_x$pK<%h={9m62!RRd6tK?2%J=K`vq)6EptuoR~Mijf_F;W-cZsBc-V zBbxrF3YXg9+V?d%R*>JS8y>$*|C=H4*cW;_e+oz%u61#0t5Bxo`vUk6&z!k%mvJM% zM1am*W9x1DJ$=z`3?RqS7}J7l$pnIzUu(b4Ka^uAcBR~fC_TbyJK)DAPASRVG{R@B2} zV$)^--q0Yi5r{gnl-<`_JB9)Z4JJv%%4jjmYyjFwNPa&yGj{dx$l9Zkf)4~_9y6=| z$9bmR$T7hAahVr+MlIbR57Qa6x<0jVSB8=TYF!(xePmo_jQamqt8`ddDwehBpL`8;8g%z(3I@7KG2!osQ`vy7LJk(>PpmGnD(8yWT%fv;+_wfAb_ zs-PwzoNKMz=f^a;^iiQ30Oa}Vbm$}-0`iRfqMt{uO&g=xS;q_!2G6*2bFh0i4RvFH z8~vH3o>@)5Ow(DDd65031u@6-4VYoFRFU_k_hmN(*_AN(N+fw1t+F>A~EmhGr%vj*_aIgR-z9WbY(dNfUWYW`7``yvKg zTDD{LUTlze7F2G%6Oy^WhsdPo-WiB8-vD2sbBUdQpX4x2w{M=(Tp3xYO@jbVR^>%C zBc7yI2m7G#%5m{f$CsILp$B}u(Y30p z*~D z(=$#(&{#xAglw!J%p{80oBXW+03ZNKL_t(mtfI25*O?{i{_YW}8z5Hzv$$@b; zI|o>m28!2+KuxYbcVTg$*op!_5P{(usJYAMDrkzhA($jULl58eaEJFKDjN@MGl1CS znMHlgTqTqvCGrYUz-N|-+{0l~TCZEo0cD{L%Gffbv^`J5-A!XlNw0T5h z+FAJ9Vr5v_Ttm2pGUCO-;ylfYSpU`f2eacchl;_1w`#cW)LZxk8~8L|pT9Ak8`^*d z>%Fo{K|P~WJb>y{rRY@Cxt6*Je6H!6j^=#suanJ&Uv%o&T-Dimqu$ynnUy(d4s%Mu|09dutca)}fRd#kWKP(92yoj4bQi6^c&r6ExE7K@$;E-HI_f{{PUXFw7h3)Gs@T$_+i1;}HuhE67a>W?py&wx6xSsd)qXXXh^sTAc zOh%)xGpUcl-JIkh>^ffrX0}Xitt4BPdJ7k_@XRvCmnu7;Xs=~h07(A^1Rb>PkP;tc z;-mr0gBS#FF!S*!Vi8>ZW05xsc%G+7C}T~zjcPJlcMR5qCrM*ZzLE1 zFhg!umLhb(9}PoX%2HNoe^;1jfet9A2*X2qjkFLn3{8wOPUo%8ojUiw)rWwxhzyV$ zGd$+3_1X0^3E*%|vOqMCMi32XVs9+`TnIGZGe`d4JAh)K^b2PGur>7?y5Z#NiDfZ< zoPmxW0Dzqk?X&6|b&DtsdNAte6WjwL_#@Q7Slt{DWki@)`&-LT%$=6VU-ajrFW#QGZZur1EC>O; zX2EJ$j5gJkgC>1%4R~2(MgGqxq`Be+Xpseea$aLH7RIH_TKJL1DG1ZQ{GerJsX=&~ z$l9B$BmQ0J1mL=eqc;P6EtbbfXfhCJH29cNi0+#}!SJxq^$5~cjihTNcObZNtlnWl z_4GdFgEx#Z1k9g99sR|wi!UU^5DeYq4_a-$1Y|F=bZ5)77U#3`-U<}{$|3}%hEluw zls#a;!e1CPpDCkR=qc<21d~P@Mjp|mU_mLUtl0=2C4j&F=DgW-!1{3(MMDnm*26KC z>+U6lztDy~-K>8B$e&fG;3cD{oc#M!Ud1<8l42dgZ;x>^i<^?+-C7i~#QPzb5tB9d z#KZA^0P&ju!KRA3`umzBnu@sK0Zooh$2z64?8-j=UW26))dbEbLxZV5q*B1?SQ;A! zN20a=hsNw0ME3qT6JCa*iOCySdj%{s$v1@TKgu%FWeqy(fCE4?B7XL@u{8Z%n$Ec`ioC3-u?`KlB0q_Ne^$)~t8xNCc2jA1uE8;d z*xg@jBY_Vr;p}R^lapM7v@!z*6ujeng8juGrc%a#6#Kh==sotOp3-qZygw7DPxyUp zFc9%L_j*k&l{tOI{^HMsMT32uI>p`lzS2=b!eDtbBG9DS$I>YOc|>-(Sen(`(9&M) zFCO6(Gl+JQOlsFT+xqV}Ams9LOy&?A8Sc=Ko9@2iwG2QljV+aNJKclb2inNiIKT;T zGu`V6OwG0t;f_Ffzn`J(hs%r3@wB|7<{-opZ*2@VsWcTwOh<0> zTyJ4jVF$3hi_R1lz`rTToJuGIZR#i)v*YAcoxPoH25>)NJkJ+CZawuB_CXXKIr54= zD}@zrZ$&}4J4bLo1aOeDDhAC60MCy{`N^OLkA^6IIJe2xj+N7p7OJ7eM7Va`==f`W z7KEyp0AbvOXu>7_cbd5%h(|KY&%N|e<&?3B7XpKhe{yWAGA?Gsu}JHQXpJx4yH>ul zHyLwYNO*y=nl2d|%`L+51J%COE;mjKbXGRRG2f-ip)_b~i2&+E00*kS*ZbC#$Yie* zvF}zV`zJ~Y+)?kBm$4?cA32Z^%GS#3I@dM@xHW5_y~3#W6!swmO|aC2PX{=-XAFYf zQ7t-P?)%zI@?;Fpp<>ZkYwrld@EBm;Jgmy|(AW52pfqcgd8uW&&(}5XwbN8-^$#QB zo|^TbP2K2(QMF1eG=^UlOW)CA)lwM5Ha^7XaHvXQB!b1LFW<20=1KjNHVMF7LjeER z+?fA$bq(Med7|AkSzqTcJ9U#jv5gQlH$BNE^JwZa)|( z>R6)#q%1#In}W+I0XV^uyw+M3+UV3$250DKlxpjh%Z4y;3?U5}Hg^v-4SkjE&8n@a z;Dep~tX&5DKu7+4S^m;l3X-|dd=VO>;Z1+k&*Qy+3S3)jH7iboM%~<8Z88Y4G1oZw z)6V`$H6fVGm3_=)vRBXAc$N!0a^ET4cZFmVj=4rhK58?E0q*2RgDKdpfnrX@1C1Kg zr=DGR?GsR{4J3X^z-(Wg_oBUl2sDpmM$a8v9y`gRJ;P-Xp#0JUn7Zx&U?zcZ7-rl3 z=Tg;+Sec^xgJ%}?{hSJsYL+6i3(IpXb${_LMqZw8n5)VlP#au1#w$SFjQEPT-PLAd zb|r)i8uPG?>G_`wY&T=?XZM)Bf0C@JH)G&`Ta|7327~6#=Ee<3jm94%%J}sSBNynP+{BY6 zXM%7I3*4(?Ff=R&LF#f18zR!3gd(=L5Xf`QRdcO$RvZ!>Smx+_W%ZmKYILn4(yvsf zl%~UIwfRLx(B#~;$xv9csRr0o%c0x@uA4i-IgD_D9=6HI5!%fmHv$_~Z#b^`BA66g z8T3P?m6Z##;WYp}K(YOUgqb4{(J-_FMI5aTXWLUBr5w8gayVp75ha_#imBN%yANbq?ax*-#0cGS7U$}p0^MjFPDuJ1hoxk)`W4!8l>R0~UGp+s<@2>dloFV%5Y zhoImGKu}XX4BiJ30rN{h!FQrKdL#^tqT`sani1;n(@19Iq3me(hssa@!M;%CwesIJ z`D|S$BH&Ij@a=xSu`3n~94{80HW{h zbd!j@dCJ{bI9<|q%}jA-uvI&ijit|nYEA}-bb8AU zU&lcN5PZTC?@bUqDj0uXto@e{f>BVlK3A`{f+@y^S9)g3C3y?XtAUyeD(UqaVg!7q z1-XB2>UB$ka7NmIWi=qqa_q!pUakH?=dL2OBP&KaRD!NEXDNgm%QjxR)zq#2;^u1x z@vXr0a?8{WDd@^{)?j$573Lra?^pj~QnN%i0K$J-8k0m<1?AQRUoHWp(Og4L_f6+L zb74sUdxF^aD{|vBfC_{^7sUT5d+b8O7;XV8f6q;8y*Jr&J9lC+2LfoKWqhv!4o+%J zpg^k_;m3Wri`%2rmSm&jROuBM`9mDT&VXjm^>+Q)ej0%Oo%;4^J^X@*{#h-XOB zh!`Qrx2?#Eki)wrlu;c&L54c5wOi|Wx{$)bC|2uH^87fEwH#ie4Ti0;*VU}AF)@~x zAi|33qBGeeI_KDk)HnWtTAOsA(@6HI>Q!vHA8y%+x zjB+G61|T-KHQk9|Gw>pp8<$s-^;7yucl z&MeV&ueqb?Y!KM1G+BPZ#1Rv_(;ew62w}%uHe3)>(cL&}U2&ur(Uy)5N_!#=J!%}3fk6bH8UK1vZW(^d$FRRX=BrP z4Dfbgd2d=iX2@MvwHcutrMWHWnSTWwBuHo)d;A{d=$O!kiz^c*92A_#%rE6RD5>JZ ztY&=b;Zx`RxFD^udIs^UI4V&s7M5)vF#Ru9Vnjt+-j)SZPK^+=4Whquie^{~(d+Sf zqouv&A^@3QmMWh=VfX~Mw^4-z8JJ?Nh)41bgDG{5Jd#$hutQvwjR?zwx5vQF!dmF& zc{m=BbFA{>+Q$F7+~9lm>QBR!oy}Lj`o$lv$Yy%?xc-PIT*jpmnJfgq1EA-Mr2#A3nl2N>DZZb)Og9R7 zXvR+^UilFF+RLZk5V7pBvI|M8Ypnylsl}`?P~3 zp&c)XL*+H)i!~-8-+^4fz~vq!?qdp%1EBAbd6?Y*OQ@ViVJV*yg#1#%(5O&gYC}ZE zv(Bgub_xspO%45pjYezJMMUt^(DG$*2TS8ESnTmAbfd#;>qI|fP9>5LMJs=K@2PuW zH1m{YipHIJS??K6hT7>IVG%x!w+kS+k$~P-uvB3qh<1}8ZT#^eA*#CC^DN3$ zR6^^OS}bCHvH1D4vD4m+I~EQ^lkXhG*D3$dUkL;g8mb!3*9j{x#T!owaLLCRI64^c z@rK~bVlb4N%E{Vq8F70c`a0xrwSr{SqZmMWN;2DyH0huXWi3pyWLO z{EYesSG6ynXvN$Kgnx}=LE=p&37o+K%azVt{P|njoHS<-V(%#>o(YJO#cqn<*F9rv zmeqyH#C6EhIYP2`)YZ)z{G#oPZ4=-xU=St0-c`u^(mYO$E7A>3zDnn^8!en*M4m1N z8pN5Fjn$2dS9LX?99sE4MX)x@c#3*f3BA{}aFK3HU#|h*Nx$UU*h3L_$wSLu8e^vP zhP_Yd!mJfJASZ=1>QNA1R1!N24gR5M@>A)Ldcpq|7Y6e8@)#{%5#l)COD*1E)DCN7 zG9+3V6k@BJw>a-teaU`?_68I`7jm=jnQMsgohe1#D}7xhduD@-`dlq}beDE!U2d+G z3qjzum|C6gNM8y9Q#4~UzW!P)Sk=*dxdqrkd|5axPj_3@wXDwCUvje?Mx(G$%f zHllgU1hcd|H7PGmbq7QNmH9Rm&*zTl3X(y@IuUYn8K8DQ4Kc8bH;5>$Rx>;MnQ^rP zY^Yku!VWI>1+f6gYwBv6MHa3=Fseo!SHVrZXZL)+`- z#z5lJK!Otum_G`J2MY67#T%8C?adc3!ft5sy4d@zGCMT*3s1Z&Vv@A_Nio2y1?2U( zQ{%>(liqOvNZZHOkjOuXl`NPHvcVFCA{L-4!hcoTq&viRWL0w5UcA4^6MD}C(2cXa ztQ)<2{LYo?F>I)fh^}tzsT|GVSkCaZ1qhIXC*qNSu+fltOp9VMG(|v$0HIT}kfZ0x z-Xa3(@pJp2sB_AvAmI>$JmkD$YVROA4G^-7{BE(l^)b2<{TN?etqihyTX&(5Dd zdU}DY;kxHzQ}+_U5A{WRt~{7)wy?ZUM88Co3PyOQVNAn^E{ex^--->lH-xJ_ucRrP z%g$xuceNue@~mm@s-KUHJ4!+pcJ*|1R+Us;ubJznr~8H}Q}!;z=;=IX!(g6eX)y@Z zC7JTY+4BBIW;~WHcZ`J5kEn9M70w~^pk_qIHWAH`6_oQuWLfbXq0(R=bF6x#N%y9; z4b3f`>GMQzR-!6#w)#Hf`xHglHJ{FiI}-3;onODbrl~NMAvpAVnO+y1P-t{c}25A zRmzEIPBJNb@s!~+zH3_FbQ%)w>v`TS#o)T;_T>jMQ=Re6CJCifi^_41EDLt4HC+o{ z&K6*CcjG}fqPJ9^5vSJaXx4)CI%4NncA2&LYjBu|od-!;z^(ihjgiwtK=j!kD2$T@o{eekd3f3GS^zgvaOIct_2)3gtrvu zWb1q7V+@sAJftd2jUfWyIi4h5vtDpS81lzo8Z+~Xn{$lOrb8DR(;knVblaD^5hZp}wG4+_vQZ;273_+DsetWY z5t*vmTNorKz0Ap}aC}+%#up%FoYdBgh_uRhcuisG;9;X&Iyn8+krfIk@Ls z?Cmctdw5st$sAO&#_`KS-td)jJ`-$02{3{En7aa^Iz56~US z(BD)lw6ZIGxL7#T0ADn@X1WXFb|0?2`Ee2HZm4OvBJRK}?^?dI$L4Ad^v)Wr9rF@#7Ui;xz;W008@Yny%KN9Ix zL)yVvAPeaDj$`H#;;ImwjG-%*UpZ(B(C*qrNqDj(8^V5Kaa+AK#ZfW&zv&K@1U1x5 zyG}g=sN_wCt^8x^QSDFl&m)39HP%<8DwgyP^iEYGVP;)saq0NdpU0a&=cNUsK%Z|l z+&RuALXz)PyI#B@()VAzVfC(I7^=kWcTz3yV<&4y;4lFBT20mJ^d^;IgSf#mlJQnJ$*hx_z*#K3raV*rK)jh(qdcj0AE*=!4pd~j z-|q1$=MhPtf+LJ^UJkcl>Y_{nH!;J5u?NnPJ_R0Rwx2ZC&Ui@2PB;|Y$s%7)%lpUN z?>gTy&IjNhN{7mSAHRQof;<+j{2Y*;0_3CAHMa!O0)Zz_!J^~hlTePh~h~i@CHv~;R;FMVlRLhR`5_3 zekLxqI9WO1g)XzUCaU(k=Qfg&PGH1g#Xi4?;AuSv0wY{(*^cpqP8P<+K(IX#j0d7O z*;)m9=>fdpVRz4`%V9GY3fs}f^8HiC&HPFyMieH_6Zj}zw=XSqgE zQ)V}2zDt!H`DiJtYA6n`#9ghg+S6|2&$ zuL)#3%Pp^p^PzE2y+3X{?#?N=zPQf{%=# zc4+=(Lu*U|4&l(@$zG2)Q+bl}T$NJ=0qubX|EKf0c4@)F#T@eG)5k|q28B2RlCKpc z1Hyq8(vW2`CLYyh001BWNklq)Dh}TkgXg5ZEa0)qDCnD{L za)cnN66Ir^Gb1`Nor(au^IY!^@Jhv&@Br;x5z6p5*LijOitR$A+d=TJ#l`3dUPki? zU;~%JJrz9sR#jCmb|Pqv}FVhE-?X=WY<60PMce=WdsSmf5&lj?v$ zET@8{TVrXzlkOS08Gtmdqu>E_l4-Ejq)LmBKhjQ=f`~+59HJQ(1i@16+UQ|qWk<{Z z3B&S+x`zAQ+R~O@q(H#>nug2c!cGBj!ZOwacw5QS&&so=vAuo)5KUm@LUBS1?do3y z3s)6+wd%>}+$C&`QLtC5LX6C4m>Y@~{~+5?GfidS(%jypMAhN-)r}ej63G(@E&@W4 zoIIj?n^JMV>adZnQVuf`X>8c8eOM z0I0F@1|lA=o-efFi`uc)Vun)?8Ka%2zUG?de>QeB>Or)S@u;@M89ZM$N z{>aMNKm?e;`-@4b`Mt<(ikFyHGwm7&jr6p5r`e6(Ve%drK_IpJPRWYt(F$I!o76 z%krFdr3(9E!n2E{na7YJ1I%@lk4s1;aSsLgN z5XzMxKfYaF;SnjjP`l8z1|?k}N2?kF<#G^wNVyB@p$}Q6A>ez3y_zx|2=~*jq6ofO z=oChot%o6Dui6Cl-pBW#xua>m2uvpt609ZpzJz`|9Jj^rN$F(;dMu_KX z%vuT-Rps84is>TGgS)y*WDAf zPY|3N*zks#V`oMdrM2lD$cJA!g#sXwq19}8PY`&ENPZcHvN%4pYHA80?U|MAr7=*j zpv*%t&h}E<@LV4Hc$TpICsvcXHQz6koC_sq4H_$SA1b8#n)29rrTDW2SB^}=r7VhTlbK+woG8Oze9n)#xlUPLQfD6O!%o&iZ||>2`FTb zmJsjOML7@lI2Hj0G7>yiOkm7|CLSS{ruw>R_c|CwSwRuH< zD0$Dx?+nu8lVg8GB(u3uE0WXlw8iLp!TAaqb?GGcxR&p zfx2l=MP7n(1^d9D%`8lsWQ9(^g1A;?*d6)s-S}bu;=3=lO_nBpF9<46e%4j14c4h& zL^nEl>Ed`#q=h})J@!DwzaJgE@KhkW)Wzkv!&PEm1|BddYZTe95(*0F3IOTPO73^@ z{nzfPN+y}0n^=ZvSJPG7Q4FG~MT1KUzD7sO#QVX(%MGI&oY_A=x!w=L9gTIckkDJF$sL{xLjbD zcnPmjuSEd%RTsGfF8@y{nlD8iZ~m2KnIBiu@`U1fXzhQQU{7nsVZC(`0rdB=)+PYp zMe=AgSpGGFysCs#eP8Fl0#tCu`j-E+EIjVGMD@ zJ&5|DAG!`b*w+QTQUKU33CU-(l)W67B_p|oapZkoz8;es z%q`OF!20U?-|9xQrE|rhB6IJ6AG^{#9B zu&KLo->Hh{?*+gHf^bQE@X^nj&6e`H)4fTzX zCsjoLI=1$=B5?KpLuig9qUVCx_Zw?xIQ5A7-7?~9EYmW^CCQyKioO zZ*RT;PqA#njAl!wfZ=~!#- zXu1IfE2maB%#RNPF7_!5&tZbm6xwH8=g?JgX+Hr;E6G{CY$~NKWQn@WH5zG*SsVnx zIF&VNk+H<1QDK0G2WXdQ+BpH;CL*d_(2QVg=}4b10#g{}k$97*Fa}1vOoH&nhVc=0 zUJubBh9`-Y?+lrszNY?}0^t^+nM9_r#nry?TSLs9gbag3_+bnhi*rX6Zlcs&&6v~3 zmi*dvJAzU8o9i~l(M#&b6_h;*XakB}D}Xg@VO1P0q1QxxVu-jom&`pJ+dSe!JE6;= z%Y`}lQc3G7Ulu`E!FKP{kvq>p@;s5Ux{2**iewi-wwM z?hqG^o3F=YDLY^Ni)`V}R9&hw*ETel4K{JeT0q;|81sB6;n5Px$J!0kai#v?_%&8` ztUNfB@MILcuLv}^iy@=)>Ene%!rJsm@D!3F8#`BRxM}umNhrSg*d zz|ivzV;Wq>VEonG(L7&7CMEll7se8Fr-U-OdAXc@*Z2KB5M`Lvjb!b#cbw`f3`=$Y zVFAmPM5^-m;zB~+Q+b#LyF@+S8gT+3$NGNa@;H)3-(L@y>5jA>M$~0p6AJ%He98Ht zQCYk}#77IZj*hglN3xAIjS7g2e8efbN)Kom$=zC5+k4U@VF*r98Y_Z)s&r&`-$gDX zG1pJ6+hS3P*4OkQh;k5;dEYTGqP@Yfi10@2FDTu8_2$(x z!c6WKL3~u72ZfRu56>jeduGb0DFtv{MC>+)Gw^a?*ghkfCBtfmStp+tP$1T3m1Vnb zHu}0}Fd^_`1)pbU`Ve6mMnHxwZ;0oqe6!;YLV4Eh;q(v(P6@J1)dl+5b!|yeVxE#` zK|*DPI2vyp`GuSI0I1 zcda^`=OH_uLPusO_qw0-=Xu8acgW#PE&jO!b4SzBRxluDaP83>f~tC3>pmC=odU z2@842ZtQ6S0MT#+8A?~TES}OfWs*m9nSeBHwMJ}g*&_(}R%_+jcGi5^7fU=Au{6Tmyi|=K)4%wj1UdNA7;fH7vYoTCpr;ebd2Y=t9qvMUzM8 zPv7dn(QG|}PZXu@D4XCtVVR$qRu_@H^lN2n)6qFrHAxiNJ6R@|td56y*&D`Vu9H&vJvA zlO@1^sdn9w`GAfxV!jzzH?TNvZ7aR9Bv zbFq0ml6x3k*j)9;c&3z@_t&<5F>TEK?OiRWv*p=IKY32pX0>X3EfA!jgtp3KRKN-& zd&oG+81tfplGTnF+UydcWQ}Gjb`Ewfi88O!SAxI}maO9I2aK4x#xt9&wKWjO^0n-Q0 zvQ?vht9l9*lCkXDWfMxulV>T6gT%WlmUF4UM7yU6qSYbujtUcLYHK=N7jQ-P z#PcpP2&;-L~SnfSN#6MDSr;1o@`@o2m>9sefoFl_2hwuBx<3>BwI&b1x$PB892N8OUhv<8~J1 z`ri?)vn=9mfOt!cjo06Go;*bL z!RSHs?fBlgs3(Md0(U@e-U?i9r7MfBShZMhS^Oi zN*u)qZ|8w9dY$(}39fNoaE);Q1A;PM{d~nlV5ReU21kV=y%f>&a%kW@Hgap@nCNrH z_X!1^j7d;tn4I~@`u0{b^l&kO(T(S*8mirQH{t8|w74`ZG3*L-5HNg@f#(oltr&PR z2E#$_1*W^4M`afE*Qjm+4@GC^x&V>FS3IX97H57_9WG0ZI#aYUd zl4E`G|CF=2Ko4Pz@YHA?-M)!7-K=F0rDLnyeN|WUZ^A%k8)F`i{qbgk* zu}PJVx=oeRZ`qB>LboxBz`=QBc{TXBvkje8wp&mL7`h9c?DiGgc}VAL)@T^=eFf=N zXL_c_VgZ^pESw6G!5jXNKTl{(*RTzb2?D#+Px=R2YhA(F0Bl!GnO(kq z`3asehoR7)V%3m4^hE|>CnHk1elr>=@d@Gsp&tilTWa!zLh}+!WbTtZ&t*>o7KY!oN%J%f7 zDy#K@Z;hJE7#ryOBgi&!{%W3R zI!r(^UDaKSb$*D}cI~`NX?>NGfV!fr>nc&|w@x>KxX@)?x2Mk(kv$Obu2>zQ65P;) z^Au3X7FTQqywTV)%Lf{iw{@O!u{&TFFuACn8rdBT>9yS(|>pn4^S>r4@YMB^9|X8A-(@GdISGfE-X%uolJ zb4rFbITekm)OfYHfRy(~&okurGx9*OrOJVf#N}jaSGYwjUV?HXSXdN;AT=c-Wce8b zUsFtWcVvGu6T%=I9Bzj%?en{T&4jBZlrf}T&9T#8j_h8d(LHbJd>-2H#dseVYHPaqy>1fd`(k!x!OQ2o6L(Pm%_uP~0s!Rk0z`6Y4C{E`r5a|~p+m&zpXh$)b z@aM9?W<##YcDX}Iw;tk~ISYrAp=US@4-d)!kJXxB!SJ*z; zSU1Cw!1Z@Qcpm}jg^(W5ze~H%srHom@CV}}lpaQBY_o4n(>-(3oEdYMmL)55^+k}6 z)f>{gh9TY{9NgDfH`CFe^0LVz38hIlr8+pEQ*?9xU48YmI|~~Z2Of~Ch2XAuvW>t6 zqi++zq4AzCBIf;bmIoal~E)S4i%L z;s}zK_7w*)&_o0*L4)sO7Jpz9&VvNK0XYB$J~SbT#VQ?Ce+2^{=!1WqcC=N3z`~(t zXuG%@9N+6Ghc0p9@r{o(U=MLilo>56s{QG&C z+V24Q9ikD=fIIHzf6LeJUig6p)k1(k_;9 z2O`qk%6GQjP&eI$gbM8`bUT&$3jp`{0e{%Kw}<_Aw+rE<4NlGGGHFl z>!0^oUV|V>E`gg0u^etgEAz;BA6m8{3Cs>tywuOq0m8B!Blc)0a$=)wAB1p&@%*Q! zjGp3PPwu(tSn(SUv6BpqQ6GeMY_|B~pdW}nM~gpL2=67tcc)Z6`+LNN90iek^AVsX z2*R6VxvzGvy-;(#Xg!Bq5!3y&U?bw~X3=_x_;0-@&8h01;w4Z=ow#e1h6>(JovJqD!({&q%TE=X`UZmH+l5T_39-Jg6w@i&e(LY0K&6@ z;O}vTRbMlIK>h^?Xr`v?Rz;gHIg}aJfPpuO=|l|h1y1pP#P)NA*tp+SG9a4o+tckI zR8JXwhWhUG;E~UaJ<5W;U5i+G5X>;`mK4)qqxWC&6Du?g!TwLcOiTHx7ji-7UfuW< zD=buHz=EAb)T#%4Q|Z6JJ>ktn_~w-SwTSO&REc-_hrOG-H{ZT@-pke0-gE&8%p}iK zIKv(+JO|l6RP5)==R_VC+VH7j&$|*ZISfxmG>f!&m+v&{#&;~SEGwo{t0x=<8wFf! z!&@qYHAE+HC>Q;R$ofk%u$wTyqf*W|r;Zsq5oCe@>Ot1Ui=;I|%1Wv6uulCsBs8d< zLO^(fGrY!2(p<_H9HU%6s4~X8#zC!I{0siv8hNvEOyjHidJ)P$ct8aIQP}8c*L@7m zBbJOx%ZCPrmTGZB*Aj!q2e1QzG~6HKzm)6LZoc!pui1*Wn9m&rf=$FSIbFSS$xg77 zm+QzrA!@5ArXhExHG-r=3GbrWql8Q>U6vpjk5Ok8=noWn;rTv4QOHnsaUHS`BCK*m zTE;5Kaa|qWLq_7*)^%Rma6TSxoUpL0iYsvO-Fq8!we%d&8=KF3w z)eLOl-5RPIG)pwlZY+yE4+w84h6y^W55iHv(h_HPI=M6AuhE*{)sL-rzFYOkqTrRp z@_c=svhUOxBY7SeQwIX?7V>FTj%J{N1WJwZU(t?XKF;YJ68inr+9)0(pGUbfh}CS> zH{3O9U4968{tRI|RBR{7|GXX!XMlx%rO10?76GA3`EH1x`NEz@;2ajYEVds+^Jde9 zsPQ-KibmUkaGOHP@;ThQ3CkB?U{~Mx&*j40BoAq)snrelIx@L}!bHyZ(Y!agx?a^y zD$P8HJbAu;%od-Rd!M%EIfB~lk}}<}ca7=#xVmG^Tp--mTK-q;71P5Q0`3!bglEr~ z5oNDCpCij265=DVEIs<{8p$J?tG?bz?UiJV$p?xfIO1!ts-tPT6*^78exK|sc_>?w zouYs?BEC}Gv*tR&0KY;u7ptGyWqkwfC<32p0YquxL^Mvpcbw%V zaj`_lEeXu{apyhVmc9Z6b|jy!*FuDAynr0a0uL3a!TIsTh!q~;cX9XD{rxVh(i{zj zK2iE@6zPP&N2JB^AufV*!fXI)L*y|2{d{xf1Z(X*anixE)@2itCOH>#xu?PR_hW)p zx!<~zp^N| z#rsP4?5}S+*bvOnszO4tivvs@Pr%=~q8?+79{OAaCBbwXz_XN~-x$w)6z}6)Q8v~8 z7zll+ury}}AxNOWgcwY!U3?;q*un}wFO!buvGmD$08~kSb||}4)f~=d5@hBQ;E)x_ zZ583t-unO|7vjj=-`=L{3lDfiQ-JK>z?%Im%D;(W3aAvgw!zIk`KH&6h~~wZaGd}B z*$R{c1C>_nlZi0XYfagefZ*kdlnV;aYuK+|EfJr_dlqLW0(*hZ2MnV59w=7ht51>@y_FRDa4KBP1tua$Ww&?S(OTTFc+AAD9ctn ztX{d5oz3^Mg`lCfVSYR*tnOGnBjn&ZWANE2RYfrv?M+vU;5du+3jH7|>r9mR_cF@T zSgz_8zsSF)V2uALQ8#~@K1;o1BKTr)mZN)MJDSfzfV~FS4xK$~)~rF7I|ww95HgIg zIrd#d(j-q0IXwW>RLFGfTDhaOcA)`$)snOb%YG`ABcb(<(%8CuA12ySp)f1k(!U|1 z^;2pZ-f|B%`C2&&Lu-E@Z^-kL=&i0YU(=w6WcStF*?cRq;MD2{4Gw3;M~4;;3oL)^ zA?>CzS*;$tzv}&p5yMBQq_0Ht1D&^v@k~GvB6_?y_*uOk2Jlq2aHCdjwZdZ=6gB?4 zxc#30Ji8;xE~4r`fM%(cPc#fzJ1v~xRt#`nDB&L!b-to~#SsR~vDzWlE{|>m-2oP) zPIDED7rJQBu2_UX>cyGg+}^yaF?f(=De=I2f(>WHie{Gnoh|SCKLYj-~>aSGV*EkUDDhQ&x&D=fPsq4fxs z$I`j{qI?Yi)yf9Btf;Ga3Njv=C`+6_sbW%>^O^u2tJ2D;vSN`5_Mi z%oYib{2+oK0m841F;5js)$lbgC)dd>0Od>r4VquvV6O9@Y!POh(9Y zikC>gl=+^ylZ(3X?!Gw)nEFc~r-d6`#6DT~$*6L_e6Ge(83I39!IRj^+tbHIa>9H__^$wLpUuHDUJ|vs_a-w;M-RjLs%Z{KubUE&Fqm4?_^MK_ z<4)G{&gJ`fOlKjR$26PO`ERUjkHn#f%ZhXHL;3r!ppKszGRv$D8a+<@ImF;jH1Jt{ zRpXX`YQ4u6n1tRHBXfyqsgS(_SiY;z#~#J6nTH@Dw?0LV(Fy?m=Y zL_K&S%tpb#XvN%7nb8DEfAE!TE;&~zxtK`QsmwEES>YKvI-jAcncVt3)qsWD2;s|E ziK3gdfs%pSP_Vn9cFTcEH~s>2Ff!gz$dS$GhFWWz5pc8~9I1_J^*KOcg`upBC28s> z1?1xg`!g5M+J4p=M>4i@9T@ySjW;XYCue=JN~-Or(0f!ni210W3x(yWxU1wmvOvm9 zcso`xMdPIT*NiSpu}3>d`n^?MO|#hI-m1f5iyvvBTK7SL3+Ci#+lkFSd2444Vk{(M4NGo)DH(Rn1Ue-EeW-eT(K27Xx!W3*T8BgAx@| z#AlWv1X3{8;3ydN#0J?gfdCE@wC^I&K{?MZNl2nv>=v(EY{4MJ=Bd?c>UgSP|r`91eC!m7sVMi;>mf2j}NOVMQju#t0ckMHyF5bz?U%z}Y? z<1rm|$#^g0dGGyLO%hSh;R-Tx)zmTSMRuK?odD@8Er3MvUfck}8YNip*{y6}d4ffI zOwvnUq@K&7HA|(Tvysdq-Lo}yHSLcfo?^hLEv%3};NWElwS=;9E8tB>dIk!fCL&+8 z{HNvN$@@-DdEh+~`A#EfVhl+W;nnJgj@Mi*z7oO3!uVvd{2e`+XHouXz)W-CoP6X+ zv!)jiN<&q{H7e;2C|H03n-cxWTVknqEWy_7U{zlMz^gh(D@@Ubva^Dflx2{vO|Pr( zs8`sHa!uZf*9=$WMmx`vd}+Yc6vO+{?dcm0VyV}gxP~iutfk-rV9I84nfqe7Yrd#E z9gsICdQ*$HP|(vS5YliZnTOeMX`w*S+B6jj0K7m$zZV!Z&rPkK`of1FepoVW;;=`7 z;Db1>BoD&80yum$en$1WYNyZxZ?^8iwE&brnxyJQBuKJgiH^sSB_nt6gbvB)wI61z z{IC^FvaR_(Fwovm)o_azYLIY@s`^43exRLbw>B~CiD;4<2^52&+_*!iMd4A#ODxen z*R$zo6Ae`jC#vUD*p`lhF;CRg)VM;9#*qQTKtpXqA&yM>DPn~TVx95egCK;R44Niu zZ6y$lh}UeVsuQ@C5SL9Y%IDPx7Y=#0zMmof=jPu2?<&j6E&#%bD8Ws|7Nc}q`fl~; zHsmc4uF#0d(}AD@0G=y~*E=6Ub}J#cJoXLiHF)KV|NHm2k&~`;0Hc>ad*IF;x1Bcp zxW@CG9MNgAF>xOQXc+ka>G!_wXxcttyi^FgBq#Ujp{coJ#aY0(S1uJ^7<*V;$3#dG z)hdH@@-R19MG+>y;2}7pabjb8MB)wa6M#=u)*1g?-WPQf2(4|XX}BetXdTM_U;z44 z@n$ZX+%)n7PcbR);wi(YeCK>Q0DD_&+X+PC95MGdfj`$GWYvGDa*su?o_YRn_PX+w z1o?k3##>cp%0B83`w!9%k!NUNOlkGo8#5ax<#M^1BT7fS);-j{i%OuX%BtS&5Bn>6 z1~wn3UX_YO#S6nrhO1;#bAe<{_ZpQw)^0Ow8(qlU_ty5TJ=L-uS5;nhCkqet3~j9G z9qKuz#7}(!nAmxkKkWI|-miOuAjBaV`gK`ycyd_D=&y#A4}1UH_SNTvHkWGe{<>KJ zKR9CMJXd9Sz4_0xhnH4g(ANFK_x+i!$MzUcUoz(yyb|U z&*~f)8aTLXV6C@qyBn^_ZowmFeV zT(Y63A;t!4_`0(2c zwyh`~{pSt+trfk48~-@vu!HVy?3g;YKif|&>pnPQefPIuIe6>nT`p=tk~!aXrB{6Z z-CLzdI5Xjwt~`9^83Gvox3j0?=jnCt_YG!xXO15=nP*Jc_bmk=Xc1!JD`)%?5ob-U z+pV&G+)pa|gZ_*E`Nb0>#c*9+#rDTfte!q|bZYFGGq#zL{_7WioI9$b?)dM!(r^5) zebp-qk9x$xOy2wYU&oY}3_EBr+x^dbKY#4y>8X+Pm5?}Rmoxs7!qjgKp+S(Btl+6a z@G`1-I?xLfemJq`DJgECQ5bO zyS-BP;HJIVjd$@Yl9liH#vjabc4Y5R@BS#z=Xw76;i=)DZyww{P0)@QRx;x4P5qmG z>Kp%i5gQJMnIn>z{QKyN(JFb<*L44E8r;;-pY1=&7+gNKa=c1F?E0Sddj*`ElcJI* zYlhWmmz=-f`0X`-(7o-*?X>&ies{xQTg~Rd-b)b84|SvJ?k|N>t(eOCP3tH32YqK4 z-&?W6$Q^WHmv7p?nHYNE>3WSMBM-CBv&BjpjSC$&@qKcE)Sjt!(&zT3!!%z`4^&Pi z!RBf~_^bQx$nU)ufo#wW;$q5hTo^N+|E@^5yUHgabfNLx#q`d6!1QuJ54AT8-V{#&D#g^ zn@okE-3o}hsJJ4)zgPb4gkj|)rlk0_0}xVtmp0#iRr$eh*;(&`>kI z(2aKsJ$lC?VoQBhy#rpUmzni&A+oLdCksG|NOo5b0s$hfah+Br#|rhjTw0YB=X2cB z?aP0KKu1w%uUEE#5}F0=*$mKJyvC&4(<&3HY^-iPH@pXrXapYNJkkjw?sSj>CW_3ATX|>s^NkH9XpC0 z8=*{4?XDtlEfaoj0Cp&TP1hAdI|If1Bi_)pwtiN+2~#SuZAZe%3d!IwH&Y1fRpAH0 zz|yJXcHgLQ7O;FW0R_V0YYtMQmK%?BLsSCAepF|Zk>d!x|BDZH`FTt4<&kV1o%-)_ zUTVou`JV<#22KQmRXUzj<{5_Jo7yGK2H~?i<+DWdg^{HQ*j!&ze?$EDH@7t{0Hl$X z)s91+-k;D4-10aLKa#5 zW1yV#Gb^c+U>#Z^omVt2$cpTS0;`o|te^8wpFDVez?mz?RE)di(1zpGelV#wyLs3C z?9fk>nEYf^#i);T4bq?8G_Yx>9OvpaI%h*)euYb)#G0+9RJq1@2$ zp3LT70#dRfRq+B51w8{jM+i!)+%JE4S_F!&syIhc&qHAMWqU6&Ozf4~fdNaM# z27`e)Wy$gvDiRg3Z3laXHt&+P+1*PLWq+?oRD3^}8{D=(*MCUDB$f>?8LsP_`|RCA z-8(afwYrh1OjZ8JH@+hRXT$86-fZuogw!*lbi_XiD6?T;!*2+&XJqLp$7={Us2s@l z?L}z1tnjd5$zdN7Q7*^1>fWL5!+cCM4=Ww6K6uqldwsdSpLpc8DvVGM8Rf}xr!MOr z-277pJ8ER<=;s-jdNMr+s|uyEr1I|`c`hqizxr~0I|(b=QYsT(;)fEyWZh6WG(HHk zlK_d5CfS_yk{x}yz8Tiqu?f%rzSJ*sgy)dM(!t!|ECaaNqKqu{OP9s3-J9**n>nnm zEE%o^BkarcDL^q%=9PWwd;UiK{fx~_2!ddusvOG`V=oEhxit1Z0{K*}0wr_EQpp=FsYLQEcgtBndL zfd)Jrv=E8-k66C$ST+JPh^Vw!?yJ@hGEggw1`RHbiz`j-P1h1Yb#WY7x+{G+S=r8N zv5omFFy1x@+zG;cs=^$q%{`%%+x+~zNKl5JfB5;|E?l@UN}13(lI^jo)*g9lh&d$p;$4h2W77 zr|dZ&MwQpV+D-q1XFq!gtXN2xB%HLzCGPv{yT60yKYtW*VHQ$e37q(oOJGFl80a3{ z08f8%9}EQpP?oHK6L-G^%2UI@vV|w!zZH5jn_*bVC^&h~%iQbrXM5ne&mMuz1D!Ck zyas-=`$g6_2^h-t%k!T}QX78~R#dba@^Btnv78 zOnGg%X|U70vEtAEhW<7jU0!2<)^Oaw=!&|qXJ}K|Ys;TZboH%+Q5ALJVbe~^4lfKWYNRhEpBU+s4OhSFrY*)-4@ zzVP{@qxv#Eep#}@9x-#?rm@2(Zqx<#zJFb_LoUpCzL$U_cAB?#;;1P-9lh%kPkwaw zBrBHGe0ThA=YF-#$VqnX=5NP6{qgTB5s8^Coxabt%STt#dYcBisvdslw^a!*73ymx zykwXQv)<&Inf<$NcgWu|LEk-q<{W0wO?08K;vTroEfXYT7YI0ClE$@I-GBh_g=pYY z%`S73o&&73DAs#hjr55raJor0fJXq(G?u|EuoIALCplgN*D>MjD*GAMOO8-qUi=^B& zAoo23#{Ihig;^Q&fK))N-#7ZdUL+_+AB@p|&;R3o-niFtzpGB~AN}`_|NrPc^}XHH zwB>Vc`LF16Mr-;1@1KiaQUBKbYwLfxm&(6l@oPu#p~WOX!cd>v_&rfDU=YgxmXic& z_8ou(C@`eHKW0e+Lg?`$3r59O^5HMav-y3l0Q*l_iNX3c_s0N*J;N`-KyTSQ2uOW46lQ zOfWDr2O%?)XqYcBp@zbX&N|GR83Cfds~12>6&X4{WE>4zs0JB*n=f3 zuPepY7=BR?73uaBX8_Rt!BB8s49$tNbOmJth#3jMmCSY}674jU$u60-?JNh($$RMc zM#K+)6qR(cK$rnElN8wFlV6P_#5F2-Y4~ zoF(ek=Z@wZG;6K|`Ifj6-qhNps-Vdh?d35+)O95Z&JD%BIHP8U>!209f=FG$c7_7K zy#DgGpfYoz2zY?BHa_GztA^m62y(B=Uh|dt+Yn^yg1Ccu@OdDVAhb_vVJ{-u;!S}3 zSq$UI1E^e=p&~cz_VMG#JCb#C`|<-oynT?QYtUwvC|E6yY7!1N7?W^u3=aI~SE}?_ zBf4BcK0oIxoUa2A{-~SDeD33!h%PQc)d-)(&z37DFrPw5ISB3F#Nc=Ua|RM#Qml-M z@{%+61Hzj6sx5mi7iom_6JyQikl@+Yif(LP@Wt;8F*nx(d^Z5zT{9>@%KPr2OuA&Y~FloD>O1w%I$OSogYJ`trs?8vFrjf>Om>3t300h(VJcd$0~ zZ@T=$Z(qM|?Z&SY1G!#*FgIZ0{nhn{MWGEjn}a*vxDb+lv|qaJ=MIVvgSkHV{hL=p z!b?D41GwhUNHo%y>4pd2zTT}VEDTp35~;m)-}3M~s$kZ1W`g+#M@`g_b8!E^uhoMQ z_{N8e4~ih|n+7`IsgLi0Y?uMv3tn)5ORIv_?aSd`E1!3J!xFy?&Yiu;egDg~AHc`| zdlLqOeke^;z}fpn4XG9DK8BC}_fHti^+Rd09M0M|asvIZ@hkX8^IzP)E9IBLS^GL( zll#p7AA8>cCPkI)f6l$tJqZQ`CXrFXOivG4T@#3kIlJJlt_qm5sE7$LuNX0}k-?nS zoFnFl!c2D$h$MlT?in%@I@CSq|D9W1!GnXv^2t#U)`0Rk+}VQGA0d=ets*oWm=&i z*a=S9b(-D3Ve=1meJE>2*+cYD<(U5clH*i= za-;oTnGpT`zi*7d6JOq8_ctW>*IPoZYi_Xj(O;j-+F8~XMV-oEbpJiyP7+*)fEER( zlzPdJEvz#EKB~{N{1^;Do>6yM#d|KQ9!Vo z6$+B#Wy>Rlfanc0Gpf&hG=PWXASt>DMB;5fKou`fu`L6D?v63fi_nz4Ch>tKwJU2r z!+$5ez*h|cWtze8Rz@8V%PwQg60P;Y+GtC|lh2DSkV4hhB+aFMHCY5YQz$;E*g`-n z#I{iqz6_#&fe&@$SBtu~gKAtH8&4ZoJkAy}V~N;tz|;>=McS=t>KE+~N{a)DxEI(l z?%R#ub`7)z?p6Wy-m{<2nPpr!5ubi~f?k}rU25hb_la+<@C$C2i85R=)V_HFebY^N z0TJ}WO!{WY7=OFw+u=EZz)Zz>r@&S1ljGrm#nW#{M-{i4M9nS=)HG#ij&DLASzB|l za#Zg`anpG|`8#_d(|~EPLB3psO9byNWOO9{##i0-zpHLd-C%OuTNv;@Au)@XN?Ii+ z6T|mFP}Wi4N4Q#~w7&>$No}=*T3)cg z4mc7ZdILfNHnuiFm%MIJnA_dHSkmH~S3^@v19UGafo}Ol_63p`ZuO?`p>b)D8+g zyY`3v-3QwsRoa&;-h=whtDv;7Hw-EnYQJCF$KSsW@y$O#NnvlO>b0{CcBQ?)zd=xy;BK{ z8GJAl=5A;Ae|gcvwtpn}-F1ik?Em}QH?^&^+jrT1ybYSA$#FKcHrn&vZQ%Yk7?$=% z`J@zwTXtl-3Hq2a%>6Oi#qqR6M>wsG#Q*_@{s!~ z!P3%1tqu4u*zcBCm#tsAl873cO4nc4@p%>qGPJ^FN`adSX8tPZ0S`;>&QOR;TS}5Q z`#ww-YEIY-l=;>tr3-|?Fide2K3m=aX6B0(h_`LDDJrU;D?!0(#cDDmrjO1DAMZL^Dkw40O+ zt^FxUlZ^av({_S!DPtD~@>3=dnc!vel*EPvJ(3`iSs=zgFs zzk7)SKX_N*nhfLyz31~M2?I$KNP@s74+8ezGM>r3us^l@4A`IY-a9I27i$40$M%_Q zlXpbMI$1EtyYoimag#Bb`(2aXwQGLyb9;r4?hJ%2LCCptP}!h$b@AwJ1Qf3bjdi<{}9?K*4OEUmuIto(O>Z=={LhzKz#+jgjGL z7xqHMu0r@)guOhWJogBJj-yaE(0PwsazN98j1XY76)2nCl?*(lcrt)`7LfK*#GiV0 zBLeY*la&zUb@QAa#A21?OaW`loXGGjQh0At#Zt|rn<3A<{$=K)KQ2d=J8Q; z6{uo1=?^*Jup&5E_@LsmCvbTQBr=W3DPm;>tiF}%v2PEc5q=;>*N2B%_`1?pGV#+L zEy6_bh#5s>u0|@#ev;QJbqAc08X;&LsDm^d3>qF*#0UM{OEea*J(n0I_?_;HkY$Cj zjwYbF+Vn6+X{ zPT@6x*cK`YiRhAj6YIG?e?y|_6a-a_phdLsb6a^0z?I0nzOi)OHU8KgiPv1LKy9A^ zbNSB#=7Sl)W#Id)9hdm+7UT;rs}%v4`>3s0Lu581W-7A@d9fv74DLkL*#H0_07*na zR9?sm+R~}?9DyBL!IhMnELCb`{Inx?(b@trPG(}I9sMyArx^HhrRc^`@sHl+ma8>J z`ivVozGuEw5Q6(Yv$LOgBWgt-ZA>>W?Cb~>p1#$rhlmYDb93{8&Ye4pJ?2HJInGzpSEUG^rdT(=ndbQ=i! zR2*fu%R1nz74u>B#-;W+2MrbKwZO5zg(dNCA+dQ46m>3xBS)TWw}1P?$M9XE7B;lR z?fUFbJ6a7UShV_6h^+n6TOa0khvWWmzTLiZ{SuhJJuFSuBz88n>#hQL?DIKxzAVh|21kuN zW$BVc?0!&UD5l@_12;?ea0;&=#aPhVX{JyKtuj2o@K8xe54t$_G2 zQhZh}K&K4jpBb6)-d#`8L z{`$CGyovIEv&m%Z1*qPiO>OHTKiJ6ztn#}Tw0Z%oAISdnch?5B=}emqpxOgdzbcxo zaLP6Kl~S*2+F?t!!YT=#zTF1>w32Ff`{n(AUU`*okfe+xIc%lZR(K`I^M3l-O{b-|YYY&11^~;-QbPZwcs}D_oPAe!z$+j|4byr-*IUHAH6-aA9Rx zSU6m^$-+H1KUW^QB0{>!8nMenrC>*6I4+_HzBYmH(TNtGi9M`;Xinh}QH~X>j8r-$ zu*lI;oyrGQ#42zjuzFpDh~&Mii$|xTLQ!KD@jNeRj7JVdfRmDxnm(%MDC;fj^R28M z6sskIMp(N3^TK4NV6ry!5o>2S3vU`At_&P+O~(;l_65;=7^wsNjv+P5fLT7YZ0H9T zg3so1WPOA1hUL4mNvIPH^CAscs+0g4)mk7kh>iNt_t#vscF{=3(Z?e54}p^0zqMCy za$aDxUsfefUb0KZXQtkidv#g)%w=W7vLT7kfMp_1@i zStM9*SMA(@z#moi^n7`x36g`_%nU@>ROoJ0GL(gfY#ipyT%2o3@&67l9 zAOLEopL>Z$*G2yVA`*zsw06bwwYB4wgQqgVY#)NXbp4{<$+VKBcU@Hn?z7x07Va*p zt{QZ6c}e+Wmg@&Rz-DD~q1qR4i#0~>2eOLMHjs_QYcC^)Udf!)CBoNjzpg|?yg+yH zZK^0FWGH@s*1rwZ`)`tAD6Og1jRue2H?Vk@A)R>Gxf!JMgAsJaNOu(G7` zl~^J&*${v4iIWj?MB09t^Ik*kK?>o| zjA%7s{M(Tg_9_$<*s3k7s{0l6+X;}4fq;6WvPb2QG#h(f`UU}b`bjivZHYJ%iCc4n z`SV1`RmRPXo0+8nUaBY!KjD9mpNB zQ+$>D4|(1>a3BKRUs*cri!6LaY)^jh)nM%dAf$AllhDP>eHFU8HD7cmoqsDT{aL6a zbdT(}xG}Q7Av`O{e9@q+IE6Q;+J(Z=jBtY$%vl@h3l3bY5Y|%)ZuJ-K9VV8$MCmeI z7Phzp%QtcDH>3;L*&icC!UF{`4UbZbGfY;Zfo0m;NQ^$ z4VzcJ*0XE>gE}5-Ng{SehDl(Cw+YGLvrTBbfPnf#5Uvh)3;$rB{k4(ZQ1d~^xF#>z z^w59-|%JNu5j=oWN zf+8NFl`aH=KLwnC_=?J+_F#jiT4%Hi0iKNrOGJg+&IR%46h@@Bpo!`D03_V#lDj^jRS}c=&X>}c3M3K=w{&x> zX}w*1T;;nwj;$JwgssGoFv@%zP+BTyT50DKUo1_kk)q1T3fG2;Le&cz7Ubn(a0()9 zAi$#BK+D`g-T$!V^QE5`cIwpWI)y4O>gVnA{hGS&6rhWN2ptYypK&rt2}BL?rwU0c z<&181ldt4Cc@vS{HxTpyv6SiPC0f%^bD#p8f~2nX`#-WKG7JMS!w@~>TX9&Q&D_8Y z36@+i*Z44MuTsvv1@quCHw;0Qvc7eZOW=Z|&$)r9gukpZBYW z(Z=XR@ktcu93xwsGI{pI-_p&YGX;qvLFeLl?db;94#N3tw>4>~od~FQ5NK`3%D0^l z8Y1FzE*5L6nzuH;)~Qpzc!_=$?jUGpuc;|^9uW=SlHPK<_`}-IX03tPAfK+Q=i#+kll-({m z#6OlG8jvw$kgt$Lh^Gv%FA5+`A5>iVtrrtm)It$zysV>8nnaK2P-C8Q(_eXfQ8mx6DtdvV5)bLwT}!%tx*@(nyhsyd-0cl}qMsHS!q7*O zo8hvs_5Jp2o}yDUVpk%w${$OuwV`V!BJ*aYvCY>SsaaQ3t}}SEOLXtBUc)>g%%)hG zF-8QVBI5a~wf>yQ-AxrZb4`npb?NH%ps~JYl&f&6Mm^7`f@SAT5gzP|Ou3qaa}Arm z?C{CN^p)>KBKv*0;>*&4-26Kg!r%P>Q`WFL0DAyqj_c4vGM-w*PzL|Xz@K!~YltNx z7cu>mCUfm;XRaI3ckFV!hRHLJdyswqAsBxifHX!UJI3mPMrPvIaB-hD2JnWY}c*$t?$IP&;K9qfymmg;FD#q z3*Tb^B3i+ty81;&vDW($!2|vz9uw~}#NohryH5bOuswE<6VARa(05l9R;(9@Avx|$ zk>1{p+OF%_bF>u@h^&Z|LLN*aq8GHIiv+INSkm}#X;aa$E^%+iQa`94y z`W{~`S_Zt`TyzYW%mJ>Ur~FEfNckI)@@IV1ho=gZ zH5pG%5oV6q@%RCOSZ<)f7F5P%*4;K`HoYi_8`RhZ3@r4e@cnDjsMj-P90uK~vaIrH z>!F=e0-F?Z8=HU?9fV{-QjXCi_EC<;6|Tzy^%Q0FEq)f<(o7(EzHoyT>zn;Wj_^^% za!V=IAOUYz)AjYu&gRMD`AJMQKCIb#@*(ae*W+7*NTyrPK`Y%iok>>@?=yU@1l-Yh z^h!YJoTTJse!@V`Gt)VFAp!PRq^_~H77aC%4Zv~*O3wY@G^d}+)wu^U^EZY~t_D3i zR2sUaU6{#oKXEz&-s>-PzF%M4Cz(cB7rf*zz{KLMq@u@k2GxfZU*W^3#Y)Z?*wHm4 zO6uYz`jU8wBJx;)Tx-XD*00Wa!X2u_w{lz37(3b}IuzKwuCi=+)PMFwyo*8YO~lc5 z|GkFD@zzHdY?an3He0Thfs>8HbE}G~=F7IMIs0T{DkOjpr0VT0Xlo8+rTZXL4?p?6 zXzijy9POOuIOYQX93@~?3_EAYyySm2BH~q!8qI9h2a9v(`ju~QeN}g)Au|XN);HBP zRToth-GIznD$A;VYT+V2wg89ZVD6a$b#H&q8Y1EYzQVYspVH9T%2};R&du$UyO;Ps zYSb$Yn<`ib)mV&sgMrTS+Zb~qCU z7+5$gUuTk;?{e}20y*viOz-*$n`k0>;pUe3!5=MoX{=BZCXPPC(vr5dZ9VW?dq5~? z4}N_8rpph$$MVA#H%2EIqC;7s*dBf?JaWzIMrJc7+;f;!(vBqTd$S*+x}qcRTCBf_ zc_e^p-neOFb(gMP#v)-3BPSJbz66LKMT7<^*Ljh&JISXG*s){Xl3vDSZYS3~8}2pi ziC7{gD2z6L4ikih703e&ivssncWbquKoaDpctBgoa8~0cwlY@6xh!rPYn1{J8z%Xl z6&qJ{ZA-V^ZP>iy2Z(~?NoNYg?qvld3^y*ns~l@}Sj~!u%jbN}0V^2f(iMQ_t#H|} zc^$@$aey#PMEx9g9svzOW8CwB`MYRo-JFRy(R$`)leLd9px7K)B#Kx+G4sKQsFCpR zvbGfjpbMF6LGh}N^nt91?YJbT&lO)<`}z9F{;w{&|Aii%d(OZQm%csqlkZ=;?vPQZ z4)7-hv0`vQUCfLx_#SFLd?g3yd@*X319|+6&i69n$G+6GH>gHtGOFz=iW1Wh$GJ8$ zta9!`)IWjt`f64d3;iR^=3K)dN^W=f6GeNcC2Gz`RzoUF!>8H{X^4!|8u}8T1{apL z8`w529_?n_Jw&V!0Y4KPAfIv*Id+iK3cc0nU zbjjOpMqNXlDA^v%z)$)Ln38o9FHsk1-Z0;zvZ1a&qY+Yu=*QeMFs1GL&W$wF_ELy?gE8q%e3vISe0Ax3h{v35a|nPo`b;8R+bL6ChpQ?Q8cLA zz^AT%{cJdM+||&nz*45SwQW7{n|na`P4~>71qTd0e&2$et`{=k%#Ic=;`7MB?LMw{ z@-&?%vCC_fh8+x8TdzcRViNz#fC4Bb1@pVP-M-s^8^qK3OKtRW3eY6O#_|WP_yR-U zw${|e;sq)eI>2-^ka{P4xSHn9_+TaoCqP?;AT+V>$*b1X9UAiy^9;1#}4w4vqz zLM+svS24L(aWJnj?`S~i0|vhL16g}qQ3^%OQJ%QYz^6-|tv+PIAv&-3PZO~1-{qo< z0USVtKOk_vEId$QuE1zzADKrxJDtx$gkA*vpj@BrkF2eUYk0W^K;cBj61B%Ms@`B| znXiT{3j)PTthfv+{G0VNj7JV7L*12z5+ZnEXipDfDQe4zJdzN^OVrx0NVDF`j3bHR zR+)EY%(7g_9IO>itRw(jaK|Iy_lC@7t@N&X)5hxZtcR^f$#HLGpr^y7!z?7rLR53` zCMFbaR6D|>wxRZP5gt)mUF$CjYuD9QXoH84YgQ|*IaC^cQUY;AJRAXy`2Du~FgMhm zt^jt~ykhIAyY9Mc+mgoU9xlTvtoUi)N7nY=y2wtP;Ry)5DyKQ`e(NFK7(0-eCNRN0 zexgv;5lX=%MtsG;Cr|U!+S&&xC`B@hDoU$f$&RIapusAGCZLr1P%5R7)sdahfvXho z^}e-(JWq&fJg|B*1r&4`m-G&c} zDvBlnLzx1#z<>87k%6f8t>3il)z6l`_Q<*8uZPY#U4QdXJ#XNJaYT)t*$wc19%K-eT$D!$i8>GBI922Z>80P z#Iyqv4o1T7+2I`oVG>;%9i|)}i>~viQJJFz4O3N8^{ISD&ci!5iepD1Z;K!g`2vOsV*%Y*5aWXcrp-dWW=t5 z3~EP>Bx>&gP|GSyDlG~~iVU$tY!ZXJPO&aW#UHx_yD3nw5m1p<*w+tatsNNS)xf;8 zqaB?1q&fj-cR*5#`Spwo8_~f_fN6bBAn(RO-3M)HpEnz$A_iqDvqEW><^mQ;ks+iH zB+*=7U!T7bH(rUzrgNstm14_i`&s;XwK^`NGSi0_4Y!twS=+U%p8xvJVL2X_WnZDEJk`5ER&LnH(M;#t*^}xTQ2R65Du#54rgAe^%*Dk&9Cqri-<6G?+XD{2mk3uDe!tdDUd`(?<2+&z# z3j~yz>u2&K4G~d77@ec|>Oonex!u1pasn7$1&&is#yv{wz&w}SDh03;12%0=Z=TnQ zI_2sdEwXqED@!ZeP2_DBAFxyJF1?<*iPcXfptXB*5`Gg;FtM%|)6qx7~=nA#%I}usSDM@L6kq z^CV=w&X#O{#s?&Wq?&!~FTsvY}Q%-Sg;7-^jp?;nHwB6xFKKA`KGF ze(~UyIV#c^*hn<^N?vZGO1UIBB(4#{OX^G3lY(1W6XRTkZD~lhU~Qs zwX+a$yULQv3w-}ak>ht9%r}OD4A>~bddd+$KwZ-Dm|{*22t%`ecw%n>R^X;pO?EUU zjG@l?sZP~x`EC1yF_kW`K!QcLL14`T9CT#NG3cfr60s!V6a^eL*tigM9OsMjqH@b8 zl?t^|aA-R1&Klm^TM$T#Hbf^P;y%PAaLli)CmvEEy3RX(0ss*Q1wiG2>waytb0j9) zszX`jUz=>kyjxI7Mc7jl7j9NG9-R#ct>MzJCm-s4mjt;7XrensWKFi&HHU+f#IqIw z^P?X|=Y_|IdvlVeFhGma>hn;s$GxpxQ#(;Pcublz=Zz>Ev9fk`?NAj|)7bC}9YvTV z(T%|3&Aky^b*E5$vT$uLXw3@3S+OckUje9OtPWQqZ%HQGa1z?SONy|J>X0JyEv{Gw&sK zT(09js5AON1Rlc~Jf|Z?$@7j>R|2@V`1~>3CyCm99Y%o*uLHutfJzpzPbyS}NHhk) zd5@5ewAB)aMJaKQpbl2cLNn_FI}-sDjmgH@B?TpYjBBQAWv%(z1*Po0i!a)lSd9#5 zwayTv&uA%yx|Mt;`kUdIxV`-nl16;>F-_gr;}9vzmglFD{Z_>LxsE@0Yq zA5o6VaX{?@q!zF;!v$f2CS8iVtjQ z<)!UoX=8LEC=l=Vo`h73jA3B-)=J+a?#znk3gT$>>eYE$a<LxDC<&GOMOQYl5i zqsUMWD}D#kP=^7S2FwNM=)e91#+<0V02l^UmR4CPzK_(?h#3H?tthE_D|=lt0JuyS zI5Pz4XZyLnW(=S@S1IQfNfy|#WPP*}4POte9(wl6Id?GXsW|JE)3?`b-ky2LeLINv zCzH9+5U=q0n7(o@fV!t6#yAp>T&xxLtSGKLr$gsV0ODhj)VWgW$=SUe`4W=AsPvwlU%Kd$glv{GlgY~|o1zFHiR`2j?=uB^&J zO|quClbCTcDqP_&jAX!7Zf5=q3m+VE#E2Uh4SyUA4`nA{t z2~=wPBJr!<*0%M)Z|?z71fTcG4Y1$P;~pH{cUMnlG3#3j3S@5h#y1!jUtCQPAm(0( z`i)R&C}Q`G*G>^TA|_4>$4w^tSR!@=F&SB42;5XDRd4+pCBusNXYH8Ft$m8vc`;lh z)=AOgXgj1RnuuJ944oq-v1vZcD63MtGZ_e)98*24`>-`j5|LqsVH|P#Ev14-DRv%Z z&Hap<86%#rKIGNTFV;8K>;_7G3`F~5GGzm@SYzZ&GO!c4Fx3wpvi`9B6tV`Tn~7<# zgU(lmGK05nZK?jlpg-7*b5@vVEE|5Ks+TvR+dwW6ove_POi-+hQ%w#HXXITq!babV zR0Nb%fKO*o1!(YD(Q6QU03;m4AX#`=>MJ1H>H+8zwG)^#q{omi+wW66x)%fgnVBCG zOC1?AP|@I4NFf?kK{P<#}51tlR+KA_8t6Y)?-krq_E=IsgD507*naRJW_L)e?b5w?W%g zNVw*id!M`6rQLu`utFz zkX2WfCRK8!VUCRdVztx$`9#ewhE-KS1!69^;sdFbQ6FLuo5|20g8_Ik?a~1*(;IpNPwNRnSEbr1qBBcOZ{+VgD3 z^e_Ty^!#x%Y5I5SDw6~W!-(EhD*c8 z_}^_sh(P6|qFiRG2XxASp}~Mz;h^(J1Lh6idMpx;Ohw=-)ViG~>nnCEfD|IcoZ_7M zsYKgUAhkU>aDy-WXZxx#b|N$H-@Kvuw4E!ghjk}KVCQ;5SS^WW`FAuPy#^Wj8lua5 z&c02;X>}EXc`Q^i^aa^Z#%IS-wJUx@W!?@K4{JAVwu5zj%_vf8HUM5H zL8=6nNGKE4DgeqAh?G57!71zXBsRDOHKA{GD*?7K<{E@_MLOL&UWALp&cknyKmNG& zPAn`e6o);iudlcNmOq(H1{xb1Vb4AHgh7J_{o**#)YJrTz4aCxa>ya}Gye%~`SRt~ zdSZtic7QEgw!r6~e{R(~TUuJ|^+?-)|NWtF-yi$oADwq=Ybz{Xycp{0>frFh4~K$+ zg5Tv5qtU4S-lLB4z|bg7Bg9Htom3>xq3s0+;N`V{m2j^Y=I^*D_*KV`^Ks18G5LPy{0XNP?waFO{3LkE(ACuPE}jn^Kn0RE)domx>g z!g9t%B^Us90)Q4ENP>cX1XQCDN2Jo3YO(gP=h+Y$M+y!>;EyXxs-E-v*eW)PW~`yU zK&l!wmI3pDh$=&E^gwt(I4-=)qKYC>pqC8#n-bhfU>89B7h({vQmF`AfeXt`2P4Xb zPj*ypwev3XDJrO64fO~;?^^@3wxp`_I^~ETY#czm@SI`pR`>ZpC-vu_dx=Kkk*kq8 zFH{=7NFbl`eX&IBbY`=w3v_{RjpEJYcm^}R?o)rP2vj0h{4I0Ya6T)pUe~&Ab8&u; zNeWbfAztP0E0A3Va}xvJDFDVmIlnwvu@woRb0sjX36)lP#*n^hbEn*M6hn7Ie6I+H z2yBngodu}A4;6cYO#&y|pf=1vmffJEUz} zcm4NM&$e~ff8Rf1y|{Yg$`1^x7k!b(NMmHWV(1ep30ton(IyB6ooj(%VaF=JRj+Ns zDI$m_UZMdVSeVMBrZ|8#254td4$p7RUzsjUP8NGCV#-6n{(it~$N0v`nP^~iApI+)x!bUo*0E&PlgOS!sEyUK4R@oA;4GL1K)U5V6^)?0q43Q zJ%(7ShHv2lNI_s;9WER8Y_vXlDrz340q*t1+p=T%cw)McGdwMOt{82onFLyQX2V-z zAH^P-IB}whHbsv`!-r&ynbkhNNWiaXwgUCGxSq)I-i*Il(1&~7#fS?kODpe?ZCAZ~ z>W4iFdM?DPUO1%+9C+-g(Puw_h`l=(ce$_+_GzldwE zG(>AXO`%%gtM2;yiUDmZle}F4JQXUfdMc~5DB=xbiP0k%@SrB1%5VM&l1Z1uaNKePkXIeYX%|lNzvG>E-hsXM-rFwtWB_>d(MMs_s8RNhv>$%> z0h*heAruny?|*F);C=n|*YJlw`~h-uJkQbp-%SF8-FM&J2G_DMA3Js|^y=kJ1QLwC z{`%`MZrr$E6^ypEwF%_S2DHZ>d+hHPj7s3Jdi849d1pzq{`$6I!v^Tq>%P_OBl2 z*MFn8XT#=(7uLbLDFXYGNtw}H3JQMcT-4=ed7oq-;hGV{ScUjuMQPZYyVum$jM56v zbeUcoR`z2eChM^qsw}B|B$|jG4+f%aIF1261yLJv=#i=(Rdr%~jI4IkNipkH1$i`rdo*!JBWs3A1N=M&-Y@)z;QRRh8$% zC+%N7&aeGG8;pK_D~#x~%Si`R9s8h&zOHQgasm{1d zI1rF(Zga+U=lW1qKLM(>e%m$f9^yYLYN4V&YQU=B-rxt<*3(m|!vUdQGh`THJ0=mA z;BxJ{ulk;&S?Jht3>XQQhVS?L+X`J6EL8#MZd`sT7-Tl2#k;P+Am7=+Cr;+qVF>t1 zs5tbRR7ug{DU7rU(P{fplxfi(Ncs#CsB~%gf%flNS6iW6n1+C#hDyT^#8$@!LBLED zFVSEyxT8S5fZ=-)PlC3Vhjo6z!9VvB6<=}1P@y($I^XAx+Ib)0&j$Dc-%Hfa@k(Ee z3P1O&PsHp~!Ug#$Ee3)zk)YX2f!Nd#;X4_Vo7$(AKO+}8A6=-{iN9^r>&zAw;u zS4uT;Yjg9JewA6!X?5%CP9xVH%!H50g3j|H)iao3V?nauI`JKpW5yb4r!lH>$H~kb z(qs5q`|Jp$&cLC75LB%07ZE9c&B4fRV#t)JYpNCwr&!1^KyhVhl{I6`_W!kj%5?+o zY^l22?Vi}s4y@rb9~x}0seVb1G^E8gue%0*88NWRpt%*uJl0X2*q&E??QN`o6oa(q zUmxqoXeKk^+o*UvBd$@X)}>lg^K5N24~n*D^gOWJqTF^$nbq4GHKP~^IPs^ z!=L$8YPm*oXl8j)x%fQ(q-|Sw{r4m6wsqG(pMlnHS^ZMHu5UwedBI3?}67x;5gT~pmCGVZPn zxDpWyfkAB1${LFspDaogO%b@Ra5wEc-Vhn*0#7nX_xM^R-q=xloT#g72i8kvvbLdi zq6QpG1doS%{g^ECl3jF@0)0zGNrgr2Sp5^EGG?S?Yw{7%Yw-B-dJ<@y?elTJY51ln zSLI$yMBj(Y!Z-MLGnRa~{wLus%%cba6jvnNssif<<1TdJ}cVXq>YxeXcKmq|_blMJ>-eW^in#jw(0 z)(1ygZDZ}xn(*+9F;__REVyINakW-pByQ8w4B?iZ%53q)>eOYs>w8&^kQ9mDQ zk{$3*knF0+66XZ-tNjdlZA0w^3RTDj_mb{8UH9wNwXapB>eys~*{6@E@b*i=sBD*j z^w(4o|M~0lzrTm;y72MGAKPlKRE6Z<#~&}^fj_obEC!uAb^6uUw07-Uc=gp+f7f92 zU+Jk-DrK+N4?O;rWBgA)Bi@U{i zGQJwldM;UYGh;3X#!tdM!4(tarzmF;rx4?5^4&NctjZu;H!m*mh{XPsrMxlcd+G@Nn98L)1hb;xLMfBW0t zY*6`YDx>nDci(*%_St8j-!&NhS2}Ft#*OxRCAsi>H8G->%4n!;)G6P*u=2qPr%w<% z#y~J|l`K+iRSwN~jj-Mb-zJ-ck*a2rlan>V4@6WLY{{!mcS;YG;3vhYxw)KMt~8Xl zu1U_z@0Z^L4Bbos^L?SbSR!@?Fby}vw@UTPKKpBH_eG7TDWk6OEyli&FDg!fbE0td zkjw|7^tqZ>=WT7=EVeFRp~n6Q*kUbQ2u=fp0075)0Wd!pQK-Hqa))Xih*XqRd}?8f z2r~)baX$fTGx33-@IQY5ki4j{k$63`+8#6bNxSV?Q{7-DK8M+?b%Ad87dgW9bO1w) z;1I!QI-u7A^O=T70m75*uq)5cZmja4v2#RhCzJ?HQJ|Q~IKeVcrPT&V0ltm_+XPDH zKNFrVgt`KlmsFHi-dMM)PUc}-H48YZulRDa%O7b6CZ*Xt5`e%?O3~)>EYH%8QHjVI zir@gF_@s8eQ$u7NC^*}&xxruj2t<{Pdj$}$N-SA7+ZW>z?k+0qfrff;P`y^!y)qh0 z)Eo|kg9xxC$;s+=Zc`$1AF!$mm4>VcQZy000GKKrCpbeYa{hH?Ju-JetzVP{pj1CM zsSTGfV3!o9uJ#oivlc94TtnCUftR&XAajC3$WR)dZ?9N1Mo#by=dn=6WAT!XCZeYT z!ET$~&8G_DOBT32;yunqg*#}_FIJRPylKxf9z6_^M=@b-M*%De+?sQnCyS3N0oCRQ z^FK;u+HPaUHI=26mv?-3>k`pfqEZ{m^51OVdx-}LM87}>cV^=CS_8NIkbFG9cdmHP zE(Q(V6e=x=8xa#y0Lv?UHDD{8LK8_@73+^9O_4t-R(p`4c^$PnJk{f(Nr1eb0K)+e zJjR*>u5tgOL=GD8DPI{r+E9BtBMPkEK4(^pFM$_sX=|z)*kkaYey-E8ZQb?HN9b+q zu7BJ|KWtbEt2TT$bG^Y zf5^ie5kC7)ArH|eI9Cb+A~HwBgOqlJ>u$yLvg3ikY^xCPU0**$Y_9|vB%EzQ()iRu ztL{xOgS>gvqAC1Dr(&*UrFyf=QRQ$|UU8?nZHeZ?h|pTlWXI=WKybcd^?ayj$iid& zF-bHNn6S;-qmkYnG#tXfFZnT@{Vq|4PpW$e;k9s9%{ST@J%EWtTOrrc&clM9h^&k3 zh#8np#P|6$6A46fAaD_&DBV{IL^@;7sUdPbB5-AC*!qh~6LHRY3m=M?bm{j3zOd+# zOIJ2UE*uv=X4J6KVJo~3EjmGIy}w~T&%X&0bY@ig4z2JFiKb=0rAuGS$#m*_i^UC> zhOd`xStJ@Y8^jd3SOdK) zi;65CRFW+>$l_RTu7#du)kl?r3L?*6D$=lUr;S_Je(`-{1jO%ck3qj2SpK76^grk6 z{^w`%Nlz8*3{J43hA$D@(u}-;PxVo}urKtIVSAE01nXPq_g+B@RGs8T~ zQFxypG|3#(5^tFT2;G3-Yk#7SC1S^kY`$n25K`gR%+{B>2D?sn*)4O(c{|k86U*`D z!pI5Q(W@wv=|zl9GT|;+x3E{nb#78hy%Q?-;75{)PiB&nk#Up2R#EAV1k{F%-3^%K z?baTRky0R>Mt^>dtz9&d1J3SjTvzEpBtw}60SKJTWQvq_Ua2Ulu-R@AyD{V* zA)Lg@lFA1K8f*JQ@peR57-VljB!NV6MX|tGa|+$AGkjG;QMgq(Y6cRd*nw*ubkG5 zYZ>q%KjC1j6K?7<1l0M#{A(nT%l4^Q2@C?3z~4eozqFbW3dVvlTau8eZkPT~MCJm+ z8lMAJv!-T}(m0M8uJ@A=_L%jN{gs0K4D&m_-A$xEaz1LP((GL23kKCS)g3~Hj$md{ z)3wiz)s!GUk(iZM_-;j3DN~Ytpd_e+QsZ*9@SsF36B#Bs5IEOAW~?E0Jb~F607ZDw z9#g93p!6}sBI*>H>yPjD`AtOs!Yp2@u=1IEo_Th{=@afjCm4H9I<%pXhL!Y`lu1!2OU`F8uujhIB;+IXn<%#?G@s0TUi#i zJYDY@iJYPUMt`~L&5ze@T08H+s$+ga5Bd4n^>akp?=^n?yS``Jy6g8{cU6Bn8`f@I z)qLoVr|+v+T?Yzg_!OsDW9&?3{zHyKmkM9pzsDlxNT5bD^4f4ocy25a+mncTIT~Am zIVFnOqI`=$+q)TlS47oJiXX4)TV)gdSw8rUtYJ>h=A8G_g=w*0X;28mT&Bka2_gwK zVkN5BHNG;pd{#J~THzP~`poA}3g_KHbu6&@4$uTcC7$x{;-*DIj8QiOsQdlkR0LlG z89f15En&qK3e=}eW{&{m%uR7>6f5o`!L@we^6**Ri2$#3RFSupQiPoq0*Q*fW?cnH zhbx5n9mjVoG#HQE?TOBM{@p@fkiJtI3ep+(DXG+or#7ePRsej`7caBpTfFvCW*ni7 zK22y2-nQtajNCJvg-~}GC+58J?S03kP1_87d+|$OE?E9n;Nk=Cw5mQbh!W!Y8lB6_ zOUm1c_OXV@ouEL4O2X|Xot7_xoLgB^HBCO7#UkH>3O}nX`H^F46>cSqO!VZ?o*s!+ zB<7iEltGf}sSSeLPcRXg0nFXQrB&x;_uZQ%5CzUt#Gh7Vp(YZkBl7?;o(=#%?kkXr zS+iy>-gY*SWyJ?=YHiH@{JU3X4d_v>jvRUNFOEU~C>Rx(u5c!W!zkQPfzJsfS1L+N zmMj6OG#+rk0noLpCtWTO3xVzmTvV#6vWV^6xifU{-W~SccVD~D_uqdH!Z*#!%d@;N z38qR)N?_QqVbHH%KMM_xL?Vz(CT(R$s<%7txTCG!{?fU~LR6Y8ocGvc571hJR0^d! zBMFsgEb!&J8X6kxxeEN( z=a5PjRv?YC7?xv>968cLB&EqYfAh^Z778ubET0uvvjoMzbS<**7p|uS4HG9$wAbPH z^Z4=OVd27s7CPFaM-O`rUAlC!_dp|7QI+ zpz4}?gNBpgbXth$Rt1tdytFJ`IuU#Lzd}B)^^yu6Z_AWo-7oY!s6pYIAE7e5d zFn;jC2XNS7huOXr2(Lh3<^Sa0<>lq}xYCC+X3Vf~QK_m*^|gQh{KgtsGOXU%0B$q+hST`fB@p$u;k`+iq~X)wN zkw+eZyYIf+jx+Lp$nz=zwd^af`|Gd2-f~{0KOcJNAP0$riqQvso80CH{~R5Hjeay&jNPY{1e zsj7-HyoGln4k1JHeP3?R>V!{Zg-vZv+ugz;vb=JFfm+0W*gR71CzRun^AK<-Azk7J zyjB>gF)BB)l!31d7l#{T@z^8@mQhJ!0QbqEoJTU4I*btNw9*c+8BkFiwhG14M5u#V zU*>9ackjLk2jGSNy z_F&}O{fcs3qHb4W_arj#gx{wk#sL76khqWu7x+qMpi? z|B|MuK9ta2dwtEZjCiEu1kUcr-xO%G_}dy|DwS62h-iQ@<{|Cqks8@CgsYW;9a~MZ zI@ie^qd;}>1&=&MU$_vp{w!1!dZ0E@yQ^Y27nFLoBq7wo>c$84{aUuQ_@p%zKiYB7Rf(y-p ztP!mN;aS$j>kcNMU0Ctba8Y<3Ah4X1j2kY&k*N4vp`v(m;5Q+qf(N@qD-JUEp^?gjcx;gk2}VC(M0q#X8wQdy$6_7Rkl68_c^z!n7lCAB@_NP8=gAM|9VI09@?Ec7cl`R+Rg-Qw?tz1m$u?}}YoZ5yPg^c{xQUe% zdC=)5*p!$gLe+Zx`pI4WBF(8gpeE(3nb;0}pP5YO?bgyO@&4J~7{|F5d!&Rs*VAG0 zCU^-fE85CBE^u6MWb%~S)hZim(w}<%H8L1t%_w4p{*D(a$|{^UTWv$_{^-GDrSCBr z^92Wt9@BM7?2_Lvy6?}U2JNGerQ6c@dyC@Y#fu%V0YCx86%P-BLElda(B#1=0!8#_ z0+69^4S_d;;3JMW!u>3QP*m~GKKpD6g1`Zzciwr&fjs~$06I_u4?g%{2P)UEUr&!c z_Lu{s2t2nm7X-%$gaIrOSo?uM_NA9za{B=I!kpsqxC@N^Ko2Q?#{*@22SM-VU=)BB z6;}Xd^pN6sF=zbl(@#I`fFlOL3xEK?D8M29hGPL3Z*Fd;XP{+_mxpEz~lFWxnb`3eS8OrfOI-dPdxF2 zn+rfZ{*FF7><8xwVm<%_0MqE1Eh;Md&aLy!rWRW8_HEQH+VigmRi3uQvW2jT3#I@r zl~q%OZN!9jjt@%eniE%%@NlIA^wT&oll-bCDTXRM>@NA9s@&SrYzM9i-2j% z%vYp7s4UC#?sI`Nhl*62a9A2Et^SQOPcE?IiA8_(#Y@*28#?i>?+XgP4~zmB-get< z4x|7$A~6D>Hf`E80&qe5MbZpx^xFHx5+d8NZn&2Ceast4A?yeDIi4ASc>EprIVfT{Pv|Me z=Q#J+HB{dx?%35vH)F}jZ(E37)1rB^gk=z9Cz+K*}zQx9Po zV2yn$)0p|Z`@q66Axp{z_G_KdV^l^x1|`u{V`2&`J*+d@c{P$aOBxcRt>Ozs_$5z! z{A%4-+qSlEm?P|ZFT1=f;j^ikMhU4e;K7UEM)gftN`)l_aW4q<6m~B>fQWVzlBCZp zcWrCKQY+j-Or=%*tA3sJbxY2|JEyXw@>)+n%F;t^FL-OC;;LcUMABf0dw8)M>=Q3) z5{ikEhrD8TmmnY0H=tWW_yzP%BH5GKzUQ;(%hoI&*qKpNNZ3Rok-4C!rWzLSCraYm3uM&&svf@by%89mKJ(&@5FUXc!#j8&yNq14ao~w$zIlytCG9*upv>Q13r#f ze*>Rccv9v>cuvOK2oeWfw9kgrcw)Qv`m&7|?ah0)=TurRGGd;rF0bxN7&scZgyV_0 zK2{ckdaWc@B#z1cj@0-n=aS|n)gopxhy$_yu`Um0*y=D#xnlm*D`h5DCiZ5cb7IG|@XrHQ4-YTR(%up)5=RFSbxKCeGu36)ZgE2&w4uzURwy*a%=-=y zZK^xekl8~MwYEh&Yr3ZkPq)nbNm?f5TevtNYw6W`JBc^yZm-(Es?x9- zPnPQPMUmXS4=V!k{>LaK#B~m+j!%_n*hsxGP(r*cx~J<8jwBA3sE?h7aU~ z(U*<)ts6*G646+t?L!sCRj>Iw4L-~)avD0Plv2OQ*i1Jq`i#(oNu`}o-hxk?6WbY5 zXJyFzMw32Fj3lcDba{!YRCDS9r6f^VQgzo7csR3Y5!#lNS_ZMPobA#%mhFmSDZaO? ztZY;6JrWl(7c%M3zufrceMb#Fs?+Hm1nb9=P$4TR=*IN$kkYDVXTcKPfOptu-b-}R zqD7IyfrThgG-#qqVfBWP>=j{pHDf6Qdl;2b3s8YXQZ(6=M3JMPEwnd4zXWrrU-8K> z38Lq~qu#Q8QYqE0g{QzZrJ%LoP7heK^G!@5;&?@A>|$mPUB7>zPh%@e6u%4sHb=p4 z;=6>UD?VA@l=z##^g*(6bpi&D{JRW z$cg*=EGE8-EOKFw!r3gc+>0P3mM0G6D376#ewp7ai|v=Rq)s)~o+XASq2I`Hq*)y= zR#uayX2>PyUTUKQ&HEcDixR)%=^~%5PE=$TU1u|jNwr2+E8AAR-a zhXeZz*`>J0mi?~&9!=L%UJ>viaPg5sn7{^|<4XbJfkw!6<%f^Zj7X00=%YfNiiJRD=+CV@?1|05;ff z{`En{Zu4Lqe@}-U^y#WkA5zRu#mcMy?C$-BMMd3Iw@J)0K&fEnpyY-ipZe0zS!6}5f0d&wV$?M! z4iix*`TdQo-Pwu1^zMv+dPbuAik6o?Yxv-efCGr}($Uptf9L+lzn3=`F!F!%lvmuV zs6_jL^NH*3!6^QY`xMC&f4}3r0^ngA41g^pV?21n=MV@3#TMIwvIP~`{Cfr!S%4-~ z6u)mS_#Wnl>y$r`%s{mh-vu}ZFh;@%U7S%87r&m>a{~lhzT7+rqwAb{=an-eD)!{-`n=8qgW z(s^H_UuL!Fv08D)Sm}UZPgWF(j$)-2dl8~{m%ZDoSI-_3g{0V6xetAg&PP-6@ygo3 zih9+*OA(MU%lT;=-Z`p#RF{QIZA0x@0jndJ?VO6T>IA$*K~W~A*E}0Tv)%!fFCFMw zk?_PE5Op^ogsD2x?e|KyZ?`MkQ`ell6+ufyN$k3=^{63nA}Kyv2XsGx96rw`r88r! z4Vx)YYvU#HC$mCt_Izj#TA>$xzhbH-N$f zl|c~v+$r;;0%GZ0o3YPS56Xg82M{@PgUGiEj@fIHJlTp26X8a$l<9k%RhIs`6xH`d zixw4i8`$lBA$ijWzDt@D)fq#V1X_JuQ5w77?GM$0O=hCt{uX&KpGNGezqr?|-)2Fw>r?fugUYOQ$=gGZA;TXYMYD6qHd!&L)=C!hA=*g-h16 z*Hx5PvSkhL)Kp9AG_f*-gc?Bo#e85DM5LxF8%(X}U*SZNa8D7-3D$;hRrMd`53K>fu4#Z2uFt4rc-9RhlA?k0=|_ z^>TA7z&_?jl;trdZ6{X`uKs-1 zA1+K37WDWd&-~+s6Up#tCy&1DO%5omEXg;hPMpSy&xiyxeP~WOH`TQGU?FvRMDeY| za}^-?#1Zi!S_k9tLck9?WxM9OSt7PD+FE#>dzm-YRtX1Ftg+AK8&tcSX+`oN(u9Cw zD*7%Ud=O^Bam>6DN_IZO+?8D=Zey0@h~oIG?)xi~+p%T<=NGHWsvgSDNp%;Ijd;;~ zvf`6rL;4MQuxCNfEvM)H4qe3ESj(03+9IaIKS$dKUV-O1g-$W2%bG4`>%jeKW9*C zQLV*(0V)6#L2dLv8UPW;4w~hb#`hfyz%%HCn}bnQ%)EsTD4b6{^^`kiRH?QEMmOIN zKoY2-n71FEhU}98*bmN?2Q>h%sBEEn$m zPAOCPR4sO%rSdQ@MHGMXlb<+H1zNBJv-e;+kBQJctZU zC!uKor=P7!4C)AZrY25Sl*aDx_nxD(>F^q2j*y~T5j=q{WsOBYOkw2!7R(;gJAdJoiw4E)H9jy4pgt zC1P&mR^Frw81IihT1RGnhXM@GUMr_t#VeFm+g6lT%&Tuo94X8rnRz{^zqrmYtfx@s z1kCe>m&9E1)oC3FPa~m~@jS0g&9zXRC5v_l8{Ro|36)>w)XQ+H-wK|*~Ywr90{gRP7squz`S zh<%)Wza~zyq)vo*Ty%u8wEdqHj|CXgIMvj zP{LbBmW})?l8>F~&M}5f5D{KBB4-ok-nqj4o6A;B_H6~pHOWfK$jz>2KDQl`Z^Cl3 zSOHzyVKjF>@y@hztx~})Uh8DmA1+)xxL@4xjOWiksZY0lHyjc>`-50%>>{5Xu3cVx zfR3meB%rDBTy_(c%0THkr1`$e;z}1;E^S%*qfj!J1v+wtFU`6iZAf0O6vwq~zh-#< z(W|pyk!CZiw>GzM$z?w0uvPb<(LU=9nt{j9M)csUDqS@n2VUD;yO$z$7+L#`3W6{E z9CAEsWN7PSrLjAbjf+oFq6UZ}D~cB=R`A3bGi2K#-3p_H*KaW@{1+{X*f;tuQBCk* z27Pj%#`&rm0(J!Epv)qmMSzL_c|n!UE2ny0K#&wRLW6d;Fc-%O@T+KWk*)k{Zia_9mr% z<;~r*baR?uLivqX9m_2uhr@#|h?qA!Lyh34o@ z1n5Tc3Y2>YT;vZVJ8&QVcfhE>UPzRHy8DlSQ3#n~&B0v#K!rLMi#cjOe0~3EF#5;w zR9UvmF%{eGw~?$xkH98h;dJX^^O9;S;UT!6wboxjCLR?<^e)Cr;x&ne#5r0?BLq}X z!PKO$X5xDs<+ml-gDp>ElI|h3&8sfk-5G>CMN^UeS*t1eUZBR9i&(Lx2;B`2UQjMo zpbm@L=o6jPiLCa!q-m`do?yjh!qCneH7INCkyw)$#37F*OK%d>J_Qj|gQ{$z;ggey z^%+X5*{J4XTgOJQs+!oQl@7iL!?1#d6QpUkf}mi*(7r>xwFmr0&*OmKjuq$8L$h?{ za;U&}+RlX$73sy6VNSlfN4H*g0RX!>H78Ee!u#bEVqZhwX+R2MW-N*uP+@f2IfY!l z%@VzmU%7-8fLJ@phPtwfh%F3Kw*yJ5PdwBx_y=+Oje9d)5rm9#kN^=%J~G zrG9OCx5ytc|l)osjbK2#_nwxkQybP-A$GB!9WfuRwR7 zH6`yCq1Jd#oX7P-N5W|k@v(*UGhbP#Yf6A}yDN)%!GmyoKL=bdWT7-^enuI!*0Q-v zgns3{II&$;ATo0o6TcTLivj$);roeM_!CQZ2Vzl@2c9ULMzy$|`UBFRB z0%eTJ$n({MvH>Y9FGy$~5xMQj@+X&`zWVfu*+hh$H@si9^Bv6HXYfB9t64s^LIZ6Z zJ*Il7VGt6tS$5e1^d7&r;=R5-gYNgR(4Q-E);rEV$Exc{DLmgl^96}SbD~-kpVBMZ z{gTpN1NsIEdR6~<{JqNPKUxHE>&(`;>;FvL)v)eMdTZGWH|t2jBO}Upy^2JEJ=T>d zb5zn69!Ek0+474JrE?YjjG$JtT@aB!4C_}_kIJL4tWly2)?@U8`a2Yg;bdhG^g2qT z>iuMg`bg~z6%`sdCGD)iu4mDG!5!x0-Ik4!2syLGd_c}z$q*&92y1MrB{h+(#H^J&^I02U9R*s=Wv%Z8rpkF(k7427j#Zj-f5@H>+M`1{ zF80aCtoR$=#x1-B%s)8G>j8ji|hAX@Lga6|`G#Q-kk7R0yCC)sXxFK^O%3=vl=;#RJ=U zfaZG_K$FD0x1^?vJ~pqgi@BkCh;0ErP$h*x6MF1?KP;-k-W~_Ph2R|2zke2t=J)0T zoS+}|%rnn)eZ2n&7)2EbRV`GreBU6h7mfwz1Hk>C0i)~MRztwWc7|>DUw_O4m-s3O zi~TdihH!qJaD=97$*8}?`p3F5-Uy0FI2N)zr%0WR%yuM*Yz#S^z#_~AdS1o06<?CxK_LZGzz@*IkqE)P4{(HkqhjfOdeQR<5a+9o_#S{G zD6bG3+7f^RH6G8IXCL4@09OEgs2b*vn{K+vfmTq-F#y1jarR)?_lyFtV%}R)(?xGK zk|3z+B1wd21l!_S02LN<#CqcUVUc|D&li3Rlw_QPe-?});PTHiDCkJ|;5i4=0mq5? zy(?ZwA%y>Kiz2CP~CG#Gt;Jnb>`h>HjG9@?GJD<|}U@3+ZOB!5gI z4aD>fvd&PK4zxM~i9!l#A5xS-MitwJHZzx4ejCfJ@Ab{eD=cx9vg#&KHgUb2rIDgb zl-3tl6jyxeo`>c{sb+PV2o*%MeHeiTXl05LYhqH8qiO-5y=7?L6~bh{V(!CE5d{mgoV zI$vT07>Z?E5w)SRtP-M7g7<4C?3|5$)qMZ9B`X&XH(Fhf9$Qd=bM_^t!4@r)aBs2F z!NQvq(>|@8ZNG6lt|0&bAOJ~3K~ya&C_0!FE%80?_`SNuj~_fFeq=#SL?-=pHbHSWr)x^IoU{&7ZHV&!}E?8ghzhsDnNWv}kVo7Sb*-H3J! zzeb>Mo`@=0%sYs~AoQk4O04Cc=%R88-Ys=US+YgSniaxoR8d=xnl2yWro`#Qe7Xr_ zQozAB(rJEVg=$%I-1lhaRIyS0fn8r0H8^WMCBw9pU&4YfyB4`h;YbN(gJ{{<)pFRF zI8CuSGoawg;bp^JqSX~Hh(=qc6`H7fXymIva||Lyr7eArk&q-dAlsvkcZ^o*dRFQ= zFI47!&)HsY}R=nlXT&_+?qX5Gp+T)gIT(; zoLU&6NxsU9Ru7yD@R` zi^)f3c4ju!aLqe&?_b@za`2SH?{H>=$>gg&xL?0t2r+s?oNp+o9;v3pe67`riju5_ z%c6!w{kn0%y;c$YX}Yor4h&j*AqQ%9*P_^1djpXw?r7_n?&(n9-ZaVkmGGw(<=KOA zfd<)rmbjlWrUr`}04Hc%@cSaNo8slwUFv?R#?%aA+jm>rcj{WTwn{_}AVme5U5rE}q@;r@Tah7B%Agm?)AN%Dv9Z3N}egGT(__cES( z>Zz_*4g-}61ljmE(lGcR{@eH3A)o|EgTN2=h3XFiaRk%&H-dBYkYbTWFCBt*Pz+IB z#eZ*UE?c7LdY@4Q=pGCM2%<6yYOPnh1w9f#7ux|C14v?y_&xNnVvz(`^F5OQoT#jz z(u;lIyrG)wfdDF`2;>pudH-d3gssNS&%s1Z;s&c4QV=i7D7jwroLO(7B04o54?-}*f7=Q_{p6c(7 zA4e(rd0ILy6_Rd5ss>^nsA?(|xy-U$2Xk_KH%p;tADc1ejfmE}K>5-&mS<^$$1wBP zk&?*6ZOv`{HR;(T^q0RiFIs@!)*c1D>B#tZtJHo@xL*<)IZMvr(h3Y`zx=^IuW2>5S@&2cYd!mwuLAbdPWbbJas{zZe^cXp?a@W3XjhY(PPo`ub4Vx{i}YB z3KpnzFJ*dmj2Bh|l~TWhxjBvj+oqaR@H|~E zA|rf1D_T2(Ah=Ok`EzCetn5AjMwFt+Zft_#I4dq-k!>wOIWb%m&-H1-b2Nws*D9;l zM4}t!c*Sf4CB|g-bM#c^0H;7$zh`1)9n0!l3MLcr_Mx%!z3(MdXPF88l<&pLs+_7K zgpGt`2$PtN8#mSLIW()n?KB*idUP-Ce(estLkB){o~J=@3kfZ*>>vMmj_N!{Y4wy1 zGsyDyib&xr8Py5D%7kbsRYJBh=PBp*yQ=PdG4`Nnq~PK%0jiedzHDiVFx`$d2irN& zWOxQEX|Sv4RK&(0%=#L#)W>SN*(d9A_B{t0GIx5~8v4hC%=wln zO-#@EDmO$nL`e}@>S2p$0faviO^MT)=yVg>iC%=r*_AMj7Rz^ep(R(9Aae?nS`7NJ zUwhtJ{!X`Tf}Ue6Z0CsHUsbp2uf-Mp=4j?`Dspype%oYo?e#3&FIHAH$$z%2aanOE zb)K%2T4BjnktK-Y?Or76cO8K}#u|E`nR`N+xw544(fa1(7*Xm|h^e^qmsQF=KOp_v z;boOCBQ7Jd$I})pTu^Dj^J$reNvHe<-Kb;>a++in(`i$Av6hz|4Pq?xSD4HDKEvf^+ulvbybBqwybGo@3y8QODb_C@I|SQ5urQhSl2PoNT=)eGQ}AlM0$)hc3LD7S!%?Lm5h8r0qtyZ?6YjrpN}D;XTad; z`fc=1T78zW=C{6bxwvU@JP>uH*6J&3MSF`gC%D9N35%M8_6fI^!g++~7!|0LHMT#6 z^Z`fs5J}4d3TUKKYG9Wj->SND8`_^S%ZIVDsxCG~PRQvH67yMQSyfG{F?9s99B+vp z^KiCyp4mef3w?|$x*0oGpp?1%RbG&X#ZXa3=$@sQoU;n)XUBXFuI zIbSJS=|N}q;-qGfm0tNiQmLlIFNkTG&ycyB;G6m?+ZkTZq-&s*m;G*Hydt%45QI}f zdCFgfl8v=a{2*3V<)R`in4pj_b8i)9o~#%+%4NM#X;sYI7(=#?^r`9Jzki$C9*VxK zMs?cGt0NNW$BIuD5+hb#M4ui63PO=it@VeX>Asj)I9jXVq{|Nej*_vP5@@RkI#H2A}0t&@i~G#sI4ME2Y3V!0|@hdcAy8M8VHdW z1itt?{)gZe1A!`nTm;nE2Kxc10*FOl9{LrxG#6C(Fb`Cq@&~|$uacnRfjNWD3&7!p zhOj*XT2zI+6$XNTfK40|=8O3ti1p_N=LDe4gA4yM0pP_PQ6)t$n^zYGm__vkl}u0@ zL7l|5-*;YdEwDZQj%_gye1>2j^T9a=C<1^4$nePl>>mL$juT=`n8)V(!FK?15UgW6 zRFeUUF<$@)0BKaha9wadaXbJO09z2GLiNk{thyIz`&zp1^&7*8E_mq3>M?{$Njz5t zS+?fgUYSgfnO11Ss_%OTAA>uv3}?|wt8FG4^~az=qZt9fJyK$eg2u)|!m`f_f3DcKR8KEUPT9y8X|I zN2Rr69rY^eONUox!A$@yrE|j zwkJqXK-dRB5I_vq3HLY7EqW?p6@o;Ezdm?|aIP_MZE+vtdZ2O-aD_wxDA?$q1hscd zbHV)paE1Bj56r;>H&khHEkWl6W!wu5VS6MxkZ8egBH4rrBN7@oR#Y!>pJ46)j-a># zFawl%W&xgmJPWutkSxJE0m`sf7e=KO`$A#_i7tR@Z2NuZ6^R_2Pp~ThNb%pEf{*#( zIPg5+xdedp$pQ4DgL2%ze}C7s(YUB+~fFhU2r~e z&QV>36%5WLdV#Ti_|cx;M0dP2g(}PUcx-6-u3gq$Ih(Js!qO2C>n}Eby>O5ow2kh; zV-yF^NSH3O%sZyus9#vTTXCecsB{h#17l^epJLzejbtUK8kPsEORKXs8re3Hn+)5> zyp(_Todr*6IYfzmprX9ub$sT)gyQv1u}i2As75YZF0``>)bsgtCTt6E$;9Pks2=^S z4!l|WQx>ZAs?}e7@oHgfVZX6jvm#L&AfL}-y9p`upRV*)GdYFXtBGk_rGlUOzPxNt zr#-<6hd~hh6&5(D#@ey0)M!@vVGoW0f+G=qIg$FTy`+5}ROKOTB#L%JzY&1E-)EvB zF;Q#YB`Sqi=Lu)@N@qG|iST-?JLRj(yCI-r=C?$oJKnK&$G z+0ILpXiq5aYpr43k zPMH?pE-SzUamCQeVNCpx7feL26lVl$_VV@V_4njgX6hOe=UC?LwUQKCCF+`z(}lRW zeMS3}(W6Ia7rboDbBVQfk01yx_2(mZPR?U;y

H<#i)+fGB>P4DAbQwYGYLRd(+V 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� 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

(GlX=eVsV4wLptR{flh2aScaSz*KhGM)2nNAa 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

A>F!{mZ5d$+jKb*tl{ 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 diff --git a/rfcs/0006-cdevents/README.md b/rfcs/0006-cdevents/README.md index de4bc43c..fd7dcad4 100644 --- a/rfcs/0006-cdevents/README.md +++ b/rfcs/0006-cdevents/README.md @@ -1,9 +1,5 @@ # RFC-0006 Flux CDEvents Receiver - - **Status:** provisional +This RFC proposes to add a `Receiver` type to the Flux notification-controller API +for handling [CDEvents](https://cdevents.dev/). + +For `Receiver` objects configured to accept CDEvents, +notification-controller will verify the events sent to the receiver's webhook URL, +check that their type matches the expected type, and trigger the reconciliation +of the configured resources. ## Motivation -CDEvents enables interoperability between supported tools in a workflow, and flux is a very popular continuous delivery tool, and consequently we have received many questions about implementing CDEvents into the tool. - +CDEvents enables interoperability between CI/CD tools in a workflow, and Flux is a +very popular continuous delivery tool, and consequently the CDF team received many questions +about integrating CDEvents with Flux. ### Goals -Integrate CDEvents into Flux with a CDEvents Receiver. - +Allow Flux to receive CDEvents and trigger the reconciliation of resources based on the received events. ### Non-Goals -A CDEvent provider will be handled as a separate RFC in the future. - - +Make the Flux controllers emit CDEvents. ## Proposal -Add CDEvents to the list of available receivers in Flux Notification controller. Similar to other receivers such as the github, the user will be able to use `spec.events` in order to specify which event types the receiver will allow. The receiver will also verify using the [CDEvents Go SDK](https://github.com/cdevents/sdk-go) that the payload sent to the webhook URL is a valid CDEvent. - - +Add CDEvents to the list of available receivers in Flux notification-controller. +Similar to other receivers such as GitHub, Flux users will be able to use `spec.events` +in order to specify which event types the receiver will allow. +The receiver will also verify using the [CDEvents Go SDK](https://github.com/cdevents/sdk-go) that the +payload sent to the webhook URL is a valid CDEvent. ### User Stories - +Users of multiple CI/CD tools such as Tekton and Flux +could use CDEvents as a way to enable interoperability. -Users of multiple different CI/CD tools such as Tekton and Flux could use CDEvents as a potential way to enable interoperability. For example, a user may want a Flux resource to reconcile as part of a Tekton `pipeline`. -The Tekton `pipeline` will fire off a CDEvent to the CloudEvents Broker. A subscription that the user will have set up externally, e.g. with the [knative broker](https://knative.dev/docs/eventing/brokers/) will then send a relevant CDEvent to the CDEvent Receiver within Flux. +For example, a user may want a Flux resource to reconcile as part of a Tekton `pipeline`. +The Tekton `pipeline` will fire off a CDEvent to the CloudEvents Broker. +A subscription that the user will have set up externally, e.g. with the [knative broker](https://knative.dev/docs/eventing/brokers/), will then +send a relevant CDEvent to the Flux webhook receiver endpoint. ![usecase](cdevents-flux-tekton.png) ### Alternatives -Certain use cases for CDEvents could be done alternatively using available receivers such as the generic webhook. +Certain use cases for CDEvents could be done alternatively using +available receivers such as the generic webhook. - +Adding a Flux `Receiver` for CDEvents that works much like the other event-based receivers already implemented. -## Design Details +The user will be able to define a Flux `Receiver` custom resource and deploy it to their cluster. +The receiver takes the payload sent to the webhook URL by an external events broker, +checks the headers for the event type, and filters out events based on the user-defined +list of events in `spec.events`. If left empty, it will act on all valid CDEvents. +It then validates the payload body using the [CDEvents Go SDK](https://github.com/cdevents/sdk-go). +Valid events will then trigger the reconciliation of all Flux objects specified in `.spec.resources`. -Adding a receiver for CDEvents that works much like the other event-based receivers already implemented. The user will be able to write a yaml file for the receiver and deploy it to their cluster. The receiver takes the payload sent to the webhook URL by an external events broker, checks the headers for the event type, and filters out events based on the user-defined list of events in spec.Events. If left empty, it will act on all valid CDEvents. It then validates the payload body using the [CDEvents Go SDK](https://github.com/cdevents/sdk-go). Valid events will then trigger reconciliation of the resources. The events broker is not a part of this design and is left to the user to set up however they wish. +The CDEvents broker is not a part of this design and is left to the users to set up however they wish. -Example Receiver YAML: +Example Receiver: ```yaml apiVersion: notification.toolkit.fluxcd.io/v1 @@ -102,26 +88,14 @@ spec: secretRef: name: receiver-token resources: - - kind: GitRespository - apiVersion: source.toolkit.fluxcd.io/v1 + - apiVersion: source.toolkit.fluxcd.io/v1 + kind: GitRepository name: webapp namespace: flux-system ``` ![User Flowchart](Flux-CDEvents-RFC.png) - - ![Adapter](CDEvents-Flux-RFC-Adapter.png) From af44bae62188a1a1e9d9425363288ffcc248db50 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 13 Mar 2024 20:15:10 +0200 Subject: [PATCH 751/818] Mark RFC-0006 as implementable Signed-off-by: Stefan Prodan --- rfcs/0006-cdevents/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rfcs/0006-cdevents/README.md b/rfcs/0006-cdevents/README.md index fd7dcad4..e7017768 100644 --- a/rfcs/0006-cdevents/README.md +++ b/rfcs/0006-cdevents/README.md @@ -1,6 +1,6 @@ # RFC-0006 Flux CDEvents Receiver -**Status:** provisional +**Status:** implementable

A>F!{mZ5d$+jKb*tl{ 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 literal 0 HcmV?d00001 diff --git a/rfcs/0006-cdevents/Flux-CDEvents-RFC.png b/rfcs/0006-cdevents/Flux-CDEvents-RFC.png new file mode 100644 index 0000000000000000000000000000000000000000..8d49225e5cf4f4469e77d052872bdd4423e5317c GIT binary patch literal 39957 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 + +**Status:** provisional + + + +**Creation date:** 2023-12-08 + +**Last update:** 2024-02-09 + +## Summary + +This RFC proposes to add a `receiver` type to Flux that can handle CDEvents. +The `receiver` will receive `CDEvent` events, sent to the receiver's webhook URL. It will verify the received events, check their `event type`, and eventually trigger reconciliation of the configured resources. + + +## Motivation + +CDEvents enables interoperability between supported tools in a workflow, and flux is a very popular continuous delivery tool, and consequently we have received many questions about implementing CDEvents into the tool. + + +### Goals + +Integrate CDEvents into Flux with a CDEvents Receiver. + + +### Non-Goals + +A CDEvent provider will be handled as a separate RFC in the future. + + + +## Proposal + +Add CDEvents to the list of available receivers in Flux Notification controller. Similar to other receivers such as the github, the user will be able to use `spec.events` in order to specify which event types the receiver will allow. The receiver will also verify using the [CDEvents Go SDK](https://github.com/cdevents/sdk-go) that the payload sent to the webhook URL is a valid CDEvent. + + + +### User Stories + + + +Users of multiple different CI/CD tools such as Tekton and Flux could use CDEvents as a potential way to enable interoperability. For example, a user may want a Flux resource to reconcile as part of a Tekton `pipeline`. +The Tekton `pipeline` will fire off a CDEvent to the CloudEvents Broker. A subscription that the user will have set up externally, e.g. with the [knative broker](https://knative.dev/docs/eventing/brokers/) will then send a relevant CDEvent to the CDEvent Receiver within Flux. + +![usecase](cdevents-flux-tekton.png) + +### Alternatives + +Certain use cases for CDEvents could be done alternatively using available receivers such as the generic webhook. + + + +## Design Details + +Adding a receiver for CDEvents that works much like the other event-based receivers already implemented. The user will be able to write a yaml file for the receiver and deploy it to their cluster. The receiver takes the payload sent to the webhook URL by an external events broker, checks the headers for the event type, and filters out events based on the user-defined list of events in spec.Events. If left empty, it will act on all valid CDEvents. It then validates the payload body using the [CDEvents Go SDK](https://github.com/cdevents/sdk-go). Valid events will then trigger reconciliation of the resources. The events broker is not a part of this design and is left to the user to set up however they wish. + +Example Receiver YAML: + +```yaml +apiVersion: notification.toolkit.fluxcd.io/v1 +kind: Receiver +metadata: + name: cdevents-receiver + namespace: flux-system +spec: + type: cdevents + events: + - "dev.cdevents.change.merged" + secretRef: + name: receiver-token + resources: + - kind: GitRespository + apiVersion: source.toolkit.fluxcd.io/v1 + name: webapp + namespace: flux-system +``` + +![User Flowchart](Flux-CDEvents-RFC.png) + + + +![Adapter](CDEvents-Flux-RFC-Adapter.png) + + +## Implementation History + + diff --git a/rfcs/0006-cdevents/cdevents-flux-tekton.png b/rfcs/0006-cdevents/cdevents-flux-tekton.png new file mode 100644 index 0000000000000000000000000000000000000000..72223a0a1ee4660d54d969689f4c735c856fa9db GIT binary patch literal 665010 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